aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJacek Antonelli2008-08-15 23:45:42 -0500
committerJacek Antonelli2008-08-15 23:45:42 -0500
commitce28e056c20bf2723f565bbf464b87781ec248a2 (patch)
treeef7b0501c4de4b631a916305cbc2a5fdc125e52d
parentSecond Life viewer sources 1.19.1.4b (diff)
downloadmeta-impy-ce28e056c20bf2723f565bbf464b87781ec248a2.zip
meta-impy-ce28e056c20bf2723f565bbf464b87781ec248a2.tar.gz
meta-impy-ce28e056c20bf2723f565bbf464b87781ec248a2.tar.bz2
meta-impy-ce28e056c20bf2723f565bbf464b87781ec248a2.tar.xz
Second Life viewer sources 1.20.2
-rw-r--r--linden/doc/contributions.txt17
-rw-r--r--linden/doc/releasenotes-where.txt5
-rw-r--r--linden/etc/message.xml7
-rw-r--r--linden/indra/SConstruct85
-rw-r--r--linden/indra/indra_complete/indra_complete.sln58
-rw-r--r--linden/indra/indra_complete/indra_complete_vc8.sln46
-rw-r--r--linden/indra/indra_complete/indra_complete_vc9.sln36
-rw-r--r--linden/indra/lib/python/indra/base/llsd.py12
-rw-r--r--linden/indra/lib/python/indra/ipc/llsdhttp.py31
-rw-r--r--linden/indra/lib/python/indra/util/llmanifest.py2
-rw-r--r--linden/indra/llcharacter/lljoint.cpp9
-rw-r--r--linden/indra/llcharacter/llstatemachine.h4
-rw-r--r--linden/indra/llcommon/imageids.h38
-rw-r--r--linden/indra/llcommon/indra_constants.h9
-rw-r--r--linden/indra/llcommon/llagentconstants.h74
-rw-r--r--linden/indra/llcommon/llapp.cpp24
-rw-r--r--linden/indra/llcommon/llapp.h5
-rw-r--r--linden/indra/llcommon/llapr.cpp2
-rw-r--r--linden/indra/llcommon/llcommon.vcproj7
-rw-r--r--linden/indra/llcommon/lldarray.h3
-rw-r--r--linden/indra/llcommon/lldefs.h11
-rw-r--r--linden/indra/llcommon/llerror.cpp57
-rw-r--r--linden/indra/llcommon/llevent.h7
-rw-r--r--linden/indra/llcommon/llfile.cpp11
-rw-r--r--linden/indra/llcommon/llframetimer.cpp15
-rw-r--r--linden/indra/llcommon/llframetimer.h6
-rw-r--r--linden/indra/llcommon/lllslconstants.h1
-rw-r--r--linden/indra/llcommon/llmemory.h27
-rw-r--r--linden/indra/llcommon/llpreprocessor.h9
-rw-r--r--linden/indra/llcommon/llptrskiplist.h1
-rw-r--r--linden/indra/llcommon/llskiplist.h1
-rw-r--r--linden/indra/llcommon/llsmoothstep.h (renamed from linden/indra/newview/llsphere.h)40
-rw-r--r--linden/indra/llcommon/llstatenums.h8
-rw-r--r--linden/indra/llcommon/llstl.h3
-rw-r--r--linden/indra/llcommon/llstreamtools.cpp81
-rw-r--r--linden/indra/llcommon/llstreamtools.h5
-rw-r--r--linden/indra/llcommon/llstring.cpp21
-rw-r--r--linden/indra/llcommon/llversionserver.h6
-rw-r--r--linden/indra/llcommon/llversionviewer.h6
-rw-r--r--linden/indra/llimage/llimage.cpp27
-rw-r--r--linden/indra/llimage/llimage.h6
-rw-r--r--linden/indra/llimagej2coj/llimagej2coj.cpp12
-rw-r--r--linden/indra/llinventory/lleconomy.cpp31
-rw-r--r--linden/indra/llinventory/lleconomy.h11
-rw-r--r--linden/indra/llinventory/llinventory.cpp1
-rw-r--r--linden/indra/llinventory/llinventory.h34
-rw-r--r--linden/indra/llinventory/llparcel.cpp8
-rw-r--r--linden/indra/llinventory/llparcelflags.h2
-rw-r--r--linden/indra/llmath/files.lst2
-rw-r--r--linden/indra/llmath/llline.cpp189
-rw-r--r--linden/indra/llmath/llline.h75
-rw-r--r--linden/indra/llmath/llmath.h33
-rw-r--r--linden/indra/llmath/llmath.vcproj12
-rw-r--r--linden/indra/llmath/llquaternion.cpp186
-rw-r--r--linden/indra/llmath/llquaternion.h164
-rw-r--r--linden/indra/llmath/llrect.h5
-rw-r--r--linden/indra/llmath/llsphere.cpp364
-rw-r--r--linden/indra/llmath/llsphere.h72
-rw-r--r--linden/indra/llmath/lluuid.cpp5
-rw-r--r--linden/indra/llmath/lluuid.h1
-rw-r--r--linden/indra/llmath/llvolume.cpp269
-rw-r--r--linden/indra/llmath/llvolume.h35
-rw-r--r--linden/indra/llmath/llvolumemgr.cpp182
-rw-r--r--linden/indra/llmath/llvolumemgr.h47
-rw-r--r--linden/indra/llmath/m3math.cpp91
-rw-r--r--linden/indra/llmath/m3math.h24
-rw-r--r--linden/indra/llmath/m4math.cpp2
-rw-r--r--linden/indra/llmath/m4math.h8
-rw-r--r--linden/indra/llmath/v2math.h95
-rw-r--r--linden/indra/llmath/v3dmath.h13
-rw-r--r--linden/indra/llmath/v3math.cpp16
-rw-r--r--linden/indra/llmath/v3math.h123
-rw-r--r--linden/indra/llmath/v4math.cpp8
-rw-r--r--linden/indra/llmath/v4math.h127
-rw-r--r--linden/indra/llmath/xform.h10
-rw-r--r--linden/indra/llmedia/llmediaimplllmozlib.cpp2
-rw-r--r--linden/indra/llmedia/llmediaimplquicktime.cpp35
-rw-r--r--linden/indra/llmedia/llmediaobserver.h11
-rw-r--r--linden/indra/llmessage/llcachename.cpp7
-rw-r--r--linden/indra/llmessage/llhttpnode.h1
-rw-r--r--linden/indra/llmessage/llinstantmessage.h2
-rw-r--r--linden/indra/llmessage/lliohttpserver.cpp8
-rw-r--r--linden/indra/llmessage/llmessageconfig.cpp8
-rw-r--r--linden/indra/llmessage/llmessageconfig.h1
-rw-r--r--linden/indra/llmessage/llmessagetemplate.h6
-rw-r--r--linden/indra/llmessage/llnamevalue.cpp1216
-rw-r--r--linden/indra/llmessage/llnamevalue.h53
-rw-r--r--linden/indra/llmessage/llregionflags.h5
-rw-r--r--linden/indra/llmessage/llservicebuilder.cpp7
-rw-r--r--linden/indra/llmessage/llurlrequest.cpp6
-rw-r--r--linden/indra/llmessage/llurlrequest.h5
-rw-r--r--linden/indra/llmessage/message.cpp163
-rw-r--r--linden/indra/llmessage/message.h9
-rw-r--r--linden/indra/llmessage/message_prehash.cpp4000
-rw-r--r--linden/indra/llmessage/message_prehash.h6
-rw-r--r--linden/indra/llmessage/message_string_table.cpp2
-rw-r--r--linden/indra/llprimitive/llmaterialtable.cpp48
-rw-r--r--linden/indra/llprimitive/llmaterialtable.h57
-rw-r--r--linden/indra/llprimitive/llprimitive.cpp45
-rw-r--r--linden/indra/llprimitive/llprimitive.h54
-rw-r--r--linden/indra/llprimitive/llprimitive.vcproj15
-rw-r--r--linden/indra/llprimitive/llprimlinkinfo.h388
-rw-r--r--linden/indra/llrender/llfontgl.cpp6
-rw-r--r--linden/indra/llrender/llfontgl.h5
-rw-r--r--linden/indra/llrender/llrendertarget.cpp59
-rw-r--r--linden/indra/llrender/llrendertarget.h27
-rw-r--r--linden/indra/llui/llalertdialog.cpp58
-rw-r--r--linden/indra/llui/llalertdialog.h7
-rw-r--r--linden/indra/llui/llbutton.cpp578
-rw-r--r--linden/indra/llui/llbutton.h8
-rw-r--r--linden/indra/llui/llcheckboxctrl.cpp3
-rw-r--r--linden/indra/llui/llcheckboxctrl.h3
-rw-r--r--linden/indra/llui/llcombobox.cpp75
-rw-r--r--linden/indra/llui/llcombobox.h15
-rw-r--r--linden/indra/llui/lldraghandle.cpp26
-rw-r--r--linden/indra/llui/lldraghandle.h6
-rw-r--r--linden/indra/llui/llfloater.cpp265
-rw-r--r--linden/indra/llui/llfloater.h14
-rw-r--r--linden/indra/llui/llfocusmgr.cpp5
-rw-r--r--linden/indra/llui/llfocusmgr.h7
-rw-r--r--linden/indra/llui/llhtmlhelp.h3
-rw-r--r--linden/indra/llui/lliconctrl.cpp59
-rw-r--r--linden/indra/llui/lliconctrl.h6
-rw-r--r--linden/indra/llui/lllineeditor.cpp216
-rw-r--r--linden/indra/llui/lllineeditor.h40
-rw-r--r--linden/indra/llui/llmenugl.cpp279
-rw-r--r--linden/indra/llui/llmenugl.h50
-rw-r--r--linden/indra/llui/llmodaldialog.cpp49
-rw-r--r--linden/indra/llui/llmodaldialog.h2
-rw-r--r--linden/indra/llui/llmultislider.cpp308
-rw-r--r--linden/indra/llui/llmultislider.h4
-rw-r--r--linden/indra/llui/llmultisliderctrl.cpp2
-rw-r--r--linden/indra/llui/llmultisliderctrl.h2
-rw-r--r--linden/indra/llui/llpanel.cpp320
-rw-r--r--linden/indra/llui/llpanel.h40
-rw-r--r--linden/indra/llui/llradiogroup.cpp5
-rw-r--r--linden/indra/llui/llradiogroup.h4
-rw-r--r--linden/indra/llui/llresizebar.cpp15
-rw-r--r--linden/indra/llui/llresizebar.h3
-rw-r--r--linden/indra/llui/llresizehandle.cpp27
-rw-r--r--linden/indra/llui/llresizehandle.h5
-rw-r--r--linden/indra/llui/llresmgr.cpp2
-rw-r--r--linden/indra/llui/llresmgr.h66
-rw-r--r--linden/indra/llui/llrootview.h3
-rw-r--r--linden/indra/llui/llscrollbar.cpp191
-rw-r--r--linden/indra/llui/llscrollbar.h5
-rw-r--r--linden/indra/llui/llscrollcontainer.cpp176
-rw-r--r--linden/indra/llui/llscrollcontainer.h4
-rw-r--r--linden/indra/llui/llscrollingpanellist.cpp9
-rw-r--r--linden/indra/llui/llscrollingpanellist.h2
-rw-r--r--linden/indra/llui/llscrolllistctrl.cpp288
-rw-r--r--linden/indra/llui/llscrolllistctrl.h35
-rw-r--r--linden/indra/llui/llslider.cpp134
-rw-r--r--linden/indra/llui/llslider.h10
-rw-r--r--linden/indra/llui/llsliderctrl.cpp1
-rw-r--r--linden/indra/llui/llsliderctrl.h3
-rw-r--r--linden/indra/llui/llspinctrl.cpp22
-rw-r--r--linden/indra/llui/llspinctrl.h5
-rw-r--r--linden/indra/llui/llstyle.cpp32
-rw-r--r--linden/indra/llui/llstyle.h17
-rw-r--r--linden/indra/llui/lltabcontainer.cpp213
-rw-r--r--linden/indra/llui/lltabcontainer.h10
-rw-r--r--linden/indra/llui/lltextbox.cpp95
-rw-r--r--linden/indra/llui/lltextbox.h3
-rw-r--r--linden/indra/llui/lltexteditor.cpp166
-rw-r--r--linden/indra/llui/lltexteditor.h7
-rw-r--r--linden/indra/llui/llui.cpp175
-rw-r--r--linden/indra/llui/llui.h127
-rw-r--r--linden/indra/llui/lluictrl.cpp22
-rw-r--r--linden/indra/llui/lluictrl.h4
-rw-r--r--linden/indra/llui/lluictrlfactory.cpp301
-rw-r--r--linden/indra/llui/lluictrlfactory.h64
-rw-r--r--linden/indra/llui/llview.cpp215
-rw-r--r--linden/indra/llui/llview.h177
-rw-r--r--linden/indra/llui/llviewborder.cpp81
-rw-r--r--linden/indra/llui/llviewborder.h4
-rw-r--r--linden/indra/llui/llviewquery.cpp5
-rw-r--r--linden/indra/llui/llviewquery.h10
-rw-r--r--linden/indra/llvfs/llvfile.cpp1
-rw-r--r--linden/indra/llvfs/llvfile.h2
-rw-r--r--linden/indra/llwindow/lldxhardware.cpp37
-rw-r--r--linden/indra/llwindow/lldxhardware.h7
-rw-r--r--linden/indra/llwindow/llgl.cpp4
-rw-r--r--linden/indra/llwindow/llglstates.h20
-rw-r--r--linden/indra/llwindow/llkeyboard.cpp1
-rw-r--r--linden/indra/llwindow/llkeyboardmacosx.cpp4
-rw-r--r--linden/indra/llwindow/llkeyboardsdl.cpp4
-rw-r--r--linden/indra/llwindow/llkeyboardwin32.cpp6
-rw-r--r--linden/indra/llwindow/lllogitechlcd.cpp5
-rw-r--r--linden/indra/llwindow/llpreeditor.h2
-rw-r--r--linden/indra/llwindow/llwindow.cpp50
-rw-r--r--linden/indra/llwindow/llwindow.h15
-rw-r--r--linden/indra/llwindow/llwindowheadless.h4
-rw-r--r--linden/indra/llwindow/llwindowlinux.h2
-rw-r--r--linden/indra/llwindow/llwindowmacosx.cpp30
-rw-r--r--linden/indra/llwindow/llwindowmacosx.h13
-rw-r--r--linden/indra/llwindow/llwindowmesaheadless.h4
-rw-r--r--linden/indra/llwindow/llwindowsdl.cpp45
-rw-r--r--linden/indra/llwindow/llwindowsdl.h7
-rw-r--r--linden/indra/llwindow/llwindowsolaris.h4
-rw-r--r--linden/indra/llwindow/llwindowwin32.cpp1074
-rw-r--r--linden/indra/llwindow/llwindowwin32.h7
-rw-r--r--linden/indra/llxml/llcontrol.cpp817
-rw-r--r--linden/indra/llxml/llcontrol.h210
-rw-r--r--linden/indra/lscript/lscript_byteconvert.h41
-rw-r--r--linden/indra/lscript/lscript_compile/indra.l1
-rw-r--r--linden/indra/mac_updater/mac_updater.cpp1
-rw-r--r--linden/indra/newview/app_settings/cmd_line.xml335
-rw-r--r--linden/indra/newview/app_settings/colors.ini20
-rw-r--r--linden/indra/newview/app_settings/colors_base.xml344
-rw-r--r--linden/indra/newview/app_settings/grass.xml12
-rw-r--r--linden/indra/newview/app_settings/keys.ini18
-rw-r--r--linden/indra/newview/app_settings/keywords.ini5
-rw-r--r--linden/indra/newview/app_settings/role_actions.xml314
-rw-r--r--linden/indra/newview/app_settings/settings.xml10129
-rw-r--r--linden/indra/newview/app_settings/settings_crash_behavior.xml15
-rw-r--r--linden/indra/newview/app_settings/settings_files.xml22
-rw-r--r--linden/indra/newview/app_settings/settings_per_account.xml114
-rw-r--r--linden/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl16
-rw-r--r--linden/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl22
-rw-r--r--linden/indra/newview/app_settings/shaders/class1/environment/waterF.glsl2
-rw-r--r--linden/indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl4
-rw-r--r--linden/indra/newview/app_settings/shaders/class1/environment/waterV.glsl5
-rw-r--r--linden/indra/newview/app_settings/shaders/class1/lighting/lightF.glsl2
-rw-r--r--linden/indra/newview/app_settings/shaders/class1/lighting/lightShinyF.glsl2
-rw-r--r--linden/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterF.glsl2
-rw-r--r--linden/indra/newview/app_settings/std_bump.ini30
-rw-r--r--linden/indra/newview/fakevoicesoundsignal.cpp76
-rw-r--r--linden/indra/newview/featuretable.txt19
-rw-r--r--linden/indra/newview/featuretable_linux.txt1
-rw-r--r--linden/indra/newview/featuretable_mac.txt59
-rw-r--r--linden/indra/newview/featuretable_solaris.txt1
-rw-r--r--linden/indra/newview/files.lst32
-rw-r--r--linden/indra/newview/gpu_table.txt12
-rw-r--r--linden/indra/newview/head.cpp153
-rw-r--r--linden/indra/newview/installers/windows/installer_template.nsi16
-rw-r--r--linden/indra/newview/installers/windows/lang_de.nsi114
-rw-r--r--linden/indra/newview/installers/windows/lang_en-us.nsi109
-rw-r--r--linden/indra/newview/installers/windows/lang_ja.nsi114
-rw-r--r--linden/indra/newview/installers/windows/lang_ko.nsi114
-rw-r--r--linden/indra/newview/linux_tools/client-readme.txt5
-rwxr-xr-xlinden/indra/newview/linux_tools/wrapper.sh3
-rw-r--r--linden/indra/newview/llagent.cpp404
-rw-r--r--linden/indra/newview/llagent.h71
-rw-r--r--linden/indra/newview/llappviewer.cpp1603
-rw-r--r--linden/indra/newview/llappviewer.h78
-rw-r--r--linden/indra/newview/llappviewerlinux.cpp103
-rw-r--r--linden/indra/newview/llappviewerlinux.h4
-rw-r--r--linden/indra/newview/llappviewermacosx.cpp101
-rw-r--r--linden/indra/newview/llappviewermacosx.h3
-rw-r--r--linden/indra/newview/llappviewerwin32.cpp92
-rw-r--r--linden/indra/newview/llappviewerwin32.h8
-rw-r--r--linden/indra/newview/llassetuploadresponders.cpp4
-rw-r--r--linden/indra/newview/llaudiosourcevo.cpp46
-rw-r--r--linden/indra/newview/llcallingcard.cpp13
-rw-r--r--linden/indra/newview/llcameraview.cpp259
-rw-r--r--linden/indra/newview/llchatbar.cpp81
-rw-r--r--linden/indra/newview/llchatbar.h4
-rw-r--r--linden/indra/newview/llcloud.cpp2
-rw-r--r--linden/indra/newview/llcolorswatch.cpp73
-rw-r--r--linden/indra/newview/llcolorswatch.h7
-rw-r--r--linden/indra/newview/llcommandlineparser.cpp543
-rw-r--r--linden/indra/newview/llcommandlineparser.h166
-rw-r--r--linden/indra/newview/llcompilequeue.cpp21
-rw-r--r--linden/indra/newview/llconsole.cpp20
-rw-r--r--linden/indra/newview/llconsole.h2
-rw-r--r--linden/indra/newview/llcontainerview.cpp108
-rw-r--r--linden/indra/newview/llcontainerview.h12
-rw-r--r--linden/indra/newview/llcontroldef.cpp2159
-rw-r--r--linden/indra/newview/llcubemap.cpp8
-rw-r--r--linden/indra/newview/llcurrencyuimanager.cpp4
-rw-r--r--linden/indra/newview/lldebugview.cpp28
-rw-r--r--linden/indra/newview/lldebugview.h7
-rw-r--r--linden/indra/newview/lldelayedgestureerror.cpp125
-rw-r--r--linden/indra/newview/lldelayedgestureerror.h82
-rw-r--r--linden/indra/newview/lldrawable.cpp2
-rw-r--r--linden/indra/newview/lldrawpoolalpha.cpp2
-rw-r--r--linden/indra/newview/lldrawpoolavatar.cpp2
-rw-r--r--linden/indra/newview/lldrawpoolbump.cpp7
-rw-r--r--linden/indra/newview/lldrawpoolground.cpp2
-rw-r--r--linden/indra/newview/lldrawpoolsky.cpp4
-rw-r--r--linden/indra/newview/lldrawpoolterrain.cpp10
-rw-r--r--linden/indra/newview/lldrawpoolwater.cpp24
-rw-r--r--linden/indra/newview/lldrawpoolwater.h1
-rw-r--r--linden/indra/newview/lldrawpoolwlsky.cpp4
-rw-r--r--linden/indra/newview/lldynamictexture.cpp20
-rw-r--r--linden/indra/newview/llface.cpp6
-rw-r--r--linden/indra/newview/llfasttimerview.cpp36
-rw-r--r--linden/indra/newview/llfasttimerview.h3
-rw-r--r--linden/indra/newview/llfeaturemanager.cpp4
-rw-r--r--linden/indra/newview/llfeaturemanager.h5
-rw-r--r--linden/indra/newview/llfirstuse.cpp16
-rw-r--r--linden/indra/newview/llfirstuse.h1
-rw-r--r--linden/indra/newview/llflexibleobject.cpp9
-rw-r--r--linden/indra/newview/llfloaterabout.cpp19
-rw-r--r--linden/indra/newview/llfloateractivespeakers.cpp114
-rw-r--r--linden/indra/newview/llfloateractivespeakers.h8
-rw-r--r--linden/indra/newview/llfloateranimpreview.cpp18
-rw-r--r--linden/indra/newview/llfloaterauction.cpp10
-rw-r--r--linden/indra/newview/llfloateravatarinfo.cpp26
-rw-r--r--linden/indra/newview/llfloateravatarpicker.cpp12
-rw-r--r--linden/indra/newview/llfloateravatarpicker.h2
-rw-r--r--linden/indra/newview/llfloateravatartextures.cpp4
-rw-r--r--linden/indra/newview/llfloaterbuildoptions.cpp4
-rw-r--r--linden/indra/newview/llfloaterbump.cpp6
-rw-r--r--linden/indra/newview/llfloaterbuy.cpp28
-rw-r--r--linden/indra/newview/llfloaterbuycontents.cpp24
-rw-r--r--linden/indra/newview/llfloaterbuycurrency.cpp6
-rw-r--r--linden/indra/newview/llfloaterbuyland.cpp55
-rw-r--r--linden/indra/newview/llfloatercamera.cpp119
-rw-r--r--linden/indra/newview/llfloatercamera.h (renamed from linden/indra/newview/llcameraview.h)58
-rw-r--r--linden/indra/newview/llfloaterchat.cpp70
-rw-r--r--linden/indra/newview/llfloaterchat.h7
-rw-r--r--linden/indra/newview/llfloaterchatterbox.cpp51
-rw-r--r--linden/indra/newview/llfloaterchatterbox.h3
-rw-r--r--linden/indra/newview/llfloaterclassified.cpp4
-rw-r--r--linden/indra/newview/llfloaterclothing.cpp13
-rw-r--r--linden/indra/newview/llfloatercolorpicker.cpp34
-rw-r--r--linden/indra/newview/llfloatercustomize.cpp377
-rw-r--r--linden/indra/newview/llfloaterdaycycle.cpp92
-rw-r--r--linden/indra/newview/llfloaterdirectory.cpp12
-rw-r--r--linden/indra/newview/llfloatereditui.cpp34
-rw-r--r--linden/indra/newview/llfloatereditui.h2
-rw-r--r--linden/indra/newview/llfloaterenvsettings.cpp33
-rw-r--r--linden/indra/newview/llfloaterevent.cpp6
-rw-r--r--linden/indra/newview/llfloaterfriends.cpp65
-rw-r--r--linden/indra/newview/llfloatergesture.cpp15
-rw-r--r--linden/indra/newview/llfloatergodtools.cpp26
-rw-r--r--linden/indra/newview/llfloatergroups.cpp13
-rw-r--r--linden/indra/newview/llfloatergroups.h2
-rw-r--r--linden/indra/newview/llfloaterhardwaresettings.cpp42
-rw-r--r--linden/indra/newview/llfloaterhardwaresettings.h1
-rw-r--r--linden/indra/newview/llfloaterhtml.cpp26
-rw-r--r--linden/indra/newview/llfloaterhtml.h8
-rw-r--r--linden/indra/newview/llfloaterhtmlhelp.cpp42
-rw-r--r--linden/indra/newview/llfloaterhtmlhelp.h5
-rw-r--r--linden/indra/newview/llfloaterhud.cpp140
-rw-r--r--linden/indra/newview/llfloaterhud.h (renamed from linden/indra/newview/fakevoicesoundsignal.h)62
-rw-r--r--linden/indra/newview/llfloaterimagepreview.cpp24
-rw-r--r--linden/indra/newview/llfloaterinspect.cpp22
-rw-r--r--linden/indra/newview/llfloaterjoystick.cpp272
-rw-r--r--linden/indra/newview/llfloaterjoystick.h78
-rw-r--r--linden/indra/newview/llfloaterlagmeter.cpp53
-rw-r--r--linden/indra/newview/llfloaterlagmeter.h9
-rw-r--r--linden/indra/newview/llfloaterland.cpp262
-rw-r--r--linden/indra/newview/llfloaterland.h8
-rw-r--r--linden/indra/newview/llfloaterlandholdings.cpp6
-rw-r--r--linden/indra/newview/llfloaterlandmark.cpp20
-rw-r--r--linden/indra/newview/llfloaterlandmark.h2
-rw-r--r--linden/indra/newview/llfloatermap.cpp25
-rw-r--r--linden/indra/newview/llfloatermute.cpp45
-rw-r--r--linden/indra/newview/llfloatermute.h7
-rw-r--r--linden/indra/newview/llfloaternamedesc.cpp6
-rw-r--r--linden/indra/newview/llfloaternewim.cpp45
-rw-r--r--linden/indra/newview/llfloaternewim.h2
-rw-r--r--linden/indra/newview/llfloateropenobject.cpp8
-rw-r--r--linden/indra/newview/llfloaterparcel.cpp6
-rw-r--r--linden/indra/newview/llfloaterpermissionsmgr.cpp10
-rw-r--r--linden/indra/newview/llfloaterpermissionsmgr.h3
-rw-r--r--linden/indra/newview/llfloaterpostcard.cpp10
-rw-r--r--linden/indra/newview/llfloaterpostprocess.cpp37
-rw-r--r--linden/indra/newview/llfloaterpreference.cpp41
-rw-r--r--linden/indra/newview/llfloaterpreference.h1
-rw-r--r--linden/indra/newview/llfloaterproperties.cpp39
-rw-r--r--linden/indra/newview/llfloaterregioninfo.cpp307
-rw-r--r--linden/indra/newview/llfloaterregioninfo.h1
-rw-r--r--linden/indra/newview/llfloaterreleasemsg.cpp6
-rw-r--r--linden/indra/newview/llfloaterreporter.cpp26
-rw-r--r--linden/indra/newview/llfloaterscriptdebug.cpp8
-rw-r--r--linden/indra/newview/llfloatersellland.cpp38
-rw-r--r--linden/indra/newview/llfloatersettingsdebug.cpp492
-rw-r--r--linden/indra/newview/llfloatersettingsdebug.h (renamed from linden/indra/newview/head.h)52
-rw-r--r--linden/indra/newview/llfloatersnapshot.cpp809
-rw-r--r--linden/indra/newview/llfloatersnapshot.h10
-rw-r--r--linden/indra/newview/llfloaterstats.cpp87
-rw-r--r--linden/indra/newview/llfloaterstats.h (renamed from linden/indra/newview/audiosettings.h)39
-rw-r--r--linden/indra/newview/llfloatertelehub.cpp34
-rw-r--r--linden/indra/newview/llfloatertest.cpp10
-rw-r--r--linden/indra/newview/llfloatertools.cpp203
-rw-r--r--linden/indra/newview/llfloatertopobjects.cpp14
-rw-r--r--linden/indra/newview/llfloatertos.cpp16
-rw-r--r--linden/indra/newview/llfloaterurldisplay.cpp6
-rw-r--r--linden/indra/newview/llfloaterurlentry.cpp6
-rw-r--r--linden/indra/newview/llfloatervoicedevicesettings.cpp (renamed from linden/indra/newview/llfloatervoicewizard.cpp)254
-rw-r--r--linden/indra/newview/llfloatervoicedevicesettings.h (renamed from linden/indra/newview/llfloatervoicewizard.h)48
-rw-r--r--linden/indra/newview/llfloaterwater.cpp31
-rw-r--r--linden/indra/newview/llfloaterwindlight.cpp35
-rw-r--r--linden/indra/newview/llfloaterworldmap.cpp137
-rw-r--r--linden/indra/newview/llfolderview.cpp446
-rw-r--r--linden/indra/newview/llfolderview.h31
-rw-r--r--linden/indra/newview/llframestatview.cpp10
-rw-r--r--linden/indra/newview/llframestatview.h3
-rw-r--r--linden/indra/newview/llgesturemgr.cpp16
-rw-r--r--linden/indra/newview/llgivemoney.cpp24
-rw-r--r--linden/indra/newview/llglsandbox.cpp82
-rw-r--r--linden/indra/newview/llglslshader.cpp61
-rw-r--r--linden/indra/newview/llglslshader.h5
-rw-r--r--linden/indra/newview/llgroupmgr.cpp46
-rw-r--r--linden/indra/newview/llgroupmgr.h7
-rw-r--r--linden/indra/newview/llgroupnotify.cpp79
-rw-r--r--linden/indra/newview/llhoverview.cpp56
-rw-r--r--linden/indra/newview/llhoverview.h5
-rw-r--r--linden/indra/newview/llhudeffect.cpp2
-rw-r--r--linden/indra/newview/llhudeffectbeam.cpp4
-rw-r--r--linden/indra/newview/llhudeffectlookat.cpp31
-rw-r--r--linden/indra/newview/llhudeffectlookat.h2
-rw-r--r--linden/indra/newview/llhudeffectpointat.cpp21
-rw-r--r--linden/indra/newview/llhudeffectpointat.h2
-rw-r--r--linden/indra/newview/llhudeffecttrail.cpp6
-rw-r--r--linden/indra/newview/llhudicon.cpp10
-rw-r--r--linden/indra/newview/llhudmanager.cpp25
-rw-r--r--linden/indra/newview/llhudmanager.h6
-rw-r--r--linden/indra/newview/llhudrender.cpp12
-rw-r--r--linden/indra/newview/llhudtext.cpp43
-rw-r--r--linden/indra/newview/llhudtext.h2
-rw-r--r--linden/indra/newview/llhudview.cpp10
-rw-r--r--linden/indra/newview/llhudview.h3
-rw-r--r--linden/indra/newview/llimpanel.cpp91
-rw-r--r--linden/indra/newview/llimpanel.h5
-rw-r--r--linden/indra/newview/llimview.cpp41
-rw-r--r--linden/indra/newview/llinventoryactions.cpp2
-rw-r--r--linden/indra/newview/llinventorybridge.cpp63
-rw-r--r--linden/indra/newview/llinventorybridge.h30
-rw-r--r--linden/indra/newview/llinventorymodel.cpp5
-rw-r--r--linden/indra/newview/llinventorymodel.h1
-rw-r--r--linden/indra/newview/llinventoryview.cpp55
-rw-r--r--linden/indra/newview/llinventoryview.h8
-rw-r--r--linden/indra/newview/lljoystickbutton.cpp87
-rw-r--r--linden/indra/newview/lljoystickbutton.h11
-rw-r--r--linden/indra/newview/lllandmarklist.cpp5
-rw-r--r--linden/indra/newview/lllcd.cpp17
-rw-r--r--linden/indra/newview/lllogchat.cpp12
-rw-r--r--linden/indra/newview/lllogchat.h10
-rw-r--r--linden/indra/newview/llmanip.cpp63
-rw-r--r--linden/indra/newview/llmanip.h2
-rw-r--r--linden/indra/newview/llmaniprotate.cpp59
-rw-r--r--linden/indra/newview/llmanipscale.cpp100
-rw-r--r--linden/indra/newview/llmaniptranslate.cpp88
-rw-r--r--linden/indra/newview/llmapresponders.cpp48
-rw-r--r--linden/indra/newview/llmediaremotectrl.cpp33
-rw-r--r--linden/indra/newview/llmemoryview.cpp10
-rw-r--r--linden/indra/newview/llmemoryview.h3
-rw-r--r--linden/indra/newview/llmenucommands.cpp2
-rw-r--r--linden/indra/newview/llmimetypes.cpp4
-rw-r--r--linden/indra/newview/llmorphview.cpp16
-rw-r--r--linden/indra/newview/llmorphview.h3
-rw-r--r--linden/indra/newview/llmoveview.cpp94
-rw-r--r--linden/indra/newview/llmoveview.h24
-rw-r--r--linden/indra/newview/llmutelist.cpp52
-rw-r--r--linden/indra/newview/llmutelist.h8
-rw-r--r--linden/indra/newview/llnameeditor.cpp33
-rw-r--r--linden/indra/newview/llnameeditor.h7
-rw-r--r--linden/indra/newview/llnamelistctrl.cpp2
-rw-r--r--linden/indra/newview/llnamelistctrl.h3
-rw-r--r--linden/indra/newview/llnetmap.cpp91
-rw-r--r--linden/indra/newview/llnetmap.h11
-rw-r--r--linden/indra/newview/llnotify.cpp23
-rw-r--r--linden/indra/newview/llnotify.h2
-rw-r--r--linden/indra/newview/lloverlaybar.cpp36
-rw-r--r--linden/indra/newview/lloverlaybar.h3
-rw-r--r--linden/indra/newview/llpanelLCD.cpp18
-rw-r--r--linden/indra/newview/llpanelaudioprefs.cpp4
-rw-r--r--linden/indra/newview/llpanelaudiovolume.cpp2
-rw-r--r--linden/indra/newview/llpanelavatar.cpp117
-rw-r--r--linden/indra/newview/llpanelclassified.cpp60
-rw-r--r--linden/indra/newview/llpanelcontents.cpp12
-rw-r--r--linden/indra/newview/llpaneldebug.cpp2
-rw-r--r--linden/indra/newview/llpaneldirbrowser.cpp68
-rw-r--r--linden/indra/newview/llpaneldirbrowser.h2
-rw-r--r--linden/indra/newview/llpaneldirclassified.cpp2
-rw-r--r--linden/indra/newview/llpaneldirfind.cpp4
-rw-r--r--linden/indra/newview/llpaneldisplay.cpp191
-rw-r--r--linden/indra/newview/llpanelevent.cpp42
-rw-r--r--linden/indra/newview/llpanelevent.h1
-rw-r--r--linden/indra/newview/llpanelface.cpp125
-rw-r--r--linden/indra/newview/llpanelgeneral.cpp52
-rw-r--r--linden/indra/newview/llpanelgroup.cpp21
-rw-r--r--linden/indra/newview/llpanelgroupgeneral.cpp35
-rw-r--r--linden/indra/newview/llpanelgroupinvite.cpp81
-rw-r--r--linden/indra/newview/llpanelgrouplandmoney.cpp2
-rw-r--r--linden/indra/newview/llpanelgroupnotices.cpp28
-rw-r--r--linden/indra/newview/llpanelgrouproles.cpp82
-rw-r--r--linden/indra/newview/llpanelgrouproles.h2
-rw-r--r--linden/indra/newview/llpanelgroupvoting.cpp4
-rw-r--r--linden/indra/newview/llpanelinput.cpp30
-rw-r--r--linden/indra/newview/llpanelinput.h3
-rw-r--r--linden/indra/newview/llpanelinventory.cpp120
-rw-r--r--linden/indra/newview/llpanelland.cpp32
-rw-r--r--linden/indra/newview/llpanellandmedia.cpp51
-rw-r--r--linden/indra/newview/llpanellogin.cpp435
-rw-r--r--linden/indra/newview/llpanellogin.h5
-rw-r--r--linden/indra/newview/llpanelmorph.cpp2
-rw-r--r--linden/indra/newview/llpanelmsgs.cpp8
-rw-r--r--linden/indra/newview/llpanelnetwork.cpp4
-rw-r--r--linden/indra/newview/llpanelobject.cpp172
-rw-r--r--linden/indra/newview/llpanelpermissions.cpp134
-rw-r--r--linden/indra/newview/llpanelpick.cpp35
-rw-r--r--linden/indra/newview/llpanelplace.cpp24
-rw-r--r--linden/indra/newview/llpanelvolume.cpp38
-rw-r--r--linden/indra/newview/llpanelweb.cpp6
-rw-r--r--linden/indra/newview/llprefschat.cpp8
-rw-r--r--linden/indra/newview/llprefsim.cpp6
-rw-r--r--linden/indra/newview/llprefsvoice.cpp68
-rw-r--r--linden/indra/newview/llprefsvoice.h7
-rw-r--r--linden/indra/newview/llpreview.cpp16
-rw-r--r--linden/indra/newview/llpreviewanim.cpp8
-rw-r--r--linden/indra/newview/llpreviewgesture.cpp82
-rw-r--r--linden/indra/newview/llpreviewgesture.h2
-rw-r--r--linden/indra/newview/llpreviewlandmark.cpp35
-rw-r--r--linden/indra/newview/llpreviewnotecard.cpp50
-rw-r--r--linden/indra/newview/llpreviewnotecard.h2
-rw-r--r--linden/indra/newview/llpreviewscript.cpp173
-rw-r--r--linden/indra/newview/llpreviewscript.h5
-rw-r--r--linden/indra/newview/llpreviewsound.cpp8
-rw-r--r--linden/indra/newview/llpreviewtexture.cpp204
-rw-r--r--linden/indra/newview/llpreviewtexture.h4
-rw-r--r--linden/indra/newview/llprogressview.cpp235
-rw-r--r--linden/indra/newview/llprogressview.h11
-rw-r--r--linden/indra/newview/llregionposition.cpp2
-rw-r--r--linden/indra/newview/llrendersphere.cpp (renamed from linden/indra/newview/llsphere.cpp)44
-rw-r--r--linden/indra/newview/llrendersphere.h47
-rw-r--r--linden/indra/newview/llselectmgr.cpp288
-rw-r--r--linden/indra/newview/llselectmgr.h11
-rw-r--r--linden/indra/newview/llspatialpartition.cpp12
-rw-r--r--linden/indra/newview/llsprite.cpp2
-rw-r--r--linden/indra/newview/llstartup.cpp487
-rw-r--r--linden/indra/newview/llstatbar.cpp10
-rw-r--r--linden/indra/newview/llstatbar.h3
-rw-r--r--linden/indra/newview/llstatgraph.cpp100
-rw-r--r--linden/indra/newview/llstatgraph.h2
-rw-r--r--linden/indra/newview/llstatusbar.cpp55
-rw-r--r--linden/indra/newview/llstatusbar.h3
-rw-r--r--linden/indra/newview/llstatview.cpp10
-rw-r--r--linden/indra/newview/llstatview.h2
-rw-r--r--linden/indra/newview/llsurface.cpp2
-rw-r--r--linden/indra/newview/llsurfacepatch.cpp2
-rw-r--r--linden/indra/newview/lltexlayer.cpp2
-rw-r--r--linden/indra/newview/lltexturecache.cpp214
-rw-r--r--linden/indra/newview/lltexturecache.h5
-rw-r--r--linden/indra/newview/lltexturectrl.cpp124
-rw-r--r--linden/indra/newview/lltexturectrl.h4
-rw-r--r--linden/indra/newview/lltexturefetch.cpp84
-rw-r--r--linden/indra/newview/lltexturefetch.h2
-rw-r--r--linden/indra/newview/lltextureview.cpp21
-rw-r--r--linden/indra/newview/lltextureview.h3
-rw-r--r--linden/indra/newview/lltool.cpp2
-rw-r--r--linden/indra/newview/lltoolbar.cpp165
-rw-r--r--linden/indra/newview/lltoolbrush.cpp28
-rw-r--r--linden/indra/newview/lltoolbrush.h3
-rw-r--r--linden/indra/newview/lltoolcomp.cpp133
-rw-r--r--linden/indra/newview/lltoolcomp.h18
-rw-r--r--linden/indra/newview/lltooldraganddrop.cpp167
-rw-r--r--linden/indra/newview/lltooldraganddrop.h5
-rw-r--r--linden/indra/newview/lltoolface.cpp23
-rw-r--r--linden/indra/newview/lltoolface.h4
-rw-r--r--linden/indra/newview/lltoolfocus.cpp29
-rw-r--r--linden/indra/newview/lltoolfocus.h4
-rw-r--r--linden/indra/newview/lltoolgrab.cpp37
-rw-r--r--linden/indra/newview/lltoolgrab.h4
-rw-r--r--linden/indra/newview/lltoolgun.cpp29
-rw-r--r--linden/indra/newview/lltoolgun.h5
-rw-r--r--linden/indra/newview/lltoolindividual.cpp13
-rw-r--r--linden/indra/newview/lltoolindividual.h4
-rw-r--r--linden/indra/newview/lltoolmgr.cpp217
-rw-r--r--linden/indra/newview/lltoolmgr.h8
-rw-r--r--linden/indra/newview/lltoolmorph.cpp16
-rw-r--r--linden/indra/newview/lltoolmorph.h2
-rw-r--r--linden/indra/newview/lltoolobjpicker.cpp5
-rw-r--r--linden/indra/newview/lltoolobjpicker.h3
-rw-r--r--linden/indra/newview/lltoolpie.cpp71
-rw-r--r--linden/indra/newview/lltoolpie.h4
-rw-r--r--linden/indra/newview/lltoolpipette.cpp17
-rw-r--r--linden/indra/newview/lltoolpipette.h4
-rw-r--r--linden/indra/newview/lltoolplacer.cpp16
-rw-r--r--linden/indra/newview/lltoolselect.cpp33
-rw-r--r--linden/indra/newview/lltoolselect.h3
-rw-r--r--linden/indra/newview/lltoolselectland.cpp13
-rw-r--r--linden/indra/newview/lltoolselectland.h3
-rw-r--r--linden/indra/newview/lltoolselectrect.cpp6
-rw-r--r--linden/indra/newview/lltoolview.cpp6
-rw-r--r--linden/indra/newview/lltracker.cpp29
-rw-r--r--linden/indra/newview/lluploaddialog.cpp4
-rw-r--r--linden/indra/newview/llurldispatcher.cpp65
-rw-r--r--linden/indra/newview/llurlsimstring.cpp10
-rw-r--r--linden/indra/newview/llurlsimstring.h2
-rw-r--r--linden/indra/newview/lluserauth.cpp18
-rw-r--r--linden/indra/newview/lluserauth.h9
-rw-r--r--linden/indra/newview/llvectorperfoptions.cpp99
-rw-r--r--linden/indra/newview/llvectorperfoptions.h6
-rw-r--r--linden/indra/newview/llvelocitybar.cpp15
-rw-r--r--linden/indra/newview/llvelocitybar.h3
-rw-r--r--linden/indra/newview/llviewchildren.cpp32
-rw-r--r--linden/indra/newview/llvieweraudio.cpp15
-rw-r--r--linden/indra/newview/llvieweraudio.h6
-rw-r--r--linden/indra/newview/llviewercamera.cpp13
-rw-r--r--linden/indra/newview/llviewercamera.h3
-rw-r--r--linden/indra/newview/llviewercontrol.cpp894
-rw-r--r--linden/indra/newview/llviewercontrol.h34
-rw-r--r--linden/indra/newview/llviewerdisplay.cpp93
-rw-r--r--linden/indra/newview/llviewerimage.cpp59
-rw-r--r--linden/indra/newview/llviewerimage.h10
-rw-r--r--linden/indra/newview/llviewerimagelist.cpp627
-rw-r--r--linden/indra/newview/llviewerimagelist.h77
-rw-r--r--linden/indra/newview/llviewerjoint.cpp2
-rw-r--r--linden/indra/newview/llviewerjointmesh.cpp55
-rw-r--r--linden/indra/newview/llviewerjointmesh.h3
-rw-r--r--linden/indra/newview/llviewerjoystick.cpp993
-rw-r--r--linden/indra/newview/llviewerjoystick.h73
-rw-r--r--linden/indra/newview/llviewerkeyboard.cpp114
-rw-r--r--linden/indra/newview/llviewerkeyboard.h3
-rw-r--r--linden/indra/newview/llviewermedia.cpp5
-rw-r--r--linden/indra/newview/llviewermenu.cpp684
-rw-r--r--linden/indra/newview/llviewermenu.h1
-rw-r--r--linden/indra/newview/llviewermenufile.cpp32
-rw-r--r--linden/indra/newview/llviewermessage.cpp226
-rw-r--r--linden/indra/newview/llviewernetwork.cpp7
-rw-r--r--linden/indra/newview/llviewernetwork.h7
-rw-r--r--linden/indra/newview/llviewerobject.cpp99
-rw-r--r--linden/indra/newview/llviewerobject.h2
-rw-r--r--linden/indra/newview/llviewerobjectlist.cpp24
-rw-r--r--linden/indra/newview/llviewerparcelmedia.cpp6
-rw-r--r--linden/indra/newview/llviewerparcelmediaautoplay.cpp5
-rw-r--r--linden/indra/newview/llviewerparcelmgr.cpp270
-rw-r--r--linden/indra/newview/llviewerparcelmgr.h9
-rw-r--r--linden/indra/newview/llviewerparceloverlay.cpp12
-rw-r--r--linden/indra/newview/llviewerparceloverlay.h1
-rw-r--r--linden/indra/newview/llviewerpartsim.cpp10
-rw-r--r--linden/indra/newview/llviewerpartsim.h8
-rw-r--r--linden/indra/newview/llviewerpartsource.cpp42
-rw-r--r--linden/indra/newview/llviewerregion.cpp13
-rw-r--r--linden/indra/newview/llviewerstats.cpp91
-rw-r--r--linden/indra/newview/llviewerstats.h12
-rw-r--r--linden/indra/newview/llviewertexteditor.cpp178
-rw-r--r--linden/indra/newview/llviewertexteditor.h3
-rw-r--r--linden/indra/newview/llviewerthrottle.cpp4
-rw-r--r--linden/indra/newview/llvieweruictrlfactory.cpp128
-rw-r--r--linden/indra/newview/llvieweruictrlfactory.h71
-rw-r--r--linden/indra/newview/llviewerwindow.cpp756
-rw-r--r--linden/indra/newview/llviewerwindow.h8
-rw-r--r--linden/indra/newview/llvlcomposition.cpp22
-rw-r--r--linden/indra/newview/llvoavatar.cpp313
-rw-r--r--linden/indra/newview/llvoavatar.h10
-rw-r--r--linden/indra/newview/llvoclouds.cpp4
-rw-r--r--linden/indra/newview/llvograss.cpp7
-rw-r--r--linden/indra/newview/llvoground.cpp4
-rw-r--r--linden/indra/newview/llvoiceclient.cpp52
-rw-r--r--linden/indra/newview/llvoiceremotectrl.cpp42
-rw-r--r--linden/indra/newview/llvoicevisualizer.cpp26
-rw-r--r--linden/indra/newview/llvopartgroup.cpp10
-rw-r--r--linden/indra/newview/llvosky.cpp20
-rw-r--r--linden/indra/newview/llvotextbubble.cpp2
-rw-r--r--linden/indra/newview/llvotree.cpp4
-rw-r--r--linden/indra/newview/llvovolume.cpp56
-rw-r--r--linden/indra/newview/llvowater.cpp3
-rw-r--r--linden/indra/newview/llwaterparammanager.cpp4
-rw-r--r--linden/indra/newview/llwaterparamset.cpp4
-rw-r--r--linden/indra/newview/llwearablelist.cpp38
-rw-r--r--linden/indra/newview/llwearablelist.h2
-rw-r--r--linden/indra/newview/llwebbrowserctrl.cpp83
-rw-r--r--linden/indra/newview/llwebbrowserctrl.h22
-rw-r--r--linden/indra/newview/llwind.cpp4
-rw-r--r--linden/indra/newview/llwlparammanager.cpp4
-rw-r--r--linden/indra/newview/llworld.cpp101
-rw-r--r--linden/indra/newview/llworld.h20
-rw-r--r--linden/indra/newview/llworldmap.cpp119
-rw-r--r--linden/indra/newview/llworldmap.h9
-rw-r--r--linden/indra/newview/llworldmapview.cpp253
-rw-r--r--linden/indra/newview/llworldmapview.h38
-rw-r--r--linden/indra/newview/llxmlrpctransaction.cpp5
-rw-r--r--linden/indra/newview/lsl_guide.html61
-rw-r--r--linden/indra/newview/macview.xcodeproj/project.pbxproj189
-rw-r--r--linden/indra/newview/macview_Prefix.h7
-rw-r--r--linden/indra/newview/moviemaker.cpp811
-rw-r--r--linden/indra/newview/moviemaker.h143
-rw-r--r--linden/indra/newview/newview.vcproj114
-rw-r--r--linden/indra/newview/newview_vc8.vcproj169
-rw-r--r--linden/indra/newview/newview_vc9.vcproj166
-rw-r--r--linden/indra/newview/pipeline.cpp295
-rw-r--r--linden/indra/newview/pipeline.h6
-rw-r--r--linden/indra/newview/releasenotes.txt1564
-rw-r--r--linden/indra/newview/secondlife setup build dazzle.bat4
-rw-r--r--linden/indra/newview/skins/textures/textures.xml838
-rw-r--r--linden/indra/newview/skins/xui/de/floater_about_land.xml5
-rw-r--r--linden/indra/newview/skins/xui/de/floater_critical.xml3
-rw-r--r--linden/indra/newview/skins/xui/de/floater_friends.xml35
-rw-r--r--linden/indra/newview/skins/xui/de/floater_groups.xml19
-rw-r--r--linden/indra/newview/skins/xui/de/floater_instant_message_ad_hoc.xml2
-rw-r--r--linden/indra/newview/skins/xui/de/floater_instant_message_group.xml2
-rw-r--r--linden/indra/newview/skins/xui/de/floater_joystick.xml53
-rw-r--r--linden/indra/newview/skins/xui/de/floater_preview_new_landmark.xml9
-rw-r--r--linden/indra/newview/skins/xui/de/floater_rate.xml44
-rw-r--r--linden/indra/newview/skins/xui/de/menu_viewer.xml12
-rw-r--r--linden/indra/newview/skins/xui/de/panel_friends.xml3
-rw-r--r--linden/indra/newview/skins/xui/de/panel_music_remote.xml15
-rw-r--r--linden/indra/newview/skins/xui/de/panel_overlaybar.xml4
-rw-r--r--linden/indra/newview/skins/xui/de/panel_preferences_graphics2.xml59
-rw-r--r--linden/indra/newview/skins/xui/de/panel_preferences_graphics3.xml54
-rw-r--r--linden/indra/newview/skins/xui/de/panel_settings_chat.xml57
-rw-r--r--linden/indra/newview/skins/xui/de/panel_settings_im.xml13
-rw-r--r--linden/indra/newview/skins/xui/de/panel_settings_msgbox.xml12
-rw-r--r--linden/indra/newview/skins/xui/de/panel_settings_network.xml56
-rw-r--r--linden/indra/newview/skins/xui/de/panel_settings_web.xml50
-rw-r--r--linden/indra/newview/skins/xui/de/panel_speaker_controls.xml6
-rw-r--r--linden/indra/newview/skins/xui/de/panel_toolbar.xml6
-rw-r--r--linden/indra/newview/skins/xui/en-us/alerts.xml116
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_about.xml53
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_about_land.xml109
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_avatar_textures.xml4
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_buy_contents.xml5
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_buy_currency.xml28
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_buy_land.xml96
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_buy_object.xml10
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_camera.xml19
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_chat_history.xml40
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_chatterbox.xml9
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_critical.xml21
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_customize.xml4
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_day_cycle_options.xml68
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_directory.xml37
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_env_settings.xml14
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_friends.xml65
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_gesture.xml16
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_groups.xml39
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_hardware_settings.xml91
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_html.xml6
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_hud.xml9
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_instant_message.xml32
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_instant_message_ad_hoc.xml28
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_instant_message_group.xml26
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_inventory.xml10
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_joystick.xml223
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_lagmeter.xml2
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_live_lsleditor.xml4
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_moveview.xml7
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_mute.xml5
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_mute_object.xml2
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_my_friends.xml4
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_post_process.xml38
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_preview_gesture.xml8
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_preview_new_landmark.xml28
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_preview_notecard_keep_discard.xml2
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_rate.xml81
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_report_abuse.xml16
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_report_bug.xml8
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_script_ed_panel.xml8
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_script_preview.xml2
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_sell_land.xml24
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_settings_debug.xml2
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_snapshot.xml4
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_tools.xml118
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_top_objects.xml12
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_tos.xml6
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_water.xml56
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_windlight_options.xml114
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_world_map.xml7
-rw-r--r--linden/indra/newview/skins/xui/en-us/menu_inventory.xml6
-rw-r--r--linden/indra/newview/skins/xui/en-us/menu_login.xml2
-rw-r--r--linden/indra/newview/skins/xui/en-us/menu_viewer.xml150
-rw-r--r--linden/indra/newview/skins/xui/en-us/mime_types.xml6
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_audio.xml14
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_avatar.xml62
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_avatar_classified.xml16
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_avatar_pick.xml12
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_bg_tab.xml11
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_bg_toolbar.xml7
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_chat_bar.xml24
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_classified.xml18
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_friends.xml2
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_group.xml2
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_group_general.xml14
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_group_invite.xml20
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_group_land_money.xml16
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_group_notices.xml20
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_group_roles.xml52
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_group_voting.xml11
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_land_covenant.xml28
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_login.xml55
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_master_volume.xml2
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_media_controls.xml92
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_media_remote.xml8
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_media_remote_expanded.xml32
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_music_remote.xml23
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_overlaybar.xml18
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_place.xml18
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_place_small.xml16
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_preferences_audio.xml2
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_preferences_chat.xml30
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_preferences_general.xml87
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_preferences_graphics1.xml104
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_preferences_input.xml48
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_preferences_popups.xml4
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_preferences_voice.xml5
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_region_covenant.xml24
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_region_debug.xml8
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_region_estate.xml16
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_region_general.xml11
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_region_terrain.xml2
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_settings_chat.xml76
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_settings_im.xml18
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_settings_network.xml71
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_settings_web.xml72
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_speaker_controls.xml14
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_status_bar.xml51
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_toolbar.xml105
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_top_pick.xml12
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_voice_controls.xml22
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_voice_enable.xml2
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_voice_remote.xml8
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_voice_remote_expanded.xml24
-rw-r--r--linden/indra/newview/skins/xui/es/floater_critical.xml3
-rw-r--r--linden/indra/newview/skins/xui/es/floater_friends.xml28
-rw-r--r--linden/indra/newview/skins/xui/es/floater_groups.xml15
-rw-r--r--linden/indra/newview/skins/xui/es/floater_preview_new_landmark.xml9
-rw-r--r--linden/indra/newview/skins/xui/es/floater_rate.xml44
-rw-r--r--linden/indra/newview/skins/xui/es/menu_viewer.xml3
-rw-r--r--linden/indra/newview/skins/xui/es/panel_music_remote.xml13
-rw-r--r--linden/indra/newview/skins/xui/es/panel_preferences_graphics2.xml57
-rw-r--r--linden/indra/newview/skins/xui/es/panel_preferences_graphics3.xml50
-rw-r--r--linden/indra/newview/skins/xui/es/panel_settings_chat.xml56
-rw-r--r--linden/indra/newview/skins/xui/es/panel_settings_im.xml13
-rw-r--r--linden/indra/newview/skins/xui/es/panel_settings_msgbox.xml12
-rw-r--r--linden/indra/newview/skins/xui/es/panel_settings_network.xml59
-rw-r--r--linden/indra/newview/skins/xui/es/panel_settings_web.xml53
-rw-r--r--linden/indra/newview/skins/xui/es/panel_toolbar.xml2
-rw-r--r--linden/indra/newview/skins/xui/fr/floater_critical.xml3
-rw-r--r--linden/indra/newview/skins/xui/fr/floater_friends.xml19
-rw-r--r--linden/indra/newview/skins/xui/fr/floater_groups.xml15
-rw-r--r--linden/indra/newview/skins/xui/fr/floater_preview_new_landmark.xml10
-rw-r--r--linden/indra/newview/skins/xui/fr/floater_rate.xml44
-rw-r--r--linden/indra/newview/skins/xui/fr/menu_viewer.xml3
-rw-r--r--linden/indra/newview/skins/xui/fr/panel_music_remote.xml10
-rw-r--r--linden/indra/newview/skins/xui/fr/panel_preferences_graphics2.xml57
-rw-r--r--linden/indra/newview/skins/xui/fr/panel_preferences_graphics3.xml50
-rw-r--r--linden/indra/newview/skins/xui/fr/panel_settings_chat.xml58
-rw-r--r--linden/indra/newview/skins/xui/fr/panel_settings_im.xml15
-rw-r--r--linden/indra/newview/skins/xui/fr/panel_settings_msgbox.xml12
-rw-r--r--linden/indra/newview/skins/xui/fr/panel_settings_network.xml59
-rw-r--r--linden/indra/newview/skins/xui/fr/panel_settings_web.xml52
-rw-r--r--linden/indra/newview/skins/xui/fr/panel_toolbar.xml2
-rw-r--r--linden/indra/newview/skins/xui/ja/floater_about_land.xml5
-rw-r--r--linden/indra/newview/skins/xui/ja/floater_critical.xml3
-rw-r--r--linden/indra/newview/skins/xui/ja/floater_friends.xml37
-rw-r--r--linden/indra/newview/skins/xui/ja/floater_groups.xml17
-rw-r--r--linden/indra/newview/skins/xui/ja/floater_instant_message_ad_hoc.xml2
-rw-r--r--linden/indra/newview/skins/xui/ja/floater_instant_message_group.xml2
-rw-r--r--linden/indra/newview/skins/xui/ja/floater_joystick.xml55
-rw-r--r--linden/indra/newview/skins/xui/ja/floater_preview_new_landmark.xml9
-rw-r--r--linden/indra/newview/skins/xui/ja/floater_rate.xml44
-rw-r--r--linden/indra/newview/skins/xui/ja/menu_viewer.xml16
-rw-r--r--linden/indra/newview/skins/xui/ja/panel_music_remote.xml18
-rw-r--r--linden/indra/newview/skins/xui/ja/panel_overlaybar.xml4
-rw-r--r--linden/indra/newview/skins/xui/ja/panel_preferences_graphics2.xml59
-rw-r--r--linden/indra/newview/skins/xui/ja/panel_preferences_graphics3.xml57
-rw-r--r--linden/indra/newview/skins/xui/ja/panel_settings_chat.xml58
-rw-r--r--linden/indra/newview/skins/xui/ja/panel_settings_im.xml13
-rw-r--r--linden/indra/newview/skins/xui/ja/panel_settings_msgbox.xml12
-rw-r--r--linden/indra/newview/skins/xui/ja/panel_settings_network.xml58
-rw-r--r--linden/indra/newview/skins/xui/ja/panel_settings_web.xml54
-rw-r--r--linden/indra/newview/skins/xui/ja/panel_speaker_controls.xml6
-rw-r--r--linden/indra/newview/skins/xui/ja/panel_toolbar.xml6
-rw-r--r--linden/indra/newview/skins/xui/ko/floater_about_land.xml5
-rw-r--r--linden/indra/newview/skins/xui/ko/floater_critical.xml3
-rw-r--r--linden/indra/newview/skins/xui/ko/floater_friends.xml36
-rw-r--r--linden/indra/newview/skins/xui/ko/floater_groups.xml16
-rw-r--r--linden/indra/newview/skins/xui/ko/floater_instant_message_ad_hoc.xml2
-rw-r--r--linden/indra/newview/skins/xui/ko/floater_instant_message_group.xml2
-rw-r--r--linden/indra/newview/skins/xui/ko/floater_joystick.xml97
-rw-r--r--linden/indra/newview/skins/xui/ko/floater_preview_new_landmark.xml9
-rw-r--r--linden/indra/newview/skins/xui/ko/floater_rate.xml44
-rw-r--r--linden/indra/newview/skins/xui/ko/menu_viewer.xml13
-rw-r--r--linden/indra/newview/skins/xui/ko/panel_music_remote.xml16
-rw-r--r--linden/indra/newview/skins/xui/ko/panel_overlaybar.xml4
-rw-r--r--linden/indra/newview/skins/xui/ko/panel_preferences_graphics2.xml59
-rw-r--r--linden/indra/newview/skins/xui/ko/panel_preferences_graphics3.xml54
-rw-r--r--linden/indra/newview/skins/xui/ko/panel_settings_chat.xml55
-rw-r--r--linden/indra/newview/skins/xui/ko/panel_settings_im.xml13
-rw-r--r--linden/indra/newview/skins/xui/ko/panel_settings_msgbox.xml11
-rw-r--r--linden/indra/newview/skins/xui/ko/panel_settings_network.xml57
-rw-r--r--linden/indra/newview/skins/xui/ko/panel_settings_web.xml50
-rw-r--r--linden/indra/newview/skins/xui/ko/panel_speaker_controls.xml6
-rw-r--r--linden/indra/newview/skins/xui/zh/floater_critical.xml3
-rw-r--r--linden/indra/newview/skins/xui/zh/floater_friends.xml34
-rw-r--r--linden/indra/newview/skins/xui/zh/floater_groups.xml15
-rw-r--r--linden/indra/newview/skins/xui/zh/floater_preview_new_landmark.xml10
-rw-r--r--linden/indra/newview/skins/xui/zh/floater_rate.xml44
-rw-r--r--linden/indra/newview/skins/xui/zh/menu_viewer.xml3
-rw-r--r--linden/indra/newview/skins/xui/zh/panel_music_remote.xml10
-rw-r--r--linden/indra/newview/skins/xui/zh/panel_preferences_graphics2.xml57
-rw-r--r--linden/indra/newview/skins/xui/zh/panel_preferences_graphics3.xml50
-rw-r--r--linden/indra/newview/skins/xui/zh/panel_settings_chat.xml54
-rw-r--r--linden/indra/newview/skins/xui/zh/panel_settings_im.xml13
-rw-r--r--linden/indra/newview/skins/xui/zh/panel_settings_msgbox.xml11
-rw-r--r--linden/indra/newview/skins/xui/zh/panel_settings_network.xml57
-rw-r--r--linden/indra/newview/skins/xui/zh/panel_settings_web.xml48
-rw-r--r--linden/indra/newview/skins/xui/zh/panel_toolbar.xml2
-rwxr-xr-xlinden/indra/newview/viewer_manifest.py51
-rw-r--r--linden/indra/test/files.lst2
-rw-r--r--linden/indra/test/inventory.cpp4
-rw-r--r--linden/indra/test/io.cpp2
-rw-r--r--linden/indra/test/llcontrol_tut.cpp147
-rw-r--r--linden/indra/test/llmessageconfig_tut.cpp24
-rw-r--r--linden/indra/test/llmessagetemplateparser_tut.cpp2
-rw-r--r--linden/indra/test/llnamevalue_tut.cpp550
-rwxr-xr-xlinden/indra/test/llsdmessagereader_tut.cpp2
-rw-r--r--linden/indra/test/llstreamtools_tut.cpp42
-rw-r--r--linden/indra/test/lltemplatemessagebuilder_tut.cpp2
-rw-r--r--linden/indra/test/lltut.h10
-rw-r--r--linden/indra/test/mass_properties_tut.cpp1008
-rw-r--r--linden/indra/test/math.cpp442
-rw-r--r--linden/indra/test/message_tut.cpp2
-rw-r--r--linden/indra/test/prim_linkability_tut.cpp490
-rw-r--r--linden/indra/test/test.vcproj19
-rw-r--r--linden/indra/test/test_vc8.vcproj6
-rw-r--r--linden/indra/test/test_vc9.vcproj2
-rw-r--r--linden/libraries/i686-win32/include/GL/README.txt5
-rw-r--r--linden/libraries/i686-win32/include/GL/glext.h7271
-rw-r--r--linden/libraries/i686-win32/include/GL/glut.h596
-rw-r--r--linden/libraries/i686-win32/include/GL/glxext.h785
-rw-r--r--linden/libraries/i686-win32/include/GL/wglext.h648
-rw-r--r--linden/libraries/include/llmozlib2.h15
-rw-r--r--linden/scripts/messages/message_template.msg30
921 files changed, 48096 insertions, 30871 deletions
diff --git a/linden/doc/contributions.txt b/linden/doc/contributions.txt
index 4706f39..93da3c9 100644
--- a/linden/doc/contributions.txt
+++ b/linden/doc/contributions.txt
@@ -8,6 +8,8 @@ Able Whitman
8 VWR-650 8 VWR-650
9 VWR-1460 9 VWR-1460
10 VWR-1691 10 VWR-1691
11Adam Marker
12 VWR-2755
11Aimee Trescothick 13Aimee Trescothick
12 VWR-3903 14 VWR-3903
13 VWR-4083 15 VWR-4083
@@ -39,6 +41,11 @@ Alissa Sabre
39 VWR-3290 41 VWR-3290
40 VWR-4010 42 VWR-4010
41 VWR-3410 43 VWR-3410
44 VWR-6386
45 VWR-6384
46 VWR-6385
47 VWR-5929
48 VWR-6430
42Angus Boyd 49Angus Boyd
43 VWR-592 50 VWR-592
44Argent Stonecutter 51Argent Stonecutter
@@ -119,6 +126,7 @@ Gigs Taggart
119 VWR-234 126 VWR-234
120 VWR-315 127 VWR-315
121 VWR-326 128 VWR-326
129 VWR-442
122 VWR-493 130 VWR-493
123 VWR-1203 131 VWR-1203
124 VWR-1217 132 VWR-1217
@@ -254,6 +262,8 @@ Nicholaz Beresford
254 VWR-2684 262 VWR-2684
255Nounouch Hapmouche 263Nounouch Hapmouche
256 VWR-238 264 VWR-238
265Patric Mills
266 VWR-2645
257Paul Churchill 267Paul Churchill
258 VWR-20 268 VWR-20
259 VWR-493 269 VWR-493
@@ -304,6 +314,8 @@ SpacedOut Frye
304 VWR-123 314 VWR-123
305 VWR-130 315 VWR-130
306 VWR-1823 316 VWR-1823
317Sporked Friis
318 VWR-4903
307Stevex Janus 319Stevex Janus
308 VWR-1182 320 VWR-1182
309Still Defiant 321Still Defiant
@@ -319,6 +331,9 @@ Strife Onizuka
319 WEB-164 331 WEB-164
320 VWR-183 332 VWR-183
321 VWR-2265 333 VWR-2265
334 VWR-4111
335Teardrops Fall
336 VWR-5366
322tenebrous pau 337tenebrous pau
323 VWR-247 338 VWR-247
324TBBle Kurosawa 339TBBle Kurosawa
@@ -349,3 +364,5 @@ Zipherius Turas
349 VWR-77 364 VWR-77
350Kerutsen Sellery 365Kerutsen Sellery
351 VWR-1350 366 VWR-1350
367
368
diff --git a/linden/doc/releasenotes-where.txt b/linden/doc/releasenotes-where.txt
new file mode 100644
index 0000000..89125d2
--- /dev/null
+++ b/linden/doc/releasenotes-where.txt
@@ -0,0 +1,5 @@
1For full release notes, see:
2 indra/newview/releasenotes.txt
3
4This is the same asset sourced by the viewer for displaying release notes.
5
diff --git a/linden/etc/message.xml b/linden/etc/message.xml
index c939e8b..331e6bb 100644
--- a/linden/etc/message.xml
+++ b/linden/etc/message.xml
@@ -258,6 +258,8 @@
258 <string>template</string> 258 <string>template</string>
259 <key>trusted-sender</key> 259 <key>trusted-sender</key>
260 <boolean>true</boolean> 260 <boolean>true</boolean>
261 <key>only-send-latest</key>
262 <boolean>true</boolean>
261 </map> 263 </map>
262 264
263 <key>SimulatorLoad</key> 265 <key>SimulatorLoad</key>
@@ -533,7 +535,12 @@
533 535
534 <key>ParcelPropertiesUpdate</key> 536 <key>ParcelPropertiesUpdate</key>
535 <boolean>false</boolean> 537 <boolean>false</boolean>
538
539 <key>EstateChangeInfo</key>
540 <boolean>true</boolean>
536 541
542 <key>FetchInventoryDescendents</key>
543 <boolean>true</boolean>
537 </map> 544 </map>
538 545
539 <key>messageBans</key> 546 <key>messageBans</key>
diff --git a/linden/indra/SConstruct b/linden/indra/SConstruct
index 9bc78c4..92e75b5 100644
--- a/linden/indra/SConstruct
+++ b/linden/indra/SConstruct
@@ -189,15 +189,19 @@ for build_target in targets:
189 print 'Building ' + build_target + ' ' + version_server + ' on ' + system_str + ' (' + buildtype + ')' 189 print 'Building ' + build_target + ' ' + version_server + ' on ' + system_str + ' (' + buildtype + ')'
190 190
191 system_lib_dir = '../libraries/' + system_str 191 system_lib_dir = '../libraries/' + system_str
192 havok_lib_dir = '../libraries/' + system_str
193 lib_dir = './lib_' + buildtype + '_' + build_target + '/' + system_str
192 194
193 if build_target == 'client': 195 if build_target == 'client':
194 system_lib_dir += '/lib_release_client' 196 system_lib_dir += '/lib_release_client'
195 elif buildtype == 'debug': 197 elif buildtype == 'debug':
198 havok_lib_dir += '/lib_debug/havok/hk460'
196 system_lib_dir += '/lib_debug' 199 system_lib_dir += '/lib_debug'
200 lib_dir = './lib_debug_' + build_target + '/' + system_str
197 else: 201 else:
202 havok_lib_dir += '/lib_release/havok/hk460'
198 system_lib_dir += '/lib_release' 203 system_lib_dir += '/lib_release'
199 204 lib_dir = './lib_release_' + build_target + '/' + system_str
200 lib_dir = './lib_' + buildtype + '_' + build_target + '/' + system_str
201 205
202 try: 206 try:
203 build_dir_prefix = os.environ['TEMP_BUILD_DIR'] 207 build_dir_prefix = os.environ['TEMP_BUILD_DIR']
@@ -209,18 +213,19 @@ for build_target in targets:
209 ### Base include directories ### 213 ### Base include directories ###
210 214
211 include_dirs = Split(""" 215 include_dirs = Split("""
212 ./llcommon ./llmath ./llwindow ./llaudio ./llcharacter ./llcrashlogger 216 ./ ./llcommon ./llmath ./llwindow ./llaudio ./llcharacter ./llcrashlogger
213 ./lldatabase ./llhavok ./llimage ./llinventory ./llmedia ./llmessage 217 ./lldatabase ./llimage ./llinventory ./llmedia ./llmessage ./llphysics
214 ./llprimitive ./llrender ./llscene ./llui ./llvfs ./llwindow 218 ./llprimitive ./llrender ./llscene ./llui ./llvfs ./llwindow
215 ./llxml ./lscript ./lscript/lscript_compile 219 ./llxml ./lscript ./lscript/lscript_compile
216 ../libraries/include 220 ../libraries/include
217 ../libraries/include/havok
218 """ + 221 """ +
219 '../libraries/' + system_str + '/include' ) 222 '../libraries/' + system_str + '/include' )
220 223
221 client_external_libs = [] 224 client_external_libs = []
222 system_link_flags = '' 225 system_link_flags = ''
223 226
227 include_dirs += Split('../libraries/include/havok/hk460/physics ../libraries/include/havok/hk460/common ')
228
224 if platform != 'linux' and build_target == 'client' and enable_mozlib: 229 if platform != 'linux' and build_target == 'client' and enable_mozlib:
225 230
226 ### Mozilla include directories ### 231 ### Mozilla include directories ###
@@ -249,12 +254,18 @@ for build_target in targets:
249 ############## 254 ##############
250 255
251 # Generic GCC flags 256 # Generic GCC flags
252 cflags = '-g -pipe -Wall -Wno-reorder -Wno-trigraphs -Wno-sign-compare -Werror -fexceptions ' 257 # cflags = '-g -pipe -Wall -Wno-reorder -Wno-trigraphs -Wno-sign-compare -Werror -fexceptions '
258 cflags = '-g -pipe -Wall -Wno-reorder -Wno-trigraphs -Wno-sign-compare -fexceptions '
253 cxxflags = '' 259 cxxflags = ''
254 cppflags = '-D_FORTIFY_SOURCE=2 ' 260 #cppflags = '-D_FORTIFY_SOURCE=2 '
261 cppflags = ''
255 if standalone: 262 if standalone:
256 cppflags += '-DLL_STANDALONE ' 263 cppflags += '-DLL_STANDALONE '
257 264
265 if arch == 'i686':
266 cflags += '-m32 '
267 system_link_flags += '-m32 '
268
258 if build_target == 'server': 269 if build_target == 'server':
259 # Server flags 270 # Server flags
260 cppflags += '-D_GNU_SOURCE -DLL_MESA_HEADLESS=1 -DLL_MESA=1 ' 271 cppflags += '-D_GNU_SOURCE -DLL_MESA_HEADLESS=1 -DLL_MESA=1 '
@@ -290,9 +301,9 @@ for build_target in targets:
290 if standalone: 301 if standalone:
291 include_dirs += [d[2:] for d in 302 include_dirs += [d[2:] for d in
292 pkgconfig('--cflags-only-I').split()] 303 pkgconfig('--cflags-only-I').split()]
293 client_external_libs += [ 'boost_regex' ] 304 client_external_libs += [ 'boost_program_options-gcc34-mt', 'boost_signals-gcc34-mt', 'boost_regex-gcc34-mt']
294 else: 305 else:
295 client_external_libs += [ 'gtk-x11-2.0', 'atk-1.0', 'gmodule-2.0', 'gdk-x11-2.0', 'gdk_pixbuf-2.0', 'pango-1.0', 'pangoft2-1.0', 'pangox-1.0', 'pangoxft-1.0', 'Xinerama' , 'boost_regex'] 306 client_external_libs += [ 'gtk-x11-2.0', 'atk-1.0', 'gmodule-2.0', 'gdk-x11-2.0', 'gdk_pixbuf-2.0', 'pango-1.0', 'pangoft2-1.0', 'pangox-1.0', 'pangoxft-1.0', 'Xinerama', 'boost_program_options-gcc34-mt', 'boost_signals-gcc34-mt', 'boost_regex-gcc34-mt']
296 incdirs = [ 'ELFIO', 'atk-1.0', 'glib-2.0', 'gtk-2.0', 307 incdirs = [ 'ELFIO', 'atk-1.0', 'glib-2.0', 'gtk-2.0',
297 'llfreetype2', 'pango-1.0' ] 308 'llfreetype2', 'pango-1.0' ]
298 include_dirs += ['../libraries/' + system_str + '/include/' + d 309 include_dirs += ['../libraries/' + system_str + '/include/' + d
@@ -320,6 +331,8 @@ for build_target in targets:
320 include_dirs += [ '../libraries/' + system_str + '/include/libxml2'] 331 include_dirs += [ '../libraries/' + system_str + '/include/libxml2']
321 else: 332 else:
322 cppflags += '-DLL_GSTREAMER_ENABLED=0 ' 333 cppflags += '-DLL_GSTREAMER_ENABLED=0 '
334
335 cppflags += '-DLL_CURRENT_HAVOK_VERSION=460 '
323 else: 336 else:
324 # Mac-only flags 337 # Mac-only flags
325 cflags += '-x c++ -arch ppc -pipe -Wno-trigraphs -fpascal-strings -faltivec -fasm-blocks -g -fmessage-length=0 -mtune=G4 -Wno-deprecated-declarations -Wno-invalid-offsetof -mmacosx-version-min=10.3 -Wmost -Wno-sign-compare -Wno-switch -fconstant-cfstrings -ffor-scope -Wno-reorder -fexceptions ' 338 cflags += '-x c++ -arch ppc -pipe -Wno-trigraphs -fpascal-strings -faltivec -fasm-blocks -g -fmessage-length=0 -mtune=G4 -Wno-deprecated-declarations -Wno-invalid-offsetof -mmacosx-version-min=10.3 -Wmost -Wno-sign-compare -Wno-switch -fconstant-cfstrings -ffor-scope -Wno-reorder -fexceptions '
@@ -395,7 +408,7 @@ for build_target in targets:
395 408
396 base_env = Environment(CXX = compiler, 409 base_env = Environment(CXX = compiler,
397 CPPPATH = include_dirs, 410 CPPPATH = include_dirs,
398 LIBPATH = lib_path, 411 LIBPATH = [lib_dir] + [system_lib_dir] + [havok_lib_dir],
399 LINKFLAGS = system_link_flags + '--no-keep-memory --reduce-memory-overheads ' ) 412 LINKFLAGS = system_link_flags + '--no-keep-memory --reduce-memory-overheads ' )
400 413
401 ### Environments for various build types ### 414 ### Environments for various build types ###
@@ -409,6 +422,11 @@ for build_target in targets:
409 CPPFLAGS=debug_cppflags, 422 CPPFLAGS=debug_cppflags,
410 CXXFLAGS=debug_cxxflags) 423 CXXFLAGS=debug_cxxflags)
411 424
425 if buildtype == 'havok1debug':
426 env = base_env.Copy(CFLAGS=debug_cflags,
427 CPPFLAGS=debug_cppflags,
428 CXXFLAGS=debug_cxxflags)
429
412 if buildtype == 'release': 430 if buildtype == 'release':
413 env = base_env.Copy(CFLAGS=release_cflags, 431 env = base_env.Copy(CFLAGS=release_cflags,
414 CPPFLAGS=release_cppflags, 432 CPPFLAGS=release_cppflags,
@@ -627,6 +645,7 @@ for build_target in targets:
627 pkgconfig('--libs-only-l', ['gtk+-2.0']).split()] 645 pkgconfig('--libs-only-l', ['gtk+-2.0']).split()]
628 else: 646 else:
629 external_libs = net_external_libs + [ 'db-4.2', 'gtk-x11-2.0' ] 647 external_libs = net_external_libs + [ 'db-4.2', 'gtk-x11-2.0' ]
648 external_libs += ['boost_signals-gcc34-mt']
630 internal_libs = [ 'llui', 'llxml', 'llmessage', 'llvfs', 'llmath', 'llcommon' ] 649 internal_libs = [ 'llui', 'llxml', 'llmessage', 'llvfs', 'llmath', 'llcommon' ]
631 create_executable(output_crashlogger_bin + '-globalsyms', 650 create_executable(output_crashlogger_bin + '-globalsyms',
632 'linux_crash_logger', 651 'linux_crash_logger',
@@ -702,8 +721,8 @@ for build_target in targets:
702 721
703 elif build_target == 'server': 722 elif build_target == 'server':
704 create_static_module('lldatabase') 723 create_static_module('lldatabase')
724 create_static_module('llphysics', source_files='files.lst')
705 create_static_module('llscene') 725 create_static_module('llscene')
706 create_static_module('llhavok', '-fno-rtti')
707 create_static_module_from_dir('llkdu', 'llkdustatic') 726 create_static_module_from_dir('llkdu', 'llkdustatic')
708 727
709 728
@@ -711,7 +730,7 @@ for build_target in targets:
711 # BUILD SERVERS # 730 # BUILD SERVERS #
712 ################## 731 ##################
713 file_suffix = '' 732 file_suffix = ''
714 if buildtype == 'debug': 733 if buildtype == 'debug' or buildtype == 'havok1debug':
715 file_suffix = '_debug' 734 file_suffix = '_debug'
716 735
717 common_external_libs += [ 'pthread' ] 736 common_external_libs += [ 'pthread' ]
@@ -740,7 +759,7 @@ for build_target in targets:
740 759
741 # Dataserver 760 # Dataserver
742 external_libs = common_external_libs + [ 761 external_libs = common_external_libs + [
743 'boost_regex-gcc-mt', 'mysqlclient', 'tcmalloc', 'stacktrace', 762 'boost_regex-gcc33-mt', 'boost_signals-gcc33-mt', 'mysqlclient', 'tcmalloc', 'stacktrace',
744 ] 763 ]
745 internal_libs = [ 'llcharacter', 'lldatabase', 'llimage', 'llimagej2coj', 'llinventory', 764 internal_libs = [ 'llcharacter', 'lldatabase', 'llimage', 'llimagej2coj', 'llinventory',
746 'llscene', 'llmessage', 'llvfs', 'llxml', 'llcommon', 'llmath' ] 765 'llscene', 'llmessage', 'llvfs', 'llxml', 'llcommon', 'llmath' ]
@@ -763,28 +782,46 @@ for build_target in targets:
763 782
764 # Mapserver 783 # Mapserver
765 external_libs = common_external_libs + ['OSMesa16', 'kdu', 784 external_libs = common_external_libs + ['OSMesa16', 'kdu',
766 'boost_regex-gcc-mt', 'iconv', 'jpeg', 'openjpeg', 'GL', 785 'boost_regex-gcc33-mt', 'boost_signals-gcc33-mt', 'iconv',
767 'mysqlclient', 'pthread', 'dl'] 786 'jpeg', 'openjpeg', 'GL', 'mysqlclient', 'png12', 'pthread', 'dl']
768 internal_libs = ['llrender', 'llwindow', 'llimage', 'llimagej2coj', 'lldatabase', 'llprimitive', 'llmessage', 'llkdustatic', 787 internal_libs = ['llrender', 'llwindow', 'llimage', 'llimagej2coj', 'lldatabase', 'llprimitive', 'llmessage', 'llkdustatic',
769 'llxml', 'llvfs', 'llmath', 'llcommon'] 788 'llxml', 'llvfs', 'llmath', 'llcommon']
770 create_executable('mapserver/mapserver' + file_suffix, 'mapserver', 789 create_executable('mapserver/mapserver' + file_suffix, 'mapserver',
771 internal_libs + external_libs) 790 internal_libs + external_libs)
772 791
773 # Simulator 792 # Simulator
774 external_libs = common_external_libs + [ 793 Depends('newsim/simulator' + file_suffix, 'mapserver/mapserver' + file_suffix)
775 'hkdynamics', 'hkgeometry', 'hkmath', 'hkbase', 'hkcollide', 794 external_libs = common_external_libs + ['boost_regex-gcc33-mt', 'boost_signals-gcc33-mt', 'openjpeg', 'dl', 'kdu',
776 'hkactions', 'boost_regex-gcc-mt', 'openjpeg', 'dl', 'kdu', 795 'mysqlclient', 'iconv', 'tcmalloc', 'stacktrace', 'png12']
777 'mysqlclient', 'iconv', 'tcmalloc', 'stacktrace', 796
778 ] 797 # the order of the havok libs matters
798 external_libs += [
799 'libhkcompat.a',
800 'libhkutilities.a',
801 'libhkvisualize.a',
802 'libhkdynamics.a',
803 'libhkvehicle.a',
804 'libhkcollide.a',
805 'libhkinternal.a',
806 'libhkconstraintsolver.a',
807 'libhkmath.a',
808 'libhkscenedata.a',
809 'libhkserialize.a',
810 'libhkgraphicsogl.a',
811 'libhkgraphicsbridge.a',
812 'libhkgraphics.a',
813 'libhkdemoframework.a',
814 'libhkbase.a'
815 ]
779 internal_libs = [ 'lscript', 'llprimitive', 816 internal_libs = [ 'lscript', 'llprimitive',
780 'llscene', 'llhavok', 'llinventory', 'llimage', 'llimagej2coj', 817 'llscene', 'llphysics', 'llinventory', 'llimage', 'llimagej2coj',
781 'llcharacter', 'llxml', 'lldatabase', 'llkdustatic', 818 'llcharacter', 'llxml', 'lldatabase', 'llkdustatic',
782 'llmessage', 'llvfs', 'llmath', 'llcommon' ] 819 'llmessage', 'llvfs', 'llmath', 'llcommon' ]
783 create_executable('newsim/simulator' + file_suffix, 'newsim', 820 create_executable('newsim/simulator' + file_suffix, 'newsim',
784 internal_libs + external_libs) 821 internal_libs + external_libs)
785 822
786 # texture upload verifier 823 # texture upload verifier
787 external_libs = common_external_libs + [ 'kdu', 'openjpeg', 'dl' ] 824 external_libs = common_external_libs + ['boost_signals-gcc33-mt', 'kdu', 'openjpeg', 'png12', 'z', 'dl']
788 internal_libs = [ 825 internal_libs = [
789 'llimage', 826 'llimage',
790 'llimagej2coj', 827 'llimagej2coj',
@@ -816,8 +853,10 @@ for build_target in targets:
816 # Test 853 # Test
817 Depends('test/test', 'newsim/simulator' + file_suffix) 854 Depends('test/test', 'newsim/simulator' + file_suffix)
818 external_libs = common_external_libs + ['mysqlclient'] 855 external_libs = common_external_libs + ['mysqlclient']
856 if platform == 'linux':
857 external_libs += ['boost_signals-gcc33-mt']
819 internal_libs = [ 'lldatabase', 'llinventory', 'llmessage', 'llxml', 858 internal_libs = [ 'lldatabase', 'llinventory', 'llmessage', 'llxml',
820 'llvfs', 'llcharacter', 'llmath', 'llcommon' ] 859 'llvfs', 'llcharacter', 'llphysics', 'llprimitive', 'llmath', 'llcommon' ]
821 test_executable = 'test/test' + file_suffix 860 test_executable = 'test/test' + file_suffix
822 create_executable(test_executable, 'test', 861 create_executable(test_executable, 'test',
823 internal_libs + external_libs) 862 internal_libs + external_libs)
diff --git a/linden/indra/indra_complete/indra_complete.sln b/linden/indra/indra_complete/indra_complete.sln
index b9efa5a..e990489 100644
--- a/linden/indra/indra_complete/indra_complete.sln
+++ b/linden/indra/indra_complete/indra_complete.sln
@@ -112,7 +112,7 @@ EndProject
112 {B4B838C7-2C72-428E-BBFD-25764E659A8B} = {B4B838C7-2C72-428E-BBFD-25764E659A8B} 112 {B4B838C7-2C72-428E-BBFD-25764E659A8B} = {B4B838C7-2C72-428E-BBFD-25764E659A8B}
113 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E} = {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E} 113 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E} = {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}
114 {D37774F4-253D-4760-BF64-372A943224A1} = {D37774F4-253D-4760-BF64-372A943224A1} 114 {D37774F4-253D-4760-BF64-372A943224A1} = {D37774F4-253D-4760-BF64-372A943224A1}
115 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE} = {023011F7-3ADB-49D3-9EC5-6D392F6D15FE} 115 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE} = {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}
116 EndProjectSection 116 EndProjectSection
117EndProject 117EndProject
118 ProjectSection(ProjectDependencies) = postProject 118 ProjectSection(ProjectDependencies) = postProject
@@ -194,6 +194,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test", "..\test\test.vcproj
194 {777F38BE-2DFE-4051-9AAD-2832ABC474CC} = {777F38BE-2DFE-4051-9AAD-2832ABC474CC} 194 {777F38BE-2DFE-4051-9AAD-2832ABC474CC} = {777F38BE-2DFE-4051-9AAD-2832ABC474CC}
195 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} = {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} 195 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} = {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}
196 {D37774F4-253D-4760-BF64-372A943224A1} = {D37774F4-253D-4760-BF64-372A943224A1} 196 {D37774F4-253D-4760-BF64-372A943224A1} = {D37774F4-253D-4760-BF64-372A943224A1}
197 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE} = {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}
197 EndProjectSection 198 EndProjectSection
198EndProject 199EndProject
199 ProjectSection(ProjectDependencies) = postProject 200 ProjectSection(ProjectDependencies) = postProject
@@ -209,6 +210,7 @@ EndProject
209 EndProjectSection 210 EndProjectSection
210EndProject 211EndProject
211 ProjectSection(ProjectDependencies) = postProject 212 ProjectSection(ProjectDependencies) = postProject
213 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}
212 EndProjectSection 214 EndProjectSection
213EndProject 215EndProject
214 ProjectSection(ProjectDependencies) = postProject 216 ProjectSection(ProjectDependencies) = postProject
@@ -239,6 +241,7 @@ EndProject
239Global 241Global
240 GlobalSection(SolutionConfiguration) = preSolution 242 GlobalSection(SolutionConfiguration) = preSolution
241 Debug = Debug 243 Debug = Debug
244 DebugMesaHeadless = DebugMesaHeadless
242 Release = Release 245 Release = Release
243 ReleaseForDownload = ReleaseForDownload 246 ReleaseForDownload = ReleaseForDownload
244 ReleaseNoOpt = ReleaseNoOpt 247 ReleaseNoOpt = ReleaseNoOpt
@@ -248,6 +251,7 @@ Global
248 GlobalSection(ProjectConfiguration) = postSolution 251 GlobalSection(ProjectConfiguration) = postSolution
249 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Debug.ActiveCfg = Debug|Win32 252 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Debug.ActiveCfg = Debug|Win32
250 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Debug.Build.0 = Debug|Win32 253 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Debug.Build.0 = Debug|Win32
254 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.DebugMesaHeadless.ActiveCfg = Debug|Win32
251 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Release.ActiveCfg = Release|Win32 255 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Release.ActiveCfg = Release|Win32
252 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Release.Build.0 = Release|Win32 256 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Release.Build.0 = Release|Win32
253 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.ReleaseForDownload.ActiveCfg = Release|Win32 257 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -256,6 +260,7 @@ Global
256 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 260 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
257 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.Debug.ActiveCfg = Debug|Win32 261 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.Debug.ActiveCfg = Debug|Win32
258 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.Debug.Build.0 = Debug|Win32 262 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.Debug.Build.0 = Debug|Win32
263 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.DebugMesaHeadless.ActiveCfg = Debug|Win32
259 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.Release.ActiveCfg = Release|Win32 264 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.Release.ActiveCfg = Release|Win32
260 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.Release.Build.0 = Release|Win32 265 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.Release.Build.0 = Release|Win32
261 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.ReleaseForDownload.ActiveCfg = Release|Win32 266 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -264,6 +269,7 @@ Global
264 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 269 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
265 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.Debug.ActiveCfg = Debug|Win32 270 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.Debug.ActiveCfg = Debug|Win32
266 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.Debug.Build.0 = Debug|Win32 271 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.Debug.Build.0 = Debug|Win32
272 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.DebugMesaHeadless.ActiveCfg = Debug|Win32
267 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.Release.ActiveCfg = Release|Win32 273 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.Release.ActiveCfg = Release|Win32
268 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.Release.Build.0 = Release|Win32 274 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.Release.Build.0 = Release|Win32
269 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.ReleaseForDownload.ActiveCfg = Release|Win32 275 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -272,6 +278,7 @@ Global
272 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 278 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
273 {D37774F4-253D-4760-BF64-372A943224A1}.Debug.ActiveCfg = Debug|Win32 279 {D37774F4-253D-4760-BF64-372A943224A1}.Debug.ActiveCfg = Debug|Win32
274 {D37774F4-253D-4760-BF64-372A943224A1}.Debug.Build.0 = Debug|Win32 280 {D37774F4-253D-4760-BF64-372A943224A1}.Debug.Build.0 = Debug|Win32
281 {D37774F4-253D-4760-BF64-372A943224A1}.DebugMesaHeadless.ActiveCfg = Debug|Win32
275 {D37774F4-253D-4760-BF64-372A943224A1}.Release.ActiveCfg = Release|Win32 282 {D37774F4-253D-4760-BF64-372A943224A1}.Release.ActiveCfg = Release|Win32
276 {D37774F4-253D-4760-BF64-372A943224A1}.Release.Build.0 = Release|Win32 283 {D37774F4-253D-4760-BF64-372A943224A1}.Release.Build.0 = Release|Win32
277 {D37774F4-253D-4760-BF64-372A943224A1}.ReleaseForDownload.ActiveCfg = Release|Win32 284 {D37774F4-253D-4760-BF64-372A943224A1}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -280,6 +287,7 @@ Global
280 {D37774F4-253D-4760-BF64-372A943224A1}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 287 {D37774F4-253D-4760-BF64-372A943224A1}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
281 {A5470DA6-0C3A-4602-B930-43DB25511A59}.Debug.ActiveCfg = Debug|Win32 288 {A5470DA6-0C3A-4602-B930-43DB25511A59}.Debug.ActiveCfg = Debug|Win32
282 {A5470DA6-0C3A-4602-B930-43DB25511A59}.Debug.Build.0 = Debug|Win32 289 {A5470DA6-0C3A-4602-B930-43DB25511A59}.Debug.Build.0 = Debug|Win32
290 {A5470DA6-0C3A-4602-B930-43DB25511A59}.DebugMesaHeadless.ActiveCfg = Debug|Win32
283 {A5470DA6-0C3A-4602-B930-43DB25511A59}.Release.ActiveCfg = Release|Win32 291 {A5470DA6-0C3A-4602-B930-43DB25511A59}.Release.ActiveCfg = Release|Win32
284 {A5470DA6-0C3A-4602-B930-43DB25511A59}.Release.Build.0 = Release|Win32 292 {A5470DA6-0C3A-4602-B930-43DB25511A59}.Release.Build.0 = Release|Win32
285 {A5470DA6-0C3A-4602-B930-43DB25511A59}.ReleaseForDownload.ActiveCfg = Release|Win32 293 {A5470DA6-0C3A-4602-B930-43DB25511A59}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -288,6 +296,7 @@ Global
288 {A5470DA6-0C3A-4602-B930-43DB25511A59}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 296 {A5470DA6-0C3A-4602-B930-43DB25511A59}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
289 {DE55D666-6A3D-476C-937F-109269B83681}.Debug.ActiveCfg = Debug|Win32 297 {DE55D666-6A3D-476C-937F-109269B83681}.Debug.ActiveCfg = Debug|Win32
290 {DE55D666-6A3D-476C-937F-109269B83681}.Debug.Build.0 = Debug|Win32 298 {DE55D666-6A3D-476C-937F-109269B83681}.Debug.Build.0 = Debug|Win32
299 {DE55D666-6A3D-476C-937F-109269B83681}.DebugMesaHeadless.ActiveCfg = Debug|Win32
291 {DE55D666-6A3D-476C-937F-109269B83681}.Release.ActiveCfg = Release|Win32 300 {DE55D666-6A3D-476C-937F-109269B83681}.Release.ActiveCfg = Release|Win32
292 {DE55D666-6A3D-476C-937F-109269B83681}.Release.Build.0 = Release|Win32 301 {DE55D666-6A3D-476C-937F-109269B83681}.Release.Build.0 = Release|Win32
293 {DE55D666-6A3D-476C-937F-109269B83681}.ReleaseForDownload.ActiveCfg = Release|Win32 302 {DE55D666-6A3D-476C-937F-109269B83681}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -296,6 +305,7 @@ Global
296 {DE55D666-6A3D-476C-937F-109269B83681}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 305 {DE55D666-6A3D-476C-937F-109269B83681}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
297 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.Debug.ActiveCfg = Debug|Win32 306 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.Debug.ActiveCfg = Debug|Win32
298 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.Debug.Build.0 = Debug|Win32 307 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.Debug.Build.0 = Debug|Win32
308 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.DebugMesaHeadless.ActiveCfg = Debug|Win32
299 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.Release.ActiveCfg = Release|Win32 309 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.Release.ActiveCfg = Release|Win32
300 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.Release.Build.0 = Release|Win32 310 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.Release.Build.0 = Release|Win32
301 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.ReleaseForDownload.ActiveCfg = Release|Win32 311 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -304,6 +314,7 @@ Global
304 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 314 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
305 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.Debug.ActiveCfg = Debug|Win32 315 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.Debug.ActiveCfg = Debug|Win32
306 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.Debug.Build.0 = Debug|Win32 316 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.Debug.Build.0 = Debug|Win32
317 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.DebugMesaHeadless.ActiveCfg = Debug|Win32
307 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.Release.ActiveCfg = Release|Win32 318 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.Release.ActiveCfg = Release|Win32
308 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.Release.Build.0 = Release|Win32 319 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.Release.Build.0 = Release|Win32
309 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.ReleaseForDownload.ActiveCfg = Release|Win32 320 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -312,6 +323,7 @@ Global
312 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 323 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
313 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.Debug.ActiveCfg = Debug|Win32 324 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.Debug.ActiveCfg = Debug|Win32
314 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.Debug.Build.0 = Debug|Win32 325 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.Debug.Build.0 = Debug|Win32
326 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.DebugMesaHeadless.ActiveCfg = Debug|Win32
315 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.Release.ActiveCfg = Release|Win32 327 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.Release.ActiveCfg = Release|Win32
316 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.Release.Build.0 = Release|Win32 328 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.Release.Build.0 = Release|Win32
317 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.ReleaseForDownload.ActiveCfg = Release|Win32 329 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -320,6 +332,7 @@ Global
320 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 332 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
321 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.Debug.ActiveCfg = Debug|Win32 333 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.Debug.ActiveCfg = Debug|Win32
322 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.Debug.Build.0 = Debug|Win32 334 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.Debug.Build.0 = Debug|Win32
335 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.DebugMesaHeadless.ActiveCfg = Debug|Win32
323 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.Release.ActiveCfg = Release|Win32 336 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.Release.ActiveCfg = Release|Win32
324 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.Release.Build.0 = Release|Win32 337 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.Release.Build.0 = Release|Win32
325 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.ReleaseForDownload.ActiveCfg = Release|Win32 338 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -328,6 +341,7 @@ Global
328 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 341 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
329 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.Debug.ActiveCfg = Debug|Win32 342 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.Debug.ActiveCfg = Debug|Win32
330 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.Debug.Build.0 = Debug|Win32 343 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.Debug.Build.0 = Debug|Win32
344 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.DebugMesaHeadless.ActiveCfg = Debug|Win32
331 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.Release.ActiveCfg = Release|Win32 345 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.Release.ActiveCfg = Release|Win32
332 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.Release.Build.0 = Release|Win32 346 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.Release.Build.0 = Release|Win32
333 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.ReleaseForDownload.ActiveCfg = Release|Win32 347 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -336,6 +350,7 @@ Global
336 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 350 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
337 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.Debug.ActiveCfg = Debug|Win32 351 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.Debug.ActiveCfg = Debug|Win32
338 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.Debug.Build.0 = Debug|Win32 352 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.Debug.Build.0 = Debug|Win32
353 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.DebugMesaHeadless.ActiveCfg = Debug|Win32
339 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.Release.ActiveCfg = Release|Win32 354 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.Release.ActiveCfg = Release|Win32
340 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.Release.Build.0 = Release|Win32 355 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.Release.Build.0 = Release|Win32
341 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.ReleaseForDownload.ActiveCfg = Release|Win32 356 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -344,6 +359,7 @@ Global
344 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 359 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
345 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Debug.ActiveCfg = Debug|Win32 360 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Debug.ActiveCfg = Debug|Win32
346 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Debug.Build.0 = Debug|Win32 361 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Debug.Build.0 = Debug|Win32
362 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.DebugMesaHeadless.ActiveCfg = Debug|Win32
347 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Release.ActiveCfg = Release|Win32 363 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Release.ActiveCfg = Release|Win32
348 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Release.Build.0 = Release|Win32 364 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Release.Build.0 = Release|Win32
349 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.ReleaseForDownload.ActiveCfg = ReleaseForDownload|Win32 365 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.ReleaseForDownload.ActiveCfg = ReleaseForDownload|Win32
@@ -352,6 +368,7 @@ Global
352 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 368 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
353 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.Debug.ActiveCfg = Debug|Win32 369 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.Debug.ActiveCfg = Debug|Win32
354 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.Debug.Build.0 = Debug|Win32 370 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.Debug.Build.0 = Debug|Win32
371 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.DebugMesaHeadless.ActiveCfg = Debug|Win32
355 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.Release.ActiveCfg = Release|Win32 372 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.Release.ActiveCfg = Release|Win32
356 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.Release.Build.0 = Release|Win32 373 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.Release.Build.0 = Release|Win32
357 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.ReleaseForDownload.ActiveCfg = Release|Win32 374 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -360,6 +377,7 @@ Global
360 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 377 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
361 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.Debug.ActiveCfg = Debug|Win32 378 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.Debug.ActiveCfg = Debug|Win32
362 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.Debug.Build.0 = Debug|Win32 379 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.Debug.Build.0 = Debug|Win32
380 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.DebugMesaHeadless.ActiveCfg = DebugMesaHeadless|Win32
363 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.Release.ActiveCfg = Release|Win32 381 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.Release.ActiveCfg = Release|Win32
364 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.Release.Build.0 = Release|Win32 382 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.Release.Build.0 = Release|Win32
365 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.ReleaseForDownload.ActiveCfg = Release|Win32 383 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -368,6 +386,7 @@ Global
368 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 386 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
369 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.Debug.ActiveCfg = Debug|Win32 387 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.Debug.ActiveCfg = Debug|Win32
370 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.Debug.Build.0 = Debug|Win32 388 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.Debug.Build.0 = Debug|Win32
389 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.DebugMesaHeadless.ActiveCfg = Debug|Win32
371 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.Release.ActiveCfg = Release|Win32 390 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.Release.ActiveCfg = Release|Win32
372 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.Release.Build.0 = Release|Win32 391 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.Release.Build.0 = Release|Win32
373 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.ReleaseForDownload.ActiveCfg = Release|Win32 392 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -376,6 +395,7 @@ Global
376 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 395 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
377 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.Debug.ActiveCfg = Debug|Win32 396 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.Debug.ActiveCfg = Debug|Win32
378 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.Debug.Build.0 = Debug|Win32 397 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.Debug.Build.0 = Debug|Win32
398 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.DebugMesaHeadless.ActiveCfg = Debug|Win32
379 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.Release.ActiveCfg = Release|Win32 399 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.Release.ActiveCfg = Release|Win32
380 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.Release.Build.0 = Release|Win32 400 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.Release.Build.0 = Release|Win32
381 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.ReleaseForDownload.ActiveCfg = Release|Win32 401 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -384,6 +404,7 @@ Global
384 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 404 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
385 {44CE6D82-7320-4609-8FC3-5965C19F4808}.Debug.ActiveCfg = Debug|Win32 405 {44CE6D82-7320-4609-8FC3-5965C19F4808}.Debug.ActiveCfg = Debug|Win32
386 {44CE6D82-7320-4609-8FC3-5965C19F4808}.Debug.Build.0 = Debug|Win32 406 {44CE6D82-7320-4609-8FC3-5965C19F4808}.Debug.Build.0 = Debug|Win32
407 {44CE6D82-7320-4609-8FC3-5965C19F4808}.DebugMesaHeadless.ActiveCfg = Debug|Win32
387 {44CE6D82-7320-4609-8FC3-5965C19F4808}.Release.ActiveCfg = Release|Win32 408 {44CE6D82-7320-4609-8FC3-5965C19F4808}.Release.ActiveCfg = Release|Win32
388 {44CE6D82-7320-4609-8FC3-5965C19F4808}.Release.Build.0 = Release|Win32 409 {44CE6D82-7320-4609-8FC3-5965C19F4808}.Release.Build.0 = Release|Win32
389 {44CE6D82-7320-4609-8FC3-5965C19F4808}.ReleaseForDownload.ActiveCfg = Release|Win32 410 {44CE6D82-7320-4609-8FC3-5965C19F4808}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -392,6 +413,7 @@ Global
392 {44CE6D82-7320-4609-8FC3-5965C19F4808}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 413 {44CE6D82-7320-4609-8FC3-5965C19F4808}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
393 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.Debug.ActiveCfg = Debug|Win32 414 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.Debug.ActiveCfg = Debug|Win32
394 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.Debug.Build.0 = Debug|Win32 415 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.Debug.Build.0 = Debug|Win32
416 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.DebugMesaHeadless.ActiveCfg = Debug|Win32
395 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.Release.ActiveCfg = Release|Win32 417 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.Release.ActiveCfg = Release|Win32
396 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.Release.Build.0 = Release|Win32 418 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.Release.Build.0 = Release|Win32
397 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.ReleaseForDownload.ActiveCfg = Release|Win32 419 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -400,6 +422,7 @@ Global
400 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 422 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
401 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.Debug.ActiveCfg = Debug|Win32 423 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.Debug.ActiveCfg = Debug|Win32
402 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.Debug.Build.0 = Debug|Win32 424 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.Debug.Build.0 = Debug|Win32
425 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.DebugMesaHeadless.ActiveCfg = Debug|Win32
403 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.Release.ActiveCfg = Release|Win32 426 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.Release.ActiveCfg = Release|Win32
404 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.Release.Build.0 = Release|Win32 427 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.Release.Build.0 = Release|Win32
405 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.ReleaseForDownload.ActiveCfg = Release|Win32 428 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -408,6 +431,7 @@ Global
408 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 431 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
409 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.Debug.ActiveCfg = Debug|Win32 432 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.Debug.ActiveCfg = Debug|Win32
410 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.Debug.Build.0 = Debug|Win32 433 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.Debug.Build.0 = Debug|Win32
434 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.DebugMesaHeadless.ActiveCfg = Debug|Win32
411 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.Release.ActiveCfg = Release|Win32 435 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.Release.ActiveCfg = Release|Win32
412 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.Release.Build.0 = Release|Win32 436 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.Release.Build.0 = Release|Win32
413 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.ReleaseForDownload.ActiveCfg = Release|Win32 437 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -416,6 +440,7 @@ Global
416 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 440 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
417 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.Debug.ActiveCfg = Debug|Win32 441 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.Debug.ActiveCfg = Debug|Win32
418 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.Debug.Build.0 = Debug|Win32 442 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.Debug.Build.0 = Debug|Win32
443 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.DebugMesaHeadless.ActiveCfg = Debug|Win32
419 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.Release.ActiveCfg = Release|Win32 444 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.Release.ActiveCfg = Release|Win32
420 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.Release.Build.0 = Release|Win32 445 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.Release.Build.0 = Release|Win32
421 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.ReleaseForDownload.ActiveCfg = Release|Win32 446 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -424,18 +449,21 @@ Global
424 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.ReleaseNoOpt.Build.0 = Release|Win32 449 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.ReleaseNoOpt.Build.0 = Release|Win32
425 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.Debug.ActiveCfg = Debug|Win32 450 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.Debug.ActiveCfg = Debug|Win32
426 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.Debug.Build.0 = Debug|Win32 451 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.Debug.Build.0 = Debug|Win32
452 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.DebugMesaHeadless.ActiveCfg = Debug|Win32
427 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.Release.ActiveCfg = Release|Win32 453 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.Release.ActiveCfg = Release|Win32
428 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.Release.Build.0 = Release|Win32 454 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.Release.Build.0 = Release|Win32
429 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.ReleaseForDownload.ActiveCfg = Release|Win32 455 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.ReleaseForDownload.ActiveCfg = Release|Win32
430 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.ReleaseNoOpt.ActiveCfg = Release|Win32 456 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.ReleaseNoOpt.ActiveCfg = Release|Win32
431 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Debug.ActiveCfg = Debug|Win32 457 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Debug.ActiveCfg = Debug|Win32
432 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Debug.Build.0 = Debug|Win32 458 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Debug.Build.0 = Debug|Win32
459 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.DebugMesaHeadless.ActiveCfg = Debug|Win32
433 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Release.ActiveCfg = Release|Win32 460 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Release.ActiveCfg = Release|Win32
434 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Release.Build.0 = Release|Win32 461 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Release.Build.0 = Release|Win32
435 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.ReleaseForDownload.ActiveCfg = Release|Win32 462 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.ReleaseForDownload.ActiveCfg = Release|Win32
436 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.ReleaseNoOpt.ActiveCfg = Release|Win32 463 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.ReleaseNoOpt.ActiveCfg = Release|Win32
437 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Debug.ActiveCfg = Debug|Win32 464 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Debug.ActiveCfg = Debug|Win32
438 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Debug.Build.0 = Debug|Win32 465 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Debug.Build.0 = Debug|Win32
466 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.DebugMesaHeadless.ActiveCfg = Debug|Win32
439 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Release.ActiveCfg = Release|Win32 467 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Release.ActiveCfg = Release|Win32
440 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Release.Build.0 = Release|Win32 468 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Release.Build.0 = Release|Win32
441 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.ReleaseForDownload.ActiveCfg = Release|Win32 469 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -444,6 +472,7 @@ Global
444 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 472 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
445 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.Debug.ActiveCfg = Debug|Win32 473 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.Debug.ActiveCfg = Debug|Win32
446 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.Debug.Build.0 = Debug|Win32 474 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.Debug.Build.0 = Debug|Win32
475 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.DebugMesaHeadless.ActiveCfg = Debug|Win32
447 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.Release.ActiveCfg = Release|Win32 476 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.Release.ActiveCfg = Release|Win32
448 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.Release.Build.0 = Release|Win32 477 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.Release.Build.0 = Release|Win32
449 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.ReleaseForDownload.ActiveCfg = Release|Win32 478 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -451,11 +480,13 @@ Global
451 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.ReleaseNoOpt.ActiveCfg = ReleaseNoOpt|Win32 480 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.ReleaseNoOpt.ActiveCfg = ReleaseNoOpt|Win32
452 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 481 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
453 {F56CA265-93E9-4068-8A67-8B104C876D70}.Debug.ActiveCfg = Debug|Win32 482 {F56CA265-93E9-4068-8A67-8B104C876D70}.Debug.ActiveCfg = Debug|Win32
483 {F56CA265-93E9-4068-8A67-8B104C876D70}.DebugMesaHeadless.ActiveCfg = Debug|Win32
454 {F56CA265-93E9-4068-8A67-8B104C876D70}.Release.ActiveCfg = Release|Win32 484 {F56CA265-93E9-4068-8A67-8B104C876D70}.Release.ActiveCfg = Release|Win32
455 {F56CA265-93E9-4068-8A67-8B104C876D70}.ReleaseForDownload.ActiveCfg = Release|Win32 485 {F56CA265-93E9-4068-8A67-8B104C876D70}.ReleaseForDownload.ActiveCfg = Release|Win32
456 {F56CA265-93E9-4068-8A67-8B104C876D70}.ReleaseNoOpt.ActiveCfg = ReleaseNoOpt|Win32 486 {F56CA265-93E9-4068-8A67-8B104C876D70}.ReleaseNoOpt.ActiveCfg = ReleaseNoOpt|Win32
457 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Debug.ActiveCfg = Debug|Win32 487 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Debug.ActiveCfg = Debug|Win32
458 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Debug.Build.0 = Debug|Win32 488 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Debug.Build.0 = Debug|Win32
489 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.DebugMesaHeadless.ActiveCfg = Debug|Win32
459 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Release.ActiveCfg = Release|Win32 490 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Release.ActiveCfg = Release|Win32
460 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Release.Build.0 = Release|Win32 491 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Release.Build.0 = Release|Win32
461 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.ReleaseForDownload.ActiveCfg = Release|Win32 492 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -464,6 +495,7 @@ Global
464 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 495 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
465 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.Debug.ActiveCfg = Debug|Win32 496 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.Debug.ActiveCfg = Debug|Win32
466 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.Debug.Build.0 = Debug|Win32 497 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.Debug.Build.0 = Debug|Win32
498 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.DebugMesaHeadless.ActiveCfg = Debug|Win32
467 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.Release.ActiveCfg = Release|Win32 499 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.Release.ActiveCfg = Release|Win32
468 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.Release.Build.0 = Release|Win32 500 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.Release.Build.0 = Release|Win32
469 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.ReleaseForDownload.ActiveCfg = Release|Win32 501 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -472,6 +504,7 @@ Global
472 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 504 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
473 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.Debug.ActiveCfg = Debug|Win32 505 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.Debug.ActiveCfg = Debug|Win32
474 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.Debug.Build.0 = Debug|Win32 506 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.Debug.Build.0 = Debug|Win32
507 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.DebugMesaHeadless.ActiveCfg = Debug|Win32
475 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.Release.ActiveCfg = Release|Win32 508 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.Release.ActiveCfg = Release|Win32
476 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.Release.Build.0 = Release|Win32 509 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.Release.Build.0 = Release|Win32
477 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.ReleaseForDownload.ActiveCfg = Release|Win32 510 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -479,22 +512,26 @@ Global
479 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 512 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
480 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.Debug.ActiveCfg = Debug|Win32 513 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.Debug.ActiveCfg = Debug|Win32
481 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.Debug.Build.0 = Debug|Win32 514 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.Debug.Build.0 = Debug|Win32
515 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.DebugMesaHeadless.ActiveCfg = Debug|Win32
482 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.Release.ActiveCfg = Release|Win32 516 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.Release.ActiveCfg = Release|Win32
483 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.Release.Build.0 = Release|Win32 517 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.Release.Build.0 = Release|Win32
484 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseForDownload.ActiveCfg = Release|Win32 518 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseForDownload.ActiveCfg = Release|Win32
485 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseForDownload.Build.0 = Release|Win32 519 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseForDownload.Build.0 = Release|Win32
486 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseNoOpt.ActiveCfg = ReleaseNoOpt|Win32 520 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseNoOpt.ActiveCfg = ReleaseNoOpt|Win32
487 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 521 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
488 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.Debug.ActiveCfg = Debug|Win32 522 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.Debug.ActiveCfg = Debug|Win32
489 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.Debug.Build.0 = Debug|Win32 523 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.Debug.Build.0 = Debug|Win32
490 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.Release.ActiveCfg = Release|Win32 524 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.DebugMesaHeadless.ActiveCfg = DebugHk460|Win32
491 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.Release.Build.0 = Release|Win32 525 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.DebugMesaHeadless.Build.0 = DebugHk460|Win32
492 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.ReleaseForDownload.ActiveCfg = Release|Win32 526 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.Release.ActiveCfg = Release|Win32
493 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.ReleaseForDownload.Build.0 = Release|Win32 527 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.Release.Build.0 = Release|Win32
494 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.ReleaseNoOpt.ActiveCfg = ReleaseNoOpt|Win32 528 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.ReleaseForDownload.ActiveCfg = Release|Win32
495 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 529 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.ReleaseForDownload.Build.0 = Release|Win32
530 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.ReleaseNoOpt.ActiveCfg = ReleaseNoOpt|Win32
531 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
496 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Debug.ActiveCfg = Debug|Win32 532 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Debug.ActiveCfg = Debug|Win32
497 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Debug.Build.0 = Debug|Win32 533 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Debug.Build.0 = Debug|Win32
534 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.DebugMesaHeadless.ActiveCfg = Debug|Win32
498 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Release.ActiveCfg = Release|Win32 535 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Release.ActiveCfg = Release|Win32
499 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Release.Build.0 = Release|Win32 536 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Release.Build.0 = Release|Win32
500 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.ReleaseForDownload.ActiveCfg = Release|Win32 537 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -503,6 +540,7 @@ Global
503 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 540 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
504 {076DD042-2E58-42EA-9401-53210B65C1FC}.Debug.ActiveCfg = Debug|Win32 541 {076DD042-2E58-42EA-9401-53210B65C1FC}.Debug.ActiveCfg = Debug|Win32
505 {076DD042-2E58-42EA-9401-53210B65C1FC}.Debug.Build.0 = Debug|Win32 542 {076DD042-2E58-42EA-9401-53210B65C1FC}.Debug.Build.0 = Debug|Win32
543 {076DD042-2E58-42EA-9401-53210B65C1FC}.DebugMesaHeadless.ActiveCfg = Debug|Win32
506 {076DD042-2E58-42EA-9401-53210B65C1FC}.Release.ActiveCfg = Release|Win32 544 {076DD042-2E58-42EA-9401-53210B65C1FC}.Release.ActiveCfg = Release|Win32
507 {076DD042-2E58-42EA-9401-53210B65C1FC}.Release.Build.0 = Release|Win32 545 {076DD042-2E58-42EA-9401-53210B65C1FC}.Release.Build.0 = Release|Win32
508 {076DD042-2E58-42EA-9401-53210B65C1FC}.ReleaseForDownload.ActiveCfg = Release|Win32 546 {076DD042-2E58-42EA-9401-53210B65C1FC}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -511,6 +549,7 @@ Global
511 {076DD042-2E58-42EA-9401-53210B65C1FC}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 549 {076DD042-2E58-42EA-9401-53210B65C1FC}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
512 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.Debug.ActiveCfg = Debug|Win32 550 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.Debug.ActiveCfg = Debug|Win32
513 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.Debug.Build.0 = Debug|Win32 551 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.Debug.Build.0 = Debug|Win32
552 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.DebugMesaHeadless.ActiveCfg = Debug|Win32
514 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.Release.ActiveCfg = Release|Win32 553 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.Release.ActiveCfg = Release|Win32
515 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.Release.Build.0 = Release|Win32 554 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.Release.Build.0 = Release|Win32
516 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.ReleaseForDownload.ActiveCfg = Release|Win32 555 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.ReleaseForDownload.ActiveCfg = Release|Win32
@@ -519,6 +558,7 @@ Global
519 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 558 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32
520 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.Debug.ActiveCfg = Debug|Win32 559 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.Debug.ActiveCfg = Debug|Win32
521 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.Debug.Build.0 = Debug|Win32 560 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.Debug.Build.0 = Debug|Win32
561 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.DebugMesaHeadless.ActiveCfg = Debug|Win32
522 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.Release.ActiveCfg = Release|Win32 562 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.Release.ActiveCfg = Release|Win32
523 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.Release.Build.0 = Release|Win32 563 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.Release.Build.0 = Release|Win32
524 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.ReleaseForDownload.ActiveCfg = Release|Win32 564 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.ReleaseForDownload.ActiveCfg = Release|Win32
diff --git a/linden/indra/indra_complete/indra_complete_vc8.sln b/linden/indra/indra_complete/indra_complete_vc8.sln
index e35c0f9..54bad30 100644
--- a/linden/indra/indra_complete/indra_complete_vc8.sln
+++ b/linden/indra/indra_complete/indra_complete_vc8.sln
@@ -83,7 +83,6 @@ EndProject
83 {B4B838C7-2C72-428E-BBFD-25764E659A8B} = {B4B838C7-2C72-428E-BBFD-25764E659A8B} 83 {B4B838C7-2C72-428E-BBFD-25764E659A8B} = {B4B838C7-2C72-428E-BBFD-25764E659A8B}
84 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E} = {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E} 84 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E} = {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}
85 {D37774F4-253D-4760-BF64-372A943224A1} = {D37774F4-253D-4760-BF64-372A943224A1} 85 {D37774F4-253D-4760-BF64-372A943224A1} = {D37774F4-253D-4760-BF64-372A943224A1}
86 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE} = {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}
87 EndProjectSection 86 EndProjectSection
88EndProject 87EndProject
89 ProjectSection(ProjectDependencies) = postProject 88 ProjectSection(ProjectDependencies) = postProject
@@ -129,19 +128,6 @@ EndProject
129 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} 128 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}
130 EndProjectSection 129 EndProjectSection
131EndProject 130EndProject
132 ProjectSection(ProjectDependencies) = postProject
133 {2ADE3C14-94C4-40BF-B033-70F3C954EE90} = {2ADE3C14-94C4-40BF-B033-70F3C954EE90}
134 {B5B53617-416F-404A-BF10-22EBCCA0E4FB} = {B5B53617-416F-404A-BF10-22EBCCA0E4FB}
135 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B} = {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}
136 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3} = {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}
137 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}
138 {DE55D666-6A3D-476C-937F-109269B83681} = {DE55D666-6A3D-476C-937F-109269B83681}
139 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5} = {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}
140 {E5D94794-5671-4BD6-A16D-26EC18F3DB34} = {E5D94794-5671-4BD6-A16D-26EC18F3DB34}
141 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} = {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}
142 {D37774F4-253D-4760-BF64-372A943224A1} = {D37774F4-253D-4760-BF64-372A943224A1}
143 EndProjectSection
144EndProject
145Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "llmedia", "..\llmedia\llmedia_vc8.vcproj", "{9D0C7E02-6506-4EE7-BC5C-75671D28D594}" 131Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "llmedia", "..\llmedia\llmedia_vc8.vcproj", "{9D0C7E02-6506-4EE7-BC5C-75671D28D594}"
146EndProject 132EndProject
147EndProject 133EndProject
@@ -175,7 +161,6 @@ EndProject
175 EndProjectSection 161 EndProjectSection
176EndProject 162EndProject
177EndProject 163EndProject
178EndProject
179 ProjectSection(ProjectDependencies) = postProject 164 ProjectSection(ProjectDependencies) = postProject
180 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} 165 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}
181 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5} = {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5} 166 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5} = {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}
@@ -193,8 +178,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "llimagej2coj", "..\llimagej
193EndProject 178EndProject
194Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lscript_compile_fb_vc8", "..\lscript\lscript_compile\lscript_compile_fb_vc8.vcproj", "{B771CF1B-E253-47BD-8B0A-6B0440CC9228}" 179Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lscript_compile_fb_vc8", "..\lscript\lscript_compile\lscript_compile_fb_vc8.vcproj", "{B771CF1B-E253-47BD-8B0A-6B0440CC9228}"
195EndProject 180EndProject
196Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "web-plugin-asset-upload", "..\web\doc\web-plugin-asset-upload_vc8.vcproj", "{0332E7B1-8913-4669-AD7E-7E2EB6204A75}"
197EndProject
198Global 181Global
199 GlobalSection(SolutionConfigurationPlatforms) = preSolution 182 GlobalSection(SolutionConfigurationPlatforms) = preSolution
200 Debug|Win32 = Debug|Win32 183 Debug|Win32 = Debug|Win32
@@ -454,15 +437,6 @@ Global
454 {F56CA265-93E9-4068-8A67-8B104C876D70}.Release|Win32.ActiveCfg = Release|Win32 437 {F56CA265-93E9-4068-8A67-8B104C876D70}.Release|Win32.ActiveCfg = Release|Win32
455 {F56CA265-93E9-4068-8A67-8B104C876D70}.ReleaseForDownload|Win32.ActiveCfg = Release|Win32 438 {F56CA265-93E9-4068-8A67-8B104C876D70}.ReleaseForDownload|Win32.ActiveCfg = Release|Win32
456 {F56CA265-93E9-4068-8A67-8B104C876D70}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32 439 {F56CA265-93E9-4068-8A67-8B104C876D70}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32
457 {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.Debug|Win32.ActiveCfg = Debug|Win32
458 {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.Debug|Win32.Build.0 = Debug|Win32
459 {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
460 {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
461 {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.Release|Win32.ActiveCfg = Release|Win32
462 {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.Release|Win32.Build.0 = Release|Win32
463 {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.ReleaseForDownload|Win32.ActiveCfg = Release|Win32
464 {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32
465 {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
466 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Debug|Win32.ActiveCfg = Debug|Win32 440 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Debug|Win32.ActiveCfg = Debug|Win32
467 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Debug|Win32.Build.0 = Debug|Win32 441 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Debug|Win32.Build.0 = Debug|Win32
468 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 442 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
@@ -502,16 +476,6 @@ Global
502 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseForDownload|Win32.Build.0 = Release|Win32 476 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseForDownload|Win32.Build.0 = Release|Win32
503 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32 477 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32
504 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 478 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
505 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.Debug|Win32.ActiveCfg = Debug|Win32
506 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.Debug|Win32.Build.0 = Debug|Win32
507 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
508 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
509 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.Release|Win32.ActiveCfg = Release|Win32
510 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.Release|Win32.Build.0 = Release|Win32
511 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.ReleaseForDownload|Win32.ActiveCfg = Release|Win32
512 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.ReleaseForDownload|Win32.Build.0 = Release|Win32
513 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32
514 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
515 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Debug|Win32.ActiveCfg = Debug|Win32 479 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Debug|Win32.ActiveCfg = Debug|Win32
516 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Debug|Win32.Build.0 = Debug|Win32 480 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Debug|Win32.Build.0 = Debug|Win32
517 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 481 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
@@ -562,16 +526,6 @@ Global
562 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.ReleaseForDownload|Win32.Build.0 = Release|Win32 526 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.ReleaseForDownload|Win32.Build.0 = Release|Win32
563 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.ReleaseNoOpt|Win32.ActiveCfg = Release|Win32 527 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.ReleaseNoOpt|Win32.ActiveCfg = Release|Win32
564 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.ReleaseNoOpt|Win32.Build.0 = Release|Win32 528 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.ReleaseNoOpt|Win32.Build.0 = Release|Win32
565 {0332E7B1-8913-4669-AD7E-7E2EB6204A75}.Debug|Win32.ActiveCfg = Debug|Win32
566 {0332E7B1-8913-4669-AD7E-7E2EB6204A75}.Debug|Win32.Build.0 = Debug|Win32
567 {0332E7B1-8913-4669-AD7E-7E2EB6204A75}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
568 {0332E7B1-8913-4669-AD7E-7E2EB6204A75}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
569 {0332E7B1-8913-4669-AD7E-7E2EB6204A75}.Release|Win32.ActiveCfg = Release|Win32
570 {0332E7B1-8913-4669-AD7E-7E2EB6204A75}.Release|Win32.Build.0 = Release|Win32
571 {0332E7B1-8913-4669-AD7E-7E2EB6204A75}.ReleaseForDownload|Win32.ActiveCfg = Release|Win32
572 {0332E7B1-8913-4669-AD7E-7E2EB6204A75}.ReleaseForDownload|Win32.Build.0 = Release|Win32
573 {0332E7B1-8913-4669-AD7E-7E2EB6204A75}.ReleaseNoOpt|Win32.ActiveCfg = Release|Win32
574 {0332E7B1-8913-4669-AD7E-7E2EB6204A75}.ReleaseNoOpt|Win32.Build.0 = Release|Win32
575 EndGlobalSection 529 EndGlobalSection
576 GlobalSection(SolutionProperties) = preSolution 530 GlobalSection(SolutionProperties) = preSolution
577 HideSolutionNode = FALSE 531 HideSolutionNode = FALSE
diff --git a/linden/indra/indra_complete/indra_complete_vc9.sln b/linden/indra/indra_complete/indra_complete_vc9.sln
index 8424eb3..d7e781d 100644
--- a/linden/indra/indra_complete/indra_complete_vc9.sln
+++ b/linden/indra/indra_complete/indra_complete_vc9.sln
@@ -83,7 +83,6 @@ EndProject
83 {B4B838C7-2C72-428E-BBFD-25764E659A8B} = {B4B838C7-2C72-428E-BBFD-25764E659A8B} 83 {B4B838C7-2C72-428E-BBFD-25764E659A8B} = {B4B838C7-2C72-428E-BBFD-25764E659A8B}
84 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E} = {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E} 84 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E} = {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}
85 {D37774F4-253D-4760-BF64-372A943224A1} = {D37774F4-253D-4760-BF64-372A943224A1} 85 {D37774F4-253D-4760-BF64-372A943224A1} = {D37774F4-253D-4760-BF64-372A943224A1}
86 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE} = {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}
87 EndProjectSection 86 EndProjectSection
88EndProject 87EndProject
89 ProjectSection(ProjectDependencies) = postProject 88 ProjectSection(ProjectDependencies) = postProject
@@ -129,19 +128,6 @@ EndProject
129 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} 128 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}
130 EndProjectSection 129 EndProjectSection
131EndProject 130EndProject
132 ProjectSection(ProjectDependencies) = postProject
133 {2ADE3C14-94C4-40BF-B033-70F3C954EE90} = {2ADE3C14-94C4-40BF-B033-70F3C954EE90}
134 {B5B53617-416F-404A-BF10-22EBCCA0E4FB} = {B5B53617-416F-404A-BF10-22EBCCA0E4FB}
135 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B} = {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}
136 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3} = {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}
137 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}
138 {DE55D666-6A3D-476C-937F-109269B83681} = {DE55D666-6A3D-476C-937F-109269B83681}
139 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5} = {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}
140 {E5D94794-5671-4BD6-A16D-26EC18F3DB34} = {E5D94794-5671-4BD6-A16D-26EC18F3DB34}
141 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} = {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}
142 {D37774F4-253D-4760-BF64-372A943224A1} = {D37774F4-253D-4760-BF64-372A943224A1}
143 EndProjectSection
144EndProject
145Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "llmedia", "..\llmedia\llmedia_vc9.vcproj", "{9D0C7E02-6506-4EE7-BC5C-75671D28D594}" 131Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "llmedia", "..\llmedia\llmedia_vc9.vcproj", "{9D0C7E02-6506-4EE7-BC5C-75671D28D594}"
146EndProject 132EndProject
147EndProject 133EndProject
@@ -175,7 +161,6 @@ EndProject
175 EndProjectSection 161 EndProjectSection
176EndProject 162EndProject
177EndProject 163EndProject
178EndProject
179 ProjectSection(ProjectDependencies) = postProject 164 ProjectSection(ProjectDependencies) = postProject
180 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} 165 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}
181 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5} = {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5} 166 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5} = {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}
@@ -191,7 +176,7 @@ EndProject
191EndProject 176EndProject
192Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "llimagej2coj", "..\llimagej2coj\llimagej2coj_vc9.vcproj", "{4C8D64D5-649F-481E-96BE-EF1E82A77ACB}" 177Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "llimagej2coj", "..\llimagej2coj\llimagej2coj_vc9.vcproj", "{4C8D64D5-649F-481E-96BE-EF1E82A77ACB}"
193EndProject 178EndProject
194Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lscript_compile_fb_vc9", "..\lscript\lscript_compile\lscript_compile_fb_vc9.vcproj", "{B771CF1B-E253-47BD-8B0A-6B0440CC9228}" 179Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lscript_compile_fb_vc8", "..\lscript\lscript_compile\lscript_compile_fb_vc9.vcproj", "{B771CF1B-E253-47BD-8B0A-6B0440CC9228}"
195EndProject 180EndProject
196Global 181Global
197 GlobalSection(SolutionConfigurationPlatforms) = preSolution 182 GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -455,15 +440,6 @@ Global
455 {F56CA265-93E9-4068-8A67-8B104C876D70}.Release|Win32.ActiveCfg = Release|Win32 440 {F56CA265-93E9-4068-8A67-8B104C876D70}.Release|Win32.ActiveCfg = Release|Win32
456 {F56CA265-93E9-4068-8A67-8B104C876D70}.ReleaseForDownload|Win32.ActiveCfg = Release|Win32 441 {F56CA265-93E9-4068-8A67-8B104C876D70}.ReleaseForDownload|Win32.ActiveCfg = Release|Win32
457 {F56CA265-93E9-4068-8A67-8B104C876D70}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32 442 {F56CA265-93E9-4068-8A67-8B104C876D70}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32
458 {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.Debug|Win32.ActiveCfg = Debug|Win32
459 {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.Debug|Win32.Build.0 = Debug|Win32
460 {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
461 {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
462 {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.Release|Win32.ActiveCfg = Release|Win32
463 {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.Release|Win32.Build.0 = Release|Win32
464 {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.ReleaseForDownload|Win32.ActiveCfg = Release|Win32
465 {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32
466 {BF69CC7B-5C5B-40C3-93CB-92AD6A5FBC45}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
467 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Debug|Win32.ActiveCfg = Debug|Win32 443 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Debug|Win32.ActiveCfg = Debug|Win32
468 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Debug|Win32.Build.0 = Debug|Win32 444 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Debug|Win32.Build.0 = Debug|Win32
469 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 445 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
@@ -503,16 +479,6 @@ Global
503 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseForDownload|Win32.Build.0 = Release|Win32 479 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseForDownload|Win32.Build.0 = Release|Win32
504 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32 480 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32
505 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 481 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
506 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.Debug|Win32.ActiveCfg = Debug|Win32
507 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.Debug|Win32.Build.0 = Debug|Win32
508 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
509 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
510 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.Release|Win32.ActiveCfg = Release|Win32
511 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.Release|Win32.Build.0 = Release|Win32
512 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.ReleaseForDownload|Win32.ActiveCfg = Release|Win32
513 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.ReleaseForDownload|Win32.Build.0 = Release|Win32
514 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32
515 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
516 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Debug|Win32.ActiveCfg = Debug|Win32 482 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Debug|Win32.ActiveCfg = Debug|Win32
517 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Debug|Win32.Build.0 = Debug|Win32 483 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Debug|Win32.Build.0 = Debug|Win32
518 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 484 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
diff --git a/linden/indra/lib/python/indra/base/llsd.py b/linden/indra/lib/python/indra/base/llsd.py
index 71282bc..26ac3a2 100644
--- a/linden/indra/lib/python/indra/base/llsd.py
+++ b/linden/indra/lib/python/indra/base/llsd.py
@@ -842,16 +842,6 @@ try:
842except: 842except:
843 print "Couldn't import mulib.stacked, not registering LLSD converters" 843 print "Couldn't import mulib.stacked, not registering LLSD converters"
844else: 844else:
845 def llsd_convert_json(llsd_stuff, request):
846 callback = request.get_header('callback')
847 if callback is not None:
848 ## See Yahoo's ajax documentation for information about using this
849 ## callback style of programming
850 ## http://developer.yahoo.com/common/json.html#callbackparam
851 req.write("%s(%s)" % (callback, simplejson.dumps(llsd_stuff)))
852 else:
853 req.write(simplejson.dumps(llsd_stuff))
854
855 def llsd_convert_xml(llsd_stuff, request): 845 def llsd_convert_xml(llsd_stuff, request):
856 request.write(format_xml(llsd_stuff)) 846 request.write(format_xml(llsd_stuff))
857 847
@@ -859,8 +849,6 @@ else:
859 request.write(format_binary(llsd_stuff)) 849 request.write(format_binary(llsd_stuff))
860 850
861 for typ in [LLSD, dict, list, tuple, str, int, float, bool, unicode, type(None)]: 851 for typ in [LLSD, dict, list, tuple, str, int, float, bool, unicode, type(None)]:
862 stacked.add_producer(typ, llsd_convert_json, 'application/json')
863
864 stacked.add_producer(typ, llsd_convert_xml, 'application/llsd+xml') 852 stacked.add_producer(typ, llsd_convert_xml, 'application/llsd+xml')
865 stacked.add_producer(typ, llsd_convert_xml, 'application/xml') 853 stacked.add_producer(typ, llsd_convert_xml, 'application/xml')
866 stacked.add_producer(typ, llsd_convert_xml, 'text/xml') 854 stacked.add_producer(typ, llsd_convert_xml, 'text/xml')
diff --git a/linden/indra/lib/python/indra/ipc/llsdhttp.py b/linden/indra/lib/python/indra/ipc/llsdhttp.py
index 1bb335e..378c1c2 100644
--- a/linden/indra/lib/python/indra/ipc/llsdhttp.py
+++ b/linden/indra/lib/python/indra/ipc/llsdhttp.py
@@ -34,45 +34,54 @@ from indra.base import llsd
34 34
35from eventlet import httpc 35from eventlet import httpc
36 36
37 37suite = httpc.HttpSuite(llsd.format_xml, llsd.parse, 'application/xml+llsd')
38get, put, delete, post = httpc.make_suite( 38delete = suite.delete
39 llsd.format_xml, llsd.parse, 'application/xml+llsd') 39delete_ = suite.delete_
40 40get = suite.get
41get_ = suite.get_
42head = suite.head
43head_ = suite.head_
44post = suite.post
45post_ = suite.post_
46put = suite.put
47put_ = suite.put_
48request = suite.request
49request_ = suite.request_
41 50
42for x in (httpc.ConnectionError, httpc.NotFound, httpc.Forbidden): 51for x in (httpc.ConnectionError, httpc.NotFound, httpc.Forbidden):
43 globals()[x.__name__] = x 52 globals()[x.__name__] = x
44 53
45 54
46def postFile(url, filename, verbose=False): 55def postFile(url, filename):
47 f = open(filename) 56 f = open(filename)
48 body = f.read() 57 body = f.read()
49 f.close() 58 f.close()
50 llsd_body = llsd.parse(body) 59 llsd_body = llsd.parse(body)
51 return post(url, llsd_body, verbose=verbose) 60 return post_(url, llsd_body)
52 61
53 62
54def getStatus(url, use_proxy=False): 63def getStatus(url, use_proxy=False):
55 status, _headers, _body = get(url, use_proxy=use_proxy, verbose=True) 64 status, _headers, _body = get_(url, use_proxy=use_proxy)
56 return status 65 return status
57 66
58 67
59def putStatus(url, data): 68def putStatus(url, data):
60 status, _headers, _body = put(url, data, verbose=True) 69 status, _headers, _body = put_(url, data)
61 return status 70 return status
62 71
63 72
64def deleteStatus(url): 73def deleteStatus(url):
65 status, _headers, _body = delete(url, verbose=True) 74 status, _headers, _body = delete_(url)
66 return status 75 return status
67 76
68 77
69def postStatus(url, data): 78def postStatus(url, data):
70 status, _headers, _body = post(url, data, verbose=True) 79 status, _headers, _body = post_(url, data)
71 return status 80 return status
72 81
73 82
74def postFileStatus(url, filename): 83def postFileStatus(url, filename):
75 status, _headers, body = postFile(url, filename, verbose=True) 84 status, _headers, body = postFile(url, filename)
76 return status, body 85 return status, body
77 86
78 87
diff --git a/linden/indra/lib/python/indra/util/llmanifest.py b/linden/indra/lib/python/indra/util/llmanifest.py
index 1bd44ae..89c14e8 100644
--- a/linden/indra/lib/python/indra/util/llmanifest.py
+++ b/linden/indra/lib/python/indra/util/llmanifest.py
@@ -94,7 +94,7 @@ def get_channel(srctree):
94 for p in paths: 94 for p in paths:
95 if os.path.exists(p): 95 if os.path.exists(p):
96 contents = open(p, 'r').read() 96 contents = open(p, 'r').read()
97 channel = re.search("LL_CHANNEL\s=\s\"([\w\s]+)\"", contents).group(1) 97 channel = re.search("LL_CHANNEL\s=\s\"(.+)\";\s*$", contents, flags = re.M).group(1)
98 return channel 98 return channel
99 99
100 100
diff --git a/linden/indra/llcharacter/lljoint.cpp b/linden/indra/llcharacter/lljoint.cpp
index b7a51f1..4611f52 100644
--- a/linden/indra/llcharacter/lljoint.cpp
+++ b/linden/indra/llcharacter/lljoint.cpp
@@ -189,11 +189,12 @@ void LLJoint::removeChild(LLJoint* joint)
189 child_list_t::iterator iter = std::find(mChildren.begin(), mChildren.end(), joint); 189 child_list_t::iterator iter = std::find(mChildren.begin(), mChildren.end(), joint);
190 if (iter != mChildren.end()) 190 if (iter != mChildren.end())
191 { 191 {
192 this->mChildren.erase(iter); 192 mChildren.erase(iter);
193
194 joint->mXform.setParent(NULL);
195 joint->mParent = NULL;
196 joint->touch();
193 } 197 }
194 joint->mXform.setParent(NULL);
195 joint->mParent = NULL;
196 joint->touch();
197} 198}
198 199
199 200
diff --git a/linden/indra/llcharacter/llstatemachine.h b/linden/indra/llcharacter/llstatemachine.h
index 12a71b7..873e938 100644
--- a/linden/indra/llcharacter/llstatemachine.h
+++ b/linden/indra/llcharacter/llstatemachine.h
@@ -54,7 +54,7 @@ class LLFSMTransition : public LLUniqueID
54{ 54{
55public: 55public:
56 LLFSMTransition() : LLUniqueID(){}; 56 LLFSMTransition() : LLUniqueID(){};
57 virtual std::string getName(){ return "unnamed"; } 57 virtual std::string getName()const { return "unnamed"; }
58}; 58};
59 59
60class LLFSMState : public LLUniqueID 60class LLFSMState : public LLUniqueID
@@ -64,7 +64,7 @@ public:
64 virtual void onEntry(void *){}; 64 virtual void onEntry(void *){};
65 virtual void onExit(void *){}; 65 virtual void onExit(void *){};
66 virtual void execute(void *){}; 66 virtual void execute(void *){};
67 virtual std::string getName(){ return "unnamed"; } 67 virtual std::string getName() const { return "unnamed"; }
68}; 68};
69 69
70class LLStateDiagram 70class LLStateDiagram
diff --git a/linden/indra/llcommon/imageids.h b/linden/indra/llcommon/imageids.h
index 4a1e221..9361479 100644
--- a/linden/indra/llcommon/imageids.h
+++ b/linden/indra/llcommon/imageids.h
@@ -43,60 +43,34 @@
43 // pre-cached on viewer 43 // pre-cached on viewer
44 44
45// Grass Images 45// Grass Images
46//const LLUUID IMG_GRASS1 ("990c4086-46ce-49bd-8cae-afcc23a08f4e"); // dataserver
47//const LLUUID IMG_GRASS2 ("869e2dcf-21b9-402d-a36d-9a23365cf723"); // dataserver
48//const LLUUID IMG_GRASS3 ("8f97e7a7-f664-4967-9e8f-8d9e8039c1b7"); // dataserver
49
50//const LLUUID IMG_GRASS4 ("8a05131d-35b7-4812-bcfc-a989b0f954ef"); // dataserver
51
52//const LLUUID IMG_GRASS5 ("7d092acb-c69a-4122-b09b-f285e009b185"); // dataserver
53
54const LLUUID IMG_CLEAR ("11ee27f5-43c0-414e-afd5-d7f5688c351f"); // VIEWER
55const LLUUID IMG_SMOKE ("b4ba225c-373f-446d-9f7e-6cb7b5cf9b3d"); // VIEWER 46const LLUUID IMG_SMOKE ("b4ba225c-373f-446d-9f7e-6cb7b5cf9b3d"); // VIEWER
56 47
57const LLUUID IMG_DEFAULT ("d2114404-dd59-4a4d-8e6c-49359e91bbf0"); // VIEWER 48const LLUUID IMG_DEFAULT ("d2114404-dd59-4a4d-8e6c-49359e91bbf0"); // VIEWER
58 49
59//const LLUUID IMG_SAND ("0ff70ead-4562-45f9-9e8a-52b1a3286868"); // VIEWER 1.5k
60//const LLUUID IMG_GRASS ("5ab48dd5-05d0-4f1a-ace6-efd4e2fb3508"); // VIEWER 1.2k
61//const LLUUID IMG_ROCK ("402f8b24-5f9d-4905-b5f8-37baff603e88"); // VIEWER 1.2k
62//const LLUUID IMG_ROCKFACE ("9c88539c-fd04-46b8-bea2-ddf1bcffe3bd"); // VIEWER 1.2k
63const LLUUID IMG_SUN ("cce0f112-878f-4586-a2e2-a8f104bba271"); // dataserver 50const LLUUID IMG_SUN ("cce0f112-878f-4586-a2e2-a8f104bba271"); // dataserver
64const LLUUID IMG_MOON ("d07f6eed-b96a-47cd-b51d-400ad4a1c428"); // dataserver 51const LLUUID IMG_MOON ("d07f6eed-b96a-47cd-b51d-400ad4a1c428"); // dataserver
65const LLUUID IMG_CLOUD_POOF ("fc4b9f0b-d008-45c6-96a4-01dd947ac621"); // dataserver 52const LLUUID IMG_CLOUD_POOF ("fc4b9f0b-d008-45c6-96a4-01dd947ac621"); // dataserver
66const LLUUID IMG_SHOT ("35f217a3-f618-49cf-bbca-c86d486551a9"); // dataserver 53const LLUUID IMG_SHOT ("35f217a3-f618-49cf-bbca-c86d486551a9"); // dataserver
67const LLUUID IMG_SPARK ("d2e75ac1-d0fb-4532-820e-a20034ac814d"); // dataserver 54const LLUUID IMG_SPARK ("d2e75ac1-d0fb-4532-820e-a20034ac814d"); // dataserver
68const LLUUID IMG_FIRE ("aca40aa8-44cf-44ca-a0fa-93e1a2986f82"); // dataserver 55const LLUUID IMG_FIRE ("aca40aa8-44cf-44ca-a0fa-93e1a2986f82"); // dataserver
69//const LLUUID IMG_WATER ("e510b068-d20d-4612-a08d-fde4d5c15789"); // VIEWER
70const LLUUID IMG_FACE_SELECT ("a85ac674-cb75-4af6-9499-df7c5aaf7a28"); // face selector 56const LLUUID IMG_FACE_SELECT ("a85ac674-cb75-4af6-9499-df7c5aaf7a28"); // face selector
71
72//const LLUUID IMG_SHADOW ("5e1de0a8-f9f8-4237-9396-d221126a7c4a"); // dataserver
73//const LLUUID IMG_AVATARSHADOW ("c7d8bbf3-21ee-4f6e-9b20-3cf18425af1d"); // dataserver
74//const LLUUID IMG_BOXSHADOW ("8d86b8cc-4889-408a-8b72-c1961bae53d7"); // dataserver
75//const LLUUID IMG_EYE ("5e3551ae-9971-4814-af99-5117591e937b"); // dataserver
76//const LLUUID IMG_BLUE_FLAME ("d8b62059-7b31-4511-a479-1fe45117948f"); // dataserver
77
78const LLUUID IMG_DEFAULT_AVATAR ("c228d1cf-4b5d-4ba8-84f4-899a0796aa97"); // dataserver 57const LLUUID IMG_DEFAULT_AVATAR ("c228d1cf-4b5d-4ba8-84f4-899a0796aa97"); // dataserver
79//const LLUUID IMG_ENERGY_BEAM ("09e7bc54-11b9-442a-ae3d-f52e599e466a"); // dataserver
80//const LLUUID IMG_ENERGY_BEAM2 ("de651394-f926-48db-b666-e49d83af1bbc"); // dataserver
81
82//const LLUUID IMG_BRICK_PATH ("a9d0019b-3783-4c7f-959c-322d301918bc"); // dataserver
83 58
84const LLUUID IMG_EXPLOSION ("68edcf47-ccd7-45b8-9f90-1649d7f12806"); // On dataserver 59const LLUUID IMG_EXPLOSION ("68edcf47-ccd7-45b8-9f90-1649d7f12806"); // On dataserver
85const LLUUID IMG_EXPLOSION_2 ("21ce046c-83fe-430a-b629-c7660ac78d7c"); // On dataserver 60const LLUUID IMG_EXPLOSION_2 ("21ce046c-83fe-430a-b629-c7660ac78d7c"); // On dataserver
86const LLUUID IMG_EXPLOSION_3 ("fedea30a-1be8-47a6-bc06-337a04a39c4b"); // On dataserver 61const LLUUID IMG_EXPLOSION_3 ("fedea30a-1be8-47a6-bc06-337a04a39c4b"); // On dataserver
87const LLUUID IMG_EXPLOSION_4 ("abf0d56b-82e5-47a2-a8ad-74741bb2c29e"); // On dataserver 62const LLUUID IMG_EXPLOSION_4 ("abf0d56b-82e5-47a2-a8ad-74741bb2c29e"); // On dataserver
88//const LLUUID IMG_EXPLOSION_5 ("60f2dec7-675b-4950-b614-85b907d552ea"); // On dataserver
89//const LLUUID IMG_SPLASH_SPRITE ("8a101f63-fe45-49e7-9f8a-e64817daa475"); // On dataserver
90const LLUUID IMG_SMOKE_POOF ("1e63e323-5fe0-452e-92f8-b98bd0f764e3"); // On dataserver 63const LLUUID IMG_SMOKE_POOF ("1e63e323-5fe0-452e-92f8-b98bd0f764e3"); // On dataserver
91 64
92const LLUUID IMG_BIG_EXPLOSION_1 ("5e47a0dc-97bf-44e0-8b40-de06718cee9d"); // On dataserver 65const LLUUID IMG_BIG_EXPLOSION_1 ("5e47a0dc-97bf-44e0-8b40-de06718cee9d"); // On dataserver
93const LLUUID IMG_BIG_EXPLOSION_2 ("9c8eca51-53d5-42a7-bb58-cef070395db8"); // On dataserver 66const LLUUID IMG_BIG_EXPLOSION_2 ("9c8eca51-53d5-42a7-bb58-cef070395db8"); // On dataserver
94//const LLUUID IMG_BLUE_BLOOD ("8bc2e3f8-097e-4c87-b417-b0d699d07189"); // On dataserver
95 67
96const LLUUID IMG_BLOOM1 ("3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef"); 68const LLUUID IMG_BLOOM1 ("3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef"); // VIEWER
97//const LLUUID IMG_BLOOM2 ("9fb76e81-eca0-4b6a-96e1-a6c5a685150b"); 69const LLUUID TERRAIN_DIRT_DETAIL ("0bc58228-74a0-7e83-89bc-5c23464bcec5"); // VIEWER
98//const LLUUID IMG_BLOOM3 ("fb1fecba-9585-415b-ad15-6e6e3d6c5479"); 70const LLUUID TERRAIN_GRASS_DETAIL ("63338ede-0037-c4fd-855b-015d77112fc8"); // VIEWER
71const LLUUID TERRAIN_MOUNTAIN_DETAIL ("303cd381-8560-7579-23f1-f0a880799740"); // VIEWER
72const LLUUID TERRAIN_ROCK_DETAIL ("53a2f406-4895-1d13-d541-d2e3b86bc19c"); // VIEWER
99 73
100const LLUUID IMG_PTT_SPEAKER ("89e9fc7c-0b16-457d-be4f-136270759c4d"); // On cache 74const LLUUID DEFAULT_WATER_NORMAL ("822ded49-9a6c-f61c-cb89-6df54f42cdf4"); // VIEWER
101 75
102#endif 76#endif
diff --git a/linden/indra/llcommon/indra_constants.h b/linden/indra/llcommon/indra_constants.h
index eceb576..77f3d8c 100644
--- a/linden/indra/llcommon/indra_constants.h
+++ b/linden/indra/llcommon/indra_constants.h
@@ -38,9 +38,10 @@
38// At 45 Hz collisions seem stable and objects seem 38// At 45 Hz collisions seem stable and objects seem
39// to settle down at a reasonable rate. 39// to settle down at a reasonable rate.
40// JC 3/18/2003 40// JC 3/18/2003
41const F32 HAVOK_TIMESTEP = 1.f / 45.f; 41const F32 PHYSICS_TIMESTEP = 1.f / 45.f;
42 42
43const F32 COLLISION_TOLERANCE = 0.1f; 43const F32 COLLISION_TOLERANCE = 0.1f;
44const F32 HALF_COLLISION_TOLERANCE = COLLISION_TOLERANCE * 0.5f;
44 45
45// Time constants 46// Time constants
46const U32 HOURS_PER_LINDEN_DAY = 4; 47const U32 HOURS_PER_LINDEN_DAY = 4;
@@ -53,6 +54,8 @@ const F32 REGION_WIDTH_METERS = 256.f;
53const S32 REGION_WIDTH_UNITS = 256; 54const S32 REGION_WIDTH_UNITS = 256;
54const U32 REGION_WIDTH_U32 = 256; 55const U32 REGION_WIDTH_U32 = 256;
55 56
57const F32 REGION_HEIGHT_METERS = 4096.f;
58
56// Bits for simulator performance query flags 59// Bits for simulator performance query flags
57enum LAND_STAT_FLAGS 60enum LAND_STAT_FLAGS
58{ 61{
@@ -87,7 +90,7 @@ const F32 MAX_AGENT_HEIGHT = 2.65f - 2.0f * COLLISION_TOLERANCE;
87 90
88// For linked sets 91// For linked sets
89const S32 MAX_CHILDREN_PER_TASK = 255; 92const S32 MAX_CHILDREN_PER_TASK = 255;
90const S32 MAX_CHILDREN_PER_PHYSICAL_TASK = 31; 93const S32 MAX_CHILDREN_PER_PHYSICAL_TASK = 32;
91 94
92const S32 MAX_JOINTS_PER_OBJECT = 1; // limiting to 1 until Havok 2.x 95const S32 MAX_JOINTS_PER_OBJECT = 1; // limiting to 1 until Havok 2.x
93 96
@@ -339,7 +342,7 @@ const U32 MAP_ITEM_LAND_FOR_SALE = 0x07;
339const U32 MAP_ITEM_CLASSIFIED = 0x08; 342const U32 MAP_ITEM_CLASSIFIED = 0x08;
340 343
341// Crash reporter behavior 344// Crash reporter behavior
342const char* const CRASH_SETTINGS_FILE = "crash_settings.xml"; 345const char* const CRASH_SETTINGS_FILE = "settings_crash_behavior.xml";
343const char* const CRASH_BEHAVIOR_SETTING = "CrashSubmitBehavior"; 346const char* const CRASH_BEHAVIOR_SETTING = "CrashSubmitBehavior";
344const S32 CRASH_BEHAVIOR_ASK = 0; 347const S32 CRASH_BEHAVIOR_ASK = 0;
345const S32 CRASH_BEHAVIOR_ALWAYS_SEND = 1; 348const S32 CRASH_BEHAVIOR_ALWAYS_SEND = 1;
diff --git a/linden/indra/llcommon/llagentconstants.h b/linden/indra/llcommon/llagentconstants.h
index 5757751..48c097a 100644
--- a/linden/indra/llcommon/llagentconstants.h
+++ b/linden/indra/llcommon/llagentconstants.h
@@ -67,43 +67,43 @@ const U32 CONTROL_ML_LBUTTON_DOWN_INDEX = 30;
67const U32 CONTROL_ML_LBUTTON_UP_INDEX = 31; 67const U32 CONTROL_ML_LBUTTON_UP_INDEX = 31;
68const U32 TOTAL_CONTROLS = 32; 68const U32 TOTAL_CONTROLS = 32;
69 69
70const U32 AGENT_CONTROL_AT_POS = 0x1 << CONTROL_AT_POS_INDEX; 70const U32 AGENT_CONTROL_AT_POS = 0x1 << CONTROL_AT_POS_INDEX; // 0x00000001
71const U32 AGENT_CONTROL_AT_NEG = 0x1 << CONTROL_AT_NEG_INDEX; 71const U32 AGENT_CONTROL_AT_NEG = 0x1 << CONTROL_AT_NEG_INDEX; // 0x00000002
72const U32 AGENT_CONTROL_LEFT_POS = 0x1 << CONTROL_LEFT_POS_INDEX; 72const U32 AGENT_CONTROL_LEFT_POS = 0x1 << CONTROL_LEFT_POS_INDEX; // 0x00000004
73const U32 AGENT_CONTROL_LEFT_NEG = 0x1 << CONTROL_LEFT_NEG_INDEX; 73const U32 AGENT_CONTROL_LEFT_NEG = 0x1 << CONTROL_LEFT_NEG_INDEX; // 0x00000008
74const U32 AGENT_CONTROL_UP_POS = 0x1 << CONTROL_UP_POS_INDEX; 74const U32 AGENT_CONTROL_UP_POS = 0x1 << CONTROL_UP_POS_INDEX; // 0x00000010
75const U32 AGENT_CONTROL_UP_NEG = 0x1 << CONTROL_UP_NEG_INDEX; 75const U32 AGENT_CONTROL_UP_NEG = 0x1 << CONTROL_UP_NEG_INDEX; // 0x00000020
76const U32 AGENT_CONTROL_PITCH_POS = 0x1 << CONTROL_PITCH_POS_INDEX; 76const U32 AGENT_CONTROL_PITCH_POS = 0x1 << CONTROL_PITCH_POS_INDEX; // 0x00000040
77const U32 AGENT_CONTROL_PITCH_NEG = 0x1 << CONTROL_PITCH_NEG_INDEX; 77const U32 AGENT_CONTROL_PITCH_NEG = 0x1 << CONTROL_PITCH_NEG_INDEX; // 0x00000080
78const U32 AGENT_CONTROL_YAW_POS = 0x1 << CONTROL_YAW_POS_INDEX; 78const U32 AGENT_CONTROL_YAW_POS = 0x1 << CONTROL_YAW_POS_INDEX; // 0x00000100
79const U32 AGENT_CONTROL_YAW_NEG = 0x1 << CONTROL_YAW_NEG_INDEX; 79const U32 AGENT_CONTROL_YAW_NEG = 0x1 << CONTROL_YAW_NEG_INDEX; // 0x00000200
80 80
81const U32 AGENT_CONTROL_FAST_AT = 0x1 << CONTROL_FAST_AT_INDEX; 81const U32 AGENT_CONTROL_FAST_AT = 0x1 << CONTROL_FAST_AT_INDEX; // 0x00000400
82const U32 AGENT_CONTROL_FAST_LEFT = 0x1 << CONTROL_FAST_LEFT_INDEX; 82const U32 AGENT_CONTROL_FAST_LEFT = 0x1 << CONTROL_FAST_LEFT_INDEX; // 0x00000800
83const U32 AGENT_CONTROL_FAST_UP = 0x1 << CONTROL_FAST_UP_INDEX; 83const U32 AGENT_CONTROL_FAST_UP = 0x1 << CONTROL_FAST_UP_INDEX; // 0x00001000
84 84
85const U32 AGENT_CONTROL_FLY = 0x1 << CONTROL_FLY_INDEX; 85const U32 AGENT_CONTROL_FLY = 0x1 << CONTROL_FLY_INDEX; // 0x00002000
86const U32 AGENT_CONTROL_STOP = 0x1 << CONTROL_STOP_INDEX; 86const U32 AGENT_CONTROL_STOP = 0x1 << CONTROL_STOP_INDEX; // 0x00004000
87const U32 AGENT_CONTROL_FINISH_ANIM = 0x1 << CONTROL_FINISH_ANIM_INDEX; 87const U32 AGENT_CONTROL_FINISH_ANIM = 0x1 << CONTROL_FINISH_ANIM_INDEX; // 0x00008000
88const U32 AGENT_CONTROL_STAND_UP = 0x1 << CONTROL_STAND_UP_INDEX; 88const U32 AGENT_CONTROL_STAND_UP = 0x1 << CONTROL_STAND_UP_INDEX; // 0x00010000
89const U32 AGENT_CONTROL_SIT_ON_GROUND = 0x1 << CONTROL_SIT_ON_GROUND_INDEX; 89const U32 AGENT_CONTROL_SIT_ON_GROUND = 0x1 << CONTROL_SIT_ON_GROUND_INDEX; // 0x00020000
90const U32 AGENT_CONTROL_MOUSELOOK = 0x1 << CONTROL_MOUSELOOK_INDEX; 90const U32 AGENT_CONTROL_MOUSELOOK = 0x1 << CONTROL_MOUSELOOK_INDEX; // 0x00040000
91 91
92const U32 AGENT_CONTROL_NUDGE_AT_POS = 0x1 << CONTROL_NUDGE_AT_POS_INDEX; 92const U32 AGENT_CONTROL_NUDGE_AT_POS = 0x1 << CONTROL_NUDGE_AT_POS_INDEX; // 0x00080000
93const U32 AGENT_CONTROL_NUDGE_AT_NEG = 0x1 << CONTROL_NUDGE_AT_NEG_INDEX; 93const U32 AGENT_CONTROL_NUDGE_AT_NEG = 0x1 << CONTROL_NUDGE_AT_NEG_INDEX; // 0x00100000
94const U32 AGENT_CONTROL_NUDGE_LEFT_POS = 0x1 << CONTROL_NUDGE_LEFT_POS_INDEX; 94const U32 AGENT_CONTROL_NUDGE_LEFT_POS = 0x1 << CONTROL_NUDGE_LEFT_POS_INDEX; // 0x00200000
95const U32 AGENT_CONTROL_NUDGE_LEFT_NEG = 0x1 << CONTROL_NUDGE_LEFT_NEG_INDEX; 95const U32 AGENT_CONTROL_NUDGE_LEFT_NEG = 0x1 << CONTROL_NUDGE_LEFT_NEG_INDEX; // 0x00400000
96const U32 AGENT_CONTROL_NUDGE_UP_POS = 0x1 << CONTROL_NUDGE_UP_POS_INDEX; 96const U32 AGENT_CONTROL_NUDGE_UP_POS = 0x1 << CONTROL_NUDGE_UP_POS_INDEX; // 0x00800000
97const U32 AGENT_CONTROL_NUDGE_UP_NEG = 0x1 << CONTROL_NUDGE_UP_NEG_INDEX; 97const U32 AGENT_CONTROL_NUDGE_UP_NEG = 0x1 << CONTROL_NUDGE_UP_NEG_INDEX; // 0x01000000
98const U32 AGENT_CONTROL_TURN_LEFT = 0x1 << CONTROL_TURN_LEFT_INDEX; 98const U32 AGENT_CONTROL_TURN_LEFT = 0x1 << CONTROL_TURN_LEFT_INDEX; // 0x02000000
99const U32 AGENT_CONTROL_TURN_RIGHT = 0x1 << CONTROL_TURN_RIGHT_INDEX; 99const U32 AGENT_CONTROL_TURN_RIGHT = 0x1 << CONTROL_TURN_RIGHT_INDEX; // 0x04000000
100 100
101const U32 AGENT_CONTROL_AWAY = 0x1 << CONTROL_AWAY_INDEX; 101const U32 AGENT_CONTROL_AWAY = 0x1 << CONTROL_AWAY_INDEX; // 0x08000000
102 102
103const U32 AGENT_CONTROL_LBUTTON_DOWN = 0x1 << CONTROL_LBUTTON_DOWN_INDEX; 103const U32 AGENT_CONTROL_LBUTTON_DOWN = 0x1 << CONTROL_LBUTTON_DOWN_INDEX; // 0x10000000
104const U32 AGENT_CONTROL_LBUTTON_UP = 0x1 << CONTROL_LBUTTON_UP_INDEX; 104const U32 AGENT_CONTROL_LBUTTON_UP = 0x1 << CONTROL_LBUTTON_UP_INDEX; // 0x20000000
105const U32 AGENT_CONTROL_ML_LBUTTON_DOWN = 0x1 << CONTROL_ML_LBUTTON_DOWN_INDEX; 105const U32 AGENT_CONTROL_ML_LBUTTON_DOWN = 0x1 << CONTROL_ML_LBUTTON_DOWN_INDEX; // 0x40000000
106const U32 AGENT_CONTROL_ML_LBUTTON_UP = ((U32)0x1) << CONTROL_ML_LBUTTON_UP_INDEX; 106const U32 AGENT_CONTROL_ML_LBUTTON_UP = ((U32)0x1) << CONTROL_ML_LBUTTON_UP_INDEX; // 0x80000000
107 107
108const U32 AGENT_CONTROL_AT = AGENT_CONTROL_AT_POS 108const U32 AGENT_CONTROL_AT = AGENT_CONTROL_AT_POS
109 | AGENT_CONTROL_AT_NEG 109 | AGENT_CONTROL_AT_NEG
diff --git a/linden/indra/llcommon/llapp.cpp b/linden/indra/llcommon/llapp.cpp
index a10436a..bd2e377 100644
--- a/linden/indra/llcommon/llapp.cpp
+++ b/linden/indra/llcommon/llapp.cpp
@@ -65,6 +65,7 @@ BOOL LLApp::sLogInSignal = FALSE;
65// static 65// static
66LLApp::EAppStatus LLApp::sStatus = LLApp::APP_STATUS_STOPPED; // Keeps track of application status 66LLApp::EAppStatus LLApp::sStatus = LLApp::APP_STATUS_STOPPED; // Keeps track of application status
67LLAppErrorHandler LLApp::sErrorHandler = NULL; 67LLAppErrorHandler LLApp::sErrorHandler = NULL;
68LLAppErrorHandler LLApp::sSyncErrorHandler = NULL;
68BOOL LLApp::sErrorThreadRunning = FALSE; 69BOOL LLApp::sErrorThreadRunning = FALSE;
69#if !LL_WINDOWS 70#if !LL_WINDOWS
70LLApp::child_map LLApp::sChildMap; 71LLApp::child_map LLApp::sChildMap;
@@ -262,6 +263,21 @@ void LLApp::setErrorHandler(LLAppErrorHandler handler)
262 LLApp::sErrorHandler = handler; 263 LLApp::sErrorHandler = handler;
263} 264}
264 265
266
267void LLApp::setSyncErrorHandler(LLAppErrorHandler handler)
268{
269 LLApp::sSyncErrorHandler = handler;
270}
271
272// static
273void LLApp::runSyncErrorHandler()
274{
275 if (LLApp::sSyncErrorHandler)
276 {
277 LLApp::sSyncErrorHandler();
278 }
279}
280
265// static 281// static
266void LLApp::runErrorHandler() 282void LLApp::runErrorHandler()
267{ 283{
@@ -285,7 +301,13 @@ void LLApp::setStatus(EAppStatus status)
285// static 301// static
286void LLApp::setError() 302void LLApp::setError()
287{ 303{
288 setStatus(APP_STATUS_ERROR); 304 if (!isError())
305 {
306 // perform any needed synchronous error-handling
307 runSyncErrorHandler();
308 // set app status to ERROR so that the LLErrorThread notices
309 setStatus(APP_STATUS_ERROR);
310 }
289} 311}
290 312
291 313
diff --git a/linden/indra/llcommon/llapp.h b/linden/indra/llcommon/llapp.h
index 1a700cc..50a70ae 100644
--- a/linden/indra/llcommon/llapp.h
+++ b/linden/indra/llcommon/llapp.h
@@ -189,6 +189,7 @@ public:
189 // Error handling methods 189 // Error handling methods
190 // 190 //
191 void setErrorHandler(LLAppErrorHandler handler); 191 void setErrorHandler(LLAppErrorHandler handler);
192 void setSyncErrorHandler(LLAppErrorHandler handler);
192 193
193#if !LL_WINDOWS 194#if !LL_WINDOWS
194 // 195 //
@@ -245,13 +246,15 @@ protected:
245private: 246private:
246 void setupErrorHandling(); // Do platform-specific error-handling setup (signals, structured exceptions) 247 void setupErrorHandling(); // Do platform-specific error-handling setup (signals, structured exceptions)
247 248
248 static void runErrorHandler(); 249 static void runErrorHandler(); // run shortly after we detect an error, ran in the relatively robust context of the LLErrorThread - preferred.
250 static void runSyncErrorHandler(); // run IMMEDIATELY when we get an error, ran in the context of the faulting thread.
249 251
250 // *NOTE: On Windows, we need a routine to reset the structured 252 // *NOTE: On Windows, we need a routine to reset the structured
251 // exception handler when some evil driver has taken it over for 253 // exception handler when some evil driver has taken it over for
252 // their own purposes 254 // their own purposes
253 typedef int(*signal_handler_func)(int signum); 255 typedef int(*signal_handler_func)(int signum);
254 static LLAppErrorHandler sErrorHandler; 256 static LLAppErrorHandler sErrorHandler;
257 static LLAppErrorHandler sSyncErrorHandler;
255 258
256 // Default application threads 259 // Default application threads
257 LLErrorThread* mThreadErrorp; // Waits for app to go to status ERROR, then runs the error callback 260 LLErrorThread* mThreadErrorp; // Waits for app to go to status ERROR, then runs the error callback
diff --git a/linden/indra/llcommon/llapr.cpp b/linden/indra/llcommon/llapr.cpp
index 770cd3f..08c40a4 100644
--- a/linden/indra/llcommon/llapr.cpp
+++ b/linden/indra/llcommon/llapr.cpp
@@ -116,8 +116,10 @@ void LLScopedLock::unlock()
116bool ll_apr_warn_status(apr_status_t status) 116bool ll_apr_warn_status(apr_status_t status)
117{ 117{
118 if(APR_SUCCESS == status) return false; 118 if(APR_SUCCESS == status) return false;
119#ifndef LL_WINDOWS
119 char buf[MAX_STRING]; /* Flawfinder: ignore */ 120 char buf[MAX_STRING]; /* Flawfinder: ignore */
120 llwarns << "APR: " << apr_strerror(status, buf, MAX_STRING) << llendl; 121 llwarns << "APR: " << apr_strerror(status, buf, MAX_STRING) << llendl;
122#endif
121 return true; 123 return true;
122} 124}
123 125
diff --git a/linden/indra/llcommon/llcommon.vcproj b/linden/indra/llcommon/llcommon.vcproj
index 6b4a0e8..ab4e67a 100644
--- a/linden/indra/llcommon/llcommon.vcproj
+++ b/linden/indra/llcommon/llcommon.vcproj
@@ -432,10 +432,10 @@
432 RelativePath=".\lllivefile.h"> 432 RelativePath=".\lllivefile.h">
433 </File> 433 </File>
434 <File 434 <File
435 RelativePath=".\lllog.h"> 435 RelativePath=".\lllocalidhashmap.h">
436 </File> 436 </File>
437 <File 437 <File
438 RelativePath=".\lllocalidhashmap.h"> 438 RelativePath=".\lllog.h">
439 </File> 439 </File>
440 <File 440 <File
441 RelativePath=".\lllslconstants.h"> 441 RelativePath=".\lllslconstants.h">
@@ -504,6 +504,9 @@
504 RelativePath=".\llskipmap.h"> 504 RelativePath=".\llskipmap.h">
505 </File> 505 </File>
506 <File 506 <File
507 RelativePath=".\llsmoothstep.h">
508 </File>
509 <File
507 RelativePath=".\llstat.h"> 510 RelativePath=".\llstat.h">
508 </File> 511 </File>
509 <File 512 <File
diff --git a/linden/indra/llcommon/lldarray.h b/linden/indra/llcommon/lldarray.h
index 9bffd63..45e564f 100644
--- a/linden/indra/llcommon/lldarray.h
+++ b/linden/indra/llcommon/lldarray.h
@@ -119,11 +119,12 @@ inline S32 LLDynamicArray<Type,BlockSize>::removeObj(const Type& obj)
119 typename std::vector<Type>::iterator iter = std::find(this->begin(), this->end(), obj); 119 typename std::vector<Type>::iterator iter = std::find(this->begin(), this->end(), obj);
120 if (iter != this->end()) 120 if (iter != this->end())
121 { 121 {
122 S32 res = iter - this->begin();
122 typename std::vector<Type>::iterator last = this->end(); 123 typename std::vector<Type>::iterator last = this->end();
123 --last; 124 --last;
124 *iter = *last; 125 *iter = *last;
125 this->pop_back(); 126 this->pop_back();
126 return iter - this->begin(); 127 return res;
127 } 128 }
128 return FAIL; 129 return FAIL;
129} 130}
diff --git a/linden/indra/llcommon/lldefs.h b/linden/indra/llcommon/lldefs.h
index d081245..0e69626 100644
--- a/linden/indra/llcommon/lldefs.h
+++ b/linden/indra/llcommon/lldefs.h
@@ -218,7 +218,15 @@ inline LLDATATYPE llmin(const LLDATATYPE& d1, const LLDATATYPE& d2, const LLDATA
218template <class LLDATATYPE> 218template <class LLDATATYPE>
219inline LLDATATYPE llclamp(const LLDATATYPE& a, const LLDATATYPE& minval, const LLDATATYPE& maxval) 219inline LLDATATYPE llclamp(const LLDATATYPE& a, const LLDATATYPE& minval, const LLDATATYPE& maxval)
220{ 220{
221 return llmin(llmax(a, minval), maxval); 221 if ( a < minval )
222 {
223 return minval;
224 }
225 else if ( a > maxval )
226 {
227 return maxval;
228 }
229 return a;
222} 230}
223 231
224template <class LLDATATYPE> 232template <class LLDATATYPE>
@@ -234,3 +242,4 @@ inline LLDATATYPE llclampb(const LLDATATYPE& a)
234} 242}
235 243
236#endif // LL_LLDEFS_H 244#endif // LL_LLDEFS_H
245
diff --git a/linden/indra/llcommon/llerror.cpp b/linden/indra/llcommon/llerror.cpp
index d9ab57c..0e7db89 100644
--- a/linden/indra/llcommon/llerror.cpp
+++ b/linden/indra/llcommon/llerror.cpp
@@ -37,15 +37,16 @@
37 37
38#include <cctype> 38#include <cctype>
39#ifdef __GNUC__ 39#ifdef __GNUC__
40#include <cxxabi.h> 40# include <cxxabi.h>
41#endif 41#endif // __GNUC__
42#include <sstream> 42#include <sstream>
43#if !LL_WINDOWS 43#if !LL_WINDOWS
44#include <syslog.h> 44# include <syslog.h>
45#endif 45# include <unistd.h>
46#endif // !LL_WINDOWS
46#if LL_WINDOWS 47#if LL_WINDOWS
47#include <windows.h> 48# include <windows.h>
48#endif 49#endif // LL_WINDOWS
49#include <vector> 50#include <vector>
50 51
51#include "llapp.h" 52#include "llapp.h"
@@ -133,18 +134,58 @@ namespace {
133 class RecordToStderr : public LLError::Recorder 134 class RecordToStderr : public LLError::Recorder
134 { 135 {
135 public: 136 public:
136 RecordToStderr(bool timestamp) : mTimestamp(timestamp) { } 137 RecordToStderr(bool timestamp) : mTimestamp(timestamp), mUseANSI(ANSI_PROBE) { }
137 138
138 virtual bool wantsTime() { return mTimestamp; } 139 virtual bool wantsTime() { return mTimestamp; }
139 140
140 virtual void recordMessage(LLError::ELevel level, 141 virtual void recordMessage(LLError::ELevel level,
141 const std::string& message) 142 const std::string& message)
142 { 143 {
144 if (ANSI_PROBE == mUseANSI)
145 mUseANSI = (checkANSI() ? ANSI_YES : ANSI_NO);
146
147 if (ANSI_YES == mUseANSI)
148 {
149 // Default all message levels to bold so we can distinguish our own messages from those dumped by subprocesses and libraries.
150 colorANSI("1"); // bold
151 switch (level) {
152 case LLError::LEVEL_ERROR:
153 colorANSI("31"); // red
154 break;
155 case LLError::LEVEL_WARN:
156 colorANSI("34"); // blue
157 break;
158 case LLError::LEVEL_DEBUG:
159 colorANSI("35"); // magenta
160 break;
161 default:
162 break;
163 }
164 }
143 fprintf(stderr, "%s\n", message.c_str()); 165 fprintf(stderr, "%s\n", message.c_str());
166 if (ANSI_YES == mUseANSI) colorANSI("0"); // reset
144 } 167 }
145 168
146 private: 169 private:
147 bool mTimestamp; 170 bool mTimestamp;
171 typedef enum ANSIState {ANSI_PROBE, ANSI_YES, ANSI_NO};
172 ANSIState mUseANSI;
173 void colorANSI(const std::string color)
174 {
175 // ANSI color code escape sequence
176 fprintf(stderr, "\033[%sm", color.c_str() );
177 };
178 bool checkANSI(void)
179 {
180#if LL_LINUX || LL_DARWIN
181 // Check whether it's okay to use ANSI; if stderr is
182 // a tty then we assume yes. Can be turned off with
183 // the LL_NO_ANSI_COLOR env var.
184 return (0 != isatty(2)) &&
185 (NULL == getenv("LL_NO_ANSI_COLOR"));
186#endif // LL_LINUX
187 return false;
188 };
148 }; 189 };
149 190
150 class RecordToFixedBuffer : public LLError::Recorder 191 class RecordToFixedBuffer : public LLError::Recorder
diff --git a/linden/indra/llcommon/llevent.h b/linden/indra/llcommon/llevent.h
index 83cb79f..ef96ef7 100644
--- a/linden/indra/llcommon/llevent.h
+++ b/linden/indra/llcommon/llevent.h
@@ -185,13 +185,6 @@ protected:
185 LLPointer<LLEventDispatcher> mDispatcher; 185 LLPointer<LLEventDispatcher> mDispatcher;
186}; 186};
187 187
188// Utility mixer class which fires & handles events
189class LLSimpleListenerObservable : public LLObservable, public LLSimpleListener
190{
191public:
192 virtual bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) = 0;
193};
194
195class LLValueChangedEvent : public LLEvent 188class LLValueChangedEvent : public LLEvent
196{ 189{
197public: 190public:
diff --git a/linden/indra/llcommon/llfile.cpp b/linden/indra/llcommon/llfile.cpp
index d551f28..32e9622 100644
--- a/linden/indra/llcommon/llfile.cpp
+++ b/linden/indra/llcommon/llfile.cpp
@@ -272,9 +272,11 @@ void llofstream::open(const char* _Filename, /* Flawfinder: ignore */
272 272
273void llofstream::close() 273void llofstream::close()
274{ // close the C stream 274{ // close the C stream
275 llassert(_Filebuffer); 275 if(is_open())
276 if (_Filebuffer->close() == 0) 276 {
277 _Myios::setstate(ios_base::failbit); /*Flawfinder: ignore*/ 277 if (_Filebuffer->close() == 0)
278 _Myios::setstate(ios_base::failbit); /*Flawfinder: ignore*/
279 }
278} 280}
279 281
280llofstream::llofstream(const char *_Filename, 282llofstream::llofstream(const char *_Filename,
@@ -286,7 +288,8 @@ llofstream::llofstream(const char *_Filename,
286} 288}
287 289
288llofstream::~llofstream() 290llofstream::~llofstream()
289{ // destroy the object 291{
292 // destroy the object
290 if (_ShouldClose) 293 if (_ShouldClose)
291 { 294 {
292 close(); 295 close();
diff --git a/linden/indra/llcommon/llframetimer.cpp b/linden/indra/llcommon/llframetimer.cpp
index 9de3be2..96e5014 100644
--- a/linden/indra/llcommon/llframetimer.cpp
+++ b/linden/indra/llcommon/llframetimer.cpp
@@ -140,3 +140,18 @@ F32 LLFrameTimer::getFrameDeltaTimeF32()
140{ 140{
141 return (F32)(U64_to_F64(sFrameDeltaTime) * USEC_TO_SEC_F64); 141 return (F32)(U64_to_F64(sFrameDeltaTime) * USEC_TO_SEC_F64);
142} 142}
143
144
145// static
146// Return seconds since the current frame started
147F32 LLFrameTimer::getCurrentFrameTime()
148{
149 U64 frame_time = totalTime() - sTotalTime;
150 return (F32)(U64_to_F64(frame_time) * USEC_TO_SEC_F64);
151}
152
153// Glue code to avoid full class .h file #includes
154F32 getCurrentFrameTime()
155{
156 return (F32)(LLFrameTimer::getCurrentFrameTime());
157}
diff --git a/linden/indra/llcommon/llframetimer.h b/linden/indra/llcommon/llframetimer.h
index bc0d79d..11c4cfc 100644
--- a/linden/indra/llcommon/llframetimer.h
+++ b/linden/indra/llcommon/llframetimer.h
@@ -74,6 +74,9 @@ public:
74 74
75 static F32 getFrameDeltaTimeF32(); 75 static F32 getFrameDeltaTimeF32();
76 76
77 // Return seconds since the current frame started
78 static F32 getCurrentFrameTime();
79
77 // MANIPULATORS 80 // MANIPULATORS
78 void start(); 81 void start();
79 void stop(); 82 void stop();
@@ -144,4 +147,7 @@ protected:
144 BOOL mStarted; 147 BOOL mStarted;
145}; 148};
146 149
150// Glue code for Havok (or anything else that doesn't want the full .h files)
151extern F32 getCurrentFrameTime();
152
147#endif // LL_LLFRAMETIMER_H 153#endif // LL_LLFRAMETIMER_H
diff --git a/linden/indra/llcommon/lllslconstants.h b/linden/indra/llcommon/lllslconstants.h
index ba39098..508fb42 100644
--- a/linden/indra/llcommon/lllslconstants.h
+++ b/linden/indra/llcommon/lllslconstants.h
@@ -70,6 +70,7 @@ const S32 LSL_PRIM_FLEXIBLE = 21;
70const S32 LSL_PRIM_TEXGEN = 22; 70const S32 LSL_PRIM_TEXGEN = 22;
71const S32 LSL_PRIM_POINT_LIGHT = 23; 71const S32 LSL_PRIM_POINT_LIGHT = 23;
72const S32 LSL_PRIM_CAST_SHADOWS = 24; 72const S32 LSL_PRIM_CAST_SHADOWS = 24;
73const S32 LSL_PRIM_GLOW = 25;
73 74
74const S32 LSL_PRIM_TYPE_BOX = 0; 75const S32 LSL_PRIM_TYPE_BOX = 0;
75const S32 LSL_PRIM_TYPE_CYLINDER= 1; 76const S32 LSL_PRIM_TYPE_CYLINDER= 1;
diff --git a/linden/indra/llcommon/llmemory.h b/linden/indra/llcommon/llmemory.h
index e1af7ba..c10661a 100644
--- a/linden/indra/llcommon/llmemory.h
+++ b/linden/indra/llcommon/llmemory.h
@@ -419,6 +419,31 @@ protected:
419// Foo* instance = FooSingleton::getInstance(); 419// Foo* instance = FooSingleton::getInstance();
420// 420//
421// As currently written, it is not thread-safe. 421// As currently written, it is not thread-safe.
422#if LL_WINDOWS && _MSC_VER < 1400 // this is Visual C++ 2003 or earlier
423// workaround for VC7 compiler bug
424// adapted from http://www.codeproject.com/KB/tips/VC2003MeyersSingletonBug.aspx
425// our version doesn't introduce a nested struct so that you can still declare LLSingleton<MyClass>
426// a friend and hide your constructor
427
428template <typename T>
429class LLSingleton
430{
431public:
432 static T* getInstance()
433 {
434 LLSingleton<T> singleton;
435 return singleton.get();
436 }
437private:
438 T* get()
439 {
440 static T instance;
441 return &instance;
442 }
443
444};
445#else
446
422template <typename T> 447template <typename T>
423class LLSingleton 448class LLSingleton
424{ 449{
@@ -430,6 +455,8 @@ public:
430 } 455 }
431}; 456};
432 457
458#endif
459
433//---------------------------------------------------------------------------- 460//----------------------------------------------------------------------------
434 461
435// Return the resident set size of the current process, in bytes. 462// Return the resident set size of the current process, in bytes.
diff --git a/linden/indra/llcommon/llpreprocessor.h b/linden/indra/llcommon/llpreprocessor.h
index 8d38904..e99b103 100644
--- a/linden/indra/llcommon/llpreprocessor.h
+++ b/linden/indra/llcommon/llpreprocessor.h
@@ -79,9 +79,16 @@
79 79
80#endif 80#endif
81 81
82
82// Deal with the differeneces on Windows 83// Deal with the differeneces on Windows
83#if LL_MSVC 84#if LL_MSVC
84#define snprintf safe_snprintf /* Flawfinder: ignore */ 85namespace snprintf_hack
86{
87 int snprintf(char *str, size_t size, const char *format, ...);
88}
89
90// #define snprintf safe_snprintf /* Flawfinder: ignore */
91using snprintf_hack::snprintf;
85#endif // LL_MSVC 92#endif // LL_MSVC
86 93
87// Static linking with apr on windows needs to be declared. 94// Static linking with apr on windows needs to be declared.
diff --git a/linden/indra/llcommon/llptrskiplist.h b/linden/indra/llcommon/llptrskiplist.h
index df35d30..f1df27a 100644
--- a/linden/indra/llcommon/llptrskiplist.h
+++ b/linden/indra/llcommon/llptrskiplist.h
@@ -34,6 +34,7 @@
34 34
35#include "llerror.h" 35#include "llerror.h"
36//#include "vmath.h" 36//#include "vmath.h"
37#include "llrand.h"
37 38
38///////////////////////////////////////////// 39/////////////////////////////////////////////
39// 40//
diff --git a/linden/indra/llcommon/llskiplist.h b/linden/indra/llcommon/llskiplist.h
index 78e6f0a..c88b310 100644
--- a/linden/indra/llcommon/llskiplist.h
+++ b/linden/indra/llcommon/llskiplist.h
@@ -32,6 +32,7 @@
32#define LL_LLSKIPLIST_H 32#define LL_LLSKIPLIST_H
33 33
34#include "llrand.h" 34#include "llrand.h"
35#include "llrand.h"
35 36
36// NOTA BENE: Insert first needs to be < NOT <= 37// NOTA BENE: Insert first needs to be < NOT <=
37// Binary depth must be >= 2 38// Binary depth must be >= 2
diff --git a/linden/indra/newview/llsphere.h b/linden/indra/llcommon/llsmoothstep.h
index 3a827c9..c2b3447 100644
--- a/linden/indra/newview/llsphere.h
+++ b/linden/indra/llcommon/llsmoothstep.h
@@ -1,6 +1,6 @@
1/** 1/**
2 * @file llsphere.h 2 * @file llsmoothstep.h
3 * @brief interface for the LLSphere class. 3 * @brief Smoothstep - transition from 0 to 1 - function, first and second derivatives all continuous (smooth)
4 * 4 *
5 * $LicenseInfo:firstyear=2001&license=viewergpl$ 5 * $LicenseInfo:firstyear=2001&license=viewergpl$
6 * 6 *
@@ -29,30 +29,22 @@
29 * $/LicenseInfo$ 29 * $/LicenseInfo$
30 */ 30 */
31 31
32#ifndef LL_LLSPHERE_H 32#ifndef LL_LLSMOOTHSTEP_H
33#define LL_LLSPHERE_H 33#define LL_LLSMOOTHSTEP_H
34 34
35//#include "vmath.h" 35template <class LLDATATYPE>
36#include "llmath.h" 36inline LLDATATYPE llsmoothstep(const LLDATATYPE& edge0, const LLDATATYPE& edge1, const LLDATATYPE& value)
37#include "v3math.h" 37{
38#include "v4math.h" 38 if (value < edge0)
39#include "m3math.h" 39 return (LLDATATYPE)0;
40#include "m4math.h"
41#include "v4color.h"
42#include "llgl.h"
43 40
44void lat2xyz(LLVector3 * result, F32 lat, F32 lon); // utility routine 41 if (value >= edge1)
42 return (LLDATATYPE)1;
45 43
46class LLSphere 44 // Scale/bias into [0..1] range
47{ 45 LLDATATYPE scaled_value = (value - edge0) / (edge1 - edge0);
48public:
49 LLGLuint mDList[5];
50 46
51 void prerender(); 47 return scaled_value * scaled_value * (3 - 2 * scaled_value);
52 void cleanupGL(); 48}
53 void render(F32 pixel_area); // of a box of size 1.0 at that position
54 void render(); // render at highest LOD
55};
56 49
57extern LLSphere gSphere; 50#endif // LL_LLSMOOTHSTEP_H
58#endif
diff --git a/linden/indra/llcommon/llstatenums.h b/linden/indra/llcommon/llstatenums.h
index 6fa61e1..bde6ade 100644
--- a/linden/indra/llcommon/llstatenums.h
+++ b/linden/indra/llcommon/llstatenums.h
@@ -57,7 +57,13 @@ enum
57 LL_SIM_STAT_VIRTUAL_SIZE_KB, 57 LL_SIM_STAT_VIRTUAL_SIZE_KB,
58 LL_SIM_STAT_RESIDENT_SIZE_KB, 58 LL_SIM_STAT_RESIDENT_SIZE_KB,
59 LL_SIM_STAT_PENDING_LOCAL_UPLOADS, 59 LL_SIM_STAT_PENDING_LOCAL_UPLOADS,
60 LL_SIM_STAT_TOTAL_UNACKED_BYTES 60 LL_SIM_STAT_TOTAL_UNACKED_BYTES,
61 LL_SIM_STAT_PHYSICS_PINNED_TASKS,
62 LL_SIM_STAT_PHYSICS_LOD_TASKS,
63 LL_SIM_STAT_SIMPHYSICSSTEPMS,
64 LL_SIM_STAT_SIMPHYSICSSHAPEMS,
65 LL_SIM_STAT_SIMPHYSICSOTHERMS,
66 LL_SIM_STAT_SIMPHYSICSMEMORY
61}; 67};
62 68
63#endif 69#endif
diff --git a/linden/indra/llcommon/llstl.h b/linden/indra/llcommon/llstl.h
index 2719888..9a24185 100644
--- a/linden/indra/llcommon/llstl.h
+++ b/linden/indra/llcommon/llstl.h
@@ -33,6 +33,9 @@
33#define LL_LLSTL_H 33#define LL_LLSTL_H
34 34
35#include <functional> 35#include <functional>
36#include <algorithm>
37#include <map>
38#include <vector>
36#include <set> 39#include <set>
37#include <deque> 40#include <deque>
38 41
diff --git a/linden/indra/llcommon/llstreamtools.cpp b/linden/indra/llcommon/llstreamtools.cpp
index 669bdd0..b95ee60 100644
--- a/linden/indra/llcommon/llstreamtools.cpp
+++ b/linden/indra/llcommon/llstreamtools.cpp
@@ -263,20 +263,14 @@ bool get_word(std::string& output_string, std::istream& input_stream, int n)
263// get everything up to and including the next newline 263// get everything up to and including the next newline
264bool get_line(std::string& output_string, std::istream& input_stream) 264bool get_line(std::string& output_string, std::istream& input_stream)
265{ 265{
266 output_string.clear();
266 char c = input_stream.get(); 267 char c = input_stream.get();
267 while (input_stream.good()) 268 while (input_stream.good())
268 { 269 {
269 if ('\r' == c) 270 output_string += c;
270 { 271 if ('\n' == c)
271 // skip carriage returns
272 }
273 else
274 { 272 {
275 output_string += c; 273 break;
276 if ('\n' == c)
277 {
278 break;
279 }
280 } 274 }
281 c = input_stream.get(); 275 c = input_stream.get();
282 } 276 }
@@ -288,27 +282,21 @@ bool get_line(std::string& output_string, std::istream& input_stream)
288// add a newline on the end if bail before actual line ending 282// add a newline on the end if bail before actual line ending
289bool get_line(std::string& output_string, std::istream& input_stream, int n) 283bool get_line(std::string& output_string, std::istream& input_stream, int n)
290{ 284{
285 output_string.clear();
291 int char_count = 0; 286 int char_count = 0;
292 char c = input_stream.get(); 287 char c = input_stream.get();
293 while (input_stream.good() && char_count < n) 288 while (input_stream.good() && char_count < n)
294 { 289 {
295 char_count++; 290 char_count++;
296 output_string += c; 291 output_string += c;
297 if ('\r' == c) 292 if ('\n' == c)
298 { 293 {
299 // skip carriage returns 294 break;
300 } 295 }
301 else 296 if (char_count >= n)
302 { 297 {
303 if ('\n' == c) 298 output_string.append("\n");
304 { 299 break;
305 break;
306 }
307 if (char_count >= n)
308 {
309 output_string.append("\n");
310 break;
311 }
312 } 300 }
313 c = input_stream.get(); 301 c = input_stream.get();
314 } 302 }
@@ -408,49 +396,6 @@ void replace_newlines_with_whitespace(std::string& line)
408 } 396 }
409} 397}
410 398
411// returns 1 for solitary "{"
412// returns -1 for solitary "}"
413// otherwise returns 0
414int get_brace_count(const std::string& line)
415{
416 int index = 0;
417 int line_size = line.size();
418 char c = 0;
419 while (index < line_size)
420 {
421 c = line[index];
422 index++;
423 if (!isspace(c))
424 {
425 break;
426 }
427 }
428 char brace = c;
429 // make sure the rest of the line is whitespace
430 while (index < line_size)
431 {
432 c = line[index];
433 if (!isspace(c))
434 {
435 break;
436 }
437 index++;
438 }
439 if ('\n' != c)
440 {
441 return 0;
442 }
443 if ('{' == brace)
444 {
445 return 1;
446 }
447 else if ('}' == brace)
448 {
449 return -1;
450 }
451 return 0;
452}
453
454// erases any double-quote characters in 'line' 399// erases any double-quote characters in 'line'
455void remove_double_quotes(std::string& line) 400void remove_double_quotes(std::string& line)
456{ 401{
@@ -498,7 +443,7 @@ void get_keyword_and_value(std::string& keyword,
498 } 443 }
499 444
500 // get the keyword 445 // get the keyword
501 keyword.assign(""); 446 keyword.clear();
502 while (line_index < line_size) 447 while (line_index < line_size)
503 { 448 {
504 c = line[line_index]; 449 c = line[line_index];
@@ -510,6 +455,8 @@ void get_keyword_and_value(std::string& keyword,
510 line_index++; 455 line_index++;
511 } 456 }
512 457
458 // get the value
459 value.clear();
513 if (keyword.size() > 0 460 if (keyword.size() > 0
514 && '\r' != line[line_index] 461 && '\r' != line[line_index]
515 && '\n' != line[line_index]) 462 && '\n' != line[line_index])
@@ -523,8 +470,6 @@ void get_keyword_and_value(std::string& keyword,
523 line_index++; 470 line_index++;
524 } 471 }
525 472
526 // get the value
527 value.assign("");
528 while (line_index < line_size) 473 while (line_index < line_size)
529 { 474 {
530 c = line[line_index]; 475 c = line[line_index];
diff --git a/linden/indra/llcommon/llstreamtools.h b/linden/indra/llcommon/llstreamtools.h
index 9db90c8..d84e53b 100644
--- a/linden/indra/llcommon/llstreamtools.h
+++ b/linden/indra/llcommon/llstreamtools.h
@@ -96,11 +96,6 @@ void escape_string(std::string& line);
96// replaces each '\n' character with ' ' 96// replaces each '\n' character with ' '
97void replace_newlines_with_whitespace(std::string& line); 97void replace_newlines_with_whitespace(std::string& line);
98 98
99// returns 1 for solitary "{"
100// returns -1 for solitary "}"
101// otherwise returns 0
102int get_brace_count(const std::string& line);
103
104// erases any double-quote characters in line 99// erases any double-quote characters in line
105void remove_double_quotes(std::string& line); 100void remove_double_quotes(std::string& line);
106 101
diff --git a/linden/indra/llcommon/llstring.cpp b/linden/indra/llcommon/llstring.cpp
index 73c80e7..a1f19ad 100644
--- a/linden/indra/llcommon/llstring.cpp
+++ b/linden/indra/llcommon/llstring.cpp
@@ -804,16 +804,19 @@ std::string utf8str_removeCRLF(const std::string& utf8str)
804 804
805#if LL_WINDOWS 805#if LL_WINDOWS
806// documentation moved to header. Phoenix 2007-11-27 806// documentation moved to header. Phoenix 2007-11-27
807int safe_snprintf(char *str, size_t size, const char *format, ...) 807namespace snprintf_hack
808{ 808{
809 va_list args; 809 int snprintf(char *str, size_t size, const char *format, ...)
810 va_start(args, format); 810 {
811 811 va_list args;
812 int num_written = _vsnprintf(str, size, format, args); /* Flawfinder: ignore */ 812 va_start(args, format);
813 va_end(args); 813
814 814 int num_written = _vsnprintf(str, size, format, args); /* Flawfinder: ignore */
815 str[size-1] = '\0'; // always null terminate 815 va_end(args);
816 return num_written; 816
817 str[size-1] = '\0'; // always null terminate
818 return num_written;
819 }
817} 820}
818 821
819std::string ll_convert_wide_to_string(const wchar_t* in) 822std::string ll_convert_wide_to_string(const wchar_t* in)
diff --git a/linden/indra/llcommon/llversionserver.h b/linden/indra/llcommon/llversionserver.h
index 05ac9b3..e865b6a 100644
--- a/linden/indra/llcommon/llversionserver.h
+++ b/linden/indra/llcommon/llversionserver.h
@@ -33,9 +33,9 @@
33#define LL_LLVERSIONSERVER_H 33#define LL_LLVERSIONSERVER_H
34 34
35const S32 LL_VERSION_MAJOR = 1; 35const S32 LL_VERSION_MAJOR = 1;
36const S32 LL_VERSION_MINOR = 19; 36const S32 LL_VERSION_MINOR = 20;
37const S32 LL_VERSION_PATCH = 1; 37const S32 LL_VERSION_PATCH = 0;
38const S32 LL_VERSION_BUILD = 3; 38const S32 LL_VERSION_BUILD = 83892;
39 39
40const char * const LL_CHANNEL = "Second Life Server"; 40const char * const LL_CHANNEL = "Second Life Server";
41 41
diff --git a/linden/indra/llcommon/llversionviewer.h b/linden/indra/llcommon/llversionviewer.h
index f00657a..06f6a82 100644
--- a/linden/indra/llcommon/llversionviewer.h
+++ b/linden/indra/llcommon/llversionviewer.h
@@ -33,9 +33,9 @@
33#define LL_LLVERSIONVIEWER_H 33#define LL_LLVERSIONVIEWER_H
34 34
35const S32 LL_VERSION_MAJOR = 1; 35const S32 LL_VERSION_MAJOR = 1;
36const S32 LL_VERSION_MINOR = 19; 36const S32 LL_VERSION_MINOR = 20;
37const S32 LL_VERSION_PATCH = 1; 37const S32 LL_VERSION_PATCH = 2;
38const S32 LL_VERSION_BUILD = 4; 38const S32 LL_VERSION_BUILD = 0;
39 39
40const char * const LL_CHANNEL = "Second Life Release"; 40const char * const LL_CHANNEL = "Second Life Release";
41 41
diff --git a/linden/indra/llimage/llimage.cpp b/linden/indra/llimage/llimage.cpp
index bcd9463..3600cce 100644
--- a/linden/indra/llimage/llimage.cpp
+++ b/linden/indra/llimage/llimage.cpp
@@ -43,6 +43,7 @@
43#if JPEG_SUPPORT 43#if JPEG_SUPPORT
44#include "llimagejpeg.h" 44#include "llimagejpeg.h"
45#endif 45#endif
46#include "llimagepng.h"
46#include "llimagedxt.h" 47#include "llimagedxt.h"
47 48
48//--------------------------------------------------------------------------- 49//---------------------------------------------------------------------------
@@ -490,8 +491,8 @@ void LLImageRaw::composite( LLImageRaw* src )
490{ 491{
491 LLImageRaw* dst = this; // Just for clarity. 492 LLImageRaw* dst = this; // Just for clarity.
492 493
493 llassert( (3 == src->getComponents()) || (4 == src->getComponents()) ); 494 llassert(3 == src->getComponents());
494 llassert( (3 == dst->getComponents()) || (4 == dst->getComponents()) ); 495 llassert(3 == dst->getComponents());
495 496
496 if( 3 == dst->getComponents() ) 497 if( 3 == dst->getComponents() )
497 { 498 {
@@ -519,11 +520,6 @@ void LLImageRaw::composite( LLImageRaw* src )
519 } 520 }
520 } 521 }
521 } 522 }
522 else
523 {
524 // 4 == dst->mComponents
525 llassert(0); // not implemented yet.
526 }
527} 523}
528 524
529// Src and dst can be any size. Src has 4 components. Dst has 3 components. 525// Src and dst can be any size. Src has 4 components. Dst has 3 components.
@@ -689,7 +685,7 @@ void LLImageRaw::copyUnscaled(LLImageRaw* src)
689{ 685{
690 LLImageRaw* dst = this; // Just for clarity. 686 LLImageRaw* dst = this; // Just for clarity.
691 687
692 llassert( (3 == src->getComponents()) || (4 == src->getComponents()) ); 688 llassert( (1 == src->getComponents()) || (3 == src->getComponents()) || (4 == src->getComponents()) );
693 llassert( src->getComponents() == dst->getComponents() ); 689 llassert( src->getComponents() == dst->getComponents() );
694 llassert( (src->getWidth() == dst->getWidth()) && (src->getHeight() == dst->getHeight()) ); 690 llassert( (src->getWidth() == dst->getWidth()) && (src->getHeight() == dst->getHeight()) );
695 691
@@ -772,7 +768,7 @@ void LLImageRaw::copyScaled( LLImageRaw* src )
772 LLMemType mt1((LLMemType::EMemType)mMemType); 768 LLMemType mt1((LLMemType::EMemType)mMemType);
773 LLImageRaw* dst = this; // Just for clarity. 769 LLImageRaw* dst = this; // Just for clarity.
774 770
775 llassert( (3 == src->getComponents()) || (4 == src->getComponents()) ); 771 llassert( (1 == src->getComponents()) || (3 == src->getComponents()) || (4 == src->getComponents()) );
776 llassert( src->getComponents() == dst->getComponents() ); 772 llassert( src->getComponents() == dst->getComponents() );
777 773
778 if( (src->getWidth() == dst->getWidth()) && (src->getHeight() == dst->getHeight()) ) 774 if( (src->getWidth() == dst->getWidth()) && (src->getHeight() == dst->getHeight()) )
@@ -803,7 +799,7 @@ void LLImageRaw::copyScaled( LLImageRaw* src )
803void LLImageRaw::scale( S32 new_width, S32 new_height, BOOL scale_image_data ) 799void LLImageRaw::scale( S32 new_width, S32 new_height, BOOL scale_image_data )
804{ 800{
805 LLMemType mt1((LLMemType::EMemType)mMemType); 801 LLMemType mt1((LLMemType::EMemType)mMemType);
806 llassert( (3 == getComponents()) || (4 == getComponents()) ); 802 llassert((1 == getComponents()) || (3 == getComponents()) || (4 == getComponents()) );
807 803
808 S32 old_width = getWidth(); 804 S32 old_width = getWidth();
809 S32 old_height = getHeight(); 805 S32 old_height = getHeight();
@@ -1093,7 +1089,7 @@ void LLImageRaw::compositeRowScaled4onto3( U8* in, U8* out, S32 in_pixel_len, S3
1093static struct 1089static struct
1094{ 1090{
1095 const char* exten; 1091 const char* exten;
1096 S8 codec; 1092 EImageCodec codec;
1097} 1093}
1098file_extensions[] = 1094file_extensions[] =
1099{ 1095{
@@ -1128,7 +1124,7 @@ static LLString find_file(LLString &name, S8 *codec)
1128 return LLString(""); 1124 return LLString("");
1129} 1125}
1130 1126
1131static S8 get_codec(const LLString& exten) 1127EImageCodec LLImageBase::getCodecFromExtension(const LLString& exten)
1132{ 1128{
1133 for (int i=0; i<(int)(NUM_FILE_EXTENSIONS); i++) 1129 for (int i=0; i<(int)(NUM_FILE_EXTENSIONS); i++)
1134 { 1130 {
@@ -1151,7 +1147,7 @@ bool LLImageRaw::createFromFile(const LLString &filename, bool j2c_lowest_mip_on
1151 { 1147 {
1152 exten = name.substr(dotidx+1); 1148 exten = name.substr(dotidx+1);
1153 LLString::toLower(exten); 1149 LLString::toLower(exten);
1154 codec = get_codec(exten); 1150 codec = getCodecFromExtension(exten);
1155 } 1151 }
1156 else 1152 else
1157 { 1153 {
@@ -1294,6 +1290,9 @@ LLImageFormatted* LLImageFormatted::createFromType(S8 codec)
1294 case IMG_CODEC_DXT: 1290 case IMG_CODEC_DXT:
1295 image = new LLImageDXT(); 1291 image = new LLImageDXT();
1296 break; 1292 break;
1293 case IMG_CODEC_PNG:
1294 image = new LLImagePNG();
1295 break;
1297 default: 1296 default:
1298 image = NULL; 1297 image = NULL;
1299 break; 1298 break;
@@ -1314,7 +1313,7 @@ LLImageFormatted* LLImageFormatted::createFromExtension(const LLString& instring
1314 { 1313 {
1315 exten = instring; 1314 exten = instring;
1316 } 1315 }
1317 S8 codec = get_codec(exten); 1316 S8 codec = getCodecFromExtension(exten);
1318 return createFromType(codec); 1317 return createFromType(codec);
1319} 1318}
1320//---------------------------------------------------------------------------- 1319//----------------------------------------------------------------------------
diff --git a/linden/indra/llimage/llimage.h b/linden/indra/llimage/llimage.h
index 199dc07..0393d13 100644
--- a/linden/indra/llimage/llimage.h
+++ b/linden/indra/llimage/llimage.h
@@ -60,7 +60,7 @@ class LLImageFormatted;
60class LLImageRaw; 60class LLImageRaw;
61class LLColor4U; 61class LLColor4U;
62 62
63enum 63typedef enum e_image_codec
64{ 64{
65 IMG_CODEC_INVALID = 0, 65 IMG_CODEC_INVALID = 0,
66 IMG_CODEC_RGB = 1, 66 IMG_CODEC_RGB = 1,
@@ -71,7 +71,7 @@ enum
71 IMG_CODEC_DXT = 6, 71 IMG_CODEC_DXT = 6,
72 IMG_CODEC_PNG = 7, 72 IMG_CODEC_PNG = 7,
73 IMG_CODEC_EOF = 8 73 IMG_CODEC_EOF = 8
74}; 74} EImageCodec;
75 75
76//============================================================================ 76//============================================================================
77 77
@@ -125,6 +125,8 @@ public:
125 125
126 static void setSizeOverride(BOOL enabled) { sSizeOverride = enabled; } 126 static void setSizeOverride(BOOL enabled) { sSizeOverride = enabled; }
127 127
128 static EImageCodec getCodecFromExtension(const LLString& exten);
129
128private: 130private:
129 U8 *mData; 131 U8 *mData;
130 S32 mDataSize; 132 S32 mDataSize;
diff --git a/linden/indra/llimagej2coj/llimagej2coj.cpp b/linden/indra/llimagej2coj/llimagej2coj.cpp
index 3ca271c..01868fd 100644
--- a/linden/indra/llimagej2coj/llimagej2coj.cpp
+++ b/linden/indra/llimagej2coj/llimagej2coj.cpp
@@ -158,6 +158,18 @@ BOOL LLImageJ2COJ::decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 decod
158 return TRUE; // done 158 return TRUE; // done
159 } 159 }
160 160
161 // sometimes we get bad data out of the cache - check to see if the decode succeeded
162 for (S32 i = 0; i < image->numcomps; i++)
163 {
164 if (image->comps[i].factor != base.getRawDiscardLevel())
165 {
166 // if we didn't get the discard level we're expecting, fail
167 opj_image_destroy(image);
168 base.mDecoding = FALSE;
169 return TRUE;
170 }
171 }
172
161 // Copy image data into our raw image format (instead of the separate channel format 173 // Copy image data into our raw image format (instead of the separate channel format
162 174
163 S32 img_components = image->numcomps; 175 S32 img_components = image->numcomps;
diff --git a/linden/indra/llinventory/lleconomy.cpp b/linden/indra/llinventory/lleconomy.cpp
index 6ed0510..619c5f9 100644
--- a/linden/indra/llinventory/lleconomy.cpp
+++ b/linden/indra/llinventory/lleconomy.cpp
@@ -35,7 +35,6 @@
35#include "message.h" 35#include "message.h"
36#include "v3math.h" 36#include "v3math.h"
37 37
38LLGlobalEconomy *gGlobalEconomy = NULL;
39 38
40LLGlobalEconomy::LLGlobalEconomy() 39LLGlobalEconomy::LLGlobalEconomy()
41: mObjectCount( -1 ), 40: mObjectCount( -1 ),
@@ -55,35 +54,33 @@ LLGlobalEconomy::~LLGlobalEconomy()
55{ } 54{ }
56 55
57// static 56// static
58void LLGlobalEconomy::processEconomyData(LLMessageSystem *msg, void** user_data) 57void LLGlobalEconomy::processEconomyData(LLMessageSystem *msg, LLGlobalEconomy* econ_data)
59{ 58{
60 S32 i; 59 S32 i;
61 F32 f; 60 F32 f;
62 61
63 LLGlobalEconomy *this_ptr = (LLGlobalEconomy*)user_data;
64
65 msg->getS32Fast(_PREHASH_Info, _PREHASH_ObjectCapacity, i); 62 msg->getS32Fast(_PREHASH_Info, _PREHASH_ObjectCapacity, i);
66 this_ptr->setObjectCapacity(i); 63 econ_data->setObjectCapacity(i);
67 msg->getS32Fast(_PREHASH_Info, _PREHASH_ObjectCount, i); 64 msg->getS32Fast(_PREHASH_Info, _PREHASH_ObjectCount, i);
68 this_ptr->setObjectCount(i); 65 econ_data->setObjectCount(i);
69 msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceEnergyUnit, i); 66 msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceEnergyUnit, i);
70 this_ptr->setPriceEnergyUnit(i); 67 econ_data->setPriceEnergyUnit(i);
71 msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceObjectClaim, i); 68 msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceObjectClaim, i);
72 this_ptr->setPriceObjectClaim(i); 69 econ_data->setPriceObjectClaim(i);
73 msg->getS32Fast(_PREHASH_Info, _PREHASH_PricePublicObjectDecay, i); 70 msg->getS32Fast(_PREHASH_Info, _PREHASH_PricePublicObjectDecay, i);
74 this_ptr->setPricePublicObjectDecay(i); 71 econ_data->setPricePublicObjectDecay(i);
75 msg->getS32Fast(_PREHASH_Info, _PREHASH_PricePublicObjectDelete, i); 72 msg->getS32Fast(_PREHASH_Info, _PREHASH_PricePublicObjectDelete, i);
76 this_ptr->setPricePublicObjectDelete(i); 73 econ_data->setPricePublicObjectDelete(i);
77 msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceUpload, i); 74 msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceUpload, i);
78 this_ptr->setPriceUpload(i); 75 econ_data->setPriceUpload(i);
79 msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceRentLight, i); 76 msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceRentLight, i);
80 this_ptr->setPriceRentLight(i); 77 econ_data->setPriceRentLight(i);
81 msg->getS32Fast(_PREHASH_Info, _PREHASH_TeleportMinPrice, i); 78 msg->getS32Fast(_PREHASH_Info, _PREHASH_TeleportMinPrice, i);
82 this_ptr->setTeleportMinPrice(i); 79 econ_data->setTeleportMinPrice(i);
83 msg->getF32Fast(_PREHASH_Info, _PREHASH_TeleportPriceExponent, f); 80 msg->getF32Fast(_PREHASH_Info, _PREHASH_TeleportPriceExponent, f);
84 this_ptr->setTeleportPriceExponent(f); 81 econ_data->setTeleportPriceExponent(f);
85 msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceGroupCreate, i); 82 msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceGroupCreate, i);
86 this_ptr->setPriceGroupCreate(i); 83 econ_data->setPriceGroupCreate(i);
87} 84}
88 85
89S32 LLGlobalEconomy::calculateTeleportCost(F32 distance) const 86S32 LLGlobalEconomy::calculateTeleportCost(F32 distance) const
@@ -154,10 +151,10 @@ void LLRegionEconomy::processEconomyData(LLMessageSystem *msg, void** user_data)
154 S32 i; 151 S32 i;
155 F32 f; 152 F32 f;
156 153
157 LLGlobalEconomy::processEconomyData(msg, user_data);
158
159 LLRegionEconomy *this_ptr = (LLRegionEconomy*)user_data; 154 LLRegionEconomy *this_ptr = (LLRegionEconomy*)user_data;
160 155
156 LLGlobalEconomy::processEconomyData(msg, this_ptr);
157
161 msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceParcelClaim, i); 158 msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceParcelClaim, i);
162 this_ptr->setBasePriceParcelClaimDefault(i); 159 this_ptr->setBasePriceParcelClaimDefault(i);
163 msg->getF32(_PREHASH_Info, _PREHASH_PriceParcelClaimFactor, f); 160 msg->getF32(_PREHASH_Info, _PREHASH_PriceParcelClaimFactor, f);
diff --git a/linden/indra/llinventory/lleconomy.h b/linden/indra/llinventory/lleconomy.h
index c5caa42..dcc97b2 100644
--- a/linden/indra/llinventory/lleconomy.h
+++ b/linden/indra/llinventory/lleconomy.h
@@ -31,6 +31,8 @@
31#ifndef LL_LLECONOMY_H 31#ifndef LL_LLECONOMY_H
32#define LL_LLECONOMY_H 32#define LL_LLECONOMY_H
33 33
34#include "llmemory.h"
35
34class LLMessageSystem; 36class LLMessageSystem;
35class LLVector3; 37class LLVector3;
36 38
@@ -40,9 +42,14 @@ public:
40 LLGlobalEconomy(); 42 LLGlobalEconomy();
41 virtual ~LLGlobalEconomy(); 43 virtual ~LLGlobalEconomy();
42 44
45 // This class defines its singleton internally as a typedef instead of inheriting from
46 // LLSingleton like most others because the LLRegionEconomy sub-class might also
47 // become a singleton and this pattern will more easily disambiguate them.
48 typedef LLSingleton<LLGlobalEconomy> Singleton;
49
43 virtual void print(); 50 virtual void print();
44 51
45 static void processEconomyData(LLMessageSystem *msg, void **user_data); 52 static void processEconomyData(LLMessageSystem *msg, LLGlobalEconomy* econ_data);
46 53
47 S32 calculateTeleportCost(F32 distance) const; 54 S32 calculateTeleportCost(F32 distance) const;
48 S32 calculateLightRent(const LLVector3& object_size) const; 55 S32 calculateLightRent(const LLVector3& object_size) const;
@@ -136,6 +143,4 @@ private:
136 143
137}; 144};
138 145
139extern LLGlobalEconomy* gGlobalEconomy;
140
141#endif 146#endif
diff --git a/linden/indra/llinventory/llinventory.cpp b/linden/indra/llinventory/llinventory.cpp
index 3afa2be..4c58789 100644
--- a/linden/indra/llinventory/llinventory.cpp
+++ b/linden/indra/llinventory/llinventory.cpp
@@ -940,6 +940,7 @@ LLSD LLInventoryItem::asLLSD() const
940 } 940 }
941 else 941 else
942 { 942 {
943 // *TODO: get rid of this. Phoenix 2008-01-30
943 LLUUID shadow_id(mAssetUUID); 944 LLUUID shadow_id(mAssetUUID);
944 LLXORCipher cipher(MAGIC_ID.mData, UUID_BYTES); 945 LLXORCipher cipher(MAGIC_ID.mData, UUID_BYTES);
945 cipher.encrypt(shadow_id.mData, UUID_BYTES); 946 cipher.encrypt(shadow_id.mData, UUID_BYTES);
diff --git a/linden/indra/llinventory/llinventory.h b/linden/indra/llinventory/llinventory.h
index 1623edf..b4199db 100644
--- a/linden/indra/llinventory/llinventory.h
+++ b/linden/indra/llinventory/llinventory.h
@@ -135,15 +135,40 @@ protected:
135 S32 mCreationDate; // seconds from 1/1/1970, UTC 135 S32 mCreationDate; // seconds from 1/1/1970, UTC
136 136
137public: 137public:
138
139 /**
140 * Anonymous enumeration for specifying the inventory item flags.
141 */
138 enum 142 enum
139 { 143 {
140 // The meaning of LLInventoryItem::mFlags is distinct for each 144 // The shared flags at the top are shared among all inventory
141 // inventory type. 145 // types. After that section, all values of flags are type
146 // dependent. The shared flags will start at 2^30 and work
147 // down while item type specific flags will start at 2^0 and
148 // work up.
142 II_FLAGS_NONE = 0, 149 II_FLAGS_NONE = 0,
143 150
144 // landmark flags 151
152 //
153 // Shared flags
154 //
155 //
156
157 // This value means that the asset has only one reference in
158 // the system. If the inventory item is deleted, or the asset
159 // id updated, then we can remove the old reference.
160 II_FLAGS_SHARED_SINGLE_REFERENCE = 0x40000000,
161
162
163 //
164 // Landmark flags
165 //
145 II_FLAGS_LANDMARK_VISITED = 1, 166 II_FLAGS_LANDMARK_VISITED = 1,
146 167
168 //
169 // Object flags
170 //
171
147 // flag to indicate that object permissions should have next 172 // flag to indicate that object permissions should have next
148 // owner perm be more restrictive on rez. We bump this into 173 // owner perm be more restrictive on rez. We bump this into
149 // the second byte of the flags since the low byte is used to 174 // the second byte of the flags since the low byte is used to
@@ -169,8 +194,11 @@ public:
169 // of muiltiple items or not. 194 // of muiltiple items or not.
170 II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS = 0x200000, 195 II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS = 0x200000,
171 196
197 //
172 // wearables use the low order byte of flags to store the 198 // wearables use the low order byte of flags to store the
173 // EWearableType enumeration found in newview/llwearable.h 199 // EWearableType enumeration found in newview/llwearable.h
200 //
201 II_FLAGS_WEARABLES_MASK = 0xff,
174 }; 202 };
175 203
176protected: 204protected:
diff --git a/linden/indra/llinventory/llparcel.cpp b/linden/indra/llinventory/llparcel.cpp
index 5f8a000..1390f72 100644
--- a/linden/indra/llinventory/llparcel.cpp
+++ b/linden/indra/llinventory/llparcel.cpp
@@ -216,8 +216,8 @@ void LLParcel::init(const LLUUID &owner_id,
216 mMediaID.setNull(); 216 mMediaID.setNull();
217 mMediaAutoScale = 0; 217 mMediaAutoScale = 0;
218 mMediaLoop = TRUE; 218 mMediaLoop = TRUE;
219 mObscureMedia = 0; 219 mObscureMedia = 1;
220 mObscureMusic = 0; 220 mObscureMusic = 1;
221 mMediaWidth = 0; 221 mMediaWidth = 0;
222 mMediaHeight = 0; 222 mMediaHeight = 0;
223 223
@@ -1856,8 +1856,8 @@ void LLParcel::clearParcel()
1856 setMediaDesc(NULL); 1856 setMediaDesc(NULL);
1857 setMediaAutoScale(0); 1857 setMediaAutoScale(0);
1858 setMediaLoop(TRUE); 1858 setMediaLoop(TRUE);
1859 mObscureMedia = 0; 1859 mObscureMedia = 1;
1860 mObscureMusic = 0; 1860 mObscureMusic = 1;
1861 mMediaWidth = 0; 1861 mMediaWidth = 0;
1862 mMediaHeight = 0; 1862 mMediaHeight = 0;
1863 setMusicURL(NULL); 1863 setMusicURL(NULL);
diff --git a/linden/indra/llinventory/llparcelflags.h b/linden/indra/llinventory/llparcelflags.h
index 1bf744b..62a6acf 100644
--- a/linden/indra/llinventory/llparcelflags.h
+++ b/linden/indra/llinventory/llparcelflags.h
@@ -81,7 +81,7 @@ const U32 PF_USE_RESTRICTED_ACCESS = PF_USE_ACCESS_GROUP
81 | PF_DENY_ANONYMOUS 81 | PF_DENY_ANONYMOUS
82 | PF_DENY_AGEUNVERIFIED; 82 | PF_DENY_AGEUNVERIFIED;
83const U32 PF_NONE = 0x00000000; 83const U32 PF_NONE = 0x00000000;
84const U32 PF_ALL = 0x7FFFFFFF; 84const U32 PF_ALL = 0xFFFFFFFF;
85const U32 PF_DEFAULT = PF_ALLOW_FLY 85const U32 PF_DEFAULT = PF_ALLOW_FLY
86 | PF_ALLOW_OTHER_SCRIPTS 86 | PF_ALLOW_OTHER_SCRIPTS
87 | PF_ALLOW_GROUP_SCRIPTS 87 | PF_ALLOW_GROUP_SCRIPTS
diff --git a/linden/indra/llmath/files.lst b/linden/indra/llmath/files.lst
index cfd635a..1001a6d 100644
--- a/linden/indra/llmath/files.lst
+++ b/linden/indra/llmath/files.lst
@@ -2,11 +2,13 @@ llmath/llbboxlocal.cpp
2llmath/llcamera.cpp 2llmath/llcamera.cpp
3llmath/llcoordframe.cpp 3llmath/llcoordframe.cpp
4llmath/llcrc.cpp 4llmath/llcrc.cpp
5llmath/llline.cpp
5llmath/llmd5.cpp 6llmath/llmd5.cpp
6llmath/llperlin.cpp 7llmath/llperlin.cpp
7llmath/llquaternion.cpp 8llmath/llquaternion.cpp
8llmath/llrand.cpp 9llmath/llrand.cpp
9llmath/llrect.cpp 10llmath/llrect.cpp
11llmath/llsphere.cpp
10llmath/lluuid.cpp 12llmath/lluuid.cpp
11llmath/llvolume.cpp 13llmath/llvolume.cpp
12llmath/llvolumemgr.cpp 14llmath/llvolumemgr.cpp
diff --git a/linden/indra/llmath/llline.cpp b/linden/indra/llmath/llline.cpp
new file mode 100644
index 0000000..9c41efb
--- /dev/null
+++ b/linden/indra/llmath/llline.cpp
@@ -0,0 +1,189 @@
1/**
2 * @file llline.cpp
3 * @author Andrew Meadows
4 * @brief Simple line class that can compute nearest approach between two lines
5 *
6 * $LicenseInfo:firstyear=2001&license=internal$
7 *
8 * Copyright (c) 2001-2008, Linden Research, Inc.
9 *
10 * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
11 * this source code is governed by the Linden Lab Source Code Disclosure
12 * Agreement ("Agreement") previously entered between you and Linden
13 * Lab. By accessing, using, copying, modifying or distributing this
14 * software, you acknowledge that you have been informed of your
15 * obligations under the Agreement and agree to abide by those obligations.
16 *
17 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
18 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
19 * COMPLETENESS OR PERFORMANCE.
20 * $/LicenseInfo$
21 */
22
23#include "llline.h"
24#include "llrand.h"
25
26const F32 SOME_SMALL_NUMBER = 1.0e-5f;
27const F32 SOME_VERY_SMALL_NUMBER = 1.0e-8f;
28
29LLLine::LLLine()
30: mPoint(0.f, 0.f, 0.f),
31 mDirection(1.f, 0.f, 0.f)
32{ }
33
34LLLine::LLLine( const LLVector3& first_point, const LLVector3& second_point )
35{
36 setPoints(first_point, second_point);
37}
38
39void LLLine::setPoints( const LLVector3& first_point, const LLVector3& second_point )
40{
41 mPoint = first_point;
42 mDirection = second_point - first_point;
43 mDirection.normalize();
44}
45
46void LLLine::setPointDirection( const LLVector3& first_point, const LLVector3& second_point )
47{
48 setPoints(first_point, first_point + second_point);
49}
50
51bool LLLine::intersects( const LLVector3& point, F32 radius ) const
52{
53 LLVector3 other_direction = point - mPoint;
54 LLVector3 nearest_point = mPoint + mDirection * (other_direction * mDirection);
55 F32 nearest_approach = (nearest_point - point).length();
56 return (nearest_approach <= radius);
57}
58
59// returns the point on this line that is closest to some_point
60LLVector3 LLLine::nearestApproach( const LLVector3& some_point ) const
61{
62 return (mPoint + mDirection * ((some_point - mPoint) * mDirection));
63}
64
65// the accuracy of this method sucks when you give it two nearly
66// parallel lines, so you should probably check for parallelism
67// before you call this
68//
69// returns the point on this line that is closest to other_line
70LLVector3 LLLine::nearestApproach( const LLLine& other_line ) const
71{
72 LLVector3 between_points = other_line.mPoint - mPoint;
73 F32 dir_dot_dir = mDirection * other_line.mDirection;
74 F32 one_minus_dir_dot_dir = 1.0f - fabs(dir_dot_dir);
75 if ( one_minus_dir_dot_dir < SOME_VERY_SMALL_NUMBER )
76 {
77#ifdef LL_DEBUG
78 llwarns << "LLLine::nearestApproach() was given two very "
79 << "nearly parallel lines dir1 = " << mDirection
80 << " dir2 = " << other_line.mDirection << " with 1-dot_product = "
81 << one_minus_dir_dot_dir << llendl;
82#endif
83 // the lines are approximately parallel
84 // We shouldn't fall in here because this check should have been made
85 // BEFORE this function was called. We dare not continue with the
86 // computations for fear of division by zero, but we have to return
87 // something so we return a bogus point -- caller beware.
88 return 0.5f * (mPoint + other_line.mPoint);
89 }
90
91 F32 odir_dot_bp = other_line.mDirection * between_points;
92
93 F32 numerator = 0;
94 F32 denominator = 0;
95 for (S32 i=0; i<3; i++)
96 {
97 F32 factor = dir_dot_dir * other_line.mDirection.mV[i] - mDirection.mV[i];
98 numerator += ( between_points.mV[i] - odir_dot_bp * other_line.mDirection.mV[i] ) * factor;
99 denominator -= factor * factor;
100 }
101
102 F32 length_to_nearest_approach = numerator / denominator;
103
104 return mPoint + length_to_nearest_approach * mDirection;
105}
106
107std::ostream& operator<<( std::ostream& output_stream, const LLLine& line )
108{
109 output_stream << "{point=" << line.mPoint << "," << "dir=" << line.mDirection << "}";
110 return output_stream;
111}
112
113
114F32 ALMOST_PARALLEL = 0.99f;
115F32 TOO_SMALL_FOR_DIVISION = 0.0001f;
116
117// returns 'true' if this line intersects the plane
118// on success stores the intersection point in 'result'
119bool LLLine::intersectsPlane( LLVector3& result, const LLLine& plane ) const
120{
121 // p = P + l * d equation for a line
122 //
123 // N * p = D equation for a point
124 //
125 // N * (P + l * d) = D
126 // N*P + l * (N*d) = D
127 // l * (N*d) = D - N*P
128 // l = ( D - N*P ) / ( N*d )
129 //
130
131 F32 dot = plane.mDirection * mDirection;
132 if (fabs(dot) < TOO_SMALL_FOR_DIVISION)
133 {
134 return false;
135 }
136
137 F32 plane_dot = plane.mDirection * plane.mPoint;
138 F32 length = ( plane_dot - (plane.mDirection * mPoint) ) / dot;
139 result = mPoint + length * mDirection;
140 return true;
141}
142
143//static
144// returns 'true' if planes intersect, and stores the result
145// the second and third arguments are treated as planes
146// where mPoint is on the plane and mDirection is the normal
147// result.mPoint will be the intersection line's closest approach
148// to first_plane.mPoint
149bool LLLine::getIntersectionBetweenTwoPlanes( LLLine& result, const LLLine& first_plane, const LLLine& second_plane )
150{
151 // TODO -- if we ever get some generic matrix solving code in our libs
152 // then we should just use that, since this problem is really just
153 // linear algebra.
154
155 F32 dot = fabs(first_plane.mDirection * second_plane.mDirection);
156 if (dot > ALMOST_PARALLEL)
157 {
158 // the planes are nearly parallel
159 return false;
160 }
161
162 LLVector3 direction = first_plane.mDirection % second_plane.mDirection;
163 direction.normalize();
164
165 LLVector3 first_intersection;
166 {
167 LLLine intersection_line(first_plane);
168 intersection_line.mDirection = direction % first_plane.mDirection;
169 intersection_line.mDirection.normalize();
170 intersection_line.intersectsPlane(first_intersection, second_plane);
171 }
172
173 /*
174 LLVector3 second_intersection;
175 {
176 LLLine intersection_line(second_plane);
177 intersection_line.mDirection = direction % second_plane.mDirection;
178 intersection_line.mDirection.normalize();
179 intersection_line.intersectsPlane(second_intersection, first_plane);
180 }
181 */
182
183 result.mPoint = first_intersection;
184 result.mDirection = direction;
185
186 return true;
187}
188
189
diff --git a/linden/indra/llmath/llline.h b/linden/indra/llmath/llline.h
new file mode 100644
index 0000000..ca454c5
--- /dev/null
+++ b/linden/indra/llmath/llline.h
@@ -0,0 +1,75 @@
1// llline.h
2/**
3 * @file llline.cpp
4 * @author Andrew Meadows
5 * @brief Simple line for computing nearest approach between two infinite lines
6 *
7 * $LicenseInfo:firstyear=2006&license=internal$
8 *
9 * Copyright (c) 2006-2008, Linden Research, Inc.
10 *
11 * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
12 * this source code is governed by the Linden Lab Source Code Disclosure
13 * Agreement ("Agreement") previously entered between you and Linden
14 * Lab. By accessing, using, copying, modifying or distributing this
15 * software, you acknowledge that you have been informed of your
16 * obligations under the Agreement and agree to abide by those obligations.
17 *
18 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
19 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
20 * COMPLETENESS OR PERFORMANCE.
21 * $/LicenseInfo$
22 */
23
24#ifndef LL_LINE_H
25#define LL_LINE_H
26
27#include <iostream>
28#include "stdtypes.h"
29#include "v3math.h"
30
31const F32 DEFAULT_INTERSECTION_ERROR = 0.000001f;
32
33class LLLine
34{
35public:
36 LLLine();
37 LLLine( const LLVector3& first_point, const LLVector3& second_point );
38 virtual ~LLLine() {};
39
40 void setPointDirection( const LLVector3& first_point, const LLVector3& second_point );
41 void setPoints( const LLVector3& first_point, const LLVector3& second_point );
42
43 bool intersects( const LLVector3& point, F32 radius = DEFAULT_INTERSECTION_ERROR ) const;
44
45 // returns the point on this line that is closest to some_point
46 LLVector3 nearestApproach( const LLVector3& some_point ) const;
47
48 // returns the point on this line that is closest to other_line
49 LLVector3 nearestApproach( const LLLine& other_line ) const;
50
51 friend std::ostream& operator<<( std::ostream& output_stream, const LLLine& line );
52
53 // returns 'true' if this line intersects the plane
54 // on success stores the intersection point in 'result'
55 bool intersectsPlane( LLVector3& result, const LLLine& plane ) const;
56
57 // returns 'true' if planes intersect, and stores the result
58 // the second and third arguments are treated as planes
59 // where mPoint is on the plane and mDirection is the normal
60 // result.mPoint will be the intersection line's closest approach
61 // to first_plane.mPoint
62 static bool getIntersectionBetweenTwoPlanes( LLLine& result, const LLLine& first_plane, const LLLine& second_plane );
63
64 const LLVector3& getPoint() const { return mPoint; }
65 const LLVector3& getDirection() const { return mDirection; }
66
67protected:
68 // these are protected because some code assumes that the normal is
69 // always correct and properly normalized.
70 LLVector3 mPoint;
71 LLVector3 mDirection;
72};
73
74
75#endif
diff --git a/linden/indra/llmath/llmath.h b/linden/indra/llmath/llmath.h
index d3c0d86..4a6358d 100644
--- a/linden/indra/llmath/llmath.h
+++ b/linden/indra/llmath/llmath.h
@@ -32,8 +32,14 @@
32#ifndef LLMATH_H 32#ifndef LLMATH_H
33#define LLMATH_H 33#define LLMATH_H
34 34
35#include <cmath>
36//#include <math.h>
37//#include <stdlib.h>
38#include "lldefs.h"
39
35// work around for Windows & older gcc non-standard function names. 40// work around for Windows & older gcc non-standard function names.
36#if LL_WINDOWS 41#if LL_WINDOWS
42#include <float.h>
37#define llisnan(val) _isnan(val) 43#define llisnan(val) _isnan(val)
38#define llfinite(val) _finite(val) 44#define llfinite(val) _finite(val)
39#elif (LL_LINUX && __GNUC__ <= 2) 45#elif (LL_LINUX && __GNUC__ <= 2)
@@ -99,6 +105,12 @@ inline BOOL is_approx_equal(F32 x, F32 y)
99 return (abs((S32) ((U32&)x - (U32&)y) ) < COMPARE_MANTISSA_UP_TO_BIT); 105 return (abs((S32) ((U32&)x - (U32&)y) ) < COMPARE_MANTISSA_UP_TO_BIT);
100} 106}
101 107
108inline BOOL is_approx_equal(F64 x, F64 y)
109{
110 const S64 COMPARE_MANTISSA_UP_TO_BIT = 0x02;
111 return (abs((S32) ((U64&)x - (U64&)y) ) < COMPARE_MANTISSA_UP_TO_BIT);
112}
113
102inline BOOL is_approx_equal_fraction(F32 x, F32 y, U32 frac_bits) 114inline BOOL is_approx_equal_fraction(F32 x, F32 y, U32 frac_bits)
103{ 115{
104 BOOL ret = TRUE; 116 BOOL ret = TRUE;
@@ -120,6 +132,27 @@ inline BOOL is_approx_equal_fraction(F32 x, F32 y, U32 frac_bits)
120 return ret; 132 return ret;
121} 133}
122 134
135inline BOOL is_approx_equal_fraction(F64 x, F64 y, U32 frac_bits)
136{
137 BOOL ret = TRUE;
138 F64 diff = (F64) fabs(x - y);
139
140 S32 diffInt = (S32) diff;
141 S32 diffFracTolerance = (S32) ((diff - (F64) diffInt) * (1 << frac_bits));
142
143 // if integer portion is not equal, not enough bits were used for packing
144 // so error out since either the use case is not correct OR there is
145 // an issue with pack/unpack. should fail in either case.
146 // for decimal portion, make sure that the delta is no more than 1
147 // based on the number of bits used for packing decimal portion.
148 if (diffInt != 0 || diffFracTolerance > 1)
149 {
150 ret = FALSE;
151 }
152
153 return ret;
154}
155
123inline S32 llabs(const S32 a) 156inline S32 llabs(const S32 a)
124{ 157{
125 return S32(labs(a)); 158 return S32(labs(a));
diff --git a/linden/indra/llmath/llmath.vcproj b/linden/indra/llmath/llmath.vcproj
index 79e472a..d05505e 100644
--- a/linden/indra/llmath/llmath.vcproj
+++ b/linden/indra/llmath/llmath.vcproj
@@ -164,6 +164,9 @@
164 RelativePath=".\llcrc.cpp"> 164 RelativePath=".\llcrc.cpp">
165 </File> 165 </File>
166 <File 166 <File
167 RelativePath=".\llline.cpp">
168 </File>
169 <File
167 RelativePath=".\llmd5.cpp"> 170 RelativePath=".\llmd5.cpp">
168 </File> 171 </File>
169 <File 172 <File
@@ -179,6 +182,9 @@
179 RelativePath=".\llrect.cpp"> 182 RelativePath=".\llrect.cpp">
180 </File> 183 </File>
181 <File 184 <File
185 RelativePath=".\llsphere.cpp">
186 </File>
187 <File
182 RelativePath=".\lluuid.cpp"> 188 RelativePath=".\lluuid.cpp">
183 </File> 189 </File>
184 <File 190 <File
@@ -244,6 +250,9 @@
244 RelativePath=".\llinterp.h"> 250 RelativePath=".\llinterp.h">
245 </File> 251 </File>
246 <File 252 <File
253 RelativePath=".\llline.h">
254 </File>
255 <File
247 RelativePath=".\llmath.h"> 256 RelativePath=".\llmath.h">
248 </File> 257 </File>
249 <File 258 <File
@@ -268,6 +277,9 @@
268 RelativePath=".\llrect.h"> 277 RelativePath=".\llrect.h">
269 </File> 278 </File>
270 <File 279 <File
280 RelativePath=".\llsphere.h">
281 </File>
282 <File
271 RelativePath=".\lltreenode.h"> 283 RelativePath=".\lltreenode.h">
272 </File> 284 </File>
273 <File 285 <File
diff --git a/linden/indra/llmath/llquaternion.cpp b/linden/indra/llmath/llquaternion.cpp
index ea51e28..ab4855b 100644
--- a/linden/indra/llmath/llquaternion.cpp
+++ b/linden/indra/llmath/llquaternion.cpp
@@ -51,19 +51,19 @@ const LLQuaternion LLQuaternion::DEFAULT;
51LLQuaternion::LLQuaternion(const LLMatrix4 &mat) 51LLQuaternion::LLQuaternion(const LLMatrix4 &mat)
52{ 52{
53 *this = mat.quaternion(); 53 *this = mat.quaternion();
54 normQuat(); 54 normalize();
55} 55}
56 56
57LLQuaternion::LLQuaternion(const LLMatrix3 &mat) 57LLQuaternion::LLQuaternion(const LLMatrix3 &mat)
58{ 58{
59 *this = mat.quaternion(); 59 *this = mat.quaternion();
60 normQuat(); 60 normalize();
61} 61}
62 62
63LLQuaternion::LLQuaternion(F32 angle, const LLVector4 &vec) 63LLQuaternion::LLQuaternion(F32 angle, const LLVector4 &vec)
64{ 64{
65 LLVector3 v(vec.mV[VX], vec.mV[VY], vec.mV[VZ]); 65 LLVector3 v(vec.mV[VX], vec.mV[VY], vec.mV[VZ]);
66 v.normVec(); 66 v.normalize();
67 67
68 F32 c, s; 68 F32 c, s;
69 c = cosf(angle*0.5f); 69 c = cosf(angle*0.5f);
@@ -73,13 +73,13 @@ LLQuaternion::LLQuaternion(F32 angle, const LLVector4 &vec)
73 mQ[VY] = v.mV[VY] * s; 73 mQ[VY] = v.mV[VY] * s;
74 mQ[VZ] = v.mV[VZ] * s; 74 mQ[VZ] = v.mV[VZ] * s;
75 mQ[VW] = c; 75 mQ[VW] = c;
76 normQuat(); 76 normalize();
77} 77}
78 78
79LLQuaternion::LLQuaternion(F32 angle, const LLVector3 &vec) 79LLQuaternion::LLQuaternion(F32 angle, const LLVector3 &vec)
80{ 80{
81 LLVector3 v(vec); 81 LLVector3 v(vec);
82 v.normVec(); 82 v.normalize();
83 83
84 F32 c, s; 84 F32 c, s;
85 c = cosf(angle*0.5f); 85 c = cosf(angle*0.5f);
@@ -89,7 +89,7 @@ LLQuaternion::LLQuaternion(F32 angle, const LLVector3 &vec)
89 mQ[VY] = v.mV[VY] * s; 89 mQ[VY] = v.mV[VY] * s;
90 mQ[VZ] = v.mV[VZ] * s; 90 mQ[VZ] = v.mV[VZ] * s;
91 mQ[VW] = c; 91 mQ[VW] = c;
92 normQuat(); 92 normalize();
93} 93}
94 94
95LLQuaternion::LLQuaternion(const LLVector3 &x_axis, 95LLQuaternion::LLQuaternion(const LLVector3 &x_axis,
@@ -99,7 +99,7 @@ LLQuaternion::LLQuaternion(const LLVector3 &x_axis,
99 LLMatrix3 mat; 99 LLMatrix3 mat;
100 mat.setRows(x_axis, y_axis, z_axis); 100 mat.setRows(x_axis, y_axis, z_axis);
101 *this = mat.quaternion(); 101 *this = mat.quaternion();
102 normQuat(); 102 normalize();
103} 103}
104 104
105// Quatizations 105// Quatizations
@@ -138,10 +138,93 @@ void LLQuaternion::quantize8(F32 lower, F32 upper)
138 138
139// Set LLQuaternion routines 139// Set LLQuaternion routines
140 140
141const LLQuaternion& LLQuaternion::setAngleAxis(F32 angle, F32 x, F32 y, F32 z)
142{
143 LLVector3 vec(x, y, z);
144 vec.normalize();
145
146 angle *= 0.5f;
147 F32 c, s;
148 c = cosf(angle);
149 s = sinf(angle);
150
151 mQ[VX] = vec.mV[VX]*s;
152 mQ[VY] = vec.mV[VY]*s;
153 mQ[VZ] = vec.mV[VZ]*s;
154 mQ[VW] = c;
155
156 normalize();
157 return (*this);
158}
159
160const LLQuaternion& LLQuaternion::setAngleAxis(F32 angle, const LLVector3 &vec)
161{
162 LLVector3 v(vec);
163 v.normalize();
164
165 angle *= 0.5f;
166 F32 c, s;
167 c = cosf(angle);
168 s = sinf(angle);
169
170 mQ[VX] = v.mV[VX]*s;
171 mQ[VY] = v.mV[VY]*s;
172 mQ[VZ] = v.mV[VZ]*s;
173 mQ[VW] = c;
174
175 normalize();
176 return (*this);
177}
178
179const LLQuaternion& LLQuaternion::setAngleAxis(F32 angle, const LLVector4 &vec)
180{
181 LLVector3 v(vec.mV[VX], vec.mV[VY], vec.mV[VZ]);
182 v.normalize();
183
184 F32 c, s;
185 c = cosf(angle*0.5f);
186 s = sinf(angle*0.5f);
187
188 mQ[VX] = v.mV[VX]*s;
189 mQ[VY] = v.mV[VY]*s;
190 mQ[VZ] = v.mV[VZ]*s;
191 mQ[VW] = c;
192
193 normalize();
194 return (*this);
195}
196
197const LLQuaternion& LLQuaternion::setEulerAngles(F32 roll, F32 pitch, F32 yaw)
198{
199 LLMatrix3 rot_mat(roll, pitch, yaw);
200 rot_mat.orthogonalize();
201 *this = rot_mat.quaternion();
202
203 normalize();
204 return (*this);
205}
206
207// deprecated
208const LLQuaternion& LLQuaternion::set(const LLMatrix3 &mat)
209{
210 *this = mat.quaternion();
211 normalize();
212 return (*this);
213}
214
215// deprecated
216const LLQuaternion& LLQuaternion::set(const LLMatrix4 &mat)
217{
218 *this = mat.quaternion();
219 normalize();
220 return (*this);
221}
222
223// deprecated
141const LLQuaternion& LLQuaternion::setQuat(F32 angle, F32 x, F32 y, F32 z) 224const LLQuaternion& LLQuaternion::setQuat(F32 angle, F32 x, F32 y, F32 z)
142{ 225{
143 LLVector3 vec(x, y, z); 226 LLVector3 vec(x, y, z);
144 vec.normVec(); 227 vec.normalize();
145 228
146 angle *= 0.5f; 229 angle *= 0.5f;
147 F32 c, s; 230 F32 c, s;
@@ -153,14 +236,15 @@ const LLQuaternion& LLQuaternion::setQuat(F32 angle, F32 x, F32 y, F32 z)
153 mQ[VZ] = vec.mV[VZ]*s; 236 mQ[VZ] = vec.mV[VZ]*s;
154 mQ[VW] = c; 237 mQ[VW] = c;
155 238
156 normQuat(); 239 normalize();
157 return (*this); 240 return (*this);
158} 241}
159 242
243// deprecated
160const LLQuaternion& LLQuaternion::setQuat(F32 angle, const LLVector3 &vec) 244const LLQuaternion& LLQuaternion::setQuat(F32 angle, const LLVector3 &vec)
161{ 245{
162 LLVector3 v(vec); 246 LLVector3 v(vec);
163 v.normVec(); 247 v.normalize();
164 248
165 angle *= 0.5f; 249 angle *= 0.5f;
166 F32 c, s; 250 F32 c, s;
@@ -172,14 +256,14 @@ const LLQuaternion& LLQuaternion::setQuat(F32 angle, const LLVector3 &vec)
172 mQ[VZ] = v.mV[VZ]*s; 256 mQ[VZ] = v.mV[VZ]*s;
173 mQ[VW] = c; 257 mQ[VW] = c;
174 258
175 normQuat(); 259 normalize();
176 return (*this); 260 return (*this);
177} 261}
178 262
179const LLQuaternion& LLQuaternion::setQuat(F32 angle, const LLVector4 &vec) 263const LLQuaternion& LLQuaternion::setQuat(F32 angle, const LLVector4 &vec)
180{ 264{
181 LLVector3 v(vec.mV[VX], vec.mV[VY], vec.mV[VZ]); 265 LLVector3 v(vec.mV[VX], vec.mV[VY], vec.mV[VZ]);
182 v.normVec(); 266 v.normalize();
183 267
184 F32 c, s; 268 F32 c, s;
185 c = cosf(angle*0.5f); 269 c = cosf(angle*0.5f);
@@ -190,7 +274,7 @@ const LLQuaternion& LLQuaternion::setQuat(F32 angle, const LLVector4 &vec)
190 mQ[VZ] = v.mV[VZ]*s; 274 mQ[VZ] = v.mV[VZ]*s;
191 mQ[VW] = c; 275 mQ[VW] = c;
192 276
193 normQuat(); 277 normalize();
194 return (*this); 278 return (*this);
195} 279}
196 280
@@ -200,7 +284,21 @@ const LLQuaternion& LLQuaternion::setQuat(F32 roll, F32 pitch, F32 yaw)
200 rot_mat.orthogonalize(); 284 rot_mat.orthogonalize();
201 *this = rot_mat.quaternion(); 285 *this = rot_mat.quaternion();
202 286
203 normQuat(); 287 normalize();
288 return (*this);
289}
290
291const LLQuaternion& LLQuaternion::setQuat(const LLMatrix3 &mat)
292{
293 *this = mat.quaternion();
294 normalize();
295 return (*this);
296}
297
298const LLQuaternion& LLQuaternion::setQuat(const LLMatrix4 &mat)
299{
300 *this = mat.quaternion();
301 normalize();
204 return (*this); 302 return (*this);
205//#if 1 303//#if 1
206// // NOTE: LLQuaternion's are actually inverted with respect to 304// // NOTE: LLQuaternion's are actually inverted with respect to
@@ -337,8 +435,8 @@ void LLQuaternion::shortestArc(const LLVector3 &a, const LLVector3 &b)
337 435
338 // Make sure neither vector is zero length. Also normalize 436 // Make sure neither vector is zero length. Also normalize
339 // the vectors while we are at it. 437 // the vectors while we are at it.
340 F32 vec_a_mag = vec_a.normVec(); 438 F32 vec_a_mag = vec_a.normalize();
341 F32 vec_b_mag = vec_b.normVec(); 439 F32 vec_b_mag = vec_b.normalize();
342 if (vec_a_mag < F_APPROXIMATELY_ZERO || 440 if (vec_a_mag < F_APPROXIMATELY_ZERO ||
343 vec_b_mag < F_APPROXIMATELY_ZERO) 441 vec_b_mag < F_APPROXIMATELY_ZERO)
344 { 442 {
@@ -370,7 +468,7 @@ void LLQuaternion::shortestArc(const LLVector3 &a, const LLVector3 &b)
370 ortho_axis -= proj; 468 ortho_axis -= proj;
371 469
372 // Turn this into an orthonormal axis. 470 // Turn this into an orthonormal axis.
373 F32 ortho_length = ortho_axis.normVec(); 471 F32 ortho_length = ortho_axis.normalize();
374 // If the axis' length is 0, then our guess at an orthogonal axis 472 // If the axis' length is 0, then our guess at an orthogonal axis
375 // was wrong (a is parallel to the x-axis). 473 // was wrong (a is parallel to the x-axis).
376 if (ortho_length < F_APPROXIMATELY_ZERO) 474 if (ortho_length < F_APPROXIMATELY_ZERO)
@@ -391,7 +489,7 @@ void LLQuaternion::shortestArc(const LLVector3 &a, const LLVector3 &b)
391 // Return the rotation between these vectors. 489 // Return the rotation between these vectors.
392 F32 theta = (F32)acos(cos_theta); 490 F32 theta = (F32)acos(cos_theta);
393 491
394 setQuat(theta, axis); 492 setAngleAxis(theta, axis);
395 } 493 }
396} 494}
397 495
@@ -516,7 +614,7 @@ LLQuaternion lerp(F32 t, const LLQuaternion &p, const LLQuaternion &q)
516{ 614{
517 LLQuaternion r; 615 LLQuaternion r;
518 r = t * (q - p) + p; 616 r = t * (q - p) + p;
519 r.normQuat(); 617 r.normalize();
520 return r; 618 return r;
521} 619}
522#endif 620#endif
@@ -529,7 +627,7 @@ LLQuaternion lerp(F32 t, const LLQuaternion &q)
529 r.mQ[VY] = t * q.mQ[VY]; 627 r.mQ[VY] = t * q.mQ[VY];
530 r.mQ[VZ] = t * q.mQ[VZ]; 628 r.mQ[VZ] = t * q.mQ[VZ];
531 r.mQ[VW] = t * (q.mQ[VZ] - 1.f) + 1.f; 629 r.mQ[VW] = t * (q.mQ[VZ] - 1.f) + 1.f;
532 r.normQuat(); 630 r.normalize();
533 return r; 631 return r;
534} 632}
535 633
@@ -544,7 +642,7 @@ LLQuaternion lerp(F32 t, const LLQuaternion &p, const LLQuaternion &q)
544 r.mQ[VY] = t * q.mQ[VY] + (inv_t * p.mQ[VY]); 642 r.mQ[VY] = t * q.mQ[VY] + (inv_t * p.mQ[VY]);
545 r.mQ[VZ] = t * q.mQ[VZ] + (inv_t * p.mQ[VZ]); 643 r.mQ[VZ] = t * q.mQ[VZ] + (inv_t * p.mQ[VZ]);
546 r.mQ[VW] = t * q.mQ[VW] + (inv_t * p.mQ[VW]); 644 r.mQ[VW] = t * q.mQ[VW] + (inv_t * p.mQ[VW]);
547 r.normQuat(); 645 r.normalize();
548 return r; 646 return r;
549} 647}
550 648
@@ -640,8 +738,8 @@ LLQuaternion slerp(F32 t, const LLQuaternion &q)
640 // when c < 0.0 then theta > PI/2 738 // when c < 0.0 then theta > PI/2
641 // since quat and -quat are the same rotation we invert one of 739 // since quat and -quat are the same rotation we invert one of
642 // p or q to reduce unecessary spins 740 // p or q to reduce unecessary spins
643 // A equivalent way to do it is to convert acos(c) as if it had been negative, 741 // A equivalent way to do it is to convert acos(c) as if it had
644 // and to negate stp 742 // been negative, and to negate stp
645 angle = (F32) acos(-c); 743 angle = (F32) acos(-c);
646 stp = -(F32) sin(angle * (1.f - t)); 744 stp = -(F32) sin(angle * (1.f - t));
647 stq = (F32) sin(angle * t); 745 stq = (F32) sin(angle * t);
@@ -742,20 +840,6 @@ LLQuaternion::Order StringToOrder( const char *str )
742 return LLQuaternion::XYZ; 840 return LLQuaternion::XYZ;
743} 841}
744 842
745const LLQuaternion& LLQuaternion::setQuat(const LLMatrix3 &mat)
746{
747 *this = mat.quaternion();
748 normQuat();
749 return (*this);
750}
751
752const LLQuaternion& LLQuaternion::setQuat(const LLMatrix4 &mat)
753{
754 *this = mat.quaternion();
755 normQuat();
756 return (*this);
757}
758
759void LLQuaternion::getAngleAxis(F32* angle, LLVector3 &vec) const 843void LLQuaternion::getAngleAxis(F32* angle, LLVector3 &vec) const
760{ 844{
761 F32 cos_a = mQ[VW]; 845 F32 cos_a = mQ[VW];
@@ -769,10 +853,28 @@ void LLQuaternion::getAngleAxis(F32* angle, LLVector3 &vec) const
769 else 853 else
770 sin_a = 1.f/sin_a; 854 sin_a = 1.f/sin_a;
771 855
772 *angle = 2.0f * (F32) acos( cos_a ); 856 F32 temp_angle = 2.0f * (F32) acos( cos_a );
773 vec.mV[VX] = mQ[VX] * sin_a; 857 if (temp_angle > F_PI)
774 vec.mV[VY] = mQ[VY] * sin_a; 858 {
775 vec.mV[VZ] = mQ[VZ] * sin_a; 859 // The (angle,axis) pair should never have angles outside [PI, -PI]
860 // since we want the _shortest_ (angle,axis) solution.
861 // Since acos is defined for [0, PI], and we multiply by 2.0, we
862 // can push the angle outside the acceptible range.
863 // When this happens we set the angle to the other portion of a
864 // full 2PI rotation, and negate the axis, which reverses the
865 // direction of the rotation (by the right-hand rule).
866 *angle = 2.f * F_PI - temp_angle;
867 vec.mV[VX] = - mQ[VX] * sin_a;
868 vec.mV[VY] = - mQ[VY] * sin_a;
869 vec.mV[VZ] = - mQ[VZ] * sin_a;
870 }
871 else
872 {
873 *angle = temp_angle;
874 vec.mV[VX] = mQ[VX] * sin_a;
875 vec.mV[VY] = mQ[VY] * sin_a;
876 vec.mV[VZ] = mQ[VZ] * sin_a;
877 }
776} 878}
777 879
778 880
@@ -846,7 +948,7 @@ BOOL LLQuaternion::parseQuat(const char* buf, LLQuaternion* value)
846 S32 count = sscanf( buf, "%f %f %f %f", quat.mQ + 0, quat.mQ + 1, quat.mQ + 2, quat.mQ + 3 ); 948 S32 count = sscanf( buf, "%f %f %f %f", quat.mQ + 0, quat.mQ + 1, quat.mQ + 2, quat.mQ + 3 );
847 if( 4 == count ) 949 if( 4 == count )
848 { 950 {
849 value->setQuat( quat ); 951 value->set( quat );
850 return TRUE; 952 return TRUE;
851 } 953 }
852 954
diff --git a/linden/indra/llmath/llquaternion.h b/linden/indra/llmath/llquaternion.h
index 6805437..048db2d 100644
--- a/linden/indra/llmath/llquaternion.h
+++ b/linden/indra/llmath/llquaternion.h
@@ -57,10 +57,10 @@ public:
57 LLQuaternion(); // Initializes Quaternion to (0,0,0,1) 57 LLQuaternion(); // Initializes Quaternion to (0,0,0,1)
58 explicit LLQuaternion(const LLMatrix4 &mat); // Initializes Quaternion from Matrix4 58 explicit LLQuaternion(const LLMatrix4 &mat); // Initializes Quaternion from Matrix4
59 explicit LLQuaternion(const LLMatrix3 &mat); // Initializes Quaternion from Matrix3 59 explicit LLQuaternion(const LLMatrix3 &mat); // Initializes Quaternion from Matrix3
60 LLQuaternion(F32 x, F32 y, F32 z, F32 w); // Initializes Quaternion to normQuat(x, y, z, w) 60 LLQuaternion(F32 x, F32 y, F32 z, F32 w); // Initializes Quaternion to normalize(x, y, z, w)
61 LLQuaternion(F32 angle, const LLVector4 &vec); // Initializes Quaternion to axis_angle2quat(angle, vec) 61 LLQuaternion(F32 angle, const LLVector4 &vec); // Initializes Quaternion to axis_angle2quat(angle, vec)
62 LLQuaternion(F32 angle, const LLVector3 &vec); // Initializes Quaternion to axis_angle2quat(angle, vec) 62 LLQuaternion(F32 angle, const LLVector3 &vec); // Initializes Quaternion to axis_angle2quat(angle, vec)
63 LLQuaternion(const F32 *q); // Initializes Quaternion to normQuat(x, y, z, w) 63 LLQuaternion(const F32 *q); // Initializes Quaternion to normalize(x, y, z, w)
64 LLQuaternion(const LLVector3 &x_axis, 64 LLQuaternion(const LLVector3 &x_axis,
65 const LLVector3 &y_axis, 65 const LLVector3 &y_axis,
66 const LLVector3 &z_axis); // Initializes Quaternion from Matrix3 = [x_axis ; y_axis ; z_axis] 66 const LLVector3 &z_axis); // Initializes Quaternion from Matrix3 = [x_axis ; y_axis ; z_axis]
@@ -71,15 +71,27 @@ public:
71 void quantize16(F32 lower, F32 upper); // changes the vector to reflect quatization 71 void quantize16(F32 lower, F32 upper); // changes the vector to reflect quatization
72 void quantize8(F32 lower, F32 upper); // changes the vector to reflect quatization 72 void quantize8(F32 lower, F32 upper); // changes the vector to reflect quatization
73 void loadIdentity(); // Loads the quaternion that represents the identity rotation 73 void loadIdentity(); // Loads the quaternion that represents the identity rotation
74 const LLQuaternion& setQuatInit(F32 x, F32 y, F32 z, F32 w); // Sets Quaternion to normQuat(x, y, z, w) 74
75 const LLQuaternion& setQuat(const LLQuaternion &quat); // Copies Quaternion 75 const LLQuaternion& set(F32 x, F32 y, F32 z, F32 w); // Sets Quaternion to normalize(x, y, z, w)
76 const LLQuaternion& setQuat(const F32 *q); // Sets Quaternion to normQuat(quat[VX], quat[VY], quat[VZ], quat[VW]) 76 const LLQuaternion& set(const LLQuaternion &quat); // Copies Quaternion
77 const LLQuaternion& setQuat(const LLMatrix3 &mat); // Sets Quaternion to mat2quat(mat) 77 const LLQuaternion& set(const F32 *q); // Sets Quaternion to normalize(quat[VX], quat[VY], quat[VZ], quat[VW])
78 const LLQuaternion& setQuat(const LLMatrix4 &mat); // Sets Quaternion to mat2quat(mat) 78 const LLQuaternion& set(const LLMatrix3 &mat); // Sets Quaternion to mat2quat(mat)
79 const LLQuaternion& setQuat(F32 angle, F32 x, F32 y, F32 z); // Sets Quaternion to axis_angle2quat(angle, x, y, z) 79 const LLQuaternion& set(const LLMatrix4 &mat); // Sets Quaternion to mat2quat(mat)
80 const LLQuaternion& setQuat(F32 angle, const LLVector3 &vec); // Sets Quaternion to axis_angle2quat(angle, vec) 80
81 const LLQuaternion& setQuat(F32 angle, const LLVector4 &vec); // Sets Quaternion to axis_angle2quat(angle, vec) 81 const LLQuaternion& setAngleAxis(F32 angle, F32 x, F32 y, F32 z); // Sets Quaternion to axis_angle2quat(angle, x, y, z)
82 const LLQuaternion& setQuat(F32 roll, F32 pitch, F32 yaw); // Sets Quaternion to euler2quat(pitch, yaw, roll) 82 const LLQuaternion& setAngleAxis(F32 angle, const LLVector3 &vec); // Sets Quaternion to axis_angle2quat(angle, vec)
83 const LLQuaternion& setAngleAxis(F32 angle, const LLVector4 &vec); // Sets Quaternion to axis_angle2quat(angle, vec)
84 const LLQuaternion& setEulerAngles(F32 roll, F32 pitch, F32 yaw); // Sets Quaternion to euler2quat(pitch, yaw, roll)
85
86 const LLQuaternion& setQuatInit(F32 x, F32 y, F32 z, F32 w); // deprecated
87 const LLQuaternion& setQuat(const LLQuaternion &quat); // deprecated
88 const LLQuaternion& setQuat(const F32 *q); // deprecated
89 const LLQuaternion& setQuat(const LLMatrix3 &mat); // deprecated
90 const LLQuaternion& setQuat(const LLMatrix4 &mat); // deprecated
91 const LLQuaternion& setQuat(F32 angle, F32 x, F32 y, F32 z); // deprecated
92 const LLQuaternion& setQuat(F32 angle, const LLVector3 &vec); // deprecated
93 const LLQuaternion& setQuat(F32 angle, const LLVector4 &vec); // deprecated
94 const LLQuaternion& setQuat(F32 roll, F32 pitch, F32 yaw); // deprecated
83 95
84 LLMatrix4 getMatrix4(void) const; // Returns the Matrix4 equivalent of Quaternion 96 LLMatrix4 getMatrix4(void) const; // Returns the Matrix4 equivalent of Quaternion
85 LLMatrix3 getMatrix3(void) const; // Returns the Matrix3 equivalent of Quaternion 97 LLMatrix3 getMatrix3(void) const; // Returns the Matrix3 equivalent of Quaternion
@@ -87,11 +99,16 @@ public:
87 void getAngleAxis(F32* angle, LLVector3 &vec) const; 99 void getAngleAxis(F32* angle, LLVector3 &vec) const;
88 void getEulerAngles(F32 *roll, F32* pitch, F32 *yaw) const; 100 void getEulerAngles(F32 *roll, F32* pitch, F32 *yaw) const;
89 101
90 F32 normQuat(); // Normalizes Quaternion and returns magnitude 102 F32 normalize(); // Normalizes Quaternion and returns magnitude
91 const LLQuaternion& conjQuat(void); // Conjugates Quaternion and returns result 103 F32 normQuat(); // deprecated
104
105 const LLQuaternion& conjugate(void); // Conjugates Quaternion and returns result
106 const LLQuaternion& conjQuat(void); // deprecated
92 107
93 // Other useful methods 108 // Other useful methods
94 const LLQuaternion& transQuat(); // Transpose 109 const LLQuaternion& transpose(); // transpose (same as conjugate)
110 const LLQuaternion& transQuat(); // deprecated
111
95 void shortestArc(const LLVector3 &a, const LLVector3 &b); // shortest rotation from a to b 112 void shortestArc(const LLVector3 &a, const LLVector3 &b); // shortest rotation from a to b
96 const LLQuaternion& constrain(F32 radians); // constrains rotation to a cone angle specified in radians 113 const LLQuaternion& constrain(F32 radians); // constrains rotation to a cone angle specified in radians
97 114
@@ -189,7 +206,7 @@ inline LLQuaternion::LLQuaternion(F32 x, F32 y, F32 z, F32 w)
189 mQ[VS] = w; 206 mQ[VS] = w;
190 207
191 //RN: don't normalize this case as its used mainly for temporaries during calculations 208 //RN: don't normalize this case as its used mainly for temporaries during calculations
192 //normQuat(); 209 //normalize();
193 /* 210 /*
194 F32 mag = sqrtf(mQ[VX]*mQ[VX] + mQ[VY]*mQ[VY] + mQ[VZ]*mQ[VZ] + mQ[VS]*mQ[VS]); 211 F32 mag = sqrtf(mQ[VX]*mQ[VX] + mQ[VY]*mQ[VY] + mQ[VZ]*mQ[VZ] + mQ[VS]*mQ[VS]);
195 mag -= 1.f; 212 mag -= 1.f;
@@ -205,7 +222,7 @@ inline LLQuaternion::LLQuaternion(const F32 *q)
205 mQ[VZ] = q[VZ]; 222 mQ[VZ] = q[VZ];
206 mQ[VS] = q[VW]; 223 mQ[VS] = q[VW];
207 224
208 normQuat(); 225 normalize();
209 /* 226 /*
210 F32 mag = sqrtf(mQ[VX]*mQ[VX] + mQ[VY]*mQ[VY] + mQ[VZ]*mQ[VZ] + mQ[VS]*mQ[VS]); 227 F32 mag = sqrtf(mQ[VX]*mQ[VX] + mQ[VY]*mQ[VY] + mQ[VZ]*mQ[VZ] + mQ[VS]*mQ[VS]);
211 mag -= 1.f; 228 mag -= 1.f;
@@ -224,33 +241,67 @@ inline void LLQuaternion::loadIdentity()
224} 241}
225 242
226 243
244inline const LLQuaternion& LLQuaternion::set(F32 x, F32 y, F32 z, F32 w)
245{
246 mQ[VX] = x;
247 mQ[VY] = y;
248 mQ[VZ] = z;
249 mQ[VS] = w;
250 normalize();
251 return (*this);
252}
253
254inline const LLQuaternion& LLQuaternion::set(const LLQuaternion &quat)
255{
256 mQ[VX] = quat.mQ[VX];
257 mQ[VY] = quat.mQ[VY];
258 mQ[VZ] = quat.mQ[VZ];
259 mQ[VW] = quat.mQ[VW];
260 normalize();
261 return (*this);
262}
263
264inline const LLQuaternion& LLQuaternion::set(const F32 *q)
265{
266 mQ[VX] = q[VX];
267 mQ[VY] = q[VY];
268 mQ[VZ] = q[VZ];
269 mQ[VS] = q[VW];
270 normalize();
271 return (*this);
272}
273
274
275// deprecated
227inline const LLQuaternion& LLQuaternion::setQuatInit(F32 x, F32 y, F32 z, F32 w) 276inline const LLQuaternion& LLQuaternion::setQuatInit(F32 x, F32 y, F32 z, F32 w)
228{ 277{
229 mQ[VX] = x; 278 mQ[VX] = x;
230 mQ[VY] = y; 279 mQ[VY] = y;
231 mQ[VZ] = z; 280 mQ[VZ] = z;
232 mQ[VS] = w; 281 mQ[VS] = w;
233 normQuat(); 282 normalize();
234 return (*this); 283 return (*this);
235} 284}
236 285
286// deprecated
237inline const LLQuaternion& LLQuaternion::setQuat(const LLQuaternion &quat) 287inline const LLQuaternion& LLQuaternion::setQuat(const LLQuaternion &quat)
238{ 288{
239 mQ[VX] = quat.mQ[VX]; 289 mQ[VX] = quat.mQ[VX];
240 mQ[VY] = quat.mQ[VY]; 290 mQ[VY] = quat.mQ[VY];
241 mQ[VZ] = quat.mQ[VZ]; 291 mQ[VZ] = quat.mQ[VZ];
242 mQ[VW] = quat.mQ[VW]; 292 mQ[VW] = quat.mQ[VW];
243 normQuat(); 293 normalize();
244 return (*this); 294 return (*this);
245} 295}
246 296
297// deprecated
247inline const LLQuaternion& LLQuaternion::setQuat(const F32 *q) 298inline const LLQuaternion& LLQuaternion::setQuat(const F32 *q)
248{ 299{
249 mQ[VX] = q[VX]; 300 mQ[VX] = q[VX];
250 mQ[VY] = q[VY]; 301 mQ[VY] = q[VY];
251 mQ[VZ] = q[VZ]; 302 mQ[VZ] = q[VZ];
252 mQ[VS] = q[VW]; 303 mQ[VS] = q[VW];
253 normQuat(); 304 normalize();
254 return (*this); 305 return (*this);
255} 306}
256 307
@@ -270,10 +321,36 @@ inline void LLQuaternion::getAngleAxis(F32* angle, F32* x, F32* y, F32* z) const
270 else 321 else
271 sin_a = 1.f/sin_a; 322 sin_a = 1.f/sin_a;
272 323
273 *angle = 2.0f * (F32) acos( cos_a ); 324 F32 temp_angle = 2.0f * (F32) acos( cos_a );
274 *x = mQ[VX] * sin_a; 325 if (temp_angle > F_PI)
275 *y = mQ[VY] * sin_a; 326 {
276 *z = mQ[VZ] * sin_a; 327 // The (angle,axis) pair should never have angles outside [PI, -PI]
328 // since we want the _shortest_ (angle,axis) solution.
329 // Since acos is defined for [0, PI], and we multiply by 2.0, we
330 // can push the angle outside the acceptible range.
331 // When this happens we set the angle to the other portion of a
332 // full 2PI rotation, and negate the axis, which reverses the
333 // direction of the rotation (by the right-hand rule).
334 *angle = 2.f * F_PI - temp_angle;
335 *x = - mQ[VX] * sin_a;
336 *y = - mQ[VY] * sin_a;
337 *z = - mQ[VZ] * sin_a;
338 }
339 else
340 {
341 *angle = temp_angle;
342 *x = mQ[VX] * sin_a;
343 *y = mQ[VY] * sin_a;
344 *z = mQ[VZ] * sin_a;
345 }
346}
347
348inline const LLQuaternion& LLQuaternion::conjugate()
349{
350 mQ[VX] *= -1.f;
351 mQ[VY] *= -1.f;
352 mQ[VZ] *= -1.f;
353 return (*this);
277} 354}
278 355
279inline const LLQuaternion& LLQuaternion::conjQuat() 356inline const LLQuaternion& LLQuaternion::conjQuat()
@@ -285,12 +362,21 @@ inline const LLQuaternion& LLQuaternion::conjQuat()
285} 362}
286 363
287// Transpose 364// Transpose
365inline const LLQuaternion& LLQuaternion::transpose()
366{
367 mQ[VX] *= -1.f;
368 mQ[VY] *= -1.f;
369 mQ[VZ] *= -1.f;
370 return (*this);
371}
372
373// deprecated
288inline const LLQuaternion& LLQuaternion::transQuat() 374inline const LLQuaternion& LLQuaternion::transQuat()
289{ 375{
290 mQ[VX] = -mQ[VX]; 376 mQ[VX] *= -1.f;
291 mQ[VY] = -mQ[VY]; 377 mQ[VY] *= -1.f;
292 mQ[VZ] = -mQ[VZ]; 378 mQ[VZ] *= -1.f;
293 return *this; 379 return (*this);
294} 380}
295 381
296 382
@@ -382,6 +468,30 @@ inline const LLQuaternion& operator*=(LLQuaternion &a, const LLQuaternion &b)
382 return a; 468 return a;
383} 469}
384 470
471inline F32 LLQuaternion::normalize()
472{
473 F32 mag = sqrtf(mQ[VX]*mQ[VX] + mQ[VY]*mQ[VY] + mQ[VZ]*mQ[VZ] + mQ[VS]*mQ[VS]);
474
475 if (mag > FP_MAG_THRESHOLD)
476 {
477 F32 oomag = 1.f/mag;
478 mQ[VX] *= oomag;
479 mQ[VY] *= oomag;
480 mQ[VZ] *= oomag;
481 mQ[VS] *= oomag;
482 }
483 else
484 {
485 mQ[VX] = 0.f;
486 mQ[VY] = 0.f;
487 mQ[VZ] = 0.f;
488 mQ[VS] = 1.f;
489 }
490
491 return mag;
492}
493
494// deprecated
385inline F32 LLQuaternion::normQuat() 495inline F32 LLQuaternion::normQuat()
386{ 496{
387 F32 mag = sqrtf(mQ[VX]*mQ[VX] + mQ[VY]*mQ[VY] + mQ[VZ]*mQ[VZ] + mQ[VS]*mQ[VS]); 497 F32 mag = sqrtf(mQ[VX]*mQ[VX] + mQ[VY]*mQ[VY] + mQ[VZ]*mQ[VZ] + mQ[VS]*mQ[VS]);
diff --git a/linden/indra/llmath/llrect.h b/linden/indra/llmath/llrect.h
index 9aadf9f..f2a5d75 100644
--- a/linden/indra/llmath/llrect.h
+++ b/linden/indra/llmath/llrect.h
@@ -227,6 +227,11 @@ public:
227 return mLeft == mRight || mBottom == mTop; 227 return mLeft == mRight || mBottom == mTop;
228 } 228 }
229 229
230 bool notNull() const
231 {
232 return !isNull();
233 }
234
230 LLRectBase& unionWith(const LLRectBase &other) 235 LLRectBase& unionWith(const LLRectBase &other)
231 { 236 {
232 mLeft = llmin(mLeft, other.mLeft); 237 mLeft = llmin(mLeft, other.mLeft);
diff --git a/linden/indra/llmath/llsphere.cpp b/linden/indra/llmath/llsphere.cpp
new file mode 100644
index 0000000..62f6e27
--- /dev/null
+++ b/linden/indra/llmath/llsphere.cpp
@@ -0,0 +1,364 @@
1/**
2 * @file llsphere.cpp
3 * @author Andrew Meadows
4 * @brief Simple line class that can compute nearest approach between two lines
5 *
6 * $LicenseInfo:firstyear=2006&license=internal$
7 *
8 * Copyright (c) 2006-2008, Linden Research, Inc.
9 *
10 * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
11 * this source code is governed by the Linden Lab Source Code Disclosure
12 * Agreement ("Agreement") previously entered between you and Linden
13 * Lab. By accessing, using, copying, modifying or distributing this
14 * software, you acknowledge that you have been informed of your
15 * obligations under the Agreement and agree to abide by those obligations.
16 *
17 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
18 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
19 * COMPLETENESS OR PERFORMANCE.
20 * $/LicenseInfo$
21 */
22
23#include "llsphere.h"
24
25LLSphere::LLSphere()
26: mCenter(0.f, 0.f, 0.f),
27 mRadius(0.f)
28{ }
29
30LLSphere::LLSphere( const LLVector3& center, F32 radius)
31{
32 set(center, radius);
33}
34
35void LLSphere::set( const LLVector3& center, F32 radius )
36{
37 mCenter = center;
38 setRadius(radius);
39}
40
41void LLSphere::setCenter( const LLVector3& center)
42{
43 mCenter = center;
44}
45
46void LLSphere::setRadius( F32 radius)
47{
48 if (radius < 0.f)
49 {
50 radius = -radius;
51 }
52 mRadius = radius;
53}
54
55const LLVector3& LLSphere::getCenter() const
56{
57 return mCenter;
58}
59
60F32 LLSphere::getRadius() const
61{
62 return mRadius;
63}
64
65// returns 'TRUE' if this sphere completely contains other_sphere
66BOOL LLSphere::contains(const LLSphere& other_sphere) const
67{
68 F32 separation = (mCenter - other_sphere.mCenter).length();
69 return (mRadius >= separation + other_sphere.mRadius) ? TRUE : FALSE;
70}
71
72// returns 'TRUE' if this sphere completely contains other_sphere
73BOOL LLSphere::overlaps(const LLSphere& other_sphere) const
74{
75 F32 separation = (mCenter - other_sphere.mCenter).length();
76 return (separation <= mRadius + other_sphere.mRadius) ? TRUE : FALSE;
77}
78
79// returns overlap
80// negative overlap is closest approach
81F32 LLSphere::getOverlap(const LLSphere& other_sphere) const
82{
83 // separation is distance from other_sphere's edge and this center
84 return (mCenter - other_sphere.mCenter).length() - mRadius - other_sphere.mRadius;
85}
86
87bool LLSphere::operator==(const LLSphere& rhs) const
88{
89 // TODO? -- use approximate equality for centers?
90 return (mRadius == rhs.mRadius
91 && mCenter == rhs.mCenter);
92}
93
94std::ostream& operator<<( std::ostream& output_stream, const LLSphere& sphere)
95{
96 output_stream << "{center=" << sphere.mCenter << "," << "radius=" << sphere.mRadius << "}";
97 return output_stream;
98}
99
100// static
101// removes any spheres that are contained in others
102void LLSphere::collapse(std::vector<LLSphere>& sphere_list)
103{
104 std::vector<LLSphere>::iterator first_itr = sphere_list.begin();
105 while (first_itr != sphere_list.end())
106 {
107 bool delete_from_front = false;
108
109 std::vector<LLSphere>::iterator second_itr = first_itr;
110 ++second_itr;
111 while (second_itr != sphere_list.end())
112 {
113 if (second_itr->contains(*first_itr))
114 {
115 delete_from_front = true;
116 break;
117 }
118 else if (first_itr->contains(*second_itr))
119 {
120 sphere_list.erase(second_itr++);
121 }
122 else
123 {
124 ++second_itr;
125 }
126 }
127
128 if (delete_from_front)
129 {
130 sphere_list.erase(first_itr++);
131 }
132 else
133 {
134 ++first_itr;
135 }
136 }
137}
138
139// static
140// returns the bounding sphere that contains both spheres
141LLSphere LLSphere::getBoundingSphere(const LLSphere& first_sphere, const LLSphere& second_sphere)
142{
143 LLVector3 direction = second_sphere.mCenter - first_sphere.mCenter;
144
145 // HACK -- it is possible to get enough floating point error in the
146 // other getBoundingSphere() method that we have to add some slop
147 // at the end. Unfortunately, this breaks the link-order invarience
148 // for the linkability tests... unless we also apply the same slop
149 // here.
150 F32 half_milimeter = 0.0005f;
151
152 F32 distance = direction.length();
153 if (0.f == distance)
154 {
155 direction.setVec(1.f, 0.f, 0.f);
156 }
157 else
158 {
159 direction.normVec();
160 }
161 // the 'edge' is measured from the first_sphere's center
162 F32 max_edge = 0.f;
163 F32 min_edge = 0.f;
164
165 max_edge = llmax(max_edge + first_sphere.getRadius(), max_edge + distance + second_sphere.getRadius() + half_milimeter);
166 min_edge = llmin(min_edge - first_sphere.getRadius(), min_edge + distance - second_sphere.getRadius() - half_milimeter);
167 F32 radius = 0.5f * (max_edge - min_edge);
168 LLVector3 center = first_sphere.mCenter + (0.5f * (max_edge + min_edge)) * direction;
169 return LLSphere(center, radius);
170}
171
172// static
173// returns the bounding sphere that contains an arbitrary set of spheres
174LLSphere LLSphere::getBoundingSphere(const std::vector<LLSphere>& sphere_list)
175{
176 // this algorithm can get relatively inaccurate when the sphere
177 // collection is 'small' (contained within a bounding sphere of about
178 // 2 meters or less)
179 // TODO -- improve the accuracy for small collections of spheres
180
181 LLSphere bounding_sphere( LLVector3(0.f, 0.f, 0.f), 0.f );
182 S32 sphere_count = sphere_list.size();
183 if (1 == sphere_count)
184 {
185 // trivial case -- single sphere
186 std::vector<LLSphere>::const_iterator sphere_itr = sphere_list.begin();
187 bounding_sphere = *sphere_itr;
188 }
189 else if (2 == sphere_count)
190 {
191 // trivial case -- two spheres
192 std::vector<LLSphere>::const_iterator first_sphere = sphere_list.begin();
193 std::vector<LLSphere>::const_iterator second_sphere = first_sphere;
194 ++second_sphere;
195 bounding_sphere = LLSphere::getBoundingSphere(*first_sphere, *second_sphere);
196 }
197 else if (sphere_count > 0)
198 {
199 // non-trivial case -- we will approximate the solution
200 //
201 // NOTE -- there is a fancy/fast way to do this for large
202 // numbers of arbirary N-dimensional spheres -- you can look it
203 // up on the net. We're dealing with 3D spheres at collection
204 // sizes of 256 spheres or smaller, so we just use this
205 // brute force method.
206
207 // TODO -- perhaps would be worthwile to test for the solution where
208 // the largest spanning radius just happens to work. That is, where
209 // there are really two spheres that determine the bounding sphere,
210 // and all others are contained therein.
211
212 // compute the AABB
213 std::vector<LLSphere>::const_iterator first_itr = sphere_list.begin();
214 LLVector3 max_corner = first_itr->getCenter() + first_itr->getRadius() * LLVector3(1.f, 1.f, 1.f);
215 LLVector3 min_corner = first_itr->getCenter() - first_itr->getRadius() * LLVector3(1.f, 1.f, 1.f);
216 {
217 std::vector<LLSphere>::const_iterator sphere_itr = sphere_list.begin();
218 for (++sphere_itr; sphere_itr != sphere_list.end(); ++sphere_itr)
219 {
220 LLVector3 center = sphere_itr->getCenter();
221 F32 radius = sphere_itr->getRadius();
222 for (S32 i=0; i<3; ++i)
223 {
224 if (center.mV[i] + radius > max_corner.mV[i])
225 {
226 max_corner.mV[i] = center.mV[i] + radius;
227 }
228 if (center.mV[i] - radius < min_corner.mV[i])
229 {
230 min_corner.mV[i] = center.mV[i] - radius;
231 }
232 }
233 }
234 }
235
236 // get the starting center and radius from the AABB
237 LLVector3 diagonal = max_corner - min_corner;
238 F32 bounding_radius = 0.5f * diagonal.length();
239 LLVector3 bounding_center = 0.5f * (max_corner + min_corner);
240
241 // compute the starting step-size
242 F32 minimum_radius = 0.5f * llmin(diagonal.mV[VX], llmin(diagonal.mV[VY], diagonal.mV[VZ]));
243 F32 step_length = bounding_radius - minimum_radius;
244 S32 step_count = 0;
245 S32 max_step_count = 12;
246 F32 half_milimeter = 0.0005f;
247
248 // wander the center around in search of tighter solutions
249 S32 last_dx = 2; // 2 is out of bounds --> no match
250 S32 last_dy = 2;
251 S32 last_dz = 2;
252
253 while (step_length > half_milimeter
254 && step_count < max_step_count)
255 {
256 // the algorithm for testing the maximum radius could be expensive enough
257 // that it makes sense to NOT duplicate testing when possible, so we keep
258 // track of where we last tested, and only test the new points
259
260 S32 best_dx = 0;
261 S32 best_dy = 0;
262 S32 best_dz = 0;
263
264 // sample near the center of the box
265 bool found_better_center = false;
266 for (S32 dx = -1; dx < 2; ++dx)
267 {
268 for (S32 dy = -1; dy < 2; ++dy)
269 {
270 for (S32 dz = -1; dz < 2; ++dz)
271 {
272 if (dx == 0 && dy == 0 && dz == 0)
273 {
274 continue;
275 }
276
277 // count the number of indecies that match the last_*'s
278 S32 match_count = 0;
279 if (last_dx == dx) ++match_count;
280 if (last_dy == dy) ++match_count;
281 if (last_dz == dz) ++match_count;
282 if (match_count == 2)
283 {
284 // we've already tested this point
285 continue;
286 }
287
288 LLVector3 center = bounding_center;
289 center.mV[VX] += (F32) dx * step_length;
290 center.mV[VY] += (F32) dy * step_length;
291 center.mV[VZ] += (F32) dz * step_length;
292
293 // compute the radius of the bounding sphere
294 F32 max_radius = 0.f;
295 std::vector<LLSphere>::const_iterator sphere_itr;
296 for (sphere_itr = sphere_list.begin(); sphere_itr != sphere_list.end(); ++sphere_itr)
297 {
298 F32 radius = (sphere_itr->getCenter() - center).length() + sphere_itr->getRadius();
299 if (radius > max_radius)
300 {
301 max_radius = radius;
302 }
303 }
304 if (max_radius < bounding_radius)
305 {
306 best_dx = dx;
307 best_dy = dy;
308 best_dz = dz;
309 bounding_center = center;
310 bounding_radius = max_radius;
311 found_better_center = true;
312 }
313 }
314 }
315 }
316 if (found_better_center)
317 {
318 // remember where we came from so we can avoid retesting
319 last_dx = -best_dx;
320 last_dy = -best_dy;
321 last_dz = -best_dz;
322 }
323 else
324 {
325 // reduce the step size
326 step_length *= 0.5f;
327 //++step_count;
328 // reset the last_*'s
329 last_dx = 2; // 2 is out of bounds --> no match
330 last_dy = 2;
331 last_dz = 2;
332 }
333 }
334
335 // HACK -- it is possible to get enough floating point error for the
336 // bounding sphere to too small on the order of 10e-6, but we only need
337 // it to be accurate to within about half a millimeter
338 bounding_radius += half_milimeter;
339
340 // this algorithm can get relatively inaccurate when the sphere
341 // collection is 'small' (contained within a bounding sphere of about
342 // 2 meters or less)
343 // TODO -- fix this
344 /* debug code
345 {
346 std::vector<LLSphere>::const_iterator sphere_itr;
347 for (sphere_itr = sphere_list.begin(); sphere_itr != sphere_list.end(); ++sphere_itr)
348 {
349 F32 radius = (sphere_itr->getCenter() - bounding_center).length() + sphere_itr->getRadius();
350 if (radius + 0.1f > bounding_radius)
351 {
352 std::cout << " rad = " << radius << " bounding - rad = " << (bounding_radius - radius) << std::endl;
353 }
354 }
355 std::cout << "\n" << std::endl;
356 }
357 */
358
359 bounding_sphere.set(bounding_center, bounding_radius);
360 }
361 return bounding_sphere;
362}
363
364
diff --git a/linden/indra/llmath/llsphere.h b/linden/indra/llmath/llsphere.h
new file mode 100644
index 0000000..4d7cd7a
--- /dev/null
+++ b/linden/indra/llmath/llsphere.h
@@ -0,0 +1,72 @@
1// llsphere.h
2/**
3 * @file llsphere.cpp
4 * @author Andrew Meadows
5 * @brief Simple sphere implementation for basic geometric operations
6 *
7 * $LicenseInfo:firstyear=2001&license=internal$
8 *
9 * Copyright (c) 2001-2008, Linden Research, Inc.
10 *
11 * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
12 * this source code is governed by the Linden Lab Source Code Disclosure
13 * Agreement ("Agreement") previously entered between you and Linden
14 * Lab. By accessing, using, copying, modifying or distributing this
15 * software, you acknowledge that you have been informed of your
16 * obligations under the Agreement and agree to abide by those obligations.
17 *
18 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
19 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
20 * COMPLETENESS OR PERFORMANCE.
21 * $/LicenseInfo$
22 */
23
24#ifndef LL_SPHERE_H
25#define LL_SPHERE_H
26
27#include "stdtypes.h"
28#include "v3math.h"
29#include <iostream>
30#include <vector>
31
32class LLSphere
33{
34public:
35 LLSphere();
36 LLSphere( const LLVector3& center, F32 radius );
37
38 void set( const LLVector3& center, F32 radius );
39 void setCenter( const LLVector3& center );
40 void setRadius( F32 radius );
41
42 const LLVector3& getCenter() const;
43 F32 getRadius() const;
44
45 // returns TRUE if this sphere completely contains other_sphere
46 BOOL contains(const LLSphere& other_sphere) const;
47
48 // returns TRUE if this sphere overlaps other_sphere
49 BOOL overlaps(const LLSphere& other_sphere) const;
50
51 // returns overlap distance
52 // negative overlap is closest approach
53 F32 getOverlap(const LLSphere& other_sphere) const;
54
55 // removes any spheres that are contained in others
56 static void collapse(std::vector<LLSphere>& sphere_list);
57
58 // returns minimum sphere bounding sphere for a set of spheres
59 static LLSphere getBoundingSphere(const LLSphere& first_sphere, const LLSphere& second_sphere);
60 static LLSphere getBoundingSphere(const std::vector<LLSphere>& sphere_list);
61
62 bool operator==(const LLSphere& rhs) const;
63
64 friend std::ostream& operator<<( std::ostream& output_stream, const LLSphere& line );
65
66protected:
67 LLVector3 mCenter;
68 F32 mRadius;
69};
70
71
72#endif
diff --git a/linden/indra/llmath/lluuid.cpp b/linden/indra/llmath/lluuid.cpp
index db9e869..d835cbc 100644
--- a/linden/indra/llmath/lluuid.cpp
+++ b/linden/indra/llmath/lluuid.cpp
@@ -867,6 +867,11 @@ void LLUUID::generate()
867 time_last = timestamp; 867 time_last = timestamp;
868} 868}
869 869
870void LLUUID::generate(std::string hash_string)
871{
872 LLMD5 md5_uuid((U8*)hash_string.c_str());
873 md5_uuid.raw_digest(mData);
874}
870 875
871U32 LLUUID::getRandomSeed() 876U32 LLUUID::getRandomSeed()
872{ 877{
diff --git a/linden/indra/llmath/lluuid.h b/linden/indra/llmath/lluuid.h
index 190b772..48308f2 100644
--- a/linden/indra/llmath/lluuid.h
+++ b/linden/indra/llmath/lluuid.h
@@ -64,6 +64,7 @@ public:
64 // MANIPULATORS 64 // MANIPULATORS
65 // 65 //
66 void generate(); // Generate a new UUID 66 void generate(); // Generate a new UUID
67 void generate(std::string stream); //Generate a new UUID based on hash of input stream
67 BOOL set(const char *in_string, BOOL emit = TRUE); // Convert from string, if emit is FALSE, do not emit warnings 68 BOOL set(const char *in_string, BOOL emit = TRUE); // Convert from string, if emit is FALSE, do not emit warnings
68 BOOL set(const std::string& in_string, BOOL emit = TRUE); // Convert from string, if emit is FALSE, do not emit warnings 69 BOOL set(const std::string& in_string, BOOL emit = TRUE); // Convert from string, if emit is FALSE, do not emit warnings
69 void setNull(); // Faster than setting to LLUUID::null. 70 void setNull(); // Faster than setting to LLUUID::null.
diff --git a/linden/indra/llmath/llvolume.cpp b/linden/indra/llmath/llvolume.cpp
index 4f1c260..9c19220 100644
--- a/linden/indra/llmath/llvolume.cpp
+++ b/linden/indra/llmath/llvolume.cpp
@@ -1858,9 +1858,6 @@ inline U32 sculpt_xy_to_index(U32 x, U32 y, U16 sculpt_width, U16 sculpt_height,
1858{ 1858{
1859 U32 index = (x + y * sculpt_width) * sculpt_components; 1859 U32 index = (x + y * sculpt_width) * sculpt_components;
1860 1860
1861 // attempt to resolve DEV-11158 - remove assert later.
1862 //llassert(index < sculpt_width * sculpt_height * sculpt_components);
1863
1864 return index; 1861 return index;
1865} 1862}
1866 1863
@@ -2513,12 +2510,19 @@ bool LLVolumeParams::validate(U8 prof_curve, F32 prof_begin, F32 prof_end, F32 h
2513 return true; 2510 return true;
2514} 2511}
2515 2512
2516#define MAX_INDEX 10000
2517S32 *LLVolume::getTriangleIndices(U32 &num_indices) const 2513S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
2518{ 2514{
2519 S32 index[MAX_INDEX]; 2515 S32 expected_num_triangle_indices = getNumTriangleIndices();
2516 if (expected_num_triangle_indices > MAX_VOLUME_TRIANGLE_INDICES)
2517 {
2518 // we don't allow LLVolumes with this many vertices
2519 llwarns << "Couldn't allocate triangle indices" << llendl;
2520 num_indices = 0;
2521 return NULL;
2522 }
2523
2524 S32* index = new S32[expected_num_triangle_indices];
2520 S32 count = 0; 2525 S32 count = 0;
2521 S32 *indices = NULL;
2522 2526
2523 // Let's do this totally diffently, as we don't care about faces... 2527 // Let's do this totally diffently, as we don't care about faces...
2524 // Counter-clockwise triangles are forward facing... 2528 // Counter-clockwise triangles are forward facing...
@@ -2532,6 +2536,9 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
2532 size_s_out = getProfile().getTotalOut(); 2536 size_s_out = getProfile().getTotalOut();
2533 size_t = getPath().mPath.size(); 2537 size_t = getPath().mPath.size();
2534 2538
2539 // NOTE -- if the construction of the triangles below ever changes
2540 // then getNumTriangleIndices() method may also have to be updated.
2541
2535 if (open) /* Flawfinder: ignore */ 2542 if (open) /* Flawfinder: ignore */
2536 { 2543 {
2537 if (hollow) 2544 if (hollow)
@@ -2539,9 +2546,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
2539 // Open hollow -- much like the closed solid, except we 2546 // Open hollow -- much like the closed solid, except we
2540 // we need to stitch up the gap between s=0 and s=size_s-1 2547 // we need to stitch up the gap between s=0 and s=size_s-1
2541 2548
2542 if ( (size_t - 1) * (((size_s -1) * 6) + 6) >= MAX_INDEX)
2543 goto noindices;
2544
2545 for (t = 0; t < size_t - 1; t++) 2549 for (t = 0; t < size_t - 1; t++)
2546 { 2550 {
2547 // The outer face, first cut, and inner face 2551 // The outer face, first cut, and inner face
@@ -2655,8 +2659,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
2655 2659
2656 if (use_tri1a2) 2660 if (use_tri1a2)
2657 { 2661 {
2658 if (count + 3 >= MAX_INDEX)
2659 goto noindices;
2660 index[count++] = pt1 + i; 2662 index[count++] = pt1 + i;
2661 index[count++] = pt1 + 1 + i; 2663 index[count++] = pt1 + 1 + i;
2662 index[count++] = pt2 + i; 2664 index[count++] = pt2 + i;
@@ -2664,8 +2666,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
2664 } 2666 }
2665 else 2667 else
2666 { 2668 {
2667 if (count + 3 >= MAX_INDEX)
2668 goto noindices;
2669 index[count++] = pt1 + i; 2669 index[count++] = pt1 + i;
2670 index[count++] = pt2 - 1 + i; 2670 index[count++] = pt2 - 1 + i;
2671 index[count++] = pt2 + i; 2671 index[count++] = pt2 + i;
@@ -2756,8 +2756,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
2756 2756
2757 if (use_tri1a2) 2757 if (use_tri1a2)
2758 { 2758 {
2759 if (count + 3 >= MAX_INDEX)
2760 goto noindices;
2761 index[count++] = pt1; 2759 index[count++] = pt1;
2762 index[count++] = pt2; 2760 index[count++] = pt2;
2763 index[count++] = pt1 + 1; 2761 index[count++] = pt1 + 1;
@@ -2765,8 +2763,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
2765 } 2763 }
2766 else 2764 else
2767 { 2765 {
2768 if (count + 3 >= MAX_INDEX)
2769 goto noindices;
2770 index[count++] = pt1; 2766 index[count++] = pt1;
2771 index[count++] = pt2; 2767 index[count++] = pt2;
2772 index[count++] = pt2 - 1; 2768 index[count++] = pt2 - 1;
@@ -2779,9 +2775,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
2779 { 2775 {
2780 // Open solid 2776 // Open solid
2781 2777
2782 if ( (size_t - 1) * (((size_s -1) * 6) + 6) >= MAX_INDEX)
2783 goto noindices;
2784
2785 for (t = 0; t < size_t - 1; t++) 2778 for (t = 0; t < size_t - 1; t++)
2786 { 2779 {
2787 // Outer face + 1 cut face 2780 // Outer face + 1 cut face
@@ -2811,8 +2804,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
2811 // Do the top and bottom caps, if necessary 2804 // Do the top and bottom caps, if necessary
2812 if (path_open) 2805 if (path_open)
2813 { 2806 {
2814 if ( count + (size_s - 2) * 3 >= MAX_INDEX)
2815 goto noindices;
2816 for (s = 0; s < size_s - 2; s++) 2807 for (s = 0; s < size_s - 2; s++)
2817 { 2808 {
2818 index[count++] = s+1; 2809 index[count++] = s+1;
@@ -2822,8 +2813,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
2822 2813
2823 // We've got a top cap 2814 // We've got a top cap
2824 S32 offset = (size_t - 1)*size_s; 2815 S32 offset = (size_t - 1)*size_s;
2825 if ( count + (size_s - 2) * 3 >= MAX_INDEX)
2826 goto noindices;
2827 for (s = 0; s < size_s - 2; s++) 2816 for (s = 0; s < size_s - 2; s++)
2828 { 2817 {
2829 // Inverted ordering from bottom cap. 2818 // Inverted ordering from bottom cap.
@@ -2839,8 +2828,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
2839 // Closed hollow 2828 // Closed hollow
2840 // Outer face 2829 // Outer face
2841 2830
2842 if ( (size_t - 1) * (size_s_out - 1) * 6 >= MAX_INDEX)
2843 goto noindices;
2844 for (t = 0; t < size_t - 1; t++) 2831 for (t = 0; t < size_t - 1; t++)
2845 { 2832 {
2846 for (s = 0; s < size_s_out - 1; s++) 2833 for (s = 0; s < size_s_out - 1; s++)
@@ -2859,8 +2846,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
2859 2846
2860 // Inner face 2847 // Inner face
2861 // Invert facing from outer face 2848 // Invert facing from outer face
2862 if ( count + (size_t - 1) * ((size_s - 1) - size_s_out) * 6 >= MAX_INDEX)
2863 goto noindices;
2864 for (t = 0; t < size_t - 1; t++) 2849 for (t = 0; t < size_t - 1; t++)
2865 { 2850 {
2866 for (s = size_s_out; s < size_s - 1; s++) 2851 for (s = size_s_out; s < size_s - 1; s++)
@@ -2965,8 +2950,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
2965 2950
2966 if (use_tri1a2) 2951 if (use_tri1a2)
2967 { 2952 {
2968 if (count + 3 >= MAX_INDEX)
2969 goto noindices;
2970 index[count++] = pt1 + i; 2953 index[count++] = pt1 + i;
2971 index[count++] = pt1 + 1 + i; 2954 index[count++] = pt1 + 1 + i;
2972 index[count++] = pt2 + i; 2955 index[count++] = pt2 + i;
@@ -2974,8 +2957,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
2974 } 2957 }
2975 else 2958 else
2976 { 2959 {
2977 if (count + 3 >= MAX_INDEX)
2978 goto noindices;
2979 index[count++] = pt1 + i; 2960 index[count++] = pt1 + i;
2980 index[count++] = pt2 - 1 + i; 2961 index[count++] = pt2 - 1 + i;
2981 index[count++] = pt2 + i; 2962 index[count++] = pt2 + i;
@@ -3066,8 +3047,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
3066 3047
3067 if (use_tri1a2) 3048 if (use_tri1a2)
3068 { 3049 {
3069 if (count + 3 >= MAX_INDEX)
3070 goto noindices;
3071 index[count++] = pt1; 3050 index[count++] = pt1;
3072 index[count++] = pt2; 3051 index[count++] = pt2;
3073 index[count++] = pt1 + 1; 3052 index[count++] = pt1 + 1;
@@ -3075,8 +3054,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
3075 } 3054 }
3076 else 3055 else
3077 { 3056 {
3078 if (count + 3 >= MAX_INDEX)
3079 goto noindices;
3080 index[count++] = pt1; 3057 index[count++] = pt1;
3081 index[count++] = pt2; 3058 index[count++] = pt2;
3082 index[count++] = pt2 - 1; 3059 index[count++] = pt2 - 1;
@@ -3088,8 +3065,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
3088 else 3065 else
3089 { 3066 {
3090 // Closed solid. Easy case. 3067 // Closed solid. Easy case.
3091 if ( (size_t - 1) * (size_s - 1) * 6 > MAX_INDEX)
3092 goto noindices;
3093 for (t = 0; t < size_t - 1; t++) 3068 for (t = 0; t < size_t - 1; t++)
3094 { 3069 {
3095 for (s = 0; s < size_s - 1; s++) 3070 for (s = 0; s < size_s - 1; s++)
@@ -3111,8 +3086,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
3111 if (path_open) 3086 if (path_open)
3112 { 3087 {
3113 // bottom cap 3088 // bottom cap
3114 if ( count + (size_s - 2 - 1) * 3 >= MAX_INDEX)
3115 goto noindices;
3116 for (s = 1; s < size_s - 2; s++) 3089 for (s = 1; s < size_s - 2; s++)
3117 { 3090 {
3118 index[count++] = s+1; 3091 index[count++] = s+1;
@@ -3122,8 +3095,6 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
3122 3095
3123 // top cap 3096 // top cap
3124 S32 offset = (size_t - 1)*size_s; 3097 S32 offset = (size_t - 1)*size_s;
3125 if ( count + (size_s - 2 - 1) * 3 >= MAX_INDEX)
3126 goto noindices;
3127 for (s = 1; s < size_s - 2; s++) 3098 for (s = 1; s < size_s - 2; s++)
3128 { 3099 {
3129 // Inverted ordering from bottom cap. 3100 // Inverted ordering from bottom cap.
@@ -3134,7 +3105,18 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
3134 } 3105 }
3135 } 3106 }
3136 3107
3108#ifdef LL_DEBUG
3109 // assert that we computed the correct number of indices
3110 if (count != expected_num_triangle_indices )
3111 {
3112 llerrs << "bad index count prediciton:"
3113 << " expected=" << expected_num_triangle_indices
3114 << " actual=" << count << llendl;
3115 }
3116#endif
3117
3137#if 0 3118#if 0
3119 // verify that each index does not point beyond the size of the mesh
3138 S32 num_vertices = mMesh.size(); 3120 S32 num_vertices = mMesh.size();
3139 for (i = 0; i < count; i+=3) 3121 for (i = 0; i < count; i+=3)
3140 { 3122 {
@@ -3145,17 +3127,65 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const
3145 } 3127 }
3146#endif 3128#endif
3147 3129
3148 indices = new S32[count]; 3130 num_indices = count;
3149noindices: 3131 return index;
3150 if (!indices) 3132}
3133
3134S32 LLVolume::getNumTriangleIndices() const
3135{
3136 BOOL profile_open = getProfile().isOpen();
3137 BOOL hollow = getProfile().isHollow();
3138 BOOL path_open = getPath().isOpen();
3139
3140 S32 size_s, size_s_out, size_t;
3141 size_s = getProfile().getTotal();
3142 size_s_out = getProfile().getTotalOut();
3143 size_t = getPath().mPath.size();
3144
3145 S32 count = 0;
3146 if (profile_open) /* Flawfinder: ignore */
3151 { 3147 {
3152 llwarns << "Couldn't allocate triangle indices" << llendl; 3148 if (hollow)
3153 num_indices = 0; 3149 {
3154 return NULL; 3150 // Open hollow -- much like the closed solid, except we
3151 // we need to stitch up the gap between s=0 and s=size_s-1
3152 count = (size_t - 1) * (((size_s -1) * 6) + 6);
3153 }
3154 else
3155 {
3156 count = (size_t - 1) * (((size_s -1) * 6) + 6);
3157 }
3155 } 3158 }
3156 num_indices = count; 3159 else if (hollow)
3157 memcpy(indices, index, count * sizeof(S32)); /* Flawfinder: ignore */ 3160 {
3158 return indices; 3161 // Closed hollow
3162 // Outer face
3163 count = (size_t - 1) * (size_s_out - 1) * 6;
3164
3165 // Inner face
3166 count += (size_t - 1) * ((size_s - 1) - size_s_out) * 6;
3167 }
3168 else
3169 {
3170 // Closed solid. Easy case.
3171 count = (size_t - 1) * (size_s - 1) * 6;
3172 }
3173
3174 if (path_open)
3175 {
3176 S32 cap_triangle_count = size_s - 3;
3177 if ( profile_open
3178 || hollow )
3179 {
3180 cap_triangle_count = size_s - 2;
3181 }
3182 if ( cap_triangle_count > 0 )
3183 {
3184 // top and bottom caps
3185 count += cap_triangle_count * 2 * 3;
3186 }
3187 }
3188 return count;
3159} 3189}
3160 3190
3161//----------------------------------------------------------------------------- 3191//-----------------------------------------------------------------------------
@@ -3486,7 +3516,7 @@ struct lessTriangle
3486 3516
3487BOOL equalTriangle(const S32 *a, const S32 *b) 3517BOOL equalTriangle(const S32 *a, const S32 *b)
3488{ 3518{
3489 if ((*a == *b) && (*(a+1) == *(b+1)) && ((*a+2) == (*b+2))) 3519 if ((*a == *b) && (*(a+1) == *(b+1)) && (*(a+2) == *(b+2)))
3490 { 3520 {
3491 return TRUE; 3521 return TRUE;
3492 } 3522 }
@@ -3502,6 +3532,21 @@ BOOL LLVolume::cleanupTriangleData( const S32 num_input_vertices,
3502 S32 &num_output_triangles, 3532 S32 &num_output_triangles,
3503 S32 **output_triangles) 3533 S32 **output_triangles)
3504{ 3534{
3535 /* Testing: avoid any cleanup
3536 num_output_vertices = num_input_vertices;
3537 num_output_triangles = num_input_triangles;
3538
3539 *output_vertices = new LLVector3[num_input_vertices];
3540 for (S32 i = 0; i < num_input_vertices; i++)
3541 {
3542 (*output_vertices)[i] = input_vertices[i].mPos;
3543 }
3544
3545 *output_triangles = new S32[num_input_triangles*3];
3546 memcpy(*output_triangles, input_triangles, 3*num_input_triangles*sizeof(S32)); // Flawfinder: ignore
3547 return TRUE;
3548 */
3549
3505 // Here's how we do this: 3550 // Here's how we do this:
3506 // Create a structure which contains the original vertex index and the 3551 // Create a structure which contains the original vertex index and the
3507 // LLVector3 data. 3552 // LLVector3 data.
@@ -3552,7 +3597,7 @@ BOOL LLVolume::cleanupTriangleData( const S32 num_input_vertices,
3552 } 3597 }
3553 else 3598 else
3554 { 3599 {
3555 //llinfos << "Removed duplicate vertex " << pairp->mVertex << llendl; 3600 //llinfos << "Removed duplicate vertex " << pairp->mVertex << ", distance magVecSquared() is " << (pairp->mVertex - prev_pairp->mVertex).magVecSquared() << llendl;
3556 } 3601 }
3557 vertex_mapping[pairp->mIndex] = new_num_vertices - 1; 3602 vertex_mapping[pairp->mIndex] = new_num_vertices - 1;
3558 } 3603 }
@@ -3564,50 +3609,54 @@ BOOL LLVolume::cleanupTriangleData( const S32 num_input_vertices,
3564 3609
3565 for (i = 0; i < num_input_triangles; i++) 3610 for (i = 0; i < num_input_triangles; i++)
3566 { 3611 {
3567 //llinfos << "Checking triangle " << input_triangles[i*3] << ":" << input_triangles[i*3+1] << ":" << input_triangles[i*3+2] << llendl; 3612 S32 v1 = i*3;
3568 input_triangles[i*3] = vertex_mapping[input_triangles[i*3]]; 3613 S32 v2 = i*3 + 1;
3569 input_triangles[i*3+1] = vertex_mapping[input_triangles[i*3+1]]; 3614 S32 v3 = i*3 + 2;
3570 input_triangles[i*3+2] = vertex_mapping[input_triangles[i*3+2]]; 3615
3616 //llinfos << "Checking triangle " << input_triangles[v1] << ":" << input_triangles[v2] << ":" << input_triangles[v3] << llendl;
3617 input_triangles[v1] = vertex_mapping[input_triangles[v1]];
3618 input_triangles[v2] = vertex_mapping[input_triangles[v2]];
3619 input_triangles[v3] = vertex_mapping[input_triangles[v3]];
3571 3620
3572 if ((input_triangles[i*3] == input_triangles[i*3+1]) 3621 if ((input_triangles[v1] == input_triangles[v2])
3573 || (input_triangles[i*3] == input_triangles[i*3+2]) 3622 || (input_triangles[v1] == input_triangles[v3])
3574 || (input_triangles[i*3+1] == input_triangles[i*3+2])) 3623 || (input_triangles[v2] == input_triangles[v3]))
3575 { 3624 {
3576 //llinfos << "Removing degenerate triangle " << input_triangles[i*3] << ":" << input_triangles[i*3+1] << ":" << input_triangles[i*3+2] << llendl; 3625 //llinfos << "Removing degenerate triangle " << input_triangles[v1] << ":" << input_triangles[v2] << ":" << input_triangles[v3] << llendl;
3577 // Degenerate triangle, skip 3626 // Degenerate triangle, skip
3578 continue; 3627 continue;
3579 } 3628 }
3580 3629
3581 if (input_triangles[i*3] < input_triangles[i*3+1]) 3630 if (input_triangles[v1] < input_triangles[v2])
3582 { 3631 {
3583 if (input_triangles[i*3] < input_triangles[i*3+2]) 3632 if (input_triangles[v1] < input_triangles[v3])
3584 { 3633 {
3585 // (0 < 1) && (0 < 2) 3634 // (0 < 1) && (0 < 2)
3586 new_triangles[new_num_triangles*3] = input_triangles[i*3]; 3635 new_triangles[new_num_triangles*3] = input_triangles[v1];
3587 new_triangles[new_num_triangles*3+1] = input_triangles[i*3+1]; 3636 new_triangles[new_num_triangles*3+1] = input_triangles[v2];
3588 new_triangles[new_num_triangles*3+2] = input_triangles[i*3+2]; 3637 new_triangles[new_num_triangles*3+2] = input_triangles[v3];
3589 } 3638 }
3590 else 3639 else
3591 { 3640 {
3592 // (0 < 1) && (2 < 0) 3641 // (0 < 1) && (2 < 0)
3593 new_triangles[new_num_triangles*3] = input_triangles[i*3+2]; 3642 new_triangles[new_num_triangles*3] = input_triangles[v3];
3594 new_triangles[new_num_triangles*3+1] = input_triangles[i*3]; 3643 new_triangles[new_num_triangles*3+1] = input_triangles[v1];
3595 new_triangles[new_num_triangles*3+2] = input_triangles[i*3+1]; 3644 new_triangles[new_num_triangles*3+2] = input_triangles[v2];
3596 } 3645 }
3597 } 3646 }
3598 else if (input_triangles[i*3+1] < input_triangles[i*3+2]) 3647 else if (input_triangles[v2] < input_triangles[v3])
3599 { 3648 {
3600 // (1 < 0) && (1 < 2) 3649 // (1 < 0) && (1 < 2)
3601 new_triangles[new_num_triangles*3] = input_triangles[i*3+1]; 3650 new_triangles[new_num_triangles*3] = input_triangles[v2];
3602 new_triangles[new_num_triangles*3+1] = input_triangles[i*3+2]; 3651 new_triangles[new_num_triangles*3+1] = input_triangles[v3];
3603 new_triangles[new_num_triangles*3+2] = input_triangles[i*3]; 3652 new_triangles[new_num_triangles*3+2] = input_triangles[v1];
3604 } 3653 }
3605 else 3654 else
3606 { 3655 {
3607 // (1 < 0) && (2 < 1) 3656 // (1 < 0) && (2 < 1)
3608 new_triangles[new_num_triangles*3] = input_triangles[i*3+2]; 3657 new_triangles[new_num_triangles*3] = input_triangles[v3];
3609 new_triangles[new_num_triangles*3+1] = input_triangles[i*3]; 3658 new_triangles[new_num_triangles*3+1] = input_triangles[v1];
3610 new_triangles[new_num_triangles*3+2] = input_triangles[i*3+1]; 3659 new_triangles[new_num_triangles*3+2] = input_triangles[v2];
3611 } 3660 }
3612 new_num_triangles++; 3661 new_num_triangles++;
3613 } 3662 }
@@ -3848,23 +3897,44 @@ void LLVolumeParams::reduceT(F32 begin, F32 end)
3848 mPathParams.setEnd(a + end * (b - a)); 3897 mPathParams.setEnd(a + end * (b - a));
3849} 3898}
3850 3899
3900const F32 MIN_CONCAVE_PROFILE_WEDGE = 0.125f; // 1/8 unity
3901const F32 MIN_CONCAVE_PATH_WEDGE = 0.111111f; // 1/9 unity
3902
3903// returns TRUE if the shape can be approximated with a convex shape
3904// for collison purposes
3851BOOL LLVolumeParams::isConvex() const 3905BOOL LLVolumeParams::isConvex() const
3852{ 3906{
3853 // The logic for determining convexity is a little convoluted. 3907 F32 path_length = mPathParams.getEnd() - mPathParams.getBegin();
3854 3908
3855 // Do we need to take getTwistBegin into account? DK 08/12/04 3909 if ( mPathParams.getTwist() != mPathParams.getTwistBegin()
3856 if ( mProfileParams.getHollow() != 0.0f 3910 && path_length > MIN_CONCAVE_PATH_WEDGE )
3857 || mPathParams.getTwist() != mPathParams.getTwistBegin() )
3858 { 3911 {
3859 // hollow or twist gaurantees concavity 3912 // twist along a "not too short" path is concave
3860 return FALSE; 3913 return FALSE;
3861 } 3914 }
3862 3915
3863 F32 profile_length = mProfileParams.getEnd() - mProfileParams.getBegin(); 3916 F32 profile_length = mProfileParams.getEnd() - mProfileParams.getBegin();
3864 BOOL concave_profile = (profile_length < 1.0f) && (profile_length > 0.5f); 3917 F32 hollow = mProfileParams.getHollow();
3865 if (concave_profile) 3918 BOOL same_hole = hollow == 0.f
3919 || (mProfileParams.getCurveType() & LL_PCODE_HOLE_MASK) == LL_PCODE_HOLE_SAME;
3920
3921 F32 min_profile_wedge = MIN_CONCAVE_PROFILE_WEDGE;
3922 U8 profile_type = mProfileParams.getCurveType() & LL_PCODE_PROFILE_MASK;
3923 if ( LL_PCODE_PROFILE_CIRCLE_HALF == profile_type )
3866 { 3924 {
3867 // concave profile 3925 // it is a sphere and spheres get twice the minimum profile wedge
3926 min_profile_wedge = 2.f * MIN_CONCAVE_PROFILE_WEDGE;
3927 }
3928
3929 BOOL convex_profile = ( ( profile_length == 1.f
3930 || profile_length <= 0.5f )
3931 && hollow == 0.f ) // trivially convex
3932 || ( profile_length <= min_profile_wedge
3933 && same_hole ); // effectvely convex (even when hollow)
3934
3935 if (!convex_profile)
3936 {
3937 // profile is concave
3868 return FALSE; 3938 return FALSE;
3869 } 3939 }
3870 3940
@@ -3875,7 +3945,6 @@ BOOL LLVolumeParams::isConvex() const
3875 return TRUE; 3945 return TRUE;
3876 } 3946 }
3877 3947
3878 F32 path_length = mPathParams.getEnd() - mPathParams.getBegin();
3879 BOOL concave_path = (path_length < 1.0f) && (path_length > 0.5f); 3948 BOOL concave_path = (path_length < 1.0f) && (path_length > 0.5f);
3880 if (concave_path) 3949 if (concave_path)
3881 { 3950 {
@@ -3883,17 +3952,43 @@ BOOL LLVolumeParams::isConvex() const
3883 } 3952 }
3884 3953
3885 // we're left with spheres, toroids and tubes 3954 // we're left with spheres, toroids and tubes
3886 // only the spheres can be convex
3887 U8 profile_type = mProfileParams.getCurveType() & LL_PCODE_PROFILE_MASK;
3888 if ( LL_PCODE_PROFILE_CIRCLE_HALF == profile_type ) 3955 if ( LL_PCODE_PROFILE_CIRCLE_HALF == profile_type )
3889 { 3956 {
3957 // at this stage all spheres must be convex
3890 return TRUE; 3958 return TRUE;
3891 } 3959 }
3892 3960
3893 // it's a toroid or tube 3961 // it's a toroid or tube
3962 if ( path_length <= MIN_CONCAVE_PATH_WEDGE )
3963 {
3964 // effectively convex
3965 return TRUE;
3966 }
3967
3894 return FALSE; 3968 return FALSE;
3895} 3969}
3896 3970
3971// debug
3972void LLVolumeParams::setCube()
3973{
3974 mProfileParams.setCurveType(LL_PCODE_PROFILE_SQUARE);
3975 mProfileParams.setBegin(0.f);
3976 mProfileParams.setEnd(1.f);
3977 mProfileParams.setHollow(0.f);
3978
3979 mPathParams.setBegin(0.f);
3980 mPathParams.setEnd(1.f);
3981 mPathParams.setScale(1.f, 1.f);
3982 mPathParams.setShear(0.f, 0.f);
3983 mPathParams.setCurveType(LL_PCODE_PATH_LINE);
3984 mPathParams.setTwistBegin(0.f);
3985 mPathParams.setTwistEnd(0.f);
3986 mPathParams.setRadiusOffset(0.f);
3987 mPathParams.setTaper(0.f, 0.f);
3988 mPathParams.setRevolutions(0.f);
3989 mPathParams.setSkew(0.f);
3990}
3991
3897LLFaceID LLVolume::generateFaceMask() 3992LLFaceID LLVolume::generateFaceMask()
3898{ 3993{
3899 LLFaceID new_mask = 0x0000; 3994 LLFaceID new_mask = 0x0000;
diff --git a/linden/indra/llmath/llvolume.h b/linden/indra/llmath/llvolume.h
index 5ec7997..9dbea7a 100644
--- a/linden/indra/llmath/llvolume.h
+++ b/linden/indra/llmath/llvolume.h
@@ -72,6 +72,8 @@ const F32 TAPER_QUANTA = 0.01f;
72const F32 REV_QUANTA = 0.015f; 72const F32 REV_QUANTA = 0.015f;
73const F32 HOLLOW_QUANTA = 0.00002f; 73const F32 HOLLOW_QUANTA = 0.00002f;
74 74
75const S32 MAX_VOLUME_TRIANGLE_INDICES = 10000;
76
75//============================================================================ 77//============================================================================
76 78
77// useful masks 79// useful masks
@@ -187,10 +189,10 @@ class LLProfileParams
187public: 189public:
188 LLProfileParams() 190 LLProfileParams()
189 { 191 {
190 mBegin = 0;
191 mEnd = 1;
192 mHollow = 0;
193 mCurveType = LL_PCODE_PROFILE_SQUARE; 192 mCurveType = LL_PCODE_PROFILE_SQUARE;
193 mBegin = 0.f;
194 mEnd = 1.f;
195 mHollow = 0.f;
194 } 196 }
195 197
196 LLProfileParams(U8 curve, F32 begin, F32 end, F32 hollow) 198 LLProfileParams(U8 curve, F32 begin, F32 end, F32 hollow)
@@ -307,17 +309,17 @@ class LLPathParams
307public: 309public:
308 LLPathParams() 310 LLPathParams()
309 { 311 {
310 mBegin = 0; 312 mBegin = 0.f;
311 mEnd = 1; 313 mEnd = 1.f;
312 mScale.setVec(1,1); 314 mScale.setVec(1.f,1.f);
313 mShear.setVec(0,0); 315 mShear.setVec(0.f,0.f);
314 mCurveType = LL_PCODE_PATH_LINE; 316 mCurveType = LL_PCODE_PATH_LINE;
315 mTwistBegin = 0; 317 mTwistBegin = 0.f;
316 mTwistEnd = 0; 318 mTwistEnd = 0.f;
317 mRadiusOffset = 0; 319 mRadiusOffset = 0.f;
318 mTaper.setVec(0,0); 320 mTaper.setVec(0.f,0.f);
319 mRevolutions = 1; 321 mRevolutions = 1.f;
320 mSkew = 0; 322 mSkew = 0.f;
321 } 323 }
322 324
323 LLPathParams(U8 curve, F32 begin, F32 end, F32 scx, F32 scy, F32 shx, F32 shy, F32 twistend, F32 twistbegin, F32 radiusoffset, F32 tx, F32 ty, F32 revolutions, F32 skew) 325 LLPathParams(U8 curve, F32 begin, F32 end, F32 scx, F32 scy, F32 shx, F32 shy, F32 twistend, F32 twistbegin, F32 radiusoffset, F32 tx, F32 ty, F32 revolutions, F32 skew)
@@ -627,6 +629,9 @@ public:
627 629
628 friend std::ostream& operator<<(std::ostream &s, const LLVolumeParams &volume_params); 630 friend std::ostream& operator<<(std::ostream &s, const LLVolumeParams &volume_params);
629 631
632 // debug helper functions
633 void setCube();
634
630protected: 635protected:
631 LLProfileParams mProfileParams; 636 LLProfileParams mProfileParams;
632 LLPathParams mPathParams; 637 LLPathParams mPathParams;
@@ -869,6 +874,10 @@ public:
869 S32 getSculptLevel() const { return mSculptLevel; } 874 S32 getSculptLevel() const { return mSculptLevel; }
870 875
871 S32 *getTriangleIndices(U32 &num_indices) const; 876 S32 *getTriangleIndices(U32 &num_indices) const;
877
878 // returns number of triangle indeces required for path/profile mesh
879 S32 getNumTriangleIndices() const;
880
872 void generateSilhouetteVertices(std::vector<LLVector3> &vertices, std::vector<LLVector3> &normals, std::vector<S32> &segments, const LLVector3& view_vec, 881 void generateSilhouetteVertices(std::vector<LLVector3> &vertices, std::vector<LLVector3> &normals, std::vector<S32> &segments, const LLVector3& view_vec,
873 const LLMatrix4& mat, 882 const LLMatrix4& mat,
874 const LLMatrix3& norm_mat); 883 const LLMatrix3& norm_mat);
diff --git a/linden/indra/llmath/llvolumemgr.cpp b/linden/indra/llmath/llvolumemgr.cpp
index db99959..d9bca70 100644
--- a/linden/indra/llmath/llvolumemgr.cpp
+++ b/linden/indra/llmath/llvolumemgr.cpp
@@ -36,7 +36,7 @@
36 36
37//#define DEBUG_VOLUME 37//#define DEBUG_VOLUME
38 38
39LLVolumeMgr* gVolumeMgr = 0; 39//LLVolumeMgr* gVolumeMgr = 0;
40 40
41const F32 BASE_THRESHOLD = 0.03f; 41const F32 BASE_THRESHOLD = 0.03f;
42 42
@@ -49,37 +49,23 @@ F32 LLVolumeLODGroup::mDetailThresholds[NUM_LODS] = {BASE_THRESHOLD,
49//static 49//static
50F32 LLVolumeLODGroup::mDetailScales[NUM_LODS] = {1.f, 1.5f, 2.5f, 4.f}; 50F32 LLVolumeLODGroup::mDetailScales[NUM_LODS] = {1.f, 1.5f, 2.5f, 4.f};
51 51
52//============================================================================
53//static
54void LLVolumeMgr::initClass()
55{
56 gVolumeMgr = new LLVolumeMgr();
57}
58
59//static
60BOOL LLVolumeMgr::cleanupClass()
61{
62 BOOL res = FALSE;
63 if (gVolumeMgr) {
64 res = gVolumeMgr->cleanup();
65 delete gVolumeMgr;
66 gVolumeMgr = 0;
67 }
68 return res;
69}
70 52
71//============================================================================ 53//============================================================================
72 54
73LLVolumeMgr::LLVolumeMgr() 55LLVolumeMgr::LLVolumeMgr()
56: mDataMutex(NULL)
74{ 57{
75 mDataMutex = new LLMutex(gAPRPoolp); 58 // the LLMutex magic interferes with easy unit testing,
76// mNumVolumes = 0; 59 // so you now must manually call useMutex() to use it
60 //mDataMutex = new LLMutex(gAPRPoolp);
77} 61}
78 62
79LLVolumeMgr::~LLVolumeMgr() 63LLVolumeMgr::~LLVolumeMgr()
80{ 64{
81 cleanup(); 65 cleanup();
66
82 delete mDataMutex; 67 delete mDataMutex;
68 mDataMutex = NULL;
83} 69}
84 70
85BOOL LLVolumeMgr::cleanup() 71BOOL LLVolumeMgr::cleanup()
@@ -90,7 +76,10 @@ BOOL LLVolumeMgr::cleanup()
90 } 76 }
91 #endif 77 #endif
92 BOOL no_refs = TRUE; 78 BOOL no_refs = TRUE;
93 mDataMutex->lock(); 79 if (mDataMutex)
80 {
81 mDataMutex->lock();
82 }
94 for (volume_lod_group_map_t::iterator iter = mVolumeLODGroups.begin(), 83 for (volume_lod_group_map_t::iterator iter = mVolumeLODGroups.begin(),
95 end = mVolumeLODGroups.end(); 84 end = mVolumeLODGroups.end();
96 iter != end; iter++) 85 iter != end; iter++)
@@ -106,29 +95,37 @@ BOOL LLVolumeMgr::cleanup()
106 volgroupp->unref();// this ); 95 volgroupp->unref();// this );
107 } 96 }
108 mVolumeLODGroups.clear(); 97 mVolumeLODGroups.clear();
109 mDataMutex->unlock(); 98 if (mDataMutex)
99 {
100 mDataMutex->unlock();
101 }
110 return no_refs; 102 return no_refs;
111} 103}
112 104
105// whatever calls getVolume() never owns the LLVolume* and
106// cannot keep references for long since it may be deleted
107// later. For best results hold it in an LLPointer<LLVolume>.
113LLVolume *LLVolumeMgr::getVolume(const LLVolumeParams &volume_params, const S32 detail) 108LLVolume *LLVolumeMgr::getVolume(const LLVolumeParams &volume_params, const S32 detail)
114{ 109{
115 LLVolumeLODGroup* volgroupp; 110 LLVolumeLODGroup* volgroupp;
116 mDataMutex->lock(); 111 if (mDataMutex)
112 {
113 mDataMutex->lock();
114 }
117 volume_lod_group_map_t::iterator iter = mVolumeLODGroups.find(&volume_params); 115 volume_lod_group_map_t::iterator iter = mVolumeLODGroups.find(&volume_params);
118 if( iter == mVolumeLODGroups.end() ) 116 if( iter == mVolumeLODGroups.end() )
119 { 117 {
120 volgroupp = new LLVolumeLODGroup(volume_params); 118 volgroupp = createNewGroup(volume_params);
121 const LLVolumeParams* params = &(volgroupp->getParams());
122 mVolumeLODGroups[params] = volgroupp;
123 volgroupp->ref(); // initial reference
124 } 119 }
125 else 120 else
126 { 121 {
127 volgroupp = iter->second; 122 volgroupp = iter->second;
128 } 123 }
129 volgroupp->ref();// this ); 124 volgroupp->ref();
130 mDataMutex->unlock(); 125 if (mDataMutex)
131 // mNumVolumes++; 126 {
127 mDataMutex->unlock();
128 }
132 #ifdef DEBUG_VOLUME 129 #ifdef DEBUG_VOLUME
133 { 130 {
134 lldebugs << "LLVolumeMgr::getVolume() " << (*this) << llendl; 131 lldebugs << "LLVolumeMgr::getVolume() " << (*this) << llendl;
@@ -137,6 +134,27 @@ LLVolume *LLVolumeMgr::getVolume(const LLVolumeParams &volume_params, const S32
137 return volgroupp->getLOD(detail); 134 return volgroupp->getLOD(detail);
138} 135}
139 136
137// virtual
138LLVolumeLODGroup* LLVolumeMgr::getGroup( const LLVolumeParams& volume_params ) const
139{
140 LLVolumeLODGroup* volgroupp = NULL;
141 if (mDataMutex)
142 {
143 mDataMutex->lock();
144 }
145 volume_lod_group_map_t::const_iterator iter = mVolumeLODGroups.find(&volume_params);
146 if( iter != mVolumeLODGroups.end() )
147 {
148 volgroupp = iter->second;
149 }
150 if (mDataMutex)
151 {
152 mDataMutex->unlock();
153 }
154 return volgroupp;
155}
156
157// virtual
140void LLVolumeMgr::cleanupVolume(LLVolume *volumep) 158void LLVolumeMgr::cleanupVolume(LLVolume *volumep)
141{ 159{
142 if (volumep->isUnique()) 160 if (volumep->isUnique())
@@ -145,12 +163,18 @@ void LLVolumeMgr::cleanupVolume(LLVolume *volumep)
145 return; 163 return;
146 } 164 }
147 LLVolumeParams* params = (LLVolumeParams*) &(volumep->getParams()); 165 LLVolumeParams* params = (LLVolumeParams*) &(volumep->getParams());
148 mDataMutex->lock(); 166 if (mDataMutex)
167 {
168 mDataMutex->lock();
169 }
149 volume_lod_group_map_t::iterator iter = mVolumeLODGroups.find(params); 170 volume_lod_group_map_t::iterator iter = mVolumeLODGroups.find(params);
150 if( iter == mVolumeLODGroups.end() ) 171 if( iter == mVolumeLODGroups.end() )
151 { 172 {
152 llerrs << "Warning! Tried to cleanup unknown volume type! " << *params << llendl; 173 llerrs << "Warning! Tried to cleanup unknown volume type! " << *params << llendl;
153 mDataMutex->unlock(); 174 if (mDataMutex)
175 {
176 mDataMutex->unlock();
177 }
154 return; 178 return;
155 } 179 }
156 else 180 else
@@ -164,9 +188,11 @@ void LLVolumeMgr::cleanupVolume(LLVolume *volumep)
164 mVolumeLODGroups.erase(params); 188 mVolumeLODGroups.erase(params);
165 volgroupp->unref();// this ); 189 volgroupp->unref();// this );
166 } 190 }
167 // mNumVolumes--;
168 } 191 }
169 mDataMutex->unlock(); 192 if (mDataMutex)
193 {
194 mDataMutex->unlock();
195 }
170 196
171 #ifdef DEBUG_VOLUME 197 #ifdef DEBUG_VOLUME
172 { 198 {
@@ -175,10 +201,43 @@ void LLVolumeMgr::cleanupVolume(LLVolume *volumep)
175 #endif 201 #endif
176} 202}
177 203
204#ifdef DEBUG_VOLUME
205S32 LLVolumeMgr::getTotalRefCount() const
206{
207 S32 total_ref_count = 0;
208 for ( volume_lod_group_map_t::const_iterator iter = mVolumeLODGroups.begin(),
209 end = mVolumeLODGroups.end();
210 iter != end; iter++)
211 {
212 total_ref_count += iter->second->getTotalVolumeRefCount();
213 }
214 return total_ref_count;
215}
216
217S32 LLVolumeMgr::getGroupCount() const
218{
219 return mVolumeLODGroups.size();
220}
221#endif
222
223// protected
224LLVolumeLODGroup* LLVolumeMgr::createNewGroup(const LLVolumeParams& volume_params)
225{
226 LLVolumeLODGroup* group = new LLVolumeLODGroup(volume_params);
227 const LLVolumeParams* params = &(group->getParams());
228 mVolumeLODGroups[params] = group;
229 group->ref(); // initial reference
230 return group;
231}
232
233// virtual
178void LLVolumeMgr::dump() 234void LLVolumeMgr::dump()
179{ 235{
180 F32 avg = 0.f; 236 F32 avg = 0.f;
181 mDataMutex->lock(); 237 if (mDataMutex)
238 {
239 mDataMutex->lock();
240 }
182 for (volume_lod_group_map_t::iterator iter = mVolumeLODGroups.begin(), 241 for (volume_lod_group_map_t::iterator iter = mVolumeLODGroups.begin(),
183 end = mVolumeLODGroups.end(); 242 end = mVolumeLODGroups.end();
184 iter != end; iter++) 243 iter != end; iter++)
@@ -188,16 +247,30 @@ void LLVolumeMgr::dump()
188 } 247 }
189 int count = (int)mVolumeLODGroups.size(); 248 int count = (int)mVolumeLODGroups.size();
190 avg = count ? avg / (F32)count : 0.0f; 249 avg = count ? avg / (F32)count : 0.0f;
191 mDataMutex->unlock(); 250 if (mDataMutex)
251 {
252 mDataMutex->unlock();
253 }
192 llinfos << "Average usage of LODs " << avg << llendl; 254 llinfos << "Average usage of LODs " << avg << llendl;
193} 255}
194 256
257void LLVolumeMgr::useMutex()
258{
259 if (!mDataMutex)
260 {
261 mDataMutex = new LLMutex(gAPRPoolp);
262 }
263}
264
195std::ostream& operator<<(std::ostream& s, const LLVolumeMgr& volume_mgr) 265std::ostream& operator<<(std::ostream& s, const LLVolumeMgr& volume_mgr)
196{ 266{
197 s << "{ numLODgroups=" << volume_mgr.mVolumeLODGroups.size() << ", "; 267 s << "{ numLODgroups=" << volume_mgr.mVolumeLODGroups.size() << ", ";
198 268
199 S32 total_refs = 0; 269 S32 total_refs = 0;
200 volume_mgr.mDataMutex->lock(); 270 if (volume_mgr.mDataMutex)
271 {
272 volume_mgr.mDataMutex->lock();
273 }
201 274
202 LLVolumeMgr::volume_lod_group_map_iter iter = volume_mgr.mVolumeLODGroups.begin(); 275 LLVolumeMgr::volume_lod_group_map_iter iter = volume_mgr.mVolumeLODGroups.begin();
203 LLVolumeMgr::volume_lod_group_map_iter end = volume_mgr.mVolumeLODGroups.end(); 276 LLVolumeMgr::volume_lod_group_map_iter end = volume_mgr.mVolumeLODGroups.end();
@@ -208,7 +281,10 @@ std::ostream& operator<<(std::ostream& s, const LLVolumeMgr& volume_mgr)
208 s << ", " << (*volgroupp); 281 s << ", " << (*volgroupp);
209 } 282 }
210 283
211 volume_mgr.mDataMutex->unlock(); 284 if (volume_mgr.mDataMutex)
285 {
286 volume_mgr.mDataMutex->unlock();
287 }
212 288
213 s << ", total_refs=" << total_refs << " }"; 289 s << ", total_refs=" << total_refs << " }";
214 return s; 290 return s;
@@ -222,15 +298,39 @@ LLVolumeLODGroup::LLVolumeLODGroup(const LLVolumeParams &params)
222 for (i = 0; i < NUM_LODS; i++) 298 for (i = 0; i < NUM_LODS; i++)
223 { 299 {
224 mLODRefs[i] = 0; 300 mLODRefs[i] = 0;
225 mVolumeLODs[i] = NULL; 301 // no need to initialize mVolumeLODs, they are smart pointers
302 //mVolumeLODs[i] = NULL;
226 mAccessCount[i] = 0; 303 mAccessCount[i] = 0;
227 } 304 }
228} 305}
229 306
307#ifdef DEBUG_VOLUME
308S32 LLVolumeLODGroup::getTotalVolumeRefCount() const
309{
310 S32 total_ref_count = 0;
311 for (S32 i = 0; i < NUM_LODS; i++)
312 {
313 total_ref_count += mLODRefs[i];
314 }
315 return total_ref_count;
316}
317#endif
318
319// protected
230LLVolumeLODGroup::~LLVolumeLODGroup() 320LLVolumeLODGroup::~LLVolumeLODGroup()
231{ 321{
322 destroy();
232} 323}
233 324
325// protected
326void LLVolumeLODGroup::destroy()
327{
328 for (S32 i = 0; i < NUM_LODS; i++)
329 {
330 // remember that mVolumeLODs are smart pointers!
331 mVolumeLODs[i] = NULL;
332 }
333}
234 334
235LLVolume * LLVolumeLODGroup::getLOD(const S32 detail) 335LLVolume * LLVolumeLODGroup::getLOD(const S32 detail)
236{ 336{
@@ -242,7 +342,7 @@ LLVolume * LLVolumeLODGroup::getLOD(const S32 detail)
242 mVolumeLODs[detail] = new LLVolume(mParams, mDetailScales[detail]); 342 mVolumeLODs[detail] = new LLVolume(mParams, mDetailScales[detail]);
243 } 343 }
244 mLODRefs[detail]++; 344 mLODRefs[detail]++;
245 return mVolumeLODs[detail]; 345 return mVolumeLODs[detail].get();
246} 346}
247 347
248BOOL LLVolumeLODGroup::derefLOD(LLVolume *volumep) 348BOOL LLVolumeLODGroup::derefLOD(LLVolume *volumep)
diff --git a/linden/indra/llmath/llvolumemgr.h b/linden/indra/llmath/llvolumemgr.h
index 889bc56..0a2249e 100644
--- a/linden/indra/llmath/llvolumemgr.h
+++ b/linden/indra/llmath/llvolumemgr.h
@@ -43,9 +43,6 @@ class LLVolumeLODGroup;
43 43
44class LLVolumeLODGroup : public LLThreadSafeRefCount 44class LLVolumeLODGroup : public LLThreadSafeRefCount
45{ 45{
46protected:
47 ~LLVolumeLODGroup();
48
49public: 46public:
50 enum 47 enum
51 { 48 {
@@ -60,11 +57,19 @@ public:
60 static F32 getVolumeScaleFromDetail(const S32 detail); 57 static F32 getVolumeScaleFromDetail(const S32 detail);
61 58
62 LLVolume *getLOD(const S32 detail); 59 LLVolume *getLOD(const S32 detail);
63 const LLVolumeParams &getParams() const { return mParams; }; 60 const LLVolumeParams& getParams() const { return mParams; };
64 61
65 F32 dump(); 62 F32 dump();
66 friend std::ostream& operator<<(std::ostream& s, const LLVolumeLODGroup& volgroup); 63 friend std::ostream& operator<<(std::ostream& s, const LLVolumeLODGroup& volgroup);
67 64
65#ifdef DEBUG_VOLUME
66 S32 getTotalVolumeRefCount() const;
67#endif
68
69protected:
70 virtual ~LLVolumeLODGroup();
71 void destroy();
72
68protected: 73protected:
69 LLVolumeParams mParams; 74 LLVolumeParams mParams;
70 75
@@ -77,30 +82,50 @@ protected:
77 82
78class LLVolumeMgr 83class LLVolumeMgr
79{ 84{
80public: 85//public:
81 static void initClass(); 86// static void initClass();
82 static BOOL cleanupClass(); 87// static BOOL cleanupClass();
83 88
84public: 89public:
85 LLVolumeMgr(); 90 LLVolumeMgr();
86 ~LLVolumeMgr(); 91 virtual ~LLVolumeMgr();
87 BOOL cleanup(); // Cleanup all volumes being managed, returns TRUE if no dangling references 92 BOOL cleanup(); // Cleanup all volumes being managed, returns TRUE if no dangling references
93
94 virtual LLVolumeLODGroup* getGroup( const LLVolumeParams& volume_params ) const;
95
96 // whatever calls getVolume() never owns the LLVolume* and
97 // cannot keep references for long since it may be deleted
98 // later. For best results hold it in an LLPointer<LLVolume>.
88 LLVolume *getVolume(const LLVolumeParams &volume_params, const S32 detail); 99 LLVolume *getVolume(const LLVolumeParams &volume_params, const S32 detail);
100
89 void cleanupVolume(LLVolume *volumep); 101 void cleanupVolume(LLVolume *volumep);
90 102
91 void dump(); 103 void dump();
104
105 // manually call this for mutex magic
106 void useMutex();
107
108#ifdef DEBUG_VOLUME
109 S32 getTotalRefCount() const;
110 S32 getGroupCount() const;
111#endif
92 friend std::ostream& operator<<(std::ostream& s, const LLVolumeMgr& volume_mgr); 112 friend std::ostream& operator<<(std::ostream& s, const LLVolumeMgr& volume_mgr);
93 113
94protected: 114protected:
115 virtual LLVolumeLODGroup* createNewGroup(const LLVolumeParams& volume_params);
116
117protected:
95 typedef std::map<const LLVolumeParams*, LLVolumeLODGroup*, LLVolumeParams::compare> volume_lod_group_map_t; 118 typedef std::map<const LLVolumeParams*, LLVolumeLODGroup*, LLVolumeParams::compare> volume_lod_group_map_t;
96 typedef volume_lod_group_map_t::const_iterator volume_lod_group_map_iter; 119 typedef volume_lod_group_map_t::const_iterator volume_lod_group_map_iter;
97 volume_lod_group_map_t mVolumeLODGroups; 120 volume_lod_group_map_t mVolumeLODGroups;
98 121
99 LLMutex* mDataMutex; 122 LLMutex* mDataMutex;
100 123
101// S32 mNumVolumes; 124 // We need to be able to disable threadsafe checks to prevent
125 // some unit_tests from blocking on failure
126 bool mThreadSafe;
102}; 127};
103 128
104extern LLVolumeMgr* gVolumeMgr; 129//extern LLVolumeMgr* gVolumeMgr;
105 130
106#endif // LL_LLVOLUMEMGR_H 131#endif // LL_LLVOLUMEMGR_H
diff --git a/linden/indra/llmath/m3math.cpp b/linden/indra/llmath/m3math.cpp
index 6741f05..5c3eb08 100644
--- a/linden/indra/llmath/m3math.cpp
+++ b/linden/indra/llmath/m3math.cpp
@@ -136,7 +136,7 @@ void LLMatrix3::getEulerAngles(F32 *roll, F32 *pitch, F32 *yaw) const
136 136
137// Clear and Assignment Functions 137// Clear and Assignment Functions
138 138
139const LLMatrix3& LLMatrix3::identity() 139const LLMatrix3& LLMatrix3::setIdentity()
140{ 140{
141 mMatrix[0][0] = 1.f; 141 mMatrix[0][0] = 1.f;
142 mMatrix[0][1] = 0.f; 142 mMatrix[0][1] = 0.f;
@@ -152,7 +152,23 @@ const LLMatrix3& LLMatrix3::identity()
152 return (*this); 152 return (*this);
153} 153}
154 154
155const LLMatrix3& LLMatrix3::zero() 155const LLMatrix3& LLMatrix3::clear()
156{
157 mMatrix[0][0] = 0.f;
158 mMatrix[0][1] = 0.f;
159 mMatrix[0][2] = 0.f;
160
161 mMatrix[1][0] = 0.f;
162 mMatrix[1][1] = 0.f;
163 mMatrix[1][2] = 0.f;
164
165 mMatrix[2][0] = 0.f;
166 mMatrix[2][1] = 0.f;
167 mMatrix[2][2] = 0.f;
168 return (*this);
169}
170
171const LLMatrix3& LLMatrix3::setZero()
156{ 172{
157 mMatrix[0][0] = 0.f; 173 mMatrix[0][0] = 0.f;
158 mMatrix[0][1] = 0.f; 174 mMatrix[0][1] = 0.f;
@@ -190,15 +206,26 @@ F32 LLMatrix3::determinant() const
190 mMatrix[0][2] * (mMatrix[1][0] * mMatrix[2][1] - mMatrix[1][1] * mMatrix[2][0]); 206 mMatrix[0][2] * (mMatrix[1][0] * mMatrix[2][1] - mMatrix[1][1] * mMatrix[2][0]);
191} 207}
192 208
193// This is identical to the transMat3() method because we assume a rotation matrix 209// inverts this matrix
194const LLMatrix3& LLMatrix3::invert() 210void LLMatrix3::invert()
195{ 211{
196 // transpose the matrix 212 // fails silently if determinant is zero too small
197 F32 temp; 213 F32 det = determinant();
198 temp = mMatrix[VX][VY]; mMatrix[VX][VY] = mMatrix[VY][VX]; mMatrix[VY][VX] = temp; 214 const F32 VERY_SMALL_DETERMINANT = 0.000001f;
199 temp = mMatrix[VX][VZ]; mMatrix[VX][VZ] = mMatrix[VZ][VX]; mMatrix[VZ][VX] = temp; 215 if (fabs(det) > VERY_SMALL_DETERMINANT)
200 temp = mMatrix[VY][VZ]; mMatrix[VY][VZ] = mMatrix[VZ][VY]; mMatrix[VZ][VY] = temp; 216 {
201 return *this; 217 // invertiable
218 LLMatrix3 t(*this);
219 mMatrix[VX][VX] = ( t.mMatrix[VY][VY] * t.mMatrix[VZ][VZ] - t.mMatrix[VY][VZ] * t.mMatrix[VZ][VY] ) / det;
220 mMatrix[VY][VX] = ( t.mMatrix[VY][VZ] * t.mMatrix[VZ][VX] - t.mMatrix[VY][VX] * t.mMatrix[VZ][VZ] ) / det;
221 mMatrix[VZ][VX] = ( t.mMatrix[VY][VX] * t.mMatrix[VZ][VY] - t.mMatrix[VY][VY] * t.mMatrix[VZ][VX] ) / det;
222 mMatrix[VX][VY] = ( t.mMatrix[VZ][VY] * t.mMatrix[VX][VZ] - t.mMatrix[VZ][VZ] * t.mMatrix[VX][VY] ) / det;
223 mMatrix[VY][VY] = ( t.mMatrix[VZ][VZ] * t.mMatrix[VX][VX] - t.mMatrix[VZ][VX] * t.mMatrix[VX][VZ] ) / det;
224 mMatrix[VZ][VY] = ( t.mMatrix[VZ][VX] * t.mMatrix[VX][VY] - t.mMatrix[VZ][VY] * t.mMatrix[VX][VX] ) / det;
225 mMatrix[VX][VZ] = ( t.mMatrix[VX][VY] * t.mMatrix[VY][VZ] - t.mMatrix[VX][VZ] * t.mMatrix[VY][VY] ) / det;
226 mMatrix[VY][VZ] = ( t.mMatrix[VX][VZ] * t.mMatrix[VY][VX] - t.mMatrix[VX][VX] * t.mMatrix[VY][VZ] ) / det;
227 mMatrix[VZ][VZ] = ( t.mMatrix[VX][VX] * t.mMatrix[VY][VY] - t.mMatrix[VX][VY] * t.mMatrix[VY][VX] ) / det;
228 }
202} 229}
203 230
204// does not assume a rotation matrix, and does not divide by determinant, assuming results will be renormalized 231// does not assume a rotation matrix, and does not divide by determinant, assuming results will be renormalized
@@ -351,6 +378,27 @@ const LLMatrix3& LLMatrix3::setRows(const LLVector3 &fwd, const LLVector3 &left,
351 return *this; 378 return *this;
352} 379}
353 380
381const LLMatrix3& LLMatrix3::setRow( U32 rowIndex, const LLVector3& row )
382{
383 llassert( rowIndex >= 0 && rowIndex < NUM_VALUES_IN_MAT3 );
384
385 mMatrix[rowIndex][0] = row[0];
386 mMatrix[rowIndex][1] = row[1];
387 mMatrix[rowIndex][2] = row[2];
388
389 return *this;
390}
391
392const LLMatrix3& LLMatrix3::setCol( U32 colIndex, const LLVector3& col )
393{
394 llassert( colIndex >= 0 && colIndex < NUM_VALUES_IN_MAT3 );
395
396 mMatrix[0][colIndex] = col[0];
397 mMatrix[1][colIndex] = col[1];
398 mMatrix[2][colIndex] = col[2];
399
400 return *this;
401}
354 402
355// Rotate exisitng mMatrix 403// Rotate exisitng mMatrix
356const LLMatrix3& LLMatrix3::rotate(const F32 angle, const F32 x, const F32 y, const F32 z) 404const LLMatrix3& LLMatrix3::rotate(const F32 angle, const F32 x, const F32 y, const F32 z)
@@ -384,6 +432,16 @@ const LLMatrix3& LLMatrix3::rotate(const LLQuaternion &q)
384 return *this; 432 return *this;
385} 433}
386 434
435void LLMatrix3::add(const LLMatrix3& other_matrix)
436{
437 for (S32 i = 0; i < 3; ++i)
438 {
439 for (S32 j = 0; j < 3; ++j)
440 {
441 mMatrix[i][j] += other_matrix.mMatrix[i][j];
442 }
443 }
444}
387 445
388LLVector3 LLMatrix3::getFwdRow() const 446LLVector3 LLMatrix3::getFwdRow() const
389{ 447{
@@ -536,6 +594,19 @@ const LLMatrix3& operator*=(LLMatrix3 &a, const LLMatrix3 &b)
536 return a; 594 return a;
537} 595}
538 596
597const LLMatrix3& operator*=(LLMatrix3 &a, F32 scalar )
598{
599 for( U32 i = 0; i < NUM_VALUES_IN_MAT3; ++i )
600 {
601 for( U32 j = 0; j < NUM_VALUES_IN_MAT3; ++j )
602 {
603 a.mMatrix[i][j] *= scalar;
604 }
605 }
606
607 return a;
608}
609
539std::ostream& operator<<(std::ostream& s, const LLMatrix3 &a) 610std::ostream& operator<<(std::ostream& s, const LLMatrix3 &a)
540{ 611{
541 s << "{ " 612 s << "{ "
diff --git a/linden/indra/llmath/m3math.h b/linden/indra/llmath/m3math.h
index 8bd94d8..cd22a86 100644
--- a/linden/indra/llmath/m3math.h
+++ b/linden/indra/llmath/m3math.h
@@ -33,6 +33,7 @@
33#define LL_M3MATH_H 33#define LL_M3MATH_H
34 34
35#include "llerror.h" 35#include "llerror.h"
36#include "stdtypes.h"
36 37
37class LLVector4; 38class LLVector4;
38class LLVector3; 39class LLVector3;
@@ -76,8 +77,9 @@ class LLMatrix3
76 // 77 //
77 78
78 // various useful matrix functions 79 // various useful matrix functions
79 const LLMatrix3& identity(); // Load identity matrix 80 const LLMatrix3& setIdentity(); // Load identity matrix
80 const LLMatrix3& zero(); // Clears Matrix to zero 81 const LLMatrix3& clear(); // Clears Matrix to zero
82 const LLMatrix3& setZero(); // Clears Matrix to zero
81 83
82 /////////////////////////// 84 ///////////////////////////
83 // 85 //
@@ -91,6 +93,9 @@ class LLMatrix3
91 const LLMatrix3& setRot(const LLQuaternion &q); // Transform matrix by Euler angles and translating by pos 93 const LLMatrix3& setRot(const LLQuaternion &q); // Transform matrix by Euler angles and translating by pos
92 94
93 const LLMatrix3& setRows(const LLVector3 &x_axis, const LLVector3 &y_axis, const LLVector3 &z_axis); 95 const LLMatrix3& setRows(const LLVector3 &x_axis, const LLVector3 &y_axis, const LLVector3 &z_axis);
96 const LLMatrix3& setRow( U32 rowIndex, const LLVector3& row );
97 const LLMatrix3& setCol( U32 colIndex, const LLVector3& col );
98
94 99
95 /////////////////////////// 100 ///////////////////////////
96 // 101 //
@@ -103,29 +108,31 @@ class LLMatrix3
103 LLVector3 getFwdRow() const; 108 LLVector3 getFwdRow() const;
104 LLVector3 getLeftRow() const; 109 LLVector3 getLeftRow() const;
105 LLVector3 getUpRow() const; 110 LLVector3 getUpRow() const;
106 F32 determinant() const; // Return determinant 111 F32 determinant() const; // Return determinant
107 112
108 113
109 /////////////////////////// 114 ///////////////////////////
110 // 115 //
111 // Operations on an existing matrix 116 // Operations on an existing matrix
112 // 117 //
113 const LLMatrix3& transpose(); // Transpose MAT4 118 const LLMatrix3& transpose(); // Transpose MAT4
114 const LLMatrix3& invert(); // Invert MAT4 119 const LLMatrix3& orthogonalize(); // Orthogonalizes X, then Y, then Z
115 const LLMatrix3& orthogonalize(); // Orthogonalizes X, then Y, then Z 120 void invert(); // Invert MAT4
116 const LLMatrix3& adjointTranspose(); // returns transpose of matrix adjoint, for multiplying normals 121 const LLMatrix3& adjointTranspose();// returns transpose of matrix adjoint, for multiplying normals
117 122
118 123
119 // Rotate existing matrix 124 // Rotate existing matrix
120 // Note: the two lines below are equivalent: 125 // Note: the two lines below are equivalent:
121 // foo.rotate(bar) 126 // foo.rotate(bar)
122 // foo = foo * bar 127 // foo = foo * bar
123 // That is, foo.rotMat3(bar) multiplies foo by bar FROM THE RIGHT 128 // That is, foo.rotate(bar) multiplies foo by bar FROM THE RIGHT
124 const LLMatrix3& rotate(const F32 angle, const F32 x, const F32 y, const F32 z); // Rotate matrix by rotating angle radians about (x, y, z) 129 const LLMatrix3& rotate(const F32 angle, const F32 x, const F32 y, const F32 z); // Rotate matrix by rotating angle radians about (x, y, z)
125 const LLMatrix3& rotate(const F32 angle, const LLVector3 &vec); // Rotate matrix by rotating angle radians about vec 130 const LLMatrix3& rotate(const F32 angle, const LLVector3 &vec); // Rotate matrix by rotating angle radians about vec
126 const LLMatrix3& rotate(const F32 roll, const F32 pitch, const F32 yaw); // Rotate matrix by roll (about x), pitch (about y), and yaw (about z) 131 const LLMatrix3& rotate(const F32 roll, const F32 pitch, const F32 yaw); // Rotate matrix by roll (about x), pitch (about y), and yaw (about z)
127 const LLMatrix3& rotate(const LLQuaternion &q); // Transform matrix by Euler angles and translating by pos 132 const LLMatrix3& rotate(const LLQuaternion &q); // Transform matrix by Euler angles and translating by pos
128 133
134 void add(const LLMatrix3& other_matrix); // add other_matrix to this one
135
129// This operator is misleading as to operation direction 136// This operator is misleading as to operation direction
130// friend LLVector3 operator*(const LLMatrix3 &a, const LLVector3 &b); // Apply rotation a to vector b 137// friend LLVector3 operator*(const LLMatrix3 &a, const LLVector3 &b); // Apply rotation a to vector b
131 138
@@ -137,6 +144,7 @@ class LLMatrix3
137 friend bool operator!=(const LLMatrix3 &a, const LLMatrix3 &b); // Return a != b 144 friend bool operator!=(const LLMatrix3 &a, const LLMatrix3 &b); // Return a != b
138 145
139 friend const LLMatrix3& operator*=(LLMatrix3 &a, const LLMatrix3 &b); // Return a * b 146 friend const LLMatrix3& operator*=(LLMatrix3 &a, const LLMatrix3 &b); // Return a * b
147 friend const LLMatrix3& operator*=(LLMatrix3 &a, F32 scalar ); // Return a * scalar
140 148
141 friend std::ostream& operator<<(std::ostream& s, const LLMatrix3 &a); // Stream a 149 friend std::ostream& operator<<(std::ostream& s, const LLMatrix3 &a); // Stream a
142}; 150};
diff --git a/linden/indra/llmath/m4math.cpp b/linden/indra/llmath/m4math.cpp
index 2b51db1..f2db478 100644
--- a/linden/indra/llmath/m4math.cpp
+++ b/linden/indra/llmath/m4math.cpp
@@ -163,7 +163,7 @@ LLMatrix4::~LLMatrix4(void)
163 163
164// Clear and Assignment Functions 164// Clear and Assignment Functions
165 165
166const LLMatrix4& LLMatrix4::zero() 166const LLMatrix4& LLMatrix4::setZero()
167{ 167{
168 mMatrix[0][0] = 0.f; 168 mMatrix[0][0] = 0.f;
169 mMatrix[0][1] = 0.f; 169 mMatrix[0][1] = 0.f;
diff --git a/linden/indra/llmath/m4math.h b/linden/indra/llmath/m4math.h
index 7a51eb2..27eb865 100644
--- a/linden/indra/llmath/m4math.h
+++ b/linden/indra/llmath/m4math.h
@@ -132,8 +132,8 @@ public:
132 const LLVector4 &row3); 132 const LLVector4 &row3);
133 133
134 // various useful matrix functions 134 // various useful matrix functions
135 const LLMatrix4& identity(); // Load identity matrix 135 const LLMatrix4& setIdentity(); // Load identity matrix
136 const LLMatrix4& zero(); // Clears matrix to all zeros. 136 const LLMatrix4& setZero(); // Clears matrix to all zeros.
137 137
138 const LLMatrix4& initRotation(const F32 angle, const F32 x, const F32 y, const F32 z); // Calculate rotation matrix by rotating angle radians about (x, y, z) 138 const LLMatrix4& initRotation(const F32 angle, const F32 x, const F32 y, const F32 z); // Calculate rotation matrix by rotating angle radians about (x, y, z)
139 const LLMatrix4& initRotation(const F32 angle, const LLVector4 &axis); // Calculate rotation matrix for rotating angle radians about vec 139 const LLMatrix4& initRotation(const F32 angle, const LLVector4 &axis); // Calculate rotation matrix for rotating angle radians about vec
@@ -243,10 +243,10 @@ public:
243 243
244inline LLMatrix4::LLMatrix4() 244inline LLMatrix4::LLMatrix4()
245{ 245{
246 identity(); 246 setIdentity();
247} 247}
248 248
249inline const LLMatrix4& LLMatrix4::identity() 249inline const LLMatrix4& LLMatrix4::setIdentity()
250{ 250{
251 mMatrix[0][0] = 1.f; 251 mMatrix[0][0] = 1.f;
252 mMatrix[0][1] = 0.f; 252 mMatrix[0][1] = 0.f;
diff --git a/linden/indra/llmath/v2math.h b/linden/indra/llmath/v2math.h
index b951786..5a520d2 100644
--- a/linden/indra/llmath/v2math.h
+++ b/linden/indra/llmath/v2math.h
@@ -54,18 +54,26 @@ class LLVector2
54 LLVector2(const F32 *vec); // Initializes LLVector2 to (vec[0]. vec[1]) 54 LLVector2(const F32 *vec); // Initializes LLVector2 to (vec[0]. vec[1])
55 55
56 // Clears LLVector2 to (0, 0). DEPRECATED - prefer zeroVec. 56 // Clears LLVector2 to (0, 0). DEPRECATED - prefer zeroVec.
57 void clearVec(); 57 void clear();
58 void setZero();
59 void clearVec(); // deprecated
60 void zeroVec(); // deprecated
58 61
59 // Zero LLVector2 to (0, 0) 62 void set(F32 x, F32 y); // Sets LLVector2 to (x, y)
60 void zeroVec(); 63 void set(const LLVector2 &vec); // Sets LLVector2 to vec
64 void set(const F32 *vec); // Sets LLVector2 to vec
61 65
62 void setVec(F32 x, F32 y); // Sets LLVector2 to (x, y) 66 void setVec(F32 x, F32 y); // deprecated
63 void setVec(const LLVector2 &vec); // Sets LLVector2 to vec 67 void setVec(const LLVector2 &vec); // deprecated
64 void setVec(const F32 *vec); // Sets LLVector2 to vec 68 void setVec(const F32 *vec); // deprecated
65 69
66 F32 magVec() const; // Returns magnitude of LLVector2 70 F32 length() const; // Returns magnitude of LLVector2
67 F32 magVecSquared() const; // Returns magnitude squared of LLVector2 71 F32 lengthSquared() const; // Returns magnitude squared of LLVector2
68 F32 normVec(); // Normalizes and returns the magnitude of LLVector2 72 F32 normalize(); // Normalizes and returns the magnitude of LLVector2
73
74 F32 magVec() const; // deprecated
75 F32 magVecSquared() const; // deprecated
76 F32 normVec(); // deprecated
69 77
70 BOOL abs(); // sets all values to absolute value of original value (first octant), returns TRUE if changed 78 BOOL abs(); // sets all values to absolute value of original value (first octant), returns TRUE if changed
71 79
@@ -132,30 +140,66 @@ inline LLVector2::LLVector2(const F32 *vec)
132 140
133// Clear and Assignment Functions 141// Clear and Assignment Functions
134 142
143inline void LLVector2::clear(void)
144{
145 mV[VX] = 0.f;
146 mV[VY] = 0.f;
147}
148
149inline void LLVector2::setZero(void)
150{
151 mV[VX] = 0.f;
152 mV[VY] = 0.f;
153}
154
155// deprecated
135inline void LLVector2::clearVec(void) 156inline void LLVector2::clearVec(void)
136{ 157{
137 mV[VX] = 0.f; 158 mV[VX] = 0.f;
138 mV[VY] = 0.f; 159 mV[VY] = 0.f;
139} 160}
140 161
162// deprecated
141inline void LLVector2::zeroVec(void) 163inline void LLVector2::zeroVec(void)
142{ 164{
143 mV[VX] = 0.f; 165 mV[VX] = 0.f;
144 mV[VY] = 0.f; 166 mV[VY] = 0.f;
145} 167}
146 168
169inline void LLVector2::set(F32 x, F32 y)
170{
171 mV[VX] = x;
172 mV[VY] = y;
173}
174
175inline void LLVector2::set(const LLVector2 &vec)
176{
177 mV[VX] = vec.mV[VX];
178 mV[VY] = vec.mV[VY];
179}
180
181inline void LLVector2::set(const F32 *vec)
182{
183 mV[VX] = vec[VX];
184 mV[VY] = vec[VY];
185}
186
187
188// deprecated
147inline void LLVector2::setVec(F32 x, F32 y) 189inline void LLVector2::setVec(F32 x, F32 y)
148{ 190{
149 mV[VX] = x; 191 mV[VX] = x;
150 mV[VY] = y; 192 mV[VY] = y;
151} 193}
152 194
195// deprecated
153inline void LLVector2::setVec(const LLVector2 &vec) 196inline void LLVector2::setVec(const LLVector2 &vec)
154{ 197{
155 mV[VX] = vec.mV[VX]; 198 mV[VX] = vec.mV[VX];
156 mV[VY] = vec.mV[VY]; 199 mV[VY] = vec.mV[VY];
157} 200}
158 201
202// deprecated
159inline void LLVector2::setVec(const F32 *vec) 203inline void LLVector2::setVec(const F32 *vec)
160{ 204{
161 mV[VX] = vec[VX]; 205 mV[VX] = vec[VX];
@@ -164,16 +208,49 @@ inline void LLVector2::setVec(const F32 *vec)
164 208
165// LLVector2 Magnitude and Normalization Functions 209// LLVector2 Magnitude and Normalization Functions
166 210
211inline F32 LLVector2::length(void) const
212{
213 return fsqrtf(mV[0]*mV[0] + mV[1]*mV[1]);
214}
215
216inline F32 LLVector2::lengthSquared(void) const
217{
218 return mV[0]*mV[0] + mV[1]*mV[1];
219}
220
221inline F32 LLVector2::normalize(void)
222{
223 F32 mag = fsqrtf(mV[0]*mV[0] + mV[1]*mV[1]);
224 F32 oomag;
225
226 if (mag > FP_MAG_THRESHOLD)
227 {
228 oomag = 1.f/mag;
229 mV[0] *= oomag;
230 mV[1] *= oomag;
231 }
232 else
233 {
234 mV[0] = 0.f;
235 mV[1] = 0.f;
236 mag = 0;
237 }
238 return (mag);
239}
240
241// deprecated
167inline F32 LLVector2::magVec(void) const 242inline F32 LLVector2::magVec(void) const
168{ 243{
169 return fsqrtf(mV[0]*mV[0] + mV[1]*mV[1]); 244 return fsqrtf(mV[0]*mV[0] + mV[1]*mV[1]);
170} 245}
171 246
247// deprecated
172inline F32 LLVector2::magVecSquared(void) const 248inline F32 LLVector2::magVecSquared(void) const
173{ 249{
174 return mV[0]*mV[0] + mV[1]*mV[1]; 250 return mV[0]*mV[0] + mV[1]*mV[1];
175} 251}
176 252
253// deprecated
177inline F32 LLVector2::normVec(void) 254inline F32 LLVector2::normVec(void)
178{ 255{
179 F32 mag = fsqrtf(mV[0]*mV[0] + mV[1]*mV[1]); 256 F32 mag = fsqrtf(mV[0]*mV[0] + mV[1]*mV[1]);
diff --git a/linden/indra/llmath/v3dmath.h b/linden/indra/llmath/v3dmath.h
index 60757ba..9bd80b8 100644
--- a/linden/indra/llmath/v3dmath.h
+++ b/linden/indra/llmath/v3dmath.h
@@ -83,8 +83,9 @@ class LLVector3d
83 BOOL clamp(const F64 min, const F64 max); // Clamps all values to (min,max), returns TRUE if data changed 83 BOOL clamp(const F64 min, const F64 max); // Clamps all values to (min,max), returns TRUE if data changed
84 BOOL abs(); // sets all values to absolute value of original value (first octant), returns TRUE if changed 84 BOOL abs(); // sets all values to absolute value of original value (first octant), returns TRUE if changed
85 85
86 inline const LLVector3d& clearVec(); // Clears LLVector3d to (0, 0, 0, 1) 86 inline const LLVector3d& clearVec(); // Clears LLVector3d to (0, 0, 0, 1)
87 inline const LLVector3d& zeroVec(); // Zero LLVector3d to (0, 0, 0, 0) 87 inline const LLVector3d& setZero(); // Zero LLVector3d to (0, 0, 0, 0)
88 inline const LLVector3d& zeroVec(); // deprecated
88 inline const LLVector3d& setVec(const F64 x, const F64 y, const F64 z); // Sets LLVector3d to (x, y, z, 1) 89 inline const LLVector3d& setVec(const F64 x, const F64 y, const F64 z); // Sets LLVector3d to (x, y, z, 1)
89 inline const LLVector3d& setVec(const LLVector3d &vec); // Sets LLVector3d to vec 90 inline const LLVector3d& setVec(const LLVector3d &vec); // Sets LLVector3d to vec
90 inline const LLVector3d& setVec(const F64 *vec); // Sets LLVector3d to vec 91 inline const LLVector3d& setVec(const F64 *vec); // Sets LLVector3d to vec
@@ -198,6 +199,14 @@ inline const LLVector3d& LLVector3d::clearVec(void)
198 return (*this); 199 return (*this);
199} 200}
200 201
202inline const LLVector3d& LLVector3d::setZero(void)
203{
204 mdV[0] = 0.f;
205 mdV[1] = 0.f;
206 mdV[2] = 0.f;
207 return (*this);
208}
209
201inline const LLVector3d& LLVector3d::zeroVec(void) 210inline const LLVector3d& LLVector3d::zeroVec(void)
202{ 211{
203 mdV[0] = 0.f; 212 mdV[0] = 0.f;
diff --git a/linden/indra/llmath/v3math.cpp b/linden/indra/llmath/v3math.cpp
index 34cce06..bbe460f 100644
--- a/linden/indra/llmath/v3math.cpp
+++ b/linden/indra/llmath/v3math.cpp
@@ -172,6 +172,22 @@ LLVector3 LLVector3::scaledVec(const LLVector3& vec) const
172 return ret; 172 return ret;
173} 173}
174 174
175const LLVector3& LLVector3::set(const LLVector3d &vec)
176{
177 mV[0] = (F32)vec.mdV[0];
178 mV[1] = (F32)vec.mdV[1];
179 mV[2] = (F32)vec.mdV[2];
180 return (*this);
181}
182
183const LLVector3& LLVector3::set(const LLVector4 &vec)
184{
185 mV[0] = vec.mV[0];
186 mV[1] = vec.mV[1];
187 mV[2] = vec.mV[2];
188 return (*this);
189}
190
175const LLVector3& LLVector3::setVec(const LLVector3d &vec) 191const LLVector3& LLVector3::setVec(const LLVector3d &vec)
176{ 192{
177 mV[0] = (F32)vec.mdV[0]; 193 mV[0] = (F32)vec.mdV[0];
diff --git a/linden/indra/llmath/v3math.h b/linden/indra/llmath/v3math.h
index f1c1b39..ddb5e1f 100644
--- a/linden/indra/llmath/v3math.h
+++ b/linden/indra/llmath/v3math.h
@@ -81,18 +81,33 @@ class LLVector3
81 81
82 BOOL abs(); // sets all values to absolute value of original value (first octant), returns TRUE if changed 82 BOOL abs(); // sets all values to absolute value of original value (first octant), returns TRUE if changed
83 83
84 inline void clearVec(); // Clears LLVector3 to (0, 0, 0, 1) 84 inline void clear(); // Clears LLVector3 to (0, 0, 0)
85 inline void zeroVec(); // Zero LLVector3 to (0, 0, 0, 0) 85 inline void setZero(); // Clears LLVector3 to (0, 0, 0)
86 inline void setVec(F32 x, F32 y, F32 z); // Sets LLVector3 to (x, y, z, 1) 86 inline void clearVec(); // deprecated
87 inline void setVec(const LLVector3 &vec); // Sets LLVector3 to vec 87 inline void zeroVec(); // deprecated
88 inline void setVec(const F32 *vec); // Sets LLVector3 to vec
89 88
90 const LLVector3& setVec(const LLVector4 &vec); 89 inline void set(F32 x, F32 y, F32 z); // Sets LLVector3 to (x, y, z, 1)
91 const LLVector3& setVec(const LLVector3d &vec); // Sets LLVector3 to vec 90 inline void set(const LLVector3 &vec); // Sets LLVector3 to vec
91 inline void set(const F32 *vec); // Sets LLVector3 to vec
92 const LLVector3& set(const LLVector4 &vec);
93 const LLVector3& set(const LLVector3d &vec);// Sets LLVector3 to vec
92 94
93 F32 magVec() const; // Returns magnitude of LLVector3 95 inline void setVec(F32 x, F32 y, F32 z); // deprecated
94 F32 magVecSquared() const; // Returns magnitude squared of LLVector3 96 inline void setVec(const LLVector3 &vec); // deprecated
95 inline F32 normVec(); // Normalizes and returns the magnitude of LLVector3 97 inline void setVec(const F32 *vec); // deprecated
98
99 const LLVector3& setVec(const LLVector4 &vec); // deprecated
100 const LLVector3& setVec(const LLVector3d &vec); // deprecated
101
102 F32 length() const; // Returns magnitude of LLVector3
103 F32 lengthSquared() const; // Returns magnitude squared of LLVector3
104 F32 magVec() const; // deprecated
105 F32 magVecSquared() const; // deprecated
106
107 inline F32 normalize(); // Normalizes and returns the magnitude of LLVector3
108 inline F32 normVec(); // deprecated
109
110 inline BOOL inRange( F32 min, F32 max ) const; // Returns true if all values of the vector are between min and max
96 111
97 const LLVector3& rotVec(F32 angle, const LLVector3 &vec); // Rotates about vec by angle radians 112 const LLVector3& rotVec(F32 angle, const LLVector3 &vec); // Rotates about vec by angle radians
98 const LLVector3& rotVec(F32 angle, F32 x, F32 y, F32 z); // Rotates about x,y,z by angle radians 113 const LLVector3& rotVec(F32 angle, F32 x, F32 y, F32 z); // Rotates about x,y,z by angle radians
@@ -188,6 +203,20 @@ inline BOOL LLVector3::isFinite() const
188 203
189// Clear and Assignment Functions 204// Clear and Assignment Functions
190 205
206inline void LLVector3::clear(void)
207{
208 mV[0] = 0.f;
209 mV[1] = 0.f;
210 mV[2] = 0.f;
211}
212
213inline void LLVector3::setZero(void)
214{
215 mV[0] = 0.f;
216 mV[1] = 0.f;
217 mV[2] = 0.f;
218}
219
191inline void LLVector3::clearVec(void) 220inline void LLVector3::clearVec(void)
192{ 221{
193 mV[0] = 0.f; 222 mV[0] = 0.f;
@@ -202,6 +231,28 @@ inline void LLVector3::zeroVec(void)
202 mV[2] = 0.f; 231 mV[2] = 0.f;
203} 232}
204 233
234inline void LLVector3::set(F32 x, F32 y, F32 z)
235{
236 mV[VX] = x;
237 mV[VY] = y;
238 mV[VZ] = z;
239}
240
241inline void LLVector3::set(const LLVector3 &vec)
242{
243 mV[0] = vec.mV[0];
244 mV[1] = vec.mV[1];
245 mV[2] = vec.mV[2];
246}
247
248inline void LLVector3::set(const F32 *vec)
249{
250 mV[0] = vec[0];
251 mV[1] = vec[1];
252 mV[2] = vec[2];
253}
254
255// deprecated
205inline void LLVector3::setVec(F32 x, F32 y, F32 z) 256inline void LLVector3::setVec(F32 x, F32 y, F32 z)
206{ 257{
207 mV[VX] = x; 258 mV[VX] = x;
@@ -209,6 +260,7 @@ inline void LLVector3::setVec(F32 x, F32 y, F32 z)
209 mV[VZ] = z; 260 mV[VZ] = z;
210} 261}
211 262
263// deprecated
212inline void LLVector3::setVec(const LLVector3 &vec) 264inline void LLVector3::setVec(const LLVector3 &vec)
213{ 265{
214 mV[0] = vec.mV[0]; 266 mV[0] = vec.mV[0];
@@ -216,6 +268,7 @@ inline void LLVector3::setVec(const LLVector3 &vec)
216 mV[2] = vec.mV[2]; 268 mV[2] = vec.mV[2];
217} 269}
218 270
271// deprecated
219inline void LLVector3::setVec(const F32 *vec) 272inline void LLVector3::setVec(const F32 *vec)
220{ 273{
221 mV[0] = vec[0]; 274 mV[0] = vec[0];
@@ -223,6 +276,29 @@ inline void LLVector3::setVec(const F32 *vec)
223 mV[2] = vec[2]; 276 mV[2] = vec[2];
224} 277}
225 278
279inline F32 LLVector3::normalize(void)
280{
281 F32 mag = fsqrtf(mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]);
282 F32 oomag;
283
284 if (mag > FP_MAG_THRESHOLD)
285 {
286 oomag = 1.f/mag;
287 mV[0] *= oomag;
288 mV[1] *= oomag;
289 mV[2] *= oomag;
290 }
291 else
292 {
293 mV[0] = 0.f;
294 mV[1] = 0.f;
295 mV[2] = 0.f;
296 mag = 0;
297 }
298 return (mag);
299}
300
301// deprecated
226inline F32 LLVector3::normVec(void) 302inline F32 LLVector3::normVec(void)
227{ 303{
228 F32 mag = fsqrtf(mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]); 304 F32 mag = fsqrtf(mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]);
@@ -247,6 +323,16 @@ inline F32 LLVector3::normVec(void)
247 323
248// LLVector3 Magnitude and Normalization Functions 324// LLVector3 Magnitude and Normalization Functions
249 325
326inline F32 LLVector3::length(void) const
327{
328 return fsqrtf(mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]);
329}
330
331inline F32 LLVector3::lengthSquared(void) const
332{
333 return mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2];
334}
335
250inline F32 LLVector3::magVec(void) const 336inline F32 LLVector3::magVec(void) const
251{ 337{
252 return fsqrtf(mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]); 338 return fsqrtf(mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]);
@@ -257,6 +343,13 @@ inline F32 LLVector3::magVecSquared(void) const
257 return mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]; 343 return mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2];
258} 344}
259 345
346inline BOOL LLVector3::inRange( F32 min, F32 max ) const
347{
348 return mV[0] >= min && mV[0] <= max &&
349 mV[1] >= min && mV[1] <= max &&
350 mV[2] >= min && mV[2] <= max;
351}
352
260inline LLVector3 operator+(const LLVector3 &a, const LLVector3 &b) 353inline LLVector3 operator+(const LLVector3 &a, const LLVector3 &b)
261{ 354{
262 LLVector3 c(a); 355 LLVector3 c(a);
@@ -397,7 +490,7 @@ inline F32 dist_vec_squared2D(const LLVector3 &a, const LLVector3 &b)
397inline LLVector3 projected_vec(const LLVector3 &a, const LLVector3 &b) 490inline LLVector3 projected_vec(const LLVector3 &a, const LLVector3 &b)
398{ 491{
399 LLVector3 project_axis = b; 492 LLVector3 project_axis = b;
400 project_axis.normVec(); 493 project_axis.normalize();
401 return project_axis * (a * project_axis); 494 return project_axis * (a * project_axis);
402} 495}
403 496
@@ -438,8 +531,8 @@ inline F32 angle_between(const LLVector3& a, const LLVector3& b)
438{ 531{
439 LLVector3 an = a; 532 LLVector3 an = a;
440 LLVector3 bn = b; 533 LLVector3 bn = b;
441 an.normVec(); 534 an.normalize();
442 bn.normVec(); 535 bn.normalize();
443 F32 cosine = an * bn; 536 F32 cosine = an * bn;
444 F32 angle = (cosine >= 1.0f) ? 0.0f : 537 F32 angle = (cosine >= 1.0f) ? 0.0f :
445 (cosine <= -1.0f) ? F_PI : 538 (cosine <= -1.0f) ? F_PI :
@@ -451,8 +544,8 @@ inline BOOL are_parallel(const LLVector3 &a, const LLVector3 &b, F32 epsilon)
451{ 544{
452 LLVector3 an = a; 545 LLVector3 an = a;
453 LLVector3 bn = b; 546 LLVector3 bn = b;
454 an.normVec(); 547 an.normalize();
455 bn.normVec(); 548 bn.normalize();
456 F32 dot = an * bn; 549 F32 dot = an * bn;
457 if ( (1.0f - fabs(dot)) < epsilon) 550 if ( (1.0f - fabs(dot)) < epsilon)
458 { 551 {
diff --git a/linden/indra/llmath/v4math.cpp b/linden/indra/llmath/v4math.cpp
index 26a47ff..34b8f07 100644
--- a/linden/indra/llmath/v4math.cpp
+++ b/linden/indra/llmath/v4math.cpp
@@ -113,8 +113,8 @@ F32 angle_between( const LLVector4& a, const LLVector4& b )
113{ 113{
114 LLVector4 an = a; 114 LLVector4 an = a;
115 LLVector4 bn = b; 115 LLVector4 bn = b;
116 an.normVec(); 116 an.normalize();
117 bn.normVec(); 117 bn.normalize();
118 F32 cosine = an * bn; 118 F32 cosine = an * bn;
119 F32 angle = (cosine >= 1.0f) ? 0.0f : 119 F32 angle = (cosine >= 1.0f) ? 0.0f :
120 (cosine <= -1.0f) ? F_PI : 120 (cosine <= -1.0f) ? F_PI :
@@ -126,8 +126,8 @@ BOOL are_parallel(const LLVector4 &a, const LLVector4 &b, F32 epsilon)
126{ 126{
127 LLVector4 an = a; 127 LLVector4 an = a;
128 LLVector4 bn = b; 128 LLVector4 bn = b;
129 an.normVec(); 129 an.normalize();
130 bn.normVec(); 130 bn.normalize();
131 F32 dot = an * bn; 131 F32 dot = an * bn;
132 if ( (1.0f - fabs(dot)) < epsilon) 132 if ( (1.0f - fabs(dot)) < epsilon)
133 return TRUE; 133 return TRUE;
diff --git a/linden/indra/llmath/v4math.h b/linden/indra/llmath/v4math.h
index 60e30e3..4ef2d32 100644
--- a/linden/indra/llmath/v4math.h
+++ b/linden/indra/llmath/v4math.h
@@ -68,17 +68,29 @@ class LLVector4
68 68
69 inline BOOL isFinite() const; // checks to see if all values of LLVector3 are finite 69 inline BOOL isFinite() const; // checks to see if all values of LLVector3 are finite
70 70
71 inline void clearVec(); // Clears LLVector4 to (0, 0, 0, 1) 71 inline void clear(); // Clears LLVector4 to (0, 0, 0, 1)
72 inline void zeroVec(); // zero LLVector4 to (0, 0, 0, 0) 72 inline void clearVec(); // deprecated
73 inline void setVec(F32 x, F32 y, F32 z); // Sets LLVector4 to (x, y, z, 1) 73 inline void zeroVec(); // deprecated
74 inline void setVec(F32 x, F32 y, F32 z, F32 w); // Sets LLVector4 to (x, y, z, w) 74
75 inline void setVec(const LLVector4 &vec); // Sets LLVector4 to vec 75 inline void set(F32 x, F32 y, F32 z); // Sets LLVector4 to (x, y, z, 1)
76 inline void setVec(const LLVector3 &vec, F32 w = 1.f); // Sets LLVector4 to LLVector3 vec 76 inline void set(F32 x, F32 y, F32 z, F32 w); // Sets LLVector4 to (x, y, z, w)
77 inline void setVec(const F32 *vec); // Sets LLVector4 to vec 77 inline void set(const LLVector4 &vec); // Sets LLVector4 to vec
78 78 inline void set(const LLVector3 &vec, F32 w = 1.f); // Sets LLVector4 to LLVector3 vec
79 F32 magVec() const; // Returns magnitude of LLVector4 79 inline void set(const F32 *vec); // Sets LLVector4 to vec
80 F32 magVecSquared() const; // Returns magnitude squared of LLVector4 80
81 F32 normVec(); // Normalizes and returns the magnitude of LLVector4 81 inline void setVec(F32 x, F32 y, F32 z); // deprecated
82 inline void setVec(F32 x, F32 y, F32 z, F32 w); // deprecated
83 inline void setVec(const LLVector4 &vec); // deprecated
84 inline void setVec(const LLVector3 &vec, F32 w = 1.f); // deprecated
85 inline void setVec(const F32 *vec); // deprecated
86
87 F32 length() const; // Returns magnitude of LLVector4
88 F32 lengthSquared() const; // Returns magnitude squared of LLVector4
89 F32 normalize(); // Normalizes and returns the magnitude of LLVector4
90
91 F32 magVec() const; // deprecated
92 F32 magVecSquared() const; // deprecated
93 F32 normVec(); // deprecated
82 94
83 // Sets all values to absolute value of their original values 95 // Sets all values to absolute value of their original values
84 // Returns TRUE if data changed 96 // Returns TRUE if data changed
@@ -192,6 +204,15 @@ inline BOOL LLVector4::isFinite() const
192 204
193// Clear and Assignment Functions 205// Clear and Assignment Functions
194 206
207inline void LLVector4::clear(void)
208{
209 mV[VX] = 0.f;
210 mV[VY] = 0.f;
211 mV[VZ] = 0.f;
212 mV[VW] = 1.f;
213}
214
215// deprecated
195inline void LLVector4::clearVec(void) 216inline void LLVector4::clearVec(void)
196{ 217{
197 mV[VX] = 0.f; 218 mV[VX] = 0.f;
@@ -200,6 +221,7 @@ inline void LLVector4::clearVec(void)
200 mV[VW] = 1.f; 221 mV[VW] = 1.f;
201} 222}
202 223
224// deprecated
203inline void LLVector4::zeroVec(void) 225inline void LLVector4::zeroVec(void)
204{ 226{
205 mV[VX] = 0.f; 227 mV[VX] = 0.f;
@@ -208,6 +230,48 @@ inline void LLVector4::zeroVec(void)
208 mV[VW] = 0.f; 230 mV[VW] = 0.f;
209} 231}
210 232
233inline void LLVector4::set(F32 x, F32 y, F32 z)
234{
235 mV[VX] = x;
236 mV[VY] = y;
237 mV[VZ] = z;
238 mV[VW] = 1.f;
239}
240
241inline void LLVector4::set(F32 x, F32 y, F32 z, F32 w)
242{
243 mV[VX] = x;
244 mV[VY] = y;
245 mV[VZ] = z;
246 mV[VW] = w;
247}
248
249inline void LLVector4::set(const LLVector4 &vec)
250{
251 mV[VX] = vec.mV[VX];
252 mV[VY] = vec.mV[VY];
253 mV[VZ] = vec.mV[VZ];
254 mV[VW] = vec.mV[VW];
255}
256
257inline void LLVector4::set(const LLVector3 &vec, F32 w)
258{
259 mV[VX] = vec.mV[VX];
260 mV[VY] = vec.mV[VY];
261 mV[VZ] = vec.mV[VZ];
262 mV[VW] = w;
263}
264
265inline void LLVector4::set(const F32 *vec)
266{
267 mV[VX] = vec[VX];
268 mV[VY] = vec[VY];
269 mV[VZ] = vec[VZ];
270 mV[VW] = vec[VW];
271}
272
273
274// deprecated
211inline void LLVector4::setVec(F32 x, F32 y, F32 z) 275inline void LLVector4::setVec(F32 x, F32 y, F32 z)
212{ 276{
213 mV[VX] = x; 277 mV[VX] = x;
@@ -216,6 +280,7 @@ inline void LLVector4::setVec(F32 x, F32 y, F32 z)
216 mV[VW] = 1.f; 280 mV[VW] = 1.f;
217} 281}
218 282
283// deprecated
219inline void LLVector4::setVec(F32 x, F32 y, F32 z, F32 w) 284inline void LLVector4::setVec(F32 x, F32 y, F32 z, F32 w)
220{ 285{
221 mV[VX] = x; 286 mV[VX] = x;
@@ -224,6 +289,7 @@ inline void LLVector4::setVec(F32 x, F32 y, F32 z, F32 w)
224 mV[VW] = w; 289 mV[VW] = w;
225} 290}
226 291
292// deprecated
227inline void LLVector4::setVec(const LLVector4 &vec) 293inline void LLVector4::setVec(const LLVector4 &vec)
228{ 294{
229 mV[VX] = vec.mV[VX]; 295 mV[VX] = vec.mV[VX];
@@ -232,6 +298,7 @@ inline void LLVector4::setVec(const LLVector4 &vec)
232 mV[VW] = vec.mV[VW]; 298 mV[VW] = vec.mV[VW];
233} 299}
234 300
301// deprecated
235inline void LLVector4::setVec(const LLVector3 &vec, F32 w) 302inline void LLVector4::setVec(const LLVector3 &vec, F32 w)
236{ 303{
237 mV[VX] = vec.mV[VX]; 304 mV[VX] = vec.mV[VX];
@@ -240,6 +307,7 @@ inline void LLVector4::setVec(const LLVector3 &vec, F32 w)
240 mV[VW] = w; 307 mV[VW] = w;
241} 308}
242 309
310// deprecated
243inline void LLVector4::setVec(const F32 *vec) 311inline void LLVector4::setVec(const F32 *vec)
244{ 312{
245 mV[VX] = vec[VX]; 313 mV[VX] = vec[VX];
@@ -250,6 +318,16 @@ inline void LLVector4::setVec(const F32 *vec)
250 318
251// LLVector4 Magnitude and Normalization Functions 319// LLVector4 Magnitude and Normalization Functions
252 320
321inline F32 LLVector4::length(void) const
322{
323 return fsqrtf(mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ]);
324}
325
326inline F32 LLVector4::lengthSquared(void) const
327{
328 return mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ];
329}
330
253inline F32 LLVector4::magVec(void) const 331inline F32 LLVector4::magVec(void) const
254{ 332{
255 return fsqrtf(mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ]); 333 return fsqrtf(mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ]);
@@ -364,13 +442,13 @@ inline LLVector4 operator-(const LLVector4 &a)
364inline F32 dist_vec(const LLVector4 &a, const LLVector4 &b) 442inline F32 dist_vec(const LLVector4 &a, const LLVector4 &b)
365{ 443{
366 LLVector4 vec = a - b; 444 LLVector4 vec = a - b;
367 return (vec.magVec()); 445 return (vec.length());
368} 446}
369 447
370inline F32 dist_vec_squared(const LLVector4 &a, const LLVector4 &b) 448inline F32 dist_vec_squared(const LLVector4 &a, const LLVector4 &b)
371{ 449{
372 LLVector4 vec = a - b; 450 LLVector4 vec = a - b;
373 return (vec.magVecSquared()); 451 return (vec.lengthSquared());
374} 452}
375 453
376inline LLVector4 lerp(const LLVector4 &a, const LLVector4 &b, F32 u) 454inline LLVector4 lerp(const LLVector4 &a, const LLVector4 &b, F32 u)
@@ -382,6 +460,29 @@ inline LLVector4 lerp(const LLVector4 &a, const LLVector4 &b, F32 u)
382 a.mV[VW] + (b.mV[VW] - a.mV[VW]) * u); 460 a.mV[VW] + (b.mV[VW] - a.mV[VW]) * u);
383} 461}
384 462
463inline F32 LLVector4::normalize(void)
464{
465 F32 mag = fsqrtf(mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ]);
466 F32 oomag;
467
468 if (mag > FP_MAG_THRESHOLD)
469 {
470 oomag = 1.f/mag;
471 mV[VX] *= oomag;
472 mV[VY] *= oomag;
473 mV[VZ] *= oomag;
474 }
475 else
476 {
477 mV[0] = 0.f;
478 mV[1] = 0.f;
479 mV[2] = 0.f;
480 mag = 0;
481 }
482 return (mag);
483}
484
485// deprecated
385inline F32 LLVector4::normVec(void) 486inline F32 LLVector4::normVec(void)
386{ 487{
387 F32 mag = fsqrtf(mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ]); 488 F32 mag = fsqrtf(mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ]);
diff --git a/linden/indra/llmath/xform.h b/linden/indra/llmath/xform.h
index 8fd1e9e..ad2a944 100644
--- a/linden/indra/llmath/xform.h
+++ b/linden/indra/llmath/xform.h
@@ -35,10 +35,12 @@
35#include "m4math.h" 35#include "m4math.h"
36#include "llquaternion.h" 36#include "llquaternion.h"
37 37
38const F32 MAX_OBJECT_Z = 768.f; 38const F32 MAX_OBJECT_Z = 4096.f; // should match REGION_HEIGHT_METERS, Pre-havok4: 768.f
39const F32 MIN_OBJECT_Z = -256.f; 39const F32 MIN_OBJECT_Z = -256.f;
40const F32 MIN_OBJECT_SCALE = 0.01f; 40const F32 DEFAULT_MAX_PRIM_SCALE = 10.f;
41const F32 MAX_OBJECT_SCALE = 10.f; 41const F32 MIN_PRIM_SCALE = 0.01f;
42const F32 MAX_PRIM_SCALE = 65536.f; // something very high but not near FLT_MAX
43
42 44
43class LLXform 45class LLXform
44{ 46{
@@ -138,7 +140,7 @@ public:
138 140
139 void init() 141 void init()
140 { 142 {
141 mWorldMatrix.identity(); 143 mWorldMatrix.setIdentity();
142 mMin.clearVec(); 144 mMin.clearVec();
143 mMax.clearVec(); 145 mMax.clearVec();
144 146
diff --git a/linden/indra/llmedia/llmediaimplllmozlib.cpp b/linden/indra/llmedia/llmediaimplllmozlib.cpp
index 5efaa59..53cb344 100644
--- a/linden/indra/llmedia/llmediaimplllmozlib.cpp
+++ b/linden/indra/llmedia/llmediaimplllmozlib.cpp
@@ -289,7 +289,7 @@ void LLMediaImplLLMozLib::onPageChanged( const EventType& eventIn )
289// virtual 289// virtual
290void LLMediaImplLLMozLib::onClickLinkHref( const EventType& eventIn ) 290void LLMediaImplLLMozLib::onClickLinkHref( const EventType& eventIn )
291{ 291{
292 LLMediaEvent event( this, eventIn.getStringValue() ); 292 LLMediaEvent event( this, eventIn.getStringValue(), eventIn.getStringValue2() );
293 mEventEmitter.update( &LLMediaObserver::onClickLinkHref, event ); 293 mEventEmitter.update( &LLMediaObserver::onClickLinkHref, event );
294} 294}
295 295
diff --git a/linden/indra/llmedia/llmediaimplquicktime.cpp b/linden/indra/llmedia/llmediaimplquicktime.cpp
index f9a3b05..b126e2f 100644
--- a/linden/indra/llmedia/llmediaimplquicktime.cpp
+++ b/linden/indra/llmedia/llmediaimplquicktime.cpp
@@ -256,17 +256,6 @@ bool LLMediaImplQuickTime::sizeChanged()
256 SetMovieGWorld( mMovieHandle, mGWorldHandle, GetGWorldDevice ( mGWorldHandle ) ); 256 SetMovieGWorld( mMovieHandle, mGWorldHandle, GetGWorldDevice ( mGWorldHandle ) );
257 } 257 }
258 258
259 // flip movie to match the way the client expects textures (sigh!)
260 MatrixRecord transform;
261 SetIdentityMatrix( &transform ); // transforms are additive so start from identify matrix
262 double scaleX = 1.0 / (double)LLMediaManager::textureWidthFromMediaWidth( width );
263 double scaleY = -1.0 / (double)LLMediaManager::textureHeightFromMediaHeight( height );
264 double centerX = width / 2.0;
265 double centerY = height / 2.0;
266 ScaleMatrix( &transform, X2Fix ( scaleX ), X2Fix ( scaleY ), X2Fix ( centerX ), X2Fix ( centerY ) );
267 SetMovieMatrix( mMovieHandle, &transform );
268 std::cout << "LLMEDIA> Flipping stream to match expected OpenGL orientation size=" << width << " x " << height << std::endl;
269
270 // update movie controller 259 // update movie controller
271 if ( mMovieController ) 260 if ( mMovieController )
272 { 261 {
@@ -454,10 +443,14 @@ bool LLMediaImplQuickTime::processState()
454bool LLMediaImplQuickTime::setMovieBoxEnhanced( Rect* rect ) 443bool LLMediaImplQuickTime::setMovieBoxEnhanced( Rect* rect )
455{ 444{
456 // get movie rect 445 // get movie rect
457 GetMovieBox( mMovieHandle, rect ); 446 GetMovieNaturalBoundsRect( mMovieHandle, rect );
458 int width = ( rect->right - rect->left ); 447
459 int height = ( rect->bottom - rect->top ); 448 int natural_width = ( rect->right - rect->left );
449 int natural_height = ( rect->bottom - rect->top );
460 450
451 int width = natural_width;
452 int height = natural_height;
453
461 // if the user has requested a specific size, use it: 454 // if the user has requested a specific size, use it:
462 if ((mMediaRequestedWidth != 0) && (mMediaRequestedHeight != 0)) 455 if ((mMediaRequestedWidth != 0) && (mMediaRequestedHeight != 0))
463 { 456 {
@@ -485,12 +478,22 @@ bool LLMediaImplQuickTime::setMovieBoxEnhanced( Rect* rect )
485 if ( height > mMaxHeight ) 478 if ( height > mMaxHeight )
486 height = mMaxHeight; 479 height = mMaxHeight;
487 480
488 // tell quicktime about new size 481
482 // scale movie to fit rect and invert vertically to match opengl image format
483 MatrixRecord transform;
484 SetIdentityMatrix( &transform ); // transforms are additive so start from identify matrix
485 double scaleX = (double) width / natural_width;
486 double scaleY = -1.0 * (double) height / natural_height;
487 double centerX = width / 2.0;
488 double centerY = height / 2.0;
489 ScaleMatrix( &transform, X2Fix ( scaleX ), X2Fix ( scaleY ), X2Fix ( centerX ), X2Fix ( centerY ) );
490 SetMovieMatrix( mMovieHandle, &transform );
491
492 // return the new rect
489 rect->right = width; 493 rect->right = width;
490 rect->bottom = height; 494 rect->bottom = height;
491 rect->left = 0; 495 rect->left = 0;
492 rect->top = 0; 496 rect->top = 0;
493 SetMovieBox( mMovieHandle, rect );
494 497
495 return true; 498 return true;
496} 499}
diff --git a/linden/indra/llmedia/llmediaobserver.h b/linden/indra/llmedia/llmediaobserver.h
index aeb2c39..ec9f881 100644
--- a/linden/indra/llmedia/llmediaobserver.h
+++ b/linden/indra/llmedia/llmediaobserver.h
@@ -47,6 +47,11 @@ class LLMediaEvent
47 { 47 {
48 }; 48 };
49 49
50 LLMediaEvent( LLMediaBase* subject, std::string string_in, std::string string_ex_in ) :
51 mSubject( subject ), mStringValue(string_in), mStringValueEx(string_ex_in)
52 {
53 };
54
50 LLMediaEvent( LLMediaBase* subject, std::string string_in, int int_in ) : 55 LLMediaEvent( LLMediaBase* subject, std::string string_in, int int_in ) :
51 mSubject( subject ), mStringValue(string_in), mIntValue(int_in) 56 mSubject( subject ), mStringValue(string_in), mIntValue(int_in)
52 { 57 {
@@ -74,10 +79,16 @@ class LLMediaEvent
74 return mStringValue; 79 return mStringValue;
75 } 80 }
76 81
82 std::string getStringValueEx() const
83 {
84 return mStringValueEx;
85 }
86
77 private: 87 private:
78 LLMediaBase* mSubject; 88 LLMediaBase* mSubject;
79 int mIntValue; 89 int mIntValue;
80 std::string mStringValue; 90 std::string mStringValue;
91 std::string mStringValueEx;
81}; 92};
82 93
83class LLMediaObserver 94class LLMediaObserver
diff --git a/linden/indra/llmessage/llcachename.cpp b/linden/indra/llmessage/llcachename.cpp
index 6075958..e8208cc 100644
--- a/linden/indra/llmessage/llcachename.cpp
+++ b/linden/indra/llmessage/llcachename.cpp
@@ -43,9 +43,10 @@
43#include "message.h" 43#include "message.h"
44 44
45// Constants 45// Constants
46const char* CN_WAITING = "(waiting)"; 46// probably need a setUIString() call in the interface
47const char* CN_NOBODY = "(nobody)"; 47const char* const CN_WAITING = "(Loading...)"; // *TODO: translate
48const char* CN_NONE = "(none)"; 48const char* const CN_NOBODY = "(nobody)"; // *TODO: translate
49const char* const CN_NONE = "(none)"; // *TODO: translate
49 50
50// llsd serialization constants 51// llsd serialization constants
51static const std::string AGENTS("agents"); 52static const std::string AGENTS("agents");
diff --git a/linden/indra/llmessage/llhttpnode.h b/linden/indra/llmessage/llhttpnode.h
index 7d9cb95..02e8ceb 100644
--- a/linden/indra/llmessage/llhttpnode.h
+++ b/linden/indra/llmessage/llhttpnode.h
@@ -108,7 +108,6 @@ public:
108 virtual void get(ResponsePtr, const LLSD& context) const; 108 virtual void get(ResponsePtr, const LLSD& context) const;
109 virtual void put(ResponsePtr, const LLSD& context, const LLSD& input) const; 109 virtual void put(ResponsePtr, const LLSD& context, const LLSD& input) const;
110 virtual void post(ResponsePtr, const LLSD& context, const LLSD& input) const; 110 virtual void post(ResponsePtr, const LLSD& context, const LLSD& input) const;
111
112 virtual void del(ResponsePtr, const LLSD& context) const; 111 virtual void del(ResponsePtr, const LLSD& context) const;
113 //@} 112 //@}
114 113
diff --git a/linden/indra/llmessage/llinstantmessage.h b/linden/indra/llmessage/llinstantmessage.h
index c6319da..35127c3 100644
--- a/linden/indra/llmessage/llinstantmessage.h
+++ b/linden/indra/llmessage/llinstantmessage.h
@@ -177,7 +177,7 @@ enum EGodlikeRequest
177 GOD_WANTS_NOTHING, 177 GOD_WANTS_NOTHING,
178 178
179 // for requesting physics information about an object 179 // for requesting physics information about an object
180 GOD_WANTS_HAVOK_INFO, 180 GOD_WANTS_PHYSICS_INFO,
181 181
182 // two unused requests that can be appropriated for debug 182 // two unused requests that can be appropriated for debug
183 // purposes (no viewer recompile necessary) 183 // purposes (no viewer recompile necessary)
diff --git a/linden/indra/llmessage/lliohttpserver.cpp b/linden/indra/llmessage/lliohttpserver.cpp
index 6e94ec6..2ebf117 100644
--- a/linden/indra/llmessage/lliohttpserver.cpp
+++ b/linden/indra/llmessage/lliohttpserver.cpp
@@ -203,7 +203,9 @@ LLIOPipe::EStatus LLHTTPPipe::process_impl(
203 } 203 }
204 204
205 // Log all HTTP transactions. 205 // Log all HTTP transactions.
206 llinfos << verb << " " << context[CONTEXT_REQUEST]["path"].asString() 206 // TODO: Add a way to log these to their own file instead of indra.log
207 // It is just too spammy to be in indra.log.
208 lldebugs << verb << " " << context[CONTEXT_REQUEST]["path"].asString()
207 << " " << mStatusCode << " " << mStatusMessage << " " << delta 209 << " " << mStatusCode << " " << mStatusMessage << " " << delta
208 << "s" << llendl; 210 << "s" << llendl;
209 211
@@ -723,8 +725,8 @@ LLIOPipe::EStatus LLHTTPResponder::process_impl(
723 const LLHTTPNode* node = mRootNode.traverse(mPath, context); 725 const LLHTTPNode* node = mRootNode.traverse(mPath, context);
724 if(node) 726 if(node)
725 { 727 {
726 lldebugs << "LLHTTPResponder::process_impl found node for " 728 //llinfos << "LLHTTPResponder::process_impl found node for "
727 << mAbsPathAndQuery << llendl; 729 // << mAbsPathAndQuery << llendl;
728 730
729 // Copy everything after mLast read to the out. 731 // Copy everything after mLast read to the out.
730 LLBufferArray::segment_iterator_t seg_iter; 732 LLBufferArray::segment_iterator_t seg_iter;
diff --git a/linden/indra/llmessage/llmessageconfig.cpp b/linden/indra/llmessage/llmessageconfig.cpp
index 0e7f768..807a35b 100644
--- a/linden/indra/llmessage/llmessageconfig.cpp
+++ b/linden/indra/llmessage/llmessageconfig.cpp
@@ -252,6 +252,14 @@ bool LLMessageConfig::isValidMessage(const std::string& msg_name)
252 return file.mMessages.has(msg_name); 252 return file.mMessages.has(msg_name);
253} 253}
254 254
255//static
256bool LLMessageConfig::onlySendLatest(const std::string& msg_name)
257{
258 LLMessageConfigFile& file = LLMessageConfigFile::instance();
259 LLSD config = file.mMessages[msg_name];
260 return config["only-send-latest"].asBoolean();
261}
262
255bool LLMessageConfig::isCapBanned(const std::string& cap_name) 263bool LLMessageConfig::isCapBanned(const std::string& cap_name)
256{ 264{
257 return LLMessageConfigFile::instance().isCapBanned(cap_name); 265 return LLMessageConfigFile::instance().isCapBanned(cap_name);
diff --git a/linden/indra/llmessage/llmessageconfig.h b/linden/indra/llmessage/llmessageconfig.h
index 32702e8..9b62f06 100644
--- a/linden/indra/llmessage/llmessageconfig.h
+++ b/linden/indra/llmessage/llmessageconfig.h
@@ -53,6 +53,7 @@ public:
53 static Flavor getMessageFlavor(const std::string& msg_name); 53 static Flavor getMessageFlavor(const std::string& msg_name);
54 static SenderTrust getSenderTrustedness(const std::string& msg_name); 54 static SenderTrust getSenderTrustedness(const std::string& msg_name);
55 static bool isValidMessage(const std::string& msg_name); 55 static bool isValidMessage(const std::string& msg_name);
56 static bool onlySendLatest(const std::string& msg_name);
56 static bool isCapBanned(const std::string& cap_name); 57 static bool isCapBanned(const std::string& cap_name);
57 static LLSD getConfigForMessage(const std::string& msg_name); 58 static LLSD getConfigForMessage(const std::string& msg_name);
58}; 59};
diff --git a/linden/indra/llmessage/llmessagetemplate.h b/linden/indra/llmessage/llmessagetemplate.h
index d0ef945..f92c4b7 100644
--- a/linden/indra/llmessage/llmessagetemplate.h
+++ b/linden/indra/llmessage/llmessagetemplate.h
@@ -156,7 +156,7 @@ public:
156 156
157 LLMessageVariable(const char *name, const EMsgVariableType type, const S32 size) : mType(type), mSize(size) 157 LLMessageVariable(const char *name, const EMsgVariableType type, const S32 size) : mType(type), mSize(size)
158 { 158 {
159 mName = gMessageStringTable.getString(name); 159 mName = LLMessageStringTable::getInstance()->getString(name);
160 } 160 }
161 161
162 ~LLMessageVariable() {} 162 ~LLMessageVariable() {}
@@ -187,7 +187,7 @@ class LLMessageBlock
187public: 187public:
188 LLMessageBlock(const char *name, EMsgBlockType type, S32 number = 1) : mType(type), mNumber(number), mTotalSize(0) 188 LLMessageBlock(const char *name, EMsgBlockType type, S32 number = 1) : mType(type), mNumber(number), mTotalSize(0)
189 { 189 {
190 mName = gMessageStringTable.getString(name); 190 mName = LLMessageStringTable::getInstance()->getString(name);
191 } 191 }
192 192
193 ~LLMessageBlock() 193 ~LLMessageBlock()
@@ -293,7 +293,7 @@ public:
293 mHandlerFunc(NULL), 293 mHandlerFunc(NULL),
294 mUserData(NULL) 294 mUserData(NULL)
295 { 295 {
296 mName = gMessageStringTable.getString(name); 296 mName = LLMessageStringTable::getInstance()->getString(name);
297 } 297 }
298 298
299 ~LLMessageTemplate() 299 ~LLMessageTemplate()
diff --git a/linden/indra/llmessage/llnamevalue.cpp b/linden/indra/llmessage/llnamevalue.cpp
index 6c8a2c4..18bd5ac 100644
--- a/linden/indra/llmessage/llnamevalue.cpp
+++ b/linden/indra/llmessage/llnamevalue.cpp
@@ -34,12 +34,12 @@
34 34
35#include "linden_common.h" 35#include "linden_common.h"
36 36
37#include <map>
38
39#include "llnamevalue.h" 37#include "llnamevalue.h"
38
40#include "u64.h" 39#include "u64.h"
41#include "llstring.h" 40#include "llstring.h"
42#include "llcamera.h" 41#include "llcamera.h"
42#include "string_table.h"
43 43
44// Anonymous enumeration to provide constants in this file. 44// Anonymous enumeration to provide constants in this file.
45// *NOTE: These values may be used in sscanf statements below as their 45// *NOTE: These values may be used in sscanf statements below as their
@@ -51,17 +51,7 @@ enum
51 U64_BUFFER_LEN = 64 51 U64_BUFFER_LEN = 64
52}; 52};
53 53
54struct user_callback_t 54LLStringTable gNVNameTable(256);
55{
56 user_callback_t() {};
57 user_callback_t(TNameValueCallback cb, void** data) : m_Callback(cb), m_Data(data) {}
58 TNameValueCallback m_Callback;
59 void ** m_Data;
60};
61typedef std::map<char *, user_callback_t> user_callback_map_t;
62user_callback_map_t gUserCallbackMap;
63
64LLStringTable gNVNameTable(16384);
65 55
66char NameValueTypeStrings[NVT_EOF][NAME_VALUE_TYPE_STRING_LENGTH] = /*Flawfinder: Ignore*/ 56char NameValueTypeStrings[NVT_EOF][NAME_VALUE_TYPE_STRING_LENGTH] = /*Flawfinder: Ignore*/
67{ 57{
@@ -80,8 +70,7 @@ char NameValueClassStrings[NVC_EOF][NAME_VALUE_CLASS_STRING_LENGTH] = /*Flawfind
80{ 70{
81 "NULL", 71 "NULL",
82 "R", // read only 72 "R", // read only
83 "RW", // read write 73 "RW" // read write
84 "CB" // callback
85}; 74};
86 75
87char NameValueSendtoStrings[NVS_EOF][NAME_VALUE_SENDTO_STRING_LENGTH] = /*Flawfinder: Ignore*/ 76char NameValueSendtoStrings[NVS_EOF][NAME_VALUE_SENDTO_STRING_LENGTH] = /*Flawfinder: Ignore*/
@@ -94,13 +83,6 @@ char NameValueSendtoStrings[NVS_EOF][NAME_VALUE_SENDTO_STRING_LENGTH] = /*Flawfi
94}; /*Flawfinder: Ignore*/ 83}; /*Flawfinder: Ignore*/
95 84
96 85
97void add_use_callback(char *name, TNameValueCallback ucb, void **user_data)
98{
99 char *temp = gNVNameTable.addString(name);
100 gUserCallbackMap[temp] = user_callback_t(ucb,user_data);
101}
102
103
104// 86//
105// Class 87// Class
106// 88//
@@ -125,12 +107,9 @@ void LLNameValue::baseInit()
125 107
126 mSendto = NVS_NULL; 108 mSendto = NVS_NULL;
127 mStringSendto = NameValueSendtoStrings[NVS_NULL]; 109 mStringSendto = NameValueSendtoStrings[NVS_NULL];
128
129 mNameValueCB = NULL;
130 mUserData = NULL;
131} 110}
132 111
133void LLNameValue::init(const char *name, const char *data, const char *type, const char *nvclass, const char *nvsendto, TNameValueCallback nvcb, void **user_data) 112void LLNameValue::init(const char *name, const char *data, const char *type, const char *nvclass, const char *nvsendto)
134{ 113{
135 mNVNameTable = &gNVNameTable; 114 mNVNameTable = &gNVNameTable;
136 115
@@ -254,40 +233,11 @@ void LLNameValue::init(const char *name, const char *data, const char *type, con
254 mClass = NVC_READ_WRITE; 233 mClass = NVC_READ_WRITE;
255 mStringClass = mNVNameTable->addString("RW"); 234 mStringClass = mNVNameTable->addString("RW");
256 } 235 }
257 else if (!strcmp(nvclass, "CB") ||
258 !strcmp(nvclass, "CALLBACK")) // legacy
259 {
260 mClass = NVC_CALLBACK;
261 mStringClass = mNVNameTable->addString("CB");
262 mNameValueCB = nvcb;
263 mUserData = user_data;
264 }
265 else 236 else
266 { 237 {
267 // assume it's bad 238 // assume it's bad
268 mClass = NVC_NULL; 239 mClass = NVC_NULL;
269 mStringClass = mNVNameTable->addString(nvclass); 240 mStringClass = mNVNameTable->addString(nvclass);
270 mNameValueCB = NULL;
271 mUserData = NULL;
272
273 // are we a user-defined call back?
274 for (user_callback_map_t::iterator iter = gUserCallbackMap.begin();
275 iter != gUserCallbackMap.end(); iter++)
276 {
277 char* tname = iter->first;
278 if (tname == mStringClass)
279 {
280 mClass = NVC_CALLBACK;
281 mNameValueCB = (iter->second).m_Callback;
282 mUserData = (iter->second).m_Data;
283 }
284 }
285
286 // Warn if we didn't find a callback
287 if (mClass == NVC_NULL)
288 {
289 llwarns << "Unknown user callback in name value init() for " << mName << llendl;
290 }
291 } 241 }
292 242
293 // Initialize the sendto variable 243 // Initialize the sendto variable
@@ -326,24 +276,24 @@ void LLNameValue::init(const char *name, const char *data, const char *type, con
326} 276}
327 277
328 278
329LLNameValue::LLNameValue(const char *name, const char *data, const char *type, const char *nvclass, TNameValueCallback nvcb, void **user_data) 279LLNameValue::LLNameValue(const char *name, const char *data, const char *type, const char *nvclass)
330{ 280{
331 baseInit(); 281 baseInit();
332 // if not specified, send to simulator only 282 // if not specified, send to simulator only
333 init(name, data, type, nvclass, "SIM", nvcb, user_data); 283 init(name, data, type, nvclass, "SIM");
334} 284}
335 285
336 286
337LLNameValue::LLNameValue(const char *name, const char *data, const char *type, const char *nvclass, const char *nvsendto, TNameValueCallback nvcb, void **user_data) 287LLNameValue::LLNameValue(const char *name, const char *data, const char *type, const char *nvclass, const char *nvsendto)
338{ 288{
339 baseInit(); 289 baseInit();
340 init(name, data, type, nvclass, nvsendto, nvcb, user_data); 290 init(name, data, type, nvclass, nvsendto);
341} 291}
342 292
343 293
344 294
345// Initialize without any initial data. 295// Initialize without any initial data.
346LLNameValue::LLNameValue(const char *name, const char *type, const char *nvclass, TNameValueCallback nvcb, void **user_data) 296LLNameValue::LLNameValue(const char *name, const char *type, const char *nvclass)
347{ 297{
348 baseInit(); 298 baseInit();
349 mName = mNVNameTable->addString(name); 299 mName = mNVNameTable->addString(name);
@@ -401,11 +351,9 @@ LLNameValue::LLNameValue(const char *name, const char *type, const char *nvclass
401 { 351 {
402 mClass = NVC_READ_WRITE; 352 mClass = NVC_READ_WRITE;
403 } 353 }
404 else if (!strcmp(mStringClass, "CALLBACK")) 354 else
405 { 355 {
406 mClass = NVC_READ_WRITE; 356 mClass = NVC_NULL;
407 mNameValueCB = nvcb;
408 mUserData = user_data;
409 } 357 }
410 358
411 // Initialize the sendto variable 359 // Initialize the sendto variable
@@ -734,46 +682,6 @@ LLVector3 *LLNameValue::getVec3()
734} 682}
735 683
736 684
737F32 LLNameValue::magnitude()
738{
739 switch(mType)
740 {
741 case NVT_STRING:
742 return (F32)(strlen(mNameValueReference.string)); /* Flawfinder: ignore */
743 break;
744 case NVT_F32:
745 return (fabsf(*mNameValueReference.f32));
746 break;
747 case NVT_S32:
748 return (fabsf((F32)(*mNameValueReference.s32)));
749 break;
750 case NVT_VEC3:
751 return (mNameValueReference.vec3->magVec());
752 break;
753 case NVT_U32:
754 return (F32)(*mNameValueReference.u32);
755 break;
756 default:
757 llerrs << "No magnitude operation for NV type " << mStringType << llendl;
758 break;
759 }
760 return 0.f;
761}
762
763
764void LLNameValue::callCallback()
765{
766 if (mNameValueCB)
767 {
768 (*mNameValueCB)(this, mUserData);
769 }
770 else
771 {
772 llinfos << mName << " has no callback!" << llendl;
773 }
774}
775
776
777BOOL LLNameValue::sendToData() const 685BOOL LLNameValue::sendToData() const
778{ 686{
779 return (mSendto == NVS_DATA_SIM || mSendto == NVS_DATA_SIM_VIEWER); 687 return (mSendto == NVS_DATA_SIM || mSendto == NVS_DATA_SIM_VIEWER);
@@ -795,13 +703,6 @@ LLNameValue &LLNameValue::operator=(const LLNameValue &a)
795 if (mClass == NVC_READ_ONLY) 703 if (mClass == NVC_READ_ONLY)
796 return *this; 704 return *this;
797 705
798 BOOL b_changed = FALSE;
799 if ( (mClass == NVC_CALLBACK)
800 &&(*this != a))
801 {
802 b_changed = TRUE;
803 }
804
805 switch(a.mType) 706 switch(a.mType)
806 { 707 {
807 case NVT_STRING: 708 case NVT_STRING:
@@ -835,11 +736,6 @@ LLNameValue &LLNameValue::operator=(const LLNameValue &a)
835 break; 736 break;
836 } 737 }
837 738
838 if (b_changed)
839 {
840 callCallback();
841 }
842
843 return *this; 739 return *this;
844} 740}
845 741
@@ -847,19 +743,12 @@ void LLNameValue::setString(const char *a)
847{ 743{
848 if (mClass == NVC_READ_ONLY) 744 if (mClass == NVC_READ_ONLY)
849 return; 745 return;
850 BOOL b_changed = FALSE;
851 746
852 switch(mType) 747 switch(mType)
853 { 748 {
854 case NVT_STRING: 749 case NVT_STRING:
855 if (a) 750 if (a)
856 { 751 {
857 if ( (mClass == NVC_CALLBACK)
858 &&(strcmp(this->mNameValueReference.string,a)))
859 {
860 b_changed = TRUE;
861 }
862
863 if (mNameValueReference.string) 752 if (mNameValueReference.string)
864 { 753 {
865 delete [] mNameValueReference.string; 754 delete [] mNameValueReference.string;
@@ -870,11 +759,6 @@ void LLNameValue::setString(const char *a)
870 { 759 {
871 strcpy(mNameValueReference.string, a); /* Flawfinder: ignore */ 760 strcpy(mNameValueReference.string, a); /* Flawfinder: ignore */
872 } 761 }
873
874 if (b_changed)
875 {
876 callCallback();
877 }
878 } 762 }
879 else 763 else
880 { 764 {
@@ -889,11 +773,6 @@ void LLNameValue::setString(const char *a)
889 break; 773 break;
890 } 774 }
891 775
892 if (b_changed)
893 {
894 callCallback();
895 }
896
897 return; 776 return;
898} 777}
899 778
@@ -902,19 +781,12 @@ void LLNameValue::setAsset(const char *a)
902{ 781{
903 if (mClass == NVC_READ_ONLY) 782 if (mClass == NVC_READ_ONLY)
904 return; 783 return;
905 BOOL b_changed = FALSE;
906 784
907 switch(mType) 785 switch(mType)
908 { 786 {
909 case NVT_ASSET: 787 case NVT_ASSET:
910 if (a) 788 if (a)
911 { 789 {
912 if ( (mClass == NVC_CALLBACK)
913 &&(strcmp(this->mNameValueReference.string,a)))
914 {
915 b_changed = TRUE;
916 }
917
918 if (mNameValueReference.string) 790 if (mNameValueReference.string)
919 { 791 {
920 delete [] mNameValueReference.string; 792 delete [] mNameValueReference.string;
@@ -924,11 +796,6 @@ void LLNameValue::setAsset(const char *a)
924 { 796 {
925 strcpy(mNameValueReference.string, a); /* Flawfinder: ignore */ 797 strcpy(mNameValueReference.string, a); /* Flawfinder: ignore */
926 } 798 }
927
928 if (b_changed)
929 {
930 callCallback();
931 }
932 } 799 }
933 else 800 else
934 { 801 {
@@ -942,10 +809,6 @@ void LLNameValue::setAsset(const char *a)
942 default: 809 default:
943 break; 810 break;
944 } 811 }
945 if (b_changed)
946 {
947 callCallback();
948 }
949} 812}
950 813
951 814
@@ -953,29 +816,15 @@ void LLNameValue::setF32(const F32 a)
953{ 816{
954 if (mClass == NVC_READ_ONLY) 817 if (mClass == NVC_READ_ONLY)
955 return; 818 return;
956 BOOL b_changed = FALSE;
957 819
958 switch(mType) 820 switch(mType)
959 { 821 {
960 case NVT_F32: 822 case NVT_F32:
961 if ( (mClass == NVC_CALLBACK)
962 &&(*this->mNameValueReference.f32 != a))
963 {
964 b_changed = TRUE;
965 }
966 *mNameValueReference.f32 = a; 823 *mNameValueReference.f32 = a;
967 if (b_changed)
968 {
969 callCallback();
970 }
971 break; 824 break;
972 default: 825 default:
973 break; 826 break;
974 } 827 }
975 if (b_changed)
976 {
977 callCallback();
978 }
979 828
980 return; 829 return;
981} 830}
@@ -985,53 +834,21 @@ void LLNameValue::setS32(const S32 a)
985{ 834{
986 if (mClass == NVC_READ_ONLY) 835 if (mClass == NVC_READ_ONLY)
987 return; 836 return;
988 BOOL b_changed = FALSE;
989 837
990 switch(mType) 838 switch(mType)
991 { 839 {
992 case NVT_S32: 840 case NVT_S32:
993 if ( (mClass == NVC_CALLBACK)
994 &&(*this->mNameValueReference.s32 != a))
995 {
996 b_changed = TRUE;
997 }
998 *mNameValueReference.s32 = a; 841 *mNameValueReference.s32 = a;
999 if (b_changed)
1000 {
1001 callCallback();
1002 }
1003 break; 842 break;
1004 case NVT_U32: 843 case NVT_U32:
1005 if ( (mClass == NVC_CALLBACK)
1006 && ((S32) (*this->mNameValueReference.u32) != a))
1007 {
1008 b_changed = TRUE;
1009 }
1010 *mNameValueReference.u32 = a; 844 *mNameValueReference.u32 = a;
1011 if (b_changed)
1012 {
1013 callCallback();
1014 }
1015 break; 845 break;
1016 case NVT_F32: 846 case NVT_F32:
1017 if ( (mClass == NVC_CALLBACK)
1018 &&(*this->mNameValueReference.f32 != a))
1019 {
1020 b_changed = TRUE;
1021 }
1022 *mNameValueReference.f32 = (F32)a; 847 *mNameValueReference.f32 = (F32)a;
1023 if (b_changed)
1024 {
1025 callCallback();
1026 }
1027 break; 848 break;
1028 default: 849 default:
1029 break; 850 break;
1030 } 851 }
1031 if (b_changed)
1032 {
1033 callCallback();
1034 }
1035 852
1036 return; 853 return;
1037} 854}
@@ -1041,45 +858,17 @@ void LLNameValue::setU32(const U32 a)
1041{ 858{
1042 if (mClass == NVC_READ_ONLY) 859 if (mClass == NVC_READ_ONLY)
1043 return; 860 return;
1044 BOOL b_changed = FALSE;
1045 861
1046 switch(mType) 862 switch(mType)
1047 { 863 {
1048 case NVT_S32: 864 case NVT_S32:
1049 if ( (mClass == NVC_CALLBACK)
1050 &&(*this->mNameValueReference.s32 != (S32) a))
1051 {
1052 b_changed = TRUE;
1053 }
1054 *mNameValueReference.s32 = a; 865 *mNameValueReference.s32 = a;
1055 if (b_changed)
1056 {
1057 callCallback();
1058 }
1059 break; 866 break;
1060 case NVT_U32: 867 case NVT_U32:
1061 if ( (mClass == NVC_CALLBACK)
1062 &&(*this->mNameValueReference.u32 != a))
1063 {
1064 b_changed = TRUE;
1065 }
1066 *mNameValueReference.u32 = a; 868 *mNameValueReference.u32 = a;
1067 if (b_changed)
1068 {
1069 callCallback();
1070 }
1071 break; 869 break;
1072 case NVT_F32: 870 case NVT_F32:
1073 if ( (mClass == NVC_CALLBACK)
1074 &&(*this->mNameValueReference.f32 != a))
1075 {
1076 b_changed = TRUE;
1077 }
1078 *mNameValueReference.f32 = (F32)a; 871 *mNameValueReference.f32 = (F32)a;
1079 if (b_changed)
1080 {
1081 callCallback();
1082 }
1083 break; 872 break;
1084 default: 873 default:
1085 llerrs << "NameValue: Trying to set U32 into a " << mStringType << ", unknown conversion" << llendl; 874 llerrs << "NameValue: Trying to set U32 into a " << mStringType << ", unknown conversion" << llendl;
@@ -1093,21 +882,11 @@ void LLNameValue::setVec3(const LLVector3 &a)
1093{ 882{
1094 if (mClass == NVC_READ_ONLY) 883 if (mClass == NVC_READ_ONLY)
1095 return; 884 return;
1096 BOOL b_changed = FALSE;
1097 885
1098 switch(mType) 886 switch(mType)
1099 { 887 {
1100 case NVT_VEC3: 888 case NVT_VEC3:
1101 if ( (mClass == NVC_CALLBACK)
1102 &&(*this->mNameValueReference.vec3 != a))
1103 {
1104 b_changed = TRUE;
1105 }
1106 *mNameValueReference.vec3 = a; 889 *mNameValueReference.vec3 = a;
1107 if (b_changed)
1108 {
1109 callCallback();
1110 }
1111 break; 890 break;
1112 default: 891 default:
1113 llerrs << "NameValue: Trying to set LLVector3 into a " << mStringType << ", unknown conversion" << llendl; 892 llerrs << "NameValue: Trying to set LLVector3 into a " << mStringType << ", unknown conversion" << llendl;
@@ -1117,29 +896,6 @@ void LLNameValue::setVec3(const LLVector3 &a)
1117} 896}
1118 897
1119 898
1120BOOL LLNameValue::nonzero()
1121{
1122 switch(mType)
1123 {
1124 case NVT_STRING:
1125 if (!mNameValueReference.string)
1126 return 0;
1127 return (mNameValueReference.string[0] != 0);
1128 case NVT_F32:
1129 return (*mNameValueReference.f32 != 0.f);
1130 case NVT_S32:
1131 return (*mNameValueReference.s32 != 0);
1132 case NVT_U32:
1133 return (*mNameValueReference.u32 != 0);
1134 case NVT_VEC3:
1135 return (mNameValueReference.vec3->magVecSquared() != 0.f);
1136 default:
1137 llerrs << "NameValue: Trying to call nonzero on a " << mStringType << ", unknown conversion" << llendl;
1138 break;
1139 }
1140 return FALSE;
1141}
1142
1143std::string LLNameValue::printNameValue() 899std::string LLNameValue::printNameValue()
1144{ 900{
1145 std::string buffer; 901 std::string buffer;
@@ -1217,951 +973,3 @@ std::ostream& operator<<(std::ostream& s, const LLNameValue &a)
1217 return s; 973 return s;
1218} 974}
1219 975
1220
1221// nota bene: return values aren't static for now to prevent memory leaks
1222
1223LLNameValue &operator+(const LLNameValue &a, const LLNameValue &b)
1224{
1225 static LLNameValue retval;
1226
1227 switch(a.mType)
1228 {
1229 case NVT_STRING:
1230 if (b.mType == NVT_STRING)
1231 {
1232 retval.mType = a.mType;
1233 retval.mStringType = NameValueTypeStrings[a.mType];
1234
1235 S32 length1 = (S32)strlen(a.mNameValueReference.string); /* Flawfinder: Ignore */
1236 S32 length2 = (S32)strlen(b.mNameValueReference.string); /* Flawfinder: Ignore */
1237 delete [] retval.mNameValueReference.string;
1238 retval.mNameValueReference.string = new char[length1 + length2 + 1];
1239 if(retval.mNameValueReference.string != NULL)
1240 {
1241 strcpy(retval.mNameValueReference.string, a.mNameValueReference.string); /* Flawfinder: Ignore */
1242 strcat(retval.mNameValueReference.string, b.mNameValueReference.string); /* Flawfinder: Ignore */
1243 }
1244 }
1245 break;
1246 case NVT_F32:
1247 if (b.mType == NVT_F32)
1248 {
1249 retval.mType = NVT_F32;
1250 retval.mStringType = NameValueTypeStrings[NVT_F32];
1251 delete retval.mNameValueReference.f32;
1252 retval.mNameValueReference.f32 = new F32(*a.mNameValueReference.f32 + *b.mNameValueReference.f32);
1253 }
1254 else if (b.mType == NVT_S32)
1255 {
1256 retval.mType = NVT_F32;
1257 retval.mStringType = NameValueTypeStrings[NVT_F32];
1258 delete retval.mNameValueReference.f32;
1259 retval.mNameValueReference.f32 = new F32(*a.mNameValueReference.f32 + *b.mNameValueReference.s32);
1260 }
1261 else if (b.mType == NVT_U32)
1262 {
1263 retval.mType = NVT_F32;
1264 retval.mStringType = NameValueTypeStrings[NVT_F32];
1265 delete retval.mNameValueReference.f32;
1266 retval.mNameValueReference.f32 = new F32(*a.mNameValueReference.f32 + *b.mNameValueReference.u32);
1267 }
1268 break;
1269 case NVT_S32:
1270 if (b.mType == NVT_F32)
1271 {
1272 retval.mType = NVT_F32;
1273 retval.mStringType = NameValueTypeStrings[NVT_F32];
1274 delete retval.mNameValueReference.f32;
1275 retval.mNameValueReference.f32 = new F32(*a.mNameValueReference.s32 + *b.mNameValueReference.f32);
1276 }
1277 else if (b.mType == NVT_S32)
1278 {
1279 retval.mType = NVT_S32;
1280 retval.mStringType = NameValueTypeStrings[NVT_S32];
1281 delete retval.mNameValueReference.s32;
1282 retval.mNameValueReference.s32 = new S32(*a.mNameValueReference.s32 + *b.mNameValueReference.s32);
1283 }
1284 else if (b.mType == NVT_U32)
1285 {
1286 retval.mType = NVT_S32;
1287 retval.mStringType = NameValueTypeStrings[NVT_S32];
1288 delete retval.mNameValueReference.s32;
1289 retval.mNameValueReference.s32 = new S32(*a.mNameValueReference.s32 + *b.mNameValueReference.u32);
1290 }
1291 break;
1292 case NVT_U32:
1293 if (b.mType == NVT_F32)
1294 {
1295 retval.mType = NVT_F32;
1296 retval.mStringType = NameValueTypeStrings[NVT_F32];
1297 delete retval.mNameValueReference.f32;
1298 retval.mNameValueReference.f32 = new F32(*a.mNameValueReference.u32 + *b.mNameValueReference.f32);
1299 }
1300 else if (b.mType == NVT_S32)
1301 {
1302 retval.mType = NVT_S32;
1303 retval.mStringType = NameValueTypeStrings[NVT_S32];
1304 delete retval.mNameValueReference.s32;
1305 retval.mNameValueReference.s32 = new S32(*a.mNameValueReference.u32 + *b.mNameValueReference.s32);
1306 }
1307 else if (b.mType == NVT_U32)
1308 {
1309 retval.mType = NVT_U32;
1310 retval.mStringType = NameValueTypeStrings[NVT_U32];
1311 delete retval.mNameValueReference.u32;
1312 retval.mNameValueReference.u32 = new U32(*a.mNameValueReference.u32 + *b.mNameValueReference.u32);
1313 }
1314 break;
1315 case NVT_VEC3:
1316 if ( (a.mType == b.mType)
1317 &&(a.mType == NVT_VEC3))
1318 {
1319 retval.mType = a.mType;
1320 retval.mStringType = NameValueTypeStrings[a.mType];
1321 delete retval.mNameValueReference.vec3;
1322 retval.mNameValueReference.vec3 = new LLVector3(*a.mNameValueReference.vec3 + *b.mNameValueReference.vec3);
1323 }
1324 break;
1325 default:
1326 llerrs << "Unknown add of NV type " << a.mStringType << " to " << b.mStringType << llendl;
1327 break;
1328 }
1329 return retval;
1330}
1331
1332LLNameValue &operator-(const LLNameValue &a, const LLNameValue &b)
1333{
1334 static LLNameValue retval;
1335
1336 switch(a.mType)
1337 {
1338 case NVT_STRING:
1339 break;
1340 case NVT_F32:
1341 if (b.mType == NVT_F32)
1342 {
1343 retval.mType = NVT_F32;
1344 retval.mStringType = NameValueTypeStrings[NVT_F32];
1345 delete retval.mNameValueReference.f32;
1346 retval.mNameValueReference.f32 = new F32(*a.mNameValueReference.f32 - *b.mNameValueReference.f32);
1347 }
1348 else if (b.mType == NVT_S32)
1349 {
1350 retval.mType = NVT_F32;
1351 retval.mStringType = NameValueTypeStrings[NVT_F32];
1352 delete retval.mNameValueReference.f32;
1353 retval.mNameValueReference.f32 = new F32(*a.mNameValueReference.f32 - *b.mNameValueReference.s32);
1354 }
1355 else if (b.mType == NVT_U32)
1356 {
1357 retval.mType = NVT_F32;
1358 retval.mStringType = NameValueTypeStrings[NVT_F32];
1359 delete retval.mNameValueReference.f32;
1360 retval.mNameValueReference.f32 = new F32(*a.mNameValueReference.f32 - *b.mNameValueReference.u32);
1361 }
1362 break;
1363 case NVT_S32:
1364 if (b.mType == NVT_F32)
1365 {
1366 retval.mType = NVT_F32;
1367 retval.mStringType = NameValueTypeStrings[NVT_F32];
1368 delete retval.mNameValueReference.f32;
1369 retval.mNameValueReference.f32 = new F32(*a.mNameValueReference.s32 - *b.mNameValueReference.f32);
1370 }
1371 else if (b.mType == NVT_S32)
1372 {
1373 retval.mType = NVT_S32;
1374 retval.mStringType = NameValueTypeStrings[NVT_S32];
1375 delete retval.mNameValueReference.s32;
1376 retval.mNameValueReference.s32 = new S32(*a.mNameValueReference.s32 - *b.mNameValueReference.s32);
1377 }
1378 else if (b.mType == NVT_U32)
1379 {
1380 retval.mType = NVT_S32;
1381 retval.mStringType = NameValueTypeStrings[NVT_S32];
1382 delete retval.mNameValueReference.s32;
1383 retval.mNameValueReference.s32 = new S32(*a.mNameValueReference.s32 - *b.mNameValueReference.u32);
1384 }
1385 break;
1386 case NVT_U32:
1387 if (b.mType == NVT_F32)
1388 {
1389 retval.mType = NVT_F32;
1390 retval.mStringType = NameValueTypeStrings[NVT_F32];
1391 delete retval.mNameValueReference.f32;
1392 retval.mNameValueReference.f32 = new F32(*a.mNameValueReference.u32 - *b.mNameValueReference.f32);
1393 }
1394 else if (b.mType == NVT_S32)
1395 {
1396 retval.mType = NVT_S32;
1397 retval.mStringType = NameValueTypeStrings[NVT_S32];
1398 delete retval.mNameValueReference.s32;
1399 retval.mNameValueReference.s32 = new S32(*a.mNameValueReference.u32 - *b.mNameValueReference.s32);
1400 }
1401 else if (b.mType == NVT_U32)
1402 {
1403 retval.mType = NVT_U32;
1404 retval.mStringType = NameValueTypeStrings[NVT_U32];
1405 delete retval.mNameValueReference.u32;
1406 retval.mNameValueReference.u32 = new U32(*a.mNameValueReference.u32 - *b.mNameValueReference.u32);
1407 }
1408 break;
1409 case NVT_VEC3:
1410 if ( (a.mType == b.mType)
1411 &&(a.mType == NVT_VEC3))
1412 {
1413 retval.mType = a.mType;
1414 retval.mStringType = NameValueTypeStrings[a.mType];
1415 delete retval.mNameValueReference.vec3;
1416 retval.mNameValueReference.vec3 = new LLVector3(*a.mNameValueReference.vec3 - *b.mNameValueReference.vec3);
1417 }
1418 break;
1419 default:
1420 llerrs << "Unknown subtract of NV type " << a.mStringType << " to " << b.mStringType << llendl;
1421 break;
1422 }
1423 return retval;
1424}
1425
1426LLNameValue &operator*(const LLNameValue &a, const LLNameValue &b)
1427{
1428 static LLNameValue retval;
1429
1430 switch(a.mType)
1431 {
1432 case NVT_STRING:
1433 break;
1434 case NVT_F32:
1435 if (b.mType == NVT_F32)
1436 {
1437 retval.mType = NVT_F32;
1438 retval.mStringType = NameValueTypeStrings[NVT_F32];
1439 delete retval.mNameValueReference.f32;
1440 retval.mNameValueReference.f32 = new F32(*a.mNameValueReference.f32 * *b.mNameValueReference.f32);
1441 }
1442 else if (b.mType == NVT_S32)
1443 {
1444 retval.mType = NVT_F32;
1445 retval.mStringType = NameValueTypeStrings[NVT_F32];
1446 delete retval.mNameValueReference.f32;
1447 retval.mNameValueReference.f32 = new F32(*a.mNameValueReference.f32 * *b.mNameValueReference.s32);
1448 }
1449 else if (b.mType == NVT_U32)
1450 {
1451 retval.mType = NVT_F32;
1452 retval.mStringType = NameValueTypeStrings[NVT_F32];
1453 delete retval.mNameValueReference.f32;
1454 retval.mNameValueReference.f32 = new F32(*a.mNameValueReference.f32 * *b.mNameValueReference.u32);
1455 }
1456 break;
1457 case NVT_S32:
1458 if (b.mType == NVT_F32)
1459 {
1460 retval.mType = NVT_F32;
1461 retval.mStringType = NameValueTypeStrings[NVT_F32];
1462 delete retval.mNameValueReference.f32;
1463 retval.mNameValueReference.f32 = new F32(*a.mNameValueReference.s32 * *b.mNameValueReference.f32);
1464 }
1465 else if (b.mType == NVT_S32)
1466 {
1467 retval.mType = NVT_S32;
1468 retval.mStringType = NameValueTypeStrings[NVT_S32];
1469 delete retval.mNameValueReference.s32;
1470 retval.mNameValueReference.s32 = new S32(*a.mNameValueReference.s32 * *b.mNameValueReference.s32);
1471 }
1472 else if (b.mType == NVT_U32)
1473 {
1474 retval.mType = NVT_S32;
1475 retval.mStringType = NameValueTypeStrings[NVT_S32];
1476 delete retval.mNameValueReference.s32;
1477 retval.mNameValueReference.s32 = new S32(*a.mNameValueReference.s32 * *b.mNameValueReference.u32);
1478 }
1479 break;
1480 case NVT_U32:
1481 if (b.mType == NVT_F32)
1482 {
1483 retval.mType = NVT_F32;
1484 retval.mStringType = NameValueTypeStrings[NVT_F32];
1485 delete retval.mNameValueReference.f32;
1486 retval.mNameValueReference.f32 = new F32(*a.mNameValueReference.u32 * *b.mNameValueReference.f32);
1487 }
1488 else if (b.mType == NVT_S32)
1489 {
1490 retval.mType = NVT_S32;
1491 retval.mStringType = NameValueTypeStrings[NVT_S32];
1492 delete retval.mNameValueReference.s32;
1493 retval.mNameValueReference.s32 = new S32(*a.mNameValueReference.u32 * *b.mNameValueReference.s32);
1494 }
1495 else if (b.mType == NVT_U32)
1496 {
1497 retval.mType = NVT_U32;
1498 retval.mStringType = NameValueTypeStrings[NVT_U32];
1499 delete retval.mNameValueReference.u32;
1500 retval.mNameValueReference.u32 = new U32(*a.mNameValueReference.u32 * *b.mNameValueReference.u32);
1501 }
1502 break;
1503 case NVT_VEC3:
1504 if ( (a.mType == b.mType)
1505 &&(a.mType == NVT_VEC3))
1506 {
1507 retval.mType = NVT_F32;
1508 retval.mStringType = NameValueTypeStrings[a.mType];
1509 delete retval.mNameValueReference.f32;
1510 retval.mNameValueReference.f32 = new F32((*a.mNameValueReference.vec3) * (*b.mNameValueReference.vec3));
1511 }
1512 break;
1513 default:
1514 llerrs << "Unknown multiply of NV type " << a.mStringType << " to " << b.mStringType << llendl;
1515 break;
1516 }
1517 return retval;
1518}
1519
1520LLNameValue &operator/(const LLNameValue &a, const LLNameValue &b)
1521{
1522 static LLNameValue retval;
1523
1524 switch(a.mType)
1525 {
1526 case NVT_STRING:
1527 break;
1528 case NVT_F32:
1529 if (b.mType == NVT_F32)
1530 {
1531 retval.mType = NVT_F32;
1532 retval.mStringType = NameValueTypeStrings[NVT_F32];
1533 delete retval.mNameValueReference.f32;
1534 retval.mNameValueReference.f32 = new F32(*a.mNameValueReference.f32 / *b.mNameValueReference.f32);
1535 }
1536 else if (b.mType == NVT_S32)
1537 {
1538 retval.mType = NVT_F32;
1539 retval.mStringType = NameValueTypeStrings[NVT_F32];
1540 delete retval.mNameValueReference.f32;
1541 retval.mNameValueReference.f32 = new F32(*a.mNameValueReference.f32 / *b.mNameValueReference.s32);
1542 }
1543 else if (b.mType == NVT_U32)
1544 {
1545 retval.mType = NVT_F32;
1546 retval.mStringType = NameValueTypeStrings[NVT_F32];
1547 delete retval.mNameValueReference.f32;
1548 retval.mNameValueReference.f32 = new F32(*a.mNameValueReference.f32 / *b.mNameValueReference.u32);
1549 }
1550 break;
1551 case NVT_S32:
1552 if (b.mType == NVT_F32)
1553 {
1554 retval.mType = NVT_F32;
1555 retval.mStringType = NameValueTypeStrings[NVT_F32];
1556 delete retval.mNameValueReference.f32;
1557 retval.mNameValueReference.f32 = new F32(*a.mNameValueReference.s32 / *b.mNameValueReference.f32);
1558 }
1559 else if (b.mType == NVT_S32)
1560 {
1561 retval.mType = NVT_S32;
1562 retval.mStringType = NameValueTypeStrings[NVT_S32];
1563 delete retval.mNameValueReference.s32;
1564 retval.mNameValueReference.s32 = new S32(*a.mNameValueReference.s32 / *b.mNameValueReference.s32);
1565 }
1566 else if (b.mType == NVT_U32)
1567 {
1568 retval.mType = NVT_S32;
1569 retval.mStringType = NameValueTypeStrings[NVT_S32];
1570 delete retval.mNameValueReference.s32;
1571 retval.mNameValueReference.s32 = new S32(*a.mNameValueReference.s32 / *b.mNameValueReference.u32);
1572 }
1573 break;
1574 case NVT_U32:
1575 if (b.mType == NVT_F32)
1576 {
1577 retval.mType = NVT_F32;
1578 retval.mStringType = NameValueTypeStrings[NVT_F32];
1579 delete retval.mNameValueReference.f32;
1580 retval.mNameValueReference.f32 = new F32(*a.mNameValueReference.u32 / *b.mNameValueReference.f32);
1581 }
1582 else if (b.mType == NVT_S32)
1583 {
1584 retval.mType = NVT_S32;
1585 retval.mStringType = NameValueTypeStrings[NVT_S32];
1586 delete retval.mNameValueReference.s32;
1587 retval.mNameValueReference.s32 = new S32(*a.mNameValueReference.u32 / *b.mNameValueReference.s32);
1588 }
1589 else if (b.mType == NVT_U32)
1590 {
1591 retval.mType = NVT_U32;
1592 retval.mStringType = NameValueTypeStrings[NVT_U32];
1593 delete retval.mNameValueReference.u32;
1594 retval.mNameValueReference.u32 = new U32(*a.mNameValueReference.u32 / *b.mNameValueReference.u32);
1595 }
1596 break;
1597 default:
1598 llerrs << "Unknown divide of NV type " << a.mStringType << " to " << b.mStringType << llendl;
1599 break;
1600 }
1601 return retval;
1602}
1603
1604LLNameValue &operator%(const LLNameValue &a, const LLNameValue &b)
1605{
1606 static LLNameValue retval;
1607
1608 switch(a.mType)
1609 {
1610 case NVT_STRING:
1611 break;
1612 case NVT_F32:
1613 break;
1614 case NVT_S32:
1615 if (b.mType == NVT_S32)
1616 {
1617 retval.mType = NVT_S32;
1618 retval.mStringType = NameValueTypeStrings[NVT_S32];
1619 delete retval.mNameValueReference.s32;
1620 retval.mNameValueReference.s32 = new S32(*a.mNameValueReference.s32 % *b.mNameValueReference.s32);
1621 }
1622 else if (b.mType == NVT_U32)
1623 {
1624 retval.mType = NVT_S32;
1625 retval.mStringType = NameValueTypeStrings[NVT_S32];
1626 delete retval.mNameValueReference.s32;
1627 retval.mNameValueReference.s32 = new S32(*a.mNameValueReference.s32 % *b.mNameValueReference.u32);
1628 }
1629 break;
1630 case NVT_U32:
1631 if (b.mType == NVT_S32)
1632 {
1633 retval.mType = NVT_S32;
1634 retval.mStringType = NameValueTypeStrings[NVT_S32];
1635 delete retval.mNameValueReference.s32;
1636 retval.mNameValueReference.s32 = new S32(*a.mNameValueReference.u32 % *b.mNameValueReference.s32);
1637 }
1638 else if (b.mType == NVT_U32)
1639 {
1640 retval.mType = NVT_U32;
1641 retval.mStringType = NameValueTypeStrings[NVT_U32];
1642 delete retval.mNameValueReference.u32;
1643 retval.mNameValueReference.u32 = new U32(*a.mNameValueReference.u32 % *b.mNameValueReference.u32);
1644 }
1645 break;
1646 case NVT_VEC3:
1647 if ( (a.mType == b.mType)
1648 &&(a.mType == NVT_VEC3))
1649 {
1650 retval.mType = a.mType;
1651 retval.mStringType = NameValueTypeStrings[a.mType];
1652 delete retval.mNameValueReference.vec3;
1653 retval.mNameValueReference.vec3 = new LLVector3(*a.mNameValueReference.vec3 % *b.mNameValueReference.vec3);
1654 }
1655 break;
1656 default:
1657 llerrs << "Unknown % of NV type " << a.mStringType << " to " << b.mStringType << llendl;
1658 break;
1659 }
1660 return retval;
1661}
1662
1663
1664// Multiplying anything times a float gives you some floats
1665LLNameValue &operator*(const LLNameValue &a, F32 k)
1666{
1667 static LLNameValue retval;
1668
1669 switch(a.mType)
1670 {
1671 case NVT_STRING:
1672 break;
1673 case NVT_F32:
1674 retval.mType = NVT_F32;
1675 retval.mStringType = NameValueTypeStrings[NVT_F32];
1676 delete retval.mNameValueReference.f32;
1677 retval.mNameValueReference.f32 = new F32(*a.mNameValueReference.f32 * k);
1678 break;
1679 case NVT_S32:
1680 retval.mType = NVT_F32;
1681 retval.mStringType = NameValueTypeStrings[NVT_F32];
1682 delete retval.mNameValueReference.f32;
1683 retval.mNameValueReference.f32 = new F32(*a.mNameValueReference.s32 * k);
1684 break;
1685 case NVT_U32:
1686 retval.mType = NVT_F32;
1687 retval.mStringType = NameValueTypeStrings[NVT_F32];
1688 delete retval.mNameValueReference.f32;
1689 retval.mNameValueReference.f32 = new F32(*a.mNameValueReference.u32 * k);
1690 break;
1691 case NVT_VEC3:
1692 retval.mType = a.mType;
1693 retval.mStringType = NameValueTypeStrings[a.mType];
1694 delete retval.mNameValueReference.vec3;
1695 retval.mNameValueReference.vec3 = new LLVector3(*a.mNameValueReference.vec3 * k);
1696 break;
1697 default:
1698 llerrs << "Unknown multiply of NV type " << a.mStringType << " with F32" << llendl;
1699 break;
1700 }
1701 return retval;
1702}
1703
1704
1705LLNameValue &operator*(F32 k, const LLNameValue &a)
1706{
1707 static LLNameValue retval;
1708
1709 switch(a.mType)
1710 {
1711 case NVT_STRING:
1712 break;
1713 case NVT_F32:
1714 retval.mType = NVT_F32;
1715 retval.mStringType = NameValueTypeStrings[NVT_F32];
1716 delete retval.mNameValueReference.f32;
1717 retval.mNameValueReference.f32 = new F32(*a.mNameValueReference.f32 * k);
1718 break;
1719 case NVT_S32:
1720 retval.mType = NVT_F32;
1721 retval.mStringType = NameValueTypeStrings[NVT_F32];
1722 delete retval.mNameValueReference.f32;
1723 retval.mNameValueReference.f32 = new F32(*a.mNameValueReference.s32 * k);
1724 break;
1725 case NVT_U32:
1726 retval.mType = NVT_F32;
1727 retval.mStringType = NameValueTypeStrings[NVT_F32];
1728 delete retval.mNameValueReference.f32;
1729 retval.mNameValueReference.f32 = new F32(*a.mNameValueReference.u32 * k);
1730 break;
1731 case NVT_VEC3:
1732 retval.mType = a.mType;
1733 retval.mStringType = NameValueTypeStrings[a.mType];
1734 delete retval.mNameValueReference.vec3;
1735 retval.mNameValueReference.vec3 = new LLVector3(*a.mNameValueReference.vec3 * k);
1736 break;
1737 default:
1738 llerrs << "Unknown multiply of NV type " << a.mStringType << " with F32" << llendl;
1739 break;
1740 }
1741 return retval;
1742}
1743
1744
1745bool operator==(const LLNameValue &a, const LLNameValue &b)
1746{
1747 switch(a.mType)
1748 {
1749 case NVT_STRING:
1750 if (b.mType == NVT_STRING)
1751 {
1752 if (!a.mNameValueReference.string)
1753 return FALSE;
1754 if (!b.mNameValueReference.string)
1755 return FALSE;
1756 return (!strcmp(a.mNameValueReference.string, b.mNameValueReference.string));
1757 }
1758 break;
1759 case NVT_F32:
1760 if (b.mType == NVT_F32)
1761 {
1762 return (*a.mNameValueReference.f32 == *b.mNameValueReference.f32);
1763 }
1764 else if (b.mType == NVT_S32)
1765 {
1766 return (*a.mNameValueReference.f32 == *b.mNameValueReference.s32);
1767 }
1768 else if (b.mType == NVT_U32)
1769 {
1770 return (*a.mNameValueReference.f32 == *b.mNameValueReference.u32);
1771 }
1772 break;
1773 case NVT_S32:
1774 if (b.mType == NVT_F32)
1775 {
1776 return (*a.mNameValueReference.s32 == *b.mNameValueReference.f32);
1777 }
1778 else if (b.mType == NVT_S32)
1779 {
1780 return (*a.mNameValueReference.s32 == *b.mNameValueReference.s32);
1781 }
1782 else if (b.mType == NVT_U32)
1783 {
1784 return (*a.mNameValueReference.s32 == (S32) *b.mNameValueReference.u32);
1785 }
1786 break;
1787 case NVT_U32:
1788 if (b.mType == NVT_F32)
1789 {
1790 return (*a.mNameValueReference.u32 == *b.mNameValueReference.f32);
1791 }
1792 else if (b.mType == NVT_S32)
1793 {
1794 return ((S32) *a.mNameValueReference.u32 == *b.mNameValueReference.s32);
1795 }
1796 else if (b.mType == NVT_U32)
1797 {
1798 return (*a.mNameValueReference.u32 == *b.mNameValueReference.u32);
1799 }
1800 break;
1801 case NVT_VEC3:
1802 if ( (a.mType == b.mType)
1803 &&(a.mType == NVT_VEC3))
1804 {
1805 return (*a.mNameValueReference.vec3 == *b.mNameValueReference.vec3);
1806 }
1807 break;
1808 default:
1809 llerrs << "Unknown == NV type " << a.mStringType << " with " << b.mStringType << llendl;
1810 break;
1811 }
1812 return FALSE;
1813}
1814
1815bool operator<=(const LLNameValue &a, const LLNameValue &b)
1816{
1817 switch(a.mType)
1818 {
1819 case NVT_STRING:
1820 if (b.mType == NVT_STRING)
1821 {
1822 S32 retval = strcmp(a.mNameValueReference.string, b.mNameValueReference.string);
1823 return (retval <= 0);
1824 }
1825 break;
1826 case NVT_F32:
1827 if (b.mType == NVT_F32)
1828 {
1829 return (*a.mNameValueReference.f32 <= *b.mNameValueReference.f32);
1830 }
1831 else if (b.mType == NVT_S32)
1832 {
1833 return (*a.mNameValueReference.f32 <= *b.mNameValueReference.s32);
1834 }
1835 else if (b.mType == NVT_U32)
1836 {
1837 return (*a.mNameValueReference.f32 <= *b.mNameValueReference.u32);
1838 }
1839 break;
1840 case NVT_S32:
1841 if (b.mType == NVT_F32)
1842 {
1843 return (*a.mNameValueReference.s32 <= *b.mNameValueReference.f32);
1844 }
1845 else if (b.mType == NVT_S32)
1846 {
1847 return (*a.mNameValueReference.s32 <= *b.mNameValueReference.s32);
1848 }
1849 else if (b.mType == NVT_U32)
1850 {
1851 return (*a.mNameValueReference.s32 <= (S32) *b.mNameValueReference.u32);
1852 }
1853 break;
1854 case NVT_U32:
1855 if (b.mType == NVT_F32)
1856 {
1857 return (*a.mNameValueReference.u32 <= *b.mNameValueReference.f32);
1858 }
1859 else if (b.mType == NVT_S32)
1860 {
1861 return ((S32) *a.mNameValueReference.u32 <= *b.mNameValueReference.s32);
1862 }
1863 else if (b.mType == NVT_U32)
1864 {
1865 return (*a.mNameValueReference.u32 <= *b.mNameValueReference.u32);
1866 }
1867 break;
1868 default:
1869 llerrs << "Unknown <= NV type " << a.mStringType << " with " << b.mStringType << llendl;
1870 break;
1871 }
1872 return FALSE;
1873}
1874
1875
1876bool operator>=(const LLNameValue &a, const LLNameValue &b)
1877{
1878 switch(a.mType)
1879 {
1880 case NVT_STRING:
1881 if ( (a.mType == b.mType)
1882 &&(a.mType == NVT_STRING))
1883 {
1884 S32 retval = strcmp(a.mNameValueReference.string, b.mNameValueReference.string);
1885 return (retval >= 0);
1886 }
1887 break;
1888 case NVT_F32:
1889 if (b.mType == NVT_F32)
1890 {
1891 return (*a.mNameValueReference.f32 >= *b.mNameValueReference.f32);
1892 }
1893 else if (b.mType == NVT_S32)
1894 {
1895 return (*a.mNameValueReference.f32 >= *b.mNameValueReference.s32);
1896 }
1897 else if (b.mType == NVT_U32)
1898 {
1899 return (*a.mNameValueReference.f32 >= *b.mNameValueReference.u32);
1900 }
1901 break;
1902 case NVT_S32:
1903 if (b.mType == NVT_F32)
1904 {
1905 return (*a.mNameValueReference.s32 >= *b.mNameValueReference.f32);
1906 }
1907 else if (b.mType == NVT_S32)
1908 {
1909 return (*a.mNameValueReference.s32 >= *b.mNameValueReference.s32);
1910 }
1911 else if (b.mType == NVT_U32)
1912 {
1913 return (*a.mNameValueReference.s32 >= (S32) *b.mNameValueReference.u32);
1914 }
1915 break;
1916 case NVT_U32:
1917 if (b.mType == NVT_F32)
1918 {
1919 return (*a.mNameValueReference.u32 >= *b.mNameValueReference.f32);
1920 }
1921 else if (b.mType == NVT_S32)
1922 {
1923 return ((S32) *a.mNameValueReference.u32 >= *b.mNameValueReference.s32);
1924 }
1925 else if (b.mType == NVT_U32)
1926 {
1927 return (*a.mNameValueReference.u32 >= *b.mNameValueReference.u32);
1928 }
1929 break;
1930 default:
1931 llerrs << "Unknown >= NV type " << a.mStringType << " with " << b.mStringType << llendl;
1932 break;
1933 }
1934 return FALSE;
1935}
1936
1937
1938bool operator<(const LLNameValue &a, const LLNameValue &b)
1939{
1940 switch(a.mType)
1941 {
1942 case NVT_STRING:
1943 if ( (a.mType == b.mType)
1944 &&(a.mType == NVT_STRING))
1945 {
1946 S32 retval = strcmp(a.mNameValueReference.string, b.mNameValueReference.string);
1947 return (retval < 0);
1948 }
1949 break;
1950 case NVT_F32:
1951 if (b.mType == NVT_F32)
1952 {
1953 return (*a.mNameValueReference.f32 < *b.mNameValueReference.f32);
1954 }
1955 else if (b.mType == NVT_S32)
1956 {
1957 return (*a.mNameValueReference.f32 < *b.mNameValueReference.s32);
1958 }
1959 else if (b.mType == NVT_U32)
1960 {
1961 return (*a.mNameValueReference.f32 < *b.mNameValueReference.u32);
1962 }
1963 break;
1964 case NVT_S32:
1965 if (b.mType == NVT_F32)
1966 {
1967 return (*a.mNameValueReference.s32 < *b.mNameValueReference.f32);
1968 }
1969 else if (b.mType == NVT_S32)
1970 {
1971 return (*a.mNameValueReference.s32 < *b.mNameValueReference.s32);
1972 }
1973 else if (b.mType == NVT_U32)
1974 {
1975 return (*a.mNameValueReference.s32 < (S32) *b.mNameValueReference.u32);
1976 }
1977 break;
1978 case NVT_U32:
1979 if (b.mType == NVT_F32)
1980 {
1981 return (*a.mNameValueReference.u32 < *b.mNameValueReference.f32);
1982 }
1983 else if (b.mType == NVT_S32)
1984 {
1985 return ((S32) *a.mNameValueReference.u32 < *b.mNameValueReference.s32);
1986 }
1987 else if (b.mType == NVT_U32)
1988 {
1989 return (*a.mNameValueReference.u32 < *b.mNameValueReference.u32);
1990 }
1991 break;
1992 default:
1993 llerrs << "Unknown < NV type " << a.mStringType << " with " << b.mStringType << llendl;
1994 break;
1995 }
1996 return FALSE;
1997}
1998
1999
2000bool operator>(const LLNameValue &a, const LLNameValue &b)
2001{
2002 switch(a.mType)
2003 {
2004 case NVT_STRING:
2005 if ( (a.mType == b.mType)
2006 &&(a.mType == NVT_STRING))
2007 {
2008 S32 retval = strcmp(a.mNameValueReference.string, b.mNameValueReference.string);
2009 return (retval > 0);
2010 }
2011 break;
2012 case NVT_F32:
2013 if (b.mType == NVT_F32)
2014 {
2015 return (*a.mNameValueReference.f32 > *b.mNameValueReference.f32);
2016 }
2017 else if (b.mType == NVT_S32)
2018 {
2019 return (*a.mNameValueReference.f32 > *b.mNameValueReference.s32);
2020 }
2021 else if (b.mType == NVT_U32)
2022 {
2023 return (*a.mNameValueReference.f32 > *b.mNameValueReference.u32);
2024 }
2025 break;
2026 case NVT_S32:
2027 if (b.mType == NVT_F32)
2028 {
2029 return (*a.mNameValueReference.s32 > *b.mNameValueReference.f32);
2030 }
2031 else if (b.mType == NVT_S32)
2032 {
2033 return (*a.mNameValueReference.s32 > *b.mNameValueReference.s32);
2034 }
2035 else if (b.mType == NVT_U32)
2036 {
2037 return (*a.mNameValueReference.s32 > (S32) *b.mNameValueReference.u32);
2038 }
2039 break;
2040 case NVT_U32:
2041 if (b.mType == NVT_F32)
2042 {
2043 return (*a.mNameValueReference.u32 > *b.mNameValueReference.f32);
2044 }
2045 else if (b.mType == NVT_S32)
2046 {
2047 return ((S32) *a.mNameValueReference.u32 > *b.mNameValueReference.s32);
2048 }
2049 else if (b.mType == NVT_U32)
2050 {
2051 return (*a.mNameValueReference.u32 > *b.mNameValueReference.u32);
2052 }
2053 break;
2054 default:
2055 llerrs << "Unknown > NV type " << a.mStringType << " with " << b.mStringType << llendl;
2056 break;
2057 }
2058 return FALSE;
2059}
2060
2061bool operator!=(const LLNameValue &a, const LLNameValue &b)
2062{
2063 switch(a.mType)
2064 {
2065 case NVT_STRING:
2066 if ( (a.mType == b.mType)
2067 &&(a.mType == NVT_STRING))
2068 {
2069 return (strcmp(a.mNameValueReference.string, b.mNameValueReference.string)) ? true : false;
2070 }
2071 break;
2072 case NVT_F32:
2073 if (b.mType == NVT_F32)
2074 {
2075 return (*a.mNameValueReference.f32 != *b.mNameValueReference.f32);
2076 }
2077 else if (b.mType == NVT_S32)
2078 {
2079 return (*a.mNameValueReference.f32 != *b.mNameValueReference.s32);
2080 }
2081 else if (b.mType == NVT_U32)
2082 {
2083 return (*a.mNameValueReference.f32 != *b.mNameValueReference.u32);
2084 }
2085 break;
2086 case NVT_S32:
2087 if (b.mType == NVT_F32)
2088 {
2089 return (*a.mNameValueReference.s32 != *b.mNameValueReference.f32);
2090 }
2091 else if (b.mType == NVT_S32)
2092 {
2093 return (*a.mNameValueReference.s32 != *b.mNameValueReference.s32);
2094 }
2095 else if (b.mType == NVT_U32)
2096 {
2097 return (*a.mNameValueReference.s32 != (S32) *b.mNameValueReference.u32);
2098 }
2099 break;
2100 case NVT_U32:
2101 if (b.mType == NVT_F32)
2102 {
2103 return (*a.mNameValueReference.u32 != *b.mNameValueReference.f32);
2104 }
2105 else if (b.mType == NVT_S32)
2106 {
2107 return ((S32) *a.mNameValueReference.u32 != *b.mNameValueReference.s32);
2108 }
2109 else if (b.mType == NVT_U32)
2110 {
2111 return (*a.mNameValueReference.u32 != *b.mNameValueReference.u32);
2112 }
2113 break;
2114 case NVT_VEC3:
2115 if ( (a.mType == b.mType)
2116 &&(a.mType == NVT_VEC3))
2117 {
2118 return (*a.mNameValueReference.vec3 != *b.mNameValueReference.vec3);
2119 }
2120 break;
2121 default:
2122 llerrs << "Unknown != NV type " << a.mStringType << " with " << b.mStringType << llendl;
2123 break;
2124 }
2125 return FALSE;
2126}
2127
2128
2129LLNameValue &operator-(const LLNameValue &a)
2130{
2131 static LLNameValue retval;
2132
2133 switch(a.mType)
2134 {
2135 case NVT_STRING:
2136 break;
2137 case NVT_F32:
2138 retval.mType = a.mType;
2139 retval.mStringType = NameValueTypeStrings[a.mType];
2140 delete retval.mNameValueReference.f32;
2141 retval.mNameValueReference.f32 = new F32(-*a.mNameValueReference.f32);
2142 break;
2143 case NVT_S32:
2144 retval.mType = a.mType;
2145 retval.mStringType = NameValueTypeStrings[a.mType];
2146 delete retval.mNameValueReference.s32;
2147 retval.mNameValueReference.s32 = new S32(-*a.mNameValueReference.s32);
2148 break;
2149 case NVT_U32:
2150 retval.mType = NVT_S32;
2151 retval.mStringType = NameValueTypeStrings[NVT_S32];
2152 delete retval.mNameValueReference.s32;
2153 // Can't do unary minus on U32, doesn't work.
2154 retval.mNameValueReference.s32 = new S32(-S32(*a.mNameValueReference.u32));
2155 break;
2156 case NVT_VEC3:
2157 retval.mType = a.mType;
2158 retval.mStringType = NameValueTypeStrings[a.mType];
2159 delete retval.mNameValueReference.vec3;
2160 retval.mNameValueReference.vec3 = new LLVector3(-*a.mNameValueReference.vec3);
2161 break;
2162 default:
2163 llerrs << "Unknown - NV type " << a.mStringType << llendl;
2164 break;
2165 }
2166 return retval;
2167}
diff --git a/linden/indra/llmessage/llnamevalue.h b/linden/indra/llmessage/llnamevalue.h
index c58172a..52beb07 100644
--- a/linden/indra/llmessage/llnamevalue.h
+++ b/linden/indra/llmessage/llnamevalue.h
@@ -32,15 +32,27 @@
32#ifndef LL_LLNAMEVALUE_H 32#ifndef LL_LLNAMEVALUE_H
33#define LL_LLNAMEVALUE_H 33#define LL_LLNAMEVALUE_H
34 34
35// As of January 2008, I believe we only use the following name-value
36// pairs. This is hard to prove because they are initialized from
37// strings. JC
38//
39// FirstName STRING
40// LastName STRING
41// AttachPt U32
42// AttachmentItemId STRING
43// Title STRING
44// AttachmentOffset VEC3
45// AttachmentOrientation VEC3
46// SitObject STRING
47// SitPosition VEC3
48
35#include "string_table.h" 49#include "string_table.h"
36#include "llmath.h" 50#include "llmath.h"
37#include "v3math.h" 51#include "v3math.h"
38#include "lldbstrings.h" 52#include "lldbstrings.h"
39 53
40class LLNameValue; 54class LLNameValue;
41typedef void (*TNameValueCallback)(LLNameValue *changed, void **user_data); 55class LLStringTable;
42
43void add_use_callback(char *name, TNameValueCallback ucb, void **user_data);
44 56
45typedef enum e_name_value_types 57typedef enum e_name_value_types
46{ 58{
@@ -61,7 +73,6 @@ typedef enum e_name_value_class
61 NVC_NULL, 73 NVC_NULL,
62 NVC_READ_ONLY, 74 NVC_READ_ONLY,
63 NVC_READ_WRITE, 75 NVC_READ_WRITE,
64 NVC_CALLBACK,
65 NVC_EOF 76 NVC_EOF
66} ENameValueClass; 77} ENameValueClass;
67 78
@@ -110,17 +121,13 @@ class LLNameValue
110{ 121{
111public: 122public:
112 void baseInit(); 123 void baseInit();
113 void init(const char *name, const char *data, const char *type, const char *nvclass, const char *nvsendto, 124 void init(const char *name, const char *data, const char *type, const char *nvclass, const char *nvsendto );
114 TNameValueCallback nvcb = NULL, void **user_data = NULL);
115 125
116 LLNameValue(); 126 LLNameValue();
117 LLNameValue(const char *data); 127 LLNameValue(const char *data);
118 LLNameValue(const char *name, const char *type, const char *nvclass, 128 LLNameValue(const char *name, const char *type, const char *nvclass );
119 TNameValueCallback nvcb = NULL, void **user_data = NULL); 129 LLNameValue(const char *name, const char *data, const char *type, const char *nvclass );
120 LLNameValue(const char *name, const char *data, const char *type, const char *nvclass, 130 LLNameValue(const char *name, const char *data, const char *type, const char *nvclass, const char *nvsendto );
121 TNameValueCallback nvcb = NULL, void **user_data = NULL);
122 LLNameValue(const char *name, const char *data, const char *type, const char *nvclass, const char *nvsendto,
123 TNameValueCallback nvcb = NULL, void **user_data = NULL);
124 131
125 ~LLNameValue(); 132 ~LLNameValue();
126 133
@@ -130,7 +137,6 @@ public:
130 S32 *getS32(); 137 S32 *getS32();
131 void getVec3(LLVector3 &vec); 138 void getVec3(LLVector3 &vec);
132 LLVector3 *getVec3(); 139 LLVector3 *getVec3();
133 F32 magnitude();
134 U32 *getU32(); 140 U32 *getU32();
135 U64 *getU64(); 141 U64 *getU64();
136 142
@@ -157,27 +163,8 @@ public:
157 void setVec3(const LLVector3 &a); 163 void setVec3(const LLVector3 &a);
158 void setU32(const U32 a); 164 void setU32(const U32 a);
159 165
160 BOOL nonzero();
161
162 friend std::ostream& operator<<(std::ostream& s, const LLNameValue &a); 166 friend std::ostream& operator<<(std::ostream& s, const LLNameValue &a);
163 167
164 friend LLNameValue &operator+(const LLNameValue &a, const LLNameValue &b);
165 friend LLNameValue &operator-(const LLNameValue &a, const LLNameValue &b);
166 friend LLNameValue &operator*(const LLNameValue &a, const LLNameValue &b);
167 friend LLNameValue &operator/(const LLNameValue &a, const LLNameValue &b);
168 friend LLNameValue &operator%(const LLNameValue &a, const LLNameValue &b);
169 friend LLNameValue &operator*(const LLNameValue &a, F32 k);
170 friend LLNameValue &operator*(F32 k, const LLNameValue &a);
171
172 friend bool operator==(const LLNameValue &a, const LLNameValue &b);
173 friend bool operator<=(const LLNameValue &a, const LLNameValue &b);
174 friend bool operator>=(const LLNameValue &a, const LLNameValue &b);
175 friend bool operator<(const LLNameValue &a, const LLNameValue &b);
176 friend bool operator>(const LLNameValue &a, const LLNameValue &b);
177 friend bool operator!=(const LLNameValue &a, const LLNameValue &b);
178
179 friend LLNameValue &operator-(const LLNameValue &a);
180
181private: 168private:
182 void printNameValue(std::ostream& s); 169 void printNameValue(std::ostream& s);
183 170
@@ -193,8 +180,6 @@ public:
193 180
194 UNameValueReference mNameValueReference; 181 UNameValueReference mNameValueReference;
195 LLStringTable *mNVNameTable; 182 LLStringTable *mNVNameTable;
196 TNameValueCallback mNameValueCB;
197 void **mUserData;
198}; 183};
199 184
200extern LLStringTable gNVNameTable; 185extern LLStringTable gNVNameTable;
diff --git a/linden/indra/llmessage/llregionflags.h b/linden/indra/llmessage/llregionflags.h
index 96b66ca..1675478 100644
--- a/linden/indra/llmessage/llregionflags.h
+++ b/linden/indra/llmessage/llregionflags.h
@@ -140,7 +140,7 @@ const U32 ESTATE_MAINLAND = 1;
140const U32 ESTATE_ORIENTATION = 2; 140const U32 ESTATE_ORIENTATION = 2;
141const U32 ESTATE_INTERNAL = 3; 141const U32 ESTATE_INTERNAL = 3;
142const U32 ESTATE_SHOWCASE = 4; 142const U32 ESTATE_SHOWCASE = 4;
143const U32 ESTATE_KIDGRID = 5; 143const U32 ESTATE_TEEN = 5;
144const U32 ESTATE_LAST_LINDEN = 5; // last linden owned/managed estate 144const U32 ESTATE_LAST_LINDEN = 5; // last linden owned/managed estate
145 145
146// for EstateOwnerRequest, setaccess message 146// for EstateOwnerRequest, setaccess message
@@ -172,9 +172,10 @@ const U32 ESTATE_ACCESS_BANNED_AGENT_ADD = 1 << 6;
172const U32 ESTATE_ACCESS_BANNED_AGENT_REMOVE = 1 << 7; 172const U32 ESTATE_ACCESS_BANNED_AGENT_REMOVE = 1 << 7;
173const U32 ESTATE_ACCESS_MANAGER_ADD = 1 << 8; 173const U32 ESTATE_ACCESS_MANAGER_ADD = 1 << 8;
174const U32 ESTATE_ACCESS_MANAGER_REMOVE = 1 << 9; 174const U32 ESTATE_ACCESS_MANAGER_REMOVE = 1 << 9;
175const U32 ESTATE_ACCESS_NO_REPLY = 1 << 10;
175 176
176const S32 ESTATE_MAX_MANAGERS = 10; 177const S32 ESTATE_MAX_MANAGERS = 10;
177const S32 ESTATE_MAX_ACCESS_IDS = 300; // max for access, banned 178const S32 ESTATE_MAX_ACCESS_IDS = 500; // max for access, banned
178const S32 ESTATE_MAX_GROUP_IDS = (S32) ESTATE_ACCESS_MAX_ENTRIES_PER_PACKET; 179const S32 ESTATE_MAX_GROUP_IDS = (S32) ESTATE_ACCESS_MAX_ENTRIES_PER_PACKET;
179 180
180// 'Sim Wide Delete' flags 181// 'Sim Wide Delete' flags
diff --git a/linden/indra/llmessage/llservicebuilder.cpp b/linden/indra/llmessage/llservicebuilder.cpp
index 195e24b..138ab2d 100644
--- a/linden/indra/llmessage/llservicebuilder.cpp
+++ b/linden/indra/llmessage/llservicebuilder.cpp
@@ -134,6 +134,9 @@ std::string LLServiceBuilder::buildServiceURI(
134 std::string::iterator end(service_url.end()); 134 std::string::iterator end(service_url.end());
135 std::string::iterator deepest_node(service_url.end()); 135 std::string::iterator deepest_node(service_url.end());
136 std::string::iterator deepest_node_end(service_url.end()); 136 std::string::iterator deepest_node_end(service_url.end());
137 //parse out the variables to replace by going through {}s one at a time,
138 // starting with the "deepest" in series {{}},
139 // and otherwise replacing right-to-left
137 for(; iter != end; ++iter) 140 for(; iter != end; ++iter)
138 { 141 {
139 switch(*iter) 142 switch(*iter)
@@ -163,7 +166,7 @@ std::string LLServiceBuilder::buildServiceURI(
163 { 166 {
164 break; 167 break;
165 } 168 }
166 169 //replace the variable we found in the {} above.
167 // *NOTE: since the c++ implementation only understands 170 // *NOTE: since the c++ implementation only understands
168 // params and straight string substitution, so it's a 171 // params and straight string substitution, so it's a
169 // known distance of 2 to skip the directive. 172 // known distance of 2 to skip the directive.
@@ -181,7 +184,7 @@ std::string LLServiceBuilder::buildServiceURI(
181 } 184 }
182 else 185 else
183 { 186 {
184 llinfos << "Unknown key: " << key << llendl; 187 llwarns << "Unknown key: " << key << " in option map: " << LLSDOStreamer<LLSDNotationFormatter>(option_map) << llendl;
185 keep_looping = false; 188 keep_looping = false;
186 } 189 }
187 break; 190 break;
diff --git a/linden/indra/llmessage/llurlrequest.cpp b/linden/indra/llmessage/llurlrequest.cpp
index eabd951..5760197 100644
--- a/linden/indra/llmessage/llurlrequest.cpp
+++ b/linden/indra/llmessage/llurlrequest.cpp
@@ -34,7 +34,6 @@
34#include "linden_common.h" 34#include "linden_common.h"
35#include "llurlrequest.h" 35#include "llurlrequest.h"
36 36
37#include <curl/curl.h>
38#include <algorithm> 37#include <algorithm>
39 38
40#include "llcurl.h" 39#include "llcurl.h"
@@ -192,6 +191,11 @@ void LLURLRequest::useProxy(bool use_proxy)
192 } 191 }
193} 192}
194 193
194void LLURLRequest::useProxy(const std::string &proxy)
195{
196 mDetail->mCurlRequest->setoptString(CURLOPT_PROXY, proxy);
197}
198
195// virtual 199// virtual
196LLIOPipe::EStatus LLURLRequest::handleError( 200LLIOPipe::EStatus LLURLRequest::handleError(
197 LLIOPipe::EStatus status, 201 LLIOPipe::EStatus status,
diff --git a/linden/indra/llmessage/llurlrequest.h b/linden/indra/llmessage/llurlrequest.h
index dd82a9f..b6da56b 100644
--- a/linden/indra/llmessage/llurlrequest.h
+++ b/linden/indra/llmessage/llurlrequest.h
@@ -166,6 +166,11 @@ public:
166 */ 166 */
167 void useProxy(bool use_proxy); 167 void useProxy(bool use_proxy);
168 168
169 /**
170 * @ brief Set the CURLOPT_PROXY header to the given value.
171 */
172 void useProxy(const std::string& proxy);
173
169public: 174public:
170 /** 175 /**
171 * @brief Give this pipe a chance to handle a generated error 176 * @brief Give this pipe a chance to handle a generated error
diff --git a/linden/indra/llmessage/message.cpp b/linden/indra/llmessage/message.cpp
index ee295d7..c572341 100644
--- a/linden/indra/llmessage/message.cpp
+++ b/linden/indra/llmessage/message.cpp
@@ -201,7 +201,7 @@ void LLMessageHandlerBridge::post(LLHTTPNode::ResponsePtr response,
201 const LLSD& context, const LLSD& input) const 201 const LLSD& context, const LLSD& input) const
202{ 202{
203 std::string name = context["request"]["wildcard"]["message-name"]; 203 std::string name = context["request"]["wildcard"]["message-name"];
204 char* namePtr = gMessageStringTable.getString(name.c_str()); 204 char* namePtr = LLMessageStringTable::getInstance()->getString(name.c_str());
205 205
206 lldebugs << "Setting mLastSender " << input["sender"].asString() << llendl; 206 lldebugs << "Setting mLastSender " << input["sender"].asString() << llendl;
207 gMessageSystem->mLastSender = LLHost(input["sender"].asString()); 207 gMessageSystem->mLastSender = LLHost(input["sender"].asString());
@@ -469,7 +469,7 @@ static LLMessageSystem::message_template_name_map_t::const_iterator
469findTemplate(const LLMessageSystem::message_template_name_map_t& templates, 469findTemplate(const LLMessageSystem::message_template_name_map_t& templates,
470 std::string name) 470 std::string name)
471{ 471{
472 const char* namePrehash = gMessageStringTable.getString(name.c_str()); 472 const char* namePrehash = LLMessageStringTable::getInstance()->getString(name.c_str());
473 if(NULL == namePrehash) {return templates.end();} 473 if(NULL == namePrehash) {return templates.end();}
474 return templates.find(namePrehash); 474 return templates.find(namePrehash);
475} 475}
@@ -770,7 +770,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count )
770 /* Code for dumping the complete contents of a message. Keep for future use in optimizing messages. 770 /* Code for dumping the complete contents of a message. Keep for future use in optimizing messages.
771 if( 1 ) 771 if( 1 )
772 { 772 {
773 static char* object_update = gMessageStringTable.getString("ObjectUpdate"); 773 static char* object_update = LLMessageStringTable::getInstance()->getString("ObjectUpdate");
774 if(object_update == mTemplateMessageReader->getMessageName() ) 774 if(object_update == mTemplateMessageReader->getMessageName() )
775 { 775 {
776 llinfos << "ObjectUpdate:" << llendl; 776 llinfos << "ObjectUpdate:" << llendl;
@@ -1018,7 +1018,7 @@ BOOL LLMessageSystem::isSendFull(const char* blockname)
1018 char* stringTableName = NULL; 1018 char* stringTableName = NULL;
1019 if(NULL != blockname) 1019 if(NULL != blockname)
1020 { 1020 {
1021 stringTableName = gMessageStringTable.getString(blockname); 1021 stringTableName = LLMessageStringTable::getInstance()->getString(blockname);
1022 } 1022 }
1023 return isSendFullFast(stringTableName); 1023 return isSendFullFast(stringTableName);
1024} 1024}
@@ -2139,7 +2139,7 @@ void LLMessageSystem::dispatch(
2139 LLHTTPNode::ResponsePtr responsep) 2139 LLHTTPNode::ResponsePtr responsep)
2140{ 2140{
2141 if ((gMessageSystem->mMessageTemplates.find 2141 if ((gMessageSystem->mMessageTemplates.find
2142 (gMessageStringTable.getString(msg_name.c_str())) == 2142 (LLMessageStringTable::getInstance()->getString(msg_name.c_str())) ==
2143 gMessageSystem->mMessageTemplates.end()) && 2143 gMessageSystem->mMessageTemplates.end()) &&
2144 !LLMessageConfig::isValidMessage(msg_name)) 2144 !LLMessageConfig::isValidMessage(msg_name))
2145 { 2145 {
@@ -2173,7 +2173,7 @@ static void check_for_unrecognized_messages(
2173 end = map.endMap(); 2173 end = map.endMap();
2174 iter != end; ++iter) 2174 iter != end; ++iter)
2175 { 2175 {
2176 const char* name = gMessageStringTable.getString(iter->first.c_str()); 2176 const char* name = LLMessageStringTable::getInstance()->getString(iter->first.c_str());
2177 2177
2178 if (templates.find(name) == templates.end()) 2178 if (templates.find(name) == templates.end())
2179 { 2179 {
@@ -2441,13 +2441,11 @@ void dump_prehash_files()
2441 fprintf(fp, "\n\nextern F32 gPrehashVersionNumber;\n\n"); 2441 fprintf(fp, "\n\nextern F32 gPrehashVersionNumber;\n\n");
2442 for (i = 0; i < MESSAGE_NUMBER_OF_HASH_BUCKETS; i++) 2442 for (i = 0; i < MESSAGE_NUMBER_OF_HASH_BUCKETS; i++)
2443 { 2443 {
2444 if (!gMessageStringTable.mEmpty[i] && gMessageStringTable.mString[i][0] != '.') 2444 if (!LLMessageStringTable::getInstance()->mEmpty[i] && LLMessageStringTable::getInstance()->mString[i][0] != '.')
2445 { 2445 {
2446 fprintf(fp, "extern char * _PREHASH_%s;\n", gMessageStringTable.mString[i]); 2446 fprintf(fp, "extern char * _PREHASH_%s;\n", LLMessageStringTable::getInstance()->mString[i]);
2447 } 2447 }
2448 } 2448 }
2449 fprintf(fp, "\n\nvoid init_prehash_data();\n\n");
2450 fprintf(fp, "\n\n");
2451 fprintf(fp, "\n\n#endif\n"); 2449 fprintf(fp, "\n\n#endif\n");
2452 fclose(fp); 2450 fclose(fp);
2453 } 2451 }
@@ -2472,21 +2470,11 @@ void dump_prehash_files()
2472 fprintf(fp, "\n\nF32 gPrehashVersionNumber = %.3ff;\n\n", gMessageSystem->mMessageFileVersionNumber); 2470 fprintf(fp, "\n\nF32 gPrehashVersionNumber = %.3ff;\n\n", gMessageSystem->mMessageFileVersionNumber);
2473 for (i = 0; i < MESSAGE_NUMBER_OF_HASH_BUCKETS; i++) 2471 for (i = 0; i < MESSAGE_NUMBER_OF_HASH_BUCKETS; i++)
2474 { 2472 {
2475 if (!gMessageStringTable.mEmpty[i] && gMessageStringTable.mString[i][0] != '.') 2473 if (!LLMessageStringTable::getInstance()->mEmpty[i] && LLMessageStringTable::getInstance()->mString[i][0] != '.')
2476 { 2474 {
2477 fprintf(fp, "char * _PREHASH_%s;\n", gMessageStringTable.mString[i]); 2475 fprintf(fp, "char * _PREHASH_%s = LLMessageStringTable::getInstance()->getString(\"%s\");\n", LLMessageStringTable::getInstance()->mString[i], LLMessageStringTable::getInstance()->mString[i]);
2478 } 2476 }
2479 } 2477 }
2480 fprintf(fp, "\nvoid init_prehash_data()\n");
2481 fprintf(fp, "{\n");
2482 for (i = 0; i < MESSAGE_NUMBER_OF_HASH_BUCKETS; i++)
2483 {
2484 if (!gMessageStringTable.mEmpty[i] && gMessageStringTable.mString[i][0] != '.')
2485 {
2486 fprintf(fp, "\t_PREHASH_%s = gMessageStringTable.getString(\"%s\");\n", gMessageStringTable.mString[i], gMessageStringTable.mString[i]);
2487 }
2488 }
2489 fprintf(fp, "}\n");
2490 fclose(fp); 2478 fclose(fp);
2491 } 2479 }
2492} 2480}
@@ -2528,7 +2516,6 @@ BOOL start_messaging_system(
2528 } 2516 }
2529 else 2517 else
2530 { 2518 {
2531 init_prehash_data();
2532 if (gMessageSystem->mMessageFileVersionNumber != gPrehashVersionNumber) 2519 if (gMessageSystem->mMessageFileVersionNumber != gPrehashVersionNumber)
2533 { 2520 {
2534 llinfos << "Message template version does not match prehash version number" << llendl; 2521 llinfos << "Message template version does not match prehash version number" << llendl;
@@ -2991,7 +2978,7 @@ void LLMessageSystem::setHandlerFuncFast(const char *name, void (*handler_func)(
2991bool LLMessageSystem::callHandler(const char *name, 2978bool LLMessageSystem::callHandler(const char *name,
2992 bool trustedSource, LLMessageSystem* msg) 2979 bool trustedSource, LLMessageSystem* msg)
2993{ 2980{
2994 name = gMessageStringTable.getString(name); 2981 name = LLMessageStringTable::getInstance()->getString(name);
2995 message_template_name_map_t::const_iterator iter; 2982 message_template_name_map_t::const_iterator iter;
2996 iter = mMessageTemplates.find(name); 2983 iter = mMessageTemplates.find(name);
2997 if(iter == mMessageTemplates.end()) 2984 if(iter == mMessageTemplates.end())
@@ -3474,7 +3461,7 @@ void LLMessageSystem::newMessageFast(const char *name)
3474 3461
3475void LLMessageSystem::newMessage(const char *name) 3462void LLMessageSystem::newMessage(const char *name)
3476{ 3463{
3477 newMessageFast(gMessageStringTable.getString(name)); 3464 newMessageFast(LLMessageStringTable::getInstance()->getString(name));
3478} 3465}
3479 3466
3480void LLMessageSystem::addBinaryDataFast(const char *varname, const void *data, S32 size) 3467void LLMessageSystem::addBinaryDataFast(const char *varname, const void *data, S32 size)
@@ -3484,7 +3471,7 @@ void LLMessageSystem::addBinaryDataFast(const char *varname, const void *data, S
3484 3471
3485void LLMessageSystem::addBinaryData(const char *varname, const void *data, S32 size) 3472void LLMessageSystem::addBinaryData(const char *varname, const void *data, S32 size)
3486{ 3473{
3487 mMessageBuilder->addBinaryData(gMessageStringTable.getString(varname),data, size); 3474 mMessageBuilder->addBinaryData(LLMessageStringTable::getInstance()->getString(varname),data, size);
3488} 3475}
3489 3476
3490void LLMessageSystem::addS8Fast(const char *varname, S8 v) 3477void LLMessageSystem::addS8Fast(const char *varname, S8 v)
@@ -3494,7 +3481,7 @@ void LLMessageSystem::addS8Fast(const char *varname, S8 v)
3494 3481
3495void LLMessageSystem::addS8(const char *varname, S8 v) 3482void LLMessageSystem::addS8(const char *varname, S8 v)
3496{ 3483{
3497 mMessageBuilder->addS8(gMessageStringTable.getString(varname), v); 3484 mMessageBuilder->addS8(LLMessageStringTable::getInstance()->getString(varname), v);
3498} 3485}
3499 3486
3500void LLMessageSystem::addU8Fast(const char *varname, U8 v) 3487void LLMessageSystem::addU8Fast(const char *varname, U8 v)
@@ -3504,7 +3491,7 @@ void LLMessageSystem::addU8Fast(const char *varname, U8 v)
3504 3491
3505void LLMessageSystem::addU8(const char *varname, U8 v) 3492void LLMessageSystem::addU8(const char *varname, U8 v)
3506{ 3493{
3507 mMessageBuilder->addU8(gMessageStringTable.getString(varname), v); 3494 mMessageBuilder->addU8(LLMessageStringTable::getInstance()->getString(varname), v);
3508} 3495}
3509 3496
3510void LLMessageSystem::addS16Fast(const char *varname, S16 v) 3497void LLMessageSystem::addS16Fast(const char *varname, S16 v)
@@ -3514,7 +3501,7 @@ void LLMessageSystem::addS16Fast(const char *varname, S16 v)
3514 3501
3515void LLMessageSystem::addS16(const char *varname, S16 v) 3502void LLMessageSystem::addS16(const char *varname, S16 v)
3516{ 3503{
3517 mMessageBuilder->addS16(gMessageStringTable.getString(varname), v); 3504 mMessageBuilder->addS16(LLMessageStringTable::getInstance()->getString(varname), v);
3518} 3505}
3519 3506
3520void LLMessageSystem::addU16Fast(const char *varname, U16 v) 3507void LLMessageSystem::addU16Fast(const char *varname, U16 v)
@@ -3524,7 +3511,7 @@ void LLMessageSystem::addU16Fast(const char *varname, U16 v)
3524 3511
3525void LLMessageSystem::addU16(const char *varname, U16 v) 3512void LLMessageSystem::addU16(const char *varname, U16 v)
3526{ 3513{
3527 mMessageBuilder->addU16(gMessageStringTable.getString(varname), v); 3514 mMessageBuilder->addU16(LLMessageStringTable::getInstance()->getString(varname), v);
3528} 3515}
3529 3516
3530void LLMessageSystem::addF32Fast(const char *varname, F32 v) 3517void LLMessageSystem::addF32Fast(const char *varname, F32 v)
@@ -3534,7 +3521,7 @@ void LLMessageSystem::addF32Fast(const char *varname, F32 v)
3534 3521
3535void LLMessageSystem::addF32(const char *varname, F32 v) 3522void LLMessageSystem::addF32(const char *varname, F32 v)
3536{ 3523{
3537 mMessageBuilder->addF32(gMessageStringTable.getString(varname), v); 3524 mMessageBuilder->addF32(LLMessageStringTable::getInstance()->getString(varname), v);
3538} 3525}
3539 3526
3540void LLMessageSystem::addS32Fast(const char *varname, S32 v) 3527void LLMessageSystem::addS32Fast(const char *varname, S32 v)
@@ -3544,7 +3531,7 @@ void LLMessageSystem::addS32Fast(const char *varname, S32 v)
3544 3531
3545void LLMessageSystem::addS32(const char *varname, S32 v) 3532void LLMessageSystem::addS32(const char *varname, S32 v)
3546{ 3533{
3547 mMessageBuilder->addS32(gMessageStringTable.getString(varname), v); 3534 mMessageBuilder->addS32(LLMessageStringTable::getInstance()->getString(varname), v);
3548} 3535}
3549 3536
3550void LLMessageSystem::addU32Fast(const char *varname, U32 v) 3537void LLMessageSystem::addU32Fast(const char *varname, U32 v)
@@ -3554,7 +3541,7 @@ void LLMessageSystem::addU32Fast(const char *varname, U32 v)
3554 3541
3555void LLMessageSystem::addU32(const char *varname, U32 v) 3542void LLMessageSystem::addU32(const char *varname, U32 v)
3556{ 3543{
3557 mMessageBuilder->addU32(gMessageStringTable.getString(varname), v); 3544 mMessageBuilder->addU32(LLMessageStringTable::getInstance()->getString(varname), v);
3558} 3545}
3559 3546
3560void LLMessageSystem::addU64Fast(const char *varname, U64 v) 3547void LLMessageSystem::addU64Fast(const char *varname, U64 v)
@@ -3564,7 +3551,7 @@ void LLMessageSystem::addU64Fast(const char *varname, U64 v)
3564 3551
3565void LLMessageSystem::addU64(const char *varname, U64 v) 3552void LLMessageSystem::addU64(const char *varname, U64 v)
3566{ 3553{
3567 mMessageBuilder->addU64(gMessageStringTable.getString(varname), v); 3554 mMessageBuilder->addU64(LLMessageStringTable::getInstance()->getString(varname), v);
3568} 3555}
3569 3556
3570void LLMessageSystem::addF64Fast(const char *varname, F64 v) 3557void LLMessageSystem::addF64Fast(const char *varname, F64 v)
@@ -3574,7 +3561,7 @@ void LLMessageSystem::addF64Fast(const char *varname, F64 v)
3574 3561
3575void LLMessageSystem::addF64(const char *varname, F64 v) 3562void LLMessageSystem::addF64(const char *varname, F64 v)
3576{ 3563{
3577 mMessageBuilder->addF64(gMessageStringTable.getString(varname), v); 3564 mMessageBuilder->addF64(LLMessageStringTable::getInstance()->getString(varname), v);
3578} 3565}
3579 3566
3580void LLMessageSystem::addIPAddrFast(const char *varname, U32 v) 3567void LLMessageSystem::addIPAddrFast(const char *varname, U32 v)
@@ -3584,7 +3571,7 @@ void LLMessageSystem::addIPAddrFast(const char *varname, U32 v)
3584 3571
3585void LLMessageSystem::addIPAddr(const char *varname, U32 v) 3572void LLMessageSystem::addIPAddr(const char *varname, U32 v)
3586{ 3573{
3587 mMessageBuilder->addIPAddr(gMessageStringTable.getString(varname), v); 3574 mMessageBuilder->addIPAddr(LLMessageStringTable::getInstance()->getString(varname), v);
3588} 3575}
3589 3576
3590void LLMessageSystem::addIPPortFast(const char *varname, U16 v) 3577void LLMessageSystem::addIPPortFast(const char *varname, U16 v)
@@ -3594,7 +3581,7 @@ void LLMessageSystem::addIPPortFast(const char *varname, U16 v)
3594 3581
3595void LLMessageSystem::addIPPort(const char *varname, U16 v) 3582void LLMessageSystem::addIPPort(const char *varname, U16 v)
3596{ 3583{
3597 mMessageBuilder->addIPPort(gMessageStringTable.getString(varname), v); 3584 mMessageBuilder->addIPPort(LLMessageStringTable::getInstance()->getString(varname), v);
3598} 3585}
3599 3586
3600void LLMessageSystem::addBOOLFast(const char* varname, BOOL v) 3587void LLMessageSystem::addBOOLFast(const char* varname, BOOL v)
@@ -3604,7 +3591,7 @@ void LLMessageSystem::addBOOLFast(const char* varname, BOOL v)
3604 3591
3605void LLMessageSystem::addBOOL(const char* varname, BOOL v) 3592void LLMessageSystem::addBOOL(const char* varname, BOOL v)
3606{ 3593{
3607 mMessageBuilder->addBOOL(gMessageStringTable.getString(varname), v); 3594 mMessageBuilder->addBOOL(LLMessageStringTable::getInstance()->getString(varname), v);
3608} 3595}
3609 3596
3610void LLMessageSystem::addStringFast(const char* varname, const char* v) 3597void LLMessageSystem::addStringFast(const char* varname, const char* v)
@@ -3614,7 +3601,7 @@ void LLMessageSystem::addStringFast(const char* varname, const char* v)
3614 3601
3615void LLMessageSystem::addString(const char* varname, const char* v) 3602void LLMessageSystem::addString(const char* varname, const char* v)
3616{ 3603{
3617 mMessageBuilder->addString(gMessageStringTable.getString(varname), v); 3604 mMessageBuilder->addString(LLMessageStringTable::getInstance()->getString(varname), v);
3618} 3605}
3619 3606
3620void LLMessageSystem::addStringFast(const char* varname, const std::string& v) 3607void LLMessageSystem::addStringFast(const char* varname, const std::string& v)
@@ -3624,7 +3611,7 @@ void LLMessageSystem::addStringFast(const char* varname, const std::string& v)
3624 3611
3625void LLMessageSystem::addString(const char* varname, const std::string& v) 3612void LLMessageSystem::addString(const char* varname, const std::string& v)
3626{ 3613{
3627 mMessageBuilder->addString(gMessageStringTable.getString(varname), v); 3614 mMessageBuilder->addString(LLMessageStringTable::getInstance()->getString(varname), v);
3628} 3615}
3629 3616
3630void LLMessageSystem::addVector3Fast(const char *varname, const LLVector3& v) 3617void LLMessageSystem::addVector3Fast(const char *varname, const LLVector3& v)
@@ -3634,7 +3621,7 @@ void LLMessageSystem::addVector3Fast(const char *varname, const LLVector3& v)
3634 3621
3635void LLMessageSystem::addVector3(const char *varname, const LLVector3& v) 3622void LLMessageSystem::addVector3(const char *varname, const LLVector3& v)
3636{ 3623{
3637 mMessageBuilder->addVector3(gMessageStringTable.getString(varname), v); 3624 mMessageBuilder->addVector3(LLMessageStringTable::getInstance()->getString(varname), v);
3638} 3625}
3639 3626
3640void LLMessageSystem::addVector4Fast(const char *varname, const LLVector4& v) 3627void LLMessageSystem::addVector4Fast(const char *varname, const LLVector4& v)
@@ -3644,7 +3631,7 @@ void LLMessageSystem::addVector4Fast(const char *varname, const LLVector4& v)
3644 3631
3645void LLMessageSystem::addVector4(const char *varname, const LLVector4& v) 3632void LLMessageSystem::addVector4(const char *varname, const LLVector4& v)
3646{ 3633{
3647 mMessageBuilder->addVector4(gMessageStringTable.getString(varname), v); 3634 mMessageBuilder->addVector4(LLMessageStringTable::getInstance()->getString(varname), v);
3648} 3635}
3649 3636
3650void LLMessageSystem::addVector3dFast(const char *varname, const LLVector3d& v) 3637void LLMessageSystem::addVector3dFast(const char *varname, const LLVector3d& v)
@@ -3654,7 +3641,7 @@ void LLMessageSystem::addVector3dFast(const char *varname, const LLVector3d& v)
3654 3641
3655void LLMessageSystem::addVector3d(const char *varname, const LLVector3d& v) 3642void LLMessageSystem::addVector3d(const char *varname, const LLVector3d& v)
3656{ 3643{
3657 mMessageBuilder->addVector3d(gMessageStringTable.getString(varname), v); 3644 mMessageBuilder->addVector3d(LLMessageStringTable::getInstance()->getString(varname), v);
3658} 3645}
3659 3646
3660void LLMessageSystem::addQuatFast(const char *varname, const LLQuaternion& v) 3647void LLMessageSystem::addQuatFast(const char *varname, const LLQuaternion& v)
@@ -3664,7 +3651,7 @@ void LLMessageSystem::addQuatFast(const char *varname, const LLQuaternion& v)
3664 3651
3665void LLMessageSystem::addQuat(const char *varname, const LLQuaternion& v) 3652void LLMessageSystem::addQuat(const char *varname, const LLQuaternion& v)
3666{ 3653{
3667 mMessageBuilder->addQuat(gMessageStringTable.getString(varname), v); 3654 mMessageBuilder->addQuat(LLMessageStringTable::getInstance()->getString(varname), v);
3668} 3655}
3669 3656
3670 3657
@@ -3675,7 +3662,7 @@ void LLMessageSystem::addUUIDFast(const char *varname, const LLUUID& v)
3675 3662
3676void LLMessageSystem::addUUID(const char *varname, const LLUUID& v) 3663void LLMessageSystem::addUUID(const char *varname, const LLUUID& v)
3677{ 3664{
3678 mMessageBuilder->addUUID(gMessageStringTable.getString(varname), v); 3665 mMessageBuilder->addUUID(LLMessageStringTable::getInstance()->getString(varname), v);
3679} 3666}
3680 3667
3681S32 LLMessageSystem::getCurrentSendTotal() const 3668S32 LLMessageSystem::getCurrentSendTotal() const
@@ -3692,8 +3679,8 @@ void LLMessageSystem::getS8Fast(const char *block, const char *var, S8 &u,
3692void LLMessageSystem::getS8(const char *block, const char *var, S8 &u, 3679void LLMessageSystem::getS8(const char *block, const char *var, S8 &u,
3693 S32 blocknum) 3680 S32 blocknum)
3694{ 3681{
3695 getS8Fast(gMessageStringTable.getString(block), 3682 getS8Fast(LLMessageStringTable::getInstance()->getString(block),
3696 gMessageStringTable.getString(var), u, blocknum); 3683 LLMessageStringTable::getInstance()->getString(var), u, blocknum);
3697} 3684}
3698 3685
3699void LLMessageSystem::getU8Fast(const char *block, const char *var, U8 &u, 3686void LLMessageSystem::getU8Fast(const char *block, const char *var, U8 &u,
@@ -3705,8 +3692,8 @@ void LLMessageSystem::getU8Fast(const char *block, const char *var, U8 &u,
3705void LLMessageSystem::getU8(const char *block, const char *var, U8 &u, 3692void LLMessageSystem::getU8(const char *block, const char *var, U8 &u,
3706 S32 blocknum) 3693 S32 blocknum)
3707{ 3694{
3708 getU8Fast(gMessageStringTable.getString(block), 3695 getU8Fast(LLMessageStringTable::getInstance()->getString(block),
3709 gMessageStringTable.getString(var), u, blocknum); 3696 LLMessageStringTable::getInstance()->getString(var), u, blocknum);
3710} 3697}
3711 3698
3712void LLMessageSystem::getBOOLFast(const char *block, const char *var, BOOL &b, 3699void LLMessageSystem::getBOOLFast(const char *block, const char *var, BOOL &b,
@@ -3718,8 +3705,8 @@ void LLMessageSystem::getBOOLFast(const char *block, const char *var, BOOL &b,
3718void LLMessageSystem::getBOOL(const char *block, const char *var, BOOL &b, 3705void LLMessageSystem::getBOOL(const char *block, const char *var, BOOL &b,
3719 S32 blocknum) 3706 S32 blocknum)
3720{ 3707{
3721 getBOOLFast(gMessageStringTable.getString(block), 3708 getBOOLFast(LLMessageStringTable::getInstance()->getString(block),
3722 gMessageStringTable.getString(var), b, blocknum); 3709 LLMessageStringTable::getInstance()->getString(var), b, blocknum);
3723} 3710}
3724 3711
3725void LLMessageSystem::getS16Fast(const char *block, const char *var, S16 &d, 3712void LLMessageSystem::getS16Fast(const char *block, const char *var, S16 &d,
@@ -3731,8 +3718,8 @@ void LLMessageSystem::getS16Fast(const char *block, const char *var, S16 &d,
3731void LLMessageSystem::getS16(const char *block, const char *var, S16 &d, 3718void LLMessageSystem::getS16(const char *block, const char *var, S16 &d,
3732 S32 blocknum) 3719 S32 blocknum)
3733{ 3720{
3734 getS16Fast(gMessageStringTable.getString(block), 3721 getS16Fast(LLMessageStringTable::getInstance()->getString(block),
3735 gMessageStringTable.getString(var), d, blocknum); 3722 LLMessageStringTable::getInstance()->getString(var), d, blocknum);
3736} 3723}
3737 3724
3738void LLMessageSystem::getU16Fast(const char *block, const char *var, U16 &d, 3725void LLMessageSystem::getU16Fast(const char *block, const char *var, U16 &d,
@@ -3744,8 +3731,8 @@ void LLMessageSystem::getU16Fast(const char *block, const char *var, U16 &d,
3744void LLMessageSystem::getU16(const char *block, const char *var, U16 &d, 3731void LLMessageSystem::getU16(const char *block, const char *var, U16 &d,
3745 S32 blocknum) 3732 S32 blocknum)
3746{ 3733{
3747 getU16Fast(gMessageStringTable.getString(block), 3734 getU16Fast(LLMessageStringTable::getInstance()->getString(block),
3748 gMessageStringTable.getString(var), d, blocknum); 3735 LLMessageStringTable::getInstance()->getString(var), d, blocknum);
3749} 3736}
3750 3737
3751void LLMessageSystem::getS32Fast(const char *block, const char *var, S32 &d, 3738void LLMessageSystem::getS32Fast(const char *block, const char *var, S32 &d,
@@ -3757,8 +3744,8 @@ void LLMessageSystem::getS32Fast(const char *block, const char *var, S32 &d,
3757void LLMessageSystem::getS32(const char *block, const char *var, S32 &d, 3744void LLMessageSystem::getS32(const char *block, const char *var, S32 &d,
3758 S32 blocknum) 3745 S32 blocknum)
3759{ 3746{
3760 getS32Fast(gMessageStringTable.getString(block), 3747 getS32Fast(LLMessageStringTable::getInstance()->getString(block),
3761 gMessageStringTable.getString(var), d, blocknum); 3748 LLMessageStringTable::getInstance()->getString(var), d, blocknum);
3762} 3749}
3763 3750
3764void LLMessageSystem::getU32Fast(const char *block, const char *var, U32 &d, 3751void LLMessageSystem::getU32Fast(const char *block, const char *var, U32 &d,
@@ -3770,8 +3757,8 @@ void LLMessageSystem::getU32Fast(const char *block, const char *var, U32 &d,
3770void LLMessageSystem::getU32(const char *block, const char *var, U32 &d, 3757void LLMessageSystem::getU32(const char *block, const char *var, U32 &d,
3771 S32 blocknum) 3758 S32 blocknum)
3772{ 3759{
3773 getU32Fast(gMessageStringTable.getString(block), 3760 getU32Fast(LLMessageStringTable::getInstance()->getString(block),
3774 gMessageStringTable.getString(var), d, blocknum); 3761 LLMessageStringTable::getInstance()->getString(var), d, blocknum);
3775} 3762}
3776 3763
3777void LLMessageSystem::getU64Fast(const char *block, const char *var, U64 &d, 3764void LLMessageSystem::getU64Fast(const char *block, const char *var, U64 &d,
@@ -3784,8 +3771,8 @@ void LLMessageSystem::getU64(const char *block, const char *var, U64 &d,
3784 S32 blocknum) 3771 S32 blocknum)
3785{ 3772{
3786 3773
3787 getU64Fast(gMessageStringTable.getString(block), 3774 getU64Fast(LLMessageStringTable::getInstance()->getString(block),
3788 gMessageStringTable.getString(var), d, blocknum); 3775 LLMessageStringTable::getInstance()->getString(var), d, blocknum);
3789} 3776}
3790 3777
3791void LLMessageSystem::getBinaryDataFast(const char *blockname, 3778void LLMessageSystem::getBinaryDataFast(const char *blockname,
@@ -3802,8 +3789,8 @@ void LLMessageSystem::getBinaryData(const char *blockname,
3802 void *datap, S32 size, 3789 void *datap, S32 size,
3803 S32 blocknum, S32 max_size) 3790 S32 blocknum, S32 max_size)
3804{ 3791{
3805 getBinaryDataFast(gMessageStringTable.getString(blockname), 3792 getBinaryDataFast(LLMessageStringTable::getInstance()->getString(blockname),
3806 gMessageStringTable.getString(varname), 3793 LLMessageStringTable::getInstance()->getString(varname),
3807 datap, size, blocknum, max_size); 3794 datap, size, blocknum, max_size);
3808} 3795}
3809 3796
@@ -3816,8 +3803,8 @@ void LLMessageSystem::getF32Fast(const char *block, const char *var, F32 &d,
3816void LLMessageSystem::getF32(const char *block, const char *var, F32 &d, 3803void LLMessageSystem::getF32(const char *block, const char *var, F32 &d,
3817 S32 blocknum) 3804 S32 blocknum)
3818{ 3805{
3819 getF32Fast(gMessageStringTable.getString(block), 3806 getF32Fast(LLMessageStringTable::getInstance()->getString(block),
3820 gMessageStringTable.getString(var), d, blocknum); 3807 LLMessageStringTable::getInstance()->getString(var), d, blocknum);
3821} 3808}
3822 3809
3823void LLMessageSystem::getF64Fast(const char *block, const char *var, F64 &d, 3810void LLMessageSystem::getF64Fast(const char *block, const char *var, F64 &d,
@@ -3829,8 +3816,8 @@ void LLMessageSystem::getF64Fast(const char *block, const char *var, F64 &d,
3829void LLMessageSystem::getF64(const char *block, const char *var, F64 &d, 3816void LLMessageSystem::getF64(const char *block, const char *var, F64 &d,
3830 S32 blocknum) 3817 S32 blocknum)
3831{ 3818{
3832 getF64Fast(gMessageStringTable.getString(block), 3819 getF64Fast(LLMessageStringTable::getInstance()->getString(block),
3833 gMessageStringTable.getString(var), d, blocknum); 3820 LLMessageStringTable::getInstance()->getString(var), d, blocknum);
3834} 3821}
3835 3822
3836 3823
@@ -3843,8 +3830,8 @@ void LLMessageSystem::getVector3Fast(const char *block, const char *var,
3843void LLMessageSystem::getVector3(const char *block, const char *var, 3830void LLMessageSystem::getVector3(const char *block, const char *var,
3844 LLVector3 &v, S32 blocknum ) 3831 LLVector3 &v, S32 blocknum )
3845{ 3832{
3846 getVector3Fast(gMessageStringTable.getString(block), 3833 getVector3Fast(LLMessageStringTable::getInstance()->getString(block),
3847 gMessageStringTable.getString(var), v, blocknum); 3834 LLMessageStringTable::getInstance()->getString(var), v, blocknum);
3848} 3835}
3849 3836
3850void LLMessageSystem::getVector4Fast(const char *block, const char *var, 3837void LLMessageSystem::getVector4Fast(const char *block, const char *var,
@@ -3856,8 +3843,8 @@ void LLMessageSystem::getVector4Fast(const char *block, const char *var,
3856void LLMessageSystem::getVector4(const char *block, const char *var, 3843void LLMessageSystem::getVector4(const char *block, const char *var,
3857 LLVector4 &v, S32 blocknum ) 3844 LLVector4 &v, S32 blocknum )
3858{ 3845{
3859 getVector4Fast(gMessageStringTable.getString(block), 3846 getVector4Fast(LLMessageStringTable::getInstance()->getString(block),
3860 gMessageStringTable.getString(var), v, blocknum); 3847 LLMessageStringTable::getInstance()->getString(var), v, blocknum);
3861} 3848}
3862 3849
3863void LLMessageSystem::getVector3dFast(const char *block, const char *var, 3850void LLMessageSystem::getVector3dFast(const char *block, const char *var,
@@ -3869,8 +3856,8 @@ void LLMessageSystem::getVector3dFast(const char *block, const char *var,
3869void LLMessageSystem::getVector3d(const char *block, const char *var, 3856void LLMessageSystem::getVector3d(const char *block, const char *var,
3870 LLVector3d &v, S32 blocknum ) 3857 LLVector3d &v, S32 blocknum )
3871{ 3858{
3872 getVector3dFast(gMessageStringTable.getString(block), 3859 getVector3dFast(LLMessageStringTable::getInstance()->getString(block),
3873 gMessageStringTable.getString(var), v, blocknum); 3860 LLMessageStringTable::getInstance()->getString(var), v, blocknum);
3874} 3861}
3875 3862
3876void LLMessageSystem::getQuatFast(const char *block, const char *var, 3863void LLMessageSystem::getQuatFast(const char *block, const char *var,
@@ -3882,8 +3869,8 @@ void LLMessageSystem::getQuatFast(const char *block, const char *var,
3882void LLMessageSystem::getQuat(const char *block, const char *var, 3869void LLMessageSystem::getQuat(const char *block, const char *var,
3883 LLQuaternion &q, S32 blocknum) 3870 LLQuaternion &q, S32 blocknum)
3884{ 3871{
3885 getQuatFast(gMessageStringTable.getString(block), 3872 getQuatFast(LLMessageStringTable::getInstance()->getString(block),
3886 gMessageStringTable.getString(var), q, blocknum); 3873 LLMessageStringTable::getInstance()->getString(var), q, blocknum);
3887} 3874}
3888 3875
3889void LLMessageSystem::getUUIDFast(const char *block, const char *var, 3876void LLMessageSystem::getUUIDFast(const char *block, const char *var,
@@ -3895,8 +3882,8 @@ void LLMessageSystem::getUUIDFast(const char *block, const char *var,
3895void LLMessageSystem::getUUID(const char *block, const char *var, LLUUID &u, 3882void LLMessageSystem::getUUID(const char *block, const char *var, LLUUID &u,
3896 S32 blocknum ) 3883 S32 blocknum )
3897{ 3884{
3898 getUUIDFast(gMessageStringTable.getString(block), 3885 getUUIDFast(LLMessageStringTable::getInstance()->getString(block),
3899 gMessageStringTable.getString(var), u, blocknum); 3886 LLMessageStringTable::getInstance()->getString(var), u, blocknum);
3900} 3887}
3901 3888
3902void LLMessageSystem::getIPAddrFast(const char *block, const char *var, 3889void LLMessageSystem::getIPAddrFast(const char *block, const char *var,
@@ -3908,8 +3895,8 @@ void LLMessageSystem::getIPAddrFast(const char *block, const char *var,
3908void LLMessageSystem::getIPAddr(const char *block, const char *var, U32 &u, 3895void LLMessageSystem::getIPAddr(const char *block, const char *var, U32 &u,
3909 S32 blocknum) 3896 S32 blocknum)
3910{ 3897{
3911 getIPAddrFast(gMessageStringTable.getString(block), 3898 getIPAddrFast(LLMessageStringTable::getInstance()->getString(block),
3912 gMessageStringTable.getString(var), u, blocknum); 3899 LLMessageStringTable::getInstance()->getString(var), u, blocknum);
3913} 3900}
3914 3901
3915void LLMessageSystem::getIPPortFast(const char *block, const char *var, 3902void LLMessageSystem::getIPPortFast(const char *block, const char *var,
@@ -3921,8 +3908,8 @@ void LLMessageSystem::getIPPortFast(const char *block, const char *var,
3921void LLMessageSystem::getIPPort(const char *block, const char *var, U16 &u, 3908void LLMessageSystem::getIPPort(const char *block, const char *var, U16 &u,
3922 S32 blocknum) 3909 S32 blocknum)
3923{ 3910{
3924 getIPPortFast(gMessageStringTable.getString(block), 3911 getIPPortFast(LLMessageStringTable::getInstance()->getString(block),
3925 gMessageStringTable.getString(var), u, 3912 LLMessageStringTable::getInstance()->getString(var), u,
3926 blocknum); 3913 blocknum);
3927} 3914}
3928 3915
@@ -3940,8 +3927,8 @@ void LLMessageSystem::getStringFast(const char *block, const char *var,
3940void LLMessageSystem::getString(const char *block, const char *var, 3927void LLMessageSystem::getString(const char *block, const char *var,
3941 S32 buffer_size, char *s, S32 blocknum ) 3928 S32 buffer_size, char *s, S32 blocknum )
3942{ 3929{
3943 getStringFast(gMessageStringTable.getString(block), 3930 getStringFast(LLMessageStringTable::getInstance()->getString(block),
3944 gMessageStringTable.getString(var), buffer_size, s, 3931 LLMessageStringTable::getInstance()->getString(var), buffer_size, s,
3945 blocknum); 3932 blocknum);
3946} 3933}
3947 3934
@@ -3952,7 +3939,7 @@ S32 LLMessageSystem::getNumberOfBlocksFast(const char *blockname)
3952 3939
3953S32 LLMessageSystem::getNumberOfBlocks(const char *blockname) 3940S32 LLMessageSystem::getNumberOfBlocks(const char *blockname)
3954{ 3941{
3955 return getNumberOfBlocksFast(gMessageStringTable.getString(blockname)); 3942 return getNumberOfBlocksFast(LLMessageStringTable::getInstance()->getString(blockname));
3956} 3943}
3957 3944
3958S32 LLMessageSystem::getSizeFast(const char *blockname, const char *varname) 3945S32 LLMessageSystem::getSizeFast(const char *blockname, const char *varname)
@@ -3962,8 +3949,8 @@ S32 LLMessageSystem::getSizeFast(const char *blockname, const char *varname)
3962 3949
3963S32 LLMessageSystem::getSize(const char *blockname, const char *varname) 3950S32 LLMessageSystem::getSize(const char *blockname, const char *varname)
3964{ 3951{
3965 return getSizeFast(gMessageStringTable.getString(blockname), 3952 return getSizeFast(LLMessageStringTable::getInstance()->getString(blockname),
3966 gMessageStringTable.getString(varname)); 3953 LLMessageStringTable::getInstance()->getString(varname));
3967} 3954}
3968 3955
3969// size in bytes of variable length data 3956// size in bytes of variable length data
@@ -3976,8 +3963,8 @@ S32 LLMessageSystem::getSizeFast(const char *blockname, S32 blocknum,
3976S32 LLMessageSystem::getSize(const char *blockname, S32 blocknum, 3963S32 LLMessageSystem::getSize(const char *blockname, S32 blocknum,
3977 const char *varname) 3964 const char *varname)
3978{ 3965{
3979 return getSizeFast(gMessageStringTable.getString(blockname), blocknum, 3966 return getSizeFast(LLMessageStringTable::getInstance()->getString(blockname), blocknum,
3980 gMessageStringTable.getString(varname)); 3967 LLMessageStringTable::getInstance()->getString(varname));
3981} 3968}
3982 3969
3983S32 LLMessageSystem::getReceiveSize() const 3970S32 LLMessageSystem::getReceiveSize() const
diff --git a/linden/indra/llmessage/message.h b/linden/indra/llmessage/message.h
index 05aa592..00abff4 100644
--- a/linden/indra/llmessage/message.h
+++ b/linden/indra/llmessage/message.h
@@ -68,7 +68,7 @@ const U32 MESSAGE_NUMBER_OF_HASH_BUCKETS = 8192;
68 68
69const S32 MESSAGE_MAX_PER_FRAME = 400; 69const S32 MESSAGE_MAX_PER_FRAME = 400;
70 70
71class LLMessageStringTable 71class LLMessageStringTable : public LLSingleton<LLMessageStringTable>
72{ 72{
73public: 73public:
74 LLMessageStringTable(); 74 LLMessageStringTable();
@@ -81,7 +81,6 @@ public:
81 char mString[MESSAGE_NUMBER_OF_HASH_BUCKETS][MESSAGE_MAX_STRINGS_LENGTH]; /* Flawfinder: ignore */ 81 char mString[MESSAGE_NUMBER_OF_HASH_BUCKETS][MESSAGE_MAX_STRINGS_LENGTH]; /* Flawfinder: ignore */
82}; 82};
83 83
84extern LLMessageStringTable gMessageStringTable;
85 84
86// Individual Messages are described with the following format 85// Individual Messages are described with the following format
87// Note that to ease parsing, keywords are used 86// Note that to ease parsing, keywords are used
@@ -302,7 +301,7 @@ public:
302 void setHandlerFuncFast(const char *name, void (*handler_func)(LLMessageSystem *msgsystem, void **user_data), void **user_data = NULL); 301 void setHandlerFuncFast(const char *name, void (*handler_func)(LLMessageSystem *msgsystem, void **user_data), void **user_data = NULL);
303 void setHandlerFunc(const char *name, void (*handler_func)(LLMessageSystem *msgsystem, void **user_data), void **user_data = NULL) 302 void setHandlerFunc(const char *name, void (*handler_func)(LLMessageSystem *msgsystem, void **user_data), void **user_data = NULL)
304 { 303 {
305 setHandlerFuncFast(gMessageStringTable.getString(name), handler_func, user_data); 304 setHandlerFuncFast(LLMessageStringTable::getInstance()->getString(name), handler_func, user_data);
306 } 305 }
307 306
308 // Set a callback function for a message system exception. 307 // Set a callback function for a message system exception.
@@ -339,7 +338,7 @@ public:
339 BOOL isMessageFast(const char *msg); 338 BOOL isMessageFast(const char *msg);
340 BOOL isMessage(const char *msg) 339 BOOL isMessage(const char *msg)
341 { 340 {
342 return isMessageFast(gMessageStringTable.getString(msg)); 341 return isMessageFast(LLMessageStringTable::getInstance()->getString(msg));
343 } 342 }
344 343
345 void dumpPacketToLog(); 344 void dumpPacketToLog();
@@ -372,7 +371,7 @@ public:
372 void nextBlockFast(const char *blockname); 371 void nextBlockFast(const char *blockname);
373 void nextBlock(const char *blockname) 372 void nextBlock(const char *blockname)
374 { 373 {
375 nextBlockFast(gMessageStringTable.getString(blockname)); 374 nextBlockFast(LLMessageStringTable::getInstance()->getString(blockname));
376 } 375 }
377 376
378public: 377public:
diff --git a/linden/indra/llmessage/message_prehash.cpp b/linden/indra/llmessage/message_prehash.cpp
index 39a4f33..745271f 100644
--- a/linden/indra/llmessage/message_prehash.cpp
+++ b/linden/indra/llmessage/message_prehash.cpp
@@ -39,2672 +39,1336 @@
39 39
40F32 gPrehashVersionNumber = 2.000f; 40F32 gPrehashVersionNumber = 2.000f;
41 41
42char * _PREHASH_X; 42char* _PREHASH_X = LLMessageStringTable::getInstance()->getString("X");
43char * _PREHASH_Y; 43char* _PREHASH_Y = LLMessageStringTable::getInstance()->getString("Y");
44char * _PREHASH_Z; 44char* _PREHASH_Z = LLMessageStringTable::getInstance()->getString("Z");
45char * _PREHASH_AddFlags; 45char* _PREHASH_AddFlags = LLMessageStringTable::getInstance()->getString("AddFlags");
46char * _PREHASH_FailureInfo; 46char* _PREHASH_FailureInfo = LLMessageStringTable::getInstance()->getString("FailureInfo");
47char * _PREHASH_MapData; 47char* _PREHASH_MapData = LLMessageStringTable::getInstance()->getString("MapData");
48char * _PREHASH_AddItem; 48char* _PREHASH_AddItem = LLMessageStringTable::getInstance()->getString("AddItem");
49char * _PREHASH_MeanCollision; 49char* _PREHASH_MeanCollision = LLMessageStringTable::getInstance()->getString("MeanCollision");
50char * _PREHASH_RezScript; 50char* _PREHASH_RezScript = LLMessageStringTable::getInstance()->getString("RezScript");
51char * _PREHASH_AvatarSitResponse; 51char* _PREHASH_AvatarSitResponse = LLMessageStringTable::getInstance()->getString("AvatarSitResponse");
52char * _PREHASH_InventoryAssetResponse; 52char* _PREHASH_InventoryAssetResponse = LLMessageStringTable::getInstance()->getString("InventoryAssetResponse");
53char * _PREHASH_KillObject; 53char* _PREHASH_KillObject = LLMessageStringTable::getInstance()->getString("KillObject");
54char * _PREHASH_ProposalID; 54char* _PREHASH_ProposalID = LLMessageStringTable::getInstance()->getString("ProposalID");
55char * _PREHASH_SerialNum; 55char* _PREHASH_SerialNum = LLMessageStringTable::getInstance()->getString("SerialNum");
56char * _PREHASH_Duration; 56char* _PREHASH_Duration = LLMessageStringTable::getInstance()->getString("Duration");
57char * _PREHASH_ScriptQuestion; 57char* _PREHASH_ScriptQuestion = LLMessageStringTable::getInstance()->getString("ScriptQuestion");
58char * _PREHASH_AddCircuitCode; 58char* _PREHASH_AddCircuitCode = LLMessageStringTable::getInstance()->getString("AddCircuitCode");
59char * _PREHASH_UseCircuitCode; 59char* _PREHASH_UseCircuitCode = LLMessageStringTable::getInstance()->getString("UseCircuitCode");
60char * _PREHASH_ViewerCircuitCode; 60char* _PREHASH_ViewerCircuitCode = LLMessageStringTable::getInstance()->getString("ViewerCircuitCode");
61char * _PREHASH_ScriptAnswerYes; 61char* _PREHASH_ScriptAnswerYes = LLMessageStringTable::getInstance()->getString("ScriptAnswerYes");
62char * _PREHASH_PartnerID; 62char* _PREHASH_PartnerID = LLMessageStringTable::getInstance()->getString("PartnerID");
63char * _PREHASH_DirLandQuery; 63char* _PREHASH_DirLandQuery = LLMessageStringTable::getInstance()->getString("DirLandQuery");
64char * _PREHASH_TeleportStart; 64char* _PREHASH_TeleportStart = LLMessageStringTable::getInstance()->getString("TeleportStart");
65char * _PREHASH_AboutText; 65char* _PREHASH_AboutText = LLMessageStringTable::getInstance()->getString("AboutText");
66char * _PREHASH_VisualParam; 66char* _PREHASH_VisualParam = LLMessageStringTable::getInstance()->getString("VisualParam");
67char * _PREHASH_GroupPrims; 67char* _PREHASH_GroupPrims = LLMessageStringTable::getInstance()->getString("GroupPrims");
68char * _PREHASH_SelectedPrims; 68char* _PREHASH_SelectedPrims = LLMessageStringTable::getInstance()->getString("SelectedPrims");
69char * _PREHASH_ID; 69char* _PREHASH_ID = LLMessageStringTable::getInstance()->getString("ID");
70char * _PREHASH_UUIDNameRequest; 70char* _PREHASH_UUIDNameRequest = LLMessageStringTable::getInstance()->getString("UUIDNameRequest");
71char * _PREHASH_UUIDGroupNameRequest; 71char* _PREHASH_UUIDGroupNameRequest = LLMessageStringTable::getInstance()->getString("UUIDGroupNameRequest");
72char * _PREHASH_GroupAccountTransactionsRequest; 72char* _PREHASH_GroupAccountTransactionsRequest = LLMessageStringTable::getInstance()->getString("GroupAccountTransactionsRequest");
73char * _PREHASH_MapNameRequest; 73char* _PREHASH_MapNameRequest = LLMessageStringTable::getInstance()->getString("MapNameRequest");
74char * _PREHASH_UpdateSimulator; 74char* _PREHASH_UpdateSimulator = LLMessageStringTable::getInstance()->getString("UpdateSimulator");
75char * _PREHASH_BillableFactor; 75char* _PREHASH_BillableFactor = LLMessageStringTable::getInstance()->getString("BillableFactor");
76char * _PREHASH_ObjectBonusFactor; 76char* _PREHASH_ObjectBonusFactor = LLMessageStringTable::getInstance()->getString("ObjectBonusFactor");
77char * _PREHASH_EnableSimulator; 77char* _PREHASH_EnableSimulator = LLMessageStringTable::getInstance()->getString("EnableSimulator");
78char * _PREHASH_DisableSimulator; 78char* _PREHASH_DisableSimulator = LLMessageStringTable::getInstance()->getString("DisableSimulator");
79char * _PREHASH_ConfirmEnableSimulator; 79char* _PREHASH_ConfirmEnableSimulator = LLMessageStringTable::getInstance()->getString("ConfirmEnableSimulator");
80char * _PREHASH_LayerType; 80char* _PREHASH_LayerType = LLMessageStringTable::getInstance()->getString("LayerType");
81char * _PREHASH_OwnerRole; 81char* _PREHASH_OwnerRole = LLMessageStringTable::getInstance()->getString("OwnerRole");
82char * _PREHASH_ParcelOverlay; 82char* _PREHASH_ParcelOverlay = LLMessageStringTable::getInstance()->getString("ParcelOverlay");
83char * _PREHASH_GroupOwned; 83char* _PREHASH_GroupOwned = LLMessageStringTable::getInstance()->getString("GroupOwned");
84char * _PREHASH_IP; 84char* _PREHASH_IP = LLMessageStringTable::getInstance()->getString("IP");
85char * _PREHASH_ChatFromViewer; 85char* _PREHASH_ChatFromViewer = LLMessageStringTable::getInstance()->getString("ChatFromViewer");
86char * _PREHASH_AvgAgentsInView; 86char* _PREHASH_AvgAgentsInView = LLMessageStringTable::getInstance()->getString("AvgAgentsInView");
87char * _PREHASH_AgentsInView; 87char* _PREHASH_AgentsInView = LLMessageStringTable::getInstance()->getString("AgentsInView");
88char * _PREHASH_GroupTitle; 88char* _PREHASH_GroupTitle = LLMessageStringTable::getInstance()->getString("GroupTitle");
89char * _PREHASH_MapLayerReply; 89char* _PREHASH_MapLayerReply = LLMessageStringTable::getInstance()->getString("MapLayerReply");
90char * _PREHASH_CompoundMsgID; 90char* _PREHASH_CompoundMsgID = LLMessageStringTable::getInstance()->getString("CompoundMsgID");
91char * _PREHASH_CameraConstraint; 91char* _PREHASH_CameraConstraint = LLMessageStringTable::getInstance()->getString("CameraConstraint");
92char * _PREHASH_DownloadTotals; 92char* _PREHASH_DownloadTotals = LLMessageStringTable::getInstance()->getString("DownloadTotals");
93char * _PREHASH_GenCounter; 93char* _PREHASH_GenCounter = LLMessageStringTable::getInstance()->getString("GenCounter");
94char * _PREHASH_FrozenData; 94char* _PREHASH_FrozenData = LLMessageStringTable::getInstance()->getString("FrozenData");
95char * _PREHASH_ChildAgentDying; 95char* _PREHASH_ChildAgentDying = LLMessageStringTable::getInstance()->getString("ChildAgentDying");
96char * _PREHASH_To; 96char* _PREHASH_To = LLMessageStringTable::getInstance()->getString("To");
97char * _PREHASH_CopyInventoryFromNotecard; 97char* _PREHASH_CopyInventoryFromNotecard = LLMessageStringTable::getInstance()->getString("CopyInventoryFromNotecard");
98char * _PREHASH_RezObjectFromNotecard; 98char* _PREHASH_RezObjectFromNotecard = LLMessageStringTable::getInstance()->getString("RezObjectFromNotecard");
99char * _PREHASH_ParcelDirFeeCurrent; 99char* _PREHASH_ParcelDirFeeCurrent = LLMessageStringTable::getInstance()->getString("ParcelDirFeeCurrent");
100char * _PREHASH_SeedCapability; 100char* _PREHASH_SeedCapability = LLMessageStringTable::getInstance()->getString("SeedCapability");
101char * _PREHASH_ObjectDuplicate; 101char* _PREHASH_ObjectDuplicate = LLMessageStringTable::getInstance()->getString("ObjectDuplicate");
102char * _PREHASH_InventoryData; 102char* _PREHASH_InventoryData = LLMessageStringTable::getInstance()->getString("InventoryData");
103char * _PREHASH_ReplyData; 103char* _PREHASH_ReplyData = LLMessageStringTable::getInstance()->getString("ReplyData");
104char * _PREHASH_ResetList; 104char* _PREHASH_ResetList = LLMessageStringTable::getInstance()->getString("ResetList");
105char * _PREHASH_MediaID; 105char* _PREHASH_MediaID = LLMessageStringTable::getInstance()->getString("MediaID");
106char * _PREHASH_RelatedRights; 106char* _PREHASH_RelatedRights = LLMessageStringTable::getInstance()->getString("RelatedRights");
107char * _PREHASH_RedirectGridX; 107char* _PREHASH_RedirectGridX = LLMessageStringTable::getInstance()->getString("RedirectGridX");
108char * _PREHASH_RedirectGridY; 108char* _PREHASH_RedirectGridY = LLMessageStringTable::getInstance()->getString("RedirectGridY");
109char * _PREHASH_TransferID; 109char* _PREHASH_TransferID = LLMessageStringTable::getInstance()->getString("TransferID");
110char * _PREHASH_TexturesChanged; 110char* _PREHASH_TexturesChanged = LLMessageStringTable::getInstance()->getString("TexturesChanged");
111char * _PREHASH_UserLookAt; 111char* _PREHASH_UserLookAt = LLMessageStringTable::getInstance()->getString("UserLookAt");
112char * _PREHASH_TestBlock1; 112char* _PREHASH_TestBlock1 = LLMessageStringTable::getInstance()->getString("TestBlock1");
113char * _PREHASH_SensedData; 113char* _PREHASH_SensedData = LLMessageStringTable::getInstance()->getString("SensedData");
114char * _PREHASH_UpdateBlock; 114char* _PREHASH_UpdateBlock = LLMessageStringTable::getInstance()->getString("UpdateBlock");
115char * _PREHASH_ClassifiedGodDelete; 115char* _PREHASH_ClassifiedGodDelete = LLMessageStringTable::getInstance()->getString("ClassifiedGodDelete");
116char * _PREHASH_ObjectGrabUpdate; 116char* _PREHASH_ObjectGrabUpdate = LLMessageStringTable::getInstance()->getString("ObjectGrabUpdate");
117char * _PREHASH_LocationPos; 117char* _PREHASH_LocationPos = LLMessageStringTable::getInstance()->getString("LocationPos");
118char * _PREHASH_TaxDate; 118char* _PREHASH_TaxDate = LLMessageStringTable::getInstance()->getString("TaxDate");
119char * _PREHASH_StartDateTime; 119char* _PREHASH_StartDateTime = LLMessageStringTable::getInstance()->getString("StartDateTime");
120char * _PREHASH_ObjectUpdateCached; 120char* _PREHASH_ObjectUpdateCached = LLMessageStringTable::getInstance()->getString("ObjectUpdateCached");
121char * _PREHASH_Packets; 121char* _PREHASH_Packets = LLMessageStringTable::getInstance()->getString("Packets");
122char * _PREHASH_FailureType; 122char* _PREHASH_FailureType = LLMessageStringTable::getInstance()->getString("FailureType");
123char * _PREHASH_UpdateGroupInfo; 123char* _PREHASH_UpdateGroupInfo = LLMessageStringTable::getInstance()->getString("UpdateGroupInfo");
124char * _PREHASH_ObjectPermissions; 124char* _PREHASH_ObjectPermissions = LLMessageStringTable::getInstance()->getString("ObjectPermissions");
125char * _PREHASH_RevokePermissions; 125char* _PREHASH_RevokePermissions = LLMessageStringTable::getInstance()->getString("RevokePermissions");
126char * _PREHASH_UpdateFlags; 126char* _PREHASH_UpdateFlags = LLMessageStringTable::getInstance()->getString("UpdateFlags");
127char * _PREHASH_ObjectExportSelected; 127char* _PREHASH_ObjectExportSelected = LLMessageStringTable::getInstance()->getString("ObjectExportSelected");
128char * _PREHASH_RezSelected; 128char* _PREHASH_RezSelected = LLMessageStringTable::getInstance()->getString("RezSelected");
129char * _PREHASH_AutoPilot; 129char* _PREHASH_AutoPilot = LLMessageStringTable::getInstance()->getString("AutoPilot");
130char * _PREHASH_UpdateMuteListEntry; 130char* _PREHASH_UpdateMuteListEntry = LLMessageStringTable::getInstance()->getString("UpdateMuteListEntry");
131char * _PREHASH_RemoveMuteListEntry; 131char* _PREHASH_RemoveMuteListEntry = LLMessageStringTable::getInstance()->getString("RemoveMuteListEntry");
132char * _PREHASH_SetSimStatusInDatabase; 132char* _PREHASH_SetSimStatusInDatabase = LLMessageStringTable::getInstance()->getString("SetSimStatusInDatabase");
133char * _PREHASH_SetSimPresenceInDatabase; 133char* _PREHASH_SetSimPresenceInDatabase = LLMessageStringTable::getInstance()->getString("SetSimPresenceInDatabase");
134char * _PREHASH_CameraProperty; 134char* _PREHASH_CameraProperty = LLMessageStringTable::getInstance()->getString("CameraProperty");
135char * _PREHASH_BrushSize; 135char* _PREHASH_BrushSize = LLMessageStringTable::getInstance()->getString("BrushSize");
136char * _PREHASH_SimulatorSetMap; 136char* _PREHASH_SimulatorSetMap = LLMessageStringTable::getInstance()->getString("SimulatorSetMap");
137char * _PREHASH_RegionPresenceRequestByRegionID; 137char* _PREHASH_RegionPresenceRequestByRegionID = LLMessageStringTable::getInstance()->getString("RegionPresenceRequestByRegionID");
138char * _PREHASH_ParcelObjectOwnersReply; 138char* _PREHASH_ParcelObjectOwnersReply = LLMessageStringTable::getInstance()->getString("ParcelObjectOwnersReply");
139char * _PREHASH_GroupMembersReply; 139char* _PREHASH_GroupMembersReply = LLMessageStringTable::getInstance()->getString("GroupMembersReply");
140char * _PREHASH_GroupRoleMembersReply; 140char* _PREHASH_GroupRoleMembersReply = LLMessageStringTable::getInstance()->getString("GroupRoleMembersReply");
141char * _PREHASH_RequestRegionInfo; 141char* _PREHASH_RequestRegionInfo = LLMessageStringTable::getInstance()->getString("RequestRegionInfo");
142char * _PREHASH_AABBMax; 142char* _PREHASH_AABBMax = LLMessageStringTable::getInstance()->getString("AABBMax");
143char * _PREHASH_RequestPayPrice; 143char* _PREHASH_RequestPayPrice = LLMessageStringTable::getInstance()->getString("RequestPayPrice");
144char * _PREHASH_SimulatorPresentAtLocation; 144char* _PREHASH_SimulatorPresentAtLocation = LLMessageStringTable::getInstance()->getString("SimulatorPresentAtLocation");
145char * _PREHASH_AgentRequestSit; 145char* _PREHASH_AgentRequestSit = LLMessageStringTable::getInstance()->getString("AgentRequestSit");
146char * _PREHASH_AABBMin; 146char* _PREHASH_AABBMin = LLMessageStringTable::getInstance()->getString("AABBMin");
147char * _PREHASH_ClassifiedFlags; 147char* _PREHASH_ClassifiedFlags = LLMessageStringTable::getInstance()->getString("ClassifiedFlags");
148char * _PREHASH_ControlFlags; 148char* _PREHASH_ControlFlags = LLMessageStringTable::getInstance()->getString("ControlFlags");
149char * _PREHASH_TeleportRequest; 149char* _PREHASH_TeleportRequest = LLMessageStringTable::getInstance()->getString("TeleportRequest");
150char * _PREHASH_ScriptTeleportRequest; 150char* _PREHASH_ScriptTeleportRequest = LLMessageStringTable::getInstance()->getString("ScriptTeleportRequest");
151char * _PREHASH_EstateCovenantRequest; 151char* _PREHASH_EstateCovenantRequest = LLMessageStringTable::getInstance()->getString("EstateCovenantRequest");
152char * _PREHASH_DateUTC; 152char* _PREHASH_DateUTC = LLMessageStringTable::getInstance()->getString("DateUTC");
153char * _PREHASH_TaskIDs; 153char* _PREHASH_TaskIDs = LLMessageStringTable::getInstance()->getString("TaskIDs");
154char * _PREHASH_RequestResult; 154char* _PREHASH_RequestResult = LLMessageStringTable::getInstance()->getString("RequestResult");
155char * _PREHASH_CanAcceptAgents; 155char* _PREHASH_CanAcceptAgents = LLMessageStringTable::getInstance()->getString("CanAcceptAgents");
156char * _PREHASH_ObjectSaleInfo; 156char* _PREHASH_ObjectSaleInfo = LLMessageStringTable::getInstance()->getString("ObjectSaleInfo");
157char * _PREHASH_KillChildAgents; 157char* _PREHASH_KillChildAgents = LLMessageStringTable::getInstance()->getString("KillChildAgents");
158char * _PREHASH_Balance; 158char* _PREHASH_Balance = LLMessageStringTable::getInstance()->getString("Balance");
159char * _PREHASH_DerezContainer; 159char* _PREHASH_DerezContainer = LLMessageStringTable::getInstance()->getString("DerezContainer");
160char * _PREHASH_ObjectData; 160char* _PREHASH_ObjectData = LLMessageStringTable::getInstance()->getString("ObjectData");
161char * _PREHASH_CameraAtAxis; 161char* _PREHASH_CameraAtAxis = LLMessageStringTable::getInstance()->getString("CameraAtAxis");
162char * _PREHASH_InfoBlock; 162char* _PREHASH_InfoBlock = LLMessageStringTable::getInstance()->getString("InfoBlock");
163char * _PREHASH_OwnershipCost; 163char* _PREHASH_OwnershipCost = LLMessageStringTable::getInstance()->getString("OwnershipCost");
164char * _PREHASH_AvatarNotesUpdate; 164char* _PREHASH_AvatarNotesUpdate = LLMessageStringTable::getInstance()->getString("AvatarNotesUpdate");
165char * _PREHASH_PID; 165char* _PREHASH_PID = LLMessageStringTable::getInstance()->getString("PID");
166char * _PREHASH_DirPopularReply; 166char* _PREHASH_DirPopularReply = LLMessageStringTable::getInstance()->getString("DirPopularReply");
167char * _PREHASH_TerrainHeightRange00; 167char* _PREHASH_TerrainHeightRange00 = LLMessageStringTable::getInstance()->getString("TerrainHeightRange00");
168char * _PREHASH_SimData; 168char* _PREHASH_SimData = LLMessageStringTable::getInstance()->getString("SimData");
169char * _PREHASH_TerrainHeightRange01; 169char* _PREHASH_TerrainHeightRange01 = LLMessageStringTable::getInstance()->getString("TerrainHeightRange01");
170char * _PREHASH_TerrainHeightRange10; 170char* _PREHASH_TerrainHeightRange10 = LLMessageStringTable::getInstance()->getString("TerrainHeightRange10");
171char * _PREHASH_TerrainHeightRange11; 171char* _PREHASH_TerrainHeightRange11 = LLMessageStringTable::getInstance()->getString("TerrainHeightRange11");
172char * _PREHASH_UpdateInventoryItem; 172char* _PREHASH_UpdateInventoryItem = LLMessageStringTable::getInstance()->getString("UpdateInventoryItem");
173char * _PREHASH_UpdateCreateInventoryItem; 173char* _PREHASH_UpdateCreateInventoryItem = LLMessageStringTable::getInstance()->getString("UpdateCreateInventoryItem");
174char * _PREHASH_MoveInventoryItem; 174char* _PREHASH_MoveInventoryItem = LLMessageStringTable::getInstance()->getString("MoveInventoryItem");
175char * _PREHASH_CopyInventoryItem; 175char* _PREHASH_CopyInventoryItem = LLMessageStringTable::getInstance()->getString("CopyInventoryItem");
176char * _PREHASH_RemoveInventoryItem; 176char* _PREHASH_RemoveInventoryItem = LLMessageStringTable::getInstance()->getString("RemoveInventoryItem");
177char * _PREHASH_CreateInventoryItem; 177char* _PREHASH_CreateInventoryItem = LLMessageStringTable::getInstance()->getString("CreateInventoryItem");
178char * _PREHASH_PathTwistBegin; 178char* _PREHASH_PathTwistBegin = LLMessageStringTable::getInstance()->getString("PathTwistBegin");
179char * _PREHASH_CRC; 179char* _PREHASH_CRC = LLMessageStringTable::getInstance()->getString("CRC");
180char * _PREHASH_AttachmentPoint; 180char* _PREHASH_AttachmentPoint = LLMessageStringTable::getInstance()->getString("AttachmentPoint");
181char * _PREHASH_TelehubBlock; 181char* _PREHASH_TelehubBlock = LLMessageStringTable::getInstance()->getString("TelehubBlock");
182char * _PREHASH_FOVBlock; 182char* _PREHASH_FOVBlock = LLMessageStringTable::getInstance()->getString("FOVBlock");
183char * _PREHASH_StartLocationData; 183char* _PREHASH_StartLocationData = LLMessageStringTable::getInstance()->getString("StartLocationData");
184char * _PREHASH_PositionData; 184char* _PREHASH_PositionData = LLMessageStringTable::getInstance()->getString("PositionData");
185char * _PREHASH_TimeSinceLast; 185char* _PREHASH_TimeSinceLast = LLMessageStringTable::getInstance()->getString("TimeSinceLast");
186char * _PREHASH_MapImage; 186char* _PREHASH_MapImage = LLMessageStringTable::getInstance()->getString("MapImage");
187char * _PREHASH_Objects; 187char* _PREHASH_Objects = LLMessageStringTable::getInstance()->getString("Objects");
188char * _PREHASH_URL; 188char* _PREHASH_URL = LLMessageStringTable::getInstance()->getString("URL");
189char * _PREHASH_CreationDate; 189char* _PREHASH_CreationDate = LLMessageStringTable::getInstance()->getString("CreationDate");
190char * _PREHASH_JointPivot; 190char* _PREHASH_JointPivot = LLMessageStringTable::getInstance()->getString("JointPivot");
191char * _PREHASH_FPS; 191char* _PREHASH_FPS = LLMessageStringTable::getInstance()->getString("FPS");
192char * _PREHASH_HasTelehub; 192char* _PREHASH_HasTelehub = LLMessageStringTable::getInstance()->getString("HasTelehub");
193char * _PREHASH_PathEnd; 193char* _PREHASH_PathEnd = LLMessageStringTable::getInstance()->getString("PathEnd");
194char * _PREHASH_ScriptDataReply; 194char* _PREHASH_ScriptDataReply = LLMessageStringTable::getInstance()->getString("ScriptDataReply");
195char * _PREHASH_MapBlockReply; 195char* _PREHASH_MapBlockReply = LLMessageStringTable::getInstance()->getString("MapBlockReply");
196char * _PREHASH_PropertiesData; 196char* _PREHASH_PropertiesData = LLMessageStringTable::getInstance()->getString("PropertiesData");
197char * _PREHASH_ViewerEffect; 197char* _PREHASH_ViewerEffect = LLMessageStringTable::getInstance()->getString("ViewerEffect");
198char * _PREHASH_FreezeUser; 198char* _PREHASH_FreezeUser = LLMessageStringTable::getInstance()->getString("FreezeUser");
199char * _PREHASH_OwnerPrims; 199char* _PREHASH_OwnerPrims = LLMessageStringTable::getInstance()->getString("OwnerPrims");
200char * _PREHASH_ObjectGrab; 200char* _PREHASH_ObjectGrab = LLMessageStringTable::getInstance()->getString("ObjectGrab");
201char * _PREHASH_ToAgentID; 201char* _PREHASH_ToAgentID = LLMessageStringTable::getInstance()->getString("ToAgentID");
202char * _PREHASH_SimulatorMapUpdate; 202char* _PREHASH_SimulatorMapUpdate = LLMessageStringTable::getInstance()->getString("SimulatorMapUpdate");
203char * _PREHASH_TransferPacket; 203char* _PREHASH_TransferPacket = LLMessageStringTable::getInstance()->getString("TransferPacket");
204char * _PREHASH_ObjectName; 204char* _PREHASH_ObjectName = LLMessageStringTable::getInstance()->getString("ObjectName");
205char * _PREHASH_GroupPowers; 205char* _PREHASH_GroupPowers = LLMessageStringTable::getInstance()->getString("GroupPowers");
206char * _PREHASH_OriginalName; 206char* _PREHASH_OriginalName = LLMessageStringTable::getInstance()->getString("OriginalName");
207char * _PREHASH_CompletePingCheck; 207char* _PREHASH_CompletePingCheck = LLMessageStringTable::getInstance()->getString("CompletePingCheck");
208char * _PREHASH_OnlineStatus; 208char* _PREHASH_OnlineStatus = LLMessageStringTable::getInstance()->getString("OnlineStatus");
209char * _PREHASH_ObjectDrop; 209char* _PREHASH_ObjectDrop = LLMessageStringTable::getInstance()->getString("ObjectDrop");
210char * _PREHASH_UseBigPackets; 210char* _PREHASH_UseBigPackets = LLMessageStringTable::getInstance()->getString("UseBigPackets");
211char * _PREHASH_GroupNoticesListReply; 211char* _PREHASH_GroupNoticesListReply = LLMessageStringTable::getInstance()->getString("GroupNoticesListReply");
212char * _PREHASH_ParcelAccessListReply; 212char* _PREHASH_ParcelAccessListReply = LLMessageStringTable::getInstance()->getString("ParcelAccessListReply");
213char * _PREHASH_RpcChannelReply; 213char* _PREHASH_RpcChannelReply = LLMessageStringTable::getInstance()->getString("RpcChannelReply");
214char * _PREHASH_RegionPresenceResponse; 214char* _PREHASH_RegionPresenceResponse = LLMessageStringTable::getInstance()->getString("RegionPresenceResponse");
215char * _PREHASH_CharterMember; 215char* _PREHASH_CharterMember = LLMessageStringTable::getInstance()->getString("CharterMember");
216char * _PREHASH_EdgeData; 216char* _PREHASH_EdgeData = LLMessageStringTable::getInstance()->getString("EdgeData");
217char * _PREHASH_NameData; 217char* _PREHASH_NameData = LLMessageStringTable::getInstance()->getString("NameData");
218char * _PREHASH_RegionPushOverride; 218char* _PREHASH_RegionPushOverride = LLMessageStringTable::getInstance()->getString("RegionPushOverride");
219char * _PREHASH_SimName; 219char* _PREHASH_SimName = LLMessageStringTable::getInstance()->getString("SimName");
220char * _PREHASH_UserReport; 220char* _PREHASH_UserReport = LLMessageStringTable::getInstance()->getString("UserReport");
221char * _PREHASH_DownloadPriority; 221char* _PREHASH_DownloadPriority = LLMessageStringTable::getInstance()->getString("DownloadPriority");
222char * _PREHASH_ToAgentId; 222char* _PREHASH_ToAgentId = LLMessageStringTable::getInstance()->getString("ToAgentId");
223char * _PREHASH_DirPopularQuery; 223char* _PREHASH_DirPopularQuery = LLMessageStringTable::getInstance()->getString("DirPopularQuery");
224char * _PREHASH_Mag; 224char* _PREHASH_Mag = LLMessageStringTable::getInstance()->getString("Mag");
225char * _PREHASH_ParcelPropertiesRequestByID; 225char* _PREHASH_ParcelPropertiesRequestByID = LLMessageStringTable::getInstance()->getString("ParcelPropertiesRequestByID");
226char * _PREHASH_ObjectLink; 226char* _PREHASH_ObjectLink = LLMessageStringTable::getInstance()->getString("ObjectLink");
227char * _PREHASH_RpcScriptReplyInbound; 227char* _PREHASH_RpcScriptReplyInbound = LLMessageStringTable::getInstance()->getString("RpcScriptReplyInbound");
228char * _PREHASH_RezData; 228char* _PREHASH_RezData = LLMessageStringTable::getInstance()->getString("RezData");
229char * _PREHASH_RemoveInventoryObjects; 229char* _PREHASH_RemoveInventoryObjects = LLMessageStringTable::getInstance()->getString("RemoveInventoryObjects");
230char * _PREHASH_GroupProposalBallot; 230char* _PREHASH_GroupProposalBallot = LLMessageStringTable::getInstance()->getString("GroupProposalBallot");
231char * _PREHASH_RPCServerIP; 231char* _PREHASH_RPCServerIP = LLMessageStringTable::getInstance()->getString("RPCServerIP");
232char * _PREHASH_Far; 232char* _PREHASH_Far = LLMessageStringTable::getInstance()->getString("Far");
233char * _PREHASH_GodSessionID; 233char* _PREHASH_GodSessionID = LLMessageStringTable::getInstance()->getString("GodSessionID");
234char * _PREHASH_FLAboutText; 234char* _PREHASH_FLAboutText = LLMessageStringTable::getInstance()->getString("FLAboutText");
235char * _PREHASH_RegionHandshakeReply; 235char* _PREHASH_RegionHandshakeReply = LLMessageStringTable::getInstance()->getString("RegionHandshakeReply");
236char * _PREHASH_GroupActiveProposalItemReply; 236char* _PREHASH_GroupActiveProposalItemReply = LLMessageStringTable::getInstance()->getString("GroupActiveProposalItemReply");
237char * _PREHASH_MapItemReply; 237char* _PREHASH_MapItemReply = LLMessageStringTable::getInstance()->getString("MapItemReply");
238char * _PREHASH_Seconds; 238char* _PREHASH_Seconds = LLMessageStringTable::getInstance()->getString("Seconds");
239char * _PREHASH_UpdateUserInfo; 239char* _PREHASH_UpdateUserInfo = LLMessageStringTable::getInstance()->getString("UpdateUserInfo");
240char * _PREHASH_AggregatePermTexturesOwner; 240char* _PREHASH_AggregatePermTexturesOwner = LLMessageStringTable::getInstance()->getString("AggregatePermTexturesOwner");
241char * _PREHASH_Set; 241char* _PREHASH_Set = LLMessageStringTable::getInstance()->getString("Set");
242char * _PREHASH_NewName; 242char* _PREHASH_NewName = LLMessageStringTable::getInstance()->getString("NewName");
243char * _PREHASH_Key; 243char* _PREHASH_Key = LLMessageStringTable::getInstance()->getString("Key");
244char * _PREHASH_AgentID; 244char* _PREHASH_AgentID = LLMessageStringTable::getInstance()->getString("AgentID");
245char * _PREHASH_EventNotificationRemoveRequest; 245char* _PREHASH_EventNotificationRemoveRequest = LLMessageStringTable::getInstance()->getString("EventNotificationRemoveRequest");
246char * _PREHASH_NewFolderID; 246char* _PREHASH_NewFolderID = LLMessageStringTable::getInstance()->getString("NewFolderID");
247char * _PREHASH_Arc; 247char* _PREHASH_Arc = LLMessageStringTable::getInstance()->getString("Arc");
248char * _PREHASH_RegionX; 248char* _PREHASH_RegionX = LLMessageStringTable::getInstance()->getString("RegionX");
249char * _PREHASH_RegionY; 249char* _PREHASH_RegionY = LLMessageStringTable::getInstance()->getString("RegionY");
250char * _PREHASH_RequestData; 250char* _PREHASH_RequestData = LLMessageStringTable::getInstance()->getString("RequestData");
251char * _PREHASH_Msg; 251char* _PREHASH_Msg = LLMessageStringTable::getInstance()->getString("Msg");
252char * _PREHASH_Top; 252char* _PREHASH_Top = LLMessageStringTable::getInstance()->getString("Top");
253char * _PREHASH_MiscStats; 253char* _PREHASH_MiscStats = LLMessageStringTable::getInstance()->getString("MiscStats");
254char * _PREHASH_ImageID; 254char* _PREHASH_ImageID = LLMessageStringTable::getInstance()->getString("ImageID");
255char * _PREHASH_DataPacket; 255char* _PREHASH_DataPacket = LLMessageStringTable::getInstance()->getString("DataPacket");
256char * _PREHASH_You; 256char* _PREHASH_You = LLMessageStringTable::getInstance()->getString("You");
257char * _PREHASH_ScriptControlChange; 257char* _PREHASH_ScriptControlChange = LLMessageStringTable::getInstance()->getString("ScriptControlChange");
258char * _PREHASH_LoadURL; 258char* _PREHASH_LoadURL = LLMessageStringTable::getInstance()->getString("LoadURL");
259char * _PREHASH_SetCPURatio; 259char* _PREHASH_SetCPURatio = LLMessageStringTable::getInstance()->getString("SetCPURatio");
260char * _PREHASH_NameValueData; 260char* _PREHASH_NameValueData = LLMessageStringTable::getInstance()->getString("NameValueData");
261char * _PREHASH_AtomicPassObject; 261char* _PREHASH_AtomicPassObject = LLMessageStringTable::getInstance()->getString("AtomicPassObject");
262char * _PREHASH_ErrorMessage; 262char* _PREHASH_ErrorMessage = LLMessageStringTable::getInstance()->getString("ErrorMessage");
263char * _PREHASH_ViewerFrozenMessage; 263char* _PREHASH_ViewerFrozenMessage = LLMessageStringTable::getInstance()->getString("ViewerFrozenMessage");
264char * _PREHASH_HealthMessage; 264char* _PREHASH_HealthMessage = LLMessageStringTable::getInstance()->getString("HealthMessage");
265char * _PREHASH_LogTextMessage; 265char* _PREHASH_LogTextMessage = LLMessageStringTable::getInstance()->getString("LogTextMessage");
266char * _PREHASH_TimeDilation; 266char* _PREHASH_TimeDilation = LLMessageStringTable::getInstance()->getString("TimeDilation");
267char * _PREHASH_RemoveContribution; 267char* _PREHASH_RemoveContribution = LLMessageStringTable::getInstance()->getString("RemoveContribution");
268char * _PREHASH_Contribution; 268char* _PREHASH_Contribution = LLMessageStringTable::getInstance()->getString("Contribution");
269char * _PREHASH_SetGroupContribution; 269char* _PREHASH_SetGroupContribution = LLMessageStringTable::getInstance()->getString("SetGroupContribution");
270char * _PREHASH_Offline; 270char* _PREHASH_Offline = LLMessageStringTable::getInstance()->getString("Offline");
271char * _PREHASH_AgentIsNowWearing; 271char* _PREHASH_AgentIsNowWearing = LLMessageStringTable::getInstance()->getString("AgentIsNowWearing");
272char * _PREHASH_Members; 272char* _PREHASH_Members = LLMessageStringTable::getInstance()->getString("Members");
273char * _PREHASH_FailedResends; 273char* _PREHASH_FailedResends = LLMessageStringTable::getInstance()->getString("FailedResends");
274char * _PREHASH_SecPerDay; 274char* _PREHASH_SecPerDay = LLMessageStringTable::getInstance()->getString("SecPerDay");
275char * _PREHASH_CameraCenter; 275char* _PREHASH_CameraCenter = LLMessageStringTable::getInstance()->getString("CameraCenter");
276char * _PREHASH_CameraLeftAxis; 276char* _PREHASH_CameraLeftAxis = LLMessageStringTable::getInstance()->getString("CameraLeftAxis");
277char * _PREHASH_ExBlock; 277char* _PREHASH_ExBlock = LLMessageStringTable::getInstance()->getString("ExBlock");
278char * _PREHASH_Channel; 278char* _PREHASH_Channel = LLMessageStringTable::getInstance()->getString("Channel");
279char * _PREHASH_NetTest; 279char* _PREHASH_NetTest = LLMessageStringTable::getInstance()->getString("NetTest");
280char * _PREHASH_DiscardLevel; 280char* _PREHASH_DiscardLevel = LLMessageStringTable::getInstance()->getString("DiscardLevel");
281char * _PREHASH_LayerID; 281char* _PREHASH_LayerID = LLMessageStringTable::getInstance()->getString("LayerID");
282char * _PREHASH_GrabOffset; 282char* _PREHASH_GrabOffset = LLMessageStringTable::getInstance()->getString("GrabOffset");
283char * _PREHASH_SimPort; 283char* _PREHASH_SimPort = LLMessageStringTable::getInstance()->getString("SimPort");
284char * _PREHASH_PricePerMeter; 284char* _PREHASH_PricePerMeter = LLMessageStringTable::getInstance()->getString("PricePerMeter");
285char * _PREHASH_RegionFlags; 285char* _PREHASH_RegionFlags = LLMessageStringTable::getInstance()->getString("RegionFlags");
286char * _PREHASH_VoteResult; 286char* _PREHASH_VoteResult = LLMessageStringTable::getInstance()->getString("VoteResult");
287char * _PREHASH_ParcelDirFeeEstimate; 287char* _PREHASH_ParcelDirFeeEstimate = LLMessageStringTable::getInstance()->getString("ParcelDirFeeEstimate");
288char * _PREHASH_ModifyBlock; 288char* _PREHASH_ModifyBlock = LLMessageStringTable::getInstance()->getString("ModifyBlock");
289char * _PREHASH_InventoryBlock; 289char* _PREHASH_InventoryBlock = LLMessageStringTable::getInstance()->getString("InventoryBlock");
290char * _PREHASH_ReplyBlock; 290char* _PREHASH_ReplyBlock = LLMessageStringTable::getInstance()->getString("ReplyBlock");
291char * _PREHASH_ValidUntil; 291char* _PREHASH_ValidUntil = LLMessageStringTable::getInstance()->getString("ValidUntil");
292char * _PREHASH_VelocityInterpolateOn; 292char* _PREHASH_VelocityInterpolateOn = LLMessageStringTable::getInstance()->getString("VelocityInterpolateOn");
293char * _PREHASH_ClassifiedDelete; 293char* _PREHASH_ClassifiedDelete = LLMessageStringTable::getInstance()->getString("ClassifiedDelete");
294char * _PREHASH_RegionDenyAnonymous; 294char* _PREHASH_RegionDenyAnonymous = LLMessageStringTable::getInstance()->getString("RegionDenyAnonymous");
295char * _PREHASH_FLImageID; 295char* _PREHASH_FLImageID = LLMessageStringTable::getInstance()->getString("FLImageID");
296char * _PREHASH_AllowPublish; 296char* _PREHASH_AllowPublish = LLMessageStringTable::getInstance()->getString("AllowPublish");
297char * _PREHASH_SitName; 297char* _PREHASH_SitName = LLMessageStringTable::getInstance()->getString("SitName");
298char * _PREHASH_RegionsVisited; 298char* _PREHASH_RegionsVisited = LLMessageStringTable::getInstance()->getString("RegionsVisited");
299char * _PREHASH_DirClassifiedReply; 299char* _PREHASH_DirClassifiedReply = LLMessageStringTable::getInstance()->getString("DirClassifiedReply");
300char * _PREHASH_AvatarClassifiedReply; 300char* _PREHASH_AvatarClassifiedReply = LLMessageStringTable::getInstance()->getString("AvatarClassifiedReply");
301char * _PREHASH_MediaURL; 301char* _PREHASH_MediaURL = LLMessageStringTable::getInstance()->getString("MediaURL");
302char * _PREHASH_CompleteAgentMovement; 302char* _PREHASH_CompleteAgentMovement = LLMessageStringTable::getInstance()->getString("CompleteAgentMovement");
303char * _PREHASH_ClassifiedID; 303char* _PREHASH_ClassifiedID = LLMessageStringTable::getInstance()->getString("ClassifiedID");
304char * _PREHASH_LocalID; 304char* _PREHASH_LocalID = LLMessageStringTable::getInstance()->getString("LocalID");
305char * _PREHASH_SpaceIP; 305char* _PREHASH_SpaceIP = LLMessageStringTable::getInstance()->getString("SpaceIP");
306char * _PREHASH_RemoveItem; 306char* _PREHASH_RemoveItem = LLMessageStringTable::getInstance()->getString("RemoveItem");
307char * _PREHASH_LogFailedMoneyTransaction; 307char* _PREHASH_LogFailedMoneyTransaction = LLMessageStringTable::getInstance()->getString("LogFailedMoneyTransaction");
308char * _PREHASH_ViewerStartAuction; 308char* _PREHASH_ViewerStartAuction = LLMessageStringTable::getInstance()->getString("ViewerStartAuction");
309char * _PREHASH_StartAuction; 309char* _PREHASH_StartAuction = LLMessageStringTable::getInstance()->getString("StartAuction");
310char * _PREHASH_DuplicateFlags; 310char* _PREHASH_DuplicateFlags = LLMessageStringTable::getInstance()->getString("DuplicateFlags");
311char * _PREHASH_RegionInfo2; 311char* _PREHASH_RegionInfo2 = LLMessageStringTable::getInstance()->getString("RegionInfo2");
312char * _PREHASH_TextColor; 312char* _PREHASH_TextColor = LLMessageStringTable::getInstance()->getString("TextColor");
313char * _PREHASH_SlaveID; 313char* _PREHASH_SlaveID = LLMessageStringTable::getInstance()->getString("SlaveID");
314char * _PREHASH_Charter; 314char* _PREHASH_Charter = LLMessageStringTable::getInstance()->getString("Charter");
315char * _PREHASH_AlertData; 315char* _PREHASH_AlertData = LLMessageStringTable::getInstance()->getString("AlertData");
316char * _PREHASH_TargetBlock; 316char* _PREHASH_TargetBlock = LLMessageStringTable::getInstance()->getString("TargetBlock");
317char * _PREHASH_CheckParcelAuctions; 317char* _PREHASH_CheckParcelAuctions = LLMessageStringTable::getInstance()->getString("CheckParcelAuctions");
318char * _PREHASH_ParcelAuctions; 318char* _PREHASH_ParcelAuctions = LLMessageStringTable::getInstance()->getString("ParcelAuctions");
319char * _PREHASH_OwnerIsGroup; 319char* _PREHASH_OwnerIsGroup = LLMessageStringTable::getInstance()->getString("OwnerIsGroup");
320char * _PREHASH_NameValuePair; 320char* _PREHASH_NameValuePair = LLMessageStringTable::getInstance()->getString("NameValuePair");
321char * _PREHASH_RemoveNameValuePair; 321char* _PREHASH_RemoveNameValuePair = LLMessageStringTable::getInstance()->getString("RemoveNameValuePair");
322char * _PREHASH_BulkUpdateInventory; 322char* _PREHASH_BulkUpdateInventory = LLMessageStringTable::getInstance()->getString("BulkUpdateInventory");
323char * _PREHASH_UpdateTaskInventory; 323char* _PREHASH_UpdateTaskInventory = LLMessageStringTable::getInstance()->getString("UpdateTaskInventory");
324char * _PREHASH_RemoveTaskInventory; 324char* _PREHASH_RemoveTaskInventory = LLMessageStringTable::getInstance()->getString("RemoveTaskInventory");
325char * _PREHASH_MoveTaskInventory; 325char* _PREHASH_MoveTaskInventory = LLMessageStringTable::getInstance()->getString("MoveTaskInventory");
326char * _PREHASH_RequestTaskInventory; 326char* _PREHASH_RequestTaskInventory = LLMessageStringTable::getInstance()->getString("RequestTaskInventory");
327char * _PREHASH_ReplyTaskInventory; 327char* _PREHASH_ReplyTaskInventory = LLMessageStringTable::getInstance()->getString("ReplyTaskInventory");
328char * _PREHASH_AggregatePermInventory; 328char* _PREHASH_AggregatePermInventory = LLMessageStringTable::getInstance()->getString("AggregatePermInventory");
329char * _PREHASH_GroupAccountTransactionsReply; 329char* _PREHASH_GroupAccountTransactionsReply = LLMessageStringTable::getInstance()->getString("GroupAccountTransactionsReply");
330char * _PREHASH_SimulatorInfo; 330char* _PREHASH_SimulatorInfo = LLMessageStringTable::getInstance()->getString("SimulatorInfo");
331char * _PREHASH_WearableData; 331char* _PREHASH_WearableData = LLMessageStringTable::getInstance()->getString("WearableData");
332char * _PREHASH_Enabled; 332char* _PREHASH_Enabled = LLMessageStringTable::getInstance()->getString("Enabled");
333char * _PREHASH_Savings; 333char* _PREHASH_Savings = LLMessageStringTable::getInstance()->getString("Savings");
334char * _PREHASH_SimulatorLoad; 334char* _PREHASH_SimulatorLoad = LLMessageStringTable::getInstance()->getString("SimulatorLoad");
335char * _PREHASH_InternalRegionIP; 335char* _PREHASH_InternalRegionIP = LLMessageStringTable::getInstance()->getString("InternalRegionIP");
336char * _PREHASH_ExternalRegionIP; 336char* _PREHASH_ExternalRegionIP = LLMessageStringTable::getInstance()->getString("ExternalRegionIP");
337char * _PREHASH_TotalPairs; 337char* _PREHASH_TotalPairs = LLMessageStringTable::getInstance()->getString("TotalPairs");
338char * _PREHASH_CreateGroupRequest; 338char* _PREHASH_CreateGroupRequest = LLMessageStringTable::getInstance()->getString("CreateGroupRequest");
339char * _PREHASH_JoinGroupRequest; 339char* _PREHASH_JoinGroupRequest = LLMessageStringTable::getInstance()->getString("JoinGroupRequest");
340char * _PREHASH_LeaveGroupRequest; 340char* _PREHASH_LeaveGroupRequest = LLMessageStringTable::getInstance()->getString("LeaveGroupRequest");
341char * _PREHASH_InviteGroupRequest; 341char* _PREHASH_InviteGroupRequest = LLMessageStringTable::getInstance()->getString("InviteGroupRequest");
342char * _PREHASH_LiveHelpGroupRequest; 342char* _PREHASH_LiveHelpGroupRequest = LLMessageStringTable::getInstance()->getString("LiveHelpGroupRequest");
343char * _PREHASH_PriceParcelClaimFactor; 343char* _PREHASH_PriceParcelClaimFactor = LLMessageStringTable::getInstance()->getString("PriceParcelClaimFactor");
344char * _PREHASH_BillableArea; 344char* _PREHASH_BillableArea = LLMessageStringTable::getInstance()->getString("BillableArea");
345char * _PREHASH_ObjectID; 345char* _PREHASH_ObjectID = LLMessageStringTable::getInstance()->getString("ObjectID");
346char * _PREHASH_ObjectFlagUpdate; 346char* _PREHASH_ObjectFlagUpdate = LLMessageStringTable::getInstance()->getString("ObjectFlagUpdate");
347char * _PREHASH_GroupRoleUpdate; 347char* _PREHASH_GroupRoleUpdate = LLMessageStringTable::getInstance()->getString("GroupRoleUpdate");
348char * _PREHASH_RequestInventoryAsset; 348char* _PREHASH_RequestInventoryAsset = LLMessageStringTable::getInstance()->getString("RequestInventoryAsset");
349char * _PREHASH_ChangedGrid; 349char* _PREHASH_ChangedGrid = LLMessageStringTable::getInstance()->getString("ChangedGrid");
350char * _PREHASH_AgentDropGroup; 350char* _PREHASH_AgentDropGroup = LLMessageStringTable::getInstance()->getString("AgentDropGroup");
351char * _PREHASH_Details; 351char* _PREHASH_Details = LLMessageStringTable::getInstance()->getString("Details");
352char * _PREHASH_LocationX; 352char* _PREHASH_LocationX = LLMessageStringTable::getInstance()->getString("LocationX");
353char * _PREHASH_SaleType; 353char* _PREHASH_SaleType = LLMessageStringTable::getInstance()->getString("SaleType");
354char * _PREHASH_LocationY; 354char* _PREHASH_LocationY = LLMessageStringTable::getInstance()->getString("LocationY");
355char * _PREHASH_LocationZ; 355char* _PREHASH_LocationZ = LLMessageStringTable::getInstance()->getString("LocationZ");
356char * _PREHASH_EconomyData; 356char* _PREHASH_EconomyData = LLMessageStringTable::getInstance()->getString("EconomyData");
357char * _PREHASH_HeadRotation; 357char* _PREHASH_HeadRotation = LLMessageStringTable::getInstance()->getString("HeadRotation");
358char * _PREHASH_DeleteOnCompletion; 358char* _PREHASH_DeleteOnCompletion = LLMessageStringTable::getInstance()->getString("DeleteOnCompletion");
359char * _PREHASH_PublicPort; 359char* _PREHASH_PublicPort = LLMessageStringTable::getInstance()->getString("PublicPort");
360char * _PREHASH_DirClassifiedQuery; 360char* _PREHASH_DirClassifiedQuery = LLMessageStringTable::getInstance()->getString("DirClassifiedQuery");
361char * _PREHASH_CallbackID; 361char* _PREHASH_CallbackID = LLMessageStringTable::getInstance()->getString("CallbackID");
362char * _PREHASH_RequestParcelTransfer; 362char* _PREHASH_RequestParcelTransfer = LLMessageStringTable::getInstance()->getString("RequestParcelTransfer");
363char * _PREHASH_RoleCount; 363char* _PREHASH_RoleCount = LLMessageStringTable::getInstance()->getString("RoleCount");
364char * _PREHASH_ObjectCapacity; 364char* _PREHASH_ObjectCapacity = LLMessageStringTable::getInstance()->getString("ObjectCapacity");
365char * _PREHASH_RequestID; 365char* _PREHASH_RequestID = LLMessageStringTable::getInstance()->getString("RequestID");
366char * _PREHASH_RequestXfer; 366char* _PREHASH_RequestXfer = LLMessageStringTable::getInstance()->getString("RequestXfer");
367char * _PREHASH_ObjectTaxCurrent; 367char* _PREHASH_ObjectTaxCurrent = LLMessageStringTable::getInstance()->getString("ObjectTaxCurrent");
368char * _PREHASH_LightTaxCurrent; 368char* _PREHASH_LightTaxCurrent = LLMessageStringTable::getInstance()->getString("LightTaxCurrent");
369char * _PREHASH_LandTaxCurrent; 369char* _PREHASH_LandTaxCurrent = LLMessageStringTable::getInstance()->getString("LandTaxCurrent");
370char * _PREHASH_GroupTaxCurrent; 370char* _PREHASH_GroupTaxCurrent = LLMessageStringTable::getInstance()->getString("GroupTaxCurrent");
371char * _PREHASH_FetchInventoryDescendents; 371char* _PREHASH_FetchInventoryDescendents = LLMessageStringTable::getInstance()->getString("FetchInventoryDescendents");
372char * _PREHASH_InventoryDescendents; 372char* _PREHASH_InventoryDescendents = LLMessageStringTable::getInstance()->getString("InventoryDescendents");
373char * _PREHASH_Descendents; 373char* _PREHASH_Descendents = LLMessageStringTable::getInstance()->getString("Descendents");
374char * _PREHASH_PurgeInventoryDescendents; 374char* _PREHASH_PurgeInventoryDescendents = LLMessageStringTable::getInstance()->getString("PurgeInventoryDescendents");
375char * _PREHASH_ShowDir; 375char* _PREHASH_ShowDir = LLMessageStringTable::getInstance()->getString("ShowDir");
376char * _PREHASH_IsOwner; 376char* _PREHASH_IsOwner = LLMessageStringTable::getInstance()->getString("IsOwner");
377char * _PREHASH_Timestamp; 377char* _PREHASH_Timestamp = LLMessageStringTable::getInstance()->getString("Timestamp");
378char * _PREHASH_GlobalPos; 378char* _PREHASH_GlobalPos = LLMessageStringTable::getInstance()->getString("GlobalPos");
379char * _PREHASH_GrabOffsetInitial; 379char* _PREHASH_GrabOffsetInitial = LLMessageStringTable::getInstance()->getString("GrabOffsetInitial");
380char * _PREHASH_IsTrial; 380char* _PREHASH_IsTrial = LLMessageStringTable::getInstance()->getString("IsTrial");
381char * _PREHASH_ObjectDuplicateOnRay; 381char* _PREHASH_ObjectDuplicateOnRay = LLMessageStringTable::getInstance()->getString("ObjectDuplicateOnRay");
382char * _PREHASH_GroupMembershipCount; 382char* _PREHASH_GroupMembershipCount = LLMessageStringTable::getInstance()->getString("GroupMembershipCount");
383char * _PREHASH_MethodData; 383char* _PREHASH_MethodData = LLMessageStringTable::getInstance()->getString("MethodData");
384char * _PREHASH_ActivateGestures; 384char* _PREHASH_ActivateGestures = LLMessageStringTable::getInstance()->getString("ActivateGestures");
385char * _PREHASH_DeactivateGestures; 385char* _PREHASH_DeactivateGestures = LLMessageStringTable::getInstance()->getString("DeactivateGestures");
386char * _PREHASH_ProposalData; 386char* _PREHASH_ProposalData = LLMessageStringTable::getInstance()->getString("ProposalData");
387char * _PREHASH_PosGlobal; 387char* _PREHASH_PosGlobal = LLMessageStringTable::getInstance()->getString("PosGlobal");
388char * _PREHASH_SearchID; 388char* _PREHASH_SearchID = LLMessageStringTable::getInstance()->getString("SearchID");
389char * _PREHASH_RezMultipleAttachmentsFromInv; 389char* _PREHASH_RezMultipleAttachmentsFromInv = LLMessageStringTable::getInstance()->getString("RezMultipleAttachmentsFromInv");
390char * _PREHASH_SearchName; 390char* _PREHASH_SearchName = LLMessageStringTable::getInstance()->getString("SearchName");
391char * _PREHASH_VersionString; 391char* _PREHASH_VersionString = LLMessageStringTable::getInstance()->getString("VersionString");
392char * _PREHASH_CreateGroupReply; 392char* _PREHASH_CreateGroupReply = LLMessageStringTable::getInstance()->getString("CreateGroupReply");
393char * _PREHASH_LeaveGroupReply; 393char* _PREHASH_LeaveGroupReply = LLMessageStringTable::getInstance()->getString("LeaveGroupReply");
394char * _PREHASH_ActualArea; 394char* _PREHASH_ActualArea = LLMessageStringTable::getInstance()->getString("ActualArea");
395char * _PREHASH_Message; 395char* _PREHASH_Message = LLMessageStringTable::getInstance()->getString("Message");
396char * _PREHASH_ClickAction; 396char* _PREHASH_ClickAction = LLMessageStringTable::getInstance()->getString("ClickAction");
397char * _PREHASH_AssetUploadComplete; 397char* _PREHASH_AssetUploadComplete = LLMessageStringTable::getInstance()->getString("AssetUploadComplete");
398char * _PREHASH_RequestType; 398char* _PREHASH_RequestType = LLMessageStringTable::getInstance()->getString("RequestType");
399char * _PREHASH_UUID; 399char* _PREHASH_UUID = LLMessageStringTable::getInstance()->getString("UUID");
400char * _PREHASH_BaseMask; 400char* _PREHASH_BaseMask = LLMessageStringTable::getInstance()->getString("BaseMask");
401char * _PREHASH_NetBlock; 401char* _PREHASH_NetBlock = LLMessageStringTable::getInstance()->getString("NetBlock");
402char * _PREHASH_GlobalX; 402char* _PREHASH_GlobalX = LLMessageStringTable::getInstance()->getString("GlobalX");
403char * _PREHASH_GlobalY; 403char* _PREHASH_GlobalY = LLMessageStringTable::getInstance()->getString("GlobalY");
404char * _PREHASH_CopyRotates; 404char* _PREHASH_CopyRotates = LLMessageStringTable::getInstance()->getString("CopyRotates");
405char * _PREHASH_KickUserAck; 405char* _PREHASH_KickUserAck = LLMessageStringTable::getInstance()->getString("KickUserAck");
406char * _PREHASH_TopPick; 406char* _PREHASH_TopPick = LLMessageStringTable::getInstance()->getString("TopPick");
407char * _PREHASH_SessionID; 407char* _PREHASH_SessionID = LLMessageStringTable::getInstance()->getString("SessionID");
408char * _PREHASH_GlobalZ; 408char* _PREHASH_GlobalZ = LLMessageStringTable::getInstance()->getString("GlobalZ");
409char * _PREHASH_DeclineFriendship; 409char* _PREHASH_DeclineFriendship = LLMessageStringTable::getInstance()->getString("DeclineFriendship");
410char * _PREHASH_FormFriendship; 410char* _PREHASH_FormFriendship = LLMessageStringTable::getInstance()->getString("FormFriendship");
411char * _PREHASH_TerminateFriendship; 411char* _PREHASH_TerminateFriendship = LLMessageStringTable::getInstance()->getString("TerminateFriendship");
412char * _PREHASH_TaskData; 412char* _PREHASH_TaskData = LLMessageStringTable::getInstance()->getString("TaskData");
413char * _PREHASH_SimWideMaxPrims; 413char* _PREHASH_SimWideMaxPrims = LLMessageStringTable::getInstance()->getString("SimWideMaxPrims");
414char * _PREHASH_TotalPrims; 414char* _PREHASH_TotalPrims = LLMessageStringTable::getInstance()->getString("TotalPrims");
415char * _PREHASH_ProfileBegin; 415char* _PREHASH_ProfileBegin = LLMessageStringTable::getInstance()->getString("ProfileBegin");
416char * _PREHASH_Request; 416char* _PREHASH_Request = LLMessageStringTable::getInstance()->getString("Request");
417char * _PREHASH_GroupAccountDetailsRequest; 417char* _PREHASH_GroupAccountDetailsRequest = LLMessageStringTable::getInstance()->getString("GroupAccountDetailsRequest");
418char * _PREHASH_GroupActiveProposalsRequest; 418char* _PREHASH_GroupActiveProposalsRequest = LLMessageStringTable::getInstance()->getString("GroupActiveProposalsRequest");
419char * _PREHASH_StringValue; 419char* _PREHASH_StringValue = LLMessageStringTable::getInstance()->getString("StringValue");
420char * _PREHASH_Version; 420char* _PREHASH_Version = LLMessageStringTable::getInstance()->getString("Version");
421char * _PREHASH_OtherCount; 421char* _PREHASH_OtherCount = LLMessageStringTable::getInstance()->getString("OtherCount");
422char * _PREHASH_MemberCount; 422char* _PREHASH_MemberCount = LLMessageStringTable::getInstance()->getString("MemberCount");
423char * _PREHASH_ChatData; 423char* _PREHASH_ChatData = LLMessageStringTable::getInstance()->getString("ChatData");
424char * _PREHASH_IsGroupOwned; 424char* _PREHASH_IsGroupOwned = LLMessageStringTable::getInstance()->getString("IsGroupOwned");
425char * _PREHASH_EnergyEfficiency; 425char* _PREHASH_EnergyEfficiency = LLMessageStringTable::getInstance()->getString("EnergyEfficiency");
426char * _PREHASH_PickInfoUpdate; 426char* _PREHASH_PickInfoUpdate = LLMessageStringTable::getInstance()->getString("PickInfoUpdate");
427char * _PREHASH_PickDelete; 427char* _PREHASH_PickDelete = LLMessageStringTable::getInstance()->getString("PickDelete");
428char * _PREHASH_ScriptReset; 428char* _PREHASH_ScriptReset = LLMessageStringTable::getInstance()->getString("ScriptReset");
429char * _PREHASH_Requester; 429char* _PREHASH_Requester = LLMessageStringTable::getInstance()->getString("Requester");
430char * _PREHASH_ForSale; 430char* _PREHASH_ForSale = LLMessageStringTable::getInstance()->getString("ForSale");
431char * _PREHASH_NearestLandingRegionReply; 431char* _PREHASH_NearestLandingRegionReply = LLMessageStringTable::getInstance()->getString("NearestLandingRegionReply");
432char * _PREHASH_ParcelID; 432char* _PREHASH_ParcelID = LLMessageStringTable::getInstance()->getString("ParcelID");
433char * _PREHASH_Godlike; 433char* _PREHASH_Godlike = LLMessageStringTable::getInstance()->getString("Godlike");
434char * _PREHASH_TotalDebits; 434char* _PREHASH_TotalDebits = LLMessageStringTable::getInstance()->getString("TotalDebits");
435char * _PREHASH_Direction; 435char* _PREHASH_Direction = LLMessageStringTable::getInstance()->getString("Direction");
436char * _PREHASH_HealthData; 436char* _PREHASH_HealthData = LLMessageStringTable::getInstance()->getString("HealthData");
437char * _PREHASH_LeftAxis; 437char* _PREHASH_LeftAxis = LLMessageStringTable::getInstance()->getString("LeftAxis");
438char * _PREHASH_LocationBlock; 438char* _PREHASH_LocationBlock = LLMessageStringTable::getInstance()->getString("LocationBlock");
439char * _PREHASH_ObjectImage; 439char* _PREHASH_ObjectImage = LLMessageStringTable::getInstance()->getString("ObjectImage");
440char * _PREHASH_TerrainStartHeight00; 440char* _PREHASH_TerrainStartHeight00 = LLMessageStringTable::getInstance()->getString("TerrainStartHeight00");
441char * _PREHASH_TerrainStartHeight01; 441char* _PREHASH_TerrainStartHeight01 = LLMessageStringTable::getInstance()->getString("TerrainStartHeight01");
442char * _PREHASH_TerrainStartHeight10; 442char* _PREHASH_TerrainStartHeight10 = LLMessageStringTable::getInstance()->getString("TerrainStartHeight10");
443char * _PREHASH_TerrainStartHeight11; 443char* _PREHASH_TerrainStartHeight11 = LLMessageStringTable::getInstance()->getString("TerrainStartHeight11");
444char * _PREHASH_WaterHeight; 444char* _PREHASH_WaterHeight = LLMessageStringTable::getInstance()->getString("WaterHeight");
445char * _PREHASH_FetchInventoryReply; 445char* _PREHASH_FetchInventoryReply = LLMessageStringTable::getInstance()->getString("FetchInventoryReply");
446char * _PREHASH_GroupAccountSummaryReply; 446char* _PREHASH_GroupAccountSummaryReply = LLMessageStringTable::getInstance()->getString("GroupAccountSummaryReply");
447char * _PREHASH_AttachedSound; 447char* _PREHASH_AttachedSound = LLMessageStringTable::getInstance()->getString("AttachedSound");
448char * _PREHASH_ParamInUse; 448char* _PREHASH_ParamInUse = LLMessageStringTable::getInstance()->getString("ParamInUse");
449char * _PREHASH_GodKickUser; 449char* _PREHASH_GodKickUser = LLMessageStringTable::getInstance()->getString("GodKickUser");
450char * _PREHASH_PickName; 450char* _PREHASH_PickName = LLMessageStringTable::getInstance()->getString("PickName");
451char * _PREHASH_TaskName; 451char* _PREHASH_TaskName = LLMessageStringTable::getInstance()->getString("TaskName");
452char * _PREHASH_ObjectCount; 452char* _PREHASH_ObjectCount = LLMessageStringTable::getInstance()->getString("ObjectCount");
453char * _PREHASH_RegionPresenceRequestByHandle; 453char* _PREHASH_RegionPresenceRequestByHandle = LLMessageStringTable::getInstance()->getString("RegionPresenceRequestByHandle");
454char * _PREHASH_RezSingleAttachmentFromInv; 454char* _PREHASH_RezSingleAttachmentFromInv = LLMessageStringTable::getInstance()->getString("RezSingleAttachmentFromInv");
455char * _PREHASH_ChildAgentUpdate; 455char* _PREHASH_ChildAgentUpdate = LLMessageStringTable::getInstance()->getString("ChildAgentUpdate");
456char * _PREHASH_IsOwnerGroup; 456char* _PREHASH_IsOwnerGroup = LLMessageStringTable::getInstance()->getString("IsOwnerGroup");
457char * _PREHASH_AgentHeightWidth; 457char* _PREHASH_AgentHeightWidth = LLMessageStringTable::getInstance()->getString("AgentHeightWidth");
458char * _PREHASH_VerticalAngle; 458char* _PREHASH_VerticalAngle = LLMessageStringTable::getInstance()->getString("VerticalAngle");
459char * _PREHASH_WearableType; 459char* _PREHASH_WearableType = LLMessageStringTable::getInstance()->getString("WearableType");
460char * _PREHASH_AggregatePermNextOwner; 460char* _PREHASH_AggregatePermNextOwner = LLMessageStringTable::getInstance()->getString("AggregatePermNextOwner");
461char * _PREHASH_ShowInList; 461char* _PREHASH_ShowInList = LLMessageStringTable::getInstance()->getString("ShowInList");
462char * _PREHASH_UpdateParcel; 462char* _PREHASH_UpdateParcel = LLMessageStringTable::getInstance()->getString("UpdateParcel");
463char * _PREHASH_SetAlwaysRun; 463char* _PREHASH_SetAlwaysRun = LLMessageStringTable::getInstance()->getString("SetAlwaysRun");
464char * _PREHASH_NVPair; 464char* _PREHASH_NVPair = LLMessageStringTable::getInstance()->getString("NVPair");
465char * _PREHASH_SearchType; 465char* _PREHASH_SearchType = LLMessageStringTable::getInstance()->getString("SearchType");
466char * _PREHASH_ObjectSpinStart; 466char* _PREHASH_ObjectSpinStart = LLMessageStringTable::getInstance()->getString("ObjectSpinStart");
467char * _PREHASH_UseEstateSun; 467char* _PREHASH_UseEstateSun = LLMessageStringTable::getInstance()->getString("UseEstateSun");
468char * _PREHASH_RegionID; 468char* _PREHASH_RegionID = LLMessageStringTable::getInstance()->getString("RegionID");
469char * _PREHASH_AbuseRegionID; 469char* _PREHASH_AbuseRegionID = LLMessageStringTable::getInstance()->getString("AbuseRegionID");
470char * _PREHASH_Creator; 470char* _PREHASH_Creator = LLMessageStringTable::getInstance()->getString("Creator");
471char * _PREHASH_ProposalText; 471char* _PREHASH_ProposalText = LLMessageStringTable::getInstance()->getString("ProposalText");
472char * _PREHASH_DirEventsReply; 472char* _PREHASH_DirEventsReply = LLMessageStringTable::getInstance()->getString("DirEventsReply");
473char * _PREHASH_EventInfoReply; 473char* _PREHASH_EventInfoReply = LLMessageStringTable::getInstance()->getString("EventInfoReply");
474char * _PREHASH_UserInfoReply; 474char* _PREHASH_UserInfoReply = LLMessageStringTable::getInstance()->getString("UserInfoReply");
475char * _PREHASH_PathRadiusOffset; 475char* _PREHASH_PathRadiusOffset = LLMessageStringTable::getInstance()->getString("PathRadiusOffset");
476char * _PREHASH_TextureData; 476char* _PREHASH_TextureData = LLMessageStringTable::getInstance()->getString("TextureData");
477char * _PREHASH_ChatPass; 477char* _PREHASH_ChatPass = LLMessageStringTable::getInstance()->getString("ChatPass");
478char * _PREHASH_TargetID; 478char* _PREHASH_TargetID = LLMessageStringTable::getInstance()->getString("TargetID");
479char * _PREHASH_DefaultPayPrice; 479char* _PREHASH_DefaultPayPrice = LLMessageStringTable::getInstance()->getString("DefaultPayPrice");
480char * _PREHASH_UserLocation; 480char* _PREHASH_UserLocation = LLMessageStringTable::getInstance()->getString("UserLocation");
481char * _PREHASH_MaxPrims; 481char* _PREHASH_MaxPrims = LLMessageStringTable::getInstance()->getString("MaxPrims");
482char * _PREHASH_LandmarkID; 482char* _PREHASH_LandmarkID = LLMessageStringTable::getInstance()->getString("LandmarkID");
483char * _PREHASH_InitiateDownload; 483char* _PREHASH_InitiateDownload = LLMessageStringTable::getInstance()->getString("InitiateDownload");
484char * _PREHASH_Name; 484char* _PREHASH_Name = LLMessageStringTable::getInstance()->getString("Name");
485char * _PREHASH_OtherCleanTime; 485char* _PREHASH_OtherCleanTime = LLMessageStringTable::getInstance()->getString("OtherCleanTime");
486char * _PREHASH_ParcelSetOtherCleanTime; 486char* _PREHASH_ParcelSetOtherCleanTime = LLMessageStringTable::getInstance()->getString("ParcelSetOtherCleanTime");
487char * _PREHASH_TeleportPriceExponent; 487char* _PREHASH_TeleportPriceExponent = LLMessageStringTable::getInstance()->getString("TeleportPriceExponent");
488char * _PREHASH_Gain; 488char* _PREHASH_Gain = LLMessageStringTable::getInstance()->getString("Gain");
489char * _PREHASH_PacketAck; 489char* _PREHASH_PacketAck = LLMessageStringTable::getInstance()->getString("PacketAck");
490char * _PREHASH_PathSkew; 490char* _PREHASH_PathSkew = LLMessageStringTable::getInstance()->getString("PathSkew");
491char * _PREHASH_SimulatorShutdownRequest; 491char* _PREHASH_SimulatorShutdownRequest = LLMessageStringTable::getInstance()->getString("SimulatorShutdownRequest");
492char * _PREHASH_NearestLandingRegionRequest; 492char* _PREHASH_NearestLandingRegionRequest = LLMessageStringTable::getInstance()->getString("NearestLandingRegionRequest");
493char * _PREHASH_OtherID; 493char* _PREHASH_OtherID = LLMessageStringTable::getInstance()->getString("OtherID");
494char * _PREHASH_MemberID; 494char* _PREHASH_MemberID = LLMessageStringTable::getInstance()->getString("MemberID");
495char * _PREHASH_MapLayerRequest; 495char* _PREHASH_MapLayerRequest = LLMessageStringTable::getInstance()->getString("MapLayerRequest");
496char * _PREHASH_ObjectScale; 496char* _PREHASH_ObjectScale = LLMessageStringTable::getInstance()->getString("ObjectScale");
497char * _PREHASH_TargetIP; 497char* _PREHASH_TargetIP = LLMessageStringTable::getInstance()->getString("TargetIP");
498char * _PREHASH_Redo; 498char* _PREHASH_Redo = LLMessageStringTable::getInstance()->getString("Redo");
499char * _PREHASH_MoneyBalance; 499char* _PREHASH_MoneyBalance = LLMessageStringTable::getInstance()->getString("MoneyBalance");
500char * _PREHASH_TrackAgent; 500char* _PREHASH_TrackAgent = LLMessageStringTable::getInstance()->getString("TrackAgent");
501char * _PREHASH_MaxX; 501char* _PREHASH_MaxX = LLMessageStringTable::getInstance()->getString("MaxX");
502char * _PREHASH_Data; 502char* _PREHASH_Data = LLMessageStringTable::getInstance()->getString("Data");
503char * _PREHASH_MaxY; 503char* _PREHASH_MaxY = LLMessageStringTable::getInstance()->getString("MaxY");
504char * _PREHASH_TextureAnim; 504char* _PREHASH_TextureAnim = LLMessageStringTable::getInstance()->getString("TextureAnim");
505char * _PREHASH_ReturnIDs; 505char* _PREHASH_ReturnIDs = LLMessageStringTable::getInstance()->getString("ReturnIDs");
506char * _PREHASH_Date; 506char* _PREHASH_Date = LLMessageStringTable::getInstance()->getString("Date");
507char * _PREHASH_AgentWearablesUpdate; 507char* _PREHASH_AgentWearablesUpdate = LLMessageStringTable::getInstance()->getString("AgentWearablesUpdate");
508char * _PREHASH_AgentDataUpdate; 508char* _PREHASH_AgentDataUpdate = LLMessageStringTable::getInstance()->getString("AgentDataUpdate");
509char * _PREHASH_GroupDataUpdate; 509char* _PREHASH_GroupDataUpdate = LLMessageStringTable::getInstance()->getString("GroupDataUpdate");
510char * _PREHASH_Hash; 510char* _PREHASH_Hash = LLMessageStringTable::getInstance()->getString("Hash");
511char * _PREHASH_AgentGroupDataUpdate; 511char* _PREHASH_AgentGroupDataUpdate = LLMessageStringTable::getInstance()->getString("AgentGroupDataUpdate");
512char * _PREHASH_Left; 512char* _PREHASH_Left = LLMessageStringTable::getInstance()->getString("Left");
513char * _PREHASH_Mask; 513char* _PREHASH_Mask = LLMessageStringTable::getInstance()->getString("Mask");
514char * _PREHASH_ForceMouselook; 514char* _PREHASH_ForceMouselook = LLMessageStringTable::getInstance()->getString("ForceMouselook");
515char * _PREHASH_Success; 515char* _PREHASH_Success = LLMessageStringTable::getInstance()->getString("Success");
516char * _PREHASH_ObjectGroup; 516char* _PREHASH_ObjectGroup = LLMessageStringTable::getInstance()->getString("ObjectGroup");
517char * _PREHASH_SunHour; 517char* _PREHASH_SunHour = LLMessageStringTable::getInstance()->getString("SunHour");
518char * _PREHASH_MinX; 518char* _PREHASH_MinX = LLMessageStringTable::getInstance()->getString("MinX");
519char * _PREHASH_ScriptSensorReply; 519char* _PREHASH_ScriptSensorReply = LLMessageStringTable::getInstance()->getString("ScriptSensorReply");
520char * _PREHASH_MinY; 520char* _PREHASH_MinY = LLMessageStringTable::getInstance()->getString("MinY");
521char * _PREHASH_Command; 521char* _PREHASH_Command = LLMessageStringTable::getInstance()->getString("Command");
522char * _PREHASH_Desc; 522char* _PREHASH_Desc = LLMessageStringTable::getInstance()->getString("Desc");
523char * _PREHASH_AttachmentNeedsSave; 523char* _PREHASH_AttachmentNeedsSave = LLMessageStringTable::getInstance()->getString("AttachmentNeedsSave");
524char * _PREHASH_HistoryItemData; 524char* _PREHASH_HistoryItemData = LLMessageStringTable::getInstance()->getString("HistoryItemData");
525char * _PREHASH_AgentCachedTexture; 525char* _PREHASH_AgentCachedTexture = LLMessageStringTable::getInstance()->getString("AgentCachedTexture");
526char * _PREHASH_Subject; 526char* _PREHASH_Subject = LLMessageStringTable::getInstance()->getString("Subject");
527char * _PREHASH_East; 527char* _PREHASH_East = LLMessageStringTable::getInstance()->getString("East");
528char * _PREHASH_QueryReplies; 528char* _PREHASH_QueryReplies = LLMessageStringTable::getInstance()->getString("QueryReplies");
529char * _PREHASH_ObjectCategory; 529char* _PREHASH_ObjectCategory = LLMessageStringTable::getInstance()->getString("ObjectCategory");
530char * _PREHASH_Time; 530char* _PREHASH_Time = LLMessageStringTable::getInstance()->getString("Time");
531char * _PREHASH_CreateLandmarkForEvent; 531char* _PREHASH_CreateLandmarkForEvent = LLMessageStringTable::getInstance()->getString("CreateLandmarkForEvent");
532char * _PREHASH_ParentID; 532char* _PREHASH_ParentID = LLMessageStringTable::getInstance()->getString("ParentID");
533char * _PREHASH_Ping; 533char* _PREHASH_Ping = LLMessageStringTable::getInstance()->getString("Ping");
534char * _PREHASH_Perp; 534char* _PREHASH_Perp = LLMessageStringTable::getInstance()->getString("Perp");
535char * _PREHASH_Code; 535char* _PREHASH_Code = LLMessageStringTable::getInstance()->getString("Code");
536char * _PREHASH_InvType; 536char* _PREHASH_InvType = LLMessageStringTable::getInstance()->getString("InvType");
537char * _PREHASH_AgentFOV; 537char* _PREHASH_AgentFOV = LLMessageStringTable::getInstance()->getString("AgentFOV");
538char * _PREHASH_Audible; 538char* _PREHASH_Audible = LLMessageStringTable::getInstance()->getString("Audible");
539char * _PREHASH_AuctionData; 539char* _PREHASH_AuctionData = LLMessageStringTable::getInstance()->getString("AuctionData");
540char * _PREHASH_IDBlock; 540char* _PREHASH_IDBlock = LLMessageStringTable::getInstance()->getString("IDBlock");
541char * _PREHASH_West; 541char* _PREHASH_West = LLMessageStringTable::getInstance()->getString("West");
542char * _PREHASH_Undo; 542char* _PREHASH_Undo = LLMessageStringTable::getInstance()->getString("Undo");
543char * _PREHASH_TotalNumItems; 543char* _PREHASH_TotalNumItems = LLMessageStringTable::getInstance()->getString("TotalNumItems");
544char * _PREHASH_Info; 544char* _PREHASH_Info = LLMessageStringTable::getInstance()->getString("Info");
545char * _PREHASH_Area; 545char* _PREHASH_Area = LLMessageStringTable::getInstance()->getString("Area");
546char * _PREHASH_SimCrashed; 546char* _PREHASH_SimCrashed = LLMessageStringTable::getInstance()->getString("SimCrashed");
547char * _PREHASH_Text; 547char* _PREHASH_Text = LLMessageStringTable::getInstance()->getString("Text");
548char * _PREHASH_PriceGroupCreate; 548char* _PREHASH_PriceGroupCreate = LLMessageStringTable::getInstance()->getString("PriceGroupCreate");
549char * _PREHASH_ObjectShape; 549char* _PREHASH_ObjectShape = LLMessageStringTable::getInstance()->getString("ObjectShape");
550char * _PREHASH_GroupRoleDataReply; 550char* _PREHASH_GroupRoleDataReply = LLMessageStringTable::getInstance()->getString("GroupRoleDataReply");
551char * _PREHASH_MuteCRC; 551char* _PREHASH_MuteCRC = LLMessageStringTable::getInstance()->getString("MuteCRC");
552char * _PREHASH_Size; 552char* _PREHASH_Size = LLMessageStringTable::getInstance()->getString("Size");
553char * _PREHASH_FromAddress; 553char* _PREHASH_FromAddress = LLMessageStringTable::getInstance()->getString("FromAddress");
554char * _PREHASH_Body; 554char* _PREHASH_Body = LLMessageStringTable::getInstance()->getString("Body");
555char * _PREHASH_FileData; 555char* _PREHASH_FileData = LLMessageStringTable::getInstance()->getString("FileData");
556char * _PREHASH_List; 556char* _PREHASH_List = LLMessageStringTable::getInstance()->getString("List");
557char * _PREHASH_KickUser; 557char* _PREHASH_KickUser = LLMessageStringTable::getInstance()->getString("KickUser");
558char * _PREHASH_OtherPrims; 558char* _PREHASH_OtherPrims = LLMessageStringTable::getInstance()->getString("OtherPrims");
559char * _PREHASH_RunTime; 559char* _PREHASH_RunTime = LLMessageStringTable::getInstance()->getString("RunTime");
560char * _PREHASH_GrantUserRights; 560char* _PREHASH_GrantUserRights = LLMessageStringTable::getInstance()->getString("GrantUserRights");
561char * _PREHASH_RpcScriptRequestInboundForward; 561char* _PREHASH_RpcScriptRequestInboundForward = LLMessageStringTable::getInstance()->getString("RpcScriptRequestInboundForward");
562char * _PREHASH_More; 562char* _PREHASH_More = LLMessageStringTable::getInstance()->getString("More");
563char * _PREHASH_Majority; 563char* _PREHASH_Majority = LLMessageStringTable::getInstance()->getString("Majority");
564char * _PREHASH_MetersTraveled; 564char* _PREHASH_MetersTraveled = LLMessageStringTable::getInstance()->getString("MetersTraveled");
565char * _PREHASH_Stat; 565char* _PREHASH_Stat = LLMessageStringTable::getInstance()->getString("Stat");
566char * _PREHASH_SoundID; 566char* _PREHASH_SoundID = LLMessageStringTable::getInstance()->getString("SoundID");
567char * _PREHASH_Item; 567char* _PREHASH_Item = LLMessageStringTable::getInstance()->getString("Item");
568char * _PREHASH_User; 568char* _PREHASH_User = LLMessageStringTable::getInstance()->getString("User");
569char * _PREHASH_Prey; 569char* _PREHASH_Prey = LLMessageStringTable::getInstance()->getString("Prey");
570char * _PREHASH_RayStart; 570char* _PREHASH_RayStart = LLMessageStringTable::getInstance()->getString("RayStart");
571char * _PREHASH_UsecSinceStart; 571char* _PREHASH_UsecSinceStart = LLMessageStringTable::getInstance()->getString("UsecSinceStart");
572char * _PREHASH_ParcelData; 572char* _PREHASH_ParcelData = LLMessageStringTable::getInstance()->getString("ParcelData");
573char * _PREHASH_CameraUpAxis; 573char* _PREHASH_CameraUpAxis = LLMessageStringTable::getInstance()->getString("CameraUpAxis");
574char * _PREHASH_ScriptDialog; 574char* _PREHASH_ScriptDialog = LLMessageStringTable::getInstance()->getString("ScriptDialog");
575char * _PREHASH_MasterParcelData; 575char* _PREHASH_MasterParcelData = LLMessageStringTable::getInstance()->getString("MasterParcelData");
576char * _PREHASH_Invalid; 576char* _PREHASH_Invalid = LLMessageStringTable::getInstance()->getString("Invalid");
577char * _PREHASH_ProfileCurve; 577char* _PREHASH_ProfileCurve = LLMessageStringTable::getInstance()->getString("ProfileCurve");
578char * _PREHASH_ParcelAccessListUpdate; 578char* _PREHASH_ParcelAccessListUpdate = LLMessageStringTable::getInstance()->getString("ParcelAccessListUpdate");
579char * _PREHASH_MuteListUpdate; 579char* _PREHASH_MuteListUpdate = LLMessageStringTable::getInstance()->getString("MuteListUpdate");
580char * _PREHASH_SendPacket; 580char* _PREHASH_SendPacket = LLMessageStringTable::getInstance()->getString("SendPacket");
581char * _PREHASH_SendXferPacket; 581char* _PREHASH_SendXferPacket = LLMessageStringTable::getInstance()->getString("SendXferPacket");
582char * _PREHASH_RegionDenyIdentified; 582char* _PREHASH_RegionDenyIdentified = LLMessageStringTable::getInstance()->getString("RegionDenyIdentified");
583char * _PREHASH_NotecardItemID; 583char* _PREHASH_NotecardItemID = LLMessageStringTable::getInstance()->getString("NotecardItemID");
584char * _PREHASH_LastName; 584char* _PREHASH_LastName = LLMessageStringTable::getInstance()->getString("LastName");
585char * _PREHASH_From; 585char* _PREHASH_From = LLMessageStringTable::getInstance()->getString("From");
586char * _PREHASH_RoleChange; 586char* _PREHASH_RoleChange = LLMessageStringTable::getInstance()->getString("RoleChange");
587char * _PREHASH_Port; 587char* _PREHASH_Port = LLMessageStringTable::getInstance()->getString("Port");
588char * _PREHASH_MemberTitle; 588char* _PREHASH_MemberTitle = LLMessageStringTable::getInstance()->getString("MemberTitle");
589char * _PREHASH_LogParcelChanges; 589char* _PREHASH_LogParcelChanges = LLMessageStringTable::getInstance()->getString("LogParcelChanges");
590char * _PREHASH_AgentCachedTextureResponse; 590char* _PREHASH_AgentCachedTextureResponse = LLMessageStringTable::getInstance()->getString("AgentCachedTextureResponse");
591char * _PREHASH_DeRezObject; 591char* _PREHASH_DeRezObject = LLMessageStringTable::getInstance()->getString("DeRezObject");
592char * _PREHASH_IsTemporary; 592char* _PREHASH_IsTemporary = LLMessageStringTable::getInstance()->getString("IsTemporary");
593char * _PREHASH_InsigniaID; 593char* _PREHASH_InsigniaID = LLMessageStringTable::getInstance()->getString("InsigniaID");
594char * _PREHASH_CheckFlags; 594char* _PREHASH_CheckFlags = LLMessageStringTable::getInstance()->getString("CheckFlags");
595char * _PREHASH_EventID; 595char* _PREHASH_EventID = LLMessageStringTable::getInstance()->getString("EventID");
596char * _PREHASH_Selected; 596char* _PREHASH_Selected = LLMessageStringTable::getInstance()->getString("Selected");
597char * _PREHASH_FromAgentId; 597char* _PREHASH_FromAgentId = LLMessageStringTable::getInstance()->getString("FromAgentId");
598char * _PREHASH_Type; 598char* _PREHASH_Type = LLMessageStringTable::getInstance()->getString("Type");
599char * _PREHASH_ChatType; 599char* _PREHASH_ChatType = LLMessageStringTable::getInstance()->getString("ChatType");
600char * _PREHASH_ReportData; 600char* _PREHASH_ReportData = LLMessageStringTable::getInstance()->getString("ReportData");
601char * _PREHASH_RequestBlock; 601char* _PREHASH_RequestBlock = LLMessageStringTable::getInstance()->getString("RequestBlock");
602char * _PREHASH_GrantData; 602char* _PREHASH_GrantData = LLMessageStringTable::getInstance()->getString("GrantData");
603char * _PREHASH_DetachAttachmentIntoInv; 603char* _PREHASH_DetachAttachmentIntoInv = LLMessageStringTable::getInstance()->getString("DetachAttachmentIntoInv");
604char * _PREHASH_ParcelDisableObjects; 604char* _PREHASH_ParcelDisableObjects = LLMessageStringTable::getInstance()->getString("ParcelDisableObjects");
605char * _PREHASH_Sections; 605char* _PREHASH_Sections = LLMessageStringTable::getInstance()->getString("Sections");
606char * _PREHASH_GodLevel; 606char* _PREHASH_GodLevel = LLMessageStringTable::getInstance()->getString("GodLevel");
607char * _PREHASH_PayPriceReply; 607char* _PREHASH_PayPriceReply = LLMessageStringTable::getInstance()->getString("PayPriceReply");
608char * _PREHASH_QueryID; 608char* _PREHASH_QueryID = LLMessageStringTable::getInstance()->getString("QueryID");
609char * _PREHASH_CameraEyeOffset; 609char* _PREHASH_CameraEyeOffset = LLMessageStringTable::getInstance()->getString("CameraEyeOffset");
610char * _PREHASH_AgentPosition; 610char* _PREHASH_AgentPosition = LLMessageStringTable::getInstance()->getString("AgentPosition");
611char * _PREHASH_GrabPosition; 611char* _PREHASH_GrabPosition = LLMessageStringTable::getInstance()->getString("GrabPosition");
612char * _PREHASH_OnlineNotification; 612char* _PREHASH_OnlineNotification = LLMessageStringTable::getInstance()->getString("OnlineNotification");
613char * _PREHASH_OfflineNotification; 613char* _PREHASH_OfflineNotification = LLMessageStringTable::getInstance()->getString("OfflineNotification");
614char * _PREHASH_SendPostcard; 614char* _PREHASH_SendPostcard = LLMessageStringTable::getInstance()->getString("SendPostcard");
615char * _PREHASH_RequestFlags; 615char* _PREHASH_RequestFlags = LLMessageStringTable::getInstance()->getString("RequestFlags");
616char * _PREHASH_GroupAccountSummaryRequest; 616char* _PREHASH_GroupAccountSummaryRequest = LLMessageStringTable::getInstance()->getString("GroupAccountSummaryRequest");
617char * _PREHASH_GroupVoteHistoryRequest; 617char* _PREHASH_GroupVoteHistoryRequest = LLMessageStringTable::getInstance()->getString("GroupVoteHistoryRequest");
618char * _PREHASH_ParamValue; 618char* _PREHASH_ParamValue = LLMessageStringTable::getInstance()->getString("ParamValue");
619char * _PREHASH_MaxAgents; 619char* _PREHASH_MaxAgents = LLMessageStringTable::getInstance()->getString("MaxAgents");
620char * _PREHASH_CreateNewOutfitAttachments; 620char* _PREHASH_CreateNewOutfitAttachments = LLMessageStringTable::getInstance()->getString("CreateNewOutfitAttachments");
621char * _PREHASH_RegionHandle; 621char* _PREHASH_RegionHandle = LLMessageStringTable::getInstance()->getString("RegionHandle");
622char * _PREHASH_TeleportProgress; 622char* _PREHASH_TeleportProgress = LLMessageStringTable::getInstance()->getString("TeleportProgress");
623char * _PREHASH_AgentQuitCopy; 623char* _PREHASH_AgentQuitCopy = LLMessageStringTable::getInstance()->getString("AgentQuitCopy");
624char * _PREHASH_AvatarInterestsUpdate; 624char* _PREHASH_AvatarInterestsUpdate = LLMessageStringTable::getInstance()->getString("AvatarInterestsUpdate");
625char * _PREHASH_GroupNoticeID; 625char* _PREHASH_GroupNoticeID = LLMessageStringTable::getInstance()->getString("GroupNoticeID");
626char * _PREHASH_ParcelName; 626char* _PREHASH_ParcelName = LLMessageStringTable::getInstance()->getString("ParcelName");
627char * _PREHASH_PriceObjectRent; 627char* _PREHASH_PriceObjectRent = LLMessageStringTable::getInstance()->getString("PriceObjectRent");
628char * _PREHASH_OfferCallingCard; 628char* _PREHASH_OfferCallingCard = LLMessageStringTable::getInstance()->getString("OfferCallingCard");
629char * _PREHASH_AcceptCallingCard; 629char* _PREHASH_AcceptCallingCard = LLMessageStringTable::getInstance()->getString("AcceptCallingCard");
630char * _PREHASH_DeclineCallingCard; 630char* _PREHASH_DeclineCallingCard = LLMessageStringTable::getInstance()->getString("DeclineCallingCard");
631char * _PREHASH_AgentAccess; 631char* _PREHASH_AgentAccess = LLMessageStringTable::getInstance()->getString("AgentAccess");
632char * _PREHASH_DataHomeLocationReply; 632char* _PREHASH_DataHomeLocationReply = LLMessageStringTable::getInstance()->getString("DataHomeLocationReply");
633char * _PREHASH_EventLocationReply; 633char* _PREHASH_EventLocationReply = LLMessageStringTable::getInstance()->getString("EventLocationReply");
634char * _PREHASH_TerseDateID; 634char* _PREHASH_TerseDateID = LLMessageStringTable::getInstance()->getString("TerseDateID");
635char * _PREHASH_ObjectOwner; 635char* _PREHASH_ObjectOwner = LLMessageStringTable::getInstance()->getString("ObjectOwner");
636char * _PREHASH_AssetID; 636char* _PREHASH_AssetID = LLMessageStringTable::getInstance()->getString("AssetID");
637char * _PREHASH_AlertMessage; 637char* _PREHASH_AlertMessage = LLMessageStringTable::getInstance()->getString("AlertMessage");
638char * _PREHASH_AgentAlertMessage; 638char* _PREHASH_AgentAlertMessage = LLMessageStringTable::getInstance()->getString("AgentAlertMessage");
639char * _PREHASH_EstateOwnerMessage; 639char* _PREHASH_EstateOwnerMessage = LLMessageStringTable::getInstance()->getString("EstateOwnerMessage");
640char * _PREHASH_ParcelMediaCommandMessage; 640char* _PREHASH_ParcelMediaCommandMessage = LLMessageStringTable::getInstance()->getString("ParcelMediaCommandMessage");
641char * _PREHASH_Auction; 641char* _PREHASH_Auction = LLMessageStringTable::getInstance()->getString("Auction");
642char * _PREHASH_Category; 642char* _PREHASH_Category = LLMessageStringTable::getInstance()->getString("Category");
643char * _PREHASH_FilePath; 643char* _PREHASH_FilePath = LLMessageStringTable::getInstance()->getString("FilePath");
644char * _PREHASH_ItemFlags; 644char* _PREHASH_ItemFlags = LLMessageStringTable::getInstance()->getString("ItemFlags");
645char * _PREHASH_Invoice; 645char* _PREHASH_Invoice = LLMessageStringTable::getInstance()->getString("Invoice");
646char * _PREHASH_IntervalDays; 646char* _PREHASH_IntervalDays = LLMessageStringTable::getInstance()->getString("IntervalDays");
647char * _PREHASH_PathScaleX; 647char* _PREHASH_PathScaleX = LLMessageStringTable::getInstance()->getString("PathScaleX");
648char * _PREHASH_FromTaskID; 648char* _PREHASH_FromTaskID = LLMessageStringTable::getInstance()->getString("FromTaskID");
649char * _PREHASH_PathScaleY; 649char* _PREHASH_PathScaleY = LLMessageStringTable::getInstance()->getString("PathScaleY");
650char * _PREHASH_TimeInfo; 650char* _PREHASH_TimeInfo = LLMessageStringTable::getInstance()->getString("TimeInfo");
651char * _PREHASH_PublicCount; 651char* _PREHASH_PublicCount = LLMessageStringTable::getInstance()->getString("PublicCount");
652char * _PREHASH_ParcelJoin; 652char* _PREHASH_ParcelJoin = LLMessageStringTable::getInstance()->getString("ParcelJoin");
653char * _PREHASH_GroupRolesCount; 653char* _PREHASH_GroupRolesCount = LLMessageStringTable::getInstance()->getString("GroupRolesCount");
654char * _PREHASH_SimulatorBlock; 654char* _PREHASH_SimulatorBlock = LLMessageStringTable::getInstance()->getString("SimulatorBlock");
655char * _PREHASH_GroupID; 655char* _PREHASH_GroupID = LLMessageStringTable::getInstance()->getString("GroupID");
656char * _PREHASH_AgentVel; 656char* _PREHASH_AgentVel = LLMessageStringTable::getInstance()->getString("AgentVel");
657char * _PREHASH_RequestImage; 657char* _PREHASH_RequestImage = LLMessageStringTable::getInstance()->getString("RequestImage");
658char * _PREHASH_NetStats; 658char* _PREHASH_NetStats = LLMessageStringTable::getInstance()->getString("NetStats");
659char * _PREHASH_AgentPos; 659char* _PREHASH_AgentPos = LLMessageStringTable::getInstance()->getString("AgentPos");
660char * _PREHASH_AgentSit; 660char* _PREHASH_AgentSit = LLMessageStringTable::getInstance()->getString("AgentSit");
661char * _PREHASH_Material; 661char* _PREHASH_Material = LLMessageStringTable::getInstance()->getString("Material");
662char * _PREHASH_ObjectDeGrab; 662char* _PREHASH_ObjectDeGrab = LLMessageStringTable::getInstance()->getString("ObjectDeGrab");
663char * _PREHASH_VelocityInterpolateOff; 663char* _PREHASH_VelocityInterpolateOff = LLMessageStringTable::getInstance()->getString("VelocityInterpolateOff");
664char * _PREHASH_AuthorizedBuyerID; 664char* _PREHASH_AuthorizedBuyerID = LLMessageStringTable::getInstance()->getString("AuthorizedBuyerID");
665char * _PREHASH_AvatarPropertiesReply; 665char* _PREHASH_AvatarPropertiesReply = LLMessageStringTable::getInstance()->getString("AvatarPropertiesReply");
666char * _PREHASH_GroupProfileReply; 666char* _PREHASH_GroupProfileReply = LLMessageStringTable::getInstance()->getString("GroupProfileReply");
667char * _PREHASH_SimOwner; 667char* _PREHASH_SimOwner = LLMessageStringTable::getInstance()->getString("SimOwner");
668char * _PREHASH_SalePrice; 668char* _PREHASH_SalePrice = LLMessageStringTable::getInstance()->getString("SalePrice");
669char * _PREHASH_Animation; 669char* _PREHASH_Animation = LLMessageStringTable::getInstance()->getString("Animation");
670char * _PREHASH_OwnerID; 670char* _PREHASH_OwnerID = LLMessageStringTable::getInstance()->getString("OwnerID");
671char * _PREHASH_NearestLandingRegionUpdated; 671char* _PREHASH_NearestLandingRegionUpdated = LLMessageStringTable::getInstance()->getString("NearestLandingRegionUpdated");
672char * _PREHASH_PassToAgent; 672char* _PREHASH_PassToAgent = LLMessageStringTable::getInstance()->getString("PassToAgent");
673char * _PREHASH_PreyAgent; 673char* _PREHASH_PreyAgent = LLMessageStringTable::getInstance()->getString("PreyAgent");
674char * _PREHASH_SimStats; 674char* _PREHASH_SimStats = LLMessageStringTable::getInstance()->getString("SimStats");
675char * _PREHASH_LogoutReply; 675char* _PREHASH_LogoutReply = LLMessageStringTable::getInstance()->getString("LogoutReply");
676char * _PREHASH_FeatureDisabled; 676char* _PREHASH_FeatureDisabled = LLMessageStringTable::getInstance()->getString("FeatureDisabled");
677char * _PREHASH_PhysicalAvatarEventList; 677char* _PREHASH_PhysicalAvatarEventList = LLMessageStringTable::getInstance()->getString("PhysicalAvatarEventList");
678char * _PREHASH_ObjectLocalID; 678char* _PREHASH_ObjectLocalID = LLMessageStringTable::getInstance()->getString("ObjectLocalID");
679char * _PREHASH_Dropped; 679char* _PREHASH_Dropped = LLMessageStringTable::getInstance()->getString("Dropped");
680char * _PREHASH_WebProfilesDisabled; 680char* _PREHASH_WebProfilesDisabled = LLMessageStringTable::getInstance()->getString("WebProfilesDisabled");
681char * _PREHASH_Destination; 681char* _PREHASH_Destination = LLMessageStringTable::getInstance()->getString("Destination");
682char * _PREHASH_MasterID; 682char* _PREHASH_MasterID = LLMessageStringTable::getInstance()->getString("MasterID");
683char * _PREHASH_TransferData; 683char* _PREHASH_TransferData = LLMessageStringTable::getInstance()->getString("TransferData");
684char * _PREHASH_WantToMask; 684char* _PREHASH_WantToMask = LLMessageStringTable::getInstance()->getString("WantToMask");
685char * _PREHASH_ParcelSelectObjects; 685char* _PREHASH_ParcelSelectObjects = LLMessageStringTable::getInstance()->getString("ParcelSelectObjects");
686char * _PREHASH_ExtraParams; 686char* _PREHASH_ExtraParams = LLMessageStringTable::getInstance()->getString("ExtraParams");
687char * _PREHASH_CreatorID; 687char* _PREHASH_CreatorID = LLMessageStringTable::getInstance()->getString("CreatorID");
688char * _PREHASH_Summary; 688char* _PREHASH_Summary = LLMessageStringTable::getInstance()->getString("Summary");
689char * _PREHASH_BuyObjectInventory; 689char* _PREHASH_BuyObjectInventory = LLMessageStringTable::getInstance()->getString("BuyObjectInventory");
690char * _PREHASH_FetchInventory; 690char* _PREHASH_FetchInventory = LLMessageStringTable::getInstance()->getString("FetchInventory");
691char * _PREHASH_InventoryID; 691char* _PREHASH_InventoryID = LLMessageStringTable::getInstance()->getString("InventoryID");
692char * _PREHASH_PacketNumber; 692char* _PREHASH_PacketNumber = LLMessageStringTable::getInstance()->getString("PacketNumber");
693char * _PREHASH_SetFollowCamProperties; 693char* _PREHASH_SetFollowCamProperties = LLMessageStringTable::getInstance()->getString("SetFollowCamProperties");
694char * _PREHASH_ClearFollowCamProperties; 694char* _PREHASH_ClearFollowCamProperties = LLMessageStringTable::getInstance()->getString("ClearFollowCamProperties");
695char * _PREHASH_SequenceID; 695char* _PREHASH_SequenceID = LLMessageStringTable::getInstance()->getString("SequenceID");
696char * _PREHASH_DataServerLogout; 696char* _PREHASH_DataServerLogout = LLMessageStringTable::getInstance()->getString("DataServerLogout");
697char * _PREHASH_NameValue; 697char* _PREHASH_NameValue = LLMessageStringTable::getInstance()->getString("NameValue");
698char * _PREHASH_PathShearX; 698char* _PREHASH_PathShearX = LLMessageStringTable::getInstance()->getString("PathShearX");
699char * _PREHASH_PathShearY; 699char* _PREHASH_PathShearY = LLMessageStringTable::getInstance()->getString("PathShearY");
700char * _PREHASH_Velocity; 700char* _PREHASH_Velocity = LLMessageStringTable::getInstance()->getString("Velocity");
701char * _PREHASH_SecPerYear; 701char* _PREHASH_SecPerYear = LLMessageStringTable::getInstance()->getString("SecPerYear");
702char * _PREHASH_FirstName; 702char* _PREHASH_FirstName = LLMessageStringTable::getInstance()->getString("FirstName");
703char * _PREHASH_AttachedSoundGainChange; 703char* _PREHASH_AttachedSoundGainChange = LLMessageStringTable::getInstance()->getString("AttachedSoundGainChange");
704char * _PREHASH_LocationID; 704char* _PREHASH_LocationID = LLMessageStringTable::getInstance()->getString("LocationID");
705char * _PREHASH_Running; 705char* _PREHASH_Running = LLMessageStringTable::getInstance()->getString("Running");
706char * _PREHASH_AgentThrottle; 706char* _PREHASH_AgentThrottle = LLMessageStringTable::getInstance()->getString("AgentThrottle");
707char * _PREHASH_NeighborList; 707char* _PREHASH_NeighborList = LLMessageStringTable::getInstance()->getString("NeighborList");
708char * _PREHASH_PathTaperX; 708char* _PREHASH_PathTaperX = LLMessageStringTable::getInstance()->getString("PathTaperX");
709char * _PREHASH_PathTaperY; 709char* _PREHASH_PathTaperY = LLMessageStringTable::getInstance()->getString("PathTaperY");
710char * _PREHASH_AgentRelated; 710char* _PREHASH_AgentRelated = LLMessageStringTable::getInstance()->getString("AgentRelated");
711char * _PREHASH_GranterBlock; 711char* _PREHASH_GranterBlock = LLMessageStringTable::getInstance()->getString("GranterBlock");
712char * _PREHASH_UseCachedMuteList; 712char* _PREHASH_UseCachedMuteList = LLMessageStringTable::getInstance()->getString("UseCachedMuteList");
713char * _PREHASH_FailStats; 713char* _PREHASH_FailStats = LLMessageStringTable::getInstance()->getString("FailStats");
714char * _PREHASH_Tempfile; 714char* _PREHASH_Tempfile = LLMessageStringTable::getInstance()->getString("Tempfile");
715char * _PREHASH_BuyerID; 715char* _PREHASH_BuyerID = LLMessageStringTable::getInstance()->getString("BuyerID");
716char * _PREHASH_DirPeopleReply; 716char* _PREHASH_DirPeopleReply = LLMessageStringTable::getInstance()->getString("DirPeopleReply");
717char * _PREHASH_TransferInfo; 717char* _PREHASH_TransferInfo = LLMessageStringTable::getInstance()->getString("TransferInfo");
718char * _PREHASH_AvatarPickerRequestBackend; 718char* _PREHASH_AvatarPickerRequestBackend = LLMessageStringTable::getInstance()->getString("AvatarPickerRequestBackend");
719char * _PREHASH_AvatarPropertiesRequestBackend; 719char* _PREHASH_AvatarPropertiesRequestBackend = LLMessageStringTable::getInstance()->getString("AvatarPropertiesRequestBackend");
720char * _PREHASH_UpdateData; 720char* _PREHASH_UpdateData = LLMessageStringTable::getInstance()->getString("UpdateData");
721char * _PREHASH_SimFPS; 721char* _PREHASH_SimFPS = LLMessageStringTable::getInstance()->getString("SimFPS");
722char * _PREHASH_ReporterID; 722char* _PREHASH_ReporterID = LLMessageStringTable::getInstance()->getString("ReporterID");
723char * _PREHASH_ButtonLabel; 723char* _PREHASH_ButtonLabel = LLMessageStringTable::getInstance()->getString("ButtonLabel");
724char * _PREHASH_GranterID; 724char* _PREHASH_GranterID = LLMessageStringTable::getInstance()->getString("GranterID");
725char * _PREHASH_WantToText; 725char* _PREHASH_WantToText = LLMessageStringTable::getInstance()->getString("WantToText");
726char * _PREHASH_ReportType; 726char* _PREHASH_ReportType = LLMessageStringTable::getInstance()->getString("ReportType");
727char * _PREHASH_SimulatorReady; 727char* _PREHASH_SimulatorReady = LLMessageStringTable::getInstance()->getString("SimulatorReady");
728char * _PREHASH_DataBlock; 728char* _PREHASH_DataBlock = LLMessageStringTable::getInstance()->getString("DataBlock");
729char * _PREHASH_AnimationSourceList; 729char* _PREHASH_AnimationSourceList = LLMessageStringTable::getInstance()->getString("AnimationSourceList");
730char * _PREHASH_SubscribeLoad; 730char* _PREHASH_SubscribeLoad = LLMessageStringTable::getInstance()->getString("SubscribeLoad");
731char * _PREHASH_UnsubscribeLoad; 731char* _PREHASH_UnsubscribeLoad = LLMessageStringTable::getInstance()->getString("UnsubscribeLoad");
732char * _PREHASH_Packet; 732char* _PREHASH_Packet = LLMessageStringTable::getInstance()->getString("Packet");
733char * _PREHASH_UndoLand; 733char* _PREHASH_UndoLand = LLMessageStringTable::getInstance()->getString("UndoLand");
734char * _PREHASH_SimAccess; 734char* _PREHASH_SimAccess = LLMessageStringTable::getInstance()->getString("SimAccess");
735char * _PREHASH_AbuserID; 735char* _PREHASH_AbuserID = LLMessageStringTable::getInstance()->getString("AbuserID");
736char * _PREHASH_MembershipFee; 736char* _PREHASH_MembershipFee = LLMessageStringTable::getInstance()->getString("MembershipFee");
737char * _PREHASH_InviteGroupResponse; 737char* _PREHASH_InviteGroupResponse = LLMessageStringTable::getInstance()->getString("InviteGroupResponse");
738char * _PREHASH_CreateInventoryFolder; 738char* _PREHASH_CreateInventoryFolder = LLMessageStringTable::getInstance()->getString("CreateInventoryFolder");
739char * _PREHASH_UpdateInventoryFolder; 739char* _PREHASH_UpdateInventoryFolder = LLMessageStringTable::getInstance()->getString("UpdateInventoryFolder");
740char * _PREHASH_MoveInventoryFolder; 740char* _PREHASH_MoveInventoryFolder = LLMessageStringTable::getInstance()->getString("MoveInventoryFolder");
741char * _PREHASH_RemoveInventoryFolder; 741char* _PREHASH_RemoveInventoryFolder = LLMessageStringTable::getInstance()->getString("RemoveInventoryFolder");
742char * _PREHASH_MoneyData; 742char* _PREHASH_MoneyData = LLMessageStringTable::getInstance()->getString("MoneyData");
743char * _PREHASH_ObjectDeselect; 743char* _PREHASH_ObjectDeselect = LLMessageStringTable::getInstance()->getString("ObjectDeselect");
744char * _PREHASH_NewAssetID; 744char* _PREHASH_NewAssetID = LLMessageStringTable::getInstance()->getString("NewAssetID");
745char * _PREHASH_ObjectAdd; 745char* _PREHASH_ObjectAdd = LLMessageStringTable::getInstance()->getString("ObjectAdd");
746char * _PREHASH_RayEndIsIntersection; 746char* _PREHASH_RayEndIsIntersection = LLMessageStringTable::getInstance()->getString("RayEndIsIntersection");
747char * _PREHASH_CompleteAuction; 747char* _PREHASH_CompleteAuction = LLMessageStringTable::getInstance()->getString("CompleteAuction");
748char * _PREHASH_CircuitCode; 748char* _PREHASH_CircuitCode = LLMessageStringTable::getInstance()->getString("CircuitCode");
749char * _PREHASH_AgentMovementComplete; 749char* _PREHASH_AgentMovementComplete = LLMessageStringTable::getInstance()->getString("AgentMovementComplete");
750char * _PREHASH_ViewerIP; 750char* _PREHASH_ViewerIP = LLMessageStringTable::getInstance()->getString("ViewerIP");
751char * _PREHASH_Header; 751char* _PREHASH_Header = LLMessageStringTable::getInstance()->getString("Header");
752char * _PREHASH_GestureFlags; 752char* _PREHASH_GestureFlags = LLMessageStringTable::getInstance()->getString("GestureFlags");
753char * _PREHASH_XferID; 753char* _PREHASH_XferID = LLMessageStringTable::getInstance()->getString("XferID");
754char * _PREHASH_StatValue; 754char* _PREHASH_StatValue = LLMessageStringTable::getInstance()->getString("StatValue");
755char * _PREHASH_TaskID; 755char* _PREHASH_TaskID = LLMessageStringTable::getInstance()->getString("TaskID");
756char * _PREHASH_PickID; 756char* _PREHASH_PickID = LLMessageStringTable::getInstance()->getString("PickID");
757char * _PREHASH_RayEnd; 757char* _PREHASH_RayEnd = LLMessageStringTable::getInstance()->getString("RayEnd");
758char * _PREHASH_Throttles; 758char* _PREHASH_Throttles = LLMessageStringTable::getInstance()->getString("Throttles");
759char * _PREHASH_RebakeAvatarTextures; 759char* _PREHASH_RebakeAvatarTextures = LLMessageStringTable::getInstance()->getString("RebakeAvatarTextures");
760char * _PREHASH_UpAxis; 760char* _PREHASH_UpAxis = LLMessageStringTable::getInstance()->getString("UpAxis");
761char * _PREHASH_AgentTextures; 761char* _PREHASH_AgentTextures = LLMessageStringTable::getInstance()->getString("AgentTextures");
762char * _PREHASH_NotecardData; 762char* _PREHASH_NotecardData = LLMessageStringTable::getInstance()->getString("NotecardData");
763char * _PREHASH_Radius; 763char* _PREHASH_Radius = LLMessageStringTable::getInstance()->getString("Radius");
764char * _PREHASH_OffCircuit; 764char* _PREHASH_OffCircuit = LLMessageStringTable::getInstance()->getString("OffCircuit");
765char * _PREHASH_Access; 765char* _PREHASH_Access = LLMessageStringTable::getInstance()->getString("Access");
766char * _PREHASH_TitleRoleID; 766char* _PREHASH_TitleRoleID = LLMessageStringTable::getInstance()->getString("TitleRoleID");
767char * _PREHASH_SquareMetersCredit; 767char* _PREHASH_SquareMetersCredit = LLMessageStringTable::getInstance()->getString("SquareMetersCredit");
768char * _PREHASH_Filename; 768char* _PREHASH_Filename = LLMessageStringTable::getInstance()->getString("Filename");
769char * _PREHASH_ClassifiedInfoRequest; 769char* _PREHASH_ClassifiedInfoRequest = LLMessageStringTable::getInstance()->getString("ClassifiedInfoRequest");
770char * _PREHASH_ParcelInfoRequest; 770char* _PREHASH_ParcelInfoRequest = LLMessageStringTable::getInstance()->getString("ParcelInfoRequest");
771char * _PREHASH_ParcelObjectOwnersRequest; 771char* _PREHASH_ParcelObjectOwnersRequest = LLMessageStringTable::getInstance()->getString("ParcelObjectOwnersRequest");
772char * _PREHASH_TeleportLandmarkRequest; 772char* _PREHASH_TeleportLandmarkRequest = LLMessageStringTable::getInstance()->getString("TeleportLandmarkRequest");
773char * _PREHASH_EventInfoRequest; 773char* _PREHASH_EventInfoRequest = LLMessageStringTable::getInstance()->getString("EventInfoRequest");
774char * _PREHASH_MoneyBalanceRequest; 774char* _PREHASH_MoneyBalanceRequest = LLMessageStringTable::getInstance()->getString("MoneyBalanceRequest");
775char * _PREHASH_GroupMembersRequest; 775char* _PREHASH_GroupMembersRequest = LLMessageStringTable::getInstance()->getString("GroupMembersRequest");
776char * _PREHASH_GroupRoleMembersRequest; 776char* _PREHASH_GroupRoleMembersRequest = LLMessageStringTable::getInstance()->getString("GroupRoleMembersRequest");
777char * _PREHASH_ChatFromSimulator; 777char* _PREHASH_ChatFromSimulator = LLMessageStringTable::getInstance()->getString("ChatFromSimulator");
778char * _PREHASH_OldFolderID; 778char* _PREHASH_OldFolderID = LLMessageStringTable::getInstance()->getString("OldFolderID");
779char * _PREHASH_UserInfoRequest; 779char* _PREHASH_UserInfoRequest = LLMessageStringTable::getInstance()->getString("UserInfoRequest");
780char * _PREHASH_TextureID; 780char* _PREHASH_TextureID = LLMessageStringTable::getInstance()->getString("TextureID");
781char * _PREHASH_ProfileURL; 781char* _PREHASH_ProfileURL = LLMessageStringTable::getInstance()->getString("ProfileURL");
782char * _PREHASH_Handle; 782char* _PREHASH_Handle = LLMessageStringTable::getInstance()->getString("Handle");
783char * _PREHASH_ButtonIndex; 783char* _PREHASH_ButtonIndex = LLMessageStringTable::getInstance()->getString("ButtonIndex");
784char * _PREHASH_GetScriptRunning; 784char* _PREHASH_GetScriptRunning = LLMessageStringTable::getInstance()->getString("GetScriptRunning");
785char * _PREHASH_SetScriptRunning; 785char* _PREHASH_SetScriptRunning = LLMessageStringTable::getInstance()->getString("SetScriptRunning");
786char * _PREHASH_Health; 786char* _PREHASH_Health = LLMessageStringTable::getInstance()->getString("Health");
787char * _PREHASH_CircuitInfo; 787char* _PREHASH_CircuitInfo = LLMessageStringTable::getInstance()->getString("CircuitInfo");
788char * _PREHASH_ObjectBuy; 788char* _PREHASH_ObjectBuy = LLMessageStringTable::getInstance()->getString("ObjectBuy");
789char * _PREHASH_ProfileEnd; 789char* _PREHASH_ProfileEnd = LLMessageStringTable::getInstance()->getString("ProfileEnd");
790char * _PREHASH_Effect; 790char* _PREHASH_Effect = LLMessageStringTable::getInstance()->getString("Effect");
791char * _PREHASH_TestMessage; 791char* _PREHASH_TestMessage = LLMessageStringTable::getInstance()->getString("TestMessage");
792char * _PREHASH_ScriptMailRegistration; 792char* _PREHASH_ScriptMailRegistration = LLMessageStringTable::getInstance()->getString("ScriptMailRegistration");
793char * _PREHASH_AgentSetAppearance; 793char* _PREHASH_AgentSetAppearance = LLMessageStringTable::getInstance()->getString("AgentSetAppearance");
794char * _PREHASH_AvatarAppearance; 794char* _PREHASH_AvatarAppearance = LLMessageStringTable::getInstance()->getString("AvatarAppearance");
795char * _PREHASH_RegionData; 795char* _PREHASH_RegionData = LLMessageStringTable::getInstance()->getString("RegionData");
796char * _PREHASH_RequestingRegionData; 796char* _PREHASH_RequestingRegionData = LLMessageStringTable::getInstance()->getString("RequestingRegionData");
797char * _PREHASH_LandingRegionData; 797char* _PREHASH_LandingRegionData = LLMessageStringTable::getInstance()->getString("LandingRegionData");
798char * _PREHASH_SitTransform; 798char* _PREHASH_SitTransform = LLMessageStringTable::getInstance()->getString("SitTransform");
799char * _PREHASH_TerrainBase0; 799char* _PREHASH_TerrainBase0 = LLMessageStringTable::getInstance()->getString("TerrainBase0");
800char * _PREHASH_SkillsMask; 800char* _PREHASH_SkillsMask = LLMessageStringTable::getInstance()->getString("SkillsMask");
801char * _PREHASH_AtAxis; 801char* _PREHASH_AtAxis = LLMessageStringTable::getInstance()->getString("AtAxis");
802char * _PREHASH_TerrainBase1; 802char* _PREHASH_TerrainBase1 = LLMessageStringTable::getInstance()->getString("TerrainBase1");
803char * _PREHASH_Reason; 803char* _PREHASH_Reason = LLMessageStringTable::getInstance()->getString("Reason");
804char * _PREHASH_TerrainBase2; 804char* _PREHASH_TerrainBase2 = LLMessageStringTable::getInstance()->getString("TerrainBase2");
805char * _PREHASH_TerrainBase3; 805char* _PREHASH_TerrainBase3 = LLMessageStringTable::getInstance()->getString("TerrainBase3");
806char * _PREHASH_Params; 806char* _PREHASH_Params = LLMessageStringTable::getInstance()->getString("Params");
807char * _PREHASH_PingID; 807char* _PREHASH_PingID = LLMessageStringTable::getInstance()->getString("PingID");
808char * _PREHASH_Change; 808char* _PREHASH_Change = LLMessageStringTable::getInstance()->getString("Change");
809char * _PREHASH_Height; 809char* _PREHASH_Height = LLMessageStringTable::getInstance()->getString("Height");
810char * _PREHASH_Region; 810char* _PREHASH_Region = LLMessageStringTable::getInstance()->getString("Region");
811char * _PREHASH_TelehubInfo; 811char* _PREHASH_TelehubInfo = LLMessageStringTable::getInstance()->getString("TelehubInfo");
812char * _PREHASH_StateSave; 812char* _PREHASH_StateSave = LLMessageStringTable::getInstance()->getString("StateSave");
813char * _PREHASH_RoleData; 813char* _PREHASH_RoleData = LLMessageStringTable::getInstance()->getString("RoleData");
814char * _PREHASH_AgentAnimation; 814char* _PREHASH_AgentAnimation = LLMessageStringTable::getInstance()->getString("AgentAnimation");
815char * _PREHASH_AvatarAnimation; 815char* _PREHASH_AvatarAnimation = LLMessageStringTable::getInstance()->getString("AvatarAnimation");
816char * _PREHASH_LogDwellTime; 816char* _PREHASH_LogDwellTime = LLMessageStringTable::getInstance()->getString("LogDwellTime");
817char * _PREHASH_ParcelGodMarkAsContent; 817char* _PREHASH_ParcelGodMarkAsContent = LLMessageStringTable::getInstance()->getString("ParcelGodMarkAsContent");
818char * _PREHASH_UsePhysics; 818char* _PREHASH_UsePhysics = LLMessageStringTable::getInstance()->getString("UsePhysics");
819char * _PREHASH_RegionDenyTransacted; 819char* _PREHASH_RegionDenyTransacted = LLMessageStringTable::getInstance()->getString("RegionDenyTransacted");
820char * _PREHASH_JointType; 820char* _PREHASH_JointType = LLMessageStringTable::getInstance()->getString("JointType");
821char * _PREHASH_ObjectTaxEstimate; 821char* _PREHASH_ObjectTaxEstimate = LLMessageStringTable::getInstance()->getString("ObjectTaxEstimate");
822char * _PREHASH_LightTaxEstimate; 822char* _PREHASH_LightTaxEstimate = LLMessageStringTable::getInstance()->getString("LightTaxEstimate");
823char * _PREHASH_LandTaxEstimate; 823char* _PREHASH_LandTaxEstimate = LLMessageStringTable::getInstance()->getString("LandTaxEstimate");
824char * _PREHASH_TeleportLandingStatusChanged; 824char* _PREHASH_TeleportLandingStatusChanged = LLMessageStringTable::getInstance()->getString("TeleportLandingStatusChanged");
825char * _PREHASH_GroupTaxEstimate; 825char* _PREHASH_GroupTaxEstimate = LLMessageStringTable::getInstance()->getString("GroupTaxEstimate");
826char * _PREHASH_AvgViewerFPS; 826char* _PREHASH_AvgViewerFPS = LLMessageStringTable::getInstance()->getString("AvgViewerFPS");
827char * _PREHASH_Buttons; 827char* _PREHASH_Buttons = LLMessageStringTable::getInstance()->getString("Buttons");
828char * _PREHASH_Sender; 828char* _PREHASH_Sender = LLMessageStringTable::getInstance()->getString("Sender");
829char * _PREHASH_Dialog; 829char* _PREHASH_Dialog = LLMessageStringTable::getInstance()->getString("Dialog");
830char * _PREHASH_TargetData; 830char* _PREHASH_TargetData = LLMessageStringTable::getInstance()->getString("TargetData");
831char * _PREHASH_DestID; 831char* _PREHASH_DestID = LLMessageStringTable::getInstance()->getString("DestID");
832char * _PREHASH_PricePublicObjectDelete; 832char* _PREHASH_PricePublicObjectDelete = LLMessageStringTable::getInstance()->getString("PricePublicObjectDelete");
833char * _PREHASH_ObjectDelete; 833char* _PREHASH_ObjectDelete = LLMessageStringTable::getInstance()->getString("ObjectDelete");
834char * _PREHASH_Delete; 834char* _PREHASH_Delete = LLMessageStringTable::getInstance()->getString("Delete");
835char * _PREHASH_EventGodDelete; 835char* _PREHASH_EventGodDelete = LLMessageStringTable::getInstance()->getString("EventGodDelete");
836char * _PREHASH_LastTaxDate; 836char* _PREHASH_LastTaxDate = LLMessageStringTable::getInstance()->getString("LastTaxDate");
837char * _PREHASH_MapImageID; 837char* _PREHASH_MapImageID = LLMessageStringTable::getInstance()->getString("MapImageID");
838char * _PREHASH_EndDateTime; 838char* _PREHASH_EndDateTime = LLMessageStringTable::getInstance()->getString("EndDateTime");
839char * _PREHASH_TerrainDetail0; 839char* _PREHASH_TerrainDetail0 = LLMessageStringTable::getInstance()->getString("TerrainDetail0");
840char * _PREHASH_TerrainDetail1; 840char* _PREHASH_TerrainDetail1 = LLMessageStringTable::getInstance()->getString("TerrainDetail1");
841char * _PREHASH_TerrainDetail2; 841char* _PREHASH_TerrainDetail2 = LLMessageStringTable::getInstance()->getString("TerrainDetail2");
842char * _PREHASH_TerrainDetail3; 842char* _PREHASH_TerrainDetail3 = LLMessageStringTable::getInstance()->getString("TerrainDetail3");
843char * _PREHASH_Offset; 843char* _PREHASH_Offset = LLMessageStringTable::getInstance()->getString("Offset");
844char * _PREHASH_ObjectDelink; 844char* _PREHASH_ObjectDelink = LLMessageStringTable::getInstance()->getString("ObjectDelink");
845char * _PREHASH_TargetObject; 845char* _PREHASH_TargetObject = LLMessageStringTable::getInstance()->getString("TargetObject");
846char * _PREHASH_IsEstateManager; 846char* _PREHASH_IsEstateManager = LLMessageStringTable::getInstance()->getString("IsEstateManager");
847char * _PREHASH_CancelAuction; 847char* _PREHASH_CancelAuction = LLMessageStringTable::getInstance()->getString("CancelAuction");
848char * _PREHASH_ObjectDetach; 848char* _PREHASH_ObjectDetach = LLMessageStringTable::getInstance()->getString("ObjectDetach");
849char * _PREHASH_Compressed; 849char* _PREHASH_Compressed = LLMessageStringTable::getInstance()->getString("Compressed");
850char * _PREHASH_PathBegin; 850char* _PREHASH_PathBegin = LLMessageStringTable::getInstance()->getString("PathBegin");
851char * _PREHASH_BypassRaycast; 851char* _PREHASH_BypassRaycast = LLMessageStringTable::getInstance()->getString("BypassRaycast");
852char * _PREHASH_WinnerID; 852char* _PREHASH_WinnerID = LLMessageStringTable::getInstance()->getString("WinnerID");
853char * _PREHASH_ChannelType; 853char* _PREHASH_ChannelType = LLMessageStringTable::getInstance()->getString("ChannelType");
854char * _PREHASH_NonExemptMembers; 854char* _PREHASH_NonExemptMembers = LLMessageStringTable::getInstance()->getString("NonExemptMembers");
855char * _PREHASH_Agents; 855char* _PREHASH_Agents = LLMessageStringTable::getInstance()->getString("Agents");
856char * _PREHASH_MemberData; 856char* _PREHASH_MemberData = LLMessageStringTable::getInstance()->getString("MemberData");
857char * _PREHASH_ToGroupID; 857char* _PREHASH_ToGroupID = LLMessageStringTable::getInstance()->getString("ToGroupID");
858char * _PREHASH_ImageNotInDatabase; 858char* _PREHASH_ImageNotInDatabase = LLMessageStringTable::getInstance()->getString("ImageNotInDatabase");
859char * _PREHASH_StartDate; 859char* _PREHASH_StartDate = LLMessageStringTable::getInstance()->getString("StartDate");
860char * _PREHASH_AnimID; 860char* _PREHASH_AnimID = LLMessageStringTable::getInstance()->getString("AnimID");
861char * _PREHASH_Serial; 861char* _PREHASH_Serial = LLMessageStringTable::getInstance()->getString("Serial");
862char * _PREHASH_AbuseRegionName; 862char* _PREHASH_AbuseRegionName = LLMessageStringTable::getInstance()->getString("AbuseRegionName");
863char * _PREHASH_ModifyLand; 863char* _PREHASH_ModifyLand = LLMessageStringTable::getInstance()->getString("ModifyLand");
864char * _PREHASH_Digest; 864char* _PREHASH_Digest = LLMessageStringTable::getInstance()->getString("Digest");
865char * _PREHASH_Victim; 865char* _PREHASH_Victim = LLMessageStringTable::getInstance()->getString("Victim");
866char * _PREHASH_Script; 866char* _PREHASH_Script = LLMessageStringTable::getInstance()->getString("Script");
867char * _PREHASH_PickInfoReply; 867char* _PREHASH_PickInfoReply = LLMessageStringTable::getInstance()->getString("PickInfoReply");
868char * _PREHASH_MoneyBalanceReply; 868char* _PREHASH_MoneyBalanceReply = LLMessageStringTable::getInstance()->getString("MoneyBalanceReply");
869char * _PREHASH_RoutedMoneyBalanceReply; 869char* _PREHASH_RoutedMoneyBalanceReply = LLMessageStringTable::getInstance()->getString("RoutedMoneyBalanceReply");
870char * _PREHASH_RoleID; 870char* _PREHASH_RoleID = LLMessageStringTable::getInstance()->getString("RoleID");
871char * _PREHASH_RegionInfo; 871char* _PREHASH_RegionInfo = LLMessageStringTable::getInstance()->getString("RegionInfo");
872char * _PREHASH_GodUpdateRegionInfo; 872char* _PREHASH_GodUpdateRegionInfo = LLMessageStringTable::getInstance()->getString("GodUpdateRegionInfo");
873char * _PREHASH_StartAnim; 873char* _PREHASH_StartAnim = LLMessageStringTable::getInstance()->getString("StartAnim");
874char * _PREHASH_Action; 874char* _PREHASH_Action = LLMessageStringTable::getInstance()->getString("Action");
875char * _PREHASH_Location; 875char* _PREHASH_Location = LLMessageStringTable::getInstance()->getString("Location");
876char * _PREHASH_Rights; 876char* _PREHASH_Rights = LLMessageStringTable::getInstance()->getString("Rights");
877char * _PREHASH_SearchDir; 877char* _PREHASH_SearchDir = LLMessageStringTable::getInstance()->getString("SearchDir");
878char * _PREHASH_TransferRequest; 878char* _PREHASH_TransferRequest = LLMessageStringTable::getInstance()->getString("TransferRequest");
879char * _PREHASH_ScriptSensorRequest; 879char* _PREHASH_ScriptSensorRequest = LLMessageStringTable::getInstance()->getString("ScriptSensorRequest");
880char * _PREHASH_MoneyTransferRequest; 880char* _PREHASH_MoneyTransferRequest = LLMessageStringTable::getInstance()->getString("MoneyTransferRequest");
881char * _PREHASH_EjectGroupMemberRequest; 881char* _PREHASH_EjectGroupMemberRequest = LLMessageStringTable::getInstance()->getString("EjectGroupMemberRequest");
882char * _PREHASH_SkillsText; 882char* _PREHASH_SkillsText = LLMessageStringTable::getInstance()->getString("SkillsText");
883char * _PREHASH_Resent; 883char* _PREHASH_Resent = LLMessageStringTable::getInstance()->getString("Resent");
884char * _PREHASH_Center; 884char* _PREHASH_Center = LLMessageStringTable::getInstance()->getString("Center");
885char * _PREHASH_SharedData; 885char* _PREHASH_SharedData = LLMessageStringTable::getInstance()->getString("SharedData");
886char * _PREHASH_PSBlock; 886char* _PREHASH_PSBlock = LLMessageStringTable::getInstance()->getString("PSBlock");
887char * _PREHASH_UUIDNameBlock; 887char* _PREHASH_UUIDNameBlock = LLMessageStringTable::getInstance()->getString("UUIDNameBlock");
888char * _PREHASH_GroupTitleUpdate; 888char* _PREHASH_GroupTitleUpdate = LLMessageStringTable::getInstance()->getString("GroupTitleUpdate");
889char * _PREHASH_Method; 889char* _PREHASH_Method = LLMessageStringTable::getInstance()->getString("Method");
890char * _PREHASH_TouchName; 890char* _PREHASH_TouchName = LLMessageStringTable::getInstance()->getString("TouchName");
891char * _PREHASH_UpdateType; 891char* _PREHASH_UpdateType = LLMessageStringTable::getInstance()->getString("UpdateType");
892char * _PREHASH_KickedFromEstateID; 892char* _PREHASH_KickedFromEstateID = LLMessageStringTable::getInstance()->getString("KickedFromEstateID");
893char * _PREHASH_CandidateID; 893char* _PREHASH_CandidateID = LLMessageStringTable::getInstance()->getString("CandidateID");
894char * _PREHASH_ParamData; 894char* _PREHASH_ParamData = LLMessageStringTable::getInstance()->getString("ParamData");
895char * _PREHASH_GodlikeMessage; 895char* _PREHASH_GodlikeMessage = LLMessageStringTable::getInstance()->getString("GodlikeMessage");
896char * _PREHASH_SystemMessage; 896char* _PREHASH_SystemMessage = LLMessageStringTable::getInstance()->getString("SystemMessage");
897char * _PREHASH_BodyRotation; 897char* _PREHASH_BodyRotation = LLMessageStringTable::getInstance()->getString("BodyRotation");
898char * _PREHASH_SearchRegions; 898char* _PREHASH_SearchRegions = LLMessageStringTable::getInstance()->getString("SearchRegions");
899char * _PREHASH_AnimationData; 899char* _PREHASH_AnimationData = LLMessageStringTable::getInstance()->getString("AnimationData");
900char * _PREHASH_StatID; 900char* _PREHASH_StatID = LLMessageStringTable::getInstance()->getString("StatID");
901char * _PREHASH_ItemID; 901char* _PREHASH_ItemID = LLMessageStringTable::getInstance()->getString("ItemID");
902char * _PREHASH_ScriptDialogReply; 902char* _PREHASH_ScriptDialogReply = LLMessageStringTable::getInstance()->getString("ScriptDialogReply");
903char * _PREHASH_RegionIDAndHandleReply; 903char* _PREHASH_RegionIDAndHandleReply = LLMessageStringTable::getInstance()->getString("RegionIDAndHandleReply");
904char * _PREHASH_CameraAtOffset; 904char* _PREHASH_CameraAtOffset = LLMessageStringTable::getInstance()->getString("CameraAtOffset");
905char * _PREHASH_VoteID; 905char* _PREHASH_VoteID = LLMessageStringTable::getInstance()->getString("VoteID");
906char * _PREHASH_ParcelGodForceOwner; 906char* _PREHASH_ParcelGodForceOwner = LLMessageStringTable::getInstance()->getString("ParcelGodForceOwner");
907char * _PREHASH_Filter; 907char* _PREHASH_Filter = LLMessageStringTable::getInstance()->getString("Filter");
908char * _PREHASH_InviteData; 908char* _PREHASH_InviteData = LLMessageStringTable::getInstance()->getString("InviteData");
909char * _PREHASH_PCode; 909char* _PREHASH_PCode = LLMessageStringTable::getInstance()->getString("PCode");
910char * _PREHASH_SearchPos; 910char* _PREHASH_SearchPos = LLMessageStringTable::getInstance()->getString("SearchPos");
911char * _PREHASH_PreyID; 911char* _PREHASH_PreyID = LLMessageStringTable::getInstance()->getString("PreyID");
912char * _PREHASH_TerrainLowerLimit; 912char* _PREHASH_TerrainLowerLimit = LLMessageStringTable::getInstance()->getString("TerrainLowerLimit");
913char * _PREHASH_EventFlags; 913char* _PREHASH_EventFlags = LLMessageStringTable::getInstance()->getString("EventFlags");
914char * _PREHASH_TallyVotes; 914char* _PREHASH_TallyVotes = LLMessageStringTable::getInstance()->getString("TallyVotes");
915char * _PREHASH_Result; 915char* _PREHASH_Result = LLMessageStringTable::getInstance()->getString("Result");
916char * _PREHASH_LookAt; 916char* _PREHASH_LookAt = LLMessageStringTable::getInstance()->getString("LookAt");
917char * _PREHASH_SearchOrder; 917char* _PREHASH_SearchOrder = LLMessageStringTable::getInstance()->getString("SearchOrder");
918char * _PREHASH_PayButton; 918char* _PREHASH_PayButton = LLMessageStringTable::getInstance()->getString("PayButton");
919char * _PREHASH_SelfCount; 919char* _PREHASH_SelfCount = LLMessageStringTable::getInstance()->getString("SelfCount");
920char * _PREHASH_PacketCount; 920char* _PREHASH_PacketCount = LLMessageStringTable::getInstance()->getString("PacketCount");
921char * _PREHASH_ParcelBuyPass; 921char* _PREHASH_ParcelBuyPass = LLMessageStringTable::getInstance()->getString("ParcelBuyPass");
922char * _PREHASH_OldItemID; 922char* _PREHASH_OldItemID = LLMessageStringTable::getInstance()->getString("OldItemID");
923char * _PREHASH_RegionPort; 923char* _PREHASH_RegionPort = LLMessageStringTable::getInstance()->getString("RegionPort");
924char * _PREHASH_PriceEnergyUnit; 924char* _PREHASH_PriceEnergyUnit = LLMessageStringTable::getInstance()->getString("PriceEnergyUnit");
925char * _PREHASH_Bitmap; 925char* _PREHASH_Bitmap = LLMessageStringTable::getInstance()->getString("Bitmap");
926char * _PREHASH_CacheMissType; 926char* _PREHASH_CacheMissType = LLMessageStringTable::getInstance()->getString("CacheMissType");
927char * _PREHASH_VFileID; 927char* _PREHASH_VFileID = LLMessageStringTable::getInstance()->getString("VFileID");
928char * _PREHASH_GroupInsigniaID; 928char* _PREHASH_GroupInsigniaID = LLMessageStringTable::getInstance()->getString("GroupInsigniaID");
929char * _PREHASH_Online; 929char* _PREHASH_Online = LLMessageStringTable::getInstance()->getString("Online");
930char * _PREHASH_KickFlags; 930char* _PREHASH_KickFlags = LLMessageStringTable::getInstance()->getString("KickFlags");
931char * _PREHASH_CovenantID; 931char* _PREHASH_CovenantID = LLMessageStringTable::getInstance()->getString("CovenantID");
932char * _PREHASH_SysCPU; 932char* _PREHASH_SysCPU = LLMessageStringTable::getInstance()->getString("SysCPU");
933char * _PREHASH_EMail; 933char* _PREHASH_EMail = LLMessageStringTable::getInstance()->getString("EMail");
934char * _PREHASH_AggregatePermTextures; 934char* _PREHASH_AggregatePermTextures = LLMessageStringTable::getInstance()->getString("AggregatePermTextures");
935char * _PREHASH_ChatChannel; 935char* _PREHASH_ChatChannel = LLMessageStringTable::getInstance()->getString("ChatChannel");
936char * _PREHASH_ReturnID; 936char* _PREHASH_ReturnID = LLMessageStringTable::getInstance()->getString("ReturnID");
937char * _PREHASH_ObjectAttach; 937char* _PREHASH_ObjectAttach = LLMessageStringTable::getInstance()->getString("ObjectAttach");
938char * _PREHASH_TargetPort; 938char* _PREHASH_TargetPort = LLMessageStringTable::getInstance()->getString("TargetPort");
939char * _PREHASH_ObjectSpinStop; 939char* _PREHASH_ObjectSpinStop = LLMessageStringTable::getInstance()->getString("ObjectSpinStop");
940char * _PREHASH_FullID; 940char* _PREHASH_FullID = LLMessageStringTable::getInstance()->getString("FullID");
941char * _PREHASH_ActivateGroup; 941char* _PREHASH_ActivateGroup = LLMessageStringTable::getInstance()->getString("ActivateGroup");
942char * _PREHASH_SysGPU; 942char* _PREHASH_SysGPU = LLMessageStringTable::getInstance()->getString("SysGPU");
943char * _PREHASH_AvatarInterestsReply; 943char* _PREHASH_AvatarInterestsReply = LLMessageStringTable::getInstance()->getString("AvatarInterestsReply");
944char * _PREHASH_StartLure; 944char* _PREHASH_StartLure = LLMessageStringTable::getInstance()->getString("StartLure");
945char * _PREHASH_SysRAM; 945char* _PREHASH_SysRAM = LLMessageStringTable::getInstance()->getString("SysRAM");
946char * _PREHASH_ObjectPosition; 946char* _PREHASH_ObjectPosition = LLMessageStringTable::getInstance()->getString("ObjectPosition");
947char * _PREHASH_SitPosition; 947char* _PREHASH_SitPosition = LLMessageStringTable::getInstance()->getString("SitPosition");
948char * _PREHASH_StartTime; 948char* _PREHASH_StartTime = LLMessageStringTable::getInstance()->getString("StartTime");
949char * _PREHASH_BornOn; 949char* _PREHASH_BornOn = LLMessageStringTable::getInstance()->getString("BornOn");
950char * _PREHASH_CameraCollidePlane; 950char* _PREHASH_CameraCollidePlane = LLMessageStringTable::getInstance()->getString("CameraCollidePlane");
951char * _PREHASH_EconomyDataRequest; 951char* _PREHASH_EconomyDataRequest = LLMessageStringTable::getInstance()->getString("EconomyDataRequest");
952char * _PREHASH_TeleportLureRequest; 952char* _PREHASH_TeleportLureRequest = LLMessageStringTable::getInstance()->getString("TeleportLureRequest");
953char * _PREHASH_FolderID; 953char* _PREHASH_FolderID = LLMessageStringTable::getInstance()->getString("FolderID");
954char * _PREHASH_RegionHandleRequest; 954char* _PREHASH_RegionHandleRequest = LLMessageStringTable::getInstance()->getString("RegionHandleRequest");
955char * _PREHASH_ScriptDataRequest; 955char* _PREHASH_ScriptDataRequest = LLMessageStringTable::getInstance()->getString("ScriptDataRequest");
956char * _PREHASH_GroupRoleDataRequest; 956char* _PREHASH_GroupRoleDataRequest = LLMessageStringTable::getInstance()->getString("GroupRoleDataRequest");
957char * _PREHASH_GroupTitlesRequest; 957char* _PREHASH_GroupTitlesRequest = LLMessageStringTable::getInstance()->getString("GroupTitlesRequest");
958char * _PREHASH_AgentWearablesRequest; 958char* _PREHASH_AgentWearablesRequest = LLMessageStringTable::getInstance()->getString("AgentWearablesRequest");
959char * _PREHASH_MapBlockRequest; 959char* _PREHASH_MapBlockRequest = LLMessageStringTable::getInstance()->getString("MapBlockRequest");
960char * _PREHASH_LureID; 960char* _PREHASH_LureID = LLMessageStringTable::getInstance()->getString("LureID");
961char * _PREHASH_CopyCenters; 961char* _PREHASH_CopyCenters = LLMessageStringTable::getInstance()->getString("CopyCenters");
962char * _PREHASH_ParamList; 962char* _PREHASH_ParamList = LLMessageStringTable::getInstance()->getString("ParamList");
963char * _PREHASH_InventorySerial; 963char* _PREHASH_InventorySerial = LLMessageStringTable::getInstance()->getString("InventorySerial");
964char * _PREHASH_EdgeDataPacket; 964char* _PREHASH_EdgeDataPacket = LLMessageStringTable::getInstance()->getString("EdgeDataPacket");
965char * _PREHASH_AvatarPickerReply; 965char* _PREHASH_AvatarPickerReply = LLMessageStringTable::getInstance()->getString("AvatarPickerReply");
966char * _PREHASH_ParcelDwellReply; 966char* _PREHASH_ParcelDwellReply = LLMessageStringTable::getInstance()->getString("ParcelDwellReply");
967char * _PREHASH_IsForSale; 967char* _PREHASH_IsForSale = LLMessageStringTable::getInstance()->getString("IsForSale");
968char * _PREHASH_MuteID; 968char* _PREHASH_MuteID = LLMessageStringTable::getInstance()->getString("MuteID");
969char * _PREHASH_MeanCollisionAlert; 969char* _PREHASH_MeanCollisionAlert = LLMessageStringTable::getInstance()->getString("MeanCollisionAlert");
970char * _PREHASH_CanAcceptTasks; 970char* _PREHASH_CanAcceptTasks = LLMessageStringTable::getInstance()->getString("CanAcceptTasks");
971char * _PREHASH_ItemData; 971char* _PREHASH_ItemData = LLMessageStringTable::getInstance()->getString("ItemData");
972char * _PREHASH_AnimationList; 972char* _PREHASH_AnimationList = LLMessageStringTable::getInstance()->getString("AnimationList");
973char * _PREHASH_Reputation; 973char* _PREHASH_Reputation = LLMessageStringTable::getInstance()->getString("Reputation");
974char * _PREHASH_IntValue; 974char* _PREHASH_IntValue = LLMessageStringTable::getInstance()->getString("IntValue");
975char * _PREHASH_TargetType; 975char* _PREHASH_TargetType = LLMessageStringTable::getInstance()->getString("TargetType");
976char * _PREHASH_Amount; 976char* _PREHASH_Amount = LLMessageStringTable::getInstance()->getString("Amount");
977char * _PREHASH_HasAttachment; 977char* _PREHASH_HasAttachment = LLMessageStringTable::getInstance()->getString("HasAttachment");
978char * _PREHASH_UpdateAttachment; 978char* _PREHASH_UpdateAttachment = LLMessageStringTable::getInstance()->getString("UpdateAttachment");
979char * _PREHASH_RemoveAttachment; 979char* _PREHASH_RemoveAttachment = LLMessageStringTable::getInstance()->getString("RemoveAttachment");
980char * _PREHASH_HeightWidthBlock; 980char* _PREHASH_HeightWidthBlock = LLMessageStringTable::getInstance()->getString("HeightWidthBlock");
981char * _PREHASH_RequestObjectPropertiesFamily; 981char* _PREHASH_RequestObjectPropertiesFamily = LLMessageStringTable::getInstance()->getString("RequestObjectPropertiesFamily");
982char * _PREHASH_ObjectPropertiesFamily; 982char* _PREHASH_ObjectPropertiesFamily = LLMessageStringTable::getInstance()->getString("ObjectPropertiesFamily");
983char * _PREHASH_UserData; 983char* _PREHASH_UserData = LLMessageStringTable::getInstance()->getString("UserData");
984char * _PREHASH_IsReadable; 984char* _PREHASH_IsReadable = LLMessageStringTable::getInstance()->getString("IsReadable");
985char * _PREHASH_PathCurve; 985char* _PREHASH_PathCurve = LLMessageStringTable::getInstance()->getString("PathCurve");
986char * _PREHASH_Status; 986char* _PREHASH_Status = LLMessageStringTable::getInstance()->getString("Status");
987char * _PREHASH_FromGroup; 987char* _PREHASH_FromGroup = LLMessageStringTable::getInstance()->getString("FromGroup");
988char * _PREHASH_AlreadyVoted; 988char* _PREHASH_AlreadyVoted = LLMessageStringTable::getInstance()->getString("AlreadyVoted");
989char * _PREHASH_PlacesReply; 989char* _PREHASH_PlacesReply = LLMessageStringTable::getInstance()->getString("PlacesReply");
990char * _PREHASH_DirPlacesReply; 990char* _PREHASH_DirPlacesReply = LLMessageStringTable::getInstance()->getString("DirPlacesReply");
991char * _PREHASH_ParcelBuy; 991char* _PREHASH_ParcelBuy = LLMessageStringTable::getInstance()->getString("ParcelBuy");
992char * _PREHASH_DirFindQueryBackend; 992char* _PREHASH_DirFindQueryBackend = LLMessageStringTable::getInstance()->getString("DirFindQueryBackend");
993char * _PREHASH_DirPlacesQueryBackend; 993char* _PREHASH_DirPlacesQueryBackend = LLMessageStringTable::getInstance()->getString("DirPlacesQueryBackend");
994char * _PREHASH_DirClassifiedQueryBackend; 994char* _PREHASH_DirClassifiedQueryBackend = LLMessageStringTable::getInstance()->getString("DirClassifiedQueryBackend");
995char * _PREHASH_DirLandQueryBackend; 995char* _PREHASH_DirLandQueryBackend = LLMessageStringTable::getInstance()->getString("DirLandQueryBackend");
996char * _PREHASH_DirPopularQueryBackend; 996char* _PREHASH_DirPopularQueryBackend = LLMessageStringTable::getInstance()->getString("DirPopularQueryBackend");
997char * _PREHASH_HistoryData; 997char* _PREHASH_HistoryData = LLMessageStringTable::getInstance()->getString("HistoryData");
998char * _PREHASH_SnapshotID; 998char* _PREHASH_SnapshotID = LLMessageStringTable::getInstance()->getString("SnapshotID");
999char * _PREHASH_Aspect; 999char* _PREHASH_Aspect = LLMessageStringTable::getInstance()->getString("Aspect");
1000char * _PREHASH_ParamSize; 1000char* _PREHASH_ParamSize = LLMessageStringTable::getInstance()->getString("ParamSize");
1001char * _PREHASH_VoteCast; 1001char* _PREHASH_VoteCast = LLMessageStringTable::getInstance()->getString("VoteCast");
1002char * _PREHASH_CastsShadows; 1002char* _PREHASH_CastsShadows = LLMessageStringTable::getInstance()->getString("CastsShadows");
1003char * _PREHASH_EveryoneMask; 1003char* _PREHASH_EveryoneMask = LLMessageStringTable::getInstance()->getString("EveryoneMask");
1004char * _PREHASH_ObjectSpinUpdate; 1004char* _PREHASH_ObjectSpinUpdate = LLMessageStringTable::getInstance()->getString("ObjectSpinUpdate");
1005char * _PREHASH_MaturePublish; 1005char* _PREHASH_MaturePublish = LLMessageStringTable::getInstance()->getString("MaturePublish");
1006char * _PREHASH_UseExistingAsset; 1006char* _PREHASH_UseExistingAsset = LLMessageStringTable::getInstance()->getString("UseExistingAsset");
1007char * _PREHASH_Powers; 1007char* _PREHASH_Powers = LLMessageStringTable::getInstance()->getString("Powers");
1008char * _PREHASH_ParcelLocalID; 1008char* _PREHASH_ParcelLocalID = LLMessageStringTable::getInstance()->getString("ParcelLocalID");
1009char * _PREHASH_TeleportCancel; 1009char* _PREHASH_TeleportCancel = LLMessageStringTable::getInstance()->getString("TeleportCancel");
1010char * _PREHASH_UnixTime; 1010char* _PREHASH_UnixTime = LLMessageStringTable::getInstance()->getString("UnixTime");
1011char * _PREHASH_QueryFlags; 1011char* _PREHASH_QueryFlags = LLMessageStringTable::getInstance()->getString("QueryFlags");
1012char * _PREHASH_AlwaysRun; 1012char* _PREHASH_AlwaysRun = LLMessageStringTable::getInstance()->getString("AlwaysRun");
1013char * _PREHASH_Bottom; 1013char* _PREHASH_Bottom = LLMessageStringTable::getInstance()->getString("Bottom");
1014char * _PREHASH_ButtonData; 1014char* _PREHASH_ButtonData = LLMessageStringTable::getInstance()->getString("ButtonData");
1015char * _PREHASH_SoundData; 1015char* _PREHASH_SoundData = LLMessageStringTable::getInstance()->getString("SoundData");
1016char * _PREHASH_ViewerStats; 1016char* _PREHASH_ViewerStats = LLMessageStringTable::getInstance()->getString("ViewerStats");
1017char * _PREHASH_RegionHandshake; 1017char* _PREHASH_RegionHandshake = LLMessageStringTable::getInstance()->getString("RegionHandshake");
1018char * _PREHASH_ObjectDescription; 1018char* _PREHASH_ObjectDescription = LLMessageStringTable::getInstance()->getString("ObjectDescription");
1019char * _PREHASH_Description; 1019char* _PREHASH_Description = LLMessageStringTable::getInstance()->getString("Description");
1020char * _PREHASH_ParamType; 1020char* _PREHASH_ParamType = LLMessageStringTable::getInstance()->getString("ParamType");
1021char * _PREHASH_UUIDNameReply; 1021char* _PREHASH_UUIDNameReply = LLMessageStringTable::getInstance()->getString("UUIDNameReply");
1022char * _PREHASH_UUIDGroupNameReply; 1022char* _PREHASH_UUIDGroupNameReply = LLMessageStringTable::getInstance()->getString("UUIDGroupNameReply");
1023char * _PREHASH_SaveAssetIntoInventory; 1023char* _PREHASH_SaveAssetIntoInventory = LLMessageStringTable::getInstance()->getString("SaveAssetIntoInventory");
1024char * _PREHASH_UserInfo; 1024char* _PREHASH_UserInfo = LLMessageStringTable::getInstance()->getString("UserInfo");
1025char * _PREHASH_AnimSequenceID; 1025char* _PREHASH_AnimSequenceID = LLMessageStringTable::getInstance()->getString("AnimSequenceID");
1026char * _PREHASH_NVPairs; 1026char* _PREHASH_NVPairs = LLMessageStringTable::getInstance()->getString("NVPairs");
1027char * _PREHASH_GroupNoticesListRequest; 1027char* _PREHASH_GroupNoticesListRequest = LLMessageStringTable::getInstance()->getString("GroupNoticesListRequest");
1028char * _PREHASH_ParcelAccessListRequest; 1028char* _PREHASH_ParcelAccessListRequest = LLMessageStringTable::getInstance()->getString("ParcelAccessListRequest");
1029char * _PREHASH_MuteListRequest; 1029char* _PREHASH_MuteListRequest = LLMessageStringTable::getInstance()->getString("MuteListRequest");
1030char * _PREHASH_RpcChannelRequest; 1030char* _PREHASH_RpcChannelRequest = LLMessageStringTable::getInstance()->getString("RpcChannelRequest");
1031char * _PREHASH_LandStatRequest; 1031char* _PREHASH_LandStatRequest = LLMessageStringTable::getInstance()->getString("LandStatRequest");
1032char * _PREHASH_PlacesQuery; 1032char* _PREHASH_PlacesQuery = LLMessageStringTable::getInstance()->getString("PlacesQuery");
1033char * _PREHASH_DirPlacesQuery; 1033char* _PREHASH_DirPlacesQuery = LLMessageStringTable::getInstance()->getString("DirPlacesQuery");
1034char * _PREHASH_SortOrder; 1034char* _PREHASH_SortOrder = LLMessageStringTable::getInstance()->getString("SortOrder");
1035char * _PREHASH_Hunter; 1035char* _PREHASH_Hunter = LLMessageStringTable::getInstance()->getString("Hunter");
1036char * _PREHASH_SunAngVelocity; 1036char* _PREHASH_SunAngVelocity = LLMessageStringTable::getInstance()->getString("SunAngVelocity");
1037char * _PREHASH_BinaryBucket; 1037char* _PREHASH_BinaryBucket = LLMessageStringTable::getInstance()->getString("BinaryBucket");
1038char * _PREHASH_ImagePacket; 1038char* _PREHASH_ImagePacket = LLMessageStringTable::getInstance()->getString("ImagePacket");
1039char * _PREHASH_StartGroupProposal; 1039char* _PREHASH_StartGroupProposal = LLMessageStringTable::getInstance()->getString("StartGroupProposal");
1040char * _PREHASH_EnergyLevel; 1040char* _PREHASH_EnergyLevel = LLMessageStringTable::getInstance()->getString("EnergyLevel");
1041char * _PREHASH_PriceForListing; 1041char* _PREHASH_PriceForListing = LLMessageStringTable::getInstance()->getString("PriceForListing");
1042char * _PREHASH_Scale; 1042char* _PREHASH_Scale = LLMessageStringTable::getInstance()->getString("Scale");
1043char * _PREHASH_EstateCovenantReply; 1043char* _PREHASH_EstateCovenantReply = LLMessageStringTable::getInstance()->getString("EstateCovenantReply");
1044char * _PREHASH_ParentEstateID; 1044char* _PREHASH_ParentEstateID = LLMessageStringTable::getInstance()->getString("ParentEstateID");
1045char * _PREHASH_Extra2; 1045char* _PREHASH_Extra2 = LLMessageStringTable::getInstance()->getString("Extra2");
1046char * _PREHASH_Throttle; 1046char* _PREHASH_Throttle = LLMessageStringTable::getInstance()->getString("Throttle");
1047char * _PREHASH_SimIP; 1047char* _PREHASH_SimIP = LLMessageStringTable::getInstance()->getString("SimIP");
1048char * _PREHASH_GodID; 1048char* _PREHASH_GodID = LLMessageStringTable::getInstance()->getString("GodID");
1049char * _PREHASH_TeleportMinPrice; 1049char* _PREHASH_TeleportMinPrice = LLMessageStringTable::getInstance()->getString("TeleportMinPrice");
1050char * _PREHASH_VoteItem; 1050char* _PREHASH_VoteItem = LLMessageStringTable::getInstance()->getString("VoteItem");
1051char * _PREHASH_ObjectRotation; 1051char* _PREHASH_ObjectRotation = LLMessageStringTable::getInstance()->getString("ObjectRotation");
1052char * _PREHASH_SitRotation; 1052char* _PREHASH_SitRotation = LLMessageStringTable::getInstance()->getString("SitRotation");
1053char * _PREHASH_SnapSelection; 1053char* _PREHASH_SnapSelection = LLMessageStringTable::getInstance()->getString("SnapSelection");
1054char * _PREHASH_SoundTrigger; 1054char* _PREHASH_SoundTrigger = LLMessageStringTable::getInstance()->getString("SoundTrigger");
1055char * _PREHASH_TerrainRaiseLimit; 1055char* _PREHASH_TerrainRaiseLimit = LLMessageStringTable::getInstance()->getString("TerrainRaiseLimit");
1056char * _PREHASH_Quorum; 1056char* _PREHASH_Quorum = LLMessageStringTable::getInstance()->getString("Quorum");
1057char * _PREHASH_AgentBlock; 1057char* _PREHASH_AgentBlock = LLMessageStringTable::getInstance()->getString("AgentBlock");
1058char * _PREHASH_CommandBlock; 1058char* _PREHASH_CommandBlock = LLMessageStringTable::getInstance()->getString("CommandBlock");
1059char * _PREHASH_PricePublicObjectDecay; 1059char* _PREHASH_PricePublicObjectDecay = LLMessageStringTable::getInstance()->getString("PricePublicObjectDecay");
1060char * _PREHASH_SpawnPointPos; 1060char* _PREHASH_SpawnPointPos = LLMessageStringTable::getInstance()->getString("SpawnPointPos");
1061char * _PREHASH_VolumeDetail; 1061char* _PREHASH_VolumeDetail = LLMessageStringTable::getInstance()->getString("VolumeDetail");
1062char * _PREHASH_FromAgentName; 1062char* _PREHASH_FromAgentName = LLMessageStringTable::getInstance()->getString("FromAgentName");
1063char * _PREHASH_Range; 1063char* _PREHASH_Range = LLMessageStringTable::getInstance()->getString("Range");
1064char * _PREHASH_DirectoryVisibility; 1064char* _PREHASH_DirectoryVisibility = LLMessageStringTable::getInstance()->getString("DirectoryVisibility");
1065char * _PREHASH_PublicIP; 1065char* _PREHASH_PublicIP = LLMessageStringTable::getInstance()->getString("PublicIP");
1066char * _PREHASH_TeleportFailed; 1066char* _PREHASH_TeleportFailed = LLMessageStringTable::getInstance()->getString("TeleportFailed");
1067char * _PREHASH_PreloadSound; 1067char* _PREHASH_PreloadSound = LLMessageStringTable::getInstance()->getString("PreloadSound");
1068char * _PREHASH_ScreenshotID; 1068char* _PREHASH_ScreenshotID = LLMessageStringTable::getInstance()->getString("ScreenshotID");
1069char * _PREHASH_CovenantTimestamp; 1069char* _PREHASH_CovenantTimestamp = LLMessageStringTable::getInstance()->getString("CovenantTimestamp");
1070char * _PREHASH_OldestUnacked; 1070char* _PREHASH_OldestUnacked = LLMessageStringTable::getInstance()->getString("OldestUnacked");
1071char * _PREHASH_SimulatorIP; 1071char* _PREHASH_SimulatorIP = LLMessageStringTable::getInstance()->getString("SimulatorIP");
1072char * _PREHASH_Value; 1072char* _PREHASH_Value = LLMessageStringTable::getInstance()->getString("Value");
1073char * _PREHASH_JointAxisOrAnchor; 1073char* _PREHASH_JointAxisOrAnchor = LLMessageStringTable::getInstance()->getString("JointAxisOrAnchor");
1074char * _PREHASH_Test0; 1074char* _PREHASH_Test0 = LLMessageStringTable::getInstance()->getString("Test0");
1075char * _PREHASH_Test1; 1075char* _PREHASH_Test1 = LLMessageStringTable::getInstance()->getString("Test1");
1076char * _PREHASH_Test2; 1076char* _PREHASH_Test2 = LLMessageStringTable::getInstance()->getString("Test2");
1077char * _PREHASH_SunPhase; 1077char* _PREHASH_SunPhase = LLMessageStringTable::getInstance()->getString("SunPhase");
1078char * _PREHASH_ParcelDivide; 1078char* _PREHASH_ParcelDivide = LLMessageStringTable::getInstance()->getString("ParcelDivide");
1079char * _PREHASH_PriceObjectClaim; 1079char* _PREHASH_PriceObjectClaim = LLMessageStringTable::getInstance()->getString("PriceObjectClaim");
1080char * _PREHASH_Field; 1080char* _PREHASH_Field = LLMessageStringTable::getInstance()->getString("Field");
1081char * _PREHASH_Ratio; 1081char* _PREHASH_Ratio = LLMessageStringTable::getInstance()->getString("Ratio");
1082char * _PREHASH_JoinGroupReply; 1082char* _PREHASH_JoinGroupReply = LLMessageStringTable::getInstance()->getString("JoinGroupReply");
1083char * _PREHASH_LiveHelpGroupReply; 1083char* _PREHASH_LiveHelpGroupReply = LLMessageStringTable::getInstance()->getString("LiveHelpGroupReply");
1084char * _PREHASH_Score; 1084char* _PREHASH_Score = LLMessageStringTable::getInstance()->getString("Score");
1085char * _PREHASH_Image; 1085char* _PREHASH_Image = LLMessageStringTable::getInstance()->getString("Image");
1086char * _PREHASH_ObjectClickAction; 1086char* _PREHASH_ObjectClickAction = LLMessageStringTable::getInstance()->getString("ObjectClickAction");
1087char * _PREHASH_Parameter; 1087char* _PREHASH_Parameter = LLMessageStringTable::getInstance()->getString("Parameter");
1088char * _PREHASH_Flags; 1088char* _PREHASH_Flags = LLMessageStringTable::getInstance()->getString("Flags");
1089char * _PREHASH_Plane; 1089char* _PREHASH_Plane = LLMessageStringTable::getInstance()->getString("Plane");
1090char * _PREHASH_Width; 1090char* _PREHASH_Width = LLMessageStringTable::getInstance()->getString("Width");
1091char * _PREHASH_Right; 1091char* _PREHASH_Right = LLMessageStringTable::getInstance()->getString("Right");
1092char * _PREHASH_DirFindQuery; 1092char* _PREHASH_DirFindQuery = LLMessageStringTable::getInstance()->getString("DirFindQuery");
1093char * _PREHASH_Textures; 1093char* _PREHASH_Textures = LLMessageStringTable::getInstance()->getString("Textures");
1094char * _PREHASH_EventData; 1094char* _PREHASH_EventData = LLMessageStringTable::getInstance()->getString("EventData");
1095char * _PREHASH_Final; 1095char* _PREHASH_Final = LLMessageStringTable::getInstance()->getString("Final");
1096char * _PREHASH_System; 1096char* _PREHASH_System = LLMessageStringTable::getInstance()->getString("System");
1097char * _PREHASH_TelehubPos; 1097char* _PREHASH_TelehubPos = LLMessageStringTable::getInstance()->getString("TelehubPos");
1098char * _PREHASH_ReportAutosaveCrash; 1098char* _PREHASH_ReportAutosaveCrash = LLMessageStringTable::getInstance()->getString("ReportAutosaveCrash");
1099char * _PREHASH_CreateTrustedCircuit; 1099char* _PREHASH_CreateTrustedCircuit = LLMessageStringTable::getInstance()->getString("CreateTrustedCircuit");
1100char * _PREHASH_DenyTrustedCircuit; 1100char* _PREHASH_DenyTrustedCircuit = LLMessageStringTable::getInstance()->getString("DenyTrustedCircuit");
1101char * _PREHASH_RequestTrustedCircuit; 1101char* _PREHASH_RequestTrustedCircuit = LLMessageStringTable::getInstance()->getString("RequestTrustedCircuit");
1102char * _PREHASH_Codec; 1102char* _PREHASH_Codec = LLMessageStringTable::getInstance()->getString("Codec");
1103char * _PREHASH_Modal; 1103char* _PREHASH_Modal = LLMessageStringTable::getInstance()->getString("Modal");
1104char * _PREHASH_ChildAgentUnknown; 1104char* _PREHASH_ChildAgentUnknown = LLMessageStringTable::getInstance()->getString("ChildAgentUnknown");
1105char * _PREHASH_LandingType; 1105char* _PREHASH_LandingType = LLMessageStringTable::getInstance()->getString("LandingType");
1106char * _PREHASH_ScriptRunningReply; 1106char* _PREHASH_ScriptRunningReply = LLMessageStringTable::getInstance()->getString("ScriptRunningReply");
1107char * _PREHASH_Reply; 1107char* _PREHASH_Reply = LLMessageStringTable::getInstance()->getString("Reply");
1108char * _PREHASH_GroupAccountDetailsReply; 1108char* _PREHASH_GroupAccountDetailsReply = LLMessageStringTable::getInstance()->getString("GroupAccountDetailsReply");
1109char * _PREHASH_TelehubRot; 1109char* _PREHASH_TelehubRot = LLMessageStringTable::getInstance()->getString("TelehubRot");
1110char * _PREHASH_AcceptFriendship; 1110char* _PREHASH_AcceptFriendship = LLMessageStringTable::getInstance()->getString("AcceptFriendship");
1111char * _PREHASH_ItemType; 1111char* _PREHASH_ItemType = LLMessageStringTable::getInstance()->getString("ItemType");
1112char * _PREHASH_DwellInfo; 1112char* _PREHASH_DwellInfo = LLMessageStringTable::getInstance()->getString("DwellInfo");
1113char * _PREHASH_AgentResume; 1113char* _PREHASH_AgentResume = LLMessageStringTable::getInstance()->getString("AgentResume");
1114char * _PREHASH_MailFilter; 1114char* _PREHASH_MailFilter = LLMessageStringTable::getInstance()->getString("MailFilter");
1115char * _PREHASH_Disconnect; 1115char* _PREHASH_Disconnect = LLMessageStringTable::getInstance()->getString("Disconnect");
1116char * _PREHASH_SimPosition; 1116char* _PREHASH_SimPosition = LLMessageStringTable::getInstance()->getString("SimPosition");
1117char * _PREHASH_SimWideTotalPrims; 1117char* _PREHASH_SimWideTotalPrims = LLMessageStringTable::getInstance()->getString("SimWideTotalPrims");
1118char * _PREHASH_Index; 1118char* _PREHASH_Index = LLMessageStringTable::getInstance()->getString("Index");
1119char * _PREHASH_SimFilename; 1119char* _PREHASH_SimFilename = LLMessageStringTable::getInstance()->getString("SimFilename");
1120char * _PREHASH_LastOwnerID; 1120char* _PREHASH_LastOwnerID = LLMessageStringTable::getInstance()->getString("LastOwnerID");
1121char * _PREHASH_GroupNoticeRequest; 1121char* _PREHASH_GroupNoticeRequest = LLMessageStringTable::getInstance()->getString("GroupNoticeRequest");
1122char * _PREHASH_EmailMessageRequest; 1122char* _PREHASH_EmailMessageRequest = LLMessageStringTable::getInstance()->getString("EmailMessageRequest");
1123char * _PREHASH_MapItemRequest; 1123char* _PREHASH_MapItemRequest = LLMessageStringTable::getInstance()->getString("MapItemRequest");
1124char * _PREHASH_AgentCount; 1124char* _PREHASH_AgentCount = LLMessageStringTable::getInstance()->getString("AgentCount");
1125char * _PREHASH_MessageBlock; 1125char* _PREHASH_MessageBlock = LLMessageStringTable::getInstance()->getString("MessageBlock");
1126char * _PREHASH_FuseBlock; 1126char* _PREHASH_FuseBlock = LLMessageStringTable::getInstance()->getString("FuseBlock");
1127char * _PREHASH_AgentGroupData; 1127char* _PREHASH_AgentGroupData = LLMessageStringTable::getInstance()->getString("AgentGroupData");
1128char * _PREHASH_ClassifiedInfoUpdate; 1128char* _PREHASH_ClassifiedInfoUpdate = LLMessageStringTable::getInstance()->getString("ClassifiedInfoUpdate");
1129char * _PREHASH_RegionPos; 1129char* _PREHASH_RegionPos = LLMessageStringTable::getInstance()->getString("RegionPos");
1130char * _PREHASH_ParcelMediaUpdate; 1130char* _PREHASH_ParcelMediaUpdate = LLMessageStringTable::getInstance()->getString("ParcelMediaUpdate");
1131char * _PREHASH_NoticeID; 1131char* _PREHASH_NoticeID = LLMessageStringTable::getInstance()->getString("NoticeID");
1132char * _PREHASH_GridX; 1132char* _PREHASH_GridX = LLMessageStringTable::getInstance()->getString("GridX");
1133char * _PREHASH_GridY; 1133char* _PREHASH_GridY = LLMessageStringTable::getInstance()->getString("GridY");
1134char * _PREHASH_Title; 1134char* _PREHASH_Title = LLMessageStringTable::getInstance()->getString("Title");
1135char * _PREHASH_AuctionID; 1135char* _PREHASH_AuctionID = LLMessageStringTable::getInstance()->getString("AuctionID");
1136char * _PREHASH_VoteType; 1136char* _PREHASH_VoteType = LLMessageStringTable::getInstance()->getString("VoteType");
1137char * _PREHASH_CategoryID; 1137char* _PREHASH_CategoryID = LLMessageStringTable::getInstance()->getString("CategoryID");
1138char * _PREHASH_Token; 1138char* _PREHASH_Token = LLMessageStringTable::getInstance()->getString("Token");
1139char * _PREHASH_AggregatePerms; 1139char* _PREHASH_AggregatePerms = LLMessageStringTable::getInstance()->getString("AggregatePerms");
1140char * _PREHASH_ObjectSelect; 1140char* _PREHASH_ObjectSelect = LLMessageStringTable::getInstance()->getString("ObjectSelect");
1141char * _PREHASH_ForceObjectSelect; 1141char* _PREHASH_ForceObjectSelect = LLMessageStringTable::getInstance()->getString("ForceObjectSelect");
1142char * _PREHASH_Price; 1142char* _PREHASH_Price = LLMessageStringTable::getInstance()->getString("Price");
1143char * _PREHASH_SunDirection; 1143char* _PREHASH_SunDirection = LLMessageStringTable::getInstance()->getString("SunDirection");
1144char * _PREHASH_FromName; 1144char* _PREHASH_FromName = LLMessageStringTable::getInstance()->getString("FromName");
1145char * _PREHASH_ChangeInventoryItemFlags; 1145char* _PREHASH_ChangeInventoryItemFlags = LLMessageStringTable::getInstance()->getString("ChangeInventoryItemFlags");
1146char * _PREHASH_Force; 1146char* _PREHASH_Force = LLMessageStringTable::getInstance()->getString("Force");
1147char * _PREHASH_TransactionBlock; 1147char* _PREHASH_TransactionBlock = LLMessageStringTable::getInstance()->getString("TransactionBlock");
1148char * _PREHASH_PowersMask; 1148char* _PREHASH_PowersMask = LLMessageStringTable::getInstance()->getString("PowersMask");
1149char * _PREHASH_Stamp; 1149char* _PREHASH_Stamp = LLMessageStringTable::getInstance()->getString("Stamp");
1150char * _PREHASH_TotalCredits; 1150char* _PREHASH_TotalCredits = LLMessageStringTable::getInstance()->getString("TotalCredits");
1151char * _PREHASH_State; 1151char* _PREHASH_State = LLMessageStringTable::getInstance()->getString("State");
1152char * _PREHASH_TextureIndex; 1152char* _PREHASH_TextureIndex = LLMessageStringTable::getInstance()->getString("TextureIndex");
1153char * _PREHASH_InviteeID; 1153char* _PREHASH_InviteeID = LLMessageStringTable::getInstance()->getString("InviteeID");
1154char * _PREHASH_ParcelReclaim; 1154char* _PREHASH_ParcelReclaim = LLMessageStringTable::getInstance()->getString("ParcelReclaim");
1155char * _PREHASH_Money; 1155char* _PREHASH_Money = LLMessageStringTable::getInstance()->getString("Money");
1156char * _PREHASH_PathTwist; 1156char* _PREHASH_PathTwist = LLMessageStringTable::getInstance()->getString("PathTwist");
1157char * _PREHASH_AuthBuyerID; 1157char* _PREHASH_AuthBuyerID = LLMessageStringTable::getInstance()->getString("AuthBuyerID");
1158char * _PREHASH_Color; 1158char* _PREHASH_Color = LLMessageStringTable::getInstance()->getString("Color");
1159char * _PREHASH_SourceType; 1159char* _PREHASH_SourceType = LLMessageStringTable::getInstance()->getString("SourceType");
1160char * _PREHASH_World; 1160char* _PREHASH_World = LLMessageStringTable::getInstance()->getString("World");
1161char * _PREHASH_QueryData; 1161char* _PREHASH_QueryData = LLMessageStringTable::getInstance()->getString("QueryData");
1162char * _PREHASH_Users; 1162char* _PREHASH_Users = LLMessageStringTable::getInstance()->getString("Users");
1163char * _PREHASH_SysOS; 1163char* _PREHASH_SysOS = LLMessageStringTable::getInstance()->getString("SysOS");
1164char * _PREHASH_Notes; 1164char* _PREHASH_Notes = LLMessageStringTable::getInstance()->getString("Notes");
1165char * _PREHASH_AvatarID; 1165char* _PREHASH_AvatarID = LLMessageStringTable::getInstance()->getString("AvatarID");
1166char * _PREHASH_FounderID; 1166char* _PREHASH_FounderID = LLMessageStringTable::getInstance()->getString("FounderID");
1167char * _PREHASH_EndPointID; 1167char* _PREHASH_EndPointID = LLMessageStringTable::getInstance()->getString("EndPointID");
1168char * _PREHASH_LocationLookAt; 1168char* _PREHASH_LocationLookAt = LLMessageStringTable::getInstance()->getString("LocationLookAt");
1169char * _PREHASH_Sound; 1169char* _PREHASH_Sound = LLMessageStringTable::getInstance()->getString("Sound");
1170char * _PREHASH_Cover; 1170char* _PREHASH_Cover = LLMessageStringTable::getInstance()->getString("Cover");
1171char * _PREHASH_TotalObjectCount; 1171char* _PREHASH_TotalObjectCount = LLMessageStringTable::getInstance()->getString("TotalObjectCount");
1172char * _PREHASH_TextureEntry; 1172char* _PREHASH_TextureEntry = LLMessageStringTable::getInstance()->getString("TextureEntry");
1173char * _PREHASH_SquareMetersCommitted; 1173char* _PREHASH_SquareMetersCommitted = LLMessageStringTable::getInstance()->getString("SquareMetersCommitted");
1174char * _PREHASH_ChannelID; 1174char* _PREHASH_ChannelID = LLMessageStringTable::getInstance()->getString("ChannelID");
1175char * _PREHASH_Dwell; 1175char* _PREHASH_Dwell = LLMessageStringTable::getInstance()->getString("Dwell");
1176char * _PREHASH_North; 1176char* _PREHASH_North = LLMessageStringTable::getInstance()->getString("North");
1177char * _PREHASH_AgentUpdate; 1177char* _PREHASH_AgentUpdate = LLMessageStringTable::getInstance()->getString("AgentUpdate");
1178char * _PREHASH_PickGodDelete; 1178char* _PREHASH_PickGodDelete = LLMessageStringTable::getInstance()->getString("PickGodDelete");
1179char * _PREHASH_HostName; 1179char* _PREHASH_HostName = LLMessageStringTable::getInstance()->getString("HostName");
1180char * _PREHASH_PriceParcelClaim; 1180char* _PREHASH_PriceParcelClaim = LLMessageStringTable::getInstance()->getString("PriceParcelClaim");
1181char * _PREHASH_ParcelClaim; 1181char* _PREHASH_ParcelClaim = LLMessageStringTable::getInstance()->getString("ParcelClaim");
1182char * _PREHASH_AgentPowers; 1182char* _PREHASH_AgentPowers = LLMessageStringTable::getInstance()->getString("AgentPowers");
1183char * _PREHASH_ProfileHollow; 1183char* _PREHASH_ProfileHollow = LLMessageStringTable::getInstance()->getString("ProfileHollow");
1184char * _PREHASH_GroupRoleChanges; 1184char* _PREHASH_GroupRoleChanges = LLMessageStringTable::getInstance()->getString("GroupRoleChanges");
1185char * _PREHASH_Count; 1185char* _PREHASH_Count = LLMessageStringTable::getInstance()->getString("Count");
1186char * _PREHASH_South; 1186char* _PREHASH_South = LLMessageStringTable::getInstance()->getString("South");
1187char * _PREHASH_ObjectUpdateCompressed; 1187char* _PREHASH_ObjectUpdateCompressed = LLMessageStringTable::getInstance()->getString("ObjectUpdateCompressed");
1188char * _PREHASH_MuteFlags; 1188char* _PREHASH_MuteFlags = LLMessageStringTable::getInstance()->getString("MuteFlags");
1189char * _PREHASH_Group; 1189char* _PREHASH_Group = LLMessageStringTable::getInstance()->getString("Group");
1190char * _PREHASH_AgentPause; 1190char* _PREHASH_AgentPause = LLMessageStringTable::getInstance()->getString("AgentPause");
1191char * _PREHASH_LanguagesText; 1191char* _PREHASH_LanguagesText = LLMessageStringTable::getInstance()->getString("LanguagesText");
1192char * _PREHASH_Error; 1192char* _PREHASH_Error = LLMessageStringTable::getInstance()->getString("Error");
1193char * _PREHASH_InternalScriptMail; 1193char* _PREHASH_InternalScriptMail = LLMessageStringTable::getInstance()->getString("InternalScriptMail");
1194char * _PREHASH_FindAgent; 1194char* _PREHASH_FindAgent = LLMessageStringTable::getInstance()->getString("FindAgent");
1195char * _PREHASH_AgentData; 1195char* _PREHASH_AgentData = LLMessageStringTable::getInstance()->getString("AgentData");
1196char * _PREHASH_FolderData; 1196char* _PREHASH_FolderData = LLMessageStringTable::getInstance()->getString("FolderData");
1197char * _PREHASH_AssetBlock; 1197char* _PREHASH_AssetBlock = LLMessageStringTable::getInstance()->getString("AssetBlock");
1198char * _PREHASH_AcceptNotices; 1198char* _PREHASH_AcceptNotices = LLMessageStringTable::getInstance()->getString("AcceptNotices");
1199char * _PREHASH_SetGroupAcceptNotices; 1199char* _PREHASH_SetGroupAcceptNotices = LLMessageStringTable::getInstance()->getString("SetGroupAcceptNotices");
1200char * _PREHASH_CloseCircuit; 1200char* _PREHASH_CloseCircuit = LLMessageStringTable::getInstance()->getString("CloseCircuit");
1201char * _PREHASH_TeleportFinish; 1201char* _PREHASH_TeleportFinish = LLMessageStringTable::getInstance()->getString("TeleportFinish");
1202char * _PREHASH_PathRevolutions; 1202char* _PREHASH_PathRevolutions = LLMessageStringTable::getInstance()->getString("PathRevolutions");
1203char * _PREHASH_ClassifiedInfoReply; 1203char* _PREHASH_ClassifiedInfoReply = LLMessageStringTable::getInstance()->getString("ClassifiedInfoReply");
1204char * _PREHASH_ParcelInfoReply; 1204char* _PREHASH_ParcelInfoReply = LLMessageStringTable::getInstance()->getString("ParcelInfoReply");
1205char * _PREHASH_AutosaveData; 1205char* _PREHASH_AutosaveData = LLMessageStringTable::getInstance()->getString("AutosaveData");
1206char * _PREHASH_SetStartLocation; 1206char* _PREHASH_SetStartLocation = LLMessageStringTable::getInstance()->getString("SetStartLocation");
1207char * _PREHASH_PassHours; 1207char* _PREHASH_PassHours = LLMessageStringTable::getInstance()->getString("PassHours");
1208char * _PREHASH_AttachmentPt; 1208char* _PREHASH_AttachmentPt = LLMessageStringTable::getInstance()->getString("AttachmentPt");
1209char * _PREHASH_ParcelFlags; 1209char* _PREHASH_ParcelFlags = LLMessageStringTable::getInstance()->getString("ParcelFlags");
1210char * _PREHASH_NumVotes; 1210char* _PREHASH_NumVotes = LLMessageStringTable::getInstance()->getString("NumVotes");
1211char * _PREHASH_AvatarPickerRequest; 1211char* _PREHASH_AvatarPickerRequest = LLMessageStringTable::getInstance()->getString("AvatarPickerRequest");
1212char * _PREHASH_TeleportLocationRequest; 1212char* _PREHASH_TeleportLocationRequest = LLMessageStringTable::getInstance()->getString("TeleportLocationRequest");
1213char * _PREHASH_DataHomeLocationRequest; 1213char* _PREHASH_DataHomeLocationRequest = LLMessageStringTable::getInstance()->getString("DataHomeLocationRequest");
1214char * _PREHASH_EventNotificationAddRequest; 1214char* _PREHASH_EventNotificationAddRequest = LLMessageStringTable::getInstance()->getString("EventNotificationAddRequest");
1215char * _PREHASH_ParcelDwellRequest; 1215char* _PREHASH_ParcelDwellRequest = LLMessageStringTable::getInstance()->getString("ParcelDwellRequest");
1216char * _PREHASH_EventLocationRequest; 1216char* _PREHASH_EventLocationRequest = LLMessageStringTable::getInstance()->getString("EventLocationRequest");
1217char * _PREHASH_SetStartLocationRequest; 1217char* _PREHASH_SetStartLocationRequest = LLMessageStringTable::getInstance()->getString("SetStartLocationRequest");
1218char * _PREHASH_QueryStart; 1218char* _PREHASH_QueryStart = LLMessageStringTable::getInstance()->getString("QueryStart");
1219char * _PREHASH_EjectData; 1219char* _PREHASH_EjectData = LLMessageStringTable::getInstance()->getString("EjectData");
1220char * _PREHASH_AvatarTextureUpdate; 1220char* _PREHASH_AvatarTextureUpdate = LLMessageStringTable::getInstance()->getString("AvatarTextureUpdate");
1221char * _PREHASH_RPCServerPort; 1221char* _PREHASH_RPCServerPort = LLMessageStringTable::getInstance()->getString("RPCServerPort");
1222char * _PREHASH_Bytes; 1222char* _PREHASH_Bytes = LLMessageStringTable::getInstance()->getString("Bytes");
1223char * _PREHASH_Extra; 1223char* _PREHASH_Extra = LLMessageStringTable::getInstance()->getString("Extra");
1224char * _PREHASH_ForceScriptControlRelease; 1224char* _PREHASH_ForceScriptControlRelease = LLMessageStringTable::getInstance()->getString("ForceScriptControlRelease");
1225char * _PREHASH_ParcelRelease; 1225char* _PREHASH_ParcelRelease = LLMessageStringTable::getInstance()->getString("ParcelRelease");
1226char * _PREHASH_VFileType; 1226char* _PREHASH_VFileType = LLMessageStringTable::getInstance()->getString("VFileType");
1227char * _PREHASH_EjectGroupMemberReply; 1227char* _PREHASH_EjectGroupMemberReply = LLMessageStringTable::getInstance()->getString("EjectGroupMemberReply");
1228char * _PREHASH_ImageData; 1228char* _PREHASH_ImageData = LLMessageStringTable::getInstance()->getString("ImageData");
1229char * _PREHASH_SimulatorViewerTimeMessage; 1229char* _PREHASH_SimulatorViewerTimeMessage = LLMessageStringTable::getInstance()->getString("SimulatorViewerTimeMessage");
1230char * _PREHASH_Rotation; 1230char* _PREHASH_Rotation = LLMessageStringTable::getInstance()->getString("Rotation");
1231char * _PREHASH_Selection; 1231char* _PREHASH_Selection = LLMessageStringTable::getInstance()->getString("Selection");
1232char * _PREHASH_TransactionData; 1232char* _PREHASH_TransactionData = LLMessageStringTable::getInstance()->getString("TransactionData");
1233char * _PREHASH_OperationData; 1233char* _PREHASH_OperationData = LLMessageStringTable::getInstance()->getString("OperationData");
1234char * _PREHASH_ExpirationDate; 1234char* _PREHASH_ExpirationDate = LLMessageStringTable::getInstance()->getString("ExpirationDate");
1235char * _PREHASH_ParcelDeedToGroup; 1235char* _PREHASH_ParcelDeedToGroup = LLMessageStringTable::getInstance()->getString("ParcelDeedToGroup");
1236char * _PREHASH_AvatarPicksReply; 1236char* _PREHASH_AvatarPicksReply = LLMessageStringTable::getInstance()->getString("AvatarPicksReply");
1237char * _PREHASH_GroupTitlesReply; 1237char* _PREHASH_GroupTitlesReply = LLMessageStringTable::getInstance()->getString("GroupTitlesReply");
1238char * _PREHASH_AgentInfo; 1238char* _PREHASH_AgentInfo = LLMessageStringTable::getInstance()->getString("AgentInfo");
1239char * _PREHASH_MoneyTransferBackend; 1239char* _PREHASH_MoneyTransferBackend = LLMessageStringTable::getInstance()->getString("MoneyTransferBackend");
1240char * _PREHASH_NextOwnerMask; 1240char* _PREHASH_NextOwnerMask = LLMessageStringTable::getInstance()->getString("NextOwnerMask");
1241char * _PREHASH_MuteData; 1241char* _PREHASH_MuteData = LLMessageStringTable::getInstance()->getString("MuteData");
1242char * _PREHASH_PassPrice; 1242char* _PREHASH_PassPrice = LLMessageStringTable::getInstance()->getString("PassPrice");
1243char * _PREHASH_SourceID; 1243char* _PREHASH_SourceID = LLMessageStringTable::getInstance()->getString("SourceID");
1244char * _PREHASH_ChangeUserRights; 1244char* _PREHASH_ChangeUserRights = LLMessageStringTable::getInstance()->getString("ChangeUserRights");
1245char * _PREHASH_TeleportFlags; 1245char* _PREHASH_TeleportFlags = LLMessageStringTable::getInstance()->getString("TeleportFlags");
1246char * _PREHASH_SlaveParcelData; 1246char* _PREHASH_SlaveParcelData = LLMessageStringTable::getInstance()->getString("SlaveParcelData");
1247char * _PREHASH_AssetData; 1247char* _PREHASH_AssetData = LLMessageStringTable::getInstance()->getString("AssetData");
1248char * _PREHASH_MultipleObjectUpdate; 1248char* _PREHASH_MultipleObjectUpdate = LLMessageStringTable::getInstance()->getString("MultipleObjectUpdate");
1249char * _PREHASH_ObjectUpdate; 1249char* _PREHASH_ObjectUpdate = LLMessageStringTable::getInstance()->getString("ObjectUpdate");
1250char * _PREHASH_ImprovedTerseObjectUpdate; 1250char* _PREHASH_ImprovedTerseObjectUpdate = LLMessageStringTable::getInstance()->getString("ImprovedTerseObjectUpdate");
1251char * _PREHASH_ConfirmXferPacket; 1251char* _PREHASH_ConfirmXferPacket = LLMessageStringTable::getInstance()->getString("ConfirmXferPacket");
1252char * _PREHASH_StartPingCheck; 1252char* _PREHASH_StartPingCheck = LLMessageStringTable::getInstance()->getString("StartPingCheck");
1253char * _PREHASH_SimWideDeletes; 1253char* _PREHASH_SimWideDeletes = LLMessageStringTable::getInstance()->getString("SimWideDeletes");
1254char * _PREHASH_LandStatReply; 1254char* _PREHASH_LandStatReply = LLMessageStringTable::getInstance()->getString("LandStatReply");
1255char * _PREHASH_IsPhantom; 1255char* _PREHASH_IsPhantom = LLMessageStringTable::getInstance()->getString("IsPhantom");
1256char * _PREHASH_AgentList; 1256char* _PREHASH_AgentList = LLMessageStringTable::getInstance()->getString("AgentList");
1257char * _PREHASH_SimApproved; 1257char* _PREHASH_SimApproved = LLMessageStringTable::getInstance()->getString("SimApproved");
1258char * _PREHASH_RezObject; 1258char* _PREHASH_RezObject = LLMessageStringTable::getInstance()->getString("RezObject");
1259char * _PREHASH_TaskLocalID; 1259char* _PREHASH_TaskLocalID = LLMessageStringTable::getInstance()->getString("TaskLocalID");
1260char * _PREHASH_ClaimDate; 1260char* _PREHASH_ClaimDate = LLMessageStringTable::getInstance()->getString("ClaimDate");
1261char * _PREHASH_MergeParcel; 1261char* _PREHASH_MergeParcel = LLMessageStringTable::getInstance()->getString("MergeParcel");
1262char * _PREHASH_Priority; 1262char* _PREHASH_Priority = LLMessageStringTable::getInstance()->getString("Priority");
1263char * _PREHASH_QueryText; 1263char* _PREHASH_QueryText = LLMessageStringTable::getInstance()->getString("QueryText");
1264char * _PREHASH_GroupNoticeAdd; 1264char* _PREHASH_GroupNoticeAdd = LLMessageStringTable::getInstance()->getString("GroupNoticeAdd");
1265char * _PREHASH_ReturnType; 1265char* _PREHASH_ReturnType = LLMessageStringTable::getInstance()->getString("ReturnType");
1266char * _PREHASH_FetchFolders; 1266char* _PREHASH_FetchFolders = LLMessageStringTable::getInstance()->getString("FetchFolders");
1267char * _PREHASH_SimulatorPublicHostBlock; 1267char* _PREHASH_SimulatorPublicHostBlock = LLMessageStringTable::getInstance()->getString("SimulatorPublicHostBlock");
1268char * _PREHASH_HeaderData; 1268char* _PREHASH_HeaderData = LLMessageStringTable::getInstance()->getString("HeaderData");
1269char * _PREHASH_RequestMultipleObjects; 1269char* _PREHASH_RequestMultipleObjects = LLMessageStringTable::getInstance()->getString("RequestMultipleObjects");
1270char * _PREHASH_RetrieveInstantMessages; 1270char* _PREHASH_RetrieveInstantMessages = LLMessageStringTable::getInstance()->getString("RetrieveInstantMessages");
1271char * _PREHASH_OpenCircuit; 1271char* _PREHASH_OpenCircuit = LLMessageStringTable::getInstance()->getString("OpenCircuit");
1272char * _PREHASH_CrossedRegion; 1272char* _PREHASH_CrossedRegion = LLMessageStringTable::getInstance()->getString("CrossedRegion");
1273char * _PREHASH_DirGroupsReply; 1273char* _PREHASH_DirGroupsReply = LLMessageStringTable::getInstance()->getString("DirGroupsReply");
1274char * _PREHASH_AvatarGroupsReply; 1274char* _PREHASH_AvatarGroupsReply = LLMessageStringTable::getInstance()->getString("AvatarGroupsReply");
1275char * _PREHASH_EmailMessageReply; 1275char* _PREHASH_EmailMessageReply = LLMessageStringTable::getInstance()->getString("EmailMessageReply");
1276char * _PREHASH_GroupVoteHistoryItemReply; 1276char* _PREHASH_GroupVoteHistoryItemReply = LLMessageStringTable::getInstance()->getString("GroupVoteHistoryItemReply");
1277char * _PREHASH_ViewerPosition; 1277char* _PREHASH_ViewerPosition = LLMessageStringTable::getInstance()->getString("ViewerPosition");
1278char * _PREHASH_Position; 1278char* _PREHASH_Position = LLMessageStringTable::getInstance()->getString("Position");
1279char * _PREHASH_ParentEstate; 1279char* _PREHASH_ParentEstate = LLMessageStringTable::getInstance()->getString("ParentEstate");
1280char * _PREHASH_EstateName; 1280char* _PREHASH_EstateName = LLMessageStringTable::getInstance()->getString("EstateName");
1281char * _PREHASH_MuteName; 1281char* _PREHASH_MuteName = LLMessageStringTable::getInstance()->getString("MuteName");
1282char * _PREHASH_ParcelRename; 1282char* _PREHASH_ParcelRename = LLMessageStringTable::getInstance()->getString("ParcelRename");
1283char * _PREHASH_ViewerFilename; 1283char* _PREHASH_ViewerFilename = LLMessageStringTable::getInstance()->getString("ViewerFilename");
1284char * _PREHASH_UserReportInternal; 1284char* _PREHASH_UserReportInternal = LLMessageStringTable::getInstance()->getString("UserReportInternal");
1285char * _PREHASH_AvatarPropertiesRequest; 1285char* _PREHASH_AvatarPropertiesRequest = LLMessageStringTable::getInstance()->getString("AvatarPropertiesRequest");
1286char * _PREHASH_ParcelPropertiesRequest; 1286char* _PREHASH_ParcelPropertiesRequest = LLMessageStringTable::getInstance()->getString("ParcelPropertiesRequest");
1287char * _PREHASH_GroupProfileRequest; 1287char* _PREHASH_GroupProfileRequest = LLMessageStringTable::getInstance()->getString("GroupProfileRequest");
1288char * _PREHASH_AgentDataUpdateRequest; 1288char* _PREHASH_AgentDataUpdateRequest = LLMessageStringTable::getInstance()->getString("AgentDataUpdateRequest");
1289char * _PREHASH_PriceObjectScaleFactor; 1289char* _PREHASH_PriceObjectScaleFactor = LLMessageStringTable::getInstance()->getString("PriceObjectScaleFactor");
1290char * _PREHASH_OpenEnrollment; 1290char* _PREHASH_OpenEnrollment = LLMessageStringTable::getInstance()->getString("OpenEnrollment");
1291char * _PREHASH_GroupData; 1291char* _PREHASH_GroupData = LLMessageStringTable::getInstance()->getString("GroupData");
1292char * _PREHASH_RequestGodlikePowers; 1292char* _PREHASH_RequestGodlikePowers = LLMessageStringTable::getInstance()->getString("RequestGodlikePowers");
1293char * _PREHASH_GrantGodlikePowers; 1293char* _PREHASH_GrantGodlikePowers = LLMessageStringTable::getInstance()->getString("GrantGodlikePowers");
1294char * _PREHASH_TransactionID; 1294char* _PREHASH_TransactionID = LLMessageStringTable::getInstance()->getString("TransactionID");
1295char * _PREHASH_DestinationID; 1295char* _PREHASH_DestinationID = LLMessageStringTable::getInstance()->getString("DestinationID");
1296char * _PREHASH_Controls; 1296char* _PREHASH_Controls = LLMessageStringTable::getInstance()->getString("Controls");
1297char * _PREHASH_FirstDetachAll; 1297char* _PREHASH_FirstDetachAll = LLMessageStringTable::getInstance()->getString("FirstDetachAll");
1298char * _PREHASH_EstateID; 1298char* _PREHASH_EstateID = LLMessageStringTable::getInstance()->getString("EstateID");
1299char * _PREHASH_ImprovedInstantMessage; 1299char* _PREHASH_ImprovedInstantMessage = LLMessageStringTable::getInstance()->getString("ImprovedInstantMessage");
1300char * _PREHASH_CheckParcelSales; 1300char* _PREHASH_CheckParcelSales = LLMessageStringTable::getInstance()->getString("CheckParcelSales");
1301char * _PREHASH_ParcelSales; 1301char* _PREHASH_ParcelSales = LLMessageStringTable::getInstance()->getString("ParcelSales");
1302char * _PREHASH_CurrentInterval; 1302char* _PREHASH_CurrentInterval = LLMessageStringTable::getInstance()->getString("CurrentInterval");
1303char * _PREHASH_PriceRentLight; 1303char* _PREHASH_PriceRentLight = LLMessageStringTable::getInstance()->getString("PriceRentLight");
1304char * _PREHASH_MediaAutoScale; 1304char* _PREHASH_MediaAutoScale = LLMessageStringTable::getInstance()->getString("MediaAutoScale");
1305char * _PREHASH_NeighborBlock; 1305char* _PREHASH_NeighborBlock = LLMessageStringTable::getInstance()->getString("NeighborBlock");
1306char * _PREHASH_LayerData; 1306char* _PREHASH_LayerData = LLMessageStringTable::getInstance()->getString("LayerData");
1307char * _PREHASH_NVPairData; 1307char* _PREHASH_NVPairData = LLMessageStringTable::getInstance()->getString("NVPairData");
1308char * _PREHASH_TeleportLocal; 1308char* _PREHASH_TeleportLocal = LLMessageStringTable::getInstance()->getString("TeleportLocal");
1309char * _PREHASH_EjecteeID; 1309char* _PREHASH_EjecteeID = LLMessageStringTable::getInstance()->getString("EjecteeID");
1310char * _PREHASH_VoteInitiator; 1310char* _PREHASH_VoteInitiator = LLMessageStringTable::getInstance()->getString("VoteInitiator");
1311char * _PREHASH_TypeData; 1311char* _PREHASH_TypeData = LLMessageStringTable::getInstance()->getString("TypeData");
1312char * _PREHASH_OwnerIDs; 1312char* _PREHASH_OwnerIDs = LLMessageStringTable::getInstance()->getString("OwnerIDs");
1313char * _PREHASH_SystemKickUser; 1313char* _PREHASH_SystemKickUser = LLMessageStringTable::getInstance()->getString("SystemKickUser");
1314char * _PREHASH_TransactionTime; 1314char* _PREHASH_TransactionTime = LLMessageStringTable::getInstance()->getString("TransactionTime");
1315char * _PREHASH_TimeToLive; 1315char* _PREHASH_TimeToLive = LLMessageStringTable::getInstance()->getString("TimeToLive");
1316char * _PREHASH_OldAgentID; 1316char* _PREHASH_OldAgentID = LLMessageStringTable::getInstance()->getString("OldAgentID");
1317char * _PREHASH_MusicURL; 1317char* _PREHASH_MusicURL = LLMessageStringTable::getInstance()->getString("MusicURL");
1318char * _PREHASH_ParcelPrimBonus; 1318char* _PREHASH_ParcelPrimBonus = LLMessageStringTable::getInstance()->getString("ParcelPrimBonus");
1319char * _PREHASH_EjectUser; 1319char* _PREHASH_EjectUser = LLMessageStringTable::getInstance()->getString("EjectUser");
1320char * _PREHASH_CoarseLocationUpdate; 1320char* _PREHASH_CoarseLocationUpdate = LLMessageStringTable::getInstance()->getString("CoarseLocationUpdate");
1321char * _PREHASH_ChildAgentPositionUpdate; 1321char* _PREHASH_ChildAgentPositionUpdate = LLMessageStringTable::getInstance()->getString("ChildAgentPositionUpdate");
1322char * _PREHASH_StoreLocal; 1322char* _PREHASH_StoreLocal = LLMessageStringTable::getInstance()->getString("StoreLocal");
1323char * _PREHASH_GroupName; 1323char* _PREHASH_GroupName = LLMessageStringTable::getInstance()->getString("GroupName");
1324char * _PREHASH_PriceParcelRent; 1324char* _PREHASH_PriceParcelRent = LLMessageStringTable::getInstance()->getString("PriceParcelRent");
1325char * _PREHASH_SimStatus; 1325char* _PREHASH_SimStatus = LLMessageStringTable::getInstance()->getString("SimStatus");
1326char * _PREHASH_TransactionSuccess; 1326char* _PREHASH_TransactionSuccess = LLMessageStringTable::getInstance()->getString("TransactionSuccess");
1327char * _PREHASH_LureType; 1327char* _PREHASH_LureType = LLMessageStringTable::getInstance()->getString("LureType");
1328char * _PREHASH_GroupMask; 1328char* _PREHASH_GroupMask = LLMessageStringTable::getInstance()->getString("GroupMask");
1329char * _PREHASH_SitObject; 1329char* _PREHASH_SitObject = LLMessageStringTable::getInstance()->getString("SitObject");
1330char * _PREHASH_Override; 1330char* _PREHASH_Override = LLMessageStringTable::getInstance()->getString("Override");
1331char * _PREHASH_LocomotionState; 1331char* _PREHASH_LocomotionState = LLMessageStringTable::getInstance()->getString("LocomotionState");
1332char * _PREHASH_PriceUpload; 1332char* _PREHASH_PriceUpload = LLMessageStringTable::getInstance()->getString("PriceUpload");
1333char * _PREHASH_RemoveParcel; 1333char* _PREHASH_RemoveParcel = LLMessageStringTable::getInstance()->getString("RemoveParcel");
1334char * _PREHASH_ConfirmAuctionStart; 1334char* _PREHASH_ConfirmAuctionStart = LLMessageStringTable::getInstance()->getString("ConfirmAuctionStart");
1335char * _PREHASH_RpcScriptRequestInbound; 1335char* _PREHASH_RpcScriptRequestInbound = LLMessageStringTable::getInstance()->getString("RpcScriptRequestInbound");
1336char * _PREHASH_ActiveGroupID; 1336char* _PREHASH_ActiveGroupID = LLMessageStringTable::getInstance()->getString("ActiveGroupID");
1337char * _PREHASH_ParcelReturnObjects; 1337char* _PREHASH_ParcelReturnObjects = LLMessageStringTable::getInstance()->getString("ParcelReturnObjects");
1338char * _PREHASH_TotalObjects; 1338char* _PREHASH_TotalObjects = LLMessageStringTable::getInstance()->getString("TotalObjects");
1339char * _PREHASH_ObjectExtraParams; 1339char* _PREHASH_ObjectExtraParams = LLMessageStringTable::getInstance()->getString("ObjectExtraParams");
1340char * _PREHASH_Questions; 1340char* _PREHASH_Questions = LLMessageStringTable::getInstance()->getString("Questions");
1341char * _PREHASH_TransferAbort; 1341char* _PREHASH_TransferAbort = LLMessageStringTable::getInstance()->getString("TransferAbort");
1342char * _PREHASH_TransferInventory; 1342char* _PREHASH_TransferInventory = LLMessageStringTable::getInstance()->getString("TransferInventory");
1343char * _PREHASH_RayTargetID; 1343char* _PREHASH_RayTargetID = LLMessageStringTable::getInstance()->getString("RayTargetID");
1344char * _PREHASH_ClaimPrice; 1344char* _PREHASH_ClaimPrice = LLMessageStringTable::getInstance()->getString("ClaimPrice");
1345char * _PREHASH_ObjectProperties; 1345char* _PREHASH_ObjectProperties = LLMessageStringTable::getInstance()->getString("ObjectProperties");
1346char * _PREHASH_ParcelProperties; 1346char* _PREHASH_ParcelProperties = LLMessageStringTable::getInstance()->getString("ParcelProperties");
1347char * _PREHASH_EstateOwnerID; 1347char* _PREHASH_EstateOwnerID = LLMessageStringTable::getInstance()->getString("EstateOwnerID");
1348char * _PREHASH_LogoutRequest; 1348char* _PREHASH_LogoutRequest = LLMessageStringTable::getInstance()->getString("LogoutRequest");
1349char * _PREHASH_AssetUploadRequest; 1349char* _PREHASH_AssetUploadRequest = LLMessageStringTable::getInstance()->getString("AssetUploadRequest");
1350char * _PREHASH_TransactionType; 1350char* _PREHASH_TransactionType = LLMessageStringTable::getInstance()->getString("TransactionType");
1351char * _PREHASH_AvatarPropertiesUpdate; 1351char* _PREHASH_AvatarPropertiesUpdate = LLMessageStringTable::getInstance()->getString("AvatarPropertiesUpdate");
1352char * _PREHASH_ParcelPropertiesUpdate; 1352char* _PREHASH_ParcelPropertiesUpdate = LLMessageStringTable::getInstance()->getString("ParcelPropertiesUpdate");
1353char * _PREHASH_FetchItems; 1353char* _PREHASH_FetchItems = LLMessageStringTable::getInstance()->getString("FetchItems");
1354char * _PREHASH_AbortXfer; 1354char* _PREHASH_AbortXfer = LLMessageStringTable::getInstance()->getString("AbortXfer");
1355char * _PREHASH_DeRezAck; 1355char* _PREHASH_DeRezAck = LLMessageStringTable::getInstance()->getString("DeRezAck");
1356char * _PREHASH_TakeControls; 1356char* _PREHASH_TakeControls = LLMessageStringTable::getInstance()->getString("TakeControls");
1357char * _PREHASH_DirLandReply; 1357char* _PREHASH_DirLandReply = LLMessageStringTable::getInstance()->getString("DirLandReply");
1358char * _PREHASH_MuteType; 1358char* _PREHASH_MuteType = LLMessageStringTable::getInstance()->getString("MuteType");
1359char * _PREHASH_IMViaEMail; 1359char* _PREHASH_IMViaEMail = LLMessageStringTable::getInstance()->getString("IMViaEMail");
1360char * _PREHASH_RentPrice; 1360char* _PREHASH_RentPrice = LLMessageStringTable::getInstance()->getString("RentPrice");
1361char * _PREHASH_GenericMessage; 1361char* _PREHASH_GenericMessage = LLMessageStringTable::getInstance()->getString("GenericMessage");
1362char * _PREHASH_ChildAgentAlive; 1362char* _PREHASH_ChildAgentAlive = LLMessageStringTable::getInstance()->getString("ChildAgentAlive");
1363char * _PREHASH_AssetType; 1363char* _PREHASH_AssetType = LLMessageStringTable::getInstance()->getString("AssetType");
1364char * _PREHASH_SpawnPointBlock; 1364char* _PREHASH_SpawnPointBlock = LLMessageStringTable::getInstance()->getString("SpawnPointBlock");
1365char * _PREHASH_AttachmentBlock; 1365char* _PREHASH_AttachmentBlock = LLMessageStringTable::getInstance()->getString("AttachmentBlock");
1366char * _PREHASH_ObjectMaterial; 1366char* _PREHASH_ObjectMaterial = LLMessageStringTable::getInstance()->getString("ObjectMaterial");
1367char * _PREHASH_OwnerName; 1367char* _PREHASH_OwnerName = LLMessageStringTable::getInstance()->getString("OwnerName");
1368char * _PREHASH_AvatarNotesReply; 1368char* _PREHASH_AvatarNotesReply = LLMessageStringTable::getInstance()->getString("AvatarNotesReply");
1369char * _PREHASH_CacheID; 1369char* _PREHASH_CacheID = LLMessageStringTable::getInstance()->getString("CacheID");
1370char * _PREHASH_OwnerMask; 1370char* _PREHASH_OwnerMask = LLMessageStringTable::getInstance()->getString("OwnerMask");
1371char * _PREHASH_TransferInventoryAck; 1371char* _PREHASH_TransferInventoryAck = LLMessageStringTable::getInstance()->getString("TransferInventoryAck");
1372char * _PREHASH_RegionDenyAgeUnverified; 1372char* _PREHASH_RegionDenyAgeUnverified = LLMessageStringTable::getInstance()->getString("RegionDenyAgeUnverified");
1373char * _PREHASH_AgeVerificationBlock; 1373char* _PREHASH_AgeVerificationBlock = LLMessageStringTable::getInstance()->getString("AgeVerificationBlock");
1374 1374
1375
1376void init_prehash_data()
1377{
1378 _PREHASH_X = gMessageStringTable.getString("X");
1379 _PREHASH_Y = gMessageStringTable.getString("Y");
1380 _PREHASH_Z = gMessageStringTable.getString("Z");
1381 _PREHASH_AddFlags = gMessageStringTable.getString("AddFlags");
1382 _PREHASH_FailureInfo = gMessageStringTable.getString("FailureInfo");
1383 _PREHASH_MapData = gMessageStringTable.getString("MapData");
1384 _PREHASH_AddItem = gMessageStringTable.getString("AddItem");
1385 _PREHASH_MeanCollision = gMessageStringTable.getString("MeanCollision");
1386 _PREHASH_RezScript = gMessageStringTable.getString("RezScript");
1387 _PREHASH_AvatarSitResponse = gMessageStringTable.getString("AvatarSitResponse");
1388 _PREHASH_InventoryAssetResponse = gMessageStringTable.getString("InventoryAssetResponse");
1389 _PREHASH_KillObject = gMessageStringTable.getString("KillObject");
1390 _PREHASH_ProposalID = gMessageStringTable.getString("ProposalID");
1391 _PREHASH_SerialNum = gMessageStringTable.getString("SerialNum");
1392 _PREHASH_Duration = gMessageStringTable.getString("Duration");
1393 _PREHASH_ScriptQuestion = gMessageStringTable.getString("ScriptQuestion");
1394 _PREHASH_AddCircuitCode = gMessageStringTable.getString("AddCircuitCode");
1395 _PREHASH_UseCircuitCode = gMessageStringTable.getString("UseCircuitCode");
1396 _PREHASH_ViewerCircuitCode = gMessageStringTable.getString("ViewerCircuitCode");
1397 _PREHASH_ScriptAnswerYes = gMessageStringTable.getString("ScriptAnswerYes");
1398 _PREHASH_PartnerID = gMessageStringTable.getString("PartnerID");
1399 _PREHASH_DirLandQuery = gMessageStringTable.getString("DirLandQuery");
1400 _PREHASH_TeleportStart = gMessageStringTable.getString("TeleportStart");
1401 _PREHASH_AboutText = gMessageStringTable.getString("AboutText");
1402 _PREHASH_VisualParam = gMessageStringTable.getString("VisualParam");
1403 _PREHASH_GroupPrims = gMessageStringTable.getString("GroupPrims");
1404 _PREHASH_SelectedPrims = gMessageStringTable.getString("SelectedPrims");
1405 _PREHASH_ID = gMessageStringTable.getString("ID");
1406 _PREHASH_UUIDNameRequest = gMessageStringTable.getString("UUIDNameRequest");
1407 _PREHASH_UUIDGroupNameRequest = gMessageStringTable.getString("UUIDGroupNameRequest");
1408 _PREHASH_GroupAccountTransactionsRequest = gMessageStringTable.getString("GroupAccountTransactionsRequest");
1409 _PREHASH_MapNameRequest = gMessageStringTable.getString("MapNameRequest");
1410 _PREHASH_UpdateSimulator = gMessageStringTable.getString("UpdateSimulator");
1411 _PREHASH_BillableFactor = gMessageStringTable.getString("BillableFactor");
1412 _PREHASH_ObjectBonusFactor = gMessageStringTable.getString("ObjectBonusFactor");
1413 _PREHASH_EnableSimulator = gMessageStringTable.getString("EnableSimulator");
1414 _PREHASH_DisableSimulator = gMessageStringTable.getString("DisableSimulator");
1415 _PREHASH_ConfirmEnableSimulator = gMessageStringTable.getString("ConfirmEnableSimulator");
1416 _PREHASH_LayerType = gMessageStringTable.getString("LayerType");
1417 _PREHASH_OwnerRole = gMessageStringTable.getString("OwnerRole");
1418 _PREHASH_ParcelOverlay = gMessageStringTable.getString("ParcelOverlay");
1419 _PREHASH_GroupOwned = gMessageStringTable.getString("GroupOwned");
1420 _PREHASH_IP = gMessageStringTable.getString("IP");
1421 _PREHASH_ChatFromViewer = gMessageStringTable.getString("ChatFromViewer");
1422 _PREHASH_AvgAgentsInView = gMessageStringTable.getString("AvgAgentsInView");
1423 _PREHASH_AgentsInView = gMessageStringTable.getString("AgentsInView");
1424 _PREHASH_GroupTitle = gMessageStringTable.getString("GroupTitle");
1425 _PREHASH_MapLayerReply = gMessageStringTable.getString("MapLayerReply");
1426 _PREHASH_CompoundMsgID = gMessageStringTable.getString("CompoundMsgID");
1427 _PREHASH_CameraConstraint = gMessageStringTable.getString("CameraConstraint");
1428 _PREHASH_DownloadTotals = gMessageStringTable.getString("DownloadTotals");
1429 _PREHASH_GenCounter = gMessageStringTable.getString("GenCounter");
1430 _PREHASH_FrozenData = gMessageStringTable.getString("FrozenData");
1431 _PREHASH_ChildAgentDying = gMessageStringTable.getString("ChildAgentDying");
1432 _PREHASH_To = gMessageStringTable.getString("To");
1433 _PREHASH_CopyInventoryFromNotecard = gMessageStringTable.getString("CopyInventoryFromNotecard");
1434 _PREHASH_RezObjectFromNotecard = gMessageStringTable.getString("RezObjectFromNotecard");
1435 _PREHASH_ParcelDirFeeCurrent = gMessageStringTable.getString("ParcelDirFeeCurrent");
1436 _PREHASH_SeedCapability = gMessageStringTable.getString("SeedCapability");
1437 _PREHASH_ObjectDuplicate = gMessageStringTable.getString("ObjectDuplicate");
1438 _PREHASH_InventoryData = gMessageStringTable.getString("InventoryData");
1439 _PREHASH_ReplyData = gMessageStringTable.getString("ReplyData");
1440 _PREHASH_ResetList = gMessageStringTable.getString("ResetList");
1441 _PREHASH_MediaID = gMessageStringTable.getString("MediaID");
1442 _PREHASH_RelatedRights = gMessageStringTable.getString("RelatedRights");
1443 _PREHASH_RedirectGridX = gMessageStringTable.getString("RedirectGridX");
1444 _PREHASH_RedirectGridY = gMessageStringTable.getString("RedirectGridY");
1445 _PREHASH_TransferID = gMessageStringTable.getString("TransferID");
1446 _PREHASH_TexturesChanged = gMessageStringTable.getString("TexturesChanged");
1447 _PREHASH_UserLookAt = gMessageStringTable.getString("UserLookAt");
1448 _PREHASH_TestBlock1 = gMessageStringTable.getString("TestBlock1");
1449 _PREHASH_SensedData = gMessageStringTable.getString("SensedData");
1450 _PREHASH_UpdateBlock = gMessageStringTable.getString("UpdateBlock");
1451 _PREHASH_ClassifiedGodDelete = gMessageStringTable.getString("ClassifiedGodDelete");
1452 _PREHASH_ObjectGrabUpdate = gMessageStringTable.getString("ObjectGrabUpdate");
1453 _PREHASH_LocationPos = gMessageStringTable.getString("LocationPos");
1454 _PREHASH_TaxDate = gMessageStringTable.getString("TaxDate");
1455 _PREHASH_StartDateTime = gMessageStringTable.getString("StartDateTime");
1456 _PREHASH_ObjectUpdateCached = gMessageStringTable.getString("ObjectUpdateCached");
1457 _PREHASH_Packets = gMessageStringTable.getString("Packets");
1458 _PREHASH_FailureType = gMessageStringTable.getString("FailureType");
1459 _PREHASH_UpdateGroupInfo = gMessageStringTable.getString("UpdateGroupInfo");
1460 _PREHASH_ObjectPermissions = gMessageStringTable.getString("ObjectPermissions");
1461 _PREHASH_RevokePermissions = gMessageStringTable.getString("RevokePermissions");
1462 _PREHASH_UpdateFlags = gMessageStringTable.getString("UpdateFlags");
1463 _PREHASH_ObjectExportSelected = gMessageStringTable.getString("ObjectExportSelected");
1464 _PREHASH_RezSelected = gMessageStringTable.getString("RezSelected");
1465 _PREHASH_AutoPilot = gMessageStringTable.getString("AutoPilot");
1466 _PREHASH_UpdateMuteListEntry = gMessageStringTable.getString("UpdateMuteListEntry");
1467 _PREHASH_RemoveMuteListEntry = gMessageStringTable.getString("RemoveMuteListEntry");
1468 _PREHASH_SetSimStatusInDatabase = gMessageStringTable.getString("SetSimStatusInDatabase");
1469 _PREHASH_SetSimPresenceInDatabase = gMessageStringTable.getString("SetSimPresenceInDatabase");
1470 _PREHASH_CameraProperty = gMessageStringTable.getString("CameraProperty");
1471 _PREHASH_BrushSize = gMessageStringTable.getString("BrushSize");
1472 _PREHASH_SimulatorSetMap = gMessageStringTable.getString("SimulatorSetMap");
1473 _PREHASH_RegionPresenceRequestByRegionID = gMessageStringTable.getString("RegionPresenceRequestByRegionID");
1474 _PREHASH_ParcelObjectOwnersReply = gMessageStringTable.getString("ParcelObjectOwnersReply");
1475 _PREHASH_GroupMembersReply = gMessageStringTable.getString("GroupMembersReply");
1476 _PREHASH_GroupRoleMembersReply = gMessageStringTable.getString("GroupRoleMembersReply");
1477 _PREHASH_RequestRegionInfo = gMessageStringTable.getString("RequestRegionInfo");
1478 _PREHASH_AABBMax = gMessageStringTable.getString("AABBMax");
1479 _PREHASH_RequestPayPrice = gMessageStringTable.getString("RequestPayPrice");
1480 _PREHASH_SimulatorPresentAtLocation = gMessageStringTable.getString("SimulatorPresentAtLocation");
1481 _PREHASH_AgentRequestSit = gMessageStringTable.getString("AgentRequestSit");
1482 _PREHASH_AABBMin = gMessageStringTable.getString("AABBMin");
1483 _PREHASH_ClassifiedFlags = gMessageStringTable.getString("ClassifiedFlags");
1484 _PREHASH_ControlFlags = gMessageStringTable.getString("ControlFlags");
1485 _PREHASH_TeleportRequest = gMessageStringTable.getString("TeleportRequest");
1486 _PREHASH_ScriptTeleportRequest = gMessageStringTable.getString("ScriptTeleportRequest");
1487 _PREHASH_EstateCovenantRequest = gMessageStringTable.getString("EstateCovenantRequest");
1488 _PREHASH_DateUTC = gMessageStringTable.getString("DateUTC");
1489 _PREHASH_TaskIDs = gMessageStringTable.getString("TaskIDs");
1490 _PREHASH_RequestResult = gMessageStringTable.getString("RequestResult");
1491 _PREHASH_CanAcceptAgents = gMessageStringTable.getString("CanAcceptAgents");
1492 _PREHASH_ObjectSaleInfo = gMessageStringTable.getString("ObjectSaleInfo");
1493 _PREHASH_KillChildAgents = gMessageStringTable.getString("KillChildAgents");
1494 _PREHASH_Balance = gMessageStringTable.getString("Balance");
1495 _PREHASH_DerezContainer = gMessageStringTable.getString("DerezContainer");
1496 _PREHASH_ObjectData = gMessageStringTable.getString("ObjectData");
1497 _PREHASH_CameraAtAxis = gMessageStringTable.getString("CameraAtAxis");
1498 _PREHASH_InfoBlock = gMessageStringTable.getString("InfoBlock");
1499 _PREHASH_OwnershipCost = gMessageStringTable.getString("OwnershipCost");
1500 _PREHASH_AvatarNotesUpdate = gMessageStringTable.getString("AvatarNotesUpdate");
1501 _PREHASH_PID = gMessageStringTable.getString("PID");
1502 _PREHASH_DirPopularReply = gMessageStringTable.getString("DirPopularReply");
1503 _PREHASH_TerrainHeightRange00 = gMessageStringTable.getString("TerrainHeightRange00");
1504 _PREHASH_SimData = gMessageStringTable.getString("SimData");
1505 _PREHASH_TerrainHeightRange01 = gMessageStringTable.getString("TerrainHeightRange01");
1506 _PREHASH_TerrainHeightRange10 = gMessageStringTable.getString("TerrainHeightRange10");
1507 _PREHASH_TerrainHeightRange11 = gMessageStringTable.getString("TerrainHeightRange11");
1508 _PREHASH_UpdateInventoryItem = gMessageStringTable.getString("UpdateInventoryItem");
1509 _PREHASH_UpdateCreateInventoryItem = gMessageStringTable.getString("UpdateCreateInventoryItem");
1510 _PREHASH_MoveInventoryItem = gMessageStringTable.getString("MoveInventoryItem");
1511 _PREHASH_CopyInventoryItem = gMessageStringTable.getString("CopyInventoryItem");
1512 _PREHASH_RemoveInventoryItem = gMessageStringTable.getString("RemoveInventoryItem");
1513 _PREHASH_CreateInventoryItem = gMessageStringTable.getString("CreateInventoryItem");
1514 _PREHASH_PathTwistBegin = gMessageStringTable.getString("PathTwistBegin");
1515 _PREHASH_CRC = gMessageStringTable.getString("CRC");
1516 _PREHASH_AttachmentPoint = gMessageStringTable.getString("AttachmentPoint");
1517 _PREHASH_TelehubBlock = gMessageStringTable.getString("TelehubBlock");
1518 _PREHASH_FOVBlock = gMessageStringTable.getString("FOVBlock");
1519 _PREHASH_StartLocationData = gMessageStringTable.getString("StartLocationData");
1520 _PREHASH_PositionData = gMessageStringTable.getString("PositionData");
1521 _PREHASH_TimeSinceLast = gMessageStringTable.getString("TimeSinceLast");
1522 _PREHASH_MapImage = gMessageStringTable.getString("MapImage");
1523 _PREHASH_Objects = gMessageStringTable.getString("Objects");
1524 _PREHASH_URL = gMessageStringTable.getString("URL");
1525 _PREHASH_CreationDate = gMessageStringTable.getString("CreationDate");
1526 _PREHASH_JointPivot = gMessageStringTable.getString("JointPivot");
1527 _PREHASH_FPS = gMessageStringTable.getString("FPS");
1528 _PREHASH_HasTelehub = gMessageStringTable.getString("HasTelehub");
1529 _PREHASH_PathEnd = gMessageStringTable.getString("PathEnd");
1530 _PREHASH_ScriptDataReply = gMessageStringTable.getString("ScriptDataReply");
1531 _PREHASH_MapBlockReply = gMessageStringTable.getString("MapBlockReply");
1532 _PREHASH_PropertiesData = gMessageStringTable.getString("PropertiesData");
1533 _PREHASH_ViewerEffect = gMessageStringTable.getString("ViewerEffect");
1534 _PREHASH_FreezeUser = gMessageStringTable.getString("FreezeUser");
1535 _PREHASH_OwnerPrims = gMessageStringTable.getString("OwnerPrims");
1536 _PREHASH_ObjectGrab = gMessageStringTable.getString("ObjectGrab");
1537 _PREHASH_ToAgentID = gMessageStringTable.getString("ToAgentID");
1538 _PREHASH_SimulatorMapUpdate = gMessageStringTable.getString("SimulatorMapUpdate");
1539 _PREHASH_TransferPacket = gMessageStringTable.getString("TransferPacket");
1540 _PREHASH_ObjectName = gMessageStringTable.getString("ObjectName");
1541 _PREHASH_GroupPowers = gMessageStringTable.getString("GroupPowers");
1542 _PREHASH_OriginalName = gMessageStringTable.getString("OriginalName");
1543 _PREHASH_CompletePingCheck = gMessageStringTable.getString("CompletePingCheck");
1544 _PREHASH_OnlineStatus = gMessageStringTable.getString("OnlineStatus");
1545 _PREHASH_ObjectDrop = gMessageStringTable.getString("ObjectDrop");
1546 _PREHASH_UseBigPackets = gMessageStringTable.getString("UseBigPackets");
1547 _PREHASH_GroupNoticesListReply = gMessageStringTable.getString("GroupNoticesListReply");
1548 _PREHASH_ParcelAccessListReply = gMessageStringTable.getString("ParcelAccessListReply");
1549 _PREHASH_RpcChannelReply = gMessageStringTable.getString("RpcChannelReply");
1550 _PREHASH_RegionPresenceResponse = gMessageStringTable.getString("RegionPresenceResponse");
1551 _PREHASH_CharterMember = gMessageStringTable.getString("CharterMember");
1552 _PREHASH_EdgeData = gMessageStringTable.getString("EdgeData");
1553 _PREHASH_NameData = gMessageStringTable.getString("NameData");
1554 _PREHASH_RegionPushOverride = gMessageStringTable.getString("RegionPushOverride");
1555 _PREHASH_SimName = gMessageStringTable.getString("SimName");
1556 _PREHASH_UserReport = gMessageStringTable.getString("UserReport");
1557 _PREHASH_DownloadPriority = gMessageStringTable.getString("DownloadPriority");
1558 _PREHASH_ToAgentId = gMessageStringTable.getString("ToAgentId");
1559 _PREHASH_DirPopularQuery = gMessageStringTable.getString("DirPopularQuery");
1560 _PREHASH_Mag = gMessageStringTable.getString("Mag");
1561 _PREHASH_ParcelPropertiesRequestByID = gMessageStringTable.getString("ParcelPropertiesRequestByID");
1562 _PREHASH_ObjectLink = gMessageStringTable.getString("ObjectLink");
1563 _PREHASH_RpcScriptReplyInbound = gMessageStringTable.getString("RpcScriptReplyInbound");
1564 _PREHASH_RezData = gMessageStringTable.getString("RezData");
1565 _PREHASH_RemoveInventoryObjects = gMessageStringTable.getString("RemoveInventoryObjects");
1566 _PREHASH_GroupProposalBallot = gMessageStringTable.getString("GroupProposalBallot");
1567 _PREHASH_RPCServerIP = gMessageStringTable.getString("RPCServerIP");
1568 _PREHASH_Far = gMessageStringTable.getString("Far");
1569 _PREHASH_GodSessionID = gMessageStringTable.getString("GodSessionID");
1570 _PREHASH_FLAboutText = gMessageStringTable.getString("FLAboutText");
1571 _PREHASH_RegionHandshakeReply = gMessageStringTable.getString("RegionHandshakeReply");
1572 _PREHASH_GroupActiveProposalItemReply = gMessageStringTable.getString("GroupActiveProposalItemReply");
1573 _PREHASH_MapItemReply = gMessageStringTable.getString("MapItemReply");
1574 _PREHASH_Seconds = gMessageStringTable.getString("Seconds");
1575 _PREHASH_UpdateUserInfo = gMessageStringTable.getString("UpdateUserInfo");
1576 _PREHASH_AggregatePermTexturesOwner = gMessageStringTable.getString("AggregatePermTexturesOwner");
1577 _PREHASH_Set = gMessageStringTable.getString("Set");
1578 _PREHASH_NewName = gMessageStringTable.getString("NewName");
1579 _PREHASH_Key = gMessageStringTable.getString("Key");
1580 _PREHASH_AgentID = gMessageStringTable.getString("AgentID");
1581 _PREHASH_EventNotificationRemoveRequest = gMessageStringTable.getString("EventNotificationRemoveRequest");
1582 _PREHASH_NewFolderID = gMessageStringTable.getString("NewFolderID");
1583 _PREHASH_Arc = gMessageStringTable.getString("Arc");
1584 _PREHASH_RegionX = gMessageStringTable.getString("RegionX");
1585 _PREHASH_RegionY = gMessageStringTable.getString("RegionY");
1586 _PREHASH_RequestData = gMessageStringTable.getString("RequestData");
1587 _PREHASH_Msg = gMessageStringTable.getString("Msg");
1588 _PREHASH_Top = gMessageStringTable.getString("Top");
1589 _PREHASH_MiscStats = gMessageStringTable.getString("MiscStats");
1590 _PREHASH_ImageID = gMessageStringTable.getString("ImageID");
1591 _PREHASH_DataPacket = gMessageStringTable.getString("DataPacket");
1592 _PREHASH_You = gMessageStringTable.getString("You");
1593 _PREHASH_ScriptControlChange = gMessageStringTable.getString("ScriptControlChange");
1594 _PREHASH_LoadURL = gMessageStringTable.getString("LoadURL");
1595 _PREHASH_SetCPURatio = gMessageStringTable.getString("SetCPURatio");
1596 _PREHASH_NameValueData = gMessageStringTable.getString("NameValueData");
1597 _PREHASH_AtomicPassObject = gMessageStringTable.getString("AtomicPassObject");
1598 _PREHASH_ErrorMessage = gMessageStringTable.getString("ErrorMessage");
1599 _PREHASH_ViewerFrozenMessage = gMessageStringTable.getString("ViewerFrozenMessage");
1600 _PREHASH_HealthMessage = gMessageStringTable.getString("HealthMessage");
1601 _PREHASH_LogTextMessage = gMessageStringTable.getString("LogTextMessage");
1602 _PREHASH_TimeDilation = gMessageStringTable.getString("TimeDilation");
1603 _PREHASH_RemoveContribution = gMessageStringTable.getString("RemoveContribution");
1604 _PREHASH_Contribution = gMessageStringTable.getString("Contribution");
1605 _PREHASH_SetGroupContribution = gMessageStringTable.getString("SetGroupContribution");
1606 _PREHASH_Offline = gMessageStringTable.getString("Offline");
1607 _PREHASH_AgentIsNowWearing = gMessageStringTable.getString("AgentIsNowWearing");
1608 _PREHASH_Members = gMessageStringTable.getString("Members");
1609 _PREHASH_FailedResends = gMessageStringTable.getString("FailedResends");
1610 _PREHASH_SecPerDay = gMessageStringTable.getString("SecPerDay");
1611 _PREHASH_CameraCenter = gMessageStringTable.getString("CameraCenter");
1612 _PREHASH_CameraLeftAxis = gMessageStringTable.getString("CameraLeftAxis");
1613 _PREHASH_ExBlock = gMessageStringTable.getString("ExBlock");
1614 _PREHASH_Channel = gMessageStringTable.getString("Channel");
1615 _PREHASH_NetTest = gMessageStringTable.getString("NetTest");
1616 _PREHASH_DiscardLevel = gMessageStringTable.getString("DiscardLevel");
1617 _PREHASH_LayerID = gMessageStringTable.getString("LayerID");
1618 _PREHASH_GrabOffset = gMessageStringTable.getString("GrabOffset");
1619 _PREHASH_SimPort = gMessageStringTable.getString("SimPort");
1620 _PREHASH_PricePerMeter = gMessageStringTable.getString("PricePerMeter");
1621 _PREHASH_RegionFlags = gMessageStringTable.getString("RegionFlags");
1622 _PREHASH_VoteResult = gMessageStringTable.getString("VoteResult");
1623 _PREHASH_ParcelDirFeeEstimate = gMessageStringTable.getString("ParcelDirFeeEstimate");
1624 _PREHASH_ModifyBlock = gMessageStringTable.getString("ModifyBlock");
1625 _PREHASH_InventoryBlock = gMessageStringTable.getString("InventoryBlock");
1626 _PREHASH_ReplyBlock = gMessageStringTable.getString("ReplyBlock");
1627 _PREHASH_ValidUntil = gMessageStringTable.getString("ValidUntil");
1628 _PREHASH_VelocityInterpolateOn = gMessageStringTable.getString("VelocityInterpolateOn");
1629 _PREHASH_ClassifiedDelete = gMessageStringTable.getString("ClassifiedDelete");
1630 _PREHASH_RegionDenyAnonymous = gMessageStringTable.getString("RegionDenyAnonymous");
1631 _PREHASH_FLImageID = gMessageStringTable.getString("FLImageID");
1632 _PREHASH_AllowPublish = gMessageStringTable.getString("AllowPublish");
1633 _PREHASH_SitName = gMessageStringTable.getString("SitName");
1634 _PREHASH_RegionsVisited = gMessageStringTable.getString("RegionsVisited");
1635 _PREHASH_DirClassifiedReply = gMessageStringTable.getString("DirClassifiedReply");
1636 _PREHASH_AvatarClassifiedReply = gMessageStringTable.getString("AvatarClassifiedReply");
1637 _PREHASH_MediaURL = gMessageStringTable.getString("MediaURL");
1638 _PREHASH_CompleteAgentMovement = gMessageStringTable.getString("CompleteAgentMovement");
1639 _PREHASH_ClassifiedID = gMessageStringTable.getString("ClassifiedID");
1640 _PREHASH_LocalID = gMessageStringTable.getString("LocalID");
1641 _PREHASH_SpaceIP = gMessageStringTable.getString("SpaceIP");
1642 _PREHASH_RemoveItem = gMessageStringTable.getString("RemoveItem");
1643 _PREHASH_LogFailedMoneyTransaction = gMessageStringTable.getString("LogFailedMoneyTransaction");
1644 _PREHASH_ViewerStartAuction = gMessageStringTable.getString("ViewerStartAuction");
1645 _PREHASH_StartAuction = gMessageStringTable.getString("StartAuction");
1646 _PREHASH_DuplicateFlags = gMessageStringTable.getString("DuplicateFlags");
1647 _PREHASH_RegionInfo2 = gMessageStringTable.getString("RegionInfo2");
1648 _PREHASH_TextColor = gMessageStringTable.getString("TextColor");
1649 _PREHASH_SlaveID = gMessageStringTable.getString("SlaveID");
1650 _PREHASH_Charter = gMessageStringTable.getString("Charter");
1651 _PREHASH_AlertData = gMessageStringTable.getString("AlertData");
1652 _PREHASH_TargetBlock = gMessageStringTable.getString("TargetBlock");
1653 _PREHASH_CheckParcelAuctions = gMessageStringTable.getString("CheckParcelAuctions");
1654 _PREHASH_ParcelAuctions = gMessageStringTable.getString("ParcelAuctions");
1655 _PREHASH_OwnerIsGroup = gMessageStringTable.getString("OwnerIsGroup");
1656 _PREHASH_NameValuePair = gMessageStringTable.getString("NameValuePair");
1657 _PREHASH_RemoveNameValuePair = gMessageStringTable.getString("RemoveNameValuePair");
1658 _PREHASH_BulkUpdateInventory = gMessageStringTable.getString("BulkUpdateInventory");
1659 _PREHASH_UpdateTaskInventory = gMessageStringTable.getString("UpdateTaskInventory");
1660 _PREHASH_RemoveTaskInventory = gMessageStringTable.getString("RemoveTaskInventory");
1661 _PREHASH_MoveTaskInventory = gMessageStringTable.getString("MoveTaskInventory");
1662 _PREHASH_RequestTaskInventory = gMessageStringTable.getString("RequestTaskInventory");
1663 _PREHASH_ReplyTaskInventory = gMessageStringTable.getString("ReplyTaskInventory");
1664 _PREHASH_AggregatePermInventory = gMessageStringTable.getString("AggregatePermInventory");
1665 _PREHASH_GroupAccountTransactionsReply = gMessageStringTable.getString("GroupAccountTransactionsReply");
1666 _PREHASH_SimulatorInfo = gMessageStringTable.getString("SimulatorInfo");
1667 _PREHASH_WearableData = gMessageStringTable.getString("WearableData");
1668 _PREHASH_Enabled = gMessageStringTable.getString("Enabled");
1669 _PREHASH_Savings = gMessageStringTable.getString("Savings");
1670 _PREHASH_SimulatorLoad = gMessageStringTable.getString("SimulatorLoad");
1671 _PREHASH_InternalRegionIP = gMessageStringTable.getString("InternalRegionIP");
1672 _PREHASH_ExternalRegionIP = gMessageStringTable.getString("ExternalRegionIP");
1673 _PREHASH_TotalPairs = gMessageStringTable.getString("TotalPairs");
1674 _PREHASH_CreateGroupRequest = gMessageStringTable.getString("CreateGroupRequest");
1675 _PREHASH_JoinGroupRequest = gMessageStringTable.getString("JoinGroupRequest");
1676 _PREHASH_LeaveGroupRequest = gMessageStringTable.getString("LeaveGroupRequest");
1677 _PREHASH_InviteGroupRequest = gMessageStringTable.getString("InviteGroupRequest");
1678 _PREHASH_LiveHelpGroupRequest = gMessageStringTable.getString("LiveHelpGroupRequest");
1679 _PREHASH_PriceParcelClaimFactor = gMessageStringTable.getString("PriceParcelClaimFactor");
1680 _PREHASH_BillableArea = gMessageStringTable.getString("BillableArea");
1681 _PREHASH_ObjectID = gMessageStringTable.getString("ObjectID");
1682 _PREHASH_ObjectFlagUpdate = gMessageStringTable.getString("ObjectFlagUpdate");
1683 _PREHASH_GroupRoleUpdate = gMessageStringTable.getString("GroupRoleUpdate");
1684 _PREHASH_RequestInventoryAsset = gMessageStringTable.getString("RequestInventoryAsset");
1685 _PREHASH_ChangedGrid = gMessageStringTable.getString("ChangedGrid");
1686 _PREHASH_AgentDropGroup = gMessageStringTable.getString("AgentDropGroup");
1687 _PREHASH_Details = gMessageStringTable.getString("Details");
1688 _PREHASH_LocationX = gMessageStringTable.getString("LocationX");
1689 _PREHASH_SaleType = gMessageStringTable.getString("SaleType");
1690 _PREHASH_LocationY = gMessageStringTable.getString("LocationY");
1691 _PREHASH_LocationZ = gMessageStringTable.getString("LocationZ");
1692 _PREHASH_EconomyData = gMessageStringTable.getString("EconomyData");
1693 _PREHASH_HeadRotation = gMessageStringTable.getString("HeadRotation");
1694 _PREHASH_DeleteOnCompletion = gMessageStringTable.getString("DeleteOnCompletion");
1695 _PREHASH_PublicPort = gMessageStringTable.getString("PublicPort");
1696 _PREHASH_DirClassifiedQuery = gMessageStringTable.getString("DirClassifiedQuery");
1697 _PREHASH_CallbackID = gMessageStringTable.getString("CallbackID");
1698 _PREHASH_RequestParcelTransfer = gMessageStringTable.getString("RequestParcelTransfer");
1699 _PREHASH_RoleCount = gMessageStringTable.getString("RoleCount");
1700 _PREHASH_ObjectCapacity = gMessageStringTable.getString("ObjectCapacity");
1701 _PREHASH_RequestID = gMessageStringTable.getString("RequestID");
1702 _PREHASH_RequestXfer = gMessageStringTable.getString("RequestXfer");
1703 _PREHASH_ObjectTaxCurrent = gMessageStringTable.getString("ObjectTaxCurrent");
1704 _PREHASH_LightTaxCurrent = gMessageStringTable.getString("LightTaxCurrent");
1705 _PREHASH_LandTaxCurrent = gMessageStringTable.getString("LandTaxCurrent");
1706 _PREHASH_GroupTaxCurrent = gMessageStringTable.getString("GroupTaxCurrent");
1707 _PREHASH_FetchInventoryDescendents = gMessageStringTable.getString("FetchInventoryDescendents");
1708 _PREHASH_InventoryDescendents = gMessageStringTable.getString("InventoryDescendents");
1709 _PREHASH_Descendents = gMessageStringTable.getString("Descendents");
1710 _PREHASH_PurgeInventoryDescendents = gMessageStringTable.getString("PurgeInventoryDescendents");
1711 _PREHASH_ShowDir = gMessageStringTable.getString("ShowDir");
1712 _PREHASH_IsOwner = gMessageStringTable.getString("IsOwner");
1713 _PREHASH_Timestamp = gMessageStringTable.getString("Timestamp");
1714 _PREHASH_GlobalPos = gMessageStringTable.getString("GlobalPos");
1715 _PREHASH_GrabOffsetInitial = gMessageStringTable.getString("GrabOffsetInitial");
1716 _PREHASH_IsTrial = gMessageStringTable.getString("IsTrial");
1717 _PREHASH_ObjectDuplicateOnRay = gMessageStringTable.getString("ObjectDuplicateOnRay");
1718 _PREHASH_GroupMembershipCount = gMessageStringTable.getString("GroupMembershipCount");
1719 _PREHASH_MethodData = gMessageStringTable.getString("MethodData");
1720 _PREHASH_ActivateGestures = gMessageStringTable.getString("ActivateGestures");
1721 _PREHASH_DeactivateGestures = gMessageStringTable.getString("DeactivateGestures");
1722 _PREHASH_ProposalData = gMessageStringTable.getString("ProposalData");
1723 _PREHASH_PosGlobal = gMessageStringTable.getString("PosGlobal");
1724 _PREHASH_SearchID = gMessageStringTable.getString("SearchID");
1725 _PREHASH_RezMultipleAttachmentsFromInv = gMessageStringTable.getString("RezMultipleAttachmentsFromInv");
1726 _PREHASH_SearchName = gMessageStringTable.getString("SearchName");
1727 _PREHASH_VersionString = gMessageStringTable.getString("VersionString");
1728 _PREHASH_CreateGroupReply = gMessageStringTable.getString("CreateGroupReply");
1729 _PREHASH_LeaveGroupReply = gMessageStringTable.getString("LeaveGroupReply");
1730 _PREHASH_ActualArea = gMessageStringTable.getString("ActualArea");
1731 _PREHASH_Message = gMessageStringTable.getString("Message");
1732 _PREHASH_ClickAction = gMessageStringTable.getString("ClickAction");
1733 _PREHASH_AssetUploadComplete = gMessageStringTable.getString("AssetUploadComplete");
1734 _PREHASH_RequestType = gMessageStringTable.getString("RequestType");
1735 _PREHASH_UUID = gMessageStringTable.getString("UUID");
1736 _PREHASH_BaseMask = gMessageStringTable.getString("BaseMask");
1737 _PREHASH_NetBlock = gMessageStringTable.getString("NetBlock");
1738 _PREHASH_GlobalX = gMessageStringTable.getString("GlobalX");
1739 _PREHASH_GlobalY = gMessageStringTable.getString("GlobalY");
1740 _PREHASH_CopyRotates = gMessageStringTable.getString("CopyRotates");
1741 _PREHASH_KickUserAck = gMessageStringTable.getString("KickUserAck");
1742 _PREHASH_TopPick = gMessageStringTable.getString("TopPick");
1743 _PREHASH_SessionID = gMessageStringTable.getString("SessionID");
1744 _PREHASH_GlobalZ = gMessageStringTable.getString("GlobalZ");
1745 _PREHASH_DeclineFriendship = gMessageStringTable.getString("DeclineFriendship");
1746 _PREHASH_FormFriendship = gMessageStringTable.getString("FormFriendship");
1747 _PREHASH_TerminateFriendship = gMessageStringTable.getString("TerminateFriendship");
1748 _PREHASH_TaskData = gMessageStringTable.getString("TaskData");
1749 _PREHASH_SimWideMaxPrims = gMessageStringTable.getString("SimWideMaxPrims");
1750 _PREHASH_TotalPrims = gMessageStringTable.getString("TotalPrims");
1751 _PREHASH_ProfileBegin = gMessageStringTable.getString("ProfileBegin");
1752 _PREHASH_Request = gMessageStringTable.getString("Request");
1753 _PREHASH_GroupAccountDetailsRequest = gMessageStringTable.getString("GroupAccountDetailsRequest");
1754 _PREHASH_GroupActiveProposalsRequest = gMessageStringTable.getString("GroupActiveProposalsRequest");
1755 _PREHASH_StringValue = gMessageStringTable.getString("StringValue");
1756 _PREHASH_Version = gMessageStringTable.getString("Version");
1757 _PREHASH_OtherCount = gMessageStringTable.getString("OtherCount");
1758 _PREHASH_MemberCount = gMessageStringTable.getString("MemberCount");
1759 _PREHASH_ChatData = gMessageStringTable.getString("ChatData");
1760 _PREHASH_IsGroupOwned = gMessageStringTable.getString("IsGroupOwned");
1761 _PREHASH_EnergyEfficiency = gMessageStringTable.getString("EnergyEfficiency");
1762 _PREHASH_PickInfoUpdate = gMessageStringTable.getString("PickInfoUpdate");
1763 _PREHASH_PickDelete = gMessageStringTable.getString("PickDelete");
1764 _PREHASH_ScriptReset = gMessageStringTable.getString("ScriptReset");
1765 _PREHASH_Requester = gMessageStringTable.getString("Requester");
1766 _PREHASH_ForSale = gMessageStringTable.getString("ForSale");
1767 _PREHASH_NearestLandingRegionReply = gMessageStringTable.getString("NearestLandingRegionReply");
1768 _PREHASH_ParcelID = gMessageStringTable.getString("ParcelID");
1769 _PREHASH_Godlike = gMessageStringTable.getString("Godlike");
1770 _PREHASH_TotalDebits = gMessageStringTable.getString("TotalDebits");
1771 _PREHASH_Direction = gMessageStringTable.getString("Direction");
1772 _PREHASH_HealthData = gMessageStringTable.getString("HealthData");
1773 _PREHASH_LeftAxis = gMessageStringTable.getString("LeftAxis");
1774 _PREHASH_LocationBlock = gMessageStringTable.getString("LocationBlock");
1775 _PREHASH_ObjectImage = gMessageStringTable.getString("ObjectImage");
1776 _PREHASH_TerrainStartHeight00 = gMessageStringTable.getString("TerrainStartHeight00");
1777 _PREHASH_TerrainStartHeight01 = gMessageStringTable.getString("TerrainStartHeight01");
1778 _PREHASH_TerrainStartHeight10 = gMessageStringTable.getString("TerrainStartHeight10");
1779 _PREHASH_TerrainStartHeight11 = gMessageStringTable.getString("TerrainStartHeight11");
1780 _PREHASH_WaterHeight = gMessageStringTable.getString("WaterHeight");
1781 _PREHASH_FetchInventoryReply = gMessageStringTable.getString("FetchInventoryReply");
1782 _PREHASH_GroupAccountSummaryReply = gMessageStringTable.getString("GroupAccountSummaryReply");
1783 _PREHASH_AttachedSound = gMessageStringTable.getString("AttachedSound");
1784 _PREHASH_ParamInUse = gMessageStringTable.getString("ParamInUse");
1785 _PREHASH_GodKickUser = gMessageStringTable.getString("GodKickUser");
1786 _PREHASH_PickName = gMessageStringTable.getString("PickName");
1787 _PREHASH_TaskName = gMessageStringTable.getString("TaskName");
1788 _PREHASH_ObjectCount = gMessageStringTable.getString("ObjectCount");
1789 _PREHASH_RegionPresenceRequestByHandle = gMessageStringTable.getString("RegionPresenceRequestByHandle");
1790 _PREHASH_RezSingleAttachmentFromInv = gMessageStringTable.getString("RezSingleAttachmentFromInv");
1791 _PREHASH_ChildAgentUpdate = gMessageStringTable.getString("ChildAgentUpdate");
1792 _PREHASH_IsOwnerGroup = gMessageStringTable.getString("IsOwnerGroup");
1793 _PREHASH_AgentHeightWidth = gMessageStringTable.getString("AgentHeightWidth");
1794 _PREHASH_VerticalAngle = gMessageStringTable.getString("VerticalAngle");
1795 _PREHASH_WearableType = gMessageStringTable.getString("WearableType");
1796 _PREHASH_AggregatePermNextOwner = gMessageStringTable.getString("AggregatePermNextOwner");
1797 _PREHASH_ShowInList = gMessageStringTable.getString("ShowInList");
1798 _PREHASH_UpdateParcel = gMessageStringTable.getString("UpdateParcel");
1799 _PREHASH_SetAlwaysRun = gMessageStringTable.getString("SetAlwaysRun");
1800 _PREHASH_NVPair = gMessageStringTable.getString("NVPair");
1801 _PREHASH_SearchType = gMessageStringTable.getString("SearchType");
1802 _PREHASH_ObjectSpinStart = gMessageStringTable.getString("ObjectSpinStart");
1803 _PREHASH_UseEstateSun = gMessageStringTable.getString("UseEstateSun");
1804 _PREHASH_RegionID = gMessageStringTable.getString("RegionID");
1805 _PREHASH_AbuseRegionID = gMessageStringTable.getString("AbuseRegionID");
1806 _PREHASH_Creator = gMessageStringTable.getString("Creator");
1807 _PREHASH_ProposalText = gMessageStringTable.getString("ProposalText");
1808 _PREHASH_DirEventsReply = gMessageStringTable.getString("DirEventsReply");
1809 _PREHASH_EventInfoReply = gMessageStringTable.getString("EventInfoReply");
1810 _PREHASH_UserInfoReply = gMessageStringTable.getString("UserInfoReply");
1811 _PREHASH_PathRadiusOffset = gMessageStringTable.getString("PathRadiusOffset");
1812 _PREHASH_TextureData = gMessageStringTable.getString("TextureData");
1813 _PREHASH_ChatPass = gMessageStringTable.getString("ChatPass");
1814 _PREHASH_TargetID = gMessageStringTable.getString("TargetID");
1815 _PREHASH_DefaultPayPrice = gMessageStringTable.getString("DefaultPayPrice");
1816 _PREHASH_UserLocation = gMessageStringTable.getString("UserLocation");
1817 _PREHASH_MaxPrims = gMessageStringTable.getString("MaxPrims");
1818 _PREHASH_LandmarkID = gMessageStringTable.getString("LandmarkID");
1819 _PREHASH_InitiateDownload = gMessageStringTable.getString("InitiateDownload");
1820 _PREHASH_Name = gMessageStringTable.getString("Name");
1821 _PREHASH_OtherCleanTime = gMessageStringTable.getString("OtherCleanTime");
1822 _PREHASH_ParcelSetOtherCleanTime = gMessageStringTable.getString("ParcelSetOtherCleanTime");
1823 _PREHASH_TeleportPriceExponent = gMessageStringTable.getString("TeleportPriceExponent");
1824 _PREHASH_Gain = gMessageStringTable.getString("Gain");
1825 _PREHASH_PacketAck = gMessageStringTable.getString("PacketAck");
1826 _PREHASH_PathSkew = gMessageStringTable.getString("PathSkew");
1827 _PREHASH_SimulatorShutdownRequest = gMessageStringTable.getString("SimulatorShutdownRequest");
1828 _PREHASH_NearestLandingRegionRequest = gMessageStringTable.getString("NearestLandingRegionRequest");
1829 _PREHASH_OtherID = gMessageStringTable.getString("OtherID");
1830 _PREHASH_MemberID = gMessageStringTable.getString("MemberID");
1831 _PREHASH_MapLayerRequest = gMessageStringTable.getString("MapLayerRequest");
1832 _PREHASH_ObjectScale = gMessageStringTable.getString("ObjectScale");
1833 _PREHASH_TargetIP = gMessageStringTable.getString("TargetIP");
1834 _PREHASH_Redo = gMessageStringTable.getString("Redo");
1835 _PREHASH_MoneyBalance = gMessageStringTable.getString("MoneyBalance");
1836 _PREHASH_TrackAgent = gMessageStringTable.getString("TrackAgent");
1837 _PREHASH_MaxX = gMessageStringTable.getString("MaxX");
1838 _PREHASH_Data = gMessageStringTable.getString("Data");
1839 _PREHASH_MaxY = gMessageStringTable.getString("MaxY");
1840 _PREHASH_TextureAnim = gMessageStringTable.getString("TextureAnim");
1841 _PREHASH_ReturnIDs = gMessageStringTable.getString("ReturnIDs");
1842 _PREHASH_Date = gMessageStringTable.getString("Date");
1843 _PREHASH_AgentWearablesUpdate = gMessageStringTable.getString("AgentWearablesUpdate");
1844 _PREHASH_AgentDataUpdate = gMessageStringTable.getString("AgentDataUpdate");
1845 _PREHASH_GroupDataUpdate = gMessageStringTable.getString("GroupDataUpdate");
1846 _PREHASH_Hash = gMessageStringTable.getString("Hash");
1847 _PREHASH_AgentGroupDataUpdate = gMessageStringTable.getString("AgentGroupDataUpdate");
1848 _PREHASH_Left = gMessageStringTable.getString("Left");
1849 _PREHASH_Mask = gMessageStringTable.getString("Mask");
1850 _PREHASH_ForceMouselook = gMessageStringTable.getString("ForceMouselook");
1851 _PREHASH_Success = gMessageStringTable.getString("Success");
1852 _PREHASH_ObjectGroup = gMessageStringTable.getString("ObjectGroup");
1853 _PREHASH_SunHour = gMessageStringTable.getString("SunHour");
1854 _PREHASH_MinX = gMessageStringTable.getString("MinX");
1855 _PREHASH_ScriptSensorReply = gMessageStringTable.getString("ScriptSensorReply");
1856 _PREHASH_MinY = gMessageStringTable.getString("MinY");
1857 _PREHASH_Command = gMessageStringTable.getString("Command");
1858 _PREHASH_Desc = gMessageStringTable.getString("Desc");
1859 _PREHASH_AttachmentNeedsSave = gMessageStringTable.getString("AttachmentNeedsSave");
1860 _PREHASH_HistoryItemData = gMessageStringTable.getString("HistoryItemData");
1861 _PREHASH_AgentCachedTexture = gMessageStringTable.getString("AgentCachedTexture");
1862 _PREHASH_Subject = gMessageStringTable.getString("Subject");
1863 _PREHASH_East = gMessageStringTable.getString("East");
1864 _PREHASH_QueryReplies = gMessageStringTable.getString("QueryReplies");
1865 _PREHASH_ObjectCategory = gMessageStringTable.getString("ObjectCategory");
1866 _PREHASH_Time = gMessageStringTable.getString("Time");
1867 _PREHASH_CreateLandmarkForEvent = gMessageStringTable.getString("CreateLandmarkForEvent");
1868 _PREHASH_ParentID = gMessageStringTable.getString("ParentID");
1869 _PREHASH_Ping = gMessageStringTable.getString("Ping");
1870 _PREHASH_Perp = gMessageStringTable.getString("Perp");
1871 _PREHASH_Code = gMessageStringTable.getString("Code");
1872 _PREHASH_InvType = gMessageStringTable.getString("InvType");
1873 _PREHASH_AgentFOV = gMessageStringTable.getString("AgentFOV");
1874 _PREHASH_Audible = gMessageStringTable.getString("Audible");
1875 _PREHASH_AuctionData = gMessageStringTable.getString("AuctionData");
1876 _PREHASH_IDBlock = gMessageStringTable.getString("IDBlock");
1877 _PREHASH_West = gMessageStringTable.getString("West");
1878 _PREHASH_Undo = gMessageStringTable.getString("Undo");
1879 _PREHASH_TotalNumItems = gMessageStringTable.getString("TotalNumItems");
1880 _PREHASH_Info = gMessageStringTable.getString("Info");
1881 _PREHASH_Area = gMessageStringTable.getString("Area");
1882 _PREHASH_SimCrashed = gMessageStringTable.getString("SimCrashed");
1883 _PREHASH_Text = gMessageStringTable.getString("Text");
1884 _PREHASH_PriceGroupCreate = gMessageStringTable.getString("PriceGroupCreate");
1885 _PREHASH_ObjectShape = gMessageStringTable.getString("ObjectShape");
1886 _PREHASH_GroupRoleDataReply = gMessageStringTable.getString("GroupRoleDataReply");
1887 _PREHASH_MuteCRC = gMessageStringTable.getString("MuteCRC");
1888 _PREHASH_Size = gMessageStringTable.getString("Size");
1889 _PREHASH_FromAddress = gMessageStringTable.getString("FromAddress");
1890 _PREHASH_Body = gMessageStringTable.getString("Body");
1891 _PREHASH_FileData = gMessageStringTable.getString("FileData");
1892 _PREHASH_List = gMessageStringTable.getString("List");
1893 _PREHASH_KickUser = gMessageStringTable.getString("KickUser");
1894 _PREHASH_OtherPrims = gMessageStringTable.getString("OtherPrims");
1895 _PREHASH_RunTime = gMessageStringTable.getString("RunTime");
1896 _PREHASH_GrantUserRights = gMessageStringTable.getString("GrantUserRights");
1897 _PREHASH_RpcScriptRequestInboundForward = gMessageStringTable.getString("RpcScriptRequestInboundForward");
1898 _PREHASH_More = gMessageStringTable.getString("More");
1899 _PREHASH_Majority = gMessageStringTable.getString("Majority");
1900 _PREHASH_MetersTraveled = gMessageStringTable.getString("MetersTraveled");
1901 _PREHASH_Stat = gMessageStringTable.getString("Stat");
1902 _PREHASH_SoundID = gMessageStringTable.getString("SoundID");
1903 _PREHASH_Item = gMessageStringTable.getString("Item");
1904 _PREHASH_User = gMessageStringTable.getString("User");
1905 _PREHASH_Prey = gMessageStringTable.getString("Prey");
1906 _PREHASH_RayStart = gMessageStringTable.getString("RayStart");
1907 _PREHASH_UsecSinceStart = gMessageStringTable.getString("UsecSinceStart");
1908 _PREHASH_ParcelData = gMessageStringTable.getString("ParcelData");
1909 _PREHASH_CameraUpAxis = gMessageStringTable.getString("CameraUpAxis");
1910 _PREHASH_ScriptDialog = gMessageStringTable.getString("ScriptDialog");
1911 _PREHASH_MasterParcelData = gMessageStringTable.getString("MasterParcelData");
1912 _PREHASH_Invalid = gMessageStringTable.getString("Invalid");
1913 _PREHASH_ProfileCurve = gMessageStringTable.getString("ProfileCurve");
1914 _PREHASH_ParcelAccessListUpdate = gMessageStringTable.getString("ParcelAccessListUpdate");
1915 _PREHASH_MuteListUpdate = gMessageStringTable.getString("MuteListUpdate");
1916 _PREHASH_SendPacket = gMessageStringTable.getString("SendPacket");
1917 _PREHASH_SendXferPacket = gMessageStringTable.getString("SendXferPacket");
1918 _PREHASH_RegionDenyIdentified = gMessageStringTable.getString("RegionDenyIdentified");
1919 _PREHASH_NotecardItemID = gMessageStringTable.getString("NotecardItemID");
1920 _PREHASH_LastName = gMessageStringTable.getString("LastName");
1921 _PREHASH_From = gMessageStringTable.getString("From");
1922 _PREHASH_RoleChange = gMessageStringTable.getString("RoleChange");
1923 _PREHASH_Port = gMessageStringTable.getString("Port");
1924 _PREHASH_MemberTitle = gMessageStringTable.getString("MemberTitle");
1925 _PREHASH_LogParcelChanges = gMessageStringTable.getString("LogParcelChanges");
1926 _PREHASH_AgentCachedTextureResponse = gMessageStringTable.getString("AgentCachedTextureResponse");
1927 _PREHASH_DeRezObject = gMessageStringTable.getString("DeRezObject");
1928 _PREHASH_IsTemporary = gMessageStringTable.getString("IsTemporary");
1929 _PREHASH_InsigniaID = gMessageStringTable.getString("InsigniaID");
1930 _PREHASH_CheckFlags = gMessageStringTable.getString("CheckFlags");
1931 _PREHASH_EventID = gMessageStringTable.getString("EventID");
1932 _PREHASH_Selected = gMessageStringTable.getString("Selected");
1933 _PREHASH_FromAgentId = gMessageStringTable.getString("FromAgentId");
1934 _PREHASH_Type = gMessageStringTable.getString("Type");
1935 _PREHASH_ChatType = gMessageStringTable.getString("ChatType");
1936 _PREHASH_ReportData = gMessageStringTable.getString("ReportData");
1937 _PREHASH_RequestBlock = gMessageStringTable.getString("RequestBlock");
1938 _PREHASH_GrantData = gMessageStringTable.getString("GrantData");
1939 _PREHASH_DetachAttachmentIntoInv = gMessageStringTable.getString("DetachAttachmentIntoInv");
1940 _PREHASH_ParcelDisableObjects = gMessageStringTable.getString("ParcelDisableObjects");
1941 _PREHASH_Sections = gMessageStringTable.getString("Sections");
1942 _PREHASH_GodLevel = gMessageStringTable.getString("GodLevel");
1943 _PREHASH_PayPriceReply = gMessageStringTable.getString("PayPriceReply");
1944 _PREHASH_QueryID = gMessageStringTable.getString("QueryID");
1945 _PREHASH_CameraEyeOffset = gMessageStringTable.getString("CameraEyeOffset");
1946 _PREHASH_AgentPosition = gMessageStringTable.getString("AgentPosition");
1947 _PREHASH_GrabPosition = gMessageStringTable.getString("GrabPosition");
1948 _PREHASH_OnlineNotification = gMessageStringTable.getString("OnlineNotification");
1949 _PREHASH_OfflineNotification = gMessageStringTable.getString("OfflineNotification");
1950 _PREHASH_SendPostcard = gMessageStringTable.getString("SendPostcard");
1951 _PREHASH_RequestFlags = gMessageStringTable.getString("RequestFlags");
1952 _PREHASH_GroupAccountSummaryRequest = gMessageStringTable.getString("GroupAccountSummaryRequest");
1953 _PREHASH_GroupVoteHistoryRequest = gMessageStringTable.getString("GroupVoteHistoryRequest");
1954 _PREHASH_ParamValue = gMessageStringTable.getString("ParamValue");
1955 _PREHASH_MaxAgents = gMessageStringTable.getString("MaxAgents");
1956 _PREHASH_CreateNewOutfitAttachments = gMessageStringTable.getString("CreateNewOutfitAttachments");
1957 _PREHASH_RegionHandle = gMessageStringTable.getString("RegionHandle");
1958 _PREHASH_TeleportProgress = gMessageStringTable.getString("TeleportProgress");
1959 _PREHASH_AgentQuitCopy = gMessageStringTable.getString("AgentQuitCopy");
1960 _PREHASH_AvatarInterestsUpdate = gMessageStringTable.getString("AvatarInterestsUpdate");
1961 _PREHASH_GroupNoticeID = gMessageStringTable.getString("GroupNoticeID");
1962 _PREHASH_ParcelName = gMessageStringTable.getString("ParcelName");
1963 _PREHASH_PriceObjectRent = gMessageStringTable.getString("PriceObjectRent");
1964 _PREHASH_OfferCallingCard = gMessageStringTable.getString("OfferCallingCard");
1965 _PREHASH_AcceptCallingCard = gMessageStringTable.getString("AcceptCallingCard");
1966 _PREHASH_DeclineCallingCard = gMessageStringTable.getString("DeclineCallingCard");
1967 _PREHASH_AgentAccess = gMessageStringTable.getString("AgentAccess");
1968 _PREHASH_DataHomeLocationReply = gMessageStringTable.getString("DataHomeLocationReply");
1969 _PREHASH_EventLocationReply = gMessageStringTable.getString("EventLocationReply");
1970 _PREHASH_TerseDateID = gMessageStringTable.getString("TerseDateID");
1971 _PREHASH_ObjectOwner = gMessageStringTable.getString("ObjectOwner");
1972 _PREHASH_AssetID = gMessageStringTable.getString("AssetID");
1973 _PREHASH_AlertMessage = gMessageStringTable.getString("AlertMessage");
1974 _PREHASH_AgentAlertMessage = gMessageStringTable.getString("AgentAlertMessage");
1975 _PREHASH_EstateOwnerMessage = gMessageStringTable.getString("EstateOwnerMessage");
1976 _PREHASH_ParcelMediaCommandMessage = gMessageStringTable.getString("ParcelMediaCommandMessage");
1977 _PREHASH_Auction = gMessageStringTable.getString("Auction");
1978 _PREHASH_Category = gMessageStringTable.getString("Category");
1979 _PREHASH_FilePath = gMessageStringTable.getString("FilePath");
1980 _PREHASH_ItemFlags = gMessageStringTable.getString("ItemFlags");
1981 _PREHASH_Invoice = gMessageStringTable.getString("Invoice");
1982 _PREHASH_IntervalDays = gMessageStringTable.getString("IntervalDays");
1983 _PREHASH_PathScaleX = gMessageStringTable.getString("PathScaleX");
1984 _PREHASH_FromTaskID = gMessageStringTable.getString("FromTaskID");
1985 _PREHASH_PathScaleY = gMessageStringTable.getString("PathScaleY");
1986 _PREHASH_TimeInfo = gMessageStringTable.getString("TimeInfo");
1987 _PREHASH_PublicCount = gMessageStringTable.getString("PublicCount");
1988 _PREHASH_ParcelJoin = gMessageStringTable.getString("ParcelJoin");
1989 _PREHASH_GroupRolesCount = gMessageStringTable.getString("GroupRolesCount");
1990 _PREHASH_SimulatorBlock = gMessageStringTable.getString("SimulatorBlock");
1991 _PREHASH_GroupID = gMessageStringTable.getString("GroupID");
1992 _PREHASH_AgentVel = gMessageStringTable.getString("AgentVel");
1993 _PREHASH_RequestImage = gMessageStringTable.getString("RequestImage");
1994 _PREHASH_NetStats = gMessageStringTable.getString("NetStats");
1995 _PREHASH_AgentPos = gMessageStringTable.getString("AgentPos");
1996 _PREHASH_AgentSit = gMessageStringTable.getString("AgentSit");
1997 _PREHASH_Material = gMessageStringTable.getString("Material");
1998 _PREHASH_ObjectDeGrab = gMessageStringTable.getString("ObjectDeGrab");
1999 _PREHASH_VelocityInterpolateOff = gMessageStringTable.getString("VelocityInterpolateOff");
2000 _PREHASH_AuthorizedBuyerID = gMessageStringTable.getString("AuthorizedBuyerID");
2001 _PREHASH_AvatarPropertiesReply = gMessageStringTable.getString("AvatarPropertiesReply");
2002 _PREHASH_GroupProfileReply = gMessageStringTable.getString("GroupProfileReply");
2003 _PREHASH_SimOwner = gMessageStringTable.getString("SimOwner");
2004 _PREHASH_SalePrice = gMessageStringTable.getString("SalePrice");
2005 _PREHASH_Animation = gMessageStringTable.getString("Animation");
2006 _PREHASH_OwnerID = gMessageStringTable.getString("OwnerID");
2007 _PREHASH_NearestLandingRegionUpdated = gMessageStringTable.getString("NearestLandingRegionUpdated");
2008 _PREHASH_PassToAgent = gMessageStringTable.getString("PassToAgent");
2009 _PREHASH_PreyAgent = gMessageStringTable.getString("PreyAgent");
2010 _PREHASH_SimStats = gMessageStringTable.getString("SimStats");
2011 _PREHASH_LogoutReply = gMessageStringTable.getString("LogoutReply");
2012 _PREHASH_FeatureDisabled = gMessageStringTable.getString("FeatureDisabled");
2013 _PREHASH_PhysicalAvatarEventList = gMessageStringTable.getString("PhysicalAvatarEventList");
2014 _PREHASH_ObjectLocalID = gMessageStringTable.getString("ObjectLocalID");
2015 _PREHASH_Dropped = gMessageStringTable.getString("Dropped");
2016 _PREHASH_WebProfilesDisabled = gMessageStringTable.getString("WebProfilesDisabled");
2017 _PREHASH_Destination = gMessageStringTable.getString("Destination");
2018 _PREHASH_MasterID = gMessageStringTable.getString("MasterID");
2019 _PREHASH_TransferData = gMessageStringTable.getString("TransferData");
2020 _PREHASH_WantToMask = gMessageStringTable.getString("WantToMask");
2021 _PREHASH_ParcelSelectObjects = gMessageStringTable.getString("ParcelSelectObjects");
2022 _PREHASH_ExtraParams = gMessageStringTable.getString("ExtraParams");
2023 _PREHASH_CreatorID = gMessageStringTable.getString("CreatorID");
2024 _PREHASH_Summary = gMessageStringTable.getString("Summary");
2025 _PREHASH_BuyObjectInventory = gMessageStringTable.getString("BuyObjectInventory");
2026 _PREHASH_FetchInventory = gMessageStringTable.getString("FetchInventory");
2027 _PREHASH_InventoryID = gMessageStringTable.getString("InventoryID");
2028 _PREHASH_PacketNumber = gMessageStringTable.getString("PacketNumber");
2029 _PREHASH_SetFollowCamProperties = gMessageStringTable.getString("SetFollowCamProperties");
2030 _PREHASH_ClearFollowCamProperties = gMessageStringTable.getString("ClearFollowCamProperties");
2031 _PREHASH_SequenceID = gMessageStringTable.getString("SequenceID");
2032 _PREHASH_DataServerLogout = gMessageStringTable.getString("DataServerLogout");
2033 _PREHASH_NameValue = gMessageStringTable.getString("NameValue");
2034 _PREHASH_PathShearX = gMessageStringTable.getString("PathShearX");
2035 _PREHASH_PathShearY = gMessageStringTable.getString("PathShearY");
2036 _PREHASH_Velocity = gMessageStringTable.getString("Velocity");
2037 _PREHASH_SecPerYear = gMessageStringTable.getString("SecPerYear");
2038 _PREHASH_FirstName = gMessageStringTable.getString("FirstName");
2039 _PREHASH_AttachedSoundGainChange = gMessageStringTable.getString("AttachedSoundGainChange");
2040 _PREHASH_LocationID = gMessageStringTable.getString("LocationID");
2041 _PREHASH_Running = gMessageStringTable.getString("Running");
2042 _PREHASH_AgentThrottle = gMessageStringTable.getString("AgentThrottle");
2043 _PREHASH_NeighborList = gMessageStringTable.getString("NeighborList");
2044 _PREHASH_PathTaperX = gMessageStringTable.getString("PathTaperX");
2045 _PREHASH_PathTaperY = gMessageStringTable.getString("PathTaperY");
2046 _PREHASH_AgentRelated = gMessageStringTable.getString("AgentRelated");
2047 _PREHASH_GranterBlock = gMessageStringTable.getString("GranterBlock");
2048 _PREHASH_UseCachedMuteList = gMessageStringTable.getString("UseCachedMuteList");
2049 _PREHASH_FailStats = gMessageStringTable.getString("FailStats");
2050 _PREHASH_Tempfile = gMessageStringTable.getString("Tempfile");
2051 _PREHASH_BuyerID = gMessageStringTable.getString("BuyerID");
2052 _PREHASH_DirPeopleReply = gMessageStringTable.getString("DirPeopleReply");
2053 _PREHASH_TransferInfo = gMessageStringTable.getString("TransferInfo");
2054 _PREHASH_AvatarPickerRequestBackend = gMessageStringTable.getString("AvatarPickerRequestBackend");
2055 _PREHASH_AvatarPropertiesRequestBackend = gMessageStringTable.getString("AvatarPropertiesRequestBackend");
2056 _PREHASH_UpdateData = gMessageStringTable.getString("UpdateData");
2057 _PREHASH_SimFPS = gMessageStringTable.getString("SimFPS");
2058 _PREHASH_ReporterID = gMessageStringTable.getString("ReporterID");
2059 _PREHASH_ButtonLabel = gMessageStringTable.getString("ButtonLabel");
2060 _PREHASH_GranterID = gMessageStringTable.getString("GranterID");
2061 _PREHASH_WantToText = gMessageStringTable.getString("WantToText");
2062 _PREHASH_ReportType = gMessageStringTable.getString("ReportType");
2063 _PREHASH_SimulatorReady = gMessageStringTable.getString("SimulatorReady");
2064 _PREHASH_DataBlock = gMessageStringTable.getString("DataBlock");
2065 _PREHASH_AnimationSourceList = gMessageStringTable.getString("AnimationSourceList");
2066 _PREHASH_SubscribeLoad = gMessageStringTable.getString("SubscribeLoad");
2067 _PREHASH_UnsubscribeLoad = gMessageStringTable.getString("UnsubscribeLoad");
2068 _PREHASH_Packet = gMessageStringTable.getString("Packet");
2069 _PREHASH_UndoLand = gMessageStringTable.getString("UndoLand");
2070 _PREHASH_SimAccess = gMessageStringTable.getString("SimAccess");
2071 _PREHASH_AbuserID = gMessageStringTable.getString("AbuserID");
2072 _PREHASH_MembershipFee = gMessageStringTable.getString("MembershipFee");
2073 _PREHASH_InviteGroupResponse = gMessageStringTable.getString("InviteGroupResponse");
2074 _PREHASH_CreateInventoryFolder = gMessageStringTable.getString("CreateInventoryFolder");
2075 _PREHASH_UpdateInventoryFolder = gMessageStringTable.getString("UpdateInventoryFolder");
2076 _PREHASH_MoveInventoryFolder = gMessageStringTable.getString("MoveInventoryFolder");
2077 _PREHASH_RemoveInventoryFolder = gMessageStringTable.getString("RemoveInventoryFolder");
2078 _PREHASH_MoneyData = gMessageStringTable.getString("MoneyData");
2079 _PREHASH_ObjectDeselect = gMessageStringTable.getString("ObjectDeselect");
2080 _PREHASH_NewAssetID = gMessageStringTable.getString("NewAssetID");
2081 _PREHASH_ObjectAdd = gMessageStringTable.getString("ObjectAdd");
2082 _PREHASH_RayEndIsIntersection = gMessageStringTable.getString("RayEndIsIntersection");
2083 _PREHASH_CompleteAuction = gMessageStringTable.getString("CompleteAuction");
2084 _PREHASH_CircuitCode = gMessageStringTable.getString("CircuitCode");
2085 _PREHASH_AgentMovementComplete = gMessageStringTable.getString("AgentMovementComplete");
2086 _PREHASH_ViewerIP = gMessageStringTable.getString("ViewerIP");
2087 _PREHASH_Header = gMessageStringTable.getString("Header");
2088 _PREHASH_GestureFlags = gMessageStringTable.getString("GestureFlags");
2089 _PREHASH_XferID = gMessageStringTable.getString("XferID");
2090 _PREHASH_StatValue = gMessageStringTable.getString("StatValue");
2091 _PREHASH_TaskID = gMessageStringTable.getString("TaskID");
2092 _PREHASH_PickID = gMessageStringTable.getString("PickID");
2093 _PREHASH_RayEnd = gMessageStringTable.getString("RayEnd");
2094 _PREHASH_Throttles = gMessageStringTable.getString("Throttles");
2095 _PREHASH_RebakeAvatarTextures = gMessageStringTable.getString("RebakeAvatarTextures");
2096 _PREHASH_UpAxis = gMessageStringTable.getString("UpAxis");
2097 _PREHASH_AgentTextures = gMessageStringTable.getString("AgentTextures");
2098 _PREHASH_NotecardData = gMessageStringTable.getString("NotecardData");
2099 _PREHASH_Radius = gMessageStringTable.getString("Radius");
2100 _PREHASH_OffCircuit = gMessageStringTable.getString("OffCircuit");
2101 _PREHASH_Access = gMessageStringTable.getString("Access");
2102 _PREHASH_TitleRoleID = gMessageStringTable.getString("TitleRoleID");
2103 _PREHASH_SquareMetersCredit = gMessageStringTable.getString("SquareMetersCredit");
2104 _PREHASH_Filename = gMessageStringTable.getString("Filename");
2105 _PREHASH_ClassifiedInfoRequest = gMessageStringTable.getString("ClassifiedInfoRequest");
2106 _PREHASH_ParcelInfoRequest = gMessageStringTable.getString("ParcelInfoRequest");
2107 _PREHASH_ParcelObjectOwnersRequest = gMessageStringTable.getString("ParcelObjectOwnersRequest");
2108 _PREHASH_TeleportLandmarkRequest = gMessageStringTable.getString("TeleportLandmarkRequest");
2109 _PREHASH_EventInfoRequest = gMessageStringTable.getString("EventInfoRequest");
2110 _PREHASH_MoneyBalanceRequest = gMessageStringTable.getString("MoneyBalanceRequest");
2111 _PREHASH_GroupMembersRequest = gMessageStringTable.getString("GroupMembersRequest");
2112 _PREHASH_GroupRoleMembersRequest = gMessageStringTable.getString("GroupRoleMembersRequest");
2113 _PREHASH_ChatFromSimulator = gMessageStringTable.getString("ChatFromSimulator");
2114 _PREHASH_OldFolderID = gMessageStringTable.getString("OldFolderID");
2115 _PREHASH_UserInfoRequest = gMessageStringTable.getString("UserInfoRequest");
2116 _PREHASH_TextureID = gMessageStringTable.getString("TextureID");
2117 _PREHASH_ProfileURL = gMessageStringTable.getString("ProfileURL");
2118 _PREHASH_Handle = gMessageStringTable.getString("Handle");
2119 _PREHASH_ButtonIndex = gMessageStringTable.getString("ButtonIndex");
2120 _PREHASH_GetScriptRunning = gMessageStringTable.getString("GetScriptRunning");
2121 _PREHASH_SetScriptRunning = gMessageStringTable.getString("SetScriptRunning");
2122 _PREHASH_Health = gMessageStringTable.getString("Health");
2123 _PREHASH_CircuitInfo = gMessageStringTable.getString("CircuitInfo");
2124 _PREHASH_ObjectBuy = gMessageStringTable.getString("ObjectBuy");
2125 _PREHASH_ProfileEnd = gMessageStringTable.getString("ProfileEnd");
2126 _PREHASH_Effect = gMessageStringTable.getString("Effect");
2127 _PREHASH_TestMessage = gMessageStringTable.getString("TestMessage");
2128 _PREHASH_ScriptMailRegistration = gMessageStringTable.getString("ScriptMailRegistration");
2129 _PREHASH_AgentSetAppearance = gMessageStringTable.getString("AgentSetAppearance");
2130 _PREHASH_AvatarAppearance = gMessageStringTable.getString("AvatarAppearance");
2131 _PREHASH_RegionData = gMessageStringTable.getString("RegionData");
2132 _PREHASH_RequestingRegionData = gMessageStringTable.getString("RequestingRegionData");
2133 _PREHASH_LandingRegionData = gMessageStringTable.getString("LandingRegionData");
2134 _PREHASH_SitTransform = gMessageStringTable.getString("SitTransform");
2135 _PREHASH_TerrainBase0 = gMessageStringTable.getString("TerrainBase0");
2136 _PREHASH_SkillsMask = gMessageStringTable.getString("SkillsMask");
2137 _PREHASH_AtAxis = gMessageStringTable.getString("AtAxis");
2138 _PREHASH_TerrainBase1 = gMessageStringTable.getString("TerrainBase1");
2139 _PREHASH_Reason = gMessageStringTable.getString("Reason");
2140 _PREHASH_TerrainBase2 = gMessageStringTable.getString("TerrainBase2");
2141 _PREHASH_TerrainBase3 = gMessageStringTable.getString("TerrainBase3");
2142 _PREHASH_Params = gMessageStringTable.getString("Params");
2143 _PREHASH_PingID = gMessageStringTable.getString("PingID");
2144 _PREHASH_Change = gMessageStringTable.getString("Change");
2145 _PREHASH_Height = gMessageStringTable.getString("Height");
2146 _PREHASH_Region = gMessageStringTable.getString("Region");
2147 _PREHASH_TelehubInfo = gMessageStringTable.getString("TelehubInfo");
2148 _PREHASH_StateSave = gMessageStringTable.getString("StateSave");
2149 _PREHASH_RoleData = gMessageStringTable.getString("RoleData");
2150 _PREHASH_AgentAnimation = gMessageStringTable.getString("AgentAnimation");
2151 _PREHASH_AvatarAnimation = gMessageStringTable.getString("AvatarAnimation");
2152 _PREHASH_LogDwellTime = gMessageStringTable.getString("LogDwellTime");
2153 _PREHASH_ParcelGodMarkAsContent = gMessageStringTable.getString("ParcelGodMarkAsContent");
2154 _PREHASH_UsePhysics = gMessageStringTable.getString("UsePhysics");
2155 _PREHASH_RegionDenyTransacted = gMessageStringTable.getString("RegionDenyTransacted");
2156 _PREHASH_JointType = gMessageStringTable.getString("JointType");
2157 _PREHASH_ObjectTaxEstimate = gMessageStringTable.getString("ObjectTaxEstimate");
2158 _PREHASH_LightTaxEstimate = gMessageStringTable.getString("LightTaxEstimate");
2159 _PREHASH_LandTaxEstimate = gMessageStringTable.getString("LandTaxEstimate");
2160 _PREHASH_TeleportLandingStatusChanged = gMessageStringTable.getString("TeleportLandingStatusChanged");
2161 _PREHASH_GroupTaxEstimate = gMessageStringTable.getString("GroupTaxEstimate");
2162 _PREHASH_AvgViewerFPS = gMessageStringTable.getString("AvgViewerFPS");
2163 _PREHASH_Buttons = gMessageStringTable.getString("Buttons");
2164 _PREHASH_Sender = gMessageStringTable.getString("Sender");
2165 _PREHASH_Dialog = gMessageStringTable.getString("Dialog");
2166 _PREHASH_TargetData = gMessageStringTable.getString("TargetData");
2167 _PREHASH_DestID = gMessageStringTable.getString("DestID");
2168 _PREHASH_PricePublicObjectDelete = gMessageStringTable.getString("PricePublicObjectDelete");
2169 _PREHASH_ObjectDelete = gMessageStringTable.getString("ObjectDelete");
2170 _PREHASH_Delete = gMessageStringTable.getString("Delete");
2171 _PREHASH_EventGodDelete = gMessageStringTable.getString("EventGodDelete");
2172 _PREHASH_LastTaxDate = gMessageStringTable.getString("LastTaxDate");
2173 _PREHASH_MapImageID = gMessageStringTable.getString("MapImageID");
2174 _PREHASH_EndDateTime = gMessageStringTable.getString("EndDateTime");
2175 _PREHASH_TerrainDetail0 = gMessageStringTable.getString("TerrainDetail0");
2176 _PREHASH_TerrainDetail1 = gMessageStringTable.getString("TerrainDetail1");
2177 _PREHASH_TerrainDetail2 = gMessageStringTable.getString("TerrainDetail2");
2178 _PREHASH_TerrainDetail3 = gMessageStringTable.getString("TerrainDetail3");
2179 _PREHASH_Offset = gMessageStringTable.getString("Offset");
2180 _PREHASH_ObjectDelink = gMessageStringTable.getString("ObjectDelink");
2181 _PREHASH_TargetObject = gMessageStringTable.getString("TargetObject");
2182 _PREHASH_IsEstateManager = gMessageStringTable.getString("IsEstateManager");
2183 _PREHASH_CancelAuction = gMessageStringTable.getString("CancelAuction");
2184 _PREHASH_ObjectDetach = gMessageStringTable.getString("ObjectDetach");
2185 _PREHASH_Compressed = gMessageStringTable.getString("Compressed");
2186 _PREHASH_PathBegin = gMessageStringTable.getString("PathBegin");
2187 _PREHASH_BypassRaycast = gMessageStringTable.getString("BypassRaycast");
2188 _PREHASH_WinnerID = gMessageStringTable.getString("WinnerID");
2189 _PREHASH_ChannelType = gMessageStringTable.getString("ChannelType");
2190 _PREHASH_NonExemptMembers = gMessageStringTable.getString("NonExemptMembers");
2191 _PREHASH_Agents = gMessageStringTable.getString("Agents");
2192 _PREHASH_MemberData = gMessageStringTable.getString("MemberData");
2193 _PREHASH_ToGroupID = gMessageStringTable.getString("ToGroupID");
2194 _PREHASH_ImageNotInDatabase = gMessageStringTable.getString("ImageNotInDatabase");
2195 _PREHASH_StartDate = gMessageStringTable.getString("StartDate");
2196 _PREHASH_AnimID = gMessageStringTable.getString("AnimID");
2197 _PREHASH_Serial = gMessageStringTable.getString("Serial");
2198 _PREHASH_AbuseRegionName = gMessageStringTable.getString("AbuseRegionName");
2199 _PREHASH_ModifyLand = gMessageStringTable.getString("ModifyLand");
2200 _PREHASH_Digest = gMessageStringTable.getString("Digest");
2201 _PREHASH_Victim = gMessageStringTable.getString("Victim");
2202 _PREHASH_Script = gMessageStringTable.getString("Script");
2203 _PREHASH_PickInfoReply = gMessageStringTable.getString("PickInfoReply");
2204 _PREHASH_MoneyBalanceReply = gMessageStringTable.getString("MoneyBalanceReply");
2205 _PREHASH_RoutedMoneyBalanceReply = gMessageStringTable.getString("RoutedMoneyBalanceReply");
2206 _PREHASH_RoleID = gMessageStringTable.getString("RoleID");
2207 _PREHASH_RegionInfo = gMessageStringTable.getString("RegionInfo");
2208 _PREHASH_GodUpdateRegionInfo = gMessageStringTable.getString("GodUpdateRegionInfo");
2209 _PREHASH_StartAnim = gMessageStringTable.getString("StartAnim");
2210 _PREHASH_Action = gMessageStringTable.getString("Action");
2211 _PREHASH_Location = gMessageStringTable.getString("Location");
2212 _PREHASH_Rights = gMessageStringTable.getString("Rights");
2213 _PREHASH_SearchDir = gMessageStringTable.getString("SearchDir");
2214 _PREHASH_TransferRequest = gMessageStringTable.getString("TransferRequest");
2215 _PREHASH_ScriptSensorRequest = gMessageStringTable.getString("ScriptSensorRequest");
2216 _PREHASH_MoneyTransferRequest = gMessageStringTable.getString("MoneyTransferRequest");
2217 _PREHASH_EjectGroupMemberRequest = gMessageStringTable.getString("EjectGroupMemberRequest");
2218 _PREHASH_SkillsText = gMessageStringTable.getString("SkillsText");
2219 _PREHASH_Resent = gMessageStringTable.getString("Resent");
2220 _PREHASH_Center = gMessageStringTable.getString("Center");
2221 _PREHASH_SharedData = gMessageStringTable.getString("SharedData");
2222 _PREHASH_PSBlock = gMessageStringTable.getString("PSBlock");
2223 _PREHASH_UUIDNameBlock = gMessageStringTable.getString("UUIDNameBlock");
2224 _PREHASH_GroupTitleUpdate = gMessageStringTable.getString("GroupTitleUpdate");
2225 _PREHASH_Method = gMessageStringTable.getString("Method");
2226 _PREHASH_TouchName = gMessageStringTable.getString("TouchName");
2227 _PREHASH_UpdateType = gMessageStringTable.getString("UpdateType");
2228 _PREHASH_KickedFromEstateID = gMessageStringTable.getString("KickedFromEstateID");
2229 _PREHASH_CandidateID = gMessageStringTable.getString("CandidateID");
2230 _PREHASH_ParamData = gMessageStringTable.getString("ParamData");
2231 _PREHASH_GodlikeMessage = gMessageStringTable.getString("GodlikeMessage");
2232 _PREHASH_SystemMessage = gMessageStringTable.getString("SystemMessage");
2233 _PREHASH_BodyRotation = gMessageStringTable.getString("BodyRotation");
2234 _PREHASH_SearchRegions = gMessageStringTable.getString("SearchRegions");
2235 _PREHASH_AnimationData = gMessageStringTable.getString("AnimationData");
2236 _PREHASH_StatID = gMessageStringTable.getString("StatID");
2237 _PREHASH_ItemID = gMessageStringTable.getString("ItemID");
2238 _PREHASH_ScriptDialogReply = gMessageStringTable.getString("ScriptDialogReply");
2239 _PREHASH_RegionIDAndHandleReply = gMessageStringTable.getString("RegionIDAndHandleReply");
2240 _PREHASH_CameraAtOffset = gMessageStringTable.getString("CameraAtOffset");
2241 _PREHASH_VoteID = gMessageStringTable.getString("VoteID");
2242 _PREHASH_ParcelGodForceOwner = gMessageStringTable.getString("ParcelGodForceOwner");
2243 _PREHASH_Filter = gMessageStringTable.getString("Filter");
2244 _PREHASH_InviteData = gMessageStringTable.getString("InviteData");
2245 _PREHASH_PCode = gMessageStringTable.getString("PCode");
2246 _PREHASH_SearchPos = gMessageStringTable.getString("SearchPos");
2247 _PREHASH_PreyID = gMessageStringTable.getString("PreyID");
2248 _PREHASH_TerrainLowerLimit = gMessageStringTable.getString("TerrainLowerLimit");
2249 _PREHASH_EventFlags = gMessageStringTable.getString("EventFlags");
2250 _PREHASH_TallyVotes = gMessageStringTable.getString("TallyVotes");
2251 _PREHASH_Result = gMessageStringTable.getString("Result");
2252 _PREHASH_LookAt = gMessageStringTable.getString("LookAt");
2253 _PREHASH_SearchOrder = gMessageStringTable.getString("SearchOrder");
2254 _PREHASH_PayButton = gMessageStringTable.getString("PayButton");
2255 _PREHASH_SelfCount = gMessageStringTable.getString("SelfCount");
2256 _PREHASH_PacketCount = gMessageStringTable.getString("PacketCount");
2257 _PREHASH_ParcelBuyPass = gMessageStringTable.getString("ParcelBuyPass");
2258 _PREHASH_OldItemID = gMessageStringTable.getString("OldItemID");
2259 _PREHASH_RegionPort = gMessageStringTable.getString("RegionPort");
2260 _PREHASH_PriceEnergyUnit = gMessageStringTable.getString("PriceEnergyUnit");
2261 _PREHASH_Bitmap = gMessageStringTable.getString("Bitmap");
2262 _PREHASH_CacheMissType = gMessageStringTable.getString("CacheMissType");
2263 _PREHASH_VFileID = gMessageStringTable.getString("VFileID");
2264 _PREHASH_GroupInsigniaID = gMessageStringTable.getString("GroupInsigniaID");
2265 _PREHASH_Online = gMessageStringTable.getString("Online");
2266 _PREHASH_KickFlags = gMessageStringTable.getString("KickFlags");
2267 _PREHASH_CovenantID = gMessageStringTable.getString("CovenantID");
2268 _PREHASH_SysCPU = gMessageStringTable.getString("SysCPU");
2269 _PREHASH_EMail = gMessageStringTable.getString("EMail");
2270 _PREHASH_AggregatePermTextures = gMessageStringTable.getString("AggregatePermTextures");
2271 _PREHASH_ChatChannel = gMessageStringTable.getString("ChatChannel");
2272 _PREHASH_ReturnID = gMessageStringTable.getString("ReturnID");
2273 _PREHASH_ObjectAttach = gMessageStringTable.getString("ObjectAttach");
2274 _PREHASH_TargetPort = gMessageStringTable.getString("TargetPort");
2275 _PREHASH_ObjectSpinStop = gMessageStringTable.getString("ObjectSpinStop");
2276 _PREHASH_FullID = gMessageStringTable.getString("FullID");
2277 _PREHASH_ActivateGroup = gMessageStringTable.getString("ActivateGroup");
2278 _PREHASH_SysGPU = gMessageStringTable.getString("SysGPU");
2279 _PREHASH_AvatarInterestsReply = gMessageStringTable.getString("AvatarInterestsReply");
2280 _PREHASH_StartLure = gMessageStringTable.getString("StartLure");
2281 _PREHASH_SysRAM = gMessageStringTable.getString("SysRAM");
2282 _PREHASH_ObjectPosition = gMessageStringTable.getString("ObjectPosition");
2283 _PREHASH_SitPosition = gMessageStringTable.getString("SitPosition");
2284 _PREHASH_StartTime = gMessageStringTable.getString("StartTime");
2285 _PREHASH_BornOn = gMessageStringTable.getString("BornOn");
2286 _PREHASH_CameraCollidePlane = gMessageStringTable.getString("CameraCollidePlane");
2287 _PREHASH_EconomyDataRequest = gMessageStringTable.getString("EconomyDataRequest");
2288 _PREHASH_TeleportLureRequest = gMessageStringTable.getString("TeleportLureRequest");
2289 _PREHASH_FolderID = gMessageStringTable.getString("FolderID");
2290 _PREHASH_RegionHandleRequest = gMessageStringTable.getString("RegionHandleRequest");
2291 _PREHASH_ScriptDataRequest = gMessageStringTable.getString("ScriptDataRequest");
2292 _PREHASH_GroupRoleDataRequest = gMessageStringTable.getString("GroupRoleDataRequest");
2293 _PREHASH_GroupTitlesRequest = gMessageStringTable.getString("GroupTitlesRequest");
2294 _PREHASH_AgentWearablesRequest = gMessageStringTable.getString("AgentWearablesRequest");
2295 _PREHASH_MapBlockRequest = gMessageStringTable.getString("MapBlockRequest");
2296 _PREHASH_LureID = gMessageStringTable.getString("LureID");
2297 _PREHASH_CopyCenters = gMessageStringTable.getString("CopyCenters");
2298 _PREHASH_ParamList = gMessageStringTable.getString("ParamList");
2299 _PREHASH_InventorySerial = gMessageStringTable.getString("InventorySerial");
2300 _PREHASH_EdgeDataPacket = gMessageStringTable.getString("EdgeDataPacket");
2301 _PREHASH_AvatarPickerReply = gMessageStringTable.getString("AvatarPickerReply");
2302 _PREHASH_ParcelDwellReply = gMessageStringTable.getString("ParcelDwellReply");
2303 _PREHASH_IsForSale = gMessageStringTable.getString("IsForSale");
2304 _PREHASH_MuteID = gMessageStringTable.getString("MuteID");
2305 _PREHASH_MeanCollisionAlert = gMessageStringTable.getString("MeanCollisionAlert");
2306 _PREHASH_CanAcceptTasks = gMessageStringTable.getString("CanAcceptTasks");
2307 _PREHASH_ItemData = gMessageStringTable.getString("ItemData");
2308 _PREHASH_AnimationList = gMessageStringTable.getString("AnimationList");
2309 _PREHASH_Reputation = gMessageStringTable.getString("Reputation");
2310 _PREHASH_IntValue = gMessageStringTable.getString("IntValue");
2311 _PREHASH_TargetType = gMessageStringTable.getString("TargetType");
2312 _PREHASH_Amount = gMessageStringTable.getString("Amount");
2313 _PREHASH_HasAttachment = gMessageStringTable.getString("HasAttachment");
2314 _PREHASH_UpdateAttachment = gMessageStringTable.getString("UpdateAttachment");
2315 _PREHASH_RemoveAttachment = gMessageStringTable.getString("RemoveAttachment");
2316 _PREHASH_HeightWidthBlock = gMessageStringTable.getString("HeightWidthBlock");
2317 _PREHASH_RequestObjectPropertiesFamily = gMessageStringTable.getString("RequestObjectPropertiesFamily");
2318 _PREHASH_ObjectPropertiesFamily = gMessageStringTable.getString("ObjectPropertiesFamily");
2319 _PREHASH_UserData = gMessageStringTable.getString("UserData");
2320 _PREHASH_IsReadable = gMessageStringTable.getString("IsReadable");
2321 _PREHASH_PathCurve = gMessageStringTable.getString("PathCurve");
2322 _PREHASH_Status = gMessageStringTable.getString("Status");
2323 _PREHASH_FromGroup = gMessageStringTable.getString("FromGroup");
2324 _PREHASH_AlreadyVoted = gMessageStringTable.getString("AlreadyVoted");
2325 _PREHASH_PlacesReply = gMessageStringTable.getString("PlacesReply");
2326 _PREHASH_DirPlacesReply = gMessageStringTable.getString("DirPlacesReply");
2327 _PREHASH_ParcelBuy = gMessageStringTable.getString("ParcelBuy");
2328 _PREHASH_DirFindQueryBackend = gMessageStringTable.getString("DirFindQueryBackend");
2329 _PREHASH_DirPlacesQueryBackend = gMessageStringTable.getString("DirPlacesQueryBackend");
2330 _PREHASH_DirClassifiedQueryBackend = gMessageStringTable.getString("DirClassifiedQueryBackend");
2331 _PREHASH_DirLandQueryBackend = gMessageStringTable.getString("DirLandQueryBackend");
2332 _PREHASH_DirPopularQueryBackend = gMessageStringTable.getString("DirPopularQueryBackend");
2333 _PREHASH_HistoryData = gMessageStringTable.getString("HistoryData");
2334 _PREHASH_SnapshotID = gMessageStringTable.getString("SnapshotID");
2335 _PREHASH_Aspect = gMessageStringTable.getString("Aspect");
2336 _PREHASH_ParamSize = gMessageStringTable.getString("ParamSize");
2337 _PREHASH_VoteCast = gMessageStringTable.getString("VoteCast");
2338 _PREHASH_CastsShadows = gMessageStringTable.getString("CastsShadows");
2339 _PREHASH_EveryoneMask = gMessageStringTable.getString("EveryoneMask");
2340 _PREHASH_ObjectSpinUpdate = gMessageStringTable.getString("ObjectSpinUpdate");
2341 _PREHASH_MaturePublish = gMessageStringTable.getString("MaturePublish");
2342 _PREHASH_UseExistingAsset = gMessageStringTable.getString("UseExistingAsset");
2343 _PREHASH_Powers = gMessageStringTable.getString("Powers");
2344 _PREHASH_ParcelLocalID = gMessageStringTable.getString("ParcelLocalID");
2345 _PREHASH_TeleportCancel = gMessageStringTable.getString("TeleportCancel");
2346 _PREHASH_UnixTime = gMessageStringTable.getString("UnixTime");
2347 _PREHASH_QueryFlags = gMessageStringTable.getString("QueryFlags");
2348 _PREHASH_AlwaysRun = gMessageStringTable.getString("AlwaysRun");
2349 _PREHASH_Bottom = gMessageStringTable.getString("Bottom");
2350 _PREHASH_ButtonData = gMessageStringTable.getString("ButtonData");
2351 _PREHASH_SoundData = gMessageStringTable.getString("SoundData");
2352 _PREHASH_ViewerStats = gMessageStringTable.getString("ViewerStats");
2353 _PREHASH_RegionHandshake = gMessageStringTable.getString("RegionHandshake");
2354 _PREHASH_ObjectDescription = gMessageStringTable.getString("ObjectDescription");
2355 _PREHASH_Description = gMessageStringTable.getString("Description");
2356 _PREHASH_ParamType = gMessageStringTable.getString("ParamType");
2357 _PREHASH_UUIDNameReply = gMessageStringTable.getString("UUIDNameReply");
2358 _PREHASH_UUIDGroupNameReply = gMessageStringTable.getString("UUIDGroupNameReply");
2359 _PREHASH_SaveAssetIntoInventory = gMessageStringTable.getString("SaveAssetIntoInventory");
2360 _PREHASH_UserInfo = gMessageStringTable.getString("UserInfo");
2361 _PREHASH_AnimSequenceID = gMessageStringTable.getString("AnimSequenceID");
2362 _PREHASH_NVPairs = gMessageStringTable.getString("NVPairs");
2363 _PREHASH_GroupNoticesListRequest = gMessageStringTable.getString("GroupNoticesListRequest");
2364 _PREHASH_ParcelAccessListRequest = gMessageStringTable.getString("ParcelAccessListRequest");
2365 _PREHASH_MuteListRequest = gMessageStringTable.getString("MuteListRequest");
2366 _PREHASH_RpcChannelRequest = gMessageStringTable.getString("RpcChannelRequest");
2367 _PREHASH_LandStatRequest = gMessageStringTable.getString("LandStatRequest");
2368 _PREHASH_PlacesQuery = gMessageStringTable.getString("PlacesQuery");
2369 _PREHASH_DirPlacesQuery = gMessageStringTable.getString("DirPlacesQuery");
2370 _PREHASH_SortOrder = gMessageStringTable.getString("SortOrder");
2371 _PREHASH_Hunter = gMessageStringTable.getString("Hunter");
2372 _PREHASH_SunAngVelocity = gMessageStringTable.getString("SunAngVelocity");
2373 _PREHASH_BinaryBucket = gMessageStringTable.getString("BinaryBucket");
2374 _PREHASH_ImagePacket = gMessageStringTable.getString("ImagePacket");
2375 _PREHASH_StartGroupProposal = gMessageStringTable.getString("StartGroupProposal");
2376 _PREHASH_EnergyLevel = gMessageStringTable.getString("EnergyLevel");
2377 _PREHASH_PriceForListing = gMessageStringTable.getString("PriceForListing");
2378 _PREHASH_Scale = gMessageStringTable.getString("Scale");
2379 _PREHASH_EstateCovenantReply = gMessageStringTable.getString("EstateCovenantReply");
2380 _PREHASH_ParentEstateID = gMessageStringTable.getString("ParentEstateID");
2381 _PREHASH_Extra2 = gMessageStringTable.getString("Extra2");
2382 _PREHASH_Throttle = gMessageStringTable.getString("Throttle");
2383 _PREHASH_SimIP = gMessageStringTable.getString("SimIP");
2384 _PREHASH_GodID = gMessageStringTable.getString("GodID");
2385 _PREHASH_TeleportMinPrice = gMessageStringTable.getString("TeleportMinPrice");
2386 _PREHASH_VoteItem = gMessageStringTable.getString("VoteItem");
2387 _PREHASH_ObjectRotation = gMessageStringTable.getString("ObjectRotation");
2388 _PREHASH_SitRotation = gMessageStringTable.getString("SitRotation");
2389 _PREHASH_SnapSelection = gMessageStringTable.getString("SnapSelection");
2390 _PREHASH_SoundTrigger = gMessageStringTable.getString("SoundTrigger");
2391 _PREHASH_TerrainRaiseLimit = gMessageStringTable.getString("TerrainRaiseLimit");
2392 _PREHASH_Quorum = gMessageStringTable.getString("Quorum");
2393 _PREHASH_AgentBlock = gMessageStringTable.getString("AgentBlock");
2394 _PREHASH_CommandBlock = gMessageStringTable.getString("CommandBlock");
2395 _PREHASH_PricePublicObjectDecay = gMessageStringTable.getString("PricePublicObjectDecay");
2396 _PREHASH_SpawnPointPos = gMessageStringTable.getString("SpawnPointPos");
2397 _PREHASH_VolumeDetail = gMessageStringTable.getString("VolumeDetail");
2398 _PREHASH_FromAgentName = gMessageStringTable.getString("FromAgentName");
2399 _PREHASH_Range = gMessageStringTable.getString("Range");
2400 _PREHASH_DirectoryVisibility = gMessageStringTable.getString("DirectoryVisibility");
2401 _PREHASH_PublicIP = gMessageStringTable.getString("PublicIP");
2402 _PREHASH_TeleportFailed = gMessageStringTable.getString("TeleportFailed");
2403 _PREHASH_PreloadSound = gMessageStringTable.getString("PreloadSound");
2404 _PREHASH_ScreenshotID = gMessageStringTable.getString("ScreenshotID");
2405 _PREHASH_CovenantTimestamp = gMessageStringTable.getString("CovenantTimestamp");
2406 _PREHASH_OldestUnacked = gMessageStringTable.getString("OldestUnacked");
2407 _PREHASH_SimulatorIP = gMessageStringTable.getString("SimulatorIP");
2408 _PREHASH_Value = gMessageStringTable.getString("Value");
2409 _PREHASH_JointAxisOrAnchor = gMessageStringTable.getString("JointAxisOrAnchor");
2410 _PREHASH_Test0 = gMessageStringTable.getString("Test0");
2411 _PREHASH_Test1 = gMessageStringTable.getString("Test1");
2412 _PREHASH_Test2 = gMessageStringTable.getString("Test2");
2413 _PREHASH_SunPhase = gMessageStringTable.getString("SunPhase");
2414 _PREHASH_ParcelDivide = gMessageStringTable.getString("ParcelDivide");
2415 _PREHASH_PriceObjectClaim = gMessageStringTable.getString("PriceObjectClaim");
2416 _PREHASH_Field = gMessageStringTable.getString("Field");
2417 _PREHASH_Ratio = gMessageStringTable.getString("Ratio");
2418 _PREHASH_JoinGroupReply = gMessageStringTable.getString("JoinGroupReply");
2419 _PREHASH_LiveHelpGroupReply = gMessageStringTable.getString("LiveHelpGroupReply");
2420 _PREHASH_Score = gMessageStringTable.getString("Score");
2421 _PREHASH_Image = gMessageStringTable.getString("Image");
2422 _PREHASH_ObjectClickAction = gMessageStringTable.getString("ObjectClickAction");
2423 _PREHASH_Parameter = gMessageStringTable.getString("Parameter");
2424 _PREHASH_Flags = gMessageStringTable.getString("Flags");
2425 _PREHASH_Plane = gMessageStringTable.getString("Plane");
2426 _PREHASH_Width = gMessageStringTable.getString("Width");
2427 _PREHASH_Right = gMessageStringTable.getString("Right");
2428 _PREHASH_DirFindQuery = gMessageStringTable.getString("DirFindQuery");
2429 _PREHASH_Textures = gMessageStringTable.getString("Textures");
2430 _PREHASH_EventData = gMessageStringTable.getString("EventData");
2431 _PREHASH_Final = gMessageStringTable.getString("Final");
2432 _PREHASH_System = gMessageStringTable.getString("System");
2433 _PREHASH_TelehubPos = gMessageStringTable.getString("TelehubPos");
2434 _PREHASH_ReportAutosaveCrash = gMessageStringTable.getString("ReportAutosaveCrash");
2435 _PREHASH_CreateTrustedCircuit = gMessageStringTable.getString("CreateTrustedCircuit");
2436 _PREHASH_DenyTrustedCircuit = gMessageStringTable.getString("DenyTrustedCircuit");
2437 _PREHASH_RequestTrustedCircuit = gMessageStringTable.getString("RequestTrustedCircuit");
2438 _PREHASH_Codec = gMessageStringTable.getString("Codec");
2439 _PREHASH_Modal = gMessageStringTable.getString("Modal");
2440 _PREHASH_ChildAgentUnknown = gMessageStringTable.getString("ChildAgentUnknown");
2441 _PREHASH_LandingType = gMessageStringTable.getString("LandingType");
2442 _PREHASH_ScriptRunningReply = gMessageStringTable.getString("ScriptRunningReply");
2443 _PREHASH_Reply = gMessageStringTable.getString("Reply");
2444 _PREHASH_GroupAccountDetailsReply = gMessageStringTable.getString("GroupAccountDetailsReply");
2445 _PREHASH_TelehubRot = gMessageStringTable.getString("TelehubRot");
2446 _PREHASH_AcceptFriendship = gMessageStringTable.getString("AcceptFriendship");
2447 _PREHASH_ItemType = gMessageStringTable.getString("ItemType");
2448 _PREHASH_DwellInfo = gMessageStringTable.getString("DwellInfo");
2449 _PREHASH_AgentResume = gMessageStringTable.getString("AgentResume");
2450 _PREHASH_MailFilter = gMessageStringTable.getString("MailFilter");
2451 _PREHASH_Disconnect = gMessageStringTable.getString("Disconnect");
2452 _PREHASH_SimPosition = gMessageStringTable.getString("SimPosition");
2453 _PREHASH_SimWideTotalPrims = gMessageStringTable.getString("SimWideTotalPrims");
2454 _PREHASH_Index = gMessageStringTable.getString("Index");
2455 _PREHASH_SimFilename = gMessageStringTable.getString("SimFilename");
2456 _PREHASH_LastOwnerID = gMessageStringTable.getString("LastOwnerID");
2457 _PREHASH_GroupNoticeRequest = gMessageStringTable.getString("GroupNoticeRequest");
2458 _PREHASH_EmailMessageRequest = gMessageStringTable.getString("EmailMessageRequest");
2459 _PREHASH_MapItemRequest = gMessageStringTable.getString("MapItemRequest");
2460 _PREHASH_AgentCount = gMessageStringTable.getString("AgentCount");
2461 _PREHASH_MessageBlock = gMessageStringTable.getString("MessageBlock");
2462 _PREHASH_FuseBlock = gMessageStringTable.getString("FuseBlock");
2463 _PREHASH_AgentGroupData = gMessageStringTable.getString("AgentGroupData");
2464 _PREHASH_ClassifiedInfoUpdate = gMessageStringTable.getString("ClassifiedInfoUpdate");
2465 _PREHASH_RegionPos = gMessageStringTable.getString("RegionPos");
2466 _PREHASH_ParcelMediaUpdate = gMessageStringTable.getString("ParcelMediaUpdate");
2467 _PREHASH_NoticeID = gMessageStringTable.getString("NoticeID");
2468 _PREHASH_GridX = gMessageStringTable.getString("GridX");
2469 _PREHASH_GridY = gMessageStringTable.getString("GridY");
2470 _PREHASH_Title = gMessageStringTable.getString("Title");
2471 _PREHASH_AuctionID = gMessageStringTable.getString("AuctionID");
2472 _PREHASH_VoteType = gMessageStringTable.getString("VoteType");
2473 _PREHASH_CategoryID = gMessageStringTable.getString("CategoryID");
2474 _PREHASH_Token = gMessageStringTable.getString("Token");
2475 _PREHASH_AggregatePerms = gMessageStringTable.getString("AggregatePerms");
2476 _PREHASH_ObjectSelect = gMessageStringTable.getString("ObjectSelect");
2477 _PREHASH_ForceObjectSelect = gMessageStringTable.getString("ForceObjectSelect");
2478 _PREHASH_Price = gMessageStringTable.getString("Price");
2479 _PREHASH_SunDirection = gMessageStringTable.getString("SunDirection");
2480 _PREHASH_FromName = gMessageStringTable.getString("FromName");
2481 _PREHASH_ChangeInventoryItemFlags = gMessageStringTable.getString("ChangeInventoryItemFlags");
2482 _PREHASH_Force = gMessageStringTable.getString("Force");
2483 _PREHASH_TransactionBlock = gMessageStringTable.getString("TransactionBlock");
2484 _PREHASH_PowersMask = gMessageStringTable.getString("PowersMask");
2485 _PREHASH_Stamp = gMessageStringTable.getString("Stamp");
2486 _PREHASH_TotalCredits = gMessageStringTable.getString("TotalCredits");
2487 _PREHASH_State = gMessageStringTable.getString("State");
2488 _PREHASH_TextureIndex = gMessageStringTable.getString("TextureIndex");
2489 _PREHASH_InviteeID = gMessageStringTable.getString("InviteeID");
2490 _PREHASH_ParcelReclaim = gMessageStringTable.getString("ParcelReclaim");
2491 _PREHASH_Money = gMessageStringTable.getString("Money");
2492 _PREHASH_PathTwist = gMessageStringTable.getString("PathTwist");
2493 _PREHASH_AuthBuyerID = gMessageStringTable.getString("AuthBuyerID");
2494 _PREHASH_Color = gMessageStringTable.getString("Color");
2495 _PREHASH_SourceType = gMessageStringTable.getString("SourceType");
2496 _PREHASH_World = gMessageStringTable.getString("World");
2497 _PREHASH_QueryData = gMessageStringTable.getString("QueryData");
2498 _PREHASH_Users = gMessageStringTable.getString("Users");
2499 _PREHASH_SysOS = gMessageStringTable.getString("SysOS");
2500 _PREHASH_Notes = gMessageStringTable.getString("Notes");
2501 _PREHASH_AvatarID = gMessageStringTable.getString("AvatarID");
2502 _PREHASH_FounderID = gMessageStringTable.getString("FounderID");
2503 _PREHASH_EndPointID = gMessageStringTable.getString("EndPointID");
2504 _PREHASH_LocationLookAt = gMessageStringTable.getString("LocationLookAt");
2505 _PREHASH_Sound = gMessageStringTable.getString("Sound");
2506 _PREHASH_Cover = gMessageStringTable.getString("Cover");
2507 _PREHASH_TotalObjectCount = gMessageStringTable.getString("TotalObjectCount");
2508 _PREHASH_TextureEntry = gMessageStringTable.getString("TextureEntry");
2509 _PREHASH_SquareMetersCommitted = gMessageStringTable.getString("SquareMetersCommitted");
2510 _PREHASH_ChannelID = gMessageStringTable.getString("ChannelID");
2511 _PREHASH_Dwell = gMessageStringTable.getString("Dwell");
2512 _PREHASH_North = gMessageStringTable.getString("North");
2513 _PREHASH_AgentUpdate = gMessageStringTable.getString("AgentUpdate");
2514 _PREHASH_PickGodDelete = gMessageStringTable.getString("PickGodDelete");
2515 _PREHASH_HostName = gMessageStringTable.getString("HostName");
2516 _PREHASH_PriceParcelClaim = gMessageStringTable.getString("PriceParcelClaim");
2517 _PREHASH_ParcelClaim = gMessageStringTable.getString("ParcelClaim");
2518 _PREHASH_AgentPowers = gMessageStringTable.getString("AgentPowers");
2519 _PREHASH_ProfileHollow = gMessageStringTable.getString("ProfileHollow");
2520 _PREHASH_GroupRoleChanges = gMessageStringTable.getString("GroupRoleChanges");
2521 _PREHASH_Count = gMessageStringTable.getString("Count");
2522 _PREHASH_South = gMessageStringTable.getString("South");
2523 _PREHASH_ObjectUpdateCompressed = gMessageStringTable.getString("ObjectUpdateCompressed");
2524 _PREHASH_MuteFlags = gMessageStringTable.getString("MuteFlags");
2525 _PREHASH_Group = gMessageStringTable.getString("Group");
2526 _PREHASH_AgentPause = gMessageStringTable.getString("AgentPause");
2527 _PREHASH_LanguagesText = gMessageStringTable.getString("LanguagesText");
2528 _PREHASH_Error = gMessageStringTable.getString("Error");
2529 _PREHASH_InternalScriptMail = gMessageStringTable.getString("InternalScriptMail");
2530 _PREHASH_FindAgent = gMessageStringTable.getString("FindAgent");
2531 _PREHASH_AgentData = gMessageStringTable.getString("AgentData");
2532 _PREHASH_FolderData = gMessageStringTable.getString("FolderData");
2533 _PREHASH_AssetBlock = gMessageStringTable.getString("AssetBlock");
2534 _PREHASH_AcceptNotices = gMessageStringTable.getString("AcceptNotices");
2535 _PREHASH_SetGroupAcceptNotices = gMessageStringTable.getString("SetGroupAcceptNotices");
2536 _PREHASH_CloseCircuit = gMessageStringTable.getString("CloseCircuit");
2537 _PREHASH_TeleportFinish = gMessageStringTable.getString("TeleportFinish");
2538 _PREHASH_PathRevolutions = gMessageStringTable.getString("PathRevolutions");
2539 _PREHASH_ClassifiedInfoReply = gMessageStringTable.getString("ClassifiedInfoReply");
2540 _PREHASH_ParcelInfoReply = gMessageStringTable.getString("ParcelInfoReply");
2541 _PREHASH_AutosaveData = gMessageStringTable.getString("AutosaveData");
2542 _PREHASH_SetStartLocation = gMessageStringTable.getString("SetStartLocation");
2543 _PREHASH_PassHours = gMessageStringTable.getString("PassHours");
2544 _PREHASH_AttachmentPt = gMessageStringTable.getString("AttachmentPt");
2545 _PREHASH_ParcelFlags = gMessageStringTable.getString("ParcelFlags");
2546 _PREHASH_NumVotes = gMessageStringTable.getString("NumVotes");
2547 _PREHASH_AvatarPickerRequest = gMessageStringTable.getString("AvatarPickerRequest");
2548 _PREHASH_TeleportLocationRequest = gMessageStringTable.getString("TeleportLocationRequest");
2549 _PREHASH_DataHomeLocationRequest = gMessageStringTable.getString("DataHomeLocationRequest");
2550 _PREHASH_EventNotificationAddRequest = gMessageStringTable.getString("EventNotificationAddRequest");
2551 _PREHASH_ParcelDwellRequest = gMessageStringTable.getString("ParcelDwellRequest");
2552 _PREHASH_EventLocationRequest = gMessageStringTable.getString("EventLocationRequest");
2553 _PREHASH_SetStartLocationRequest = gMessageStringTable.getString("SetStartLocationRequest");
2554 _PREHASH_QueryStart = gMessageStringTable.getString("QueryStart");
2555 _PREHASH_EjectData = gMessageStringTable.getString("EjectData");
2556 _PREHASH_AvatarTextureUpdate = gMessageStringTable.getString("AvatarTextureUpdate");
2557 _PREHASH_RPCServerPort = gMessageStringTable.getString("RPCServerPort");
2558 _PREHASH_Bytes = gMessageStringTable.getString("Bytes");
2559 _PREHASH_Extra = gMessageStringTable.getString("Extra");
2560 _PREHASH_ForceScriptControlRelease = gMessageStringTable.getString("ForceScriptControlRelease");
2561 _PREHASH_ParcelRelease = gMessageStringTable.getString("ParcelRelease");
2562 _PREHASH_VFileType = gMessageStringTable.getString("VFileType");
2563 _PREHASH_EjectGroupMemberReply = gMessageStringTable.getString("EjectGroupMemberReply");
2564 _PREHASH_ImageData = gMessageStringTable.getString("ImageData");
2565 _PREHASH_SimulatorViewerTimeMessage = gMessageStringTable.getString("SimulatorViewerTimeMessage");
2566 _PREHASH_Rotation = gMessageStringTable.getString("Rotation");
2567 _PREHASH_Selection = gMessageStringTable.getString("Selection");
2568 _PREHASH_TransactionData = gMessageStringTable.getString("TransactionData");
2569 _PREHASH_OperationData = gMessageStringTable.getString("OperationData");
2570 _PREHASH_ExpirationDate = gMessageStringTable.getString("ExpirationDate");
2571 _PREHASH_ParcelDeedToGroup = gMessageStringTable.getString("ParcelDeedToGroup");
2572 _PREHASH_AvatarPicksReply = gMessageStringTable.getString("AvatarPicksReply");
2573 _PREHASH_GroupTitlesReply = gMessageStringTable.getString("GroupTitlesReply");
2574 _PREHASH_AgentInfo = gMessageStringTable.getString("AgentInfo");
2575 _PREHASH_MoneyTransferBackend = gMessageStringTable.getString("MoneyTransferBackend");
2576 _PREHASH_NextOwnerMask = gMessageStringTable.getString("NextOwnerMask");
2577 _PREHASH_MuteData = gMessageStringTable.getString("MuteData");
2578 _PREHASH_PassPrice = gMessageStringTable.getString("PassPrice");
2579 _PREHASH_SourceID = gMessageStringTable.getString("SourceID");
2580 _PREHASH_ChangeUserRights = gMessageStringTable.getString("ChangeUserRights");
2581 _PREHASH_TeleportFlags = gMessageStringTable.getString("TeleportFlags");
2582 _PREHASH_SlaveParcelData = gMessageStringTable.getString("SlaveParcelData");
2583 _PREHASH_AssetData = gMessageStringTable.getString("AssetData");
2584 _PREHASH_MultipleObjectUpdate = gMessageStringTable.getString("MultipleObjectUpdate");
2585 _PREHASH_ObjectUpdate = gMessageStringTable.getString("ObjectUpdate");
2586 _PREHASH_ImprovedTerseObjectUpdate = gMessageStringTable.getString("ImprovedTerseObjectUpdate");
2587 _PREHASH_ConfirmXferPacket = gMessageStringTable.getString("ConfirmXferPacket");
2588 _PREHASH_StartPingCheck = gMessageStringTable.getString("StartPingCheck");
2589 _PREHASH_SimWideDeletes = gMessageStringTable.getString("SimWideDeletes");
2590 _PREHASH_LandStatReply = gMessageStringTable.getString("LandStatReply");
2591 _PREHASH_IsPhantom = gMessageStringTable.getString("IsPhantom");
2592 _PREHASH_AgentList = gMessageStringTable.getString("AgentList");
2593 _PREHASH_SimApproved = gMessageStringTable.getString("SimApproved");
2594 _PREHASH_RezObject = gMessageStringTable.getString("RezObject");
2595 _PREHASH_TaskLocalID = gMessageStringTable.getString("TaskLocalID");
2596 _PREHASH_ClaimDate = gMessageStringTable.getString("ClaimDate");
2597 _PREHASH_MergeParcel = gMessageStringTable.getString("MergeParcel");
2598 _PREHASH_Priority = gMessageStringTable.getString("Priority");
2599 _PREHASH_QueryText = gMessageStringTable.getString("QueryText");
2600 _PREHASH_GroupNoticeAdd = gMessageStringTable.getString("GroupNoticeAdd");
2601 _PREHASH_ReturnType = gMessageStringTable.getString("ReturnType");
2602 _PREHASH_FetchFolders = gMessageStringTable.getString("FetchFolders");
2603 _PREHASH_SimulatorPublicHostBlock = gMessageStringTable.getString("SimulatorPublicHostBlock");
2604 _PREHASH_HeaderData = gMessageStringTable.getString("HeaderData");
2605 _PREHASH_RequestMultipleObjects = gMessageStringTable.getString("RequestMultipleObjects");
2606 _PREHASH_RetrieveInstantMessages = gMessageStringTable.getString("RetrieveInstantMessages");
2607 _PREHASH_OpenCircuit = gMessageStringTable.getString("OpenCircuit");
2608 _PREHASH_CrossedRegion = gMessageStringTable.getString("CrossedRegion");
2609 _PREHASH_DirGroupsReply = gMessageStringTable.getString("DirGroupsReply");
2610 _PREHASH_AvatarGroupsReply = gMessageStringTable.getString("AvatarGroupsReply");
2611 _PREHASH_EmailMessageReply = gMessageStringTable.getString("EmailMessageReply");
2612 _PREHASH_GroupVoteHistoryItemReply = gMessageStringTable.getString("GroupVoteHistoryItemReply");
2613 _PREHASH_ViewerPosition = gMessageStringTable.getString("ViewerPosition");
2614 _PREHASH_Position = gMessageStringTable.getString("Position");
2615 _PREHASH_ParentEstate = gMessageStringTable.getString("ParentEstate");
2616 _PREHASH_EstateName = gMessageStringTable.getString("EstateName");
2617 _PREHASH_MuteName = gMessageStringTable.getString("MuteName");
2618 _PREHASH_ParcelRename = gMessageStringTable.getString("ParcelRename");
2619 _PREHASH_ViewerFilename = gMessageStringTable.getString("ViewerFilename");
2620 _PREHASH_UserReportInternal = gMessageStringTable.getString("UserReportInternal");
2621 _PREHASH_AvatarPropertiesRequest = gMessageStringTable.getString("AvatarPropertiesRequest");
2622 _PREHASH_ParcelPropertiesRequest = gMessageStringTable.getString("ParcelPropertiesRequest");
2623 _PREHASH_GroupProfileRequest = gMessageStringTable.getString("GroupProfileRequest");
2624 _PREHASH_AgentDataUpdateRequest = gMessageStringTable.getString("AgentDataUpdateRequest");
2625 _PREHASH_PriceObjectScaleFactor = gMessageStringTable.getString("PriceObjectScaleFactor");
2626 _PREHASH_OpenEnrollment = gMessageStringTable.getString("OpenEnrollment");
2627 _PREHASH_GroupData = gMessageStringTable.getString("GroupData");
2628 _PREHASH_RequestGodlikePowers = gMessageStringTable.getString("RequestGodlikePowers");
2629 _PREHASH_GrantGodlikePowers = gMessageStringTable.getString("GrantGodlikePowers");
2630 _PREHASH_TransactionID = gMessageStringTable.getString("TransactionID");
2631 _PREHASH_DestinationID = gMessageStringTable.getString("DestinationID");
2632 _PREHASH_Controls = gMessageStringTable.getString("Controls");
2633 _PREHASH_FirstDetachAll = gMessageStringTable.getString("FirstDetachAll");
2634 _PREHASH_EstateID = gMessageStringTable.getString("EstateID");
2635 _PREHASH_ImprovedInstantMessage = gMessageStringTable.getString("ImprovedInstantMessage");
2636 _PREHASH_CheckParcelSales = gMessageStringTable.getString("CheckParcelSales");
2637 _PREHASH_ParcelSales = gMessageStringTable.getString("ParcelSales");
2638 _PREHASH_CurrentInterval = gMessageStringTable.getString("CurrentInterval");
2639 _PREHASH_PriceRentLight = gMessageStringTable.getString("PriceRentLight");
2640 _PREHASH_MediaAutoScale = gMessageStringTable.getString("MediaAutoScale");
2641 _PREHASH_NeighborBlock = gMessageStringTable.getString("NeighborBlock");
2642 _PREHASH_LayerData = gMessageStringTable.getString("LayerData");
2643 _PREHASH_NVPairData = gMessageStringTable.getString("NVPairData");
2644 _PREHASH_TeleportLocal = gMessageStringTable.getString("TeleportLocal");
2645 _PREHASH_EjecteeID = gMessageStringTable.getString("EjecteeID");
2646 _PREHASH_VoteInitiator = gMessageStringTable.getString("VoteInitiator");
2647 _PREHASH_TypeData = gMessageStringTable.getString("TypeData");
2648 _PREHASH_OwnerIDs = gMessageStringTable.getString("OwnerIDs");
2649 _PREHASH_SystemKickUser = gMessageStringTable.getString("SystemKickUser");
2650 _PREHASH_TransactionTime = gMessageStringTable.getString("TransactionTime");
2651 _PREHASH_TimeToLive = gMessageStringTable.getString("TimeToLive");
2652 _PREHASH_OldAgentID = gMessageStringTable.getString("OldAgentID");
2653 _PREHASH_MusicURL = gMessageStringTable.getString("MusicURL");
2654 _PREHASH_ParcelPrimBonus = gMessageStringTable.getString("ParcelPrimBonus");
2655 _PREHASH_EjectUser = gMessageStringTable.getString("EjectUser");
2656 _PREHASH_CoarseLocationUpdate = gMessageStringTable.getString("CoarseLocationUpdate");
2657 _PREHASH_ChildAgentPositionUpdate = gMessageStringTable.getString("ChildAgentPositionUpdate");
2658 _PREHASH_StoreLocal = gMessageStringTable.getString("StoreLocal");
2659 _PREHASH_GroupName = gMessageStringTable.getString("GroupName");
2660 _PREHASH_PriceParcelRent = gMessageStringTable.getString("PriceParcelRent");
2661 _PREHASH_SimStatus = gMessageStringTable.getString("SimStatus");
2662 _PREHASH_TransactionSuccess = gMessageStringTable.getString("TransactionSuccess");
2663 _PREHASH_LureType = gMessageStringTable.getString("LureType");
2664 _PREHASH_GroupMask = gMessageStringTable.getString("GroupMask");
2665 _PREHASH_SitObject = gMessageStringTable.getString("SitObject");
2666 _PREHASH_Override = gMessageStringTable.getString("Override");
2667 _PREHASH_LocomotionState = gMessageStringTable.getString("LocomotionState");
2668 _PREHASH_PriceUpload = gMessageStringTable.getString("PriceUpload");
2669 _PREHASH_RemoveParcel = gMessageStringTable.getString("RemoveParcel");
2670 _PREHASH_ConfirmAuctionStart = gMessageStringTable.getString("ConfirmAuctionStart");
2671 _PREHASH_RpcScriptRequestInbound = gMessageStringTable.getString("RpcScriptRequestInbound");
2672 _PREHASH_ActiveGroupID = gMessageStringTable.getString("ActiveGroupID");
2673 _PREHASH_ParcelReturnObjects = gMessageStringTable.getString("ParcelReturnObjects");
2674 _PREHASH_TotalObjects = gMessageStringTable.getString("TotalObjects");
2675 _PREHASH_ObjectExtraParams = gMessageStringTable.getString("ObjectExtraParams");
2676 _PREHASH_Questions = gMessageStringTable.getString("Questions");
2677 _PREHASH_TransferAbort = gMessageStringTable.getString("TransferAbort");
2678 _PREHASH_TransferInventory = gMessageStringTable.getString("TransferInventory");
2679 _PREHASH_RayTargetID = gMessageStringTable.getString("RayTargetID");
2680 _PREHASH_ClaimPrice = gMessageStringTable.getString("ClaimPrice");
2681 _PREHASH_ObjectProperties = gMessageStringTable.getString("ObjectProperties");
2682 _PREHASH_ParcelProperties = gMessageStringTable.getString("ParcelProperties");
2683 _PREHASH_EstateOwnerID = gMessageStringTable.getString("EstateOwnerID");
2684 _PREHASH_LogoutRequest = gMessageStringTable.getString("LogoutRequest");
2685 _PREHASH_AssetUploadRequest = gMessageStringTable.getString("AssetUploadRequest");
2686 _PREHASH_TransactionType = gMessageStringTable.getString("TransactionType");
2687 _PREHASH_AvatarPropertiesUpdate = gMessageStringTable.getString("AvatarPropertiesUpdate");
2688 _PREHASH_ParcelPropertiesUpdate = gMessageStringTable.getString("ParcelPropertiesUpdate");
2689 _PREHASH_FetchItems = gMessageStringTable.getString("FetchItems");
2690 _PREHASH_AbortXfer = gMessageStringTable.getString("AbortXfer");
2691 _PREHASH_DeRezAck = gMessageStringTable.getString("DeRezAck");
2692 _PREHASH_TakeControls = gMessageStringTable.getString("TakeControls");
2693 _PREHASH_DirLandReply = gMessageStringTable.getString("DirLandReply");
2694 _PREHASH_MuteType = gMessageStringTable.getString("MuteType");
2695 _PREHASH_IMViaEMail = gMessageStringTable.getString("IMViaEMail");
2696 _PREHASH_RentPrice = gMessageStringTable.getString("RentPrice");
2697 _PREHASH_GenericMessage = gMessageStringTable.getString("GenericMessage");
2698 _PREHASH_ChildAgentAlive = gMessageStringTable.getString("ChildAgentAlive");
2699 _PREHASH_AssetType = gMessageStringTable.getString("AssetType");
2700 _PREHASH_SpawnPointBlock = gMessageStringTable.getString("SpawnPointBlock");
2701 _PREHASH_AttachmentBlock = gMessageStringTable.getString("AttachmentBlock");
2702 _PREHASH_ObjectMaterial = gMessageStringTable.getString("ObjectMaterial");
2703 _PREHASH_OwnerName = gMessageStringTable.getString("OwnerName");
2704 _PREHASH_AvatarNotesReply = gMessageStringTable.getString("AvatarNotesReply");
2705 _PREHASH_CacheID = gMessageStringTable.getString("CacheID");
2706 _PREHASH_OwnerMask = gMessageStringTable.getString("OwnerMask");
2707 _PREHASH_TransferInventoryAck = gMessageStringTable.getString("TransferInventoryAck");
2708 _PREHASH_RegionDenyAgeUnverified = gMessageStringTable.getString("RegionDenyAgeUnverified");
2709 _PREHASH_AgeVerificationBlock = gMessageStringTable.getString("AgeVerificationBlock");
2710}
diff --git a/linden/indra/llmessage/message_prehash.h b/linden/indra/llmessage/message_prehash.h
index 1a22fba..e65d539 100644
--- a/linden/indra/llmessage/message_prehash.h
+++ b/linden/indra/llmessage/message_prehash.h
@@ -1373,10 +1373,4 @@ extern char * _PREHASH_RegionDenyAgeUnverified;
1373extern char * _PREHASH_AgeVerificationBlock; 1373extern char * _PREHASH_AgeVerificationBlock;
1374 1374
1375 1375
1376void init_prehash_data();
1377
1378
1379
1380
1381
1382#endif 1376#endif
diff --git a/linden/indra/llmessage/message_string_table.cpp b/linden/indra/llmessage/message_string_table.cpp
index 36d1de0..e4da828 100644
--- a/linden/indra/llmessage/message_string_table.cpp
+++ b/linden/indra/llmessage/message_string_table.cpp
@@ -46,8 +46,6 @@ inline U32 message_hash_my_string(const char *str)
46} 46}
47 47
48 48
49LLMessageStringTable gMessageStringTable;
50
51 49
52LLMessageStringTable::LLMessageStringTable() 50LLMessageStringTable::LLMessageStringTable()
53: mUsed(0) 51: mUsed(0)
diff --git a/linden/indra/llprimitive/llmaterialtable.cpp b/linden/indra/llprimitive/llmaterialtable.cpp
index 537c968..5e45e44 100644
--- a/linden/indra/llprimitive/llmaterialtable.cpp
+++ b/linden/indra/llprimitive/llmaterialtable.cpp
@@ -39,6 +39,54 @@
39 39
40LLMaterialTable LLMaterialTable::basic(1); 40LLMaterialTable LLMaterialTable::basic(1);
41 41
42/*
43 Old Havok 1 constants
44
45// these are the approximately correct friction values for various materials
46// however Havok1's friction dynamics are not very correct, so the effective
47// friction coefficients that result from these numbers are approximately
48// 25-50% too low, more incorrect for the lower values.
49F32 const LLMaterialTable::FRICTION_MIN = 0.2f;
50F32 const LLMaterialTable::FRICTION_GLASS = 0.2f; // borosilicate glass
51F32 const LLMaterialTable::FRICTION_LIGHT = 0.2f; //
52F32 const LLMaterialTable::FRICTION_METAL = 0.3f; // steel
53F32 const LLMaterialTable::FRICTION_PLASTIC = 0.4f; // HDPE
54F32 const LLMaterialTable::FRICTION_WOOD = 0.6f; // southern pine
55F32 const LLMaterialTable::FRICTION_FLESH = 0.60f; // saltwater
56F32 const LLMaterialTable::FRICTION_LAND = 0.78f; // dirt
57F32 const LLMaterialTable::FRICTION_STONE = 0.8f; // concrete
58F32 const LLMaterialTable::FRICTION_RUBBER = 0.9f; //
59F32 const LLMaterialTable::FRICTION_MAX = 0.95f; //
60*/
61
62// #if LL_CURRENT_HAVOK_VERSION == LL_HAVOK_VERSION_460
63// Havok4 has more correct friction dynamics, however here we have to use
64// the "incorrect" equivalents for the legacy Havok1 behavior
65F32 const LLMaterialTable::FRICTION_MIN = 0.15f;
66F32 const LLMaterialTable::FRICTION_GLASS = 0.13f; // borosilicate glass
67F32 const LLMaterialTable::FRICTION_LIGHT = 0.14f; //
68F32 const LLMaterialTable::FRICTION_METAL = 0.22f; // steel
69F32 const LLMaterialTable::FRICTION_PLASTIC = 0.3f; // HDPE
70F32 const LLMaterialTable::FRICTION_WOOD = 0.44f; // southern pine
71F32 const LLMaterialTable::FRICTION_FLESH = 0.46f; // saltwater
72F32 const LLMaterialTable::FRICTION_LAND = 0.58f; // dirt
73F32 const LLMaterialTable::FRICTION_STONE = 0.6f; // concrete
74F32 const LLMaterialTable::FRICTION_RUBBER = 0.67f; //
75F32 const LLMaterialTable::FRICTION_MAX = 0.71f; //
76// #endif
77
78F32 const LLMaterialTable::RESTITUTION_MIN = 0.02f;
79F32 const LLMaterialTable::RESTITUTION_LAND = LLMaterialTable::RESTITUTION_MIN;
80F32 const LLMaterialTable::RESTITUTION_FLESH = 0.2f; // saltwater
81F32 const LLMaterialTable::RESTITUTION_STONE = 0.4f; // concrete
82F32 const LLMaterialTable::RESTITUTION_METAL = 0.4f; // steel
83F32 const LLMaterialTable::RESTITUTION_WOOD = 0.5f; // southern pine
84F32 const LLMaterialTable::RESTITUTION_GLASS = 0.7f; // borosilicate glass
85F32 const LLMaterialTable::RESTITUTION_PLASTIC = 0.7f; // HDPE
86F32 const LLMaterialTable::RESTITUTION_LIGHT = 0.7f; //
87F32 const LLMaterialTable::RESTITUTION_RUBBER = 0.9f; //
88F32 const LLMaterialTable::RESTITUTION_MAX = 0.95f;
89
42F32 const LLMaterialTable::DEFAULT_FRICTION = 0.5f; 90F32 const LLMaterialTable::DEFAULT_FRICTION = 0.5f;
43F32 const LLMaterialTable::DEFAULT_RESTITUTION = 0.4f; 91F32 const LLMaterialTable::DEFAULT_RESTITUTION = 0.4f;
44 92
diff --git a/linden/indra/llprimitive/llmaterialtable.h b/linden/indra/llprimitive/llmaterialtable.h
index b48c832..863fb25 100644
--- a/linden/indra/llprimitive/llmaterialtable.h
+++ b/linden/indra/llprimitive/llmaterialtable.h
@@ -33,11 +33,36 @@
33#define LL_LLMATERIALTABLE_H 33#define LL_LLMATERIALTABLE_H
34 34
35#include "lluuid.h" 35#include "lluuid.h"
36#include "linked_lists.h"
37#include "llstring.h" 36#include "llstring.h"
38 37
38#include <list>
39
39const U32 LLMATERIAL_INFO_NAME_LENGTH = 256; 40const U32 LLMATERIAL_INFO_NAME_LENGTH = 256;
40 41
42// We've moved toward more reasonable mass values for the Havok4 engine.
43// The LEGACY_DEFAULT_OBJECT_DENSITY is used to maintain support for
44// legacy scripts code (llGetMass()) and script energy consumption.
45const F32 DEFAULT_OBJECT_DENSITY = 1000.0f; // per m^3
46const F32 LEGACY_DEFAULT_OBJECT_DENSITY = 10.0f;
47
48// Avatars density depends on the collision shape used. The approximate
49// legacy volumes of avatars are:
50// Body_Length Body_Width Body_Fat Leg_Length Volume(m^3)
51// -------------------------------------------------------
52// min | min | min | min | 0.123 |
53// max | max | max | max | 0.208 |
54//
55// Either the avatar shape must be tweaked to match those volumes
56// or the DEFAULT_AVATAR_DENSITY must be adjusted to achieve the
57// legacy mass.
58//
59// The current density appears to be low because the mass and
60// inertia are computed as if the avatar were a cylinder which
61// has more volume than the actual collision shape of the avatar.
62// See the physics engine mass properties code for more info.
63const F32 DEFAULT_AVATAR_DENSITY = 445.3f; // was 444.24f;
64
65
41class LLMaterialInfo 66class LLMaterialInfo
42{ 67{
43public: 68public:
@@ -84,9 +109,33 @@ public:
84class LLMaterialTable 109class LLMaterialTable
85{ 110{
86public: 111public:
112 static const F32 FRICTION_MIN;
113 static const F32 FRICTION_GLASS;
114 static const F32 FRICTION_LIGHT;
115 static const F32 FRICTION_METAL;
116 static const F32 FRICTION_PLASTIC;
117 static const F32 FRICTION_WOOD;
118 static const F32 FRICTION_LAND;
119 static const F32 FRICTION_STONE;
120 static const F32 FRICTION_FLESH;
121 static const F32 FRICTION_RUBBER;
122 static const F32 FRICTION_MAX;
123
124 static const F32 RESTITUTION_MIN;
125 static const F32 RESTITUTION_LAND;
126 static const F32 RESTITUTION_FLESH;
127 static const F32 RESTITUTION_STONE;
128 static const F32 RESTITUTION_METAL;
129 static const F32 RESTITUTION_WOOD;
130 static const F32 RESTITUTION_GLASS;
131 static const F32 RESTITUTION_PLASTIC;
132 static const F32 RESTITUTION_LIGHT;
133 static const F32 RESTITUTION_RUBBER;
134 static const F32 RESTITUTION_MAX;
135
87 typedef std::list<LLMaterialInfo*> info_list_t; 136 typedef std::list<LLMaterialInfo*> info_list_t;
88 info_list_t mMaterialInfoList; 137 info_list_t mMaterialInfoList;
89 138
90 LLUUID *mCollisionSoundMatrix; 139 LLUUID *mCollisionSoundMatrix;
91 LLUUID *mSlidingSoundMatrix; 140 LLUUID *mSlidingSoundMatrix;
92 LLUUID *mRollingSoundMatrix; 141 LLUUID *mRollingSoundMatrix;
@@ -117,8 +166,8 @@ public:
117 char* getName(U8 mcode); 166 char* getName(U8 mcode);
118 167
119 F32 getDensity(U8 mcode); // kg/m^3, 0 if not found 168 F32 getDensity(U8 mcode); // kg/m^3, 0 if not found
120 F32 getFriction(U8 mcode); // havok values 169 F32 getFriction(U8 mcode); // physics values
121 F32 getRestitution(U8 mcode); // havok values 170 F32 getRestitution(U8 mcode); // physics values
122 F32 getHPMod(U8 mcode); 171 F32 getHPMod(U8 mcode);
123 F32 getDamageMod(U8 mcode); 172 F32 getDamageMod(U8 mcode);
124 F32 getEPMod(U8 mcode); 173 F32 getEPMod(U8 mcode);
diff --git a/linden/indra/llprimitive/llprimitive.cpp b/linden/indra/llprimitive/llprimitive.cpp
index 91d3c4e..a906926 100644
--- a/linden/indra/llprimitive/llprimitive.cpp
+++ b/linden/indra/llprimitive/llprimitive.cpp
@@ -113,9 +113,38 @@ const BOOL FLEXIBLE_OBJECT_DEFAULT_RENDERING_COLLISION_SPHERE = FALSE;
113 113
114const char *SCULPT_DEFAULT_TEXTURE = "be293869-d0d9-0a69-5989-ad27f1946fd4"; // old inverted texture: "7595d345-a24c-e7ef-f0bd-78793792133e"; 114const char *SCULPT_DEFAULT_TEXTURE = "be293869-d0d9-0a69-5989-ad27f1946fd4"; // old inverted texture: "7595d345-a24c-e7ef-f0bd-78793792133e";
115 115
116//static
117// LEGACY: by default we use the LLVolumeMgr::gVolumeMgr global
118// TODO -- eliminate this global from the codebase!
119LLVolumeMgr* LLPrimitive::sVolumeManager = NULL;
120
121// static
122void LLPrimitive::setVolumeManager( LLVolumeMgr* volume_manager )
123{
124 if ( !volume_manager || sVolumeManager )
125 {
126 llerrs << "Unable to set LLPrimitive::sVolumeManager to NULL" << llendl;
127 }
128 sVolumeManager = volume_manager;
129}
130
131// static
132bool LLPrimitive::cleanupVolumeManager()
133{
134 BOOL res = FALSE;
135 if (sVolumeManager)
136 {
137 res = sVolumeManager->cleanup();
138 delete sVolumeManager;
139 sVolumeManager = NULL;
140 }
141 return res;
142}
143
116 144
117//=============================================================== 145//===============================================================
118LLPrimitive::LLPrimitive() 146LLPrimitive::LLPrimitive()
147: mMiscFlags(0)
119{ 148{
120 mPrimitiveCode = 0; 149 mPrimitiveCode = 0;
121 150
@@ -149,7 +178,7 @@ LLPrimitive::~LLPrimitive()
149 // Cleanup handled by volume manager 178 // Cleanup handled by volume manager
150 if (mVolumep) 179 if (mVolumep)
151 { 180 {
152 gVolumeMgr->cleanupVolume(mVolumep); 181 sVolumeManager->cleanupVolume(mVolumep);
153 } 182 }
154 mVolumep = NULL; 183 mVolumep = NULL;
155} 184}
@@ -162,7 +191,7 @@ LLPrimitive *LLPrimitive::createPrimitive(LLPCode p_code)
162 191
163 if (retval) 192 if (retval)
164 { 193 {
165 retval->init(p_code); 194 retval->init_primitive(p_code);
166 } 195 }
167 else 196 else
168 { 197 {
@@ -173,7 +202,7 @@ LLPrimitive *LLPrimitive::createPrimitive(LLPCode p_code)
173} 202}
174 203
175//=============================================================== 204//===============================================================
176void LLPrimitive::init(LLPCode p_code) 205void LLPrimitive::init_primitive(LLPCode p_code)
177{ 206{
178 if (mNumTEs) 207 if (mNumTEs)
179 { 208 {
@@ -533,6 +562,8 @@ S32 LLPrimitive::setTEGlow(const U8 te, const F32 glow)
533 562
534LLPCode LLPrimitive::legacyToPCode(const U8 legacy) 563LLPCode LLPrimitive::legacyToPCode(const U8 legacy)
535{ 564{
565 // TODO: Should this default to something valid?
566 // Maybe volume?
536 LLPCode pcode = 0; 567 LLPCode pcode = 0;
537 568
538 switch (legacy) 569 switch (legacy)
@@ -621,7 +652,7 @@ LLPCode LLPrimitive::legacyToPCode(const U8 legacy)
621 pcode = LL_PCODE_TREE_NEW; 652 pcode = LL_PCODE_TREE_NEW;
622 break; 653 break;
623 default: 654 default:
624 llwarns << "Unknown legacy code " << legacy << "!" << llendl; 655 llwarns << "Unknown legacy code " << legacy << " [" << (S32)legacy << "]!" << llendl;
625 } 656 }
626 657
627 return pcode; 658 return pcode;
@@ -904,10 +935,10 @@ BOOL LLPrimitive::setVolume(const LLVolumeParams &volume_params, const S32 detai
904 } 935 }
905 } 936 }
906 937
907 volumep = gVolumeMgr->getVolume(volume_params, detail); 938 volumep = sVolumeManager->getVolume(volume_params, detail);
908 if (volumep == mVolumep) 939 if (volumep == mVolumep)
909 { 940 {
910 gVolumeMgr->cleanupVolume( volumep ); // gVolumeMgr->getVolume() creates a reference, but we don't need a second one. 941 sVolumeManager->cleanupVolume( volumep ); // LLVolumeMgr::getVolume() creates a reference, but we don't need a second one.
911 return TRUE; 942 return TRUE;
912 } 943 }
913 } 944 }
@@ -950,7 +981,7 @@ BOOL LLPrimitive::setVolume(const LLVolumeParams &volume_params, const S32 detai
950 981
951 982
952 // build the new object 983 // build the new object
953 gVolumeMgr->cleanupVolume(mVolumep); 984 sVolumeManager->cleanupVolume(mVolumep);
954 mVolumep = volumep; 985 mVolumep = volumep;
955 986
956 U32 new_face_mask = mVolumep->mFaceMask; 987 U32 new_face_mask = mVolumep->mFaceMask;
diff --git a/linden/indra/llprimitive/llprimitive.h b/linden/indra/llprimitive/llprimitive.h
index 3b43e8f..e698a31 100644
--- a/linden/indra/llprimitive/llprimitive.h
+++ b/linden/indra/llprimitive/llprimitive.h
@@ -48,6 +48,7 @@ class LLColor4;
48class LLColor3; 48class LLColor3;
49class LLTextureEntry; 49class LLTextureEntry;
50class LLDataPacker; 50class LLDataPacker;
51class LLVolumeMgr;
51 52
52enum LLGeomType // NOTE: same vals as GL Ids 53enum LLGeomType // NOTE: same vals as GL Ids
53{ 54{
@@ -269,11 +270,32 @@ public:
269class LLPrimitive : public LLXform 270class LLPrimitive : public LLXform
270{ 271{
271public: 272public:
273
274 // HACK for removing LLPrimitive's dependency on gVolumeMgr global.
275 // If a different LLVolumeManager is instantiated and set early enough
276 // then the LLPrimitive class will use it instead of gVolumeMgr.
277 static LLVolumeMgr* getVolumeManager() { return sVolumeManager; }
278 static void setVolumeManager( LLVolumeMgr* volume_manager);
279 static bool cleanupVolumeManager();
280
281 // these flags influence how the RigidBody representation is built
282 static const U32 PRIM_FLAG_PHANTOM = 0x1 << 0;
283 static const U32 PRIM_FLAG_VOLUME_DETECT = 0x1 << 1;
284 static const U32 PRIM_FLAG_DYNAMIC = 0x1 << 2;
285 static const U32 PRIM_FLAG_AVATAR = 0x1 << 3;
286 static const U32 PRIM_FLAG_SCULPT = 0x1 << 4;
287 // not used yet, but soon
288 static const U32 PRIM_FLAG_COLLISION_CALLBACK = 0x1 << 5;
289 static const U32 PRIM_FLAG_CONVEX = 0x1 << 6;
290 static const U32 PRIM_FLAG_DEFAULT_VOLUME = 0x1 << 7;
291 static const U32 PRIM_FLAG_SITTING = 0x1 << 8;
292 static const U32 PRIM_FLAG_SITTING_ON_GROUND = 0x1 << 9; // Set along with PRIM_FLAG_SITTING
293
272 LLPrimitive(); 294 LLPrimitive();
273 virtual ~LLPrimitive(); 295 virtual ~LLPrimitive();
274 296
275 static LLPrimitive *createPrimitive(LLPCode p_code); 297 static LLPrimitive *createPrimitive(LLPCode p_code);
276 void init(LLPCode p_code); 298 void init_primitive(LLPCode p_code);
277 299
278 void setPCode(const LLPCode pcode); 300 void setPCode(const LLPCode pcode);
279 const LLVolume *getVolumeConst() const { return mVolumep; } // HACK for Windoze confusion about ostream operator in LLVolume 301 const LLVolume *getVolumeConst() const { return mVolumep; } // HACK for Windoze confusion about ostream operator in LLVolume
@@ -369,8 +391,15 @@ public:
369 391
370 void setTextureList(LLTextureEntry *listp); 392 void setTextureList(LLTextureEntry *listp);
371 393
372 inline BOOL isAvatar() const; 394 inline BOOL isAvatar() const;
373 395 inline BOOL isSittingAvatar() const;
396 inline BOOL isSittingAvatarOnGround() const;
397
398 void setFlags(U32 flags) { mMiscFlags = flags; }
399 void addFlags(U32 flags) { mMiscFlags |= flags; }
400 void removeFlags(U32 flags) { mMiscFlags &= ~flags; }
401 U32 getFlags() const { return mMiscFlags; }
402
374 static const char *pCodeToString(const LLPCode pcode); 403 static const char *pCodeToString(const LLPCode pcode);
375 static LLPCode legacyToPCode(const U8 legacy); 404 static LLPCode legacyToPCode(const U8 legacy);
376 static U8 pCodeToLegacy(const LLPCode pcode); 405 static U8 pCodeToLegacy(const LLPCode pcode);
@@ -388,11 +417,28 @@ protected:
388 LLTextureEntry *mTextureList; // list of texture GUIDs, scales, offsets 417 LLTextureEntry *mTextureList; // list of texture GUIDs, scales, offsets
389 U8 mMaterial; // Material code 418 U8 mMaterial; // Material code
390 U8 mNumTEs; // # of faces on the primitve 419 U8 mNumTEs; // # of faces on the primitve
420 U32 mMiscFlags; // home for misc bools
421
422 static LLVolumeMgr* sVolumeManager;
391}; 423};
392 424
393inline BOOL LLPrimitive::isAvatar() const 425inline BOOL LLPrimitive::isAvatar() const
394{ 426{
395 return mPrimitiveCode == LL_PCODE_LEGACY_AVATAR; 427 return ( LL_PCODE_LEGACY_AVATAR == mPrimitiveCode ) ? TRUE : FALSE;
428}
429
430inline BOOL LLPrimitive::isSittingAvatar() const
431{
432 // this is only used server-side
433 return ( LL_PCODE_LEGACY_AVATAR == mPrimitiveCode
434 && ((getFlags() & (PRIM_FLAG_SITTING | PRIM_FLAG_SITTING_ON_GROUND)) != 0) ) ? TRUE : FALSE;
435}
436
437inline BOOL LLPrimitive::isSittingAvatarOnGround() const
438{
439 // this is only used server-side
440 return ( LL_PCODE_LEGACY_AVATAR == mPrimitiveCode
441 && ((getFlags() & PRIM_FLAG_SITTING_ON_GROUND) != 0) ) ? TRUE : FALSE;
396} 442}
397 443
398// static 444// static
diff --git a/linden/indra/llprimitive/llprimitive.vcproj b/linden/indra/llprimitive/llprimitive.vcproj
index b04d938..620ace4 100644
--- a/linden/indra/llprimitive/llprimitive.vcproj
+++ b/linden/indra/llprimitive/llprimitive.vcproj
@@ -19,8 +19,8 @@
19 <Tool 19 <Tool
20 Name="VCCLCompilerTool" 20 Name="VCCLCompilerTool"
21 Optimization="0" 21 Optimization="0"
22 AdditionalIncludeDirectories="..\llxml;..\llprimitive;..\llcommon;..\llmath;..\llmessage;..\..\libraries\i686-win32\include;..\..\libraries\include\" 22 AdditionalIncludeDirectories="..\;..\llxml;..\llprimitive;..\llcommon;..\llmath;..\llmessage;..\..\libraries\i686-win32\include;..\..\libraries\include"
23 PreprocessorDefinitions="WIN32;_DEBUG;_LIB;LL_WINDOWS;LL_DEBUG" 23 PreprocessorDefinitions="WIN32;_DEBUG;_LIB;LL_WINDOWS;LL_DEBUG;LL_CURRENT_HAVOK_VERSION=460"
24 MinimalRebuild="TRUE" 24 MinimalRebuild="TRUE"
25 BasicRuntimeChecks="3" 25 BasicRuntimeChecks="3"
26 RuntimeLibrary="1" 26 RuntimeLibrary="1"
@@ -64,8 +64,8 @@
64 <Tool 64 <Tool
65 Name="VCCLCompilerTool" 65 Name="VCCLCompilerTool"
66 AdditionalOptions="/Oy-" 66 AdditionalOptions="/Oy-"
67 AdditionalIncludeDirectories="..\llxml;..\llprimitive;..\llcommon;..\llmath;..\llmessage;..\..\libraries\i686-win32\include;..\..\libraries\include\" 67 AdditionalIncludeDirectories="..\;..\llxml;..\llprimitive;..\llcommon;..\llmath;..\llmessage;..\..\libraries\i686-win32\include;..\..\libraries\include\"
68 PreprocessorDefinitions="WIN32;NDEBUG;_LIB;LL_WINDOWS;LL_RELEASE" 68 PreprocessorDefinitions="WIN32;NDEBUG;_LIB;LL_WINDOWS;LL_RELEASE;LL_CURRENT_HAVOK_VERSION=460"
69 RuntimeLibrary="0" 69 RuntimeLibrary="0"
70 StructMemberAlignment="0" 70 StructMemberAlignment="0"
71 ForceConformanceInForLoopScope="TRUE" 71 ForceConformanceInForLoopScope="TRUE"
@@ -108,8 +108,8 @@
108 Name="VCCLCompilerTool" 108 Name="VCCLCompilerTool"
109 AdditionalOptions="/Oy-" 109 AdditionalOptions="/Oy-"
110 Optimization="0" 110 Optimization="0"
111 AdditionalIncludeDirectories="..\llxml;..\llprimitive;..\llcommon;..\llmath;..\llmessage;..\..\libraries\i686-win32\include;..\..\libraries\include\" 111 AdditionalIncludeDirectories="..\;..\llxml;..\llprimitive;..\llcommon;..\llmath;..\llmessage;..\..\libraries\i686-win32\include;..\..\libraries\include"
112 PreprocessorDefinitions="WIN32;NDEBUG;_LIB;LL_WINDOWS;LL_RELEASE" 112 PreprocessorDefinitions="WIN32;NDEBUG;_LIB;LL_WINDOWS;LL_RELEASE;LL_CURRENT_HAVOK_VERSION=460"
113 RuntimeLibrary="0" 113 RuntimeLibrary="0"
114 StructMemberAlignment="0" 114 StructMemberAlignment="0"
115 ForceConformanceInForLoopScope="TRUE" 115 ForceConformanceInForLoopScope="TRUE"
@@ -186,6 +186,9 @@
186 RelativePath=".\llprimitive.h"> 186 RelativePath=".\llprimitive.h">
187 </File> 187 </File>
188 <File 188 <File
189 RelativePath=".\llprimlinkinfo.h">
190 </File>
191 <File
189 RelativePath=".\lltextureanim.h"> 192 RelativePath=".\lltextureanim.h">
190 </File> 193 </File>
191 <File 194 <File
diff --git a/linden/indra/llprimitive/llprimlinkinfo.h b/linden/indra/llprimitive/llprimlinkinfo.h
new file mode 100644
index 0000000..8de5ca0
--- /dev/null
+++ b/linden/indra/llprimitive/llprimlinkinfo.h
@@ -0,0 +1,388 @@
1/**
2 * @file llprimlinkinfo.h
3 * @author andrew@lindenlab.com
4 * @brief A template for determining which prims in a set are linkable
5 *
6 * $LicenseInfo:firstyear=2007&license=internal$
7 *
8 * Copyright (c) 2007-2008, Linden Research, Inc.
9 *
10 * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
11 * this source code is governed by the Linden Lab Source Code Disclosure
12 * Agreement ("Agreement") previously entered between you and Linden
13 * Lab. By accessing, using, copying, modifying or distributing this
14 * software, you acknowledge that you have been informed of your
15 * obligations under the Agreement and agree to abide by those obligations.
16 *
17 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
18 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
19 * COMPLETENESS OR PERFORMANCE.
20 * $/LicenseInfo$
21 */
22
23
24#ifndef LL_PRIM_LINK_INFO_H
25#define LL_PRIM_LINK_INFO_H
26
27// system includes
28#include <iostream>
29#include <map>
30#include <list>
31#include <vector>
32
33// common includes
34#include "stdtypes.h"
35#include "v3math.h"
36#include "llquaternion.h"
37#include "llsphere.h"
38
39
40const F32 MAX_OBJECT_SPAN = 54.f; // max distance from outside edge of an object to the farthest edge
41const F32 OBJECT_SPAN_BONUS = 2.f; // infinitesimally small prims can always link up to this distance
42const S32 MAX_PRIMS_PER_OBJECT = 255;
43
44
45template < typename DATA_TYPE >
46class LLPrimLinkInfo
47{
48public:
49 LLPrimLinkInfo();
50 LLPrimLinkInfo( DATA_TYPE data, const LLSphere& sphere );
51 ~LLPrimLinkInfo();
52
53 void set( DATA_TYPE data, const LLSphere& sphere );
54 void append( DATA_TYPE data, const LLSphere& sphere );
55 void getData( std::list< DATA_TYPE >& data_list ) const;
56 F32 getDiameter() const;
57 LLVector3 getCenter() const;
58
59 // returns 'true' if this info can link with other_info
60 bool canLink( const LLPrimLinkInfo< DATA_TYPE >& other_info );
61
62 S32 getPrimCount() const { return mDataMap.size(); }
63
64 void mergeLinkableSet( typename std::list< LLPrimLinkInfo < DATA_TYPE > >& unlinked );
65
66 void transform(const LLVector3& position, const LLQuaternion& rotation);
67
68private:
69 // returns number of merges made
70 S32 merge(LLPrimLinkInfo< DATA_TYPE >& other_info);
71
72 // returns number of collapses made
73 static S32 collapse(typename std::list< LLPrimLinkInfo < DATA_TYPE > >& unlinked );
74
75 void computeBoundingSphere();
76
77 // Internal utility to encapsulate the link rules
78 F32 get_max_linkable_span(const LLSphere& first, const LLSphere& second);
79 F32 get_span(const LLSphere& first, const LLSphere& second);
80
81private:
82 std::map< DATA_TYPE, LLSphere > mDataMap;
83 LLSphere mBoundingSphere;
84};
85
86
87
88template < typename DATA_TYPE >
89LLPrimLinkInfo< DATA_TYPE >::LLPrimLinkInfo()
90: mBoundingSphere( LLVector3(0.f, 0.f, 0.f), 0.f )
91{
92}
93
94template < typename DATA_TYPE >
95LLPrimLinkInfo< DATA_TYPE >::LLPrimLinkInfo( DATA_TYPE data, const LLSphere& sphere)
96: mBoundingSphere(sphere)
97{
98 mDataMap[data] = sphere;
99}
100
101template < typename DATA_TYPE >
102LLPrimLinkInfo< DATA_TYPE >::~LLPrimLinkInfo()
103{
104 mDataMap.clear();
105}
106
107template < typename DATA_TYPE >
108void LLPrimLinkInfo< DATA_TYPE>::set( DATA_TYPE data, const LLSphere& sphere )
109{
110 if (!mDataMap.empty())
111 {
112 mDataMap.clear();
113 }
114 mDataMap[data] = sphere;
115 mBoundingSphere = sphere;
116}
117
118template < typename DATA_TYPE >
119void LLPrimLinkInfo< DATA_TYPE>::append( DATA_TYPE data, const LLSphere& sphere )
120{
121 mDataMap[data] = sphere;
122 if (!mBoundingSphere.contains(sphere))
123 {
124 computeBoundingSphere();
125 }
126}
127
128template < typename DATA_TYPE >
129void LLPrimLinkInfo< DATA_TYPE >::getData( std::list< DATA_TYPE >& data_list) const
130{
131 typename std::map< DATA_TYPE, LLSphere >::const_iterator map_itr;
132 for (map_itr = mDataMap.begin(); map_itr != mDataMap.end(); ++map_itr)
133 {
134 data_list.push_back(map_itr->first);
135 }
136}
137
138template < typename DATA_TYPE >
139F32 LLPrimLinkInfo< DATA_TYPE >::getDiameter() const
140{
141 return 2.f * mBoundingSphere.getRadius();
142}
143
144template < typename DATA_TYPE >
145LLVector3 LLPrimLinkInfo< DATA_TYPE >::getCenter() const
146{
147 return mBoundingSphere.getCenter();
148}
149
150template < typename DATA_TYPE >
151F32 LLPrimLinkInfo< DATA_TYPE >::get_max_linkable_span(const LLSphere& first, const LLSphere& second)
152{
153 F32 max_span = 3.f * (first.getRadius() + second.getRadius()) + OBJECT_SPAN_BONUS;
154 if (max_span > MAX_OBJECT_SPAN)
155 {
156 max_span = MAX_OBJECT_SPAN;
157 }
158
159 return max_span;
160}
161
162template < typename DATA_TYPE >
163F32 LLPrimLinkInfo< DATA_TYPE >::get_span(const LLSphere& first, const LLSphere& second)
164{
165 F32 span = (first.getCenter() - second.getCenter()).length()
166 + first.getRadius() + second.getRadius();
167 return span;
168}
169
170// static
171// returns 'true' if this info can link with any part of other_info
172template < typename DATA_TYPE >
173bool LLPrimLinkInfo< DATA_TYPE >::canLink(const LLPrimLinkInfo& other_info)
174{
175 F32 max_span = get_max_linkable_span(mBoundingSphere, other_info.mBoundingSphere);
176
177 F32 span = get_span(mBoundingSphere, other_info.mBoundingSphere);
178
179 if (span <= max_span)
180 {
181 // The entire other_info fits inside the max span.
182 return TRUE;
183 }
184 else if (span > max_span + 2.f * other_info.mBoundingSphere.getRadius())
185 {
186 // there is no way any piece of other_info could link with this one
187 return FALSE;
188 }
189
190 // there may be a piece of other_info that is linkable
191 typename std::map< DATA_TYPE, LLSphere >::const_iterator map_itr;
192 for (map_itr = other_info.mDataMap.begin(); map_itr != other_info.mDataMap.end(); ++map_itr)
193 {
194 const LLSphere& other_sphere = (*map_itr).second;
195 max_span = get_max_linkable_span(mBoundingSphere, other_sphere);
196
197 span = get_span(mBoundingSphere, other_sphere);
198
199 if (span <= max_span)
200 {
201 // found one piece that is linkable
202 return TRUE;
203 }
204 }
205 return FALSE;
206}
207
208// merges elements of 'unlinked'
209// returns number of links made (NOT final prim count, NOR linked prim count)
210// and removes any linkable infos from 'unlinked'
211template < typename DATA_TYPE >
212void LLPrimLinkInfo< DATA_TYPE >::mergeLinkableSet(std::list< LLPrimLinkInfo< DATA_TYPE > > & unlinked)
213{
214 bool linked_something = true;
215 while (linked_something)
216 {
217 linked_something = false;
218
219 typename std::list< LLPrimLinkInfo< DATA_TYPE > >::iterator other_itr = unlinked.begin();
220 while ( other_itr != unlinked.end()
221 && getPrimCount() < MAX_PRIMS_PER_OBJECT )
222 {
223 S32 merge_count = merge(*other_itr);
224 if (merge_count > 0)
225 {
226 linked_something = true;
227 }
228 if (0 == (*other_itr).getPrimCount())
229 {
230 unlinked.erase(other_itr++);
231 }
232 else
233 {
234 ++other_itr;
235 }
236 }
237 if (!linked_something
238 && unlinked.size() > 1)
239 {
240 S32 collapse_count = collapse(unlinked);
241 if (collapse_count > 0)
242 {
243 linked_something = true;
244 }
245 }
246 }
247}
248
249// transforms all of the spheres into a new reference frame
250template < typename DATA_TYPE >
251void LLPrimLinkInfo< DATA_TYPE >::transform(const LLVector3& position, const LLQuaternion& rotation)
252{
253 typename std::map< DATA_TYPE, LLSphere >::iterator map_itr;
254 for (map_itr = mDataMap.begin(); map_itr != mDataMap.end(); ++map_itr)
255 {
256 (*map_itr).second.setCenter((*map_itr).second.getCenter() * rotation + position);
257 }
258 mBoundingSphere.setCenter(mBoundingSphere.getCenter() * rotation + position);
259}
260
261// private
262// returns number of links made
263template < typename DATA_TYPE >
264S32 LLPrimLinkInfo< DATA_TYPE >::merge(LLPrimLinkInfo& other_info)
265{
266 S32 link_count = 0;
267
268// F32 other_radius = other_info.mBoundingSphere.getRadius();
269// other_info.computeBoundingSphere();
270// if ( other_radius != other_info.mBoundingSphere.getRadius() )
271// {
272// llinfos << "Other bounding sphere changed!!" << llendl;
273// }
274
275// F32 this_radius = mBoundingSphere.getRadius();
276// computeBoundingSphere();
277// if ( this_radius != mBoundingSphere.getRadius() )
278// {
279// llinfos << "This bounding sphere changed!!" << llendl;
280// }
281
282
283 F32 max_span = get_max_linkable_span(mBoundingSphere, other_info.mBoundingSphere);
284
285 // F32 center_dist = (mBoundingSphere.getCenter() - other_info.mBoundingSphere.getCenter()).length();
286 // llinfos << "objects are " << center_dist << "m apart" << llendl;
287 F32 span = get_span(mBoundingSphere, other_info.mBoundingSphere);
288
289 F32 span_limit = max_span + (2.f * other_info.mBoundingSphere.getRadius());
290 if (span > span_limit)
291 {
292 // there is no way any piece of other_info could link with this one
293 // llinfos << "span too large: " << span << " vs. " << span_limit << llendl;
294 return 0;
295 }
296
297 bool completely_linkable = (span <= max_span) ? true : false;
298
299 typename std::map< DATA_TYPE, LLSphere >::iterator map_itr = other_info.mDataMap.begin();
300 while (map_itr != other_info.mDataMap.end()
301 && getPrimCount() < MAX_PRIMS_PER_OBJECT )
302 {
303 DATA_TYPE other_data = (*map_itr).first;
304 LLSphere& other_sphere = (*map_itr).second;
305
306 if (!completely_linkable)
307 {
308 max_span = get_max_linkable_span(mBoundingSphere, other_sphere);
309
310 F32 span = get_span(mBoundingSphere, other_sphere);
311
312 if (span > max_span)
313 {
314 ++map_itr;
315 continue;
316 }
317 }
318
319 mDataMap[other_data] = other_sphere;
320 ++link_count;
321
322 if (!mBoundingSphere.contains(other_sphere) )
323 {
324 computeBoundingSphere();
325 }
326
327 // remove from the other info
328 other_info.mDataMap.erase(map_itr++);
329 }
330
331 if (link_count > 0 && other_info.getPrimCount() > 0)
332 {
333 other_info.computeBoundingSphere();
334 }
335 return link_count;
336}
337
338// links any linkable elements of unlinked
339template < typename DATA_TYPE >
340S32 LLPrimLinkInfo< DATA_TYPE >::collapse(std::list< LLPrimLinkInfo< DATA_TYPE > > & unlinked)
341{
342 S32 link_count = 0;
343 bool linked_something = true;
344 while (linked_something)
345 {
346 linked_something = false;
347
348 typename std::list< LLPrimLinkInfo< DATA_TYPE > >::iterator this_itr = unlinked.begin();
349 typename std::list< LLPrimLinkInfo< DATA_TYPE > >::iterator other_itr = this_itr;
350 ++other_itr;
351 while ( other_itr != unlinked.end() )
352
353 {
354 S32 merge_count = (*this_itr).merge(*other_itr);
355 if (merge_count > 0)
356 {
357 linked_something = true;
358 link_count += merge_count;
359 }
360 if (0 == (*other_itr).getPrimCount())
361 {
362 unlinked.erase(other_itr++);
363 }
364 else
365 {
366 ++other_itr;
367 }
368 }
369 }
370 return link_count;
371}
372
373
374template < typename DATA_TYPE >
375void LLPrimLinkInfo< DATA_TYPE >::computeBoundingSphere()
376{
377 std::vector< LLSphere > sphere_list;
378 typename std::map< DATA_TYPE, LLSphere >::const_iterator map_itr;
379 for (map_itr = mDataMap.begin(); map_itr != mDataMap.end(); ++map_itr)
380 {
381 sphere_list.push_back(map_itr->second);
382 }
383 mBoundingSphere = LLSphere::getBoundingSphere(sphere_list);
384}
385
386
387#endif
388
diff --git a/linden/indra/llrender/llfontgl.cpp b/linden/indra/llrender/llfontgl.cpp
index 9298e8c..53e8c2b 100644
--- a/linden/indra/llrender/llfontgl.cpp
+++ b/linden/indra/llrender/llfontgl.cpp
@@ -47,6 +47,7 @@ F32 LLFontGL::sVertDPI = 96.f;
47F32 LLFontGL::sHorizDPI = 96.f; 47F32 LLFontGL::sHorizDPI = 96.f;
48F32 LLFontGL::sScaleX = 1.f; 48F32 LLFontGL::sScaleX = 1.f;
49F32 LLFontGL::sScaleY = 1.f; 49F32 LLFontGL::sScaleY = 1.f;
50BOOL LLFontGL::sDisplayFont = TRUE ;
50LLString LLFontGL::sAppDir; 51LLString LLFontGL::sAppDir;
51 52
52LLFontGL* LLFontGL::sMonospace = NULL; 53LLFontGL* LLFontGL::sMonospace = NULL;
@@ -559,6 +560,11 @@ S32 LLFontGL::render(const LLWString &wstr,
559 BOOL use_embedded, 560 BOOL use_embedded,
560 BOOL use_ellipses) const 561 BOOL use_ellipses) const
561{ 562{
563 if(!sDisplayFont) //do not display texts
564 {
565 return wstr.length() ;
566 }
567
562 LLGLEnable tex(GL_TEXTURE_2D); 568 LLGLEnable tex(GL_TEXTURE_2D);
563 569
564 if (wstr.empty()) 570 if (wstr.empty())
diff --git a/linden/indra/llrender/llfontgl.h b/linden/indra/llrender/llfontgl.h
index ce55385..4df1063 100644
--- a/linden/indra/llrender/llfontgl.h
+++ b/linden/indra/llrender/llfontgl.h
@@ -204,6 +204,8 @@ public:
204 static LLString nameFromVAlign(LLFontGL::VAlign align); 204 static LLString nameFromVAlign(LLFontGL::VAlign align);
205 static LLFontGL::VAlign vAlignFromName(const LLString& name); 205 static LLFontGL::VAlign vAlignFromName(const LLString& name);
206 206
207 static void setFontDisplay(BOOL flag) { sDisplayFont = flag ; }
208
207protected: 209protected:
208 struct embedded_data_t 210 struct embedded_data_t
209 { 211 {
@@ -222,6 +224,7 @@ public:
222 static F32 sHorizDPI; 224 static F32 sHorizDPI;
223 static F32 sScaleX; 225 static F32 sScaleX;
224 static F32 sScaleY; 226 static F32 sScaleY;
227 static BOOL sDisplayFont ;
225 static LLString sAppDir; // For loading fonts 228 static LLString sAppDir; // For loading fonts
226 229
227 static LLFontGL* sMonospace; // medium 230 static LLFontGL* sMonospace; // medium
@@ -246,7 +249,7 @@ public:
246protected: 249protected:
247 /*virtual*/ BOOL addChar(const llwchar wch); 250 /*virtual*/ BOOL addChar(const llwchar wch);
248 static LLString getFontPathLocal(); 251 static LLString getFontPathLocal();
249 static LLString getFontPathSystem(); 252 static LLString getFontPathSystem();
250 253
251protected: 254protected:
252 LLPointer<LLImageRaw> mRawImageGLp; 255 LLPointer<LLImageRaw> mRawImageGLp;
diff --git a/linden/indra/llrender/llrendertarget.cpp b/linden/indra/llrender/llrendertarget.cpp
index 974e0a2..d95c8aa 100644
--- a/linden/indra/llrender/llrendertarget.cpp
+++ b/linden/indra/llrender/llrendertarget.cpp
@@ -49,8 +49,9 @@ LLRenderTarget::~LLRenderTarget()
49 release(); 49 release();
50} 50}
51 51
52void LLRenderTarget::allocate(U32 resx, U32 resy, U32 color_fmt, BOOL depth, U32 usage, BOOL force_fbo) 52void LLRenderTarget::allocate(U32 resx, U32 resy, U32 color_fmt, BOOL depth, U32 usage, BOOL use_fbo)
53{ 53{
54 stop_glerror();
54 mResX = resx; 55 mResX = resx;
55 mResY = resy; 56 mResY = resy;
56 57
@@ -79,32 +80,45 @@ void LLRenderTarget::allocate(U32 resx, U32 resy, U32 color_fmt, BOOL depth, U32
79 80
80 stop_glerror(); 81 stop_glerror();
81 82
82 if (sUseFBO || force_fbo) 83 if ((sUseFBO || use_fbo) && gGLManager.mHasFramebufferObject)
83 { 84 {
85
84 if (depth) 86 if (depth)
85 { 87 {
86 glGenRenderbuffersEXT(1, (GLuint *) &mDepth); 88 stop_glerror();
87 glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, mDepth); 89 allocateDepth();
88 glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT,GL_DEPTH_COMPONENT,mResX,mResY); 90 stop_glerror();
89 glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0);
90 } 91 }
91 92
92 glGenFramebuffersEXT(1, (GLuint *) &mFBO); 93 glGenFramebuffersEXT(1, (GLuint *) &mFBO);
94
93 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, mFBO); 95 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, mFBO);
94 96
95 if (mDepth) 97 if (mDepth)
96 { 98 {
97 glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, 99 glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, mUsage, mDepth, 0);
98 GL_RENDERBUFFER_EXT, mDepth); 100 glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, mUsage, mDepth, 0);
101 stop_glerror();
99 } 102 }
103
100 glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, 104 glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
101 mUsage, mTex, 0); 105 mUsage, mTex, 0);
102 106 stop_glerror();
103 107
104 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); 108 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
109 stop_glerror();
105 } 110 }
106} 111}
107 112
113void LLRenderTarget::allocateDepth()
114{
115 glGenTextures(1, (GLuint *) &mDepth);
116 glBindTexture(mUsage, mDepth);
117 glTexParameteri(mUsage, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
118 glTexParameteri(mUsage, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
119 glTexImage2D(mUsage, 0, GL_DEPTH24_STENCIL8_EXT, mResX, mResY, 0, GL_DEPTH_STENCIL_EXT, GL_UNSIGNED_INT_24_8_EXT, NULL);
120}
121
108void LLRenderTarget::release() 122void LLRenderTarget::release()
109{ 123{
110 if (mFBO) 124 if (mFBO)
@@ -121,7 +135,7 @@ void LLRenderTarget::release()
121 135
122 if (mDepth) 136 if (mDepth)
123 { 137 {
124 glDeleteRenderbuffersEXT(1, (GLuint *) &mDepth); 138 glDeleteTextures(1, (GLuint *) &mDepth);
125 mDepth = 0; 139 mDepth = 0;
126 } 140 }
127} 141}
@@ -141,7 +155,7 @@ void LLRenderTarget::clear()
141 U32 mask = GL_COLOR_BUFFER_BIT; 155 U32 mask = GL_COLOR_BUFFER_BIT;
142 if (mUseDepth) 156 if (mUseDepth)
143 { 157 {
144 mask |= GL_DEPTH_BUFFER_BIT; 158 mask |= GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT;
145 } 159 }
146 if (mFBO) 160 if (mFBO)
147 { 161 {
@@ -160,13 +174,34 @@ void LLRenderTarget::bindTexture()
160 glBindTexture(mUsage, mTex); 174 glBindTexture(mUsage, mTex);
161} 175}
162 176
163void LLRenderTarget::flush() 177void LLRenderTarget::bindDepth()
178{
179 glBindTexture(mUsage, mDepth);
180}
181
182
183void LLRenderTarget::flush(BOOL fetch_depth)
164{ 184{
165 gGL.flush(); 185 gGL.flush();
166 if (!mFBO) 186 if (!mFBO)
167 { 187 {
168 bindTexture(); 188 bindTexture();
169 glCopyTexSubImage2D(mUsage, 0, 0, 0, 0, 0, mResX, mResY); 189 glCopyTexSubImage2D(mUsage, 0, 0, 0, 0, 0, mResX, mResY);
190
191 if (fetch_depth)
192 {
193 if (!mDepth)
194 {
195 allocateDepth();
196 }
197
198 bindDepth();
199 glCopyTexImage2D(mUsage, 0, GL_DEPTH24_STENCIL8_EXT, 0, 0, mResX, mResY, 0);
200 }
201 }
202 else
203 {
204 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
170 } 205 }
171} 206}
172 207
diff --git a/linden/indra/llrender/llrendertarget.h b/linden/indra/llrender/llrendertarget.h
index cc36146..918a604 100644
--- a/linden/indra/llrender/llrendertarget.h
+++ b/linden/indra/llrender/llrendertarget.h
@@ -37,7 +37,7 @@
37/* 37/*
38 SAMPLE USAGE: 38 SAMPLE USAGE:
39 39
40 LLFBOTarget target; 40 LLRenderTarget target;
41 41
42 ... 42 ...
43 43
@@ -46,7 +46,7 @@
46 46
47 //render to contents of offscreen buffer 47 //render to contents of offscreen buffer
48 target.bindTarget(); 48 target.bindTarget();
49 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 49 target.clear();
50 ... <issue drawing commands> ... 50 ... <issue drawing commands> ...
51 target.flush(); 51 target.flush();
52 52
@@ -71,7 +71,10 @@ public:
71 //allocate resources for rendering 71 //allocate resources for rendering
72 //must be called before use 72 //must be called before use
73 //multiple calls will release previously allocated resources 73 //multiple calls will release previously allocated resources
74 void allocate(U32 resx, U32 resy, U32 color_fmt, BOOL depth, U32 usage = GL_TEXTURE_2D, BOOL force_fbo = FALSE); 74 void allocate(U32 resx, U32 resy, U32 color_fmt, BOOL depth, U32 usage = GL_TEXTURE_2D, BOOL use_fbo = TRUE);
75
76 //allocate a depth texture
77 void allocateDepth();
75 78
76 //free any allocated resources 79 //free any allocated resources
77 //safe to call redundantly 80 //safe to call redundantly
@@ -80,7 +83,7 @@ public:
80 //bind target for rendering 83 //bind target for rendering
81 //applies appropriate viewport 84 //applies appropriate viewport
82 void bindTarget(); 85 void bindTarget();
83 86
84 //clear render targer, clears depth buffer if present, 87 //clear render targer, clears depth buffer if present,
85 //uses scissor rect if in copy-to-texture mode 88 //uses scissor rect if in copy-to-texture mode
86 void clear(); 89 void clear();
@@ -88,14 +91,25 @@ public:
88 //get applied viewport 91 //get applied viewport
89 void getViewport(S32* viewport); 92 void getViewport(S32* viewport);
90 93
94 //get X resolution
95 U32 getWidth() const { return mResX; }
96
97 //get Y resolution
98 U32 getHeight() const { return mResY; }
99
91 //bind results of render for sampling 100 //bind results of render for sampling
92 void bindTexture(); 101 void bindTexture();
93 102
103 //bind results of render for sampling depth buffer
104 void bindDepth();
105
94 //flush rendering operations 106 //flush rendering operations
95 //must be called when rendering is complete 107 //must be called when rendering is complete
96 //should be used 1:1 with bindTarget 108 //should be used 1:1 with bindTarget
97 // call bindTarget once, do all your rendering, call flush once 109 // call bindTarget once, do all your rendering, call flush once
98 void flush(); 110 // if fetch_depth is TRUE, every effort will be made to copy the depth buffer into
111 // the current depth texture. A depth texture will be allocated if needed.
112 void flush(BOOL fetch_depth = FALSE);
99 113
100 //Returns TRUE if target is ready to be rendered into. 114 //Returns TRUE if target is ready to be rendered into.
101 //That is, if the target has been allocated with at least 115 //That is, if the target has been allocated with at least
@@ -108,8 +122,11 @@ private:
108 U32 mTex; 122 U32 mTex;
109 U32 mFBO; 123 U32 mFBO;
110 U32 mDepth; 124 U32 mDepth;
125 U32 mStencil;
111 BOOL mUseDepth; 126 BOOL mUseDepth;
127 BOOL mRenderDepth;
112 U32 mUsage; 128 U32 mUsage;
129
113}; 130};
114 131
115#endif 132#endif
diff --git a/linden/indra/llui/llalertdialog.cpp b/linden/indra/llui/llalertdialog.cpp
index e60ef42..4ca9dc8 100644
--- a/linden/indra/llui/llalertdialog.cpp
+++ b/linden/indra/llui/llalertdialog.cpp
@@ -186,7 +186,7 @@ bool LLAlertDialog::show()
186 { 186 {
187 mOptionChosen = mDefaultOption; 187 mOptionChosen = mDefaultOption;
188 llinfos << "Alert: " << mLabel << llendl; 188 llinfos << "Alert: " << mLabel << llendl;
189 delete this; 189 close();
190 return false; 190 return false;
191 } 191 }
192 } 192 }
@@ -208,7 +208,7 @@ bool LLAlertDialog::show()
208 case IGNORE_SHOW_AGAIN: 208 case IGNORE_SHOW_AGAIN:
209 break; 209 break;
210 } 210 }
211 delete this; 211 close();
212 return false; 212 return false;
213 } 213 }
214 } 214 }
@@ -231,7 +231,7 @@ bool LLAlertDialog::show()
231 { 231 {
232 gFloaterView->bringToFront(iter->second); 232 gFloaterView->bringToFront(iter->second);
233 mUnique = FALSE; // don't remove entry from map on destruction 233 mUnique = FALSE; // don't remove entry from map on destruction
234 delete this; 234 close();
235 return false; 235 return false;
236 } 236 }
237 sUniqueActiveMap[mLabel] = this; 237 sUniqueActiveMap[mLabel] = this;
@@ -270,7 +270,7 @@ void LLAlertDialog::createDialog(const std::vector<LLString>* optionsp, S32 defa
270 setBackgroundVisible(TRUE); 270 setBackgroundVisible(TRUE);
271 setBackgroundOpaque(TRUE); 271 setBackgroundOpaque(TRUE);
272 272
273 const LLFontGL* font = gResMgr->getRes( font_name ); 273 const LLFontGL* font = LLResMgr::getInstance()->getRes( font_name );
274 const S32 LINE_HEIGHT = llfloor(font->getLineHeight() + 0.99f); 274 const S32 LINE_HEIGHT = llfloor(font->getLineHeight() + 0.99f);
275 const S32 EDITOR_HEIGHT = 20; 275 const S32 EDITOR_HEIGHT = 20;
276 276
@@ -399,7 +399,7 @@ void LLAlertDialog::createDialog(const std::vector<LLString>* optionsp, S32 defa
399 399
400bool LLAlertDialog::setCheckBox( const LLString& check_title, const LLString& check_control ) 400bool LLAlertDialog::setCheckBox( const LLString& check_title, const LLString& check_control )
401{ 401{
402 const LLFontGL* font = gResMgr->getRes( font_name ); 402 const LLFontGL* font = LLResMgr::getInstance()->getRes( font_name );
403 const S32 LINE_HEIGHT = llfloor(font->getLineHeight() + 0.99f); 403 const S32 LINE_HEIGHT = llfloor(font->getLineHeight() + 0.99f);
404 404
405 // Extend dialog for "check next time" 405 // Extend dialog for "check next time"
@@ -444,8 +444,23 @@ void LLAlertDialog::setVisible( BOOL visible )
444 } 444 }
445} 445}
446 446
447void LLAlertDialog::onClose(bool app_quitting)
448{
449 LLModalDialog::onClose(app_quitting);
450 handleCallbacks();
451}
452
447LLAlertDialog::~LLAlertDialog() 453LLAlertDialog::~LLAlertDialog()
448{ 454{
455 delete[] mButtonData;
456 if (mUnique)
457 {
458 sUniqueActiveMap.erase(mLabel);
459 }
460}
461
462void LLAlertDialog::handleCallbacks()
463{
449 if (mOptionChosen >= 0) 464 if (mOptionChosen >= 0)
450 { 465 {
451 if (mTextCallback && mLineEditor) 466 if (mTextCallback && mLineEditor)
@@ -465,7 +480,7 @@ LLAlertDialog::~LLAlertDialog()
465 sURLLoader->load(mURL); 480 sURLLoader->load(mURL);
466 } 481 }
467 } 482 }
468 483
469 // Only change warn state if we actually warned. 484 // Only change warn state if we actually warned.
470 if (mCheck 485 if (mCheck
471 && sSettings->getWarning(mIgnoreLabel)) 486 && sSettings->getWarning(mIgnoreLabel))
@@ -490,13 +505,7 @@ LLAlertDialog::~LLAlertDialog()
490 } 505 }
491 } 506 }
492 } 507 }
493 delete[] mButtonData;
494 if (mUnique)
495 {
496 sUniqueActiveMap.erase(mLabel);
497 }
498} 508}
499
500BOOL LLAlertDialog::hasTitleBar() const 509BOOL LLAlertDialog::hasTitleBar() const
501{ 510{
502 return (getTitle() != "" && getTitle() != " ") // has title 511 return (getTitle() != "" && getTitle() != " ") // has title
@@ -504,16 +513,11 @@ BOOL LLAlertDialog::hasTitleBar() const
504 || isCloseable(); 513 || isCloseable();
505} 514}
506 515
507BOOL LLAlertDialog::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent ) 516BOOL LLAlertDialog::handleKeyHere(KEY key, MASK mask )
508{ 517{
509 if( KEY_RETURN == key && mask == MASK_NONE ) 518 if( KEY_RETURN == key && mask == MASK_NONE )
510 { 519 {
511 // Warning: handleKeyHere may result in the default button 520 LLModalDialog::handleKeyHere( key, mask );
512 // being committed, which will destroy this object.
513 // Everything works, but the call stack will pass through
514 // the very end of functions that belong to deleted objects.
515 // Should find a less fragile way to do this.
516 LLModalDialog::handleKeyHere( key, mask , called_from_parent );
517 return TRUE; 521 return TRUE;
518 } 522 }
519 else if (KEY_RIGHT == key) 523 else if (KEY_RIGHT == key)
@@ -538,7 +542,7 @@ BOOL LLAlertDialog::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent )
538 } 542 }
539 else 543 else
540 { 544 {
541 return LLModalDialog::handleKeyHere( key, mask , called_from_parent ); 545 return LLModalDialog::handleKeyHere( key, mask );
542 } 546 }
543} 547}
544 548
@@ -551,16 +555,14 @@ void LLAlertDialog::draw()
551 mDefaultBtnTimer.stop(); // prevent this block from being run more than once 555 mDefaultBtnTimer.stop(); // prevent this block from being run more than once
552 setDefaultBtn(mButtonData[mDefaultOption].mButton); 556 setDefaultBtn(mButtonData[mDefaultOption].mButton);
553 } 557 }
554 if (getVisible())
555 {
556 LLColor4 shadow_color = LLUI::sColorsGroup->getColor("ColorDropShadow");
557 S32 shadow_lines = LLUI::sConfigGroup->getS32("DropShadowFloater");
558 558
559 gl_drop_shadow( 0, getRect().getHeight(), getRect().getWidth(), 0, 559 LLColor4 shadow_color = LLUI::sColorsGroup->getColor("ColorDropShadow");
560 shadow_color, shadow_lines); 560 S32 shadow_lines = LLUI::sConfigGroup->getS32("DropShadowFloater");
561 561
562 LLModalDialog::draw(); 562 gl_drop_shadow( 0, getRect().getHeight(), getRect().getWidth(), 0,
563 } 563 shadow_color, shadow_lines);
564
565 LLModalDialog::draw();
564} 566}
565 567
566void LLAlertDialog::setOptionEnabled( S32 option, BOOL enable ) 568void LLAlertDialog::setOptionEnabled( S32 option, BOOL enable )
diff --git a/linden/indra/llui/llalertdialog.h b/linden/indra/llui/llalertdialog.h
index 4978d71..8633164 100644
--- a/linden/indra/llui/llalertdialog.h
+++ b/linden/indra/llui/llalertdialog.h
@@ -68,10 +68,11 @@ public:
68 LLAlertDialog( const LLAlertDialogTemplate* xml_template, const LLString::format_map_t& args, 68 LLAlertDialog( const LLAlertDialogTemplate* xml_template, const LLString::format_map_t& args,
69 alert_callback_t callback = NULL, void *user_data = NULL); 69 alert_callback_t callback = NULL, void *user_data = NULL);
70 70
71 virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent ); 71 virtual BOOL handleKeyHere(KEY key, MASK mask );
72 72
73 virtual void draw(); 73 virtual void draw();
74 virtual void setVisible( BOOL visible ); 74 virtual void setVisible( BOOL visible );
75 virtual void onClose(bool app_quitting);
75 76
76 bool setCheckBox( const LLString&, const LLString& ); 77 bool setCheckBox( const LLString&, const LLString& );
77 void setOptionEnabled( S32 option, BOOL enable ); 78 void setOptionEnabled( S32 option, BOOL enable );
@@ -126,7 +127,9 @@ private:
126 const LLString& msg, const LLString::format_map_t& args, 127 const LLString& msg, const LLString::format_map_t& args,
127 const LLString& edit_text); 128 const LLString& edit_text);
128 129
129 virtual ~LLAlertDialog(); // No you can't kill it. It can only kill itself. 130 virtual ~LLAlertDialog();
131 void handleCallbacks();
132 // No you can't kill it. It can only kill itself.
130 133
131 // Does it have a readable title label, or minimize or close buttons? 134 // Does it have a readable title label, or minimize or close buttons?
132 BOOL hasTitleBar() const; 135 BOOL hasTitleBar() const;
diff --git a/linden/indra/llui/llbutton.cpp b/linden/indra/llui/llbutton.cpp
index 4af40ff..3ada389 100644
--- a/linden/indra/llui/llbutton.cpp
+++ b/linden/indra/llui/llbutton.cpp
@@ -50,6 +50,8 @@
50#include "llwindow.h" 50#include "llwindow.h"
51#include "llglimmediate.h" 51#include "llglimmediate.h"
52 52
53static LLRegisterWidget<LLButton> r("button");
54
53// globals loaded from settings.xml 55// globals loaded from settings.xml
54S32 LLBUTTON_ORIG_H_PAD = 6; // Pre-zoomable UI 56S32 LLBUTTON_ORIG_H_PAD = 6; // Pre-zoomable UI
55S32 LLBUTTON_H_PAD = 0; 57S32 LLBUTTON_H_PAD = 0;
@@ -222,18 +224,6 @@ LLButton::~LLButton()
222 } 224 }
223} 225}
224 226
225// virtual
226EWidgetType LLButton::getWidgetType() const
227{
228 return WIDGET_TYPE_BUTTON;
229}
230
231// virtual
232LLString LLButton::getWidgetTag() const
233{
234 return LL_BUTTON_TAG;
235}
236
237// HACK: Committing a button is the same as instantly clicking it. 227// HACK: Committing a button is the same as instantly clicking it.
238// virtual 228// virtual
239void LLButton::onCommit() 229void LLButton::onCommit()
@@ -277,10 +267,11 @@ void LLButton::onCommit()
277 267
278 268
279 269
280BOOL LLButton::handleUnicodeCharHere(llwchar uni_char, BOOL called_from_parent) 270BOOL LLButton::handleUnicodeCharHere(llwchar uni_char)
281{ 271{
282 BOOL handled = FALSE; 272 BOOL handled = FALSE;
283 if( getVisible() && getEnabled() && !called_from_parent && ' ' == uni_char && !gKeyboard->getKeyRepeated(' ')) 273 if(' ' == uni_char
274 && !gKeyboard->getKeyRepeated(' '))
284 { 275 {
285 if (mIsToggle) 276 if (mIsToggle)
286 { 277 {
@@ -296,24 +287,21 @@ BOOL LLButton::handleUnicodeCharHere(llwchar uni_char, BOOL called_from_parent)
296 return handled; 287 return handled;
297} 288}
298 289
299BOOL LLButton::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent ) 290BOOL LLButton::handleKeyHere(KEY key, MASK mask )
300{ 291{
301 BOOL handled = FALSE; 292 BOOL handled = FALSE;
302 if( getVisible() && getEnabled() && !called_from_parent ) 293 if( mCommitOnReturn && KEY_RETURN == key && mask == MASK_NONE && !gKeyboard->getKeyRepeated(key))
303 { 294 {
304 if( mCommitOnReturn && KEY_RETURN == key && mask == MASK_NONE && !gKeyboard->getKeyRepeated(key)) 295 if (mIsToggle)
305 { 296 {
306 if (mIsToggle) 297 toggleState();
307 { 298 }
308 toggleState();
309 }
310 299
311 handled = TRUE; 300 handled = TRUE;
312 301
313 if (mClickedCallback) 302 if (mClickedCallback)
314 { 303 {
315 (*mClickedCallback)( mCallbackUserData ); 304 (*mClickedCallback)( mCallbackUserData );
316 }
317 } 305 }
318 } 306 }
319 return handled; 307 return handled;
@@ -391,8 +379,6 @@ BOOL LLButton::handleMouseUp(S32 x, S32 y, MASK mask)
391 379
392BOOL LLButton::handleHover(S32 x, S32 y, MASK mask) 380BOOL LLButton::handleHover(S32 x, S32 y, MASK mask)
393{ 381{
394 BOOL handled = FALSE;
395
396 LLMouseHandler* other_captor = gFocusMgr.getMouseCapture(); 382 LLMouseHandler* other_captor = gFocusMgr.getMouseCapture();
397 mNeedsHighlight = other_captor == NULL || 383 mNeedsHighlight = other_captor == NULL ||
398 other_captor == this || 384 other_captor == this ||
@@ -409,358 +395,333 @@ BOOL LLButton::handleHover(S32 x, S32 y, MASK mask)
409 } 395 }
410 396
411 // We only handle the click if the click both started and ended within us 397 // We only handle the click if the click both started and ended within us
412 if( hasMouseCapture() ) 398 getWindow()->setCursor(UI_CURSOR_ARROW);
413 { 399 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << llendl;
414 handled = TRUE;
415 }
416 else if( getVisible() )
417 {
418 // Opaque
419 handled = TRUE;
420 }
421 400
422 if( handled ) 401 return TRUE;
423 {
424 getWindow()->setCursor(UI_CURSOR_ARROW);
425 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << llendl;
426 }
427
428 return handled;
429} 402}
430 403
431 404
432// virtual 405// virtual
433void LLButton::draw() 406void LLButton::draw()
434{ 407{
435 if( getVisible() ) 408 BOOL flash = FALSE;
409 if( mFlashing )
436 { 410 {
437 BOOL flash = FALSE; 411 F32 elapsed = mFlashingTimer.getElapsedTimeF32();
438 if( mFlashing ) 412 S32 flash_count = S32(elapsed * LLUI::sConfigGroup->getF32("ButtonFlashRate") * 2.f);
439 { 413 // flash on or off?
440 F32 elapsed = mFlashingTimer.getElapsedTimeF32(); 414 flash = (flash_count % 2 == 0) || flash_count > S32((F32)LLUI::sConfigGroup->getS32("ButtonFlashCount") * 2.f);
441 S32 flash_count = S32(elapsed * LLUI::sConfigGroup->getF32("ButtonFlashRate") * 2.f); 415 }
442 // flash on or off?
443 flash = (flash_count % 2 == 0) || flash_count > (F32)LLUI::sConfigGroup->getS32("ButtonFlashCount");
444 }
445 416
446 BOOL pressed_by_keyboard = FALSE; 417 BOOL pressed_by_keyboard = FALSE;
447 if (hasFocus()) 418 if (hasFocus())
448 { 419 {
449 pressed_by_keyboard = gKeyboard->getKeyDown(' ') || (mCommitOnReturn && gKeyboard->getKeyDown(KEY_RETURN)); 420 pressed_by_keyboard = gKeyboard->getKeyDown(' ') || (mCommitOnReturn && gKeyboard->getKeyDown(KEY_RETURN));
450 } 421 }
451 422
452 // Unselected image assignments 423 // Unselected image assignments
453 S32 local_mouse_x; 424 S32 local_mouse_x;
454 S32 local_mouse_y; 425 S32 local_mouse_y;
455 LLCoordWindow cursor_pos_window; 426 LLCoordWindow cursor_pos_window;
456 getWindow()->getCursorPosition(&cursor_pos_window); 427 getWindow()->getCursorPosition(&cursor_pos_window);
457 LLCoordGL cursor_pos_gl; 428 LLCoordGL cursor_pos_gl;
458 getWindow()->convertCoords(cursor_pos_window, &cursor_pos_gl); 429 getWindow()->convertCoords(cursor_pos_window, &cursor_pos_gl);
459 cursor_pos_gl.mX = llround((F32)cursor_pos_gl.mX / LLUI::sGLScaleFactor.mV[VX]); 430 cursor_pos_gl.mX = llround((F32)cursor_pos_gl.mX / LLUI::sGLScaleFactor.mV[VX]);
460 cursor_pos_gl.mY = llround((F32)cursor_pos_gl.mY / LLUI::sGLScaleFactor.mV[VY]); 431 cursor_pos_gl.mY = llround((F32)cursor_pos_gl.mY / LLUI::sGLScaleFactor.mV[VY]);
461 screenPointToLocal(cursor_pos_gl.mX, cursor_pos_gl.mY, &local_mouse_x, &local_mouse_y); 432 screenPointToLocal(cursor_pos_gl.mX, cursor_pos_gl.mY, &local_mouse_x, &local_mouse_y);
462 433
463 BOOL pressed = pressed_by_keyboard 434 BOOL pressed = pressed_by_keyboard
464 || (hasMouseCapture() && pointInView(local_mouse_x, local_mouse_y)) 435 || (hasMouseCapture() && pointInView(local_mouse_x, local_mouse_y))
465 || mToggleState; 436 || mToggleState;
466 437
467 BOOL use_glow_effect = FALSE; 438 BOOL use_glow_effect = FALSE;
468 if ( mNeedsHighlight || flash ) 439 if ( mNeedsHighlight || flash )
440 {
441 if (pressed)
469 { 442 {
470 if (pressed) 443 if (mImageHoverSelected)
471 { 444 {
472 if (mImageHoverSelected) 445 mImagep = mImageHoverSelected;
473 {
474 mImagep = mImageHoverSelected;
475 }
476 else
477 {
478 mImagep = mImageSelected;
479 use_glow_effect = TRUE;
480 }
481 } 446 }
482 else 447 else
483 { 448 {
484 if (mImageHoverUnselected) 449 mImagep = mImageSelected;
485 { 450 use_glow_effect = TRUE;
486 mImagep = mImageHoverUnselected;
487 }
488 else
489 {
490 mImagep = mImageUnselected;
491 use_glow_effect = TRUE;
492 }
493 } 451 }
494 } 452 }
495 else if ( pressed )
496 {
497 mImagep = mImageSelected;
498 }
499 else 453 else
500 { 454 {
501 mImagep = mImageUnselected; 455 if (mImageHoverUnselected)
456 {
457 mImagep = mImageHoverUnselected;
458 }
459 else
460 {
461 mImagep = mImageUnselected;
462 use_glow_effect = TRUE;
463 }
502 } 464 }
465 }
466 else if ( pressed )
467 {
468 mImagep = mImageSelected;
469 }
470 else
471 {
472 mImagep = mImageUnselected;
473 }
503 474
504 // Override if more data is available 475 // Override if more data is available
505 // HACK: Use gray checked state to mean either: 476 // HACK: Use gray checked state to mean either:
506 // enabled and tentative 477 // enabled and tentative
507 // or 478 // or
508 // disabled but checked 479 // disabled but checked
509 if (!mImageDisabledSelected.isNull() && ( (getEnabled() && getTentative()) || (!getEnabled() && pressed ) ) ) 480 if (!mImageDisabledSelected.isNull()
510 { 481 &&
511 mImagep = mImageDisabledSelected; 482 ( (getEnabled() && getTentative())
512 } 483 || (!getEnabled() && pressed ) ) )
513 else if (!mImageDisabled.isNull() && !getEnabled() && !pressed) 484 {
514 { 485 mImagep = mImageDisabledSelected;
515 mImagep = mImageDisabled; 486 }
516 } 487 else if (!mImageDisabled.isNull()
488 && !getEnabled()
489 && !pressed)
490 {
491 mImagep = mImageDisabled;
492 }
517 493
518 if (mNeedsHighlight && !mImagep) 494 if (mNeedsHighlight && !mImagep)
519 { 495 {
520 use_glow_effect = TRUE; 496 use_glow_effect = TRUE;
521 } 497 }
522 498
523 // Figure out appropriate color for the text 499 // Figure out appropriate color for the text
524 LLColor4 label_color; 500 LLColor4 label_color;
525 501
526 // label changes when button state changes, not when pressed 502 // label changes when button state changes, not when pressed
527 if ( getEnabled() ) 503 if ( getEnabled() )
504 {
505 if ( mToggleState )
528 { 506 {
529 if ( mToggleState ) 507 label_color = mSelectedLabelColor;
530 {
531 label_color = mSelectedLabelColor;
532 }
533 else
534 {
535 label_color = mUnselectedLabelColor;
536 }
537 } 508 }
538 else 509 else
539 { 510 {
540 if ( mToggleState ) 511 label_color = mUnselectedLabelColor;
541 {
542 label_color = mDisabledSelectedLabelColor;
543 }
544 else
545 {
546 label_color = mDisabledLabelColor;
547 }
548 } 512 }
549 513 }
550 // Unselected label assignments 514 else
551 LLWString label; 515 {
552 516 if ( mToggleState )
553 if( mToggleState )
554 { 517 {
555 if( getEnabled() || mDisabledSelectedLabel.empty() ) 518 label_color = mDisabledSelectedLabelColor;
556 {
557 label = mSelectedLabel;
558 }
559 else
560 {
561 label = mDisabledSelectedLabel;
562 }
563 } 519 }
564 else 520 else
565 { 521 {
566 if( getEnabled() || mDisabledLabel.empty() ) 522 label_color = mDisabledLabelColor;
567 {
568 label = mUnselectedLabel;
569 }
570 else
571 {
572 label = mDisabledLabel;
573 }
574 } 523 }
575 524 }
576 // draw default button border 525
577 if (getEnabled() && mBorderEnabled && gFocusMgr.getAppHasFocus()) // because we're the default button in a panel 526 // Unselected label assignments
527 LLWString label;
528
529 if( mToggleState )
530 {
531 if( getEnabled() || mDisabledSelectedLabel.empty() )
578 { 532 {
579 drawBorder(LLUI::sColorsGroup->getColor( "ButtonBorderColor" ), BORDER_SIZE); 533 label = mSelectedLabel;
580 } 534 }
581 535 else
582 // overlay with keyboard focus border
583 if (hasFocus())
584 { 536 {
585 F32 lerp_amt = gFocusMgr.getFocusFlashAmt(); 537 label = mDisabledSelectedLabel;
586 drawBorder(gFocusMgr.getFocusColor(), llround(lerp(1.f, 3.f, lerp_amt)));
587 } 538 }
588 539 }
589 if (use_glow_effect) 540 else
541 {
542 if( getEnabled() || mDisabledLabel.empty() )
590 { 543 {
591 mCurGlowStrength = lerp(mCurGlowStrength, mHoverGlowStrength, LLCriticalDamp::getInterpolant(0.05f)); 544 label = mUnselectedLabel;
592 } 545 }
593 else 546 else
594 { 547 {
595 mCurGlowStrength = lerp(mCurGlowStrength, 0.f, LLCriticalDamp::getInterpolant(0.05f)); 548 label = mDisabledLabel;
596 } 549 }
550 }
597 551
598 // Draw button image, if available. 552 // overlay with keyboard focus border
599 // Otherwise draw basic rectangular button. 553 if (hasFocus())
600 if( mImagep.notNull() && !mScaleImage) 554 {
555 F32 lerp_amt = gFocusMgr.getFocusFlashAmt();
556 drawBorder(gFocusMgr.getFocusColor(), llround(lerp(1.f, 3.f, lerp_amt)));
557 }
558
559 if (use_glow_effect)
560 {
561 mCurGlowStrength = lerp(mCurGlowStrength, mHoverGlowStrength, LLCriticalDamp::getInterpolant(0.05f));
562 }
563 else
564 {
565 mCurGlowStrength = lerp(mCurGlowStrength, 0.f, LLCriticalDamp::getInterpolant(0.05f));
566 }
567
568 // Draw button image, if available.
569 // Otherwise draw basic rectangular button.
570 if (mImagep.notNull())
571 {
572 if ( mScaleImage)
601 { 573 {
602 mImagep->draw(0, 0, getEnabled() ? mImageColor : mDisabledImageColor ); 574 mImagep->draw(getLocalRect(), getEnabled() ? mImageColor : mDisabledImageColor );
603 if (mCurGlowStrength > 0.01f) 575 if (mCurGlowStrength > 0.01f)
604 { 576 {
605 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE); 577 glBlendFunc(GL_SRC_ALPHA, GL_ONE);
606 mImagep->drawSolid(0, 0, LLColor4(1.f, 1.f, 1.f, mCurGlowStrength)); 578 mImagep->drawSolid(0, 0, getRect().getWidth(), getRect().getHeight(), LLColor4(1.f, 1.f, 1.f, mCurGlowStrength));
607 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 579 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
608 } 580 }
609 } 581 }
610 else 582 else
611 if ( mImagep.notNull() && mScaleImage)
612 { 583 {
613 mImagep->draw(0, 0, getRect().getWidth(), getRect().getHeight(), getEnabled() ? mImageColor : mDisabledImageColor ); 584 mImagep->draw(0, 0, getEnabled() ? mImageColor : mDisabledImageColor );
614 if (mCurGlowStrength > 0.01f) 585 if (mCurGlowStrength > 0.01f)
615 { 586 {
616 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE); 587 glBlendFunc(GL_SRC_ALPHA, GL_ONE);
617 mImagep->drawSolid(0, 0, getRect().getWidth(), getRect().getHeight(), LLColor4(1.f, 1.f, 1.f, mCurGlowStrength)); 588 mImagep->drawSolid(0, 0, LLColor4(1.f, 1.f, 1.f, mCurGlowStrength));
618 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 589 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
619 } 590 }
620 } 591 }
621 else 592 }
622 { 593 else
623 // no image 594 {
624 llwarns << "No image for button " << getName() << llendl; 595 // no image
625 // draw it in pink so we can find it 596 llwarns << "No image for button " << getName() << llendl;
626 gl_rect_2d(0, getRect().getHeight(), getRect().getWidth(), 0, LLColor4::pink1, FALSE); 597 // draw it in pink so we can find it
627 } 598 gl_rect_2d(0, getRect().getHeight(), getRect().getWidth(), 0, LLColor4::pink1, FALSE);
628 599 }
629 // let overlay image and text play well together
630 S32 text_left = mLeftHPad;
631 S32 text_right = getRect().getWidth() - mRightHPad;
632 S32 text_width = getRect().getWidth() - mLeftHPad - mRightHPad;
633
634 // draw overlay image
635 if (mImageOverlay.notNull())
636 {
637 // get max width and height (discard level 0)
638 S32 overlay_width = mImageOverlay->getWidth();
639 S32 overlay_height = mImageOverlay->getHeight();
640 600
641 F32 scale_factor = llmin((F32)getRect().getWidth() / (F32)overlay_width, (F32)getRect().getHeight() / (F32)overlay_height, 1.f); 601 // let overlay image and text play well together
642 overlay_width = llround((F32)overlay_width * scale_factor); 602 S32 text_left = mLeftHPad;
643 overlay_height = llround((F32)overlay_height * scale_factor); 603 S32 text_right = getRect().getWidth() - mRightHPad;
604 S32 text_width = getRect().getWidth() - mLeftHPad - mRightHPad;
644 605
645 S32 center_x = getLocalRect().getCenterX(); 606 // draw overlay image
646 S32 center_y = getLocalRect().getCenterY(); 607 if (mImageOverlay.notNull())
608 {
609 // get max width and height (discard level 0)
610 S32 overlay_width = mImageOverlay->getWidth();
611 S32 overlay_height = mImageOverlay->getHeight();
647 612
648 //FUGLY HACK FOR "DEPRESSED" BUTTONS 613 F32 scale_factor = llmin((F32)getRect().getWidth() / (F32)overlay_width, (F32)getRect().getHeight() / (F32)overlay_height, 1.f);
649 if (pressed) 614 overlay_width = llround((F32)overlay_width * scale_factor);
650 { 615 overlay_height = llround((F32)overlay_height * scale_factor);
651 center_y--;
652 center_x++;
653 }
654 616
655 // fade out overlay images on disabled buttons 617 S32 center_x = getLocalRect().getCenterX();
656 LLColor4 overlay_color = mImageOverlayColor; 618 S32 center_y = getLocalRect().getCenterY();
657 if (!getEnabled())
658 {
659 overlay_color.mV[VALPHA] = 0.5f;
660 }
661 619
662 switch(mImageOverlayAlignment) 620 //FUGLY HACK FOR "DEPRESSED" BUTTONS
663 { 621 if (pressed)
664 case LLFontGL::LEFT: 622 {
665 text_left += overlay_width + 1; 623 center_y--;
666 text_width -= overlay_width + 1; 624 center_x++;
667 mImageOverlay->draw(
668 mLeftHPad,
669 center_y - (overlay_height / 2),
670 overlay_width,
671 overlay_height,
672 overlay_color);
673 break;
674 case LLFontGL::HCENTER:
675 mImageOverlay->draw(
676 center_x - (overlay_width / 2),
677 center_y - (overlay_height / 2),
678 overlay_width,
679 overlay_height,
680 overlay_color);
681 break;
682 case LLFontGL::RIGHT:
683 text_right -= overlay_width + 1;
684 text_width -= overlay_width + 1;
685 mImageOverlay->draw(
686 getRect().getWidth() - mRightHPad - overlay_width,
687 center_y - (overlay_height / 2),
688 overlay_width,
689 overlay_height,
690 overlay_color);
691 break;
692 default:
693 // draw nothing
694 break;
695 }
696 } 625 }
697 626
698 // Draw label 627 // fade out overlay images on disabled buttons
699 if( !label.empty() ) 628 LLColor4 overlay_color = mImageOverlayColor;
629 if (!getEnabled())
700 { 630 {
701 LLWString::trim(label); 631 overlay_color.mV[VALPHA] = 0.5f;
632 }
702 633
703 S32 x; 634 switch(mImageOverlayAlignment)
704 switch( mHAlign ) 635 {
705 { 636 case LLFontGL::LEFT:
706 case LLFontGL::RIGHT: 637 text_left += overlay_width + 1;
707 x = text_right; 638 text_width -= overlay_width + 1;
708 break; 639 mImageOverlay->draw(
709 case LLFontGL::HCENTER: 640 mLeftHPad,
710 x = getRect().getWidth() / 2; 641 center_y - (overlay_height / 2),
711 break; 642 overlay_width,
712 case LLFontGL::LEFT: 643 overlay_height,
713 default: 644 overlay_color);
714 x = text_left; 645 break;
715 break; 646 case LLFontGL::HCENTER:
716 } 647 mImageOverlay->draw(
648 center_x - (overlay_width / 2),
649 center_y - (overlay_height / 2),
650 overlay_width,
651 overlay_height,
652 overlay_color);
653 break;
654 case LLFontGL::RIGHT:
655 text_right -= overlay_width + 1;
656 text_width -= overlay_width + 1;
657 mImageOverlay->draw(
658 getRect().getWidth() - mRightHPad - overlay_width,
659 center_y - (overlay_height / 2),
660 overlay_width,
661 overlay_height,
662 overlay_color);
663 break;
664 default:
665 // draw nothing
666 break;
667 }
668 }
717 669
718 S32 y_offset = 2 + (getRect().getHeight() - 20)/2; 670 // Draw label
719 671 if( !label.empty() )
720 if (pressed) 672 {
721 { 673 LLWString::trim(label);
722 y_offset--;
723 x++;
724 }
725 674
726 mGLFont->render(label, 0, (F32)x, (F32)(LLBUTTON_V_PAD + y_offset), 675 S32 x;
727 label_color, 676 switch( mHAlign )
728 mHAlign, LLFontGL::BOTTOM, 677 {
729 mDropShadowedText ? LLFontGL::DROP_SHADOW_SOFT : LLFontGL::NORMAL, 678 case LLFontGL::RIGHT:
730 U32_MAX, text_width, 679 x = text_right;
731 NULL, FALSE, FALSE); 680 break;
681 case LLFontGL::HCENTER:
682 x = getRect().getWidth() / 2;
683 break;
684 case LLFontGL::LEFT:
685 default:
686 x = text_left;
687 break;
732 } 688 }
733 689
734 if (sDebugRects 690 S32 y_offset = 2 + (getRect().getHeight() - 20)/2;
735 || (LLView::sEditingUI && this == LLView::sEditingUIView)) 691
692 if (pressed)
736 { 693 {
737 drawDebugRect(); 694 y_offset--;
695 x++;
738 } 696 }
697
698 mGLFont->render(label, 0, (F32)x, (F32)(LLBUTTON_V_PAD + y_offset),
699 label_color,
700 mHAlign, LLFontGL::BOTTOM,
701 mDropShadowedText ? LLFontGL::DROP_SHADOW_SOFT : LLFontGL::NORMAL,
702 U32_MAX, text_width,
703 NULL, FALSE, FALSE);
739 } 704 }
705
706 if (sDebugRects
707 || (LLView::sEditingUI && this == LLView::sEditingUIView))
708 {
709 drawDebugRect();
710 }
711
740 // reset hover status for next frame 712 // reset hover status for next frame
741 mNeedsHighlight = FALSE; 713 mNeedsHighlight = FALSE;
742} 714}
743 715
744void LLButton::drawBorder(const LLColor4& color, S32 size) 716void LLButton::drawBorder(const LLColor4& color, S32 size)
745{ 717{
746 S32 left = -size;
747 S32 top = getRect().getHeight() + size;
748 S32 right = getRect().getWidth() + size;
749 S32 bottom = -size;
750
751 if (mImagep.isNull())
752 {
753 gl_rect_2d(left, top, right, bottom, color, FALSE);
754 return;
755 }
756
757 if (mScaleImage) 718 if (mScaleImage)
758 { 719 {
759 mImagep->drawSolid(left, bottom, right-left, top-bottom, color); 720 mImagep->drawBorder(getLocalRect(), color, size);
760 } 721 }
761 else 722 else
762 { 723 {
763 mImagep->drawSolid(left, bottom, mImagep->getWidth() + size * 2, mImagep->getHeight() + size * 2, color); 724 mImagep->drawBorder(0, 0, color, size);
764 } 725 }
765} 726}
766 727
@@ -778,9 +739,8 @@ void LLButton::setToggleState(BOOL b)
778{ 739{
779 if( b != mToggleState ) 740 if( b != mToggleState )
780 { 741 {
781 mToggleState = b; 742 setControlValue(b); // will fire LLControlVariable callbacks (if any)
782 LLValueChangedEvent *evt = new LLValueChangedEvent(this, mToggleState); 743 mToggleState = b; // may or may not be redundant
783 fireEvent(evt, "");
784 } 744 }
785} 745}
786 746
@@ -924,7 +884,7 @@ void LLButton::setImageOverlay(const LLString &image_name, LLFontGL::HAlign alig
924 } 884 }
925 else 885 else
926 { 886 {
927 mImageOverlay = LLUI::getUIImageByName(image_name); 887 mImageOverlay = LLUI::getUIImage(image_name);
928 mImageOverlayAlignment = alignment; 888 mImageOverlayAlignment = alignment;
929 mImageOverlayColor = color; 889 mImageOverlayColor = color;
930 } 890 }
@@ -957,37 +917,37 @@ S32 round_up(S32 grid, S32 value)
957 917
958void LLButton::setImageUnselected(const LLString &image_name) 918void LLButton::setImageUnselected(const LLString &image_name)
959{ 919{
960 setImageUnselected(image_name.empty() ? NULL : LLUI::getUIImageByName(image_name)); 920 setImageUnselected(LLUI::getUIImage(image_name));
961 mImageUnselectedName = image_name; 921 mImageUnselectedName = image_name;
962} 922}
963 923
964void LLButton::setImageSelected(const LLString &image_name) 924void LLButton::setImageSelected(const LLString &image_name)
965{ 925{
966 setImageSelected(image_name.empty() ? NULL : LLUI::getUIImageByName(image_name)); 926 setImageSelected(LLUI::getUIImage(image_name));
967 mImageSelectedName = image_name; 927 mImageSelectedName = image_name;
968} 928}
969 929
970void LLButton::setImageHoverSelected(const LLString &image_name) 930void LLButton::setImageHoverSelected(const LLString &image_name)
971{ 931{
972 setImageHoverSelected(image_name.empty() ? NULL : LLUI::getUIImageByName(image_name)); 932 setImageHoverSelected(LLUI::getUIImage(image_name));
973 mImageHoverSelectedName = image_name; 933 mImageHoverSelectedName = image_name;
974} 934}
975 935
976void LLButton::setImageHoverUnselected(const LLString &image_name) 936void LLButton::setImageHoverUnselected(const LLString &image_name)
977{ 937{
978 setImageHoverUnselected(image_name.empty() ? NULL : LLUI::getUIImageByName(image_name)); 938 setImageHoverUnselected(LLUI::getUIImage(image_name));
979 mImageHoverUnselectedName = image_name; 939 mImageHoverUnselectedName = image_name;
980} 940}
981 941
982void LLButton::setImageDisabled(const LLString &image_name) 942void LLButton::setImageDisabled(const LLString &image_name)
983{ 943{
984 setImageDisabled(image_name.empty() ? NULL : LLUI::getUIImageByName(image_name)); 944 setImageDisabled(LLUI::getUIImage(image_name));
985 mImageDisabledName = image_name; 945 mImageDisabledName = image_name;
986} 946}
987 947
988void LLButton::setImageDisabledSelected(const LLString &image_name) 948void LLButton::setImageDisabledSelected(const LLString &image_name)
989{ 949{
990 setImageDisabledSelected(image_name.empty() ? NULL : LLUI::getUIImageByName(image_name)); 950 setImageDisabledSelected(LLUI::getUIImage(image_name));
991 mImageDisabledSelectedName = image_name; 951 mImageDisabledSelectedName = image_name;
992} 952}
993 953
@@ -1038,7 +998,7 @@ void clicked_help(void* data)
1038 return; 998 return;
1039 } 999 }
1040 1000
1041 LLUI::sHtmlHelp->show(self->getHelpURL(), ""); 1001 LLUI::sHtmlHelp->show(self->getHelpURL());
1042} 1002}
1043 1003
1044// static 1004// static
diff --git a/linden/indra/llui/llbutton.h b/linden/indra/llui/llbutton.h
index 18f4e07..a101a3c 100644
--- a/linden/indra/llui/llbutton.h
+++ b/linden/indra/llui/llbutton.h
@@ -87,16 +87,15 @@ public:
87 87
88 virtual ~LLButton(); 88 virtual ~LLButton();
89 void init(void (*click_callback)(void*), void *callback_data, const LLFontGL* font, const LLString& control_name); 89 void init(void (*click_callback)(void*), void *callback_data, const LLFontGL* font, const LLString& control_name);
90 virtual EWidgetType getWidgetType() const; 90
91 virtual LLString getWidgetTag() const;
92 91
93 void addImageAttributeToXML(LLXMLNodePtr node, const LLString& imageName, 92 void addImageAttributeToXML(LLXMLNodePtr node, const LLString& imageName,
94 const LLUUID& imageID,const LLString& xmlTagName) const; 93 const LLUUID& imageID,const LLString& xmlTagName) const;
95 virtual LLXMLNodePtr getXML(bool save_children = true) const; 94 virtual LLXMLNodePtr getXML(bool save_children = true) const;
96 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); 95 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
97 96
98 virtual BOOL handleUnicodeCharHere(llwchar uni_char, BOOL called_from_parent); 97 virtual BOOL handleUnicodeCharHere(llwchar uni_char);
99 virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); 98 virtual BOOL handleKeyHere(KEY key, MASK mask);
100 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); 99 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
101 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); 100 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
102 virtual BOOL handleHover(S32 x, S32 y, MASK mask); 101 virtual BOOL handleHover(S32 x, S32 y, MASK mask);
@@ -104,7 +103,6 @@ public:
104 103
105 virtual void onMouseCaptureLost(); 104 virtual void onMouseCaptureLost();
106 105
107 // HACK: "committing" a button is the same as clicking on it.
108 virtual void onCommit(); 106 virtual void onCommit();
109 107
110 void setUnselectedLabelColor( const LLColor4& c ) { mUnselectedLabelColor = c; } 108 void setUnselectedLabelColor( const LLColor4& c ) { mUnselectedLabelColor = c; }
diff --git a/linden/indra/llui/llcheckboxctrl.cpp b/linden/indra/llui/llcheckboxctrl.cpp
index ecb6342..33de4da 100644
--- a/linden/indra/llui/llcheckboxctrl.cpp
+++ b/linden/indra/llui/llcheckboxctrl.cpp
@@ -45,10 +45,11 @@
45#include "llfontgl.h" 45#include "llfontgl.h"
46#include "lltextbox.h" 46#include "lltextbox.h"
47#include "llkeyboard.h" 47#include "llkeyboard.h"
48#include "llviewborder.h"
49 48
50const U32 MAX_STRING_LENGTH = 10; 49const U32 MAX_STRING_LENGTH = 10;
51 50
51static LLRegisterWidget<LLCheckBoxCtrl> r("check_box");
52
52 53
53LLCheckBoxCtrl::LLCheckBoxCtrl(const LLString& name, const LLRect& rect, 54LLCheckBoxCtrl::LLCheckBoxCtrl(const LLString& name, const LLRect& rect,
54 const LLString& label, 55 const LLString& label,
diff --git a/linden/indra/llui/llcheckboxctrl.h b/linden/indra/llui/llcheckboxctrl.h
index 6df0e77..6518272 100644
--- a/linden/indra/llui/llcheckboxctrl.h
+++ b/linden/indra/llui/llcheckboxctrl.h
@@ -75,8 +75,7 @@ public:
75 virtual ~LLCheckBoxCtrl(); 75 virtual ~LLCheckBoxCtrl();
76 76
77 // LLView interface 77 // LLView interface
78 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_CHECKBOX; } 78
79 virtual LLString getWidgetTag() const { return LL_CHECK_BOX_CTRL_TAG; }
80 virtual LLXMLNodePtr getXML(bool save_children = true) const; 79 virtual LLXMLNodePtr getXML(bool save_children = true) const;
81 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); 80 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
82 81
diff --git a/linden/indra/llui/llcombobox.cpp b/linden/indra/llui/llcombobox.cpp
index c486042..0523a11 100644
--- a/linden/indra/llui/llcombobox.cpp
+++ b/linden/indra/llui/llcombobox.cpp
@@ -57,6 +57,8 @@ S32 LLCOMBOBOX_HEIGHT = 0;
57S32 LLCOMBOBOX_WIDTH = 0; 57S32 LLCOMBOBOX_WIDTH = 0;
58S32 MAX_COMBO_WIDTH = 500; 58S32 MAX_COMBO_WIDTH = 500;
59 59
60static LLRegisterWidget<LLComboBox> r1("combo_box");
61
60LLComboBox::LLComboBox( const LLString& name, const LLRect &rect, const LLString& label, 62LLComboBox::LLComboBox( const LLString& name, const LLRect &rect, const LLString& label,
61 void (*commit_callback)(LLUICtrl*,void*), 63 void (*commit_callback)(LLUICtrl*,void*),
62 void *callback_userdata 64 void *callback_userdata
@@ -74,9 +76,10 @@ LLComboBox::LLComboBox( const LLString& name, const LLRect &rect, const LLString
74{ 76{
75 // Always use text box 77 // Always use text box
76 // Text label button 78 // Text label button
77 mButton = new LLButton("comboxbox button", 79 mButton = new LLButton(label,
78 LLRect(), label, NULL, LLString::null, 80 LLRect(),
79 NULL, this); 81 LLString::null,
82 NULL, this);
80 mButton->setImageUnselected("square_btn_32x128.tga"); 83 mButton->setImageUnselected("square_btn_32x128.tga");
81 mButton->setImageSelected("square_btn_selected_32x128.tga"); 84 mButton->setImageSelected("square_btn_selected_32x128.tga");
82 mButton->setImageDisabled("square_btn_32x128.tga"); 85 mButton->setImageDisabled("square_btn_32x128.tga");
@@ -99,13 +102,7 @@ LLComboBox::LLComboBox( const LLString& name, const LLRect &rect, const LLString
99 mList->setCommitOnKeyboardMovement(FALSE); 102 mList->setCommitOnKeyboardMovement(FALSE);
100 addChild(mList); 103 addChild(mList);
101 104
102 LLRect border_rect(0, getRect().getHeight(), getRect().getWidth(), 0); 105 mArrowImage = LLUI::sImageProvider->getUIImage("combobox_arrow.tga");
103 mBorder = new LLViewBorder( "combo border", border_rect );
104 addChild( mBorder );
105 mBorder->setFollowsAll();
106
107 LLUUID arrow_image_id( LLUI::sAssetsGroup->getString("combobox_arrow.tga") );
108 mArrowImage = LLUI::sImageProvider->getImageByID(arrow_image_id);
109 mButton->setImageOverlay("combobox_arrow.tga", LLFontGL::RIGHT); 106 mButton->setImageOverlay("combobox_arrow.tga", LLFontGL::RIGHT);
110 107
111 updateLayout(); 108 updateLayout();
@@ -447,7 +444,7 @@ void LLComboBox::setButtonVisible(BOOL visible)
447 LLRect text_entry_rect(0, getRect().getHeight(), getRect().getWidth(), 0); 444 LLRect text_entry_rect(0, getRect().getHeight(), getRect().getWidth(), 0);
448 if (visible) 445 if (visible)
449 { 446 {
450 text_entry_rect.mRight -= llmax(8,mArrowImage->getWidth(0)) + 2 * LLUI::sConfigGroup->getS32("DropShadowButton"); 447 text_entry_rect.mRight -= llmax(8,mArrowImage->getWidth()) + 2 * LLUI::sConfigGroup->getS32("DropShadowButton");
451 } 448 }
452 //mTextEntry->setRect(text_entry_rect); 449 //mTextEntry->setRect(text_entry_rect);
453 mTextEntry->reshape(text_entry_rect.getWidth(), text_entry_rect.getHeight(), TRUE); 450 mTextEntry->reshape(text_entry_rect.getWidth(), text_entry_rect.getHeight(), TRUE);
@@ -456,15 +453,10 @@ void LLComboBox::setButtonVisible(BOOL visible)
456 453
457void LLComboBox::draw() 454void LLComboBox::draw()
458{ 455{
459 if( getVisible() ) 456 mButton->setEnabled(getEnabled() /*&& !mList->isEmpty()*/);
460 {
461 mBorder->setKeyboardFocusHighlight(hasFocus());
462
463 mButton->setEnabled(getEnabled() /*&& !mList->isEmpty()*/);
464 457
465 // Draw children normally 458 // Draw children normally
466 LLUICtrl::draw(); 459 LLUICtrl::draw();
467 }
468} 460}
469 461
470BOOL LLComboBox::setCurrentByIndex( S32 index ) 462BOOL LLComboBox::setCurrentByIndex( S32 index )
@@ -494,14 +486,14 @@ void LLComboBox::updateLayout()
494 if (mAllowTextEntry) 486 if (mAllowTextEntry)
495 { 487 {
496 S32 shadow_size = LLUI::sConfigGroup->getS32("DropShadowButton"); 488 S32 shadow_size = LLUI::sConfigGroup->getS32("DropShadowButton");
497 mButton->setRect(LLRect( getRect().getWidth() - llmax(8,mArrowImage->getWidth(0)) - 2 * shadow_size, 489 mButton->setRect(LLRect( getRect().getWidth() - llmax(8,mArrowImage->getWidth()) - 2 * shadow_size,
498 rect.mTop, rect.mRight, rect.mBottom)); 490 rect.mTop, rect.mRight, rect.mBottom));
499 mButton->setTabStop(FALSE); 491 mButton->setTabStop(FALSE);
500 492
501 if (!mTextEntry) 493 if (!mTextEntry)
502 { 494 {
503 LLRect text_entry_rect(0, getRect().getHeight(), getRect().getWidth(), 0); 495 LLRect text_entry_rect(0, getRect().getHeight(), getRect().getWidth(), 0);
504 text_entry_rect.mRight -= llmax(8,mArrowImage->getWidth(0)) + 2 * LLUI::sConfigGroup->getS32("DropShadowButton"); 496 text_entry_rect.mRight -= llmax(8,mArrowImage->getWidth()) + 2 * LLUI::sConfigGroup->getS32("DropShadowButton");
505 // clear label on button 497 // clear label on button
506 LLString cur_label = mButton->getLabelSelected(); 498 LLString cur_label = mButton->getLabelSelected();
507 mTextEntry = new LLLineEditor("combo_text_entry", 499 mTextEntry = new LLLineEditor("combo_text_entry",
@@ -512,11 +504,7 @@ void LLComboBox::updateLayout()
512 onTextCommit, 504 onTextCommit,
513 onTextEntry, 505 onTextEntry,
514 NULL, 506 NULL,
515 this, 507 this);
516 NULL, // prevalidate func
517 LLViewBorder::BEVEL_NONE,
518 LLViewBorder::STYLE_LINE,
519 0); // no border
520 mTextEntry->setSelectAllonFocusReceived(TRUE); 508 mTextEntry->setSelectAllonFocusReceived(TRUE);
521 mTextEntry->setHandleEditKeysDirectly(TRUE); 509 mTextEntry->setHandleEditKeysDirectly(TRUE);
522 mTextEntry->setCommitOnFocusLost(FALSE); 510 mTextEntry->setCommitOnFocusLost(FALSE);
@@ -761,7 +749,7 @@ BOOL LLComboBox::handleToolTip(S32 x, S32 y, LLString& msg, LLRect* sticky_rect_
761 tool_tip = getToolTip(); 749 tool_tip = getToolTip();
762 if (tool_tip.empty()) 750 if (tool_tip.empty())
763 { 751 {
764 tool_tip = getValue().asString(); 752 tool_tip = getSelectedItemLabel();
765 } 753 }
766 } 754 }
767 755
@@ -780,10 +768,10 @@ BOOL LLComboBox::handleToolTip(S32 x, S32 y, LLString& msg, LLRect* sticky_rect_
780 return TRUE; 768 return TRUE;
781} 769}
782 770
783BOOL LLComboBox::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent) 771BOOL LLComboBox::handleKeyHere(KEY key, MASK mask)
784{ 772{
785 BOOL result = FALSE; 773 BOOL result = FALSE;
786 if (gFocusMgr.childHasKeyboardFocus(this)) 774 if (hasFocus())
787 { 775 {
788 //give list a chance to pop up and handle key 776 //give list a chance to pop up and handle key
789 LLScrollListItem* last_selected_item = mList->getLastSelectedItem(); 777 LLScrollListItem* last_selected_item = mList->getLastSelectedItem();
@@ -792,7 +780,7 @@ BOOL LLComboBox::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent)
792 // highlight the original selection before potentially selecting a new item 780 // highlight the original selection before potentially selecting a new item
793 mList->highlightNthItem(mList->getItemIndex(last_selected_item)); 781 mList->highlightNthItem(mList->getItemIndex(last_selected_item));
794 } 782 }
795 result = mList->handleKeyHere(key, mask, FALSE); 783 result = mList->handleKeyHere(key, mask);
796 // if selection has changed, pop open list 784 // if selection has changed, pop open list
797 if (mList->getLastSelectedItem() != last_selected_item) 785 if (mList->getLastSelectedItem() != last_selected_item)
798 { 786 {
@@ -802,7 +790,7 @@ BOOL LLComboBox::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent)
802 return result; 790 return result;
803} 791}
804 792
805BOOL LLComboBox::handleUnicodeCharHere(llwchar uni_char, BOOL called_from_parent) 793BOOL LLComboBox::handleUnicodeCharHere(llwchar uni_char)
806{ 794{
807 BOOL result = FALSE; 795 BOOL result = FALSE;
808 if (gFocusMgr.childHasKeyboardFocus(this)) 796 if (gFocusMgr.childHasKeyboardFocus(this))
@@ -816,7 +804,7 @@ BOOL LLComboBox::handleUnicodeCharHere(llwchar uni_char, BOOL called_from_parent
816 // highlight the original selection before potentially selecting a new item 804 // highlight the original selection before potentially selecting a new item
817 mList->highlightNthItem(mList->getItemIndex(last_selected_item)); 805 mList->highlightNthItem(mList->getItemIndex(last_selected_item));
818 } 806 }
819 result = mList->handleUnicodeCharHere(uni_char, called_from_parent); 807 result = mList->handleUnicodeCharHere(uni_char);
820 if (mList->getLastSelectedItem() != last_selected_item) 808 if (mList->getLastSelectedItem() != last_selected_item)
821 { 809 {
822 showList(); 810 showList();
@@ -1095,6 +1083,8 @@ BOOL LLComboBox::selectItemRange( S32 first, S32 last )
1095// LLFlyoutButton 1083// LLFlyoutButton
1096// 1084//
1097 1085
1086static LLRegisterWidget<LLFlyoutButton> r2("flyout_button");
1087
1098const S32 FLYOUT_BUTTON_ARROW_WIDTH = 24; 1088const S32 FLYOUT_BUTTON_ARROW_WIDTH = 24;
1099 1089
1100LLFlyoutButton::LLFlyoutButton( 1090LLFlyoutButton::LLFlyoutButton(
@@ -1109,9 +1099,8 @@ LLFlyoutButton::LLFlyoutButton(
1109{ 1099{
1110 // Always use text box 1100 // Always use text box
1111 // Text label button 1101 // Text label button
1112 mActionButton = new LLButton("flyout_button_main", 1102 mActionButton = new LLButton(label,
1113 LLRect(), label, NULL, LLString::null, 1103 LLRect(), LLString::null, NULL, this);
1114 NULL, this);
1115 mActionButton->setScaleImage(TRUE); 1104 mActionButton->setScaleImage(TRUE);
1116 1105
1117 mActionButton->setClickedCallback(onActionButtonClick); 1106 mActionButton->setClickedCallback(onActionButtonClick);
@@ -1120,24 +1109,24 @@ LLFlyoutButton::LLFlyoutButton(
1120 mActionButton->setLabel(label); 1109 mActionButton->setLabel(label);
1121 addChild(mActionButton); 1110 addChild(mActionButton);
1122 1111
1123 mActionButtonImage = LLUI::getUIImageByName("flyout_btn_left.tga"); 1112 mActionButtonImage = LLUI::getUIImage("flyout_btn_left.tga");
1124 mExpanderButtonImage = LLUI::getUIImageByName("flyout_btn_right.tga"); 1113 mExpanderButtonImage = LLUI::getUIImage("flyout_btn_right.tga");
1125 mActionButtonImageSelected = LLUI::getUIImageByName("flyout_btn_left_selected.tga"); 1114 mActionButtonImageSelected = LLUI::getUIImage("flyout_btn_left_selected.tga");
1126 mExpanderButtonImageSelected = LLUI::getUIImageByName("flyout_btn_right_selected.tga"); 1115 mExpanderButtonImageSelected = LLUI::getUIImage("flyout_btn_right_selected.tga");
1116 mActionButtonImageDisabled = LLUI::getUIImage("flyout_btn_left_disabled.tga");
1117 mExpanderButtonImageDisabled = LLUI::getUIImage("flyout_btn_right_disabled.tga");
1127 1118
1128 mActionButton->setImageSelected(mActionButtonImageSelected); 1119 mActionButton->setImageSelected(mActionButtonImageSelected);
1129 mActionButton->setImageUnselected(mActionButtonImage); 1120 mActionButton->setImageUnselected(mActionButtonImage);
1130 mActionButton->setImageDisabled(LLPointer<LLUIImage>(NULL)); 1121 mActionButton->setImageDisabled(mActionButtonImageDisabled);
1131 mActionButton->setImageDisabledSelected(LLPointer<LLUIImage>(NULL)); 1122 mActionButton->setImageDisabledSelected(LLPointer<LLUIImage>(NULL));
1132 1123
1133 mButton->setImageSelected(mExpanderButtonImageSelected); 1124 mButton->setImageSelected(mExpanderButtonImageSelected);
1134 mButton->setImageUnselected(mExpanderButtonImage); 1125 mButton->setImageUnselected(mExpanderButtonImage);
1135 mButton->setImageDisabled(LLPointer<LLUIImage>(NULL)); 1126 mButton->setImageDisabled(mExpanderButtonImageDisabled);
1136 mButton->setImageDisabledSelected(LLPointer<LLUIImage>(NULL)); 1127 mButton->setImageDisabledSelected(LLPointer<LLUIImage>(NULL));
1137 mButton->setRightHPad(6); 1128 mButton->setRightHPad(6);
1138 1129
1139 mBorder->setVisible(FALSE);
1140
1141 updateLayout(); 1130 updateLayout();
1142} 1131}
1143 1132
diff --git a/linden/indra/llui/llcombobox.h b/linden/indra/llui/llcombobox.h
index f9ca4d2..b35d078 100644
--- a/linden/indra/llui/llcombobox.h
+++ b/linden/indra/llui/llcombobox.h
@@ -73,8 +73,7 @@ public:
73 virtual ~LLComboBox(); 73 virtual ~LLComboBox();
74 74
75 // LLView interface 75 // LLView interface
76 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_COMBO_BOX; } 76
77 virtual LLString getWidgetTag() const { return LL_COMBO_BOX_TAG; }
78 virtual LLXMLNodePtr getXML(bool save_children = true) const; 77 virtual LLXMLNodePtr getXML(bool save_children = true) const;
79 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); 78 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
80 79
@@ -85,8 +84,8 @@ public:
85 virtual void setEnabled(BOOL enabled); 84 virtual void setEnabled(BOOL enabled);
86 85
87 virtual BOOL handleToolTip(S32 x, S32 y, LLString& msg, LLRect* sticky_rect); 86 virtual BOOL handleToolTip(S32 x, S32 y, LLString& msg, LLRect* sticky_rect);
88 virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); 87 virtual BOOL handleKeyHere(KEY key, MASK mask);
89 virtual BOOL handleUnicodeCharHere(llwchar uni_char, BOOL called_from_parent); 88 virtual BOOL handleUnicodeCharHere(llwchar uni_char);
90 89
91 // LLUICtrl interface 90 // LLUICtrl interface
92 virtual void clear(); // select nothing 91 virtual void clear(); // select nothing
@@ -187,9 +186,8 @@ public:
187protected: 186protected:
188 LLButton* mButton; 187 LLButton* mButton;
189 LLScrollListCtrl* mList; 188 LLScrollListCtrl* mList;
190 LLViewBorder* mBorder;
191 EPreferredPosition mListPosition; 189 EPreferredPosition mListPosition;
192 LLPointer<LLImageGL> mArrowImage; 190 LLPointer<LLUIImage> mArrowImage;
193 191
194private: 192private:
195 S32 mButtonPadding; 193 S32 mButtonPadding;
@@ -211,9 +209,6 @@ public:
211 void (*commit_callback)(LLUICtrl*, void*) = NULL, 209 void (*commit_callback)(LLUICtrl*, void*) = NULL,
212 void *callback_userdata = NULL); 210 void *callback_userdata = NULL);
213 211
214 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_FLYOUT_BUTTON; }
215 virtual LLString getWidgetTag() const { return LL_FLYOUT_BUTTON_TAG; }
216
217 virtual void updateLayout(); 212 virtual void updateLayout();
218 virtual void draw(); 213 virtual void draw();
219 virtual void setEnabled(BOOL enabled); 214 virtual void setEnabled(BOOL enabled);
@@ -230,6 +225,8 @@ protected:
230 LLPointer<LLUIImage> mExpanderButtonImage; 225 LLPointer<LLUIImage> mExpanderButtonImage;
231 LLPointer<LLUIImage> mActionButtonImageSelected; 226 LLPointer<LLUIImage> mActionButtonImageSelected;
232 LLPointer<LLUIImage> mExpanderButtonImageSelected; 227 LLPointer<LLUIImage> mExpanderButtonImageSelected;
228 LLPointer<LLUIImage> mActionButtonImageDisabled;
229 LLPointer<LLUIImage> mExpanderButtonImageDisabled;
233 BOOL mToggleState; 230 BOOL mToggleState;
234}; 231};
235 232
diff --git a/linden/indra/llui/lldraghandle.cpp b/linden/indra/llui/lldraghandle.cpp
index 516afc6..f033371 100644
--- a/linden/indra/llui/lldraghandle.cpp
+++ b/linden/indra/llui/lldraghandle.cpp
@@ -101,16 +101,6 @@ LLDragHandleTop::LLDragHandleTop(const LLString& name, const LLRect &rect, const
101 setTitle( title ); 101 setTitle( title );
102} 102}
103 103
104EWidgetType LLDragHandleTop::getWidgetType() const
105{
106 return WIDGET_TYPE_DRAG_HANDLE_TOP;
107}
108
109LLString LLDragHandleTop::getWidgetTag() const
110{
111 return LL_DRAG_HANDLE_TOP_TAG;
112}
113
114LLDragHandleLeft::LLDragHandleLeft(const LLString& name, const LLRect &rect, const LLString& title) 104LLDragHandleLeft::LLDragHandleLeft(const LLString& name, const LLRect &rect, const LLString& title)
115: LLDragHandle(name, rect, title) 105: LLDragHandle(name, rect, title)
116{ 106{
@@ -118,22 +108,12 @@ LLDragHandleLeft::LLDragHandleLeft(const LLString& name, const LLRect &rect, con
118 setTitle( title ); 108 setTitle( title );
119} 109}
120 110
121EWidgetType LLDragHandleLeft::getWidgetType() const
122{
123 return WIDGET_TYPE_DRAG_HANDLE_LEFT;
124}
125
126LLString LLDragHandleLeft::getWidgetTag() const
127{
128 return LL_DRAG_HANDLE_LEFT_TAG;
129}
130
131void LLDragHandleTop::setTitle(const LLString& title) 111void LLDragHandleTop::setTitle(const LLString& title)
132{ 112{
133 LLString trimmed_title = title; 113 LLString trimmed_title = title;
134 LLString::trim(trimmed_title); 114 LLString::trim(trimmed_title);
135 115
136 const LLFontGL* font = gResMgr->getRes( LLFONT_SANSSERIF ); 116 const LLFontGL* font = LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF );
137 LLTextBox* titlebox = new LLTextBox( "Drag Handle Title", getRect(), trimmed_title, font ); 117 LLTextBox* titlebox = new LLTextBox( "Drag Handle Title", getRect(), trimmed_title, font );
138 titlebox->setFollows(FOLLOWS_TOP | FOLLOWS_LEFT | FOLLOWS_RIGHT); 118 titlebox->setFollows(FOLLOWS_TOP | FOLLOWS_LEFT | FOLLOWS_RIGHT);
139 titlebox->setFontStyle(LLFontGL::DROP_SHADOW_SOFT); 119 titlebox->setFontStyle(LLFontGL::DROP_SHADOW_SOFT);
@@ -262,7 +242,7 @@ void LLDragHandleTop::reshapeTitleBox()
262 { 242 {
263 return; 243 return;
264 } 244 }
265 const LLFontGL* font = gResMgr->getRes( LLFONT_SANSSERIF ); 245 const LLFontGL* font = LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF );
266 S32 title_width = font->getWidth( getTitleBox()->getText() ) + TITLE_PAD; 246 S32 title_width = font->getWidth( getTitleBox()->getText() ) + TITLE_PAD;
267 if (getMaxTitleWidth() > 0) 247 if (getMaxTitleWidth() > 0)
268 title_width = llmin(title_width, getMaxTitleWidth()); 248 title_width = llmin(title_width, getMaxTitleWidth());
@@ -372,7 +352,7 @@ BOOL LLDragHandle::handleHover(S32 x, S32 y, MASK mask)
372 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (active)" <<llendl; 352 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (active)" <<llendl;
373 handled = TRUE; 353 handled = TRUE;
374 } 354 }
375 else if( getVisible() ) 355 else
376 { 356 {
377 getWindow()->setCursor(UI_CURSOR_ARROW); 357 getWindow()->setCursor(UI_CURSOR_ARROW);
378 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (inactive)" << llendl; 358 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (inactive)" << llendl;
diff --git a/linden/indra/llui/lldraghandle.h b/linden/indra/llui/lldraghandle.h
index 88e16dc..fc10639 100644
--- a/linden/indra/llui/lldraghandle.h
+++ b/linden/indra/llui/lldraghandle.h
@@ -90,9 +90,6 @@ class LLDragHandleTop
90public: 90public:
91 LLDragHandleTop(const LLString& name, const LLRect& rect, const LLString& title ); 91 LLDragHandleTop(const LLString& name, const LLRect& rect, const LLString& title );
92 92
93 virtual EWidgetType getWidgetType() const;
94 virtual LLString getWidgetTag() const;
95
96 virtual void setTitle( const LLString& title ); 93 virtual void setTitle( const LLString& title );
97 virtual const LLString& getTitle() const; 94 virtual const LLString& getTitle() const;
98 virtual void draw(); 95 virtual void draw();
@@ -110,9 +107,6 @@ class LLDragHandleLeft
110public: 107public:
111 LLDragHandleLeft(const LLString& name, const LLRect& rect, const LLString& title ); 108 LLDragHandleLeft(const LLString& name, const LLRect& rect, const LLString& title );
112 109
113 virtual EWidgetType getWidgetType() const;
114 virtual LLString getWidgetTag() const;
115
116 virtual void setTitle( const LLString& title ); 110 virtual void setTitle( const LLString& title );
117 virtual const LLString& getTitle() const; 111 virtual const LLString& getTitle() const;
118 virtual void draw(); 112 virtual void draw();
diff --git a/linden/indra/llui/llfloater.cpp b/linden/indra/llui/llfloater.cpp
index 1e825d3..5142bf4 100644
--- a/linden/indra/llui/llfloater.cpp
+++ b/linden/indra/llui/llfloater.cpp
@@ -50,7 +50,6 @@
50#include "lltextbox.h" 50#include "lltextbox.h"
51#include "llresmgr.h" 51#include "llresmgr.h"
52#include "llui.h" 52#include "llui.h"
53#include "llviewborder.h"
54#include "llwindow.h" 53#include "llwindow.h"
55#include "llstl.h" 54#include "llstl.h"
56#include "llcontrol.h" 55#include "llcontrol.h"
@@ -131,8 +130,9 @@ LLFloaterView* gFloaterView = NULL;
131LLFloater::LLFloater() : 130LLFloater::LLFloater() :
132 //FIXME: we should initialize *all* member variables here 131 //FIXME: we should initialize *all* member variables here
133 mResizable(FALSE), 132 mResizable(FALSE),
134 mDragOnLeft(FALSE) 133 mDragOnLeft(FALSE),
135 134 mMinWidth(0),
135 mMinHeight(0)
136{ 136{
137 // automatically take focus when opened 137 // automatically take focus when opened
138 mAutoFocus = TRUE; 138 mAutoFocus = TRUE;
@@ -656,7 +656,8 @@ void LLFloater::setTitle( const LLString& title )
656 { 656 {
657 return; 657 return;
658 } 658 }
659 mDragHandle->setTitle( title ); 659 if (mDragHandle)
660 mDragHandle->setTitle( title );
660} 661}
661 662
662const LLString& LLFloater::getTitle() const 663const LLString& LLFloater::getTitle() const
@@ -802,24 +803,10 @@ void LLFloater::setMinimized(BOOL minimize)
802 mButtonsEnabled[BUTTON_RESTORE] = TRUE; 803 mButtonsEnabled[BUTTON_RESTORE] = TRUE;
803 } 804 }
804 805
805 mMinimizedHiddenChildren.clear();
806 // hide all children
807 for ( child_list_const_iter_t child_it = getChildList()->begin(); child_it != getChildList()->end(); ++child_it)
808 {
809 LLView* viewp = *child_it;
810 if (!viewp->getVisible())
811 {
812 mMinimizedHiddenChildren.push_back(viewp->getHandle());
813 }
814 viewp->setVisible(FALSE);
815 }
816
817 // except the special controls
818 if (mDragHandle) 806 if (mDragHandle)
819 { 807 {
820 mDragHandle->setVisible(TRUE); 808 mDragHandle->setVisible(TRUE);
821 } 809 }
822
823 setBorderVisible(TRUE); 810 setBorderVisible(TRUE);
824 811
825 for(handle_set_iter_t dependent_it = mDependents.begin(); 812 for(handle_set_iter_t dependent_it = mDependents.begin();
@@ -843,6 +830,12 @@ void LLFloater::setMinimized(BOOL minimize)
843 // Lose keyboard focus when minimized 830 // Lose keyboard focus when minimized
844 releaseFocus(); 831 releaseFocus();
845 832
833 for (S32 i = 0; i < 4; i++)
834 {
835 if (mResizeBar[i]) mResizeBar[i]->setEnabled(FALSE);
836 if (mResizeHandle[i]) mResizeHandle[i]->setEnabled(FALSE);
837 }
838
846 mMinimized = TRUE; 839 mMinimized = TRUE;
847 840
848 // Reshape *after* setting mMinimized 841 // Reshape *after* setting mMinimized
@@ -867,24 +860,6 @@ void LLFloater::setMinimized(BOOL minimize)
867 mButtonsEnabled[BUTTON_RESTORE] = FALSE; 860 mButtonsEnabled[BUTTON_RESTORE] = FALSE;
868 } 861 }
869 862
870 // show all children
871 for ( child_list_const_iter_t child_it = getChildList()->begin(); child_it != getChildList()->end(); ++child_it)
872 {
873 LLView* viewp = *child_it;
874 viewp->setVisible(TRUE);
875 }
876
877 std::vector<LLHandle<LLView> >::iterator itor = mMinimizedHiddenChildren.begin();
878 for ( ; itor != mMinimizedHiddenChildren.end(); ++itor)
879 {
880 LLView* viewp = itor->get();
881 if(viewp)
882 {
883 viewp->setVisible(FALSE);
884 }
885 }
886 mMinimizedHiddenChildren.clear();
887
888 // show dependent floater 863 // show dependent floater
889 for(handle_set_iter_t dependent_it = mDependents.begin(); 864 for(handle_set_iter_t dependent_it = mDependents.begin();
890 dependent_it != mDependents.end(); 865 dependent_it != mDependents.end();
@@ -898,6 +873,12 @@ void LLFloater::setMinimized(BOOL minimize)
898 } 873 }
899 } 874 }
900 875
876 for (S32 i = 0; i < 4; i++)
877 {
878 if (mResizeBar[i]) mResizeBar[i]->setEnabled(isResizable());
879 if (mResizeHandle[i]) mResizeHandle[i]->setEnabled(isResizable());
880 }
881
901 mMinimized = FALSE; 882 mMinimized = FALSE;
902 883
903 // Reshape *after* setting mMinimized 884 // Reshape *after* setting mMinimized
@@ -954,7 +935,8 @@ void LLFloater::setIsChrome(BOOL is_chrome)
954 } 935 }
955 936
956 // no titles displayed on "chrome" floaters 937 // no titles displayed on "chrome" floaters
957 mDragHandle->setTitleVisible(!is_chrome); 938 if (mDragHandle)
939 mDragHandle->setTitleVisible(!is_chrome);
958 940
959 LLPanel::setIsChrome(is_chrome); 941 LLPanel::setIsChrome(is_chrome);
960} 942}
@@ -965,7 +947,8 @@ void LLFloater::setForeground(BOOL front)
965 if (front != mForeground) 947 if (front != mForeground)
966 { 948 {
967 mForeground = front; 949 mForeground = front;
968 mDragHandle->setForeground( front ); 950 if (mDragHandle)
951 mDragHandle->setForeground( front );
969 952
970 if (!front) 953 if (!front)
971 { 954 {
@@ -1310,49 +1293,72 @@ void LLFloater::onClickClose( void* userdata )
1310// virtual 1293// virtual
1311void LLFloater::draw() 1294void LLFloater::draw()
1312{ 1295{
1313 if( getVisible() ) 1296 // draw background
1297 if( isBackgroundVisible() )
1314 { 1298 {
1315 // draw background 1299 S32 left = LLPANEL_BORDER_WIDTH;
1316 if( isBackgroundVisible() ) 1300 S32 top = getRect().getHeight() - LLPANEL_BORDER_WIDTH;
1317 { 1301 S32 right = getRect().getWidth() - LLPANEL_BORDER_WIDTH;
1318 S32 left = LLPANEL_BORDER_WIDTH; 1302 S32 bottom = LLPANEL_BORDER_WIDTH;
1319 S32 top = getRect().getHeight() - LLPANEL_BORDER_WIDTH;
1320 S32 right = getRect().getWidth() - LLPANEL_BORDER_WIDTH;
1321 S32 bottom = LLPANEL_BORDER_WIDTH;
1322 1303
1323 LLColor4 shadow_color = LLUI::sColorsGroup->getColor("ColorDropShadow"); 1304 LLColor4 shadow_color = LLUI::sColorsGroup->getColor("ColorDropShadow");
1324 F32 shadow_offset = (F32)LLUI::sConfigGroup->getS32("DropShadowFloater"); 1305 F32 shadow_offset = (F32)LLUI::sConfigGroup->getS32("DropShadowFloater");
1325 if (!isBackgroundOpaque()) 1306 if (!isBackgroundOpaque())
1326 { 1307 {
1327 shadow_offset *= 0.2f; 1308 shadow_offset *= 0.2f;
1328 shadow_color.mV[VALPHA] *= 0.5f; 1309 shadow_color.mV[VALPHA] *= 0.5f;
1329 } 1310 }
1330 gl_drop_shadow(left, top, right, bottom, 1311 gl_drop_shadow(left, top, right, bottom,
1331 shadow_color, 1312 shadow_color,
1332 llround(shadow_offset)); 1313 llround(shadow_offset));
1333 1314
1334 // No transparent windows in simple UI 1315 // No transparent windows in simple UI
1335 if (isBackgroundOpaque()) 1316 if (isBackgroundOpaque())
1336 { 1317 {
1337 gl_rect_2d( left, top, right, bottom, getBackgroundColor() ); 1318 gl_rect_2d( left, top, right, bottom, getBackgroundColor() );
1338 } 1319 }
1339 else 1320 else
1340 { 1321 {
1341 gl_rect_2d( left, top, right, bottom, getTransparentColor() ); 1322 gl_rect_2d( left, top, right, bottom, getTransparentColor() );
1342 } 1323 }
1343 1324
1344 if(gFocusMgr.childHasKeyboardFocus(this) && !getIsChrome() && !getTitle().empty()) 1325 if(gFocusMgr.childHasKeyboardFocus(this) && !getIsChrome() && !getTitle().empty())
1345 { 1326 {
1346 // draw highlight on title bar to indicate focus. RDW 1327 // draw highlight on title bar to indicate focus. RDW
1347 const LLFontGL* font = gResMgr->getRes( LLFONT_SANSSERIF ); 1328 const LLFontGL* font = LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF );
1348 LLRect r = getRect(); 1329 LLRect r = getRect();
1349 gl_rect_2d_offset_local(0, r.getHeight(), r.getWidth(), r.getHeight() - (S32)font->getLineHeight() - 1, 1330 gl_rect_2d_offset_local(0, r.getHeight(), r.getWidth(), r.getHeight() - (S32)font->getLineHeight() - 1,
1350 LLUI::sColorsGroup->getColor("TitleBarFocusColor"), 0, TRUE); 1331 LLUI::sColorsGroup->getColor("TitleBarFocusColor"), 0, TRUE);
1351 }
1352 } 1332 }
1333 }
1353 1334
1354 LLPanel::updateDefaultBtn(); 1335 LLPanel::updateDefaultBtn();
1355 1336
1337 if( getDefaultButton() )
1338 {
1339 if (hasFocus() && getDefaultButton()->getEnabled())
1340 {
1341 LLUICtrl* focus_ctrl = gFocusMgr.getKeyboardFocus();
1342 // is this button a direct descendent and not a nested widget (e.g. checkbox)?
1343 BOOL focus_is_child_button = dynamic_cast<LLButton*>(focus_ctrl) != NULL && focus_ctrl->getParent() == this;
1344 // only enable default button when current focus is not a button
1345 getDefaultButton()->setBorderEnabled(!focus_is_child_button);
1346 }
1347 else
1348 {
1349 getDefaultButton()->setBorderEnabled(FALSE);
1350 }
1351 }
1352 if (isMinimized())
1353 {
1354 for (S32 i = 0; i < BUTTON_COUNT; i++)
1355 {
1356 drawChild(mButtons[i]);
1357 }
1358 drawChild(mDragHandle);
1359 }
1360 else
1361 {
1356 // draw children 1362 // draw children
1357 LLView* focused_child = gFocusMgr.getKeyboardFocus(); 1363 LLView* focused_child = gFocusMgr.getKeyboardFocus();
1358 BOOL focused_child_visible = FALSE; 1364 BOOL focused_child_visible = FALSE;
@@ -1365,36 +1371,35 @@ void LLFloater::draw()
1365 // don't call LLPanel::draw() since we've implemented custom background rendering 1371 // don't call LLPanel::draw() since we've implemented custom background rendering
1366 LLView::draw(); 1372 LLView::draw();
1367 1373
1368 if( isBackgroundVisible() )
1369 {
1370 // add in a border to improve spacialized visual aclarity ;)
1371 // use lines instead of gl_rect_2d so we can round the edges as per james' recommendation
1372 LLUI::setLineWidth(1.5f);
1373 LLColor4 outlineColor = gFocusMgr.childHasKeyboardFocus(this) ? LLUI::sColorsGroup->getColor("FloaterFocusBorderColor") : LLUI::sColorsGroup->getColor("FloaterUnfocusBorderColor");
1374 gl_rect_2d_offset_local(0, getRect().getHeight() + 1, getRect().getWidth() + 1, 0, outlineColor, -LLPANEL_BORDER_WIDTH, FALSE);
1375 LLUI::setLineWidth(1.f);
1376 }
1377
1378 if (focused_child_visible) 1374 if (focused_child_visible)
1379 { 1375 {
1380 focused_child->setVisible(TRUE); 1376 focused_child->setVisible(TRUE);
1381 } 1377 }
1382 drawChild(focused_child); 1378 drawChild(focused_child);
1379 }
1383 1380
1384 // update tearoff button for torn off floaters 1381 if( isBackgroundVisible() )
1385 // when last host goes away 1382 {
1386 if (mCanTearOff && !getHost()) 1383 // add in a border to improve spacialized visual aclarity ;)
1384 // use lines instead of gl_rect_2d so we can round the edges as per james' recommendation
1385 LLUI::setLineWidth(1.5f);
1386 LLColor4 outlineColor = gFocusMgr.childHasKeyboardFocus(this) ? LLUI::sColorsGroup->getColor("FloaterFocusBorderColor") : LLUI::sColorsGroup->getColor("FloaterUnfocusBorderColor");
1387 gl_rect_2d_offset_local(0, getRect().getHeight() + 1, getRect().getWidth() + 1, 0, outlineColor, -LLPANEL_BORDER_WIDTH, FALSE);
1388 LLUI::setLineWidth(1.f);
1389 }
1390
1391 // update tearoff button for torn off floaters
1392 // when last host goes away
1393 if (mCanTearOff && !getHost())
1394 {
1395 LLFloater* old_host = mLastHostHandle.get();
1396 if (!old_host)
1387 { 1397 {
1388 LLFloater* old_host = mLastHostHandle.get(); 1398 setCanTearOff(FALSE);
1389 if (!old_host)
1390 {
1391 setCanTearOff(FALSE);
1392 }
1393 } 1399 }
1394 } 1400 }
1395} 1401}
1396 1402
1397
1398void LLFloater::setCanMinimize(BOOL can_minimize) 1403void LLFloater::setCanMinimize(BOOL can_minimize)
1399{ 1404{
1400 // removing minimize/restore button programmatically, 1405 // removing minimize/restore button programmatically,
@@ -1540,7 +1545,13 @@ void LLFloater::updateButtons()
1540 S32 button_count = 0; 1545 S32 button_count = 0;
1541 for (S32 i = 0; i < BUTTON_COUNT; i++) 1546 for (S32 i = 0; i < BUTTON_COUNT; i++)
1542 { 1547 {
1543 if (mButtonsEnabled[i]) 1548 mButtons[i]->setEnabled(mButtonsEnabled[i]);
1549
1550 if (mButtonsEnabled[i]
1551 //*HACK: always render close button for hosted floaters
1552 // so that users don't accidentally hit the button when closing multiple windows
1553 // in the chatterbox
1554 || (i == BUTTON_CLOSE && mButtonScale != 1.f))
1544 { 1555 {
1545 button_count++; 1556 button_count++;
1546 1557
@@ -1564,18 +1575,16 @@ void LLFloater::updateButtons()
1564 1575
1565 mButtons[i]->setRect(btn_rect); 1576 mButtons[i]->setRect(btn_rect);
1566 mButtons[i]->setVisible(TRUE); 1577 mButtons[i]->setVisible(TRUE);
1567 mButtons[i]->setEnabled(TRUE);
1568 // the restore button should have a tab stop so that it takes action when you Ctrl-Tab to a minimized floater 1578 // the restore button should have a tab stop so that it takes action when you Ctrl-Tab to a minimized floater
1569 mButtons[i]->setTabStop(i == BUTTON_RESTORE); 1579 mButtons[i]->setTabStop(i == BUTTON_RESTORE);
1570 } 1580 }
1571 else if (mButtons[i]) 1581 else if (mButtons[i])
1572 { 1582 {
1573 mButtons[i]->setVisible(FALSE); 1583 mButtons[i]->setVisible(FALSE);
1574 mButtons[i]->setEnabled(FALSE);
1575 } 1584 }
1576 } 1585 }
1577 1586 if (mDragHandle)
1578 mDragHandle->setMaxTitleWidth(getRect().getWidth() - (button_count * (LLFLOATER_CLOSE_BOX_SIZE + 1))); 1587 mDragHandle->setMaxTitleWidth(getRect().getWidth() - (button_count * (LLFLOATER_CLOSE_BOX_SIZE + 1)));
1579} 1588}
1580 1589
1581void LLFloater::buildButtons() 1590void LLFloater::buildButtons()
@@ -2076,7 +2085,7 @@ void LLFloaterView::closeAllChildren(bool app_quitting)
2076 2085
2077 // Attempt to close floater. This will cause the "do you want to save" 2086 // Attempt to close floater. This will cause the "do you want to save"
2078 // dialogs to appear. 2087 // dialogs to appear.
2079 if (floaterp->canClose()) 2088 if (floaterp->canClose() && !floaterp->isDead())
2080 { 2089 {
2081 floaterp->close(app_quitting); 2090 floaterp->close(app_quitting);
2082 } 2091 }
@@ -2093,7 +2102,7 @@ BOOL LLFloaterView::allChildrenClosed()
2093 LLView* viewp = *it; 2102 LLView* viewp = *it;
2094 LLFloater* floaterp = (LLFloater*)viewp; 2103 LLFloater* floaterp = (LLFloater*)viewp;
2095 2104
2096 if (floaterp->getVisible() && floaterp->canClose()) 2105 if (floaterp->getVisible() && !floaterp->isDead() && floaterp->canClose())
2097 { 2106 {
2098 return false; 2107 return false;
2099 } 2108 }
@@ -2332,7 +2341,9 @@ void LLFloaterView::popVisibleAll(const skip_list_t& skip_list)
2332LLMultiFloater::LLMultiFloater() : 2341LLMultiFloater::LLMultiFloater() :
2333 mTabContainer(NULL), 2342 mTabContainer(NULL),
2334 mTabPos(LLTabContainer::TOP), 2343 mTabPos(LLTabContainer::TOP),
2335 mAutoResize(TRUE) 2344 mAutoResize(TRUE),
2345 mOrigMinWidth(0),
2346 mOrigMinHeight(0)
2336{ 2347{
2337 2348
2338} 2349}
@@ -2340,7 +2351,9 @@ LLMultiFloater::LLMultiFloater() :
2340LLMultiFloater::LLMultiFloater(LLTabContainer::TabPosition tab_pos) : 2351LLMultiFloater::LLMultiFloater(LLTabContainer::TabPosition tab_pos) :
2341 mTabContainer(NULL), 2352 mTabContainer(NULL),
2342 mTabPos(tab_pos), 2353 mTabPos(tab_pos),
2343 mAutoResize(TRUE) 2354 mAutoResize(TRUE),
2355 mOrigMinWidth(0),
2356 mOrigMinHeight(0)
2344{ 2357{
2345 2358
2346} 2359}
@@ -2349,7 +2362,9 @@ LLMultiFloater::LLMultiFloater(const LLString &name) :
2349 LLFloater(name), 2362 LLFloater(name),
2350 mTabContainer(NULL), 2363 mTabContainer(NULL),
2351 mTabPos(LLTabContainer::TOP), 2364 mTabPos(LLTabContainer::TOP),
2352 mAutoResize(FALSE) 2365 mAutoResize(FALSE),
2366 mOrigMinWidth(0),
2367 mOrigMinHeight(0)
2353{ 2368{
2354} 2369}
2355 2370
@@ -2361,7 +2376,9 @@ LLMultiFloater::LLMultiFloater(
2361 LLFloater(name, rect, name), 2376 LLFloater(name, rect, name),
2362 mTabContainer(NULL), 2377 mTabContainer(NULL),
2363 mTabPos(LLTabContainer::TOP), 2378 mTabPos(LLTabContainer::TOP),
2364 mAutoResize(auto_resize) 2379 mAutoResize(auto_resize),
2380 mOrigMinWidth(0),
2381 mOrigMinHeight(0)
2365{ 2382{
2366 mTabContainer = new LLTabContainer("Preview Tabs", 2383 mTabContainer = new LLTabContainer("Preview Tabs",
2367 LLRect(LLPANEL_BORDER_WIDTH, getRect().getHeight() - LLFLOATER_HEADER_SIZE, getRect().getWidth() - LLPANEL_BORDER_WIDTH, 0), 2384 LLRect(LLPANEL_BORDER_WIDTH, getRect().getHeight() - LLFLOATER_HEADER_SIZE, getRect().getWidth() - LLPANEL_BORDER_WIDTH, 0),
@@ -2385,7 +2402,9 @@ LLMultiFloater::LLMultiFloater(
2385 LLFloater(name, rect_control, name), 2402 LLFloater(name, rect_control, name),
2386 mTabContainer(NULL), 2403 mTabContainer(NULL),
2387 mTabPos(tab_pos), 2404 mTabPos(tab_pos),
2388 mAutoResize(auto_resize) 2405 mAutoResize(auto_resize),
2406 mOrigMinWidth(0),
2407 mOrigMinHeight(0)
2389{ 2408{
2390 mTabContainer = new LLTabContainer("Preview Tabs", 2409 mTabContainer = new LLTabContainer("Preview Tabs",
2391 LLRect(LLPANEL_BORDER_WIDTH, getRect().getHeight() - LLFLOATER_HEADER_SIZE, getRect().getWidth() - LLPANEL_BORDER_WIDTH, 0), 2410 LLRect(LLPANEL_BORDER_WIDTH, getRect().getHeight() - LLFLOATER_HEADER_SIZE, getRect().getWidth() - LLPANEL_BORDER_WIDTH, 0),
@@ -2678,24 +2697,20 @@ void LLMultiFloater::setVisible(BOOL visible)
2678 } 2697 }
2679} 2698}
2680 2699
2681BOOL LLMultiFloater::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent) 2700BOOL LLMultiFloater::handleKeyHere(KEY key, MASK mask)
2682{ 2701{
2683 if (getEnabled() 2702 if (key == 'W' && mask == MASK_CONTROL)
2684 && mask == MASK_CONTROL)
2685 { 2703 {
2686 if (key == 'W') 2704 LLFloater* floater = getActiveFloater();
2705 // is user closeable and is system closeable
2706 if (floater && floater->canClose() && floater->isCloseable())
2687 { 2707 {
2688 LLFloater* floater = getActiveFloater(); 2708 floater->close();
2689 // is user closeable and is system closeable
2690 if (floater && floater->canClose() && floater->isCloseable())
2691 {
2692 floater->close();
2693 }
2694 return TRUE;
2695 } 2709 }
2710 return TRUE;
2696 } 2711 }
2697 2712
2698 return LLFloater::handleKeyHere(key, mask, called_from_parent); 2713 return LLFloater::handleKeyHere(key, mask);
2699} 2714}
2700 2715
2701LLFloater* LLMultiFloater::getActiveFloater() 2716LLFloater* LLMultiFloater::getActiveFloater()
@@ -2763,15 +2778,18 @@ void LLMultiFloater::setCanResize(BOOL can_resize)
2763 2778
2764BOOL LLMultiFloater::postBuild() 2779BOOL LLMultiFloater::postBuild()
2765{ 2780{
2781 // remember any original xml minimum size
2782 getResizeLimits(&mOrigMinWidth, &mOrigMinHeight);
2783
2766 if (mTabContainer) 2784 if (mTabContainer)
2767 { 2785 {
2768 return TRUE; 2786 return TRUE;
2769 } 2787 }
2770 2788
2771 requires("Preview Tabs", WIDGET_TYPE_TAB_CONTAINER); 2789 requires<LLTabContainer>("Preview Tabs");
2772 if (checkRequirements()) 2790 if (checkRequirements())
2773 { 2791 {
2774 mTabContainer = LLUICtrlFactory::getTabContainerByName(this, "Preview Tabs"); 2792 mTabContainer = getChild<LLTabContainer>("Preview Tabs");
2775 return TRUE; 2793 return TRUE;
2776 } 2794 }
2777 2795
@@ -2780,10 +2798,11 @@ BOOL LLMultiFloater::postBuild()
2780 2798
2781void LLMultiFloater::updateResizeLimits() 2799void LLMultiFloater::updateResizeLimits()
2782{ 2800{
2783 S32 new_min_width = 0; 2801 // initialize minimum size constraint to the original xml values.
2784 S32 new_min_height = 0; 2802 S32 new_min_width = mOrigMinWidth;
2785 S32 tab_idx; 2803 S32 new_min_height = mOrigMinHeight;
2786 for (tab_idx = 0; tab_idx < mTabContainer->getTabCount(); ++tab_idx) 2804 // possibly increase minimum size constraint due to children's minimums.
2805 for (S32 tab_idx = 0; tab_idx < mTabContainer->getTabCount(); ++tab_idx)
2787 { 2806 {
2788 LLFloater* floaterp = (LLFloater*)mTabContainer->getPanelByIndex(tab_idx); 2807 LLFloater* floaterp = (LLFloater*)mTabContainer->getPanelByIndex(tab_idx);
2789 if (floaterp) 2808 if (floaterp)
diff --git a/linden/indra/llui/llfloater.h b/linden/indra/llui/llfloater.h
index f0bbcaf..8068741 100644
--- a/linden/indra/llui/llfloater.h
+++ b/linden/indra/llui/llfloater.h
@@ -50,7 +50,7 @@ class LLMultiFloater;
50const S32 LLFLOATER_VPAD = 6; 50const S32 LLFLOATER_VPAD = 6;
51const S32 LLFLOATER_HPAD = 6; 51const S32 LLFLOATER_HPAD = 6;
52const S32 LLFLOATER_CLOSE_BOX_SIZE = 16; 52const S32 LLFLOATER_CLOSE_BOX_SIZE = 16;
53const S32 LLFLOATER_HEADER_SIZE = 16; 53const S32 LLFLOATER_HEADER_SIZE = 18;
54 54
55const BOOL RESIZE_YES = TRUE; 55const BOOL RESIZE_YES = TRUE;
56const BOOL RESIZE_NO = FALSE; 56const BOOL RESIZE_NO = FALSE;
@@ -122,8 +122,6 @@ public:
122 virtual void initFloater(const LLString& title, BOOL resizable, 122 virtual void initFloater(const LLString& title, BOOL resizable,
123 S32 min_width, S32 min_height, BOOL drag_on_left, 123 S32 min_width, S32 min_height, BOOL drag_on_left,
124 BOOL minimizable, BOOL close_btn); 124 BOOL minimizable, BOOL close_btn);
125 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_FLOATER; }
126 virtual LLString getWidgetTag() const { return LL_FLOATER_TAG; };
127 125
128 virtual void open(); /* Flawfinder: ignore */ 126 virtual void open(); /* Flawfinder: ignore */
129 127
@@ -187,6 +185,8 @@ public:
187 // Defaults to destroy(). 185 // Defaults to destroy().
188 virtual void onClose(bool app_quitting) { destroy(); } 186 virtual void onClose(bool app_quitting) { destroy(); }
189 187
188 // This cannot be "const" until all derived floater canClose()
189 // methods are const as well. JC
190 virtual BOOL canClose() { return TRUE; } 190 virtual BOOL canClose() { return TRUE; }
191 191
192 virtual void setVisible(BOOL visible); 192 virtual void setVisible(BOOL visible);
@@ -302,9 +302,6 @@ class LLFloaterView : public LLUICtrl
302public: 302public:
303 LLFloaterView( const LLString& name, const LLRect& rect ); 303 LLFloaterView( const LLString& name, const LLRect& rect );
304 304
305 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_FLOATER_VIEW; }
306 virtual LLString getWidgetTag() const { return LL_FLOATER_VIEW_TAG; }
307
308 /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE); 305 /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
309 void reshapeFloater(S32 width, S32 height, BOOL called_from_parent, BOOL adjust_vertical); 306 void reshapeFloater(S32 width, S32 height, BOOL called_from_parent, BOOL adjust_vertical);
310 307
@@ -373,9 +370,7 @@ public:
373 /*virtual*/ void onClose(bool app_quitting); 370 /*virtual*/ void onClose(bool app_quitting);
374 /*virtual*/ void draw(); 371 /*virtual*/ void draw();
375 /*virtual*/ void setVisible(BOOL visible); 372 /*virtual*/ void setVisible(BOOL visible);
376 /*virtual*/ BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); 373 /*virtual*/ BOOL handleKeyHere(KEY key, MASK mask);
377 /*virtual*/ EWidgetType getWidgetType() const { return WIDGET_TYPE_MULTI_FLOATER; }
378 /*virtual*/ LLString getWidgetTag() const { return LL_MULTI_FLOATER_TAG; };
379 374
380 virtual void setCanResize(BOOL can_resize); 375 virtual void setCanResize(BOOL can_resize);
381 virtual void growToFit(S32 content_width, S32 content_height); 376 virtual void growToFit(S32 content_width, S32 content_height);
@@ -418,6 +413,7 @@ protected:
418 413
419 LLTabContainer::TabPosition mTabPos; 414 LLTabContainer::TabPosition mTabPos;
420 BOOL mAutoResize; 415 BOOL mAutoResize;
416 S32 mOrigMinWidth, mOrigMinHeight; // logically const but initialized late
421}; 417};
422 418
423// visibility policy specialized for floaters 419// visibility policy specialized for floaters
diff --git a/linden/indra/llui/llfocusmgr.cpp b/linden/indra/llui/llfocusmgr.cpp
index 0634513..e2d1f46 100644
--- a/linden/indra/llui/llfocusmgr.cpp
+++ b/linden/indra/llui/llfocusmgr.cpp
@@ -46,6 +46,7 @@ LLFocusMgr::LLFocusMgr()
46 mKeyboardFocus( NULL ), 46 mKeyboardFocus( NULL ),
47 mLastKeyboardFocus( NULL ), 47 mLastKeyboardFocus( NULL ),
48 mDefaultKeyboardFocus( NULL ), 48 mDefaultKeyboardFocus( NULL ),
49 mKeystrokesOnly(FALSE),
49 mTopCtrl( NULL ), 50 mTopCtrl( NULL ),
50 mFocusWeight(0.f), 51 mFocusWeight(0.f),
51 mAppHasFocus(TRUE) // Macs don't seem to notify us that we've gotten focus, so default to true 52 mAppHasFocus(TRUE) // Macs don't seem to notify us that we've gotten focus, so default to true
@@ -85,7 +86,7 @@ void LLFocusMgr::releaseFocusIfNeeded( const LLView* view )
85} 86}
86 87
87 88
88void LLFocusMgr::setKeyboardFocus(LLUICtrl* new_focus, BOOL lock) 89void LLFocusMgr::setKeyboardFocus(LLUICtrl* new_focus, BOOL lock, BOOL keystrokes_only)
89{ 90{
90 if (mLockedView && 91 if (mLockedView &&
91 (new_focus == NULL || 92 (new_focus == NULL ||
@@ -98,6 +99,8 @@ void LLFocusMgr::setKeyboardFocus(LLUICtrl* new_focus, BOOL lock)
98 99
99 //llinfos << "Keyboard focus handled by " << (new_focus ? new_focus->getName() : "nothing") << llendl; 100 //llinfos << "Keyboard focus handled by " << (new_focus ? new_focus->getName() : "nothing") << llendl;
100 101
102 mKeystrokesOnly = keystrokes_only;
103
101 if( new_focus != mKeyboardFocus ) 104 if( new_focus != mKeyboardFocus )
102 { 105 {
103 mLastKeyboardFocus = mKeyboardFocus; 106 mLastKeyboardFocus = mKeyboardFocus;
diff --git a/linden/indra/llui/llfocusmgr.h b/linden/indra/llui/llfocusmgr.h
index 842c874..49aba93 100644
--- a/linden/indra/llui/llfocusmgr.h
+++ b/linden/indra/llui/llfocusmgr.h
@@ -54,13 +54,17 @@ public:
54 BOOL childHasMouseCapture( const LLView* parent ) const; 54 BOOL childHasMouseCapture( const LLView* parent ) const;
55 55
56 // Keyboard Focus 56 // Keyboard Focus
57 void setKeyboardFocus(LLUICtrl* new_focus, BOOL lock = FALSE); // new_focus = NULL to release the focus. 57 void setKeyboardFocus(LLUICtrl* new_focus, BOOL lock = FALSE, BOOL keystrokes_only = FALSE); // new_focus = NULL to release the focus.
58 LLUICtrl* getKeyboardFocus() const { return mKeyboardFocus; } 58 LLUICtrl* getKeyboardFocus() const { return mKeyboardFocus; }
59 LLUICtrl* getLastKeyboardFocus() const { return mLastKeyboardFocus; } 59 LLUICtrl* getLastKeyboardFocus() const { return mLastKeyboardFocus; }
60 BOOL childHasKeyboardFocus( const LLView* parent ) const; 60 BOOL childHasKeyboardFocus( const LLView* parent ) const;
61 void removeKeyboardFocusWithoutCallback( const LLView* focus ); 61 void removeKeyboardFocusWithoutCallback( const LLView* focus );
62 BOOL getKeystrokesOnly() { return mKeystrokesOnly; }
63 void setKeystrokesOnly(BOOL keystrokes_only) { mKeystrokesOnly = keystrokes_only; }
64
62 F32 getFocusTime() const { return mFocusTimer.getElapsedTimeF32(); } 65 F32 getFocusTime() const { return mFocusTimer.getElapsedTimeF32(); }
63 F32 getFocusFlashAmt() const; 66 F32 getFocusFlashAmt() const;
67 S32 getFocusFlashWidth() const { return llround(lerp(1.f, 3.f, getFocusFlashAmt())); }
64 LLColor4 getFocusColor() const; 68 LLColor4 getFocusColor() const;
65 void triggerFocusFlash(); 69 void triggerFocusFlash();
66 BOOL getAppHasFocus() const { return mAppHasFocus; } 70 BOOL getAppHasFocus() const { return mAppHasFocus; }
@@ -96,6 +100,7 @@ private:
96 LLUICtrl* mKeyboardFocus; // Keyboard events are preemptively routed to this object 100 LLUICtrl* mKeyboardFocus; // Keyboard events are preemptively routed to this object
97 LLUICtrl* mLastKeyboardFocus; // who last had focus 101 LLUICtrl* mLastKeyboardFocus; // who last had focus
98 LLUICtrl* mDefaultKeyboardFocus; 102 LLUICtrl* mDefaultKeyboardFocus;
103 BOOL mKeystrokesOnly;
99 104
100 // Top View 105 // Top View
101 LLUICtrl* mTopCtrl; 106 LLUICtrl* mTopCtrl;
diff --git a/linden/indra/llui/llhtmlhelp.h b/linden/indra/llui/llhtmlhelp.h
index d4ec9e3..254faa2 100644
--- a/linden/indra/llui/llhtmlhelp.h
+++ b/linden/indra/llui/llhtmlhelp.h
@@ -36,7 +36,8 @@ class LLHtmlHelp
36{ 36{
37public: 37public:
38 virtual ~LLHtmlHelp() {} 38 virtual ~LLHtmlHelp() {}
39 virtual void show(std::string start_url, std::string title) = 0; 39 virtual void show() = 0;
40 virtual void show(std::string help_url) = 0;
40}; 41};
41 42
42#endif // LL_LLFLOATERHTMLHELP_H 43#endif // LL_LLFLOATERHTMLHELP_H
diff --git a/linden/indra/llui/lliconctrl.cpp b/linden/indra/llui/lliconctrl.cpp
index 6a1d77c..f35de85 100644
--- a/linden/indra/llui/lliconctrl.cpp
+++ b/linden/indra/llui/lliconctrl.cpp
@@ -42,14 +42,15 @@
42 42
43const F32 RESOLUTION_BUMP = 1.f; 43const F32 RESOLUTION_BUMP = 1.f;
44 44
45static LLRegisterWidget<LLIconCtrl> r("icon");
46
45LLIconCtrl::LLIconCtrl(const LLString& name, const LLRect &rect, const LLUUID &image_id) 47LLIconCtrl::LLIconCtrl(const LLString& name, const LLRect &rect, const LLUUID &image_id)
46: LLUICtrl(name, 48: LLUICtrl(name,
47 rect, 49 rect,
48 FALSE, // mouse opaque 50 FALSE, // mouse opaque
49 NULL, NULL, 51 NULL, NULL,
50 FOLLOWS_LEFT | FOLLOWS_TOP), 52 FOLLOWS_LEFT | FOLLOWS_TOP),
51 mColor( LLColor4::white ), 53 mColor( LLColor4::white )
52 mImageName("")
53{ 54{
54 setImage( image_id ); 55 setImage( image_id );
55 setTabStop(FALSE); 56 setTabStop(FALSE);
@@ -64,9 +65,7 @@ LLIconCtrl::LLIconCtrl(const LLString& name, const LLRect &rect, const LLString
64 mColor( LLColor4::white ), 65 mColor( LLColor4::white ),
65 mImageName(image_name) 66 mImageName(image_name)
66{ 67{
67 LLUUID image_id; 68 setImage( image_name );
68 image_id.set(LLUI::sAssetsGroup->getString( image_name ));
69 setImage( image_id );
70 setTabStop(FALSE); 69 setTabStop(FALSE);
71} 70}
72 71
@@ -77,32 +76,52 @@ LLIconCtrl::~LLIconCtrl()
77} 76}
78 77
79 78
80void LLIconCtrl::setImage(const LLUUID &image_id) 79void LLIconCtrl::setImage(const LLString& image_name)
81{ 80{
82 mImageID = image_id; 81 //RN: support UUIDs masquerading as strings
82 if (LLUUID::validate(image_name))
83 {
84 mImageID = LLUUID(image_name);
85
86 setImage(mImageID);
87 }
88 else
89 {
90 mImageName = image_name;
91 mImagep = LLUI::sImageProvider->getUIImage(image_name);
92 mImageID.setNull();
93 }
94}
95
96void LLIconCtrl::setImage(const LLUUID& image_id)
97{
98 mImageName.clear();
83 mImagep = LLUI::sImageProvider->getUIImageByID(image_id); 99 mImagep = LLUI::sImageProvider->getUIImageByID(image_id);
100 mImageID = image_id;
84} 101}
85 102
86 103
87void LLIconCtrl::draw() 104void LLIconCtrl::draw()
88{ 105{
89 if( getVisible() ) 106 if( mImagep.notNull() )
90 { 107 {
91 if( mImagep.notNull() ) 108 mImagep->draw(getLocalRect(), mColor );
92 {
93 mImagep->draw(0, 0,
94 getRect().getWidth(), getRect().getHeight(),
95 mColor );
96 }
97
98 LLUICtrl::draw();
99 } 109 }
110
111 LLUICtrl::draw();
100} 112}
101 113
102// virtual 114// virtual
103void LLIconCtrl::setValue(const LLSD& value ) 115void LLIconCtrl::setValue(const LLSD& value )
104{ 116{
105 setImage(value.asUUID()); 117 if (value.isUUID())
118 {
119 setImage(value.asUUID());
120 }
121 else
122 {
123 setImage(value.asString());
124 }
106} 125}
107 126
108// virtual 127// virtual
@@ -135,18 +154,16 @@ LLView* LLIconCtrl::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *
135 LLRect rect; 154 LLRect rect;
136 createRect(node, rect, parent, LLRect()); 155 createRect(node, rect, parent, LLRect());
137 156
138 LLUUID image_id; 157 LLString image_name;
139 if (node->hasAttribute("image_name")) 158 if (node->hasAttribute("image_name"))
140 { 159 {
141 LLString image_name;
142 node->getAttributeString("image_name", image_name); 160 node->getAttributeString("image_name", image_name);
143 image_id.set(LLUI::sAssetsGroup->getString( image_name ));
144 } 161 }
145 162
146 LLColor4 color(LLColor4::white); 163 LLColor4 color(LLColor4::white);
147 LLUICtrlFactory::getAttributeColor(node,"color", color); 164 LLUICtrlFactory::getAttributeColor(node,"color", color);
148 165
149 LLIconCtrl* icon = new LLIconCtrl(name, rect, image_id); 166 LLIconCtrl* icon = new LLIconCtrl(name, rect, image_name);
150 167
151 icon->setColor(color); 168 icon->setColor(color);
152 169
diff --git a/linden/indra/llui/lliconctrl.h b/linden/indra/llui/lliconctrl.h
index b0c191f..055b504 100644
--- a/linden/indra/llui/lliconctrl.h
+++ b/linden/indra/llui/lliconctrl.h
@@ -51,14 +51,14 @@ public:
51 LLIconCtrl(const LLString& name, const LLRect &rect, const LLUUID &image_id); 51 LLIconCtrl(const LLString& name, const LLRect &rect, const LLUUID &image_id);
52 LLIconCtrl(const LLString& name, const LLRect &rect, const LLString &image_name); 52 LLIconCtrl(const LLString& name, const LLRect &rect, const LLString &image_name);
53 virtual ~LLIconCtrl(); 53 virtual ~LLIconCtrl();
54 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_ICON; }
55 virtual LLString getWidgetTag() const { return LL_ICON_CTRL_TAG; }
56 54
57 // llview overrides 55 // llview overrides
58 virtual void draw(); 56 virtual void draw();
59 57
60 void setImage(const LLUUID &image_id); 58 void setImage(const LLString& image_name);
59 void setImage(const LLUUID& image_name);
61 const LLUUID &getImage() const { return mImageID; } 60 const LLUUID &getImage() const { return mImageID; }
61 LLString getImageName() const { return mImageName; }
62 62
63 // Takes a UUID, wraps get/setImage 63 // Takes a UUID, wraps get/setImage
64 virtual void setValue(const LLSD& value ); 64 virtual void setValue(const LLSD& value );
diff --git a/linden/indra/llui/lllineeditor.cpp b/linden/indra/llui/lllineeditor.cpp
index 1c96bc4..aeb906c 100644
--- a/linden/indra/llui/lllineeditor.cpp
+++ b/linden/indra/llui/lllineeditor.cpp
@@ -70,7 +70,6 @@ const F32 CURSOR_FLASH_DELAY = 1.0f; // in seconds
70const S32 SCROLL_INCREMENT_ADD = 0; // make space for typing 70const S32 SCROLL_INCREMENT_ADD = 0; // make space for typing
71const S32 SCROLL_INCREMENT_DEL = 4; // make space for baskspacing 71const S32 SCROLL_INCREMENT_DEL = 4; // make space for baskspacing
72const F32 AUTO_SCROLL_TIME = 0.05f; 72const F32 AUTO_SCROLL_TIME = 0.05f;
73const F32 LABEL_HPAD = 5.f;
74 73
75const F32 PREEDIT_MARKER_BRIGHTNESS = 0.4f; 74const F32 PREEDIT_MARKER_BRIGHTNESS = 0.4f;
76const S32 PREEDIT_MARKER_GAP = 1; 75const S32 PREEDIT_MARKER_GAP = 1;
@@ -81,6 +80,10 @@ const S32 PREEDIT_STANDOUT_GAP = 1;
81const S32 PREEDIT_STANDOUT_POSITION = 2; 80const S32 PREEDIT_STANDOUT_POSITION = 2;
82const S32 PREEDIT_STANDOUT_THICKNESS = 2; 81const S32 PREEDIT_STANDOUT_THICKNESS = 2;
83 82
83static LLRegisterWidget<LLLineEditor> r1("line_editor");
84
85/* static */ LLPointer<LLUIImage> LLLineEditor::sImage;
86
84// 87//
85// Member functions 88// Member functions
86// 89//
@@ -101,8 +104,8 @@ LLLineEditor::LLLineEditor(const LLString& name, const LLRect& rect,
101 mMaxLengthBytes(max_length_bytes), 104 mMaxLengthBytes(max_length_bytes),
102 mCursorPos( 0 ), 105 mCursorPos( 0 ),
103 mScrollHPos( 0 ), 106 mScrollHPos( 0 ),
104 mBorderLeft(0), 107 mTextPadLeft(0),
105 mBorderRight(0), 108 mTextPadRight(0),
106 mCommitOnFocusLost( TRUE ), 109 mCommitOnFocusLost( TRUE ),
107 mRevertOnEsc( TRUE ), 110 mRevertOnEsc( TRUE ),
108 mKeystrokeCallback( keystroke_callback ), 111 mKeystrokeCallback( keystroke_callback ),
@@ -128,7 +131,8 @@ LLLineEditor::LLLineEditor(const LLString& name, const LLRect& rect,
128 mHandleEditKeysDirectly( FALSE ), 131 mHandleEditKeysDirectly( FALSE ),
129 mSelectAllonFocusReceived( FALSE ), 132 mSelectAllonFocusReceived( FALSE ),
130 mPassDelete(FALSE), 133 mPassDelete(FALSE),
131 mReadOnly(FALSE) 134 mReadOnly(FALSE),
135 mImage( sImage )
132{ 136{
133 llassert( max_length_bytes > 0 ); 137 llassert( max_length_bytes > 0 );
134 138
@@ -151,8 +155,7 @@ LLLineEditor::LLLineEditor(const LLString& name, const LLRect& rect,
151 155
152 setFocusLostCallback(focus_lost_callback); 156 setFocusLostCallback(focus_lost_callback);
153 157
154 mMinHPixels = mBorderThickness + UI_LINEEDITOR_H_PAD + mBorderLeft; 158 setTextPadding(0, 0);
155 mMaxHPixels = getRect().getWidth() - mMinHPixels - mBorderThickness - mBorderRight;
156 159
157 mScrollTimer.reset(); 160 mScrollTimer.reset();
158 161
@@ -166,6 +169,12 @@ LLLineEditor::LLLineEditor(const LLString& name, const LLRect& rect,
166 mBorder = new LLViewBorder( "line ed border", border_rect, border_bevel, border_style, mBorderThickness ); 169 mBorder = new LLViewBorder( "line ed border", border_rect, border_bevel, border_style, mBorderThickness );
167 addChild( mBorder ); 170 addChild( mBorder );
168 mBorder->setFollows(FOLLOWS_LEFT|FOLLOWS_RIGHT|FOLLOWS_TOP|FOLLOWS_BOTTOM); 171 mBorder->setFollows(FOLLOWS_LEFT|FOLLOWS_RIGHT|FOLLOWS_TOP|FOLLOWS_BOTTOM);
172
173 if( ! sImage)
174 {
175 sImage = LLUI::getUIImage("sm_rounded_corners_simple.tga");
176 }
177 mImage = sImage;
169} 178}
170 179
171 180
@@ -243,9 +252,9 @@ void LLLineEditor::updateHistory()
243 252
244void LLLineEditor::reshape(S32 width, S32 height, BOOL called_from_parent) 253void LLLineEditor::reshape(S32 width, S32 height, BOOL called_from_parent)
245{ 254{
246 LLUICtrl::reshape(width, height, called_from_parent ); 255 LLUICtrl::reshape(width, height, called_from_parent);
247 256 setTextPadding(mTextPadLeft, mTextPadRight); // For clamping side-effect.
248 mMaxHPixels = getRect().getWidth() - 2 * (mBorderThickness + UI_LINEEDITOR_H_PAD) + 1 - mBorderRight; 257 setCursor(mCursorPos); // For clamping side-effect.
249} 258}
250 259
251void LLLineEditor::setEnabled(BOOL enabled) 260void LLLineEditor::setEnabled(BOOL enabled)
@@ -262,12 +271,12 @@ void LLLineEditor::setMaxTextLength(S32 max_text_length)
262 mMaxLengthBytes = max_len; 271 mMaxLengthBytes = max_len;
263} 272}
264 273
265void LLLineEditor::setBorderWidth(S32 left, S32 right) 274void LLLineEditor::setTextPadding(S32 left, S32 right)
266{ 275{
267 mBorderLeft = llclamp(left, 0, getRect().getWidth()); 276 mTextPadLeft = llclamp(left, 0, getRect().getWidth());
268 mBorderRight = llclamp(right, 0, getRect().getWidth()); 277 mTextPadRight = llclamp(right, 0, getRect().getWidth());
269 mMinHPixels = mBorderThickness + UI_LINEEDITOR_H_PAD + mBorderLeft; 278 mMinHPixels = UI_LINEEDITOR_H_PAD + mTextPadLeft;
270 mMaxHPixels = getRect().getWidth() - mMinHPixels - mBorderThickness - mBorderRight; 279 mMaxHPixels = getRect().getWidth() - mMinHPixels - mTextPadRight;
271} 280}
272 281
273 282
@@ -483,9 +492,10 @@ BOOL LLLineEditor::handleDoubleClick(S32 x, S32 y, MASK mask)
483 492
484BOOL LLLineEditor::handleMouseDown(S32 x, S32 y, MASK mask) 493BOOL LLLineEditor::handleMouseDown(S32 x, S32 y, MASK mask)
485{ 494{
486 if (x < mBorderLeft || x > (getRect().getWidth() - mBorderRight)) 495 // Check first whether the "clear search" button wants to deal with this.
496 if(childrenHandleMouseDown(x, y, mask) != NULL)
487 { 497 {
488 return LLUICtrl::handleMouseDown(x, y, mask); 498 return TRUE;
489 } 499 }
490 if (mSelectAllonFocusReceived 500 if (mSelectAllonFocusReceived
491 && gFocusMgr.getKeyboardFocus() != this) 501 && gFocusMgr.getKeyboardFocus() != this)
@@ -563,61 +573,62 @@ BOOL LLLineEditor::handleMouseDown(S32 x, S32 y, MASK mask)
563BOOL LLLineEditor::handleHover(S32 x, S32 y, MASK mask) 573BOOL LLLineEditor::handleHover(S32 x, S32 y, MASK mask)
564{ 574{
565 BOOL handled = FALSE; 575 BOOL handled = FALSE;
566 if (!hasMouseCapture() && (x < mBorderLeft || x > (getRect().getWidth() - mBorderRight))) 576 // Check first whether the "clear search" button wants to deal with this.
577 if(!hasMouseCapture())
567 { 578 {
568 return LLUICtrl::handleHover(x, y, mask); 579 if(childrenHandleHover(x, y, mask) != NULL)
580 {
581 return TRUE;
582 }
569 } 583 }
570 584
571 if( getVisible() ) 585 if( (hasMouseCapture()) && mIsSelecting )
572 { 586 {
573 if( (hasMouseCapture()) && mIsSelecting ) 587 if (x != mLastSelectionX || y != mLastSelectionY)
574 { 588 {
575 if (x != mLastSelectionX || y != mLastSelectionY) 589 mLastSelectionX = x;
590 mLastSelectionY = y;
591 }
592 // Scroll if mouse cursor outside of bounds
593 if (mScrollTimer.hasExpired())
594 {
595 S32 increment = llround(mScrollTimer.getElapsedTimeF32() / AUTO_SCROLL_TIME);
596 mScrollTimer.reset();
597 mScrollTimer.setTimerExpirySec(AUTO_SCROLL_TIME);
598 if( (x < mMinHPixels) && (mScrollHPos > 0 ) )
576 { 599 {
577 mLastSelectionX = x; 600 // Scroll to the left
578 mLastSelectionY = y; 601 mScrollHPos = llclamp(mScrollHPos - increment, 0, mText.length());
579 } 602 }
580 // Scroll if mouse cursor outside of bounds 603 else
581 if (mScrollTimer.hasExpired()) 604 if( (x > mMaxHPixels) && (mCursorPos < (S32)mText.length()) )
582 { 605 {
583 S32 increment = llround(mScrollTimer.getElapsedTimeF32() / AUTO_SCROLL_TIME); 606 // If scrolling one pixel would make a difference...
584 mScrollTimer.reset(); 607 S32 pixels_after_scrolling_one_char = findPixelNearestPos(1);
585 mScrollTimer.setTimerExpirySec(AUTO_SCROLL_TIME); 608 if( pixels_after_scrolling_one_char >= mMaxHPixels )
586 if( (x < mMinHPixels) && (mScrollHPos > 0 ) )
587 {
588 // Scroll to the left
589 mScrollHPos = llclamp(mScrollHPos - increment, 0, mText.length());
590 }
591 else
592 if( (x > mMaxHPixels) && (mCursorPos < (S32)mText.length()) )
593 { 609 {
594 // If scrolling one pixel would make a difference... 610 // ...scroll to the right
595 S32 pixels_after_scrolling_one_char = findPixelNearestPos(1); 611 mScrollHPos = llclamp(mScrollHPos + increment, 0, mText.length());
596 if( pixels_after_scrolling_one_char >= mMaxHPixels )
597 {
598 // ...scroll to the right
599 mScrollHPos = llclamp(mScrollHPos + increment, 0, mText.length());
600 }
601 } 612 }
602 } 613 }
614 }
603 615
604 setCursorAtLocalPos( x ); 616 setCursorAtLocalPos( x );
605 mSelectionEnd = getCursor(); 617 mSelectionEnd = getCursor();
606 618
607 // delay cursor flashing 619 // delay cursor flashing
608 mKeystrokeTimer.reset(); 620 mKeystrokeTimer.reset();
609 621
610 getWindow()->setCursor(UI_CURSOR_IBEAM); 622 getWindow()->setCursor(UI_CURSOR_IBEAM);
611 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (active)" << llendl; 623 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (active)" << llendl;
612 handled = TRUE; 624 handled = TRUE;
613 } 625 }
614 626
615 if( !handled ) 627 if( !handled )
616 { 628 {
617 getWindow()->setCursor(UI_CURSOR_IBEAM); 629 getWindow()->setCursor(UI_CURSOR_IBEAM);
618 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (inactive)" << llendl; 630 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (inactive)" << llendl;
619 handled = TRUE; 631 handled = TRUE;
620 }
621 } 632 }
622 633
623 return handled; 634 return handled;
@@ -634,9 +645,10 @@ BOOL LLLineEditor::handleMouseUp(S32 x, S32 y, MASK mask)
634 handled = TRUE; 645 handled = TRUE;
635 } 646 }
636 647
637 if (!handled && (x < mBorderLeft || x > (getRect().getWidth() - mBorderRight))) 648 // Check first whether the "clear search" button wants to deal with this.
649 if(!handled && childrenHandleMouseUp(x, y, mask) != NULL)
638 { 650 {
639 return LLUICtrl::handleMouseUp(x, y, mask); 651 return TRUE;
640 } 652 }
641 653
642 if( mIsSelecting ) 654 if( mIsSelecting )
@@ -1223,12 +1235,12 @@ BOOL LLLineEditor::handleSpecialKey(KEY key, MASK mask)
1223} 1235}
1224 1236
1225 1237
1226BOOL LLLineEditor::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent ) 1238BOOL LLLineEditor::handleKeyHere(KEY key, MASK mask )
1227{ 1239{
1228 BOOL handled = FALSE; 1240 BOOL handled = FALSE;
1229 BOOL selection_modified = FALSE; 1241 BOOL selection_modified = FALSE;
1230 1242
1231 if ( (gFocusMgr.getKeyboardFocus() == this) && getVisible()) 1243 if ( gFocusMgr.getKeyboardFocus() == this )
1232 { 1244 {
1233 LLLineEditorRollback rollback( this ); 1245 LLLineEditorRollback rollback( this );
1234 1246
@@ -1291,7 +1303,7 @@ BOOL LLLineEditor::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent )
1291} 1303}
1292 1304
1293 1305
1294BOOL LLLineEditor::handleUnicodeCharHere(llwchar uni_char, BOOL called_from_parent) 1306BOOL LLLineEditor::handleUnicodeCharHere(llwchar uni_char)
1295{ 1307{
1296 if ((uni_char < 0x20) || (uni_char == 0x7F)) // Control character or DEL 1308 if ((uni_char < 0x20) || (uni_char == 0x7F)) // Control character or DEL
1297 { 1309 {
@@ -1381,11 +1393,6 @@ void LLLineEditor::doDelete()
1381 1393
1382void LLLineEditor::draw() 1394void LLLineEditor::draw()
1383{ 1395{
1384 if( !getVisible() )
1385 {
1386 return;
1387 }
1388
1389 S32 text_len = mText.length(); 1396 S32 text_len = mText.length();
1390 1397
1391 LLString saved_text; 1398 LLString saved_text;
@@ -1406,6 +1413,13 @@ void LLLineEditor::draw()
1406 1413
1407 LLColor4 bg_color = mReadOnlyBgColor; 1414 LLColor4 bg_color = mReadOnlyBgColor;
1408 1415
1416#if 0 // for when we're ready for image art.
1417 if( hasFocus())
1418 {
1419 mImage->drawBorder(0, 0, getRect().getWidth(), getRect().getHeight(), gFocusMgr.getFocusColor(), gFocusMgr.getFocusFlashWidth());
1420 }
1421 mImage->draw(getLocalRect(), mReadOnly ? mReadOnlyBgColor : mWriteableBgColor );
1422#else // the old programmer art.
1409 // drawing solids requires texturing be disabled 1423 // drawing solids requires texturing be disabled
1410 { 1424 {
1411 LLGLSNoTexture no_texture; 1425 LLGLSNoTexture no_texture;
@@ -1423,6 +1437,7 @@ void LLLineEditor::draw()
1423 } 1437 }
1424 gl_rect_2d(background, bg_color); 1438 gl_rect_2d(background, bg_color);
1425 } 1439 }
1440#endif
1426 1441
1427 // draw text 1442 // draw text
1428 1443
@@ -1560,10 +1575,14 @@ void LLLineEditor::draw()
1560 mMaxHPixels - llround(rendered_pixels_right), 1575 mMaxHPixels - llround(rendered_pixels_right),
1561 &rendered_pixels_right); 1576 &rendered_pixels_right);
1562 } 1577 }
1578#if 0 // for when we're ready for image art.
1579 mBorder->setVisible(FALSE); // no more programmatic art.
1580#endif
1563 1581
1564 // If we're editing... 1582 // If we're editing...
1565 if( gFocusMgr.getKeyboardFocus() == this) 1583 if( gFocusMgr.getKeyboardFocus() == this)
1566 { 1584 {
1585 //mBorder->setVisible(TRUE); // ok, programmer art just this once.
1567 // (Flash the cursor every half second) 1586 // (Flash the cursor every half second)
1568 if (gShowTextEditCursor && !mReadOnly) 1587 if (gShowTextEditCursor && !mReadOnly)
1569 { 1588 {
@@ -1616,7 +1635,7 @@ void LLLineEditor::draw()
1616 if (0 == mText.length()) 1635 if (0 == mText.length())
1617 { 1636 {
1618 mGLFont->render(mLabel.getWString(), 0, 1637 mGLFont->render(mLabel.getWString(), 0,
1619 LABEL_HPAD, (F32)text_bottom, 1638 mMinHPixels, (F32)text_bottom,
1620 label_color, 1639 label_color,
1621 LLFontGL::LEFT, LLFontGL::BOTTOM, 1640 LLFontGL::LEFT, LLFontGL::BOTTOM,
1622 LLFontGL::NORMAL, 1641 LLFontGL::NORMAL,
@@ -1757,7 +1776,7 @@ BOOL LLLineEditor::prevalidateFloat(const LLWString &str)
1757 if( 0 < len ) 1776 if( 0 < len )
1758 { 1777 {
1759 // May be a comma or period, depending on the locale 1778 // May be a comma or period, depending on the locale
1760 llwchar decimal_point = (llwchar)gResMgr->getDecimalPoint(); 1779 llwchar decimal_point = (llwchar)LLResMgr::getInstance()->getDecimalPoint();
1761 1780
1762 S32 i = 0; 1781 S32 i = 0;
1763 1782
@@ -1806,7 +1825,7 @@ BOOL LLLineEditor::postvalidateFloat(const LLString &str)
1806 } 1825 }
1807 1826
1808 // May be a comma or period, depending on the locale 1827 // May be a comma or period, depending on the locale
1809 llwchar decimal_point = (llwchar)gResMgr->getDecimalPoint(); 1828 llwchar decimal_point = (llwchar)LLResMgr::getInstance()->getDecimalPoint();
1810 1829
1811 for( ; i < len; i++ ) 1830 for( ; i < len; i++ )
1812 { 1831 {
@@ -2244,8 +2263,27 @@ LLView* LLLineEditor::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory
2244 return line_editor; 2263 return line_editor;
2245} 2264}
2246 2265
2266//static
2267void LLLineEditor::cleanupClass()
2268{
2269 sImage = NULL;
2270}
2271
2272/* static */
2273LLPointer<LLUIImage> LLLineEditor::parseImage(LLString name, LLXMLNodePtr from, LLPointer<LLUIImage> def)
2274{
2275 LLString xml_name;
2276 if (from->hasAttribute(name)) from->getAttributeString(name, xml_name);
2277 if (xml_name == LLString::null) return def;
2278 LLPointer<LLUIImage> image = LLUI::getUIImage(xml_name);
2279 return image.isNull() ? def : image;
2280}
2281
2247void LLLineEditor::setColorParameters(LLXMLNodePtr node) 2282void LLLineEditor::setColorParameters(LLXMLNodePtr node)
2248{ 2283{
2284 // overrides default image if supplied.
2285 mImage = parseImage("image", node, mImage);
2286
2249 LLColor4 color; 2287 LLColor4 color;
2250 if (LLUICtrlFactory::getAttributeColor(node,"cursor_color", color)) 2288 if (LLUICtrlFactory::getAttributeColor(node,"cursor_color", color))
2251 { 2289 {
@@ -2510,6 +2548,9 @@ S32 LLLineEditor::getPreeditFontSize() const
2510} 2548}
2511 2549
2512 2550
2551static LLRegisterWidget<LLSearchEditor> r2("search_editor");
2552
2553
2513LLSearchEditor::LLSearchEditor(const LLString& name, 2554LLSearchEditor::LLSearchEditor(const LLString& name,
2514 const LLRect& rect, 2555 const LLRect& rect,
2515 S32 max_length_bytes, 2556 S32 max_length_bytes,
@@ -2539,7 +2580,7 @@ LLSearchEditor::LLSearchEditor(const LLString& name,
2539 LLRect clear_btn_rect(rect.getWidth() - btn_width, rect.getHeight(), rect.getWidth(), 0); 2580 LLRect clear_btn_rect(rect.getWidth() - btn_width, rect.getHeight(), rect.getWidth(), 0);
2540 mClearSearchButton = new LLButton("clear search", 2581 mClearSearchButton = new LLButton("clear search",
2541 clear_btn_rect, 2582 clear_btn_rect,
2542 "closebox.tga", 2583 "icn_clear_lineeditor.tga",
2543 "UIImgBtnCloseInactiveUUID", 2584 "UIImgBtnCloseInactiveUUID",
2544 LLString::null, 2585 LLString::null,
2545 onClearSearch, 2586 onClearSearch,
@@ -2552,9 +2593,42 @@ LLSearchEditor::LLSearchEditor(const LLString& name,
2552 mClearSearchButton->setTabStop(FALSE); 2593 mClearSearchButton->setTabStop(FALSE);
2553 mSearchEdit->addChild(mClearSearchButton); 2594 mSearchEdit->addChild(mClearSearchButton);
2554 2595
2555 mSearchEdit->setBorderWidth(0, btn_width); 2596 mSearchEdit->setTextPadding(0, btn_width);
2597}
2598
2599
2600//virtual
2601void LLSearchEditor::setValue(const LLSD& value )
2602{
2603 mSearchEdit->setValue(value);
2604}
2605
2606//virtual
2607LLSD LLSearchEditor::getValue() const
2608{
2609 return mSearchEdit->getValue();
2556} 2610}
2557 2611
2612//virtual
2613BOOL LLSearchEditor::setTextArg( const LLString& key, const LLStringExplicit& text )
2614{
2615 return mSearchEdit->setTextArg(key, text);
2616}
2617
2618//virtual
2619BOOL LLSearchEditor::setLabelArg( const LLString& key, const LLStringExplicit& text )
2620{
2621 return mSearchEdit->setLabelArg(key, text);
2622}
2623
2624//virtual
2625void LLSearchEditor::clear()
2626{
2627 if (mSearchEdit)
2628 {
2629 mSearchEdit->clear();
2630 }
2631}
2558 2632
2559void LLSearchEditor::draw() 2633void LLSearchEditor::draw()
2560{ 2634{
diff --git a/linden/indra/llui/lllineeditor.h b/linden/indra/llui/lllineeditor.h
index ba3c697..bf0dcb5 100644
--- a/linden/indra/llui/lllineeditor.h
+++ b/linden/indra/llui/lllineeditor.h
@@ -78,19 +78,19 @@ public:
78 S32 border_thickness = 1); 78 S32 border_thickness = 1);
79 79
80 virtual ~LLLineEditor(); 80 virtual ~LLLineEditor();
81 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_LINE_EDITOR; } 81
82 virtual LLString getWidgetTag() const { return LL_LINE_EDITOR_TAG; };
83 virtual LLXMLNodePtr getXML(bool save_children = true) const; 82 virtual LLXMLNodePtr getXML(bool save_children = true) const;
84 void setColorParameters(LLXMLNodePtr node); 83 void setColorParameters(LLXMLNodePtr node);
85 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); 84 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
85 static void cleanupClass();
86 86
87 // mousehandler overrides 87 // mousehandler overrides
88 /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask); 88 /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask);
89 /*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask); 89 /*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask);
90 /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask); 90 /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask);
91 /*virtual*/ BOOL handleDoubleClick(S32 x,S32 y,MASK mask); 91 /*virtual*/ BOOL handleDoubleClick(S32 x,S32 y,MASK mask);
92 /*virtual*/ BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent ); 92 /*virtual*/ BOOL handleKeyHere(KEY key, MASK mask );
93 /*virtual*/ BOOL handleUnicodeCharHere(llwchar uni_char, BOOL called_from_parent); 93 /*virtual*/ BOOL handleUnicodeCharHere(llwchar uni_char);
94 /*virtual*/ void onMouseCaptureLost(); 94 /*virtual*/ void onMouseCaptureLost();
95 95
96 // LLEditMenuHandler overrides 96 // LLEditMenuHandler overrides
@@ -189,8 +189,8 @@ public:
189 189
190 void setKeystrokeCallback(void (*keystroke_callback)(LLLineEditor* caller, void* user_data)); 190 void setKeystrokeCallback(void (*keystroke_callback)(LLLineEditor* caller, void* user_data));
191 191
192 void setMaxTextLength(S32 max_text_length); 192 void setMaxTextLength(S32 max_text_length);
193 void setBorderWidth(S32 left, S32 right); 193 void setTextPadding(S32 left, S32 right); // Used to specify room for children before or after text.
194 194
195 static BOOL isPartOfWord(llwchar c); 195 static BOOL isPartOfWord(llwchar c);
196 // Prevalidation controls which keystrokes can affect the editor 196 // Prevalidation controls which keystrokes can affect the editor
@@ -212,7 +212,7 @@ public:
212 void updateHistory(); // stores current line in history 212 void updateHistory(); // stores current line in history
213 213
214private: 214private:
215 // private helper classes 215 // private helper methods
216 void removeChar(); 216 void removeChar();
217 void addChar(const llwchar c); 217 void addChar(const llwchar c);
218 void setCursorAtLocalPos(S32 local_mouse_x); 218 void setCursorAtLocalPos(S32 local_mouse_x);
@@ -254,10 +254,10 @@ protected:
254 S32 mCursorPos; // I-beam is just after the mCursorPos-th character. 254 S32 mCursorPos; // I-beam is just after the mCursorPos-th character.
255 S32 mScrollHPos; // Horizontal offset from the start of mText. Used for scrolling. 255 S32 mScrollHPos; // Horizontal offset from the start of mText. Used for scrolling.
256 LLFrameTimer mScrollTimer; 256 LLFrameTimer mScrollTimer;
257 S32 mTextPadLeft; // Used to reserve space before the beginning of the text for children.
258 S32 mTextPadRight; // Used to reserve space after the end of the text for children.
257 S32 mMinHPixels; 259 S32 mMinHPixels;
258 S32 mMaxHPixels; 260 S32 mMaxHPixels;
259 S32 mBorderLeft;
260 S32 mBorderRight;
261 261
262 BOOL mCommitOnFocusLost; 262 BOOL mCommitOnFocusLost;
263 BOOL mRevertOnEsc; 263 BOOL mRevertOnEsc;
@@ -302,6 +302,15 @@ protected:
302 std::vector<S32> mPreeditPositions; 302 std::vector<S32> mPreeditPositions;
303 LLPreeditor::standouts_t mPreeditStandouts; 303 LLPreeditor::standouts_t mPreeditStandouts;
304 304
305private:
306 // Utility on top of LLUI::getUIImage, looks up a named image in a given XML node and returns it if possible
307 // or returns a given default image if anything in the process fails.
308 static LLPointer<LLUIImage> parseImage(LLString name, LLXMLNodePtr from, LLPointer<LLUIImage> def);
309 // Global instance used as default for member instance below.
310 static LLPointer<LLUIImage> sImage;
311 // Instances that by default point to the statics but can be overidden in XML.
312 LLPointer<LLUIImage> mImage;
313
305 // private helper class 314 // private helper class
306 class LLLineEditorRollback 315 class LLLineEditorRollback
307 { 316 {
@@ -359,8 +368,6 @@ public:
359 368
360 /*virtual*/ void draw(); 369 /*virtual*/ void draw();
361 370
362 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_SEARCH_EDITOR; }
363 virtual LLString getWidgetTag() const { return LL_SEARCH_EDITOR_TAG; }
364 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); 371 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
365 372
366 void setText(const LLStringExplicit &new_text) { mSearchEdit->setText(new_text); } 373 void setText(const LLStringExplicit &new_text) { mSearchEdit->setText(new_text); }
@@ -368,12 +375,11 @@ public:
368 void setSearchCallback(void (*search_callback)(const LLString& search_string, void* user_data), void* data) { mSearchCallback = search_callback; mCallbackUserData = data; } 375 void setSearchCallback(void (*search_callback)(const LLString& search_string, void* user_data), void* data) { mSearchCallback = search_callback; mCallbackUserData = data; }
369 376
370 // LLUICtrl interface 377 // LLUICtrl interface
371 virtual void setValue(const LLSD& value ) { mSearchEdit->setValue(value); } 378 virtual void setValue(const LLSD& value );
372 virtual LLSD getValue() const { return mSearchEdit->getValue(); } 379 virtual LLSD getValue() const;
373 virtual BOOL setTextArg( const LLString& key, const LLStringExplicit& text ) { return mSearchEdit->setTextArg( key, text); } 380 virtual BOOL setTextArg( const LLString& key, const LLStringExplicit& text );
374 virtual BOOL setLabelArg( const LLString& key, const LLStringExplicit& text ) { return mSearchEdit->setLabelArg(key, text); } 381 virtual BOOL setLabelArg( const LLString& key, const LLStringExplicit& text );
375 virtual void clear() { if (mSearchEdit) mSearchEdit->clear(); } 382 virtual void clear();
376
377 383
378private: 384private:
379 static void onSearchEdit(LLLineEditor* caller, void* user_data ); 385 static void onSearchEdit(LLLineEditor* caller, void* user_data );
diff --git a/linden/indra/llui/llmenugl.cpp b/linden/indra/llui/llmenugl.cpp
index cb54476..f2486f1 100644
--- a/linden/indra/llui/llmenugl.cpp
+++ b/linden/indra/llui/llmenugl.cpp
@@ -188,31 +188,6 @@ LLXMLNodePtr LLMenuItemGL::getXML(bool save_children) const
188 return node; 188 return node;
189} 189}
190 190
191BOOL LLMenuItemGL::handleKey(KEY key, MASK mask, BOOL called_from_parent)
192{
193 // modified from LLView::handleKey
194 // ignore visibility, as keyboard accelerators should still trigger menu items
195 // even when they are not visible
196 // also, ignore enabled flag for self, as that can change based on menu callbacks
197 BOOL handled = FALSE;
198
199 if( called_from_parent )
200 {
201 // Downward traversal
202 if (getEnabled())
203 {
204 handled = childrenHandleKey( key, mask ) != NULL;
205 }
206 }
207
208 if( !handled )
209 {
210 handled = handleKeyHere( key, mask, called_from_parent );
211 }
212
213 return handled;
214}
215
216BOOL LLMenuItemGL::handleAcceleratorKey(KEY key, MASK mask) 191BOOL LLMenuItemGL::handleAcceleratorKey(KEY key, MASK mask)
217{ 192{
218 if( getEnabled() && (!gKeyboard->getKeyRepeated(key) || mAllowKeyRepeat) && (key == mAcceleratorKey) && (mask == (mAcceleratorMask & MASK_NORMALKEYS)) ) 193 if( getEnabled() && (!gKeyboard->getKeyRepeated(key) || mAllowKeyRepeat) && (key == mAcceleratorKey) && (mask == (mAcceleratorMask & MASK_NORMALKEYS)) )
@@ -400,7 +375,7 @@ void LLMenuItemGL::doIt( void )
400} 375}
401 376
402 377
403BOOL LLMenuItemGL::handleKeyHere( KEY key, MASK mask, BOOL called_from_parent ) 378BOOL LLMenuItemGL::handleKeyHere( KEY key, MASK mask )
404{ 379{
405 if (getHighlight() && 380 if (getHighlight() &&
406 getMenu()->isOpen()) 381 getMenu()->isOpen())
@@ -436,29 +411,21 @@ BOOL LLMenuItemGL::handleKeyHere( KEY key, MASK mask, BOOL called_from_parent )
436 411
437BOOL LLMenuItemGL::handleMouseUp( S32 x, S32 y, MASK ) 412BOOL LLMenuItemGL::handleMouseUp( S32 x, S32 y, MASK )
438{ 413{
439 if (getEnabled()) 414 // switch to mouse navigation mode
440 { 415 LLMenuGL::setKeyboardMode(FALSE);
441 // switch to mouse navigation mode
442 LLMenuGL::setKeyboardMode(FALSE);
443 416
444 doIt(); 417 doIt();
445 make_ui_sound("UISndClickRelease"); 418 make_ui_sound("UISndClickRelease");
446 return TRUE; 419 return TRUE;
447 }
448 return FALSE;
449} 420}
450 421
451BOOL LLMenuItemGL::handleMouseDown( S32 x, S32 y, MASK ) 422BOOL LLMenuItemGL::handleMouseDown( S32 x, S32 y, MASK )
452{ 423{
453 if (getEnabled()) 424 // switch to mouse navigation mode
454 { 425 LLMenuGL::setKeyboardMode(FALSE);
455 // switch to mouse navigation mode
456 LLMenuGL::setKeyboardMode(FALSE);
457 426
458 setHighlight(TRUE); 427 setHighlight(TRUE);
459 return TRUE; 428 return TRUE;
460 }
461 return FALSE;
462} 429}
463 430
464 431
@@ -560,9 +527,6 @@ public:
560 527
561 virtual LLString getType() const { return "separator"; } 528 virtual LLString getType() const { return "separator"; }
562 529
563 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_MENU_ITEM_SEPARATOR; }
564 virtual LLString getWidgetTag() const { return LL_MENU_ITEM_SEPARATOR_GL_TAG; }
565
566 // doIt() - do the primary funcationality of the menu item. 530 // doIt() - do the primary funcationality of the menu item.
567 virtual void doIt( void ) {} 531 virtual void doIt( void ) {}
568 532
@@ -641,9 +605,6 @@ class LLMenuItemVerticalSeparatorGL
641public: 605public:
642 LLMenuItemVerticalSeparatorGL( void ); 606 LLMenuItemVerticalSeparatorGL( void );
643 607
644 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_MENU_SEPARATOR_VERTICAL; }
645 virtual LLString getWidgetTag() const { return LL_MENU_ITEM_VERTICAL_SEPARATOR_GL_TAG; }
646
647 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask) { return FALSE; } 608 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask) { return FALSE; }
648}; 609};
649 610
@@ -739,8 +700,6 @@ public:
739 { 700 {
740 setEnabled(FALSE); 701 setEnabled(FALSE);
741 } 702 }
742 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_MENU_ITEM_BLANK; }
743 virtual LLString getWidgetTag() const { return LL_MENU_ITEM_BLANK_GL_TAG; }
744 virtual void doIt( void ) {} 703 virtual void doIt( void ) {}
745 virtual void draw( void ) {} 704 virtual void draw( void ) {}
746}; 705};
@@ -827,57 +786,33 @@ void LLMenuItemCallGL::setEnabledControl(LLString enabled_control, LLView *conte
827 // Register new listener 786 // Register new listener
828 if (!enabled_control.empty()) 787 if (!enabled_control.empty())
829 { 788 {
830 LLControlBase *control = context->findControl(enabled_control); 789 LLControlVariable *control = context->findControl(enabled_control);
831 if (control) 790 if (!control)
832 {
833 LLSD state = control->registerListener(this, "ENABLED");
834 setEnabled(state);
835 }
836 else
837 { 791 {
838 context->addBoolControl(enabled_control, getEnabled()); 792 context->addBoolControl(enabled_control, getEnabled());
839 control = context->findControl(enabled_control); 793 control = context->findControl(enabled_control);
840 control->registerListener(this, "ENABLED"); 794 llassert_always(control);
841 } 795 }
796 control->getSignal()->connect(boost::bind(&LLView::controlListener, _1, getHandle(), std::string("enabled")));
797 setEnabled(control->getValue());
842 } 798 }
843} 799}
844 800
845void LLMenuItemCallGL::setVisibleControl(LLString enabled_control, LLView *context) 801void LLMenuItemCallGL::setVisibleControl(LLString visible_control, LLView *context)
846{ 802{
847 // Register new listener 803 // Register new listener
848 if (!enabled_control.empty()) 804 if (!visible_control.empty())
849 { 805 {
850 LLControlBase *control = context->findControl(enabled_control); 806 LLControlVariable *control = context->findControl(visible_control);
851 if (control) 807 if (!control)
852 { 808 {
853 LLSD state = control->registerListener(this, "VISIBLE"); 809 context->addBoolControl(visible_control, getVisible());
854 setVisible(state); 810 control = context->findControl(visible_control);
811 llassert_always(control);
855 } 812 }
856 else 813 control->getSignal()->connect(boost::bind(&LLView::controlListener, _1, getHandle(), std::string("visible")));
857 { 814 setVisible(control->getValue());
858 context->addBoolControl(enabled_control, getEnabled());
859 control = context->findControl(enabled_control);
860 control->registerListener(this, "VISIBLE");
861 }
862 }
863}
864
865// virtual
866bool LLMenuItemCallGL::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
867{
868 if (userdata.asString() == "ENABLED" && event->desc() == "value_changed")
869 {
870 LLSD state = event->getValue();
871 setEnabled(state);
872 return TRUE;
873 } 815 }
874 if (userdata.asString() == "VISIBLE" && event->desc() == "value_changed")
875 {
876 LLSD state = event->getValue();
877 setVisible(state);
878 return TRUE;
879 }
880 return LLMenuItemGL::handleEvent(event, userdata);
881} 816}
882 817
883// virtual 818// virtual
@@ -1000,44 +935,35 @@ LLMenuItemCheckGL::LLMenuItemCheckGL ( const LLString& name,
1000 setControlName(control_name, context); 935 setControlName(control_name, context);
1001} 936}
1002 937
1003void LLMenuItemCheckGL::setCheckedControl(LLString checked_control, LLView *context) 938//virtual
939void LLMenuItemCheckGL::setValue(const LLSD& value)
1004{ 940{
1005 // Register new listener 941 mChecked = value.asBoolean();
1006 if (!checked_control.empty()) 942 if(mChecked)
1007 { 943 {
1008 LLControlBase *control = context->findControl(checked_control); 944 mDrawBoolLabel = BOOLEAN_TRUE_PREFIX;
1009 if (control) 945 }
1010 { 946 else
1011 LLSD state = control->registerListener(this, "CHECKED"); 947 {
1012 mChecked = state; 948 mDrawBoolLabel.clear();
1013 }
1014 else
1015 {
1016 context->addBoolControl(checked_control, mChecked);
1017 control = context->findControl(checked_control);
1018 control->registerListener(this, "CHECKED");
1019 }
1020 } 949 }
1021} 950}
1022 951
1023// virtual 952void LLMenuItemCheckGL::setCheckedControl(LLString checked_control, LLView *context)
1024bool LLMenuItemCheckGL::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1025{ 953{
1026 if (userdata.asString() == "CHECKED" && event->desc() == "value_changed") 954 // Register new listener
955 if (!checked_control.empty())
1027 { 956 {
1028 LLSD state = event->getValue(); 957 LLControlVariable *control = context->findControl(checked_control);
1029 mChecked = state; 958 if (!control)
1030 if(mChecked)
1031 {
1032 mDrawBoolLabel = BOOLEAN_TRUE_PREFIX;
1033 }
1034 else
1035 { 959 {
1036 mDrawBoolLabel.clear(); 960 context->addBoolControl(checked_control, mChecked);
961 control = context->findControl(checked_control);
962 llassert_always(control);
1037 } 963 }
1038 return TRUE; 964 control->getSignal()->connect(boost::bind(&LLView::controlListener, _1, getHandle(), std::string("value")));
965 mChecked = control->getValue();
1039 } 966 }
1040 return LLMenuItemCallGL::handleEvent(event, userdata);
1041} 967}
1042 968
1043// virtual 969// virtual
@@ -1119,29 +1045,31 @@ LLMenuItemBranchGL::LLMenuItemBranchGL( const LLString& name, const LLString& la
1119} 1045}
1120 1046
1121// virtual 1047// virtual
1122LLView* LLMenuItemBranchGL::getChildByName(const LLString& name, BOOL recurse) const 1048LLView* LLMenuItemBranchGL::getChildView(const LLString& name, BOOL recurse, BOOL create_if_missing) const
1123{ 1049{
1050 // richard: this is redundant with parent, remove
1124 if (mBranch->getName() == name) 1051 if (mBranch->getName() == name)
1125 { 1052 {
1126 return mBranch; 1053 return mBranch;
1127 } 1054 }
1128 // Always recurse on branches 1055 // Always recurse on branches
1129 return mBranch->getChild<LLView>(name, recurse); 1056 LLView* child = mBranch->getChildView(name, recurse, FALSE);
1057 if (!child)
1058 {
1059 child = LLView::getChildView(name, recurse, create_if_missing);
1060 }
1061 return child;
1130} 1062}
1131 1063
1132// virtual 1064// virtual
1133BOOL LLMenuItemBranchGL::handleMouseUp(S32 x, S32 y, MASK mask) 1065BOOL LLMenuItemBranchGL::handleMouseUp(S32 x, S32 y, MASK mask)
1134{ 1066{
1135 if (getEnabled()) 1067 // switch to mouse navigation mode
1136 { 1068 LLMenuGL::setKeyboardMode(FALSE);
1137 // switch to mouse navigation mode
1138 LLMenuGL::setKeyboardMode(FALSE);
1139 1069
1140 doIt(); 1070 doIt();
1141 make_ui_sound("UISndClickRelease"); 1071 make_ui_sound("UISndClickRelease");
1142 return TRUE; 1072 return TRUE;
1143 }
1144 return FALSE;
1145} 1073}
1146 1074
1147BOOL LLMenuItemBranchGL::handleAcceleratorKey(KEY key, MASK mask) 1075BOOL LLMenuItemBranchGL::handleAcceleratorKey(KEY key, MASK mask)
@@ -1299,7 +1227,7 @@ void LLMenuItemBranchGL::onVisibilityChange( BOOL new_visibility )
1299 LLMenuItemGL::onVisibilityChange(new_visibility); 1227 LLMenuItemGL::onVisibilityChange(new_visibility);
1300} 1228}
1301 1229
1302BOOL LLMenuItemBranchGL::handleKeyHere( KEY key, MASK mask, BOOL called_from_parent ) 1230BOOL LLMenuItemBranchGL::handleKeyHere( KEY key, MASK mask )
1303{ 1231{
1304 if (getMenu()->getVisible() && mBranch->getVisible() && key == KEY_LEFT) 1232 if (getMenu()->getVisible() && mBranch->getVisible() && key == KEY_LEFT)
1305 { 1233 {
@@ -1318,8 +1246,7 @@ BOOL LLMenuItemBranchGL::handleKeyHere( KEY key, MASK mask, BOOL called_from_par
1318 return handled; 1246 return handled;
1319 } 1247 }
1320 1248
1321 if (getEnabled() && 1249 if (getHighlight() &&
1322 getHighlight() &&
1323 getMenu()->isOpen() && 1250 getMenu()->isOpen() &&
1324 key == KEY_RIGHT && !mBranch->getHighlightedItem()) 1251 key == KEY_RIGHT && !mBranch->getHighlightedItem())
1325 { 1252 {
@@ -1333,7 +1260,7 @@ BOOL LLMenuItemBranchGL::handleKeyHere( KEY key, MASK mask, BOOL called_from_par
1333 } 1260 }
1334 } 1261 }
1335 1262
1336 return LLMenuItemGL::handleKeyHere(key, mask, called_from_parent); 1263 return LLMenuItemGL::handleKeyHere(key, mask);
1337} 1264}
1338 1265
1339void LLMenuItemBranchGL::openMenu() 1266void LLMenuItemBranchGL::openMenu()
@@ -1403,9 +1330,6 @@ public:
1403 LLMenuItemBranchDownGL( const LLString& name, const LLString& label, LLMenuGL* branch, 1330 LLMenuItemBranchDownGL( const LLString& name, const LLString& label, LLMenuGL* branch,
1404 KEY key = KEY_NONE, MASK mask = MASK_NONE ); 1331 KEY key = KEY_NONE, MASK mask = MASK_NONE );
1405 1332
1406 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_MENU_ITEM_BRANCH_DOWN; }
1407 virtual LLString getWidgetTag() const { return LL_MENU_ITEM_BRANCH_DOWN_GL_TAG; }
1408
1409 virtual LLString getType() const { return "menu"; } 1333 virtual LLString getType() const { return "menu"; }
1410 1334
1411 // returns the normal width of this control in pixels - this is 1335 // returns the normal width of this control in pixels - this is
@@ -1429,7 +1353,7 @@ public:
1429 virtual BOOL handleMouseDown( S32 x, S32 y, MASK mask ); 1353 virtual BOOL handleMouseDown( S32 x, S32 y, MASK mask );
1430 virtual BOOL handleMouseUp( S32 x, S32 y, MASK mask ); 1354 virtual BOOL handleMouseUp( S32 x, S32 y, MASK mask );
1431 virtual void draw( void ); 1355 virtual void draw( void );
1432 virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); 1356 virtual BOOL handleKeyHere(KEY key, MASK mask);
1433 1357
1434 virtual BOOL handleAcceleratorKey(KEY key, MASK mask); 1358 virtual BOOL handleAcceleratorKey(KEY key, MASK mask);
1435}; 1359};
@@ -1566,7 +1490,7 @@ BOOL LLMenuItemBranchDownGL::handleAcceleratorKey(KEY key, MASK mask)
1566 return handled; 1490 return handled;
1567} 1491}
1568 1492
1569BOOL LLMenuItemBranchDownGL::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent) 1493BOOL LLMenuItemBranchDownGL::handleKeyHere(KEY key, MASK mask)
1570{ 1494{
1571 BOOL menu_open = getBranch()->getVisible(); 1495 BOOL menu_open = getBranch()->getVisible();
1572 // don't do keyboard navigation of top-level menus unless in keyboard mode, or menu expanded 1496 // don't do keyboard navigation of top-level menus unless in keyboard mode, or menu expanded
@@ -1605,7 +1529,7 @@ BOOL LLMenuItemBranchDownGL::handleKeyHere(KEY key, MASK mask, BOOL called_from_
1605 // switch to keyboard navigation mode 1529 // switch to keyboard navigation mode
1606 LLMenuGL::setKeyboardMode(TRUE); 1530 LLMenuGL::setKeyboardMode(TRUE);
1607 1531
1608 if (getEnabled() && !isActive()) 1532 if (!isActive())
1609 { 1533 {
1610 doIt(); 1534 doIt();
1611 } 1535 }
@@ -1617,7 +1541,7 @@ BOOL LLMenuItemBranchDownGL::handleKeyHere(KEY key, MASK mask, BOOL called_from_
1617 // switch to keyboard navigation mode 1541 // switch to keyboard navigation mode
1618 LLMenuGL::setKeyboardMode(TRUE); 1542 LLMenuGL::setKeyboardMode(TRUE);
1619 1543
1620 if (getEnabled() && !isActive()) 1544 if (!isActive())
1621 { 1545 {
1622 doIt(); 1546 doIt();
1623 } 1547 }
@@ -1690,6 +1614,8 @@ void LLMenuItemBranchDownGL::draw( void )
1690/// Class LLMenuGL 1614/// Class LLMenuGL
1691///============================================================================ 1615///============================================================================
1692 1616
1617static LLRegisterWidget<LLMenuGL> r1("menu");
1618
1693// Default constructor 1619// Default constructor
1694LLMenuGL::LLMenuGL( const LLString& name, const LLString& label, LLHandle<LLFloater> parent_floater_handle ) 1620LLMenuGL::LLMenuGL( const LLString& name, const LLString& label, LLHandle<LLFloater> parent_floater_handle )
1695: LLUICtrl( name, LLRect(), FALSE, NULL, NULL ), 1621: LLUICtrl( name, LLRect(), FALSE, NULL, NULL ),
@@ -1946,7 +1872,7 @@ void LLMenuGL::parseChildXML(LLXMLNodePtr child, LLView *parent, LLUICtrlFactory
1946 { 1872 {
1947 continue; 1873 continue;
1948 } 1874 }
1949 LLControlBase *control = parent->findControl(control_name); 1875 LLControlVariable *control = parent->findControl(control_name);
1950 if (!control) 1876 if (!control)
1951 { 1877 {
1952 parent->addBoolControl(control_name, FALSE); 1878 parent->addBoolControl(control_name, FALSE);
@@ -2685,8 +2611,8 @@ LLMenuItemGL* LLMenuGL::highlightNextItem(LLMenuItemGL* cur_item, BOOL skip_disa
2685 2611
2686 while(1) 2612 while(1)
2687 { 2613 {
2688 // skip separators and disabled items 2614 // skip separators and disabled/invisible items
2689 if ((*next_item_iter)->getEnabled() && (*next_item_iter)->getType() != SEPARATOR_NAME) 2615 if ((*next_item_iter)->getEnabled() && (*next_item_iter)->getVisible() && (*next_item_iter)->getType() != SEPARATOR_NAME)
2690 { 2616 {
2691 if (cur_item) 2617 if (cur_item)
2692 { 2618 {
@@ -2751,8 +2677,8 @@ LLMenuItemGL* LLMenuGL::highlightPrevItem(LLMenuItemGL* cur_item, BOOL skip_disa
2751 2677
2752 while(1) 2678 while(1)
2753 { 2679 {
2754 // skip separators and disabled items 2680 // skip separators and disabled/invisible items
2755 if ((*prev_item_iter)->getEnabled() && (*prev_item_iter)->getName() != SEPARATOR_NAME) 2681 if ((*prev_item_iter)->getEnabled() && (*prev_item_iter)->getVisible() && (*prev_item_iter)->getName() != SEPARATOR_NAME)
2756 { 2682 {
2757 (*prev_item_iter)->setHighlight(TRUE); 2683 (*prev_item_iter)->setHighlight(TRUE);
2758 return (*prev_item_iter); 2684 return (*prev_item_iter);
@@ -2801,37 +2727,6 @@ void LLMenuGL::updateParent(LLView* parentp)
2801 } 2727 }
2802} 2728}
2803 2729
2804// LLView functionality
2805BOOL LLMenuGL::handleKey( KEY key, MASK mask, BOOL called_from_parent )
2806{
2807 BOOL handled = FALSE;
2808
2809 // Pass down even if not visible
2810 if( getEnabled() && called_from_parent )
2811 {
2812 for ( child_list_const_iter_t child_it = getChildList()->begin(); child_it != getChildList()->end(); ++child_it)
2813 {
2814 LLView* viewp = *child_it;
2815 if (viewp->handleKey(key, mask, TRUE))
2816 {
2817 handled = TRUE;
2818 break;
2819 }
2820 }
2821 }
2822
2823 if( !handled )
2824 {
2825 handled = handleKeyHere( key, mask, called_from_parent );
2826 if (handled && LLView::sDebugKeys)
2827 {
2828 llinfos << "Key handled by " << getName() << llendl;
2829 }
2830 }
2831
2832 return handled;
2833}
2834
2835BOOL LLMenuGL::handleAcceleratorKey(KEY key, MASK mask) 2730BOOL LLMenuGL::handleAcceleratorKey(KEY key, MASK mask)
2836{ 2731{
2837 // don't handle if not enabled 2732 // don't handle if not enabled
@@ -2854,7 +2749,7 @@ BOOL LLMenuGL::handleAcceleratorKey(KEY key, MASK mask)
2854 return FALSE; 2749 return FALSE;
2855} 2750}
2856 2751
2857BOOL LLMenuGL::handleUnicodeCharHere( llwchar uni_char, BOOL called_from_parent ) 2752BOOL LLMenuGL::handleUnicodeCharHere( llwchar uni_char )
2858{ 2753{
2859 if (jumpKeysActive()) 2754 if (jumpKeysActive())
2860 { 2755 {
@@ -2980,17 +2875,19 @@ void LLMenuGL::setVisible(BOOL visible)
2980 2875
2981LLMenuGL* LLMenuGL::getChildMenuByName(const LLString& name, BOOL recurse) const 2876LLMenuGL* LLMenuGL::getChildMenuByName(const LLString& name, BOOL recurse) const
2982{ 2877{
2983 LLView* view = getChildByName(name, recurse); 2878 LLView* view = getChildView(name, recurse, FALSE);
2984 if (view) 2879 if (view)
2985 { 2880 {
2986 if (view->getWidgetType() == WIDGET_TYPE_MENU_ITEM_BRANCH) 2881 LLMenuItemBranchGL* branch = dynamic_cast<LLMenuItemBranchGL*>(view);
2882 if (branch)
2987 { 2883 {
2988 LLMenuItemBranchGL *branch = (LLMenuItemBranchGL *)view;
2989 return branch->getBranch(); 2884 return branch->getBranch();
2990 } 2885 }
2991 if (view->getWidgetType() == WIDGET_TYPE_MENU || view->getWidgetType() == WIDGET_TYPE_PIE_MENU) 2886
2887 LLMenuGL* menup = dynamic_cast<LLMenuGL*>(view);
2888 if (menup)
2992 { 2889 {
2993 return (LLMenuGL*)view; 2890 return menup;
2994 } 2891 }
2995 } 2892 }
2996 llwarns << "Child Menu " << name << " not found in menu " << getName() << llendl; 2893 llwarns << "Child Menu " << name << " not found in menu " << getName() << llendl;
@@ -3070,9 +2967,6 @@ class LLPieMenuBranch : public LLMenuItemGL
3070public: 2967public:
3071 LLPieMenuBranch(const LLString& name, const LLString& label, LLPieMenu* branch); 2968 LLPieMenuBranch(const LLString& name, const LLString& label, LLPieMenu* branch);
3072 2969
3073 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_PIE_MENU_BRANCH; }
3074 virtual LLString getWidgetTag() const { return LL_PIE_MENU_BRANCH_TAG; }
3075
3076 // called to rebuild the draw label 2970 // called to rebuild the draw label
3077 virtual void buildDrawLabel( void ); 2971 virtual void buildDrawLabel( void );
3078 2972
@@ -3842,6 +3736,8 @@ void LLPieMenu::hide(BOOL item_selected)
3842/// Class LLMenuBarGL 3736/// Class LLMenuBarGL
3843///============================================================================ 3737///============================================================================
3844 3738
3739static LLRegisterWidget<LLMenuBarGL> r2("menu_bar");
3740
3845// Default constructor 3741// Default constructor
3846LLMenuBarGL::LLMenuBarGL( const LLString& name ) : LLMenuGL ( name, name ) 3742LLMenuBarGL::LLMenuBarGL( const LLString& name ) : LLMenuGL ( name, name )
3847{ 3743{
@@ -3897,9 +3793,10 @@ LLView* LLMenuBarGL::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory
3897 LLMenuBarGL *menubar = new LLMenuBarGL(name); 3793 LLMenuBarGL *menubar = new LLMenuBarGL(name);
3898 3794
3899 LLHandle<LLFloater> parent_handle; 3795 LLHandle<LLFloater> parent_handle;
3900 if (parent->getWidgetType() == WIDGET_TYPE_FLOATER) 3796 LLFloater* parent_floater = dynamic_cast<LLFloater*>(parent);
3797 if (parent_floater)
3901 { 3798 {
3902 parent_handle = ((LLFloater*)parent)->getHandle(); 3799 parent_handle = parent_floater->getHandle();
3903 } 3800 }
3904 3801
3905 // We need to have the rect early so that it's around when building 3802 // We need to have the rect early so that it's around when building
@@ -3991,7 +3888,7 @@ BOOL LLMenuBarGL::handleAcceleratorKey(KEY key, MASK mask)
3991 return result; 3888 return result;
3992} 3889}
3993 3890
3994BOOL LLMenuBarGL::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent) 3891BOOL LLMenuBarGL::handleKeyHere(KEY key, MASK mask)
3995{ 3892{
3996 if(key == KEY_ALT && !gKeyboard->getKeyRepeated(key) && LLUI::sConfigGroup->getBOOL("UseAltKeyForMenus")) 3893 if(key == KEY_ALT && !gKeyboard->getKeyRepeated(key) && LLUI::sConfigGroup->getBOOL("UseAltKeyForMenus"))
3997 { 3894 {
@@ -4005,7 +3902,7 @@ BOOL LLMenuBarGL::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent)
4005 // before processing any other key, check to see if ALT key has triggered menu access 3902 // before processing any other key, check to see if ALT key has triggered menu access
4006 checkMenuTrigger(); 3903 checkMenuTrigger();
4007 3904
4008 return LLMenuGL::handleKeyHere(key, mask, called_from_parent); 3905 return LLMenuGL::handleKeyHere(key, mask);
4009} 3906}
4010 3907
4011BOOL LLMenuBarGL::handleJumpKey(KEY key) 3908BOOL LLMenuBarGL::handleJumpKey(KEY key)
@@ -4295,7 +4192,7 @@ BOOL LLMenuHolderGL::hasVisibleMenu() const
4295 for ( child_list_const_iter_t child_it = getChildList()->begin(); child_it != getChildList()->end(); ++child_it) 4192 for ( child_list_const_iter_t child_it = getChildList()->begin(); child_it != getChildList()->end(); ++child_it)
4296 { 4193 {
4297 LLView* viewp = *child_it; 4194 LLView* viewp = *child_it;
4298 if (viewp->getVisible() && viewp->getWidgetType() != WIDGET_TYPE_MENU_BAR) 4195 if (viewp->getVisible() && dynamic_cast<LLMenuBarGL*>(viewp) == NULL)
4299 { 4196 {
4300 return TRUE; 4197 return TRUE;
4301 } 4198 }
@@ -4319,7 +4216,7 @@ BOOL LLMenuHolderGL::hideMenus()
4319 { 4216 {
4320 LLView* viewp = *child_it; 4217 LLView* viewp = *child_it;
4321 // clicks off of menu do not hide menu bar 4218 // clicks off of menu do not hide menu bar
4322 if (viewp->getWidgetType() != WIDGET_TYPE_MENU_BAR && viewp->getVisible()) 4219 if (dynamic_cast<LLMenuBarGL*>(viewp) == NULL && viewp->getVisible())
4323 { 4220 {
4324 viewp->setVisible(FALSE); 4221 viewp->setVisible(FALSE);
4325 } 4222 }
@@ -4429,7 +4326,7 @@ BOOL LLTearOffMenu::handleUnicodeChar(llwchar uni_char, BOOL called_from_parent)
4429 return mMenu->handleUnicodeChar(uni_char, TRUE); 4326 return mMenu->handleUnicodeChar(uni_char, TRUE);
4430} 4327}
4431 4328
4432BOOL LLTearOffMenu::handleKey(KEY key, MASK mask, BOOL called_from_parent) 4329BOOL LLTearOffMenu::handleKeyHere(KEY key, MASK mask)
4433{ 4330{
4434 if (!mMenu->getHighlightedItem()) 4331 if (!mMenu->getHighlightedItem())
4435 { 4332 {
diff --git a/linden/indra/llui/llmenugl.h b/linden/indra/llui/llmenugl.h
index cd39006..e7b009a 100644
--- a/linden/indra/llui/llmenugl.h
+++ b/linden/indra/llui/llmenugl.h
@@ -91,14 +91,11 @@ public:
91 LLMenuItemGL( const LLString& name, const LLString& label, KEY key = KEY_NONE, MASK = MASK_NONE ); 91 LLMenuItemGL( const LLString& name, const LLString& label, KEY key = KEY_NONE, MASK = MASK_NONE );
92 92
93 virtual void setValue(const LLSD& value) { setLabel(value.asString()); } 93 virtual void setValue(const LLSD& value) { setLabel(value.asString()); }
94 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_MENU_ITEM; }
95 virtual LLString getWidgetTag() const { return LL_MENU_ITEM_TAG; }
96 94
97 virtual LLXMLNodePtr getXML(bool save_children = true) const; 95 virtual LLXMLNodePtr getXML(bool save_children = true) const;
98 96
99 virtual LLString getType() const { return "item"; } 97 virtual LLString getType() const { return "item"; }
100 98
101 virtual BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent);
102 virtual BOOL handleHover(S32 x, S32 y, MASK mask); 99 virtual BOOL handleHover(S32 x, S32 y, MASK mask);
103 100
104 virtual BOOL handleAcceleratorKey(KEY key, MASK mask); 101 virtual BOOL handleAcceleratorKey(KEY key, MASK mask);
@@ -165,7 +162,7 @@ public:
165 virtual void setEnabledSubMenus(BOOL enable){}; 162 virtual void setEnabledSubMenus(BOOL enable){};
166 163
167 // LLView Functionality 164 // LLView Functionality
168 virtual BOOL handleKeyHere( KEY key, MASK mask, BOOL called_from_parent ); 165 virtual BOOL handleKeyHere( KEY key, MASK mask );
169 virtual BOOL handleMouseDown( S32 x, S32 y, MASK mask ); 166 virtual BOOL handleMouseDown( S32 x, S32 y, MASK mask );
170 virtual BOOL handleMouseUp( S32 x, S32 y, MASK mask ); 167 virtual BOOL handleMouseUp( S32 x, S32 y, MASK mask );
171 virtual void draw( void ); 168 virtual void draw( void );
@@ -225,7 +222,7 @@ private:
225// calls a user defined callback. 222// calls a user defined callback.
226//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 223//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
227 224
228class LLMenuItemCallGL : public LLMenuItemGL 225class LLMenuItemCallGL : public LLMenuItemGL, public LLObservable
229{ 226{
230public: 227public:
231 // normal constructor 228 // normal constructor
@@ -267,8 +264,6 @@ public:
267 264
268 virtual LLString getType() const { return "call"; } 265 virtual LLString getType() const { return "call"; }
269 266
270 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_MENU_ITEM_CALL; }
271 virtual LLString getWidgetTag() const { return LL_MENU_ITEM_CALL_GL_TAG; }
272 267
273 void setEnabledControl(LLString enabled_control, LLView *context); 268 void setEnabledControl(LLString enabled_control, LLView *context);
274 void setVisibleControl(LLString enabled_control, LLView *context); 269 void setVisibleControl(LLString enabled_control, LLView *context);
@@ -291,7 +286,6 @@ public:
291 286
292 //virtual void draw(); 287 //virtual void draw();
293 288
294 virtual bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata);
295 289
296private: 290private:
297 menu_callback mCallback; 291 menu_callback mCallback;
@@ -341,17 +335,13 @@ public:
341 335
342 void setCheckedControl(LLString checked_control, LLView *context); 336 void setCheckedControl(LLString checked_control, LLView *context);
343 337
344 virtual void setValue(const LLSD& value) { mChecked = value.asBoolean(); } 338 virtual void setValue(const LLSD& value);
345 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_MENU_ITEM_CHECK; }
346 virtual LLString getWidgetTag() const { return LL_MENU_ITEM_CHECK_GL_TAG; }
347 339
348 virtual LLString getType() const { return "check"; } 340 virtual LLString getType() const { return "check"; }
349 341
350 // called to rebuild the draw label 342 // called to rebuild the draw label
351 virtual void buildDrawLabel( void ); 343 virtual void buildDrawLabel( void );
352 344
353 virtual bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata);
354
355private: 345private:
356 check_callback mCheckCallback; 346 check_callback mCheckCallback;
357 BOOL mChecked; 347 BOOL mChecked;
@@ -408,6 +398,8 @@ class LLMenuGL
408// TODO: The menu and menu item classes share a great deal of functionality and perhaps should be united. 398// TODO: The menu and menu item classes share a great deal of functionality and perhaps should be united.
409// I think it may make the most sense to make LLMenuGL be a subclass of LLMenuItemGL. -MG 399// I think it may make the most sense to make LLMenuGL be a subclass of LLMenuItemGL. -MG
410{ 400{
401 // let branching menu items use my protected traversal methods
402 friend class LLMenuItemBranchGL;
411public: 403public:
412 LLMenuGL( const LLString& name, const LLString& label, LLHandle<LLFloater> parent_floater = LLHandle<LLFloater>()); 404 LLMenuGL( const LLString& name, const LLString& label, LLHandle<LLFloater> parent_floater = LLHandle<LLFloater>());
413 LLMenuGL( const LLString& label, LLHandle<LLFloater> parent_floater = LLHandle<LLFloater>() ); 405 LLMenuGL( const LLString& label, LLHandle<LLFloater> parent_floater = LLHandle<LLFloater>() );
@@ -417,13 +409,9 @@ public:
417 409
418 void parseChildXML(LLXMLNodePtr child, LLView *parent, LLUICtrlFactory *factory); 410 void parseChildXML(LLXMLNodePtr child, LLView *parent, LLUICtrlFactory *factory);
419 411
420 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_MENU; }
421 virtual LLString getWidgetTag() const { return LL_MENU_GL_TAG; }
422 412
423 // LLView Functionality 413 // LLView Functionality
424 virtual BOOL handleKey( KEY key, MASK mask, BOOL called_from_parent ); 414 virtual BOOL handleUnicodeCharHere( llwchar uni_char );
425 //virtual BOOL handleKeyHere( KEY key, MASK mask, BOOL called_from_parent );
426 virtual BOOL handleUnicodeCharHere( llwchar uni_char, BOOL called_from_parent );
427 virtual BOOL handleHover( S32 x, S32 y, MASK mask ); 415 virtual BOOL handleHover( S32 x, S32 y, MASK mask );
428 virtual void draw( void ); 416 virtual void draw( void );
429 virtual void drawBackground(LLMenuItemGL* itemp, LLColor4& color); 417 virtual void drawBackground(LLMenuItemGL* itemp, LLColor4& color);
@@ -579,9 +567,6 @@ public:
579 567
580 virtual LLString getType() const { return "menu"; } 568 virtual LLString getType() const { return "menu"; }
581 569
582 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_MENU_ITEM_BRANCH; }
583 virtual LLString getWidgetTag() const { return LL_MENU_ITEM_BRANCH_GL_TAG; }
584
585 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); 570 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
586 571
587 virtual BOOL handleAcceleratorKey(KEY key, MASK mask); 572 virtual BOOL handleAcceleratorKey(KEY key, MASK mask);
@@ -602,7 +587,7 @@ public:
602 // active. This is used for behavior transfer. 587 // active. This is used for behavior transfer.
603 virtual void setHighlight( BOOL highlight ); 588 virtual void setHighlight( BOOL highlight );
604 589
605 virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); 590 virtual BOOL handleKeyHere(KEY key, MASK mask);
606 591
607 virtual BOOL isActive() const { return isOpen() && mBranch->getHighlightedItem(); } 592 virtual BOOL isActive() const { return isOpen() && mBranch->getHighlightedItem(); }
608 593
@@ -621,8 +606,7 @@ public:
621 606
622 virtual void openMenu(); 607 virtual void openMenu();
623 608
624protected: 609 virtual LLView* getChildView(const LLString& name, BOOL recurse = TRUE, BOOL create_if_missing = TRUE) const;
625 virtual LLView* getChildByName(const LLString& name, BOOL recurse) const;
626 610
627private: 611private:
628 LLMenuGL* mBranch; 612 LLMenuGL* mBranch;
@@ -643,16 +627,12 @@ public:
643 LLPieMenu(const LLString& name); 627 LLPieMenu(const LLString& name);
644 virtual ~LLPieMenu() {} 628 virtual ~LLPieMenu() {}
645 629
646 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_PIE_MENU; }
647 virtual LLString getWidgetTag() const { return LL_PIE_MENU_TAG; }
648
649 void initXML(LLXMLNodePtr node, LLView *context, LLUICtrlFactory *factory); 630 void initXML(LLXMLNodePtr node, LLView *context, LLUICtrlFactory *factory);
650 631
651 // LLView Functionality 632 // LLView Functionality
652 // can't set visibility directly, must call show or hide 633 // can't set visibility directly, must call show or hide
653 virtual void setVisible(BOOL visible); 634 virtual void setVisible(BOOL visible);
654 635
655 //virtual BOOL handleKey( KEY key, MASK mask, BOOL called_from_parent );
656 virtual BOOL handleHover( S32 x, S32 y, MASK mask ); 636 virtual BOOL handleHover( S32 x, S32 y, MASK mask );
657 virtual BOOL handleMouseDown( S32 x, S32 y, MASK mask ); 637 virtual BOOL handleMouseDown( S32 x, S32 y, MASK mask );
658 virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); 638 virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
@@ -672,7 +652,6 @@ public:
672 void show(S32 x, S32 y, BOOL mouse_down); 652 void show(S32 x, S32 y, BOOL mouse_down);
673 void hide(BOOL item_selected); 653 void hide(BOOL item_selected);
674 654
675
676private: 655private:
677 LLMenuItemGL *pieItemFromXY(S32 x, S32 y); 656 LLMenuItemGL *pieItemFromXY(S32 x, S32 y);
678 S32 pieItemIndexFromXY(S32 x, S32 y); 657 S32 pieItemIndexFromXY(S32 x, S32 y);
@@ -708,11 +687,8 @@ public:
708 virtual LLXMLNodePtr getXML(bool save_children = true) const; 687 virtual LLXMLNodePtr getXML(bool save_children = true) const;
709 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); 688 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
710 689
711 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_MENU_BAR; }
712 virtual LLString getWidgetTag() const { return LL_MENU_BAR_GL_TAG; }
713
714 virtual BOOL handleAcceleratorKey(KEY key, MASK mask); 690 virtual BOOL handleAcceleratorKey(KEY key, MASK mask);
715 virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); 691 virtual BOOL handleKeyHere(KEY key, MASK mask);
716 virtual BOOL handleJumpKey(KEY key); 692 virtual BOOL handleJumpKey(KEY key);
717 693
718 // rearrange the child rects so they fit the shape of the menu 694 // rearrange the child rects so they fit the shape of the menu
@@ -754,9 +730,6 @@ public:
754 LLMenuHolderGL(const LLString& name, const LLRect& rect, BOOL mouse_opaque, U32 follows = FOLLOWS_NONE); 730 LLMenuHolderGL(const LLString& name, const LLRect& rect, BOOL mouse_opaque, U32 follows = FOLLOWS_NONE);
755 virtual ~LLMenuHolderGL() {} 731 virtual ~LLMenuHolderGL() {}
756 732
757 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_MENU_HOLDER; }
758 virtual LLString getWidgetTag() const { return LL_MENU_HOLDER_GL_TAG; }
759
760 virtual BOOL hideMenus(); 733 virtual BOOL hideMenus();
761 void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE); 734 void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
762 void setCanHide(BOOL can_hide) { mCanHide = can_hide; } 735 void setCanHide(BOOL can_hide) { mCanHide = can_hide; }
@@ -794,7 +767,7 @@ public:
794 virtual void onFocusReceived(); 767 virtual void onFocusReceived();
795 virtual void onFocusLost(); 768 virtual void onFocusLost();
796 virtual BOOL handleUnicodeChar(llwchar uni_char, BOOL called_from_parent); 769 virtual BOOL handleUnicodeChar(llwchar uni_char, BOOL called_from_parent);
797 virtual BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent); 770 virtual BOOL handleKeyHere(KEY key, MASK mask);
798 virtual void translate(S32 x, S32 y); 771 virtual void translate(S32 x, S32 y);
799 772
800private: 773private:
@@ -816,9 +789,6 @@ class LLMenuItemTearOffGL : public LLMenuItemGL
816public: 789public:
817 LLMenuItemTearOffGL( LLHandle<LLFloater> parent_floater_handle = LLHandle<LLFloater>()); 790 LLMenuItemTearOffGL( LLHandle<LLFloater> parent_floater_handle = LLHandle<LLFloater>());
818 791
819 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_TEAROFF_MENU; }
820 virtual LLString getWidgetTag() const { return LL_MENU_ITEM_TEAR_OFF_GL_TAG; }
821
822 virtual LLString getType() const { return "tearoff_menu"; } 792 virtual LLString getType() const { return "tearoff_menu"; }
823 793
824 virtual void doIt(void); 794 virtual void doIt(void);
diff --git a/linden/indra/llui/llmodaldialog.cpp b/linden/indra/llui/llmodaldialog.cpp
index 392c122..160495d 100644
--- a/linden/indra/llui/llmodaldialog.cpp
+++ b/linden/indra/llui/llmodaldialog.cpp
@@ -211,11 +211,9 @@ BOOL LLModalDialog::handleRightMouseDown(S32 x, S32 y, MASK mask)
211} 211}
212 212
213 213
214BOOL LLModalDialog::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent ) 214BOOL LLModalDialog::handleKeyHere(KEY key, MASK mask )
215{ 215{
216 childrenHandleKey(key, mask); 216 LLFloater::handleKeyHere(key, mask );
217
218 LLFloater::handleKeyHere(key, mask, called_from_parent );
219 217
220 if (mModal) 218 if (mModal)
221 { 219 {
@@ -246,33 +244,30 @@ void LLModalDialog::onClose(bool app_quitting)
246// virtual 244// virtual
247void LLModalDialog::draw() 245void LLModalDialog::draw()
248{ 246{
249 if (getVisible()) 247 LLColor4 shadow_color = LLUI::sColorsGroup->getColor("ColorDropShadow");
250 { 248 S32 shadow_lines = LLUI::sConfigGroup->getS32("DropShadowFloater");
251 LLColor4 shadow_color = LLUI::sColorsGroup->getColor("ColorDropShadow"); 249
252 S32 shadow_lines = LLUI::sConfigGroup->getS32("DropShadowFloater"); 250 gl_drop_shadow( 0, getRect().getHeight(), getRect().getWidth(), 0,
251 shadow_color, shadow_lines);
253 252
254 gl_drop_shadow( 0, getRect().getHeight(), getRect().getWidth(), 0, 253 LLFloater::draw();
255 shadow_color, shadow_lines); 254
255 if (mModal)
256 {
257 // If we've lost focus to a non-child, get it back ASAP.
258 if( gFocusMgr.getTopCtrl() != this )
259 {
260 gFocusMgr.setTopCtrl( this );
261 }
256 262
257 LLFloater::draw(); 263 if( !gFocusMgr.childHasKeyboardFocus( this ) )
264 {
265 setFocus(TRUE);
266 }
258 267
259 if (mModal) 268 if( !gFocusMgr.childHasMouseCapture( this ) )
260 { 269 {
261 // If we've lost focus to a non-child, get it back ASAP. 270 gFocusMgr.setMouseCapture( this );
262 if( gFocusMgr.getTopCtrl() != this )
263 {
264 gFocusMgr.setTopCtrl( this );
265 }
266
267 if( !gFocusMgr.childHasKeyboardFocus( this ) )
268 {
269 setFocus(TRUE);
270 }
271
272 if( !gFocusMgr.childHasMouseCapture( this ) )
273 {
274 gFocusMgr.setMouseCapture( this );
275 }
276 } 271 }
277 } 272 }
278} 273}
diff --git a/linden/indra/llui/llmodaldialog.h b/linden/indra/llui/llmodaldialog.h
index 0199498..77bd9db 100644
--- a/linden/indra/llui/llmodaldialog.h
+++ b/linden/indra/llui/llmodaldialog.h
@@ -60,7 +60,7 @@ public:
60 /*virtual*/ BOOL handleScrollWheel(S32 x, S32 y, S32 clicks); 60 /*virtual*/ BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
61 /*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask); 61 /*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
62 /*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); 62 /*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
63 /*virtual*/ BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent ); 63 /*virtual*/ BOOL handleKeyHere(KEY key, MASK mask );
64 64
65 /*virtual*/ void onClose(bool app_quitting); 65 /*virtual*/ void onClose(bool app_quitting);
66 66
diff --git a/linden/indra/llui/llmultislider.cpp b/linden/indra/llui/llmultislider.cpp
index d0c9002..dfa36fa 100644
--- a/linden/indra/llui/llmultislider.cpp
+++ b/linden/indra/llui/llmultislider.cpp
@@ -43,6 +43,8 @@
43 43
44#include <sstream> 44#include <sstream>
45 45
46static LLRegisterWidget<LLMultiSlider> r("multi_slider_bar");
47
46const S32 MULTI_THUMB_WIDTH = 8; 48const S32 MULTI_THUMB_WIDTH = 8;
47const S32 MULTI_TRACK_HEIGHT = 6; 49const S32 MULTI_TRACK_HEIGHT = 6;
48const F32 FLOAT_THRESHOLD = 0.00001f; 50const F32 FLOAT_THRESHOLD = 0.00001f;
@@ -98,16 +100,6 @@ LLMultiSlider::LLMultiSlider(
98 setValue(getValue()); 100 setValue(getValue());
99} 101}
100 102
101EWidgetType LLMultiSlider::getWidgetType() const
102{
103 return WIDGET_TYPE_MULTI_SLIDER_BAR;
104}
105
106LLString LLMultiSlider::getWidgetTag() const
107{
108 return LL_MULTI_SLIDER_TAG;
109}
110
111void LLMultiSlider::setSliderValue(const LLString& name, F32 value, BOOL from_event) 103void LLMultiSlider::setSliderValue(const LLString& name, F32 value, BOOL from_event)
112{ 104{
113 // exit if not there 105 // exit if not there
@@ -403,31 +395,28 @@ BOOL LLMultiSlider::handleMouseDown(S32 x, S32 y, MASK mask)
403 return TRUE; 395 return TRUE;
404} 396}
405 397
406BOOL LLMultiSlider::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent) 398BOOL LLMultiSlider::handleKeyHere(KEY key, MASK mask)
407{ 399{
408 BOOL handled = FALSE; 400 BOOL handled = FALSE;
409 if( getVisible() && getEnabled() && !called_from_parent ) 401 switch(key)
410 { 402 {
411 switch(key) 403 case KEY_UP:
412 { 404 case KEY_DOWN:
413 case KEY_UP: 405 // eat up and down keys to be consistent
414 case KEY_DOWN: 406 handled = TRUE;
415 // eat up and down keys to be consistent 407 break;
416 handled = TRUE; 408 case KEY_LEFT:
417 break; 409 setCurSliderValue(getCurSliderValue() - getIncrement());
418 case KEY_LEFT: 410 onCommit();
419 setCurSliderValue(getCurSliderValue() - getIncrement()); 411 handled = TRUE;
420 onCommit(); 412 break;
421 handled = TRUE; 413 case KEY_RIGHT:
422 break; 414 setCurSliderValue(getCurSliderValue() + getIncrement());
423 case KEY_RIGHT: 415 onCommit();
424 setCurSliderValue(getCurSliderValue() + getIncrement()); 416 handled = TRUE;
425 onCommit(); 417 break;
426 handled = TRUE; 418 default:
427 break; 419 break;
428 default:
429 break;
430 }
431 } 420 }
432 return handled; 421 return handled;
433} 422}
@@ -438,177 +427,142 @@ void LLMultiSlider::draw()
438 427
439 std::map<LLString, LLRect>::iterator mIt; 428 std::map<LLString, LLRect>::iterator mIt;
440 std::map<LLString, LLRect>::iterator curSldrIt; 429 std::map<LLString, LLRect>::iterator curSldrIt;
441 if( getVisible() )
442 {
443 // Draw background and thumb.
444 430
445 // drawing solids requires texturing be disabled 431 // Draw background and thumb.
446 LLGLSNoTexture no_texture;
447 432
448 LLRect rect(mDragStartThumbRect); 433 // drawing solids requires texturing be disabled
434 LLGLSNoTexture no_texture;
449 435
450 F32 opacity = getEnabled() ? 1.f : 0.3f; 436 LLRect rect(mDragStartThumbRect);
451 437
452 // Track 438 F32 opacity = getEnabled() ? 1.f : 0.3f;
453 LLUUID thumb_image_id;
454 thumb_image_id.set(LLUI::sAssetsGroup->getString("rounded_square.tga"));
455 LLPointer<LLImageGL> thumb_imagep(LLUI::sImageProvider->getUIImageByID(thumb_image_id)->getImage());
456 439
457 S32 height_offset = (getRect().getHeight() - MULTI_TRACK_HEIGHT) / 2; 440 // Track
458 LLRect track_rect(0, getRect().getHeight() - height_offset, getRect().getWidth(), height_offset ); 441 LLUIImagePtr thumb_imagep = LLUI::sImageProvider->getUIImage("rounded_square.tga");
459 442
443 S32 height_offset = (getRect().getHeight() - MULTI_TRACK_HEIGHT) / 2;
444 LLRect track_rect(0, getRect().getHeight() - height_offset, getRect().getWidth(), height_offset );
460 445
461 if(mDrawTrack)
462 {
463 track_rect.stretch(-1);
464 gl_draw_scaled_image_with_border(track_rect.mLeft, track_rect.mBottom, 16, 16, track_rect.getWidth(), track_rect.getHeight(),
465 thumb_imagep, mTrackColor % opacity);
466 }
467 446
468 // if we're supposed to use a drawn triangle 447 if(mDrawTrack)
469 // simple gl call for the triangle 448 {
470 if(mUseTriangle) { 449 track_rect.stretch(-1);
450 thumb_imagep->draw(track_rect, mTrackColor % opacity);
451 }
471 452
472 for(mIt = mThumbRects.begin(); mIt != mThumbRects.end(); mIt++) { 453 // if we're supposed to use a drawn triangle
454 // simple gl call for the triangle
455 if(mUseTriangle) {
473 456
474 gl_triangle_2d( 457 for(mIt = mThumbRects.begin(); mIt != mThumbRects.end(); mIt++) {
475 mIt->second.mLeft - EXTRA_TRIANGLE_WIDTH, 458
476 mIt->second.mTop + EXTRA_TRIANGLE_HEIGHT, 459 gl_triangle_2d(
477 mIt->second.mRight + EXTRA_TRIANGLE_WIDTH, 460 mIt->second.mLeft - EXTRA_TRIANGLE_WIDTH,
478 mIt->second.mTop + EXTRA_TRIANGLE_HEIGHT, 461 mIt->second.mTop + EXTRA_TRIANGLE_HEIGHT,
479 mIt->second.mLeft + mIt->second.getWidth() / 2, 462 mIt->second.mRight + EXTRA_TRIANGLE_WIDTH,
480 mIt->second.mBottom - EXTRA_TRIANGLE_HEIGHT, 463 mIt->second.mTop + EXTRA_TRIANGLE_HEIGHT,
481 mTriangleColor, TRUE); 464 mIt->second.mLeft + mIt->second.getWidth() / 2,
482 } 465 mIt->second.mBottom - EXTRA_TRIANGLE_HEIGHT,
466 mTriangleColor, TRUE);
483 } 467 }
484 else if (!thumb_imagep) 468 }
485 { 469 else if (!thumb_imagep)
486 // draw all the thumbs 470 {
487 curSldrIt = mThumbRects.end(); 471 // draw all the thumbs
488 for(mIt = mThumbRects.begin(); mIt != mThumbRects.end(); mIt++) { 472 curSldrIt = mThumbRects.end();
473 for(mIt = mThumbRects.begin(); mIt != mThumbRects.end(); mIt++) {
474
475 // choose the color
476 curThumbColor = mThumbCenterColor;
477 if(mIt->first == mCurSlider) {
489 478
490 // choose the color 479 curSldrIt = mIt;
491 curThumbColor = mThumbCenterColor; 480 continue;
492 if(mIt->first == mCurSlider) { 481 //curThumbColor = mThumbCenterSelectedColor;
493
494 curSldrIt = mIt;
495 continue;
496 //curThumbColor = mThumbCenterSelectedColor;
497 }
498
499 // the draw command
500 gl_rect_2d(mIt->second, curThumbColor, TRUE);
501 } 482 }
502 483
503 // now draw the current slider 484 // the draw command
504 if(curSldrIt != mThumbRects.end()) { 485 gl_rect_2d(mIt->second, curThumbColor, TRUE);
505 gl_rect_2d(curSldrIt->second, mThumbCenterSelectedColor, TRUE); 486 }
506 }
507 487
508 // and draw the drag start 488 // now draw the current slider
509 if (gFocusMgr.getMouseCapture() == this) 489 if(curSldrIt != mThumbRects.end()) {
510 { 490 gl_rect_2d(curSldrIt->second, mThumbCenterSelectedColor, TRUE);
511 gl_rect_2d(mDragStartThumbRect, mThumbCenterColor % opacity, FALSE);
512 }
513 } 491 }
514 else if( gFocusMgr.getMouseCapture() == this ) 492
493 // and draw the drag start
494 if (gFocusMgr.getMouseCapture() == this)
515 { 495 {
516 // draw drag start 496 gl_rect_2d(mDragStartThumbRect, mThumbCenterColor % opacity, FALSE);
517 gl_draw_scaled_image_with_border(mDragStartThumbRect.mLeft, 497 }
518 mDragStartThumbRect.mBottom, 16, 16, 498 }
519 mDragStartThumbRect.getWidth(), 499 else if( gFocusMgr.getMouseCapture() == this )
520 mDragStartThumbRect.getHeight(), 500 {
521 thumb_imagep, mThumbCenterColor % 0.3f, TRUE); 501 // draw drag start
522 502 thumb_imagep->drawSolid(mDragStartThumbRect, mThumbCenterColor % 0.3f);
523 // draw the highlight 503
524 if (hasFocus()) 504 // draw the highlight
505 if (hasFocus())
506 {
507 thumb_imagep->drawBorder(mThumbRects[mCurSlider], gFocusMgr.getFocusColor(), gFocusMgr.getFocusFlashWidth());
508 }
509
510 // draw the thumbs
511 curSldrIt = mThumbRects.end();
512 for(mIt = mThumbRects.begin(); mIt != mThumbRects.end(); mIt++)
513 {
514 // choose the color
515 curThumbColor = mThumbCenterColor;
516 if(mIt->first == mCurSlider)
525 { 517 {
526 F32 lerp_amt = gFocusMgr.getFocusFlashAmt(); 518 // don't draw now, draw last
527 LLRect highlight_rect = mThumbRects[mCurSlider]; 519 curSldrIt = mIt;
528 highlight_rect.stretch(llround(lerp(1.f, 3.f, lerp_amt))); 520 continue;
529 gl_draw_scaled_image_with_border(highlight_rect.mLeft,
530 highlight_rect.mBottom, 16, 16, highlight_rect.getWidth(),
531 highlight_rect.getHeight(),
532 thumb_imagep, gFocusMgr.getFocusColor());
533 } 521 }
522
523 // the draw command
524 thumb_imagep->drawSolid(mIt->second, curThumbColor);
525 }
526
527 // draw cur slider last
528 if(curSldrIt != mThumbRects.end())
529 {
530 thumb_imagep->drawSolid(curSldrIt->second, mThumbCenterSelectedColor);
531 }
532
533 }
534 else
535 {
536 // draw highlight
537 if (hasFocus())
538 {
539 thumb_imagep->drawBorder(mThumbRects[mCurSlider], gFocusMgr.getFocusColor(), gFocusMgr.getFocusFlashWidth());
540 }
534 541
535 // draw the thumbs 542 // draw thumbs
536 curSldrIt = mThumbRects.end(); 543 curSldrIt = mThumbRects.end();
537 for(mIt = mThumbRects.begin(); mIt != mThumbRects.end(); mIt++) { 544 for(mIt = mThumbRects.begin(); mIt != mThumbRects.end(); mIt++)
538 545 {
539 // choose the color
540 curThumbColor = mThumbCenterColor;
541 if(mIt->first == mCurSlider) {
542 // don't draw now, draw last
543 curSldrIt = mIt;
544 continue;
545 }
546
547 // the draw command
548 gl_draw_scaled_image_with_border(
549 mIt->second.mLeft,
550 mIt->second.mBottom, 16, 16,
551 mIt->second.getWidth(),
552 mIt->second.getHeight(), thumb_imagep,
553 curThumbColor, TRUE);
554 }
555 546
556 // draw cur slider last 547 // choose the color
557 if(curSldrIt != mThumbRects.end()) { 548 curThumbColor = mThumbCenterColor;
558 gl_draw_scaled_image_with_border( 549 if(mIt->first == mCurSlider)
559 curSldrIt->second.mLeft, 550 {
560 curSldrIt->second.mBottom, 16, 16, 551 curSldrIt = mIt;
561 curSldrIt->second.getWidth(), 552 continue;
562 curSldrIt->second.getHeight(), thumb_imagep, 553 //curThumbColor = mThumbCenterSelectedColor;
563 mThumbCenterSelectedColor, TRUE); 554 }
564 }
565 555
556 thumb_imagep->drawSolid(mIt->second, curThumbColor % opacity);
566 } 557 }
567 else
568 {
569 // draw highlight
570 if (hasFocus())
571 {
572 F32 lerp_amt = gFocusMgr.getFocusFlashAmt();
573 LLRect highlight_rect = mThumbRects[mCurSlider];
574 highlight_rect.stretch(llround(lerp(1.f, 3.f, lerp_amt)));
575 gl_draw_scaled_image_with_border(highlight_rect.mLeft, highlight_rect.mBottom, 16, 16, highlight_rect.getWidth(), highlight_rect.getHeight(),
576 thumb_imagep, gFocusMgr.getFocusColor());
577 }
578 558
579 // draw thumbs 559 if(curSldrIt != mThumbRects.end())
580 curSldrIt = mThumbRects.end(); 560 {
581 for(mIt = mThumbRects.begin(); mIt != mThumbRects.end(); mIt++) { 561 thumb_imagep->drawSolid(curSldrIt->second, mThumbCenterSelectedColor % opacity);
582
583 // choose the color
584 curThumbColor = mThumbCenterColor;
585 if(mIt->first == mCurSlider) {
586 curSldrIt = mIt;
587 continue;
588 //curThumbColor = mThumbCenterSelectedColor;
589 }
590
591 // the draw command
592 gl_draw_scaled_image_with_border(
593 mIt->second.mLeft,
594 mIt->second.mBottom, 16, 16,
595 mIt->second.getWidth(),
596 mIt->second.getHeight(), thumb_imagep,
597 curThumbColor % opacity, TRUE);
598 }
599
600 if(curSldrIt != mThumbRects.end()) {
601 gl_draw_scaled_image_with_border(
602 curSldrIt->second.mLeft,
603 curSldrIt->second.mBottom, 16, 16,
604 curSldrIt->second.getWidth(),
605 curSldrIt->second.getHeight(), thumb_imagep,
606 mThumbCenterSelectedColor % opacity, TRUE);
607 }
608 } 562 }
609
610 LLUICtrl::draw();
611 } 563 }
564
565 LLUICtrl::draw();
612} 566}
613 567
614// virtual 568// virtual
diff --git a/linden/indra/llui/llmultislider.h b/linden/indra/llui/llmultislider.h
index 7cd5061..df6153a 100644
--- a/linden/indra/llui/llmultislider.h
+++ b/linden/indra/llui/llmultislider.h
@@ -55,8 +55,6 @@ public:
55 BOOL use_triangle, 55 BOOL use_triangle,
56 const LLString& control_name = LLString::null ); 56 const LLString& control_name = LLString::null );
57 57
58 virtual EWidgetType getWidgetType() const;
59 virtual LLString getWidgetTag() const;
60 virtual LLXMLNodePtr getXML(bool save_children = true) const; 58 virtual LLXMLNodePtr getXML(bool save_children = true) const;
61 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); 59 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
62 60
@@ -94,7 +92,7 @@ public:
94 virtual BOOL handleHover(S32 x, S32 y, MASK mask); 92 virtual BOOL handleHover(S32 x, S32 y, MASK mask);
95 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); 93 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
96 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); 94 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
97 virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); 95 virtual BOOL handleKeyHere(KEY key, MASK mask);
98 virtual void draw(); 96 virtual void draw();
99 97
100protected: 98protected:
diff --git a/linden/indra/llui/llmultisliderctrl.cpp b/linden/indra/llui/llmultisliderctrl.cpp
index 47e21d8..c242d18 100644
--- a/linden/indra/llui/llmultisliderctrl.cpp
+++ b/linden/indra/llui/llmultisliderctrl.cpp
@@ -50,6 +50,8 @@
50#include "llfocusmgr.h" 50#include "llfocusmgr.h"
51#include "llresmgr.h" 51#include "llresmgr.h"
52 52
53static LLRegisterWidget<LLMultiSliderCtrl> r("multi_slider");
54
53const U32 MAX_STRING_LENGTH = 10; 55const U32 MAX_STRING_LENGTH = 10;
54 56
55 57
diff --git a/linden/indra/llui/llmultisliderctrl.h b/linden/indra/llui/llmultisliderctrl.h
index 5e2d13c..6a298c8 100644
--- a/linden/indra/llui/llmultisliderctrl.h
+++ b/linden/indra/llui/llmultisliderctrl.h
@@ -71,8 +71,6 @@ public:
71 const LLString& control_which = LLString::null ); 71 const LLString& control_which = LLString::null );
72 72
73 virtual ~LLMultiSliderCtrl(); 73 virtual ~LLMultiSliderCtrl();
74 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_MULTI_SLIDER; }
75 virtual LLString getWidgetTag() const { return LL_MULTI_SLIDER_CTRL_TAG; }
76 virtual LLXMLNodePtr getXML(bool save_children = true) const; 74 virtual LLXMLNodePtr getXML(bool save_children = true) const;
77 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); 75 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
78 76
diff --git a/linden/indra/llui/llpanel.cpp b/linden/indra/llui/llpanel.cpp
index 567d29e..7db3725 100644
--- a/linden/indra/llui/llpanel.cpp
+++ b/linden/indra/llui/llpanel.cpp
@@ -65,6 +65,8 @@ LLPanel::alert_queue_t LLPanel::sAlertQueue;
65const S32 RESIZE_BAR_OVERLAP = 1; 65const S32 RESIZE_BAR_OVERLAP = 1;
66const S32 RESIZE_BAR_HEIGHT = 3; 66const S32 RESIZE_BAR_HEIGHT = 3;
67 67
68static LLRegisterWidget<LLPanel> r1("panel");
69
68void LLPanel::init() 70void LLPanel::init()
69{ 71{
70 // mRectControl 72 // mRectControl
@@ -126,18 +128,6 @@ LLPanel::~LLPanel()
126} 128}
127 129
128// virtual 130// virtual
129EWidgetType LLPanel::getWidgetType() const
130{
131 return WIDGET_TYPE_PANEL;
132}
133
134// virtual
135LLString LLPanel::getWidgetTag() const
136{
137 return LL_PANEL_TAG;
138}
139
140// virtual
141BOOL LLPanel::isPanel() const 131BOOL LLPanel::isPanel() const
142{ 132{
143 return TRUE; 133 return TRUE;
@@ -227,7 +217,8 @@ void LLPanel::updateDefaultBtn()
227 if (gFocusMgr.childHasKeyboardFocus( this ) && mDefaultBtn->getEnabled()) 217 if (gFocusMgr.childHasKeyboardFocus( this ) && mDefaultBtn->getEnabled())
228 { 218 {
229 LLUICtrl* focus_ctrl = gFocusMgr.getKeyboardFocus(); 219 LLUICtrl* focus_ctrl = gFocusMgr.getKeyboardFocus();
230 BOOL focus_is_child_button = focus_ctrl->getWidgetType() == WIDGET_TYPE_BUTTON && static_cast<LLButton *>(focus_ctrl)->getCommitOnReturn(); 220 LLButton* buttonp = dynamic_cast<LLButton*>(focus_ctrl);
221 BOOL focus_is_child_button = buttonp && buttonp->getCommitOnReturn();
231 // only enable default button when current focus is not a return-capturing button 222 // only enable default button when current focus is not a return-capturing button
232 mDefaultBtn->setBorderEnabled(!focus_is_child_button); 223 mDefaultBtn->setBorderEnabled(!focus_is_child_button);
233 } 224 }
@@ -259,7 +250,7 @@ void LLPanel::setDefaultBtn(LLButton* btn)
259 250
260void LLPanel::setDefaultBtn(const LLString& id) 251void LLPanel::setDefaultBtn(const LLString& id)
261{ 252{
262 LLButton *button = LLUICtrlFactory::getButtonByName(this, id); 253 LLButton *button = getChild<LLButton>(id);
263 if (button) 254 if (button)
264 { 255 {
265 setDefaultBtn(button); 256 setDefaultBtn(button);
@@ -270,77 +261,6 @@ void LLPanel::setDefaultBtn(const LLString& id)
270 } 261 }
271} 262}
272 263
273BOOL LLPanel::handleKey(KEY key, MASK mask, BOOL called_from_parent)
274{
275 BOOL handled = FALSE;
276 if (getVisible() && getEnabled())
277 {
278 if( (mask == MASK_SHIFT) && (KEY_TAB == key))
279 {
280 //SHIFT-TAB
281 LLUICtrl* cur_focus = gFocusMgr.getKeyboardFocus();
282 if (cur_focus && gFocusMgr.childHasKeyboardFocus(this))
283 {
284 LLUICtrl* focus_root = cur_focus;
285 while(cur_focus->getParentUICtrl())
286 {
287 cur_focus = cur_focus->getParentUICtrl();
288 if (cur_focus->isFocusRoot())
289 {
290 // this is the root-most focus root found so far
291 focus_root = cur_focus;
292 }
293 }
294 handled = focus_root->focusPrevItem(FALSE);
295 }
296 else if (!cur_focus && isFocusRoot())
297 {
298 handled = focusLastItem();
299 if (!handled)
300 {
301 setFocus(TRUE);
302 handled = TRUE;
303 }
304 }
305 }
306 else
307 if( (mask == MASK_NONE ) && (KEY_TAB == key))
308 {
309 //TAB
310 LLUICtrl* cur_focus = gFocusMgr.getKeyboardFocus();
311 if (cur_focus && gFocusMgr.childHasKeyboardFocus(this))
312 {
313 LLUICtrl* focus_root = cur_focus;
314 while(cur_focus->getParentUICtrl())
315 {
316 cur_focus = cur_focus->getParentUICtrl();
317 if (cur_focus->isFocusRoot())
318 {
319 focus_root = cur_focus;
320 }
321 }
322 handled = focus_root->focusNextItem(FALSE);
323 }
324 else if (!cur_focus && isFocusRoot())
325 {
326 handled = focusFirstItem();
327 if (!handled)
328 {
329 setFocus(TRUE);
330 handled = TRUE;
331 }
332 }
333 }
334 }
335
336 if (!handled)
337 {
338 handled = LLView::handleKey(key, mask, called_from_parent);
339 }
340
341 return handled;
342}
343
344void LLPanel::addCtrl( LLUICtrl* ctrl, S32 tab_group) 264void LLPanel::addCtrl( LLUICtrl* ctrl, S32 tab_group)
345{ 265{
346 mLastTabGroup = tab_group; 266 mLastTabGroup = tab_group;
@@ -355,83 +275,90 @@ void LLPanel::addCtrlAtEnd( LLUICtrl* ctrl, S32 tab_group)
355 LLView::addCtrlAtEnd(ctrl, tab_group); 275 LLView::addCtrlAtEnd(ctrl, tab_group);
356} 276}
357 277
358BOOL LLPanel::handleKeyHere( KEY key, MASK mask, BOOL called_from_parent ) 278BOOL LLPanel::handleKeyHere( KEY key, MASK mask )
359{ 279{
360 BOOL handled = FALSE; 280 BOOL handled = FALSE;
361 281
362 if( getVisible() && getEnabled() && 282 LLUICtrl* cur_focus = gFocusMgr.getKeyboardFocus();
363 gFocusMgr.childHasKeyboardFocus(this) && !called_from_parent )
364 {
365 // handle user hitting ESC to defocus
366 if (key == KEY_ESCAPE)
367 {
368 gFocusMgr.setKeyboardFocus(NULL);
369 return TRUE;
370 }
371 283
372 LLUICtrl* cur_focus = gFocusMgr.getKeyboardFocus(); 284 // handle user hitting ESC to defocus
373 // If we have a default button, click it when 285 if (key == KEY_ESCAPE)
374 // return is pressed, unless current focus is a return-capturing button 286 {
375 // in which case *that* button will handle the return key 287 gFocusMgr.setKeyboardFocus(NULL);
376 if (cur_focus && !(cur_focus->getWidgetType() == WIDGET_TYPE_BUTTON && static_cast<LLButton *>(cur_focus)->getCommitOnReturn())) 288 return TRUE;
289 }
290 else if( (mask == MASK_SHIFT) && (KEY_TAB == key))
291 {
292 //SHIFT-TAB
293 if (cur_focus)
377 { 294 {
378 // RETURN key means hit default button in this case 295 LLUICtrl* focus_root = cur_focus->findRootMostFocusRoot();
379 if (key == KEY_RETURN && mask == MASK_NONE 296 if (focus_root)
380 && mDefaultBtn != NULL
381 && mDefaultBtn->getVisible()
382 && mDefaultBtn->getEnabled())
383 { 297 {
384 mDefaultBtn->onCommit(); 298 handled = focus_root->focusPrevItem(FALSE);
385 handled = TRUE;
386 } 299 }
387 } 300 }
388 301 }
389 if (key == KEY_RETURN && mask == MASK_NONE) 302 else if( (mask == MASK_NONE ) && (KEY_TAB == key))
303 {
304 //TAB
305 if (cur_focus)
390 { 306 {
391 // set keyboard focus to self to trigger commitOnFocusLost behavior on current ctrl 307 LLUICtrl* focus_root = cur_focus->findRootMostFocusRoot();
392 if (cur_focus && cur_focus->acceptsTextInput()) 308 if (focus_root)
393 { 309 {
394 cur_focus->onCommit(); 310 handled = focus_root->focusNextItem(FALSE);
395 handled = TRUE;
396 } 311 }
397 } 312 }
398 } 313 }
399 314
400 return handled; 315 // If we have a default button, click it when
401} 316 // return is pressed, unless current focus is a return-capturing button
402 317 // in which case *that* button will handle the return key
403void LLPanel::requires(LLString name, EWidgetType type) 318 LLButton* focused_button = dynamic_cast<LLButton*>(cur_focus);
404{ 319 if (cur_focus && !(focused_button && focused_button->getCommitOnReturn()))
405 mRequirements[name] = type; 320 {
406} 321 // RETURN key means hit default button in this case
407 322 if (key == KEY_RETURN && mask == MASK_NONE
408BOOL LLPanel::checkRequirements() const 323 && mDefaultBtn != NULL
409{ 324 && mDefaultBtn->getVisible()
410 BOOL retval = TRUE; 325 && mDefaultBtn->getEnabled())
411 LLString message; 326 {
327 mDefaultBtn->onCommit();
328 handled = TRUE;
329 }
330 }
412 331
413 for (requirements_map_t::const_iterator i = mRequirements.begin(); i != mRequirements.end(); ++i) 332 if (key == KEY_RETURN && mask == MASK_NONE)
414 { 333 {
415 if (!this->getCtrlByNameAndType(i->first, i->second)) 334 // set keyboard focus to self to trigger commitOnFocusLost behavior on current ctrl
335 if (cur_focus && cur_focus->acceptsTextInput())
416 { 336 {
417 retval = FALSE; 337 cur_focus->onCommit();
418 message += i->first + " " + LLUICtrlFactory::getWidgetType(i->second) + "\n"; 338 handled = TRUE;
419 } 339 }
420 } 340 }
421 341
422 if (!retval) 342 return handled;
343}
344
345BOOL LLPanel::checkRequirements()
346{
347 if (!mRequirementsError.empty())
423 { 348 {
424 LLString::format_map_t args; 349 LLString::format_map_t args;
425 args["[COMPONENTS]"] = message; 350 args["[COMPONENTS]"] = mRequirementsError;
426 args["[FLOATER]"] = getName(); 351 args["[FLOATER]"] = getName();
427 352
428 llwarns << getName() << " failed requirements check on: \n" 353 llwarns << getName() << " failed requirements check on: \n"
429 << message << llendl; 354 << mRequirementsError << llendl;
430 355
431 alertXml("FailedRequirementsCheck", args); 356 alertXml("FailedRequirementsCheck", args);
357 mRequirementsError.clear();
358 return FALSE;
432 } 359 }
433 360
434 return retval; 361 return TRUE;
435} 362}
436 363
437//static 364//static
@@ -494,30 +421,6 @@ void LLPanel::setBorderVisible(BOOL b)
494 } 421 }
495} 422}
496 423
497LLUICtrl* LLPanel::getCtrlByNameAndType(const LLString& name, EWidgetType type) const
498{
499 LLView* view = getChildByName(name, TRUE);
500 if (view && view->isCtrl())
501 {
502 if (type == WIDGET_TYPE_DONTCARE || view->getWidgetType() == type)
503 {
504 return (LLUICtrl*)view;
505 }
506 else
507 {
508 llwarns << "Widget " << name << " has improper type in panel " << getName() << "\n"
509 << "Is: \t\t" << view->getWidgetType() << "\n"
510 << "Should be: \t" << type
511 << llendl;
512 }
513 }
514 else
515 {
516 childNotFound(name);
517 }
518 return NULL;
519}
520
521// virtual 424// virtual
522LLXMLNodePtr LLPanel::getXML(bool save_children) const 425LLXMLNodePtr LLPanel::getXML(bool save_children) const
523{ 426{
@@ -973,7 +876,7 @@ BOOL LLPanel::childSetLabelArg(const LLString& id, const LLString& key, const LL
973 876
974BOOL LLPanel::childSetToolTipArg(const LLString& id, const LLString& key, const LLStringExplicit& text) 877BOOL LLPanel::childSetToolTipArg(const LLString& id, const LLString& key, const LLStringExplicit& text)
975{ 878{
976 LLView* child = getChildByName(id, true); 879 LLView* child = getChildView(id, true, FALSE);
977 if (child) 880 if (child)
978 { 881 {
979 return child->setToolTipArg(key, text); 882 return child->setToolTipArg(key, text);
@@ -1001,7 +904,7 @@ void LLPanel::childSetMaxValue(const LLString& id, LLSD max_value)
1001 904
1002void LLPanel::childShowTab(const LLString& id, const LLString& tabname, bool visible) 905void LLPanel::childShowTab(const LLString& id, const LLString& tabname, bool visible)
1003{ 906{
1004 LLTabContainer* child = LLUICtrlFactory::getTabContainerByName(this, id); 907 LLTabContainer* child = getChild<LLTabContainer>(id);
1005 if (child) 908 if (child)
1006 { 909 {
1007 child->selectTabByName(tabname); 910 child->selectTabByName(tabname);
@@ -1010,7 +913,7 @@ void LLPanel::childShowTab(const LLString& id, const LLString& tabname, bool vis
1010 913
1011LLPanel *LLPanel::childGetVisibleTab(const LLString& id) const 914LLPanel *LLPanel::childGetVisibleTab(const LLString& id) const
1012{ 915{
1013 LLTabContainer* child = LLUICtrlFactory::getTabContainerByName(this, id); 916 LLTabContainer* child = getChild<LLTabContainer>(id);
1014 if (child) 917 if (child)
1015 { 918 {
1016 return child->getCurrentPanel(); 919 return child->getCurrentPanel();
@@ -1020,7 +923,7 @@ LLPanel *LLPanel::childGetVisibleTab(const LLString& id) const
1020 923
1021void LLPanel::childSetTabChangeCallback(const LLString& id, const LLString& tabname, void (*on_tab_clicked)(void*, bool), void *userdata) 924void LLPanel::childSetTabChangeCallback(const LLString& id, const LLString& tabname, void (*on_tab_clicked)(void*, bool), void *userdata)
1022{ 925{
1023 LLTabContainer* child = LLUICtrlFactory::getTabContainerByName(this, id); 926 LLTabContainer* child = getChild<LLTabContainer>(id);
1024 if (child) 927 if (child)
1025 { 928 {
1026 LLPanel *panel = child->getPanelByName(tabname); 929 LLPanel *panel = child->getPanelByName(tabname);
@@ -1034,7 +937,7 @@ void LLPanel::childSetTabChangeCallback(const LLString& id, const LLString& tabn
1034 937
1035void LLPanel::childSetKeystrokeCallback(const LLString& id, void (*keystroke_callback)(LLLineEditor* caller, void* user_data), void *user_data) 938void LLPanel::childSetKeystrokeCallback(const LLString& id, void (*keystroke_callback)(LLLineEditor* caller, void* user_data), void *user_data)
1036{ 939{
1037 LLLineEditor* child = LLUICtrlFactory::getLineEditorByName(this, id); 940 LLLineEditor* child = getChild<LLLineEditor>(id);
1038 if (child) 941 if (child)
1039 { 942 {
1040 child->setKeystrokeCallback(keystroke_callback); 943 child->setKeystrokeCallback(keystroke_callback);
@@ -1047,7 +950,7 @@ void LLPanel::childSetKeystrokeCallback(const LLString& id, void (*keystroke_cal
1047 950
1048void LLPanel::childSetPrevalidate(const LLString& id, BOOL (*func)(const LLWString &) ) 951void LLPanel::childSetPrevalidate(const LLString& id, BOOL (*func)(const LLWString &) )
1049{ 952{
1050 LLLineEditor* child = LLUICtrlFactory::getLineEditorByName(this, id); 953 LLLineEditor* child = getChild<LLLineEditor>(id);
1051 if (child) 954 if (child)
1052 { 955 {
1053 child->setPrevalidate(func); 956 child->setPrevalidate(func);
@@ -1056,7 +959,7 @@ void LLPanel::childSetPrevalidate(const LLString& id, BOOL (*func)(const LLWStri
1056 959
1057void LLPanel::childSetWrappedText(const LLString& id, const LLString& text, bool visible) 960void LLPanel::childSetWrappedText(const LLString& id, const LLString& text, bool visible)
1058{ 961{
1059 LLTextBox* child = (LLTextBox*)getCtrlByNameAndType(id, WIDGET_TYPE_TEXT_BOX); 962 LLTextBox* child = getChild<LLTextBox>(id);
1060 if (child) 963 if (child)
1061 { 964 {
1062 child->setVisible(visible); 965 child->setVisible(visible);
@@ -1066,7 +969,7 @@ void LLPanel::childSetWrappedText(const LLString& id, const LLString& text, bool
1066 969
1067void LLPanel::childSetAction(const LLString& id, void(*function)(void*), void* value) 970void LLPanel::childSetAction(const LLString& id, void(*function)(void*), void* value)
1068{ 971{
1069 LLButton* button = (LLButton*)getCtrlByNameAndType(id, WIDGET_TYPE_BUTTON); 972 LLButton* button = getChild<LLButton>(id);
1070 if (button) 973 if (button)
1071 { 974 {
1072 button->setClickedCallback(function, value); 975 button->setClickedCallback(function, value);
@@ -1075,7 +978,7 @@ void LLPanel::childSetAction(const LLString& id, void(*function)(void*), void* v
1075 978
1076void LLPanel::childSetActionTextbox(const LLString& id, void(*function)(void*)) 979void LLPanel::childSetActionTextbox(const LLString& id, void(*function)(void*))
1077{ 980{
1078 LLTextBox* textbox = (LLTextBox*)getCtrlByNameAndType(id, WIDGET_TYPE_TEXT_BOX); 981 LLTextBox* textbox = getChild<LLTextBox>(id);
1079 if (textbox) 982 if (textbox)
1080 { 983 {
1081 textbox->setClickedCallback(function); 984 textbox->setClickedCallback(function);
@@ -1092,13 +995,18 @@ void LLPanel::childSetControlName(const LLString& id, const LLString& control_na
1092} 995}
1093 996
1094//virtual 997//virtual
1095LLView* LLPanel::getChildByName(const LLString& name, BOOL recurse) const 998LLView* LLPanel::getChildView(const LLString& name, BOOL recurse, BOOL create_if_missing) const
1096{ 999{
1097 LLView* view = LLUICtrl::getChildByName(name, recurse); 1000 // just get child, don't try to create a dummy one
1001 LLView* view = LLUICtrl::getChildView(name, recurse, FALSE);
1098 if (!view && !recurse) 1002 if (!view && !recurse)
1099 { 1003 {
1100 childNotFound(name); 1004 childNotFound(name);
1101 } 1005 }
1006 if (!view && create_if_missing)
1007 {
1008 view = createDummyWidget<LLView>(name);
1009 }
1102 return view; 1010 return view;
1103} 1011}
1104 1012
@@ -1191,6 +1099,8 @@ struct LLLayoutStack::LLEmbeddedPanel
1191 F32 mVisibleAmt; 1099 F32 mVisibleAmt;
1192}; 1100};
1193 1101
1102static LLRegisterWidget<LLLayoutStack> r2("layout_stack");
1103
1194LLLayoutStack::LLLayoutStack(eLayoutOrientation orientation) : 1104LLLayoutStack::LLLayoutStack(eLayoutOrientation orientation) :
1195 mOrientation(orientation), 1105 mOrientation(orientation),
1196 mMinWidth(0), 1106 mMinWidth(0),
@@ -1204,19 +1114,6 @@ LLLayoutStack::~LLLayoutStack()
1204 std::for_each(mPanels.begin(), mPanels.end(), DeletePointer()); 1114 std::for_each(mPanels.begin(), mPanels.end(), DeletePointer());
1205} 1115}
1206 1116
1207// virtual
1208EWidgetType LLLayoutStack::getWidgetType() const
1209{
1210 return WIDGET_TYPE_LAYOUT_STACK;
1211}
1212
1213// virtual
1214LLString LLLayoutStack::getWidgetTag() const
1215{
1216 return LL_LAYOUT_STACK_TAG;
1217}
1218
1219
1220void LLLayoutStack::draw() 1117void LLLayoutStack::draw()
1221{ 1118{
1222 updateLayout(); 1119 updateLayout();
@@ -1304,18 +1201,18 @@ LLView* LLLayoutStack::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactor
1304 LLXMLNodePtr child; 1201 LLXMLNodePtr child;
1305 for (child = node->getFirstChild(); child.notNull(); child = child->getNextSibling()) 1202 for (child = node->getFirstChild(); child.notNull(); child = child->getNextSibling())
1306 { 1203 {
1204 S32 min_width = 0;
1205 S32 min_height = 0;
1206 BOOL auto_resize = TRUE;
1207
1208 child->getAttributeS32("min_width", min_width);
1209 child->getAttributeS32("min_height", min_height);
1210 child->getAttributeBOOL("auto_resize", auto_resize);
1211
1307 if (child->hasName("layout_panel")) 1212 if (child->hasName("layout_panel"))
1308 { 1213 {
1309 S32 min_width = 0;
1310 S32 min_height = 0;
1311 BOOL auto_resize = TRUE;
1312 BOOL user_resize = TRUE; 1214 BOOL user_resize = TRUE;
1313
1314 child->getAttributeS32("min_width", min_width);
1315 child->getAttributeS32("min_height", min_height);
1316 child->getAttributeBOOL("auto_resize", auto_resize);
1317 child->getAttributeBOOL("user_resize", user_resize); 1215 child->getAttributeBOOL("user_resize", user_resize);
1318
1319 LLPanel* panelp = (LLPanel*)LLPanel::fromXML(child, layout_stackp, factory); 1216 LLPanel* panelp = (LLPanel*)LLPanel::fromXML(child, layout_stackp, factory);
1320 if (panelp) 1217 if (panelp)
1321 { 1218 {
@@ -1323,6 +1220,26 @@ LLView* LLLayoutStack::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactor
1323 layout_stackp->addPanel(panelp, min_width, min_height, auto_resize, user_resize); 1220 layout_stackp->addPanel(panelp, min_width, min_height, auto_resize, user_resize);
1324 } 1221 }
1325 } 1222 }
1223 else
1224 {
1225 BOOL user_resize = FALSE;
1226 child->getAttributeBOOL("user_resize", user_resize);
1227
1228 LLPanel* panelp = new LLPanel("auto_panel");
1229 LLView* new_child = factory->createWidget(panelp, child);
1230 if (new_child)
1231 {
1232 // put child in new embedded panel
1233 layout_stackp->addPanel(panelp, min_width, min_height, auto_resize, user_resize);
1234 // resize panel to contain widget and move widget to be contained in panel
1235 panelp->setRect(new_child->getRect());
1236 new_child->setOrigin(0, 0);
1237 }
1238 else
1239 {
1240 panelp->die();
1241 }
1242 }
1326 } 1243 }
1327 layout_stackp->updateLayout(); 1244 layout_stackp->updateLayout();
1328 1245
@@ -1411,6 +1328,11 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
1411 1328
1412 if (mOrientation == HORIZONTAL) 1329 if (mOrientation == HORIZONTAL)
1413 { 1330 {
1331 // enforce minimize size constraint by default
1332 if (panelp->getRect().getWidth() < (*panel_it)->mMinWidth)
1333 {
1334 panelp->reshape((*panel_it)->mMinWidth, panelp->getRect().getHeight());
1335 }
1414 total_width += llround(panelp->getRect().getWidth() * (*panel_it)->mVisibleAmt); 1336 total_width += llround(panelp->getRect().getWidth() * (*panel_it)->mVisibleAmt);
1415 // want n-1 panel gaps for n panels 1337 // want n-1 panel gaps for n panels
1416 if (panel_it != mPanels.begin()) 1338 if (panel_it != mPanels.begin())
@@ -1420,6 +1342,11 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
1420 } 1342 }
1421 else //VERTICAL 1343 else //VERTICAL
1422 { 1344 {
1345 // enforce minimize size constraint by default
1346 if (panelp->getRect().getHeight() < (*panel_it)->mMinHeight)
1347 {
1348 panelp->reshape(panelp->getRect().getWidth(), (*panel_it)->mMinHeight);
1349 }
1423 total_height += llround(panelp->getRect().getHeight() * (*panel_it)->mVisibleAmt); 1350 total_height += llround(panelp->getRect().getHeight() * (*panel_it)->mVisibleAmt);
1424 if (panel_it != mPanels.begin()) 1351 if (panel_it != mPanels.begin())
1425 { 1352 {
@@ -1438,6 +1365,7 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
1438 { 1365 {
1439 continue; 1366 continue;
1440 } 1367 }
1368
1441 // if currently resizing a panel or the panel is flagged as not automatically resizing 1369 // if currently resizing a panel or the panel is flagged as not automatically resizing
1442 // only track total available headroom, but don't use it for automatic resize logic 1370 // only track total available headroom, but don't use it for automatic resize logic
1443 if ((*panel_it)->mResizeBar->hasMouseCapture() 1371 if ((*panel_it)->mResizeBar->hasMouseCapture()
@@ -1469,6 +1397,7 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
1469 } 1397 }
1470 } 1398 }
1471 1399
1400 // calculate how many pixels need to be distributed among layout panels
1472 // positive means panels need to grow, negative means shrink 1401 // positive means panels need to grow, negative means shrink
1473 S32 pixels_to_distribute; 1402 S32 pixels_to_distribute;
1474 if (mOrientation == HORIZONTAL) 1403 if (mOrientation == HORIZONTAL)
@@ -1480,6 +1409,7 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
1480 pixels_to_distribute = getRect().getHeight() - total_height; 1409 pixels_to_distribute = getRect().getHeight() - total_height;
1481 } 1410 }
1482 1411
1412 // now we distribute the pixels...
1483 S32 cur_x = 0; 1413 S32 cur_x = 0;
1484 S32 cur_y = getRect().getHeight(); 1414 S32 cur_y = getRect().getHeight();
1485 1415
@@ -1505,13 +1435,17 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
1505 if (pixels_to_distribute < 0) 1435 if (pixels_to_distribute < 0)
1506 { 1436 {
1507 // shrink proportionally to amount over minimum 1437 // shrink proportionally to amount over minimum
1508 delta_size = (shrink_headroom_available > 0) ? llround((F32)pixels_to_distribute * (F32)(cur_width - (*panel_it)->mMinWidth) / (F32)shrink_headroom_available) : 0; 1438 // so we can do this in one pass
1439 delta_size = (shrink_headroom_available > 0) ? llround((F32)pixels_to_distribute * ((F32)(cur_width - (*panel_it)->mMinWidth) / (F32)shrink_headroom_available)) : 0;
1440 shrink_headroom_available -= (cur_width - (*panel_it)->mMinWidth);
1509 } 1441 }
1510 else 1442 else
1511 { 1443 {
1512 // grow all elements equally 1444 // grow all elements equally
1513 delta_size = llround((F32)pixels_to_distribute / (F32)num_resizable_panels); 1445 delta_size = llround((F32)pixels_to_distribute / (F32)num_resizable_panels);
1446 num_resizable_panels--;
1514 } 1447 }
1448 pixels_to_distribute -= delta_size;
1515 new_width = llmax((*panel_it)->mMinWidth, cur_width + delta_size); 1449 new_width = llmax((*panel_it)->mMinWidth, cur_width + delta_size);
1516 } 1450 }
1517 else 1451 else
@@ -1524,12 +1458,16 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
1524 if (pixels_to_distribute < 0) 1458 if (pixels_to_distribute < 0)
1525 { 1459 {
1526 // shrink proportionally to amount over minimum 1460 // shrink proportionally to amount over minimum
1527 delta_size = (shrink_headroom_available > 0) ? llround((F32)pixels_to_distribute * (F32)(cur_height - (*panel_it)->mMinHeight) / (F32)shrink_headroom_available) : 0; 1461 // so we can do this in one pass
1462 delta_size = (shrink_headroom_available > 0) ? llround((F32)pixels_to_distribute * ((F32)(cur_height - (*panel_it)->mMinHeight) / (F32)shrink_headroom_available)) : 0;
1463 shrink_headroom_available -= (cur_height - (*panel_it)->mMinHeight);
1528 } 1464 }
1529 else 1465 else
1530 { 1466 {
1531 delta_size = llround((F32)pixels_to_distribute / (F32)num_resizable_panels); 1467 delta_size = llround((F32)pixels_to_distribute / (F32)num_resizable_panels);
1468 num_resizable_panels--;
1532 } 1469 }
1470 pixels_to_distribute -= delta_size;
1533 new_height = llmax((*panel_it)->mMinHeight, cur_height + delta_size); 1471 new_height = llmax((*panel_it)->mMinHeight, cur_height + delta_size);
1534 } 1472 }
1535 else 1473 else
diff --git a/linden/indra/llui/llpanel.h b/linden/indra/llui/llpanel.h
index e0f48ca..c7627ff 100644
--- a/linden/indra/llui/llpanel.h
+++ b/linden/indra/llui/llpanel.h
@@ -82,13 +82,12 @@ public:
82 /*virtual*/ ~LLPanel(); 82 /*virtual*/ ~LLPanel();
83 83
84 // LLView interface 84 // LLView interface
85 /*virtual*/ EWidgetType getWidgetType() const;
86 /*virtual*/ LLString getWidgetTag() const;
87 /*virtual*/ BOOL isPanel() const; 85 /*virtual*/ BOOL isPanel() const;
88 /*virtual*/ void draw(); 86 /*virtual*/ void draw();
89 /*virtual*/ BOOL handleKey( KEY key, MASK mask, BOOL called_from_parent ); 87 /*virtual*/ BOOL handleKeyHere( KEY key, MASK mask );
90 /*virtual*/ BOOL handleKeyHere( KEY key, MASK mask, BOOL called_from_parent );
91 /*virtual*/ LLXMLNodePtr getXML(bool save_children = true) const; 88 /*virtual*/ LLXMLNodePtr getXML(bool save_children = true) const;
89 // Override to set not found list:
90 virtual LLView* getChildView(const LLString& name, BOOL recurse = TRUE, BOOL create_if_missing = TRUE) const;
92 91
93 // From LLFocusableElement 92 // From LLFocusableElement
94 /*virtual*/ void setFocus( BOOL b ); 93 /*virtual*/ void setFocus( BOOL b );
@@ -106,8 +105,21 @@ public:
106 BOOL hasBorder() const { return mBorder != NULL; } 105 BOOL hasBorder() const { return mBorder != NULL; }
107 void setBorderVisible( BOOL b ); 106 void setBorderVisible( BOOL b );
108 107
109 void requires(LLString name, EWidgetType type = WIDGET_TYPE_DONTCARE); 108 template <class T> void requires(LLString name)
110 BOOL checkRequirements() const; 109 {
110 // check for widget with matching type and name
111 if (LLView::getChild<T>(name) == NULL)
112 {
113 mRequirementsError += name + "\n";
114 }
115 }
116
117 // requires LLView by default
118 void requires(LLString name)
119 {
120 requires<LLView>(name);
121 }
122 BOOL checkRequirements();
111 123
112 void setBackgroundColor( const LLColor4& color ) { mBgColorOpaque = color; } 124 void setBackgroundColor( const LLColor4& color ) { mBgColorOpaque = color; }
113 const LLColor4& getBackgroundColor() const { return mBgColorOpaque; } 125 const LLColor4& getBackgroundColor() const { return mBgColorOpaque; }
@@ -133,8 +145,6 @@ public:
133 145
134 S32 getLastTabGroup() const { return mLastTabGroup; } 146 S32 getLastTabGroup() const { return mLastTabGroup; }
135 147
136 LLUICtrl* getCtrlByNameAndType(const LLString& name, EWidgetType type) const;
137
138 const LLCallbackMap::map_t& getFactoryMap() const { return mFactoryMap; } 148 const LLCallbackMap::map_t& getFactoryMap() const { return mFactoryMap; }
139 149
140 BOOL initPanelXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); 150 BOOL initPanelXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
@@ -226,9 +236,6 @@ protected:
226 LLButton* getDefaultButton() { return mDefaultBtn; } 236 LLButton* getDefaultButton() { return mDefaultBtn; }
227 LLCallbackMap::map_t mFactoryMap; 237 LLCallbackMap::map_t mFactoryMap;
228 238
229 // Override to set not found list:
230 virtual LLView* getChildByName(const LLString& name, BOOL recurse = FALSE) const;
231
232private: 239private:
233 // common construction logic 240 // common construction logic
234 void init(); 241 void init();
@@ -257,8 +264,7 @@ private:
257 typedef std::map<LLString, LLUIString> ui_string_map_t; 264 typedef std::map<LLString, LLUIString> ui_string_map_t;
258 ui_string_map_t mUIStrings; 265 ui_string_map_t mUIStrings;
259 266
260 typedef std::map<LLString, EWidgetType> requirements_map_t; 267 LLString mRequirementsError;
261 requirements_map_t mRequirements;
262 268
263 typedef std::queue<LLAlertInfo> alert_queue_t; 269 typedef std::queue<LLAlertInfo> alert_queue_t;
264 static alert_queue_t sAlertQueue; 270 static alert_queue_t sAlertQueue;
@@ -281,9 +287,6 @@ public:
281 /*virtual*/ LLXMLNodePtr getXML(bool save_children = true) const; 287 /*virtual*/ LLXMLNodePtr getXML(bool save_children = true) const;
282 /*virtual*/ void removeCtrl(LLUICtrl* ctrl); 288 /*virtual*/ void removeCtrl(LLUICtrl* ctrl);
283 289
284 virtual EWidgetType getWidgetType() const;
285 virtual LLString getWidgetTag() const;
286
287 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); 290 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
288 291
289 S32 getMinWidth() const { return mMinWidth; } 292 S32 getMinWidth() const { return mMinWidth; }
@@ -291,16 +294,17 @@ public:
291 294
292 void addPanel(LLPanel* panel, S32 min_width, S32 min_height, BOOL auto_resize, BOOL user_resize, S32 index = S32_MAX); 295 void addPanel(LLPanel* panel, S32 min_width, S32 min_height, BOOL auto_resize, BOOL user_resize, S32 index = S32_MAX);
293 void removePanel(LLPanel* panel); 296 void removePanel(LLPanel* panel);
294 void updateLayout(BOOL force_resize = FALSE);
295 297
296private: 298private:
299 struct LLEmbeddedPanel;
300
301 void updateLayout(BOOL force_resize = FALSE);
297 void calcMinExtents(); 302 void calcMinExtents();
298 S32 getDefaultHeight(S32 cur_height); 303 S32 getDefaultHeight(S32 cur_height);
299 S32 getDefaultWidth(S32 cur_width); 304 S32 getDefaultWidth(S32 cur_width);
300 305
301 const eLayoutOrientation mOrientation; 306 const eLayoutOrientation mOrientation;
302 307
303 struct LLEmbeddedPanel;
304 typedef std::vector<LLEmbeddedPanel*> e_panel_list_t; 308 typedef std::vector<LLEmbeddedPanel*> e_panel_list_t;
305 e_panel_list_t mPanels; 309 e_panel_list_t mPanels;
306 LLEmbeddedPanel* findEmbeddedPanel(LLPanel* panelp) const; 310 LLEmbeddedPanel* findEmbeddedPanel(LLPanel* panelp) const;
diff --git a/linden/indra/llui/llradiogroup.cpp b/linden/indra/llui/llradiogroup.cpp
index 039fe81..d7373f1 100644
--- a/linden/indra/llui/llradiogroup.cpp
+++ b/linden/indra/llui/llradiogroup.cpp
@@ -42,6 +42,7 @@
42#include "llui.h" 42#include "llui.h"
43#include "llfocusmgr.h" 43#include "llfocusmgr.h"
44 44
45static LLRegisterWidget<LLRadioGroup> r("radio_group");
45 46
46LLRadioGroup::LLRadioGroup(const LLString& name, const LLRect& rect, 47LLRadioGroup::LLRadioGroup(const LLString& name, const LLRect& rect,
47 const LLString& control_name, 48 const LLString& control_name,
@@ -161,11 +162,11 @@ BOOL LLRadioGroup::setSelectedIndex(S32 index, BOOL from_event)
161 return TRUE; 162 return TRUE;
162} 163}
163 164
164BOOL LLRadioGroup::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent) 165BOOL LLRadioGroup::handleKeyHere(KEY key, MASK mask)
165{ 166{
166 BOOL handled = FALSE; 167 BOOL handled = FALSE;
167 // do any of the tab buttons have keyboard focus? 168 // do any of the tab buttons have keyboard focus?
168 if (getEnabled() && !called_from_parent && mask == MASK_NONE) 169 if (mask == MASK_NONE)
169 { 170 {
170 switch(key) 171 switch(key)
171 { 172 {
diff --git a/linden/indra/llui/llradiogroup.h b/linden/indra/llui/llradiogroup.h
index 87591a4..e208b79 100644
--- a/linden/indra/llui/llradiogroup.h
+++ b/linden/indra/llui/llradiogroup.h
@@ -82,10 +82,8 @@ public:
82 BOOL border = TRUE); 82 BOOL border = TRUE);
83 83
84 virtual ~LLRadioGroup(); 84 virtual ~LLRadioGroup();
85 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_RADIO_GROUP; }
86 virtual LLString getWidgetTag() const { return LL_RADIO_GROUP_TAG; }
87 85
88 virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); 86 virtual BOOL handleKeyHere(KEY key, MASK mask);
89 87
90 virtual void setEnabled(BOOL enabled); 88 virtual void setEnabled(BOOL enabled);
91 virtual LLXMLNodePtr getXML(bool save_children = true) const; 89 virtual LLXMLNodePtr getXML(bool save_children = true) const;
diff --git a/linden/indra/llui/llresizebar.cpp b/linden/indra/llui/llresizebar.cpp
index b4933bd..e89bfee 100644
--- a/linden/indra/llui/llresizebar.cpp
+++ b/linden/indra/llui/llresizebar.cpp
@@ -85,16 +85,13 @@ LLResizeBar::LLResizeBar( const LLString& name, LLView* resizing_view, const LLR
85 85
86BOOL LLResizeBar::handleMouseDown(S32 x, S32 y, MASK mask) 86BOOL LLResizeBar::handleMouseDown(S32 x, S32 y, MASK mask)
87{ 87{
88 if( getEnabled() ) 88 // Route future Mouse messages here preemptively. (Release on mouse up.)
89 { 89 // No handler needed for focus lost since this clas has no state that depends on it.
90 // Route future Mouse messages here preemptively. (Release on mouse up.) 90 gFocusMgr.setMouseCapture( this );
91 // No handler needed for focus lost since this clas has no state that depends on it.
92 gFocusMgr.setMouseCapture( this );
93 91
94 localPointToScreen(x, y, &mDragLastScreenX, &mDragLastScreenY); 92 localPointToScreen(x, y, &mDragLastScreenX, &mDragLastScreenY);
95 mLastMouseScreenX = mDragLastScreenX; 93 mLastMouseScreenX = mDragLastScreenX;
96 mLastMouseScreenY = mDragLastScreenY; 94 mLastMouseScreenY = mDragLastScreenY;
97 }
98 95
99 return TRUE; 96 return TRUE;
100} 97}
diff --git a/linden/indra/llui/llresizebar.h b/linden/indra/llui/llresizebar.h
index 5446811..d03dafa 100644
--- a/linden/indra/llui/llresizebar.h
+++ b/linden/indra/llui/llresizebar.h
@@ -42,9 +42,6 @@ public:
42 42
43 LLResizeBar(const LLString& name, LLView* resizing_view, const LLRect& rect, S32 min_size, S32 max_size, Side side ); 43 LLResizeBar(const LLString& name, LLView* resizing_view, const LLRect& rect, S32 min_size, S32 max_size, Side side );
44 44
45 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_RESIZE_BAR; }
46 virtual LLString getWidgetTag() const { return LL_RESIZE_BAR_TAG; }
47
48// virtual void draw(); No appearance 45// virtual void draw(); No appearance
49 virtual BOOL handleHover(S32 x, S32 y, MASK mask); 46 virtual BOOL handleHover(S32 x, S32 y, MASK mask);
50 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); 47 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
diff --git a/linden/indra/llui/llresizehandle.cpp b/linden/indra/llui/llresizehandle.cpp
index d3e066b..3aa968f 100644
--- a/linden/indra/llui/llresizehandle.cpp
+++ b/linden/indra/llui/llresizehandle.cpp
@@ -59,8 +59,7 @@ LLResizeHandle::LLResizeHandle( const LLString& name, const LLRect& rect, S32 mi
59 59
60 if( RIGHT_BOTTOM == mCorner) 60 if( RIGHT_BOTTOM == mCorner)
61 { 61 {
62 LLUUID image_id(LLUI::sConfigGroup->getString("UIImgResizeBottomRightUUID")); 62 mImage = LLUI::sImageProvider->getUIImage("UIImgResizeBottomRightUUID");
63 mImage = LLUI::sImageProvider->getImageByID(image_id);
64 } 63 }
65 64
66 switch( mCorner ) 65 switch( mCorner )
@@ -78,19 +77,16 @@ LLResizeHandle::LLResizeHandle( const LLString& name, const LLRect& rect, S32 mi
78BOOL LLResizeHandle::handleMouseDown(S32 x, S32 y, MASK mask) 77BOOL LLResizeHandle::handleMouseDown(S32 x, S32 y, MASK mask)
79{ 78{
80 BOOL handled = FALSE; 79 BOOL handled = FALSE;
81 if( getVisible() && pointInHandle(x, y) ) 80 if( pointInHandle(x, y) )
82 { 81 {
83 handled = TRUE; 82 handled = TRUE;
84 if( getEnabled() ) 83 // Route future Mouse messages here preemptively. (Release on mouse up.)
85 { 84 // No handler needed for focus lost since this clas has no state that depends on it.
86 // Route future Mouse messages here preemptively. (Release on mouse up.) 85 gFocusMgr.setMouseCapture( this );
87 // No handler needed for focus lost since this clas has no state that depends on it.
88 gFocusMgr.setMouseCapture( this );
89 86
90 localPointToScreen(x, y, &mDragLastScreenX, &mDragLastScreenY); 87 localPointToScreen(x, y, &mDragLastScreenX, &mDragLastScreenY);
91 mLastMouseScreenX = mDragLastScreenX; 88 mLastMouseScreenX = mDragLastScreenX;
92 mLastMouseScreenY = mDragLastScreenY; 89 mLastMouseScreenY = mDragLastScreenY;
93 }
94 } 90 }
95 91
96 return handled; 92 return handled;
@@ -107,8 +103,7 @@ BOOL LLResizeHandle::handleMouseUp(S32 x, S32 y, MASK mask)
107 gFocusMgr.setMouseCapture( NULL ); 103 gFocusMgr.setMouseCapture( NULL );
108 handled = TRUE; 104 handled = TRUE;
109 } 105 }
110 else 106 else if( pointInHandle(x, y) )
111 if( getVisible() && pointInHandle(x, y) )
112 { 107 {
113 handled = TRUE; 108 handled = TRUE;
114 } 109 }
@@ -284,7 +279,7 @@ BOOL LLResizeHandle::handleHover(S32 x, S32 y, MASK mask)
284 } 279 }
285 else // don't have mouse capture 280 else // don't have mouse capture
286 { 281 {
287 if( getVisible() && pointInHandle( x, y ) ) 282 if( pointInHandle( x, y ) )
288 { 283 {
289 handled = TRUE; 284 handled = TRUE;
290 } 285 }
@@ -314,7 +309,7 @@ void LLResizeHandle::draw()
314{ 309{
315 if( mImage.notNull() && getVisible() && (RIGHT_BOTTOM == mCorner) ) 310 if( mImage.notNull() && getVisible() && (RIGHT_BOTTOM == mCorner) )
316 { 311 {
317 gl_draw_image( 0, 0, mImage ); 312 mImage->draw(0, 0);
318 } 313 }
319} 314}
320 315
diff --git a/linden/indra/llui/llresizehandle.h b/linden/indra/llui/llresizehandle.h
index 77ebcb9..5302612 100644
--- a/linden/indra/llui/llresizehandle.h
+++ b/linden/indra/llui/llresizehandle.h
@@ -46,9 +46,6 @@ public:
46 46
47 LLResizeHandle(const LLString& name, const LLRect& rect, S32 min_width, S32 min_height, ECorner corner = RIGHT_BOTTOM ); 47 LLResizeHandle(const LLString& name, const LLRect& rect, S32 min_width, S32 min_height, ECorner corner = RIGHT_BOTTOM );
48 48
49 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_RESIZE_HANDLE; }
50 virtual LLString getWidgetTag() const { return LL_RESIZE_HANDLE_TAG; }
51
52 virtual void draw(); 49 virtual void draw();
53 virtual BOOL handleHover(S32 x, S32 y, MASK mask); 50 virtual BOOL handleHover(S32 x, S32 y, MASK mask);
54 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); 51 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
@@ -64,7 +61,7 @@ private:
64 S32 mLastMouseScreenX; 61 S32 mLastMouseScreenX;
65 S32 mLastMouseScreenY; 62 S32 mLastMouseScreenY;
66 LLCoordGL mLastMouseDir; 63 LLCoordGL mLastMouseDir;
67 LLPointer<LLImageGL> mImage; 64 LLPointer<LLUIImage> mImage;
68 S32 mMinWidth; 65 S32 mMinWidth;
69 S32 mMinHeight; 66 S32 mMinHeight;
70 const ECorner mCorner; 67 const ECorner mCorner;
diff --git a/linden/indra/llui/llresmgr.cpp b/linden/indra/llui/llresmgr.cpp
index 83ad440..b5b9174 100644
--- a/linden/indra/llui/llresmgr.cpp
+++ b/linden/indra/llui/llresmgr.cpp
@@ -39,8 +39,6 @@
39#include "llerror.h" 39#include "llerror.h"
40#include "llstring.h" 40#include "llstring.h"
41 41
42// Global singleton
43LLResMgr* gResMgr = NULL;
44 42
45LLResMgr::LLResMgr() 43LLResMgr::LLResMgr()
46{ 44{
diff --git a/linden/indra/llui/llresmgr.h b/linden/indra/llui/llresmgr.h
index 810d386..f9ec115 100644
--- a/linden/indra/llui/llresmgr.h
+++ b/linden/indra/llui/llresmgr.h
@@ -36,6 +36,7 @@
36#include "locale.h" 36#include "locale.h"
37#include "stdtypes.h" 37#include "stdtypes.h"
38#include "llstring.h" 38#include "llstring.h"
39#include "llmemory.h"
39 40
40enum LLLOCALE_ID 41enum LLLOCALE_ID
41{ 42{
@@ -44,67 +45,6 @@ enum LLLOCALE_ID
44 LLLOCALE_COUNT // Number of values in this enum. Keep at end. 45 LLLOCALE_COUNT // Number of values in this enum. Keep at end.
45}; 46};
46 47
47/*
48enum LLSTR_ID
49{
50 LLSTR_HELLO,
51 LLSTR_GOODBYE,
52 LLSTR_CHAT_LABEL,
53 LLSTR_STATUS_LABEL,
54 LLSTR_X,
55 LLSTR_Y,
56 LLSTR_Z,
57 LLSTR_POSITION,
58 LLSTR_SCALE,
59 LLSTR_ROTATION,
60 LLSTR_HAS_PHYSICS,
61 LLSTR_SCRIPT,
62 LLSTR_HELP,
63 LLSTR_REMOVE,
64 LLSTR_CLEAR,
65 LLSTR_APPLY,
66 LLSTR_CANCEL,
67 LLSTR_MATERIAL,
68 LLSTR_FACE,
69 LLSTR_TEXTURE,
70 LLSTR_TEXTURE_SIZE,
71 LLSTR_TEXTURE_OFFSET,
72 LLSTR_TEXTURE_ROTATION,
73 LLSTR_U,
74 LLSTR_V,
75 LLSTR_OWNERSHIP,
76 LLSTR_PUBLIC,
77 LLSTR_PRIVATE,
78 LLSTR_REVERT,
79 LLSTR_INSERT_SAMPLE,
80 LLSTR_SET_TEXTURE,
81 LLSTR_EDIT_SCRIPT,
82 LLSTR_MOUSELOOK_INSTRUCTIONS,
83 LLSTR_EDIT_FACE_INSTRUCTIONS,
84 LLSTR_CLOSE,
85 LLSTR_MOVE,
86 LLSTR_ROTATE,
87 LLSTR_RESIZE,
88 LLSTR_PLACE_BOX,
89 LLSTR_PLACE_PRISM,
90 LLSTR_PLACE_PYRAMID,
91 LLSTR_PLACE_TETRAHEDRON,
92 LLSTR_PLACE_CYLINDER,
93 LLSTR_PLACE_HALF_CYLINDER,
94 LLSTR_PLACE_CONE,
95 LLSTR_PLACE_HALF_CONE,
96 LLSTR_PLACE_SPHERE,
97 LLSTR_PLACE_HALF_SPHERE,
98 LLSTR_PLACE_BIRD,
99 LLSTR_PLACE_SNAKE,
100 LLSTR_PLACE_ROCK,
101 LLSTR_PLACE_TREE,
102 LLSTR_PLACE_GRASS,
103 LLSTR_MODIFY_LAND,
104 LLSTR_COUNT // Number of values in this enum. Keep at end.
105};
106*/
107
108enum LLFONT_ID 48enum LLFONT_ID
109{ 49{
110 LLFONT_OCRA, 50 LLFONT_OCRA,
@@ -117,7 +57,7 @@ enum LLFONT_ID
117 57
118class LLFontGL; 58class LLFontGL;
119 59
120class LLResMgr 60class LLResMgr : public LLSingleton<LLResMgr>
121{ 61{
122public: 62public:
123 LLResMgr(); 63 LLResMgr();
@@ -162,6 +102,4 @@ private:
162 LLString mPrevLocaleString; 102 LLString mPrevLocaleString;
163}; 103};
164 104
165extern LLResMgr* gResMgr;
166
167#endif // LL_RESMGR_ 105#endif // LL_RESMGR_
diff --git a/linden/indra/llui/llrootview.h b/linden/indra/llui/llrootview.h
index 5f130b9..f4c047c 100644
--- a/linden/indra/llui/llrootview.h
+++ b/linden/indra/llui/llrootview.h
@@ -38,9 +38,6 @@ class LLRootView : public LLView
38{ 38{
39public: 39public:
40 LLRootView(const LLString& name, const LLRect& rect, BOOL mouse_opaque, U32 follows=FOLLOWS_NONE); 40 LLRootView(const LLString& name, const LLRect& rect, BOOL mouse_opaque, U32 follows=FOLLOWS_NONE);
41
42 /*virtual*/ EWidgetType getWidgetType() const { return WIDGET_TYPE_ROOT_VIEW; }
43 /*virtual*/ LLString getWidgetTag() const { return LL_ROOT_VIEW_TAG; }
44}; 41};
45 42
46#endif 43#endif
diff --git a/linden/indra/llui/llscrollbar.cpp b/linden/indra/llui/llscrollbar.cpp
index cf64742..cdabda0 100644
--- a/linden/indra/llui/llscrollbar.cpp
+++ b/linden/indra/llui/llscrollbar.cpp
@@ -414,17 +414,8 @@ BOOL LLScrollbar::handleHover(S32 x, S32 y, MASK mask)
414 414
415BOOL LLScrollbar::handleScrollWheel(S32 x, S32 y, S32 clicks) 415BOOL LLScrollbar::handleScrollWheel(S32 x, S32 y, S32 clicks)
416{ 416{
417 BOOL handled = FALSE; 417 changeLine( clicks * mStepSize, TRUE );
418 if( getVisible() && getRect().localPointInRect( x, y ) ) 418 return TRUE;
419 {
420 if( getEnabled() )
421 {
422 changeLine( clicks * mStepSize, TRUE );
423 }
424 handled = TRUE;
425 }
426
427 return handled;
428} 419}
429 420
430BOOL LLScrollbar::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, 421BOOL LLScrollbar::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
@@ -475,85 +466,68 @@ void LLScrollbar::reshape(S32 width, S32 height, BOOL called_from_parent)
475 466
476void LLScrollbar::draw() 467void LLScrollbar::draw()
477{ 468{
478 if( getVisible() ) 469 S32 local_mouse_x;
470 S32 local_mouse_y;
471 LLCoordWindow cursor_pos_window;
472 getWindow()->getCursorPosition(&cursor_pos_window);
473 LLCoordGL cursor_pos_gl;
474 getWindow()->convertCoords(cursor_pos_window, &cursor_pos_gl);
475
476 screenPointToLocal(cursor_pos_gl.mX, cursor_pos_gl.mY, &local_mouse_x, &local_mouse_y);
477 BOOL other_captor = gFocusMgr.getMouseCapture() && gFocusMgr.getMouseCapture() != this;
478 BOOL hovered = getEnabled() && !other_captor && (hasMouseCapture() || mThumbRect.pointInRect(local_mouse_x, local_mouse_y));
479 if (hovered)
479 { 480 {
480 S32 local_mouse_x; 481 mCurGlowStrength = lerp(mCurGlowStrength, mHoverGlowStrength, LLCriticalDamp::getInterpolant(0.05f));
481 S32 local_mouse_y; 482 }
482 LLCoordWindow cursor_pos_window; 483 else
483 getWindow()->getCursorPosition(&cursor_pos_window); 484 {
484 LLCoordGL cursor_pos_gl; 485 mCurGlowStrength = lerp(mCurGlowStrength, 0.f, LLCriticalDamp::getInterpolant(0.05f));
485 getWindow()->convertCoords(cursor_pos_window, &cursor_pos_gl); 486 }
486
487 screenPointToLocal(cursor_pos_gl.mX, cursor_pos_gl.mY, &local_mouse_x, &local_mouse_y);
488 BOOL other_captor = gFocusMgr.getMouseCapture() && gFocusMgr.getMouseCapture() != this;
489 BOOL hovered = getEnabled() && !other_captor && (hasMouseCapture() || mThumbRect.pointInRect(local_mouse_x, local_mouse_y));
490 if (hovered)
491 {
492 mCurGlowStrength = lerp(mCurGlowStrength, mHoverGlowStrength, LLCriticalDamp::getInterpolant(0.05f));
493 }
494 else
495 {
496 mCurGlowStrength = lerp(mCurGlowStrength, 0.f, LLCriticalDamp::getInterpolant(0.05f));
497 }
498 487
499 488
500 // Draw background and thumb. 489 // Draw background and thumb.
501 LLUUID rounded_rect_image_id; 490 LLUIImage* rounded_rect_imagep = LLUI::sImageProvider->getUIImage("rounded_square.tga");
502 rounded_rect_image_id.set(LLUI::sAssetsGroup->getString("rounded_square.tga"));
503 LLImageGL* rounded_rect_imagep = LLUI::sImageProvider->getImageByID(rounded_rect_image_id);
504 491
505 if (!rounded_rect_imagep) 492 if (!rounded_rect_imagep)
506 { 493 {
507 gl_rect_2d(mOrientation == HORIZONTAL ? SCROLLBAR_SIZE : 0, 494 gl_rect_2d(mOrientation == HORIZONTAL ? SCROLLBAR_SIZE : 0,
508 mOrientation == VERTICAL ? getRect().getHeight() - 2 * SCROLLBAR_SIZE : getRect().getHeight(), 495 mOrientation == VERTICAL ? getRect().getHeight() - 2 * SCROLLBAR_SIZE : getRect().getHeight(),
509 mOrientation == HORIZONTAL ? getRect().getWidth() - 2 * SCROLLBAR_SIZE : getRect().getWidth(), 496 mOrientation == HORIZONTAL ? getRect().getWidth() - 2 * SCROLLBAR_SIZE : getRect().getWidth(),
510 mOrientation == VERTICAL ? SCROLLBAR_SIZE : 0, mTrackColor, TRUE); 497 mOrientation == VERTICAL ? SCROLLBAR_SIZE : 0, mTrackColor, TRUE);
511 498
512 gl_rect_2d(mThumbRect, mThumbColor, TRUE); 499 gl_rect_2d(mThumbRect, mThumbColor, TRUE);
513 500
514 } 501 }
515 else 502 else
516 { 503 {
517 // Background 504 // Thumb
518 gl_draw_scaled_image_with_border(mOrientation == HORIZONTAL ? SCROLLBAR_SIZE : 0, 505 LLRect outline_rect = mThumbRect;
519 mOrientation == VERTICAL ? SCROLLBAR_SIZE : 0, 506 outline_rect.stretch(2);
520 16,
521 16,
522 mOrientation == HORIZONTAL ? getRect().getWidth() - 2 * SCROLLBAR_SIZE : getRect().getWidth(),
523 mOrientation == VERTICAL ? getRect().getHeight() - 2 * SCROLLBAR_SIZE : getRect().getHeight(),
524 rounded_rect_imagep,
525 mTrackColor,
526 TRUE);
527
528 // Thumb
529 LLRect outline_rect = mThumbRect;
530 outline_rect.stretch(2);
531
532 if (gFocusMgr.getKeyboardFocus() == this)
533 {
534 gl_draw_scaled_image_with_border(outline_rect.mLeft, outline_rect.mBottom, 16, 16, outline_rect.getWidth(), outline_rect.getHeight(),
535 rounded_rect_imagep, gFocusMgr.getFocusColor() );
536 }
537 507
538 gl_draw_scaled_image_with_border(mThumbRect.mLeft, mThumbRect.mBottom, 16, 16, mThumbRect.getWidth(), mThumbRect.getHeight(), 508 if (gFocusMgr.getKeyboardFocus() == this)
539 rounded_rect_imagep, mThumbColor ); 509 {
540 if (mCurGlowStrength > 0.01f) 510 rounded_rect_imagep->draw(outline_rect, gFocusMgr.getFocusColor());
541 {
542 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE);
543 gl_draw_scaled_image_with_border(mThumbRect.mLeft, mThumbRect.mBottom, 16, 16, mThumbRect.getWidth(), mThumbRect.getHeight(),
544 rounded_rect_imagep, LLColor4(1.f, 1.f, 1.f, mCurGlowStrength), TRUE);
545 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
546 }
547 } 511 }
548 512
549 BOOL was_scrolled_to_bottom = (getDocPos() == getDocPosMax()); 513 rounded_rect_imagep->draw(mThumbRect, mThumbColor);
550 if (mOnScrollEndCallback && was_scrolled_to_bottom) 514 if (mCurGlowStrength > 0.01f)
551 { 515 {
552 mOnScrollEndCallback(mOnScrollEndData); 516 glBlendFunc(GL_SRC_ALPHA, GL_ONE);
517 rounded_rect_imagep->drawSolid(mThumbRect, LLColor4(1.f, 1.f, 1.f, mCurGlowStrength));
518 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
553 } 519 }
554 // Draw children 520
555 LLView::draw();
556 } 521 }
522
523 BOOL was_scrolled_to_bottom = (getDocPos() == getDocPosMax());
524 if (mOnScrollEndCallback && was_scrolled_to_bottom)
525 {
526 mOnScrollEndCallback(mOnScrollEndData);
527 }
528
529 // Draw children
530 LLView::draw();
557} // end draw 531} // end draw
558 532
559 533
@@ -582,42 +556,39 @@ void LLScrollbar::setValue(const LLSD& value)
582} 556}
583 557
584 558
585BOOL LLScrollbar::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent) 559BOOL LLScrollbar::handleKeyHere(KEY key, MASK mask)
586{ 560{
587 BOOL handled = FALSE; 561 BOOL handled = FALSE;
588 562
589 if( getVisible() && getEnabled() && !called_from_parent ) 563 switch( key )
590 { 564 {
591 switch( key ) 565 case KEY_HOME:
592 { 566 changeLine( -mDocPos, TRUE );
593 case KEY_HOME: 567 handled = TRUE;
594 changeLine( -mDocPos, TRUE ); 568 break;
595 handled = TRUE; 569
596 break; 570 case KEY_END:
597 571 changeLine( getDocPosMax() - mDocPos, TRUE );
598 case KEY_END: 572 handled = TRUE;
599 changeLine( getDocPosMax() - mDocPos, TRUE ); 573 break;
600 handled = TRUE; 574
601 break; 575 case KEY_DOWN:
602 576 changeLine( mStepSize, TRUE );
603 case KEY_DOWN: 577 handled = TRUE;
604 changeLine( mStepSize, TRUE ); 578 break;
605 handled = TRUE; 579
606 break; 580 case KEY_UP:
607 581 changeLine( - mStepSize, TRUE );
608 case KEY_UP: 582 handled = TRUE;
609 changeLine( - mStepSize, TRUE ); 583 break;
610 handled = TRUE; 584
611 break; 585 case KEY_PAGE_DOWN:
612 586 pageDown(1);
613 case KEY_PAGE_DOWN: 587 break;
614 pageDown(1); 588
615 break; 589 case KEY_PAGE_UP:
616 590 pageUp(1);
617 case KEY_PAGE_UP: 591 break;
618 pageUp(1);
619 break;
620 }
621 } 592 }
622 593
623 return handled; 594 return handled;
diff --git a/linden/indra/llui/llscrollbar.h b/linden/indra/llui/llscrollbar.h
index b4586c3..52f19d1 100644
--- a/linden/indra/llui/llscrollbar.h
+++ b/linden/indra/llui/llscrollbar.h
@@ -62,11 +62,8 @@ public:
62 62
63 virtual void setValue(const LLSD& value); 63 virtual void setValue(const LLSD& value);
64 64
65 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_SCROLLBAR; }
66 virtual LLString getWidgetTag() const { return LL_SCROLLBAR_TAG; }
67
68 // Overrides from LLView 65 // Overrides from LLView
69 virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); 66 virtual BOOL handleKeyHere(KEY key, MASK mask);
70 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); 67 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
71 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); 68 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
72 virtual BOOL handleHover(S32 x, S32 y, MASK mask); 69 virtual BOOL handleHover(S32 x, S32 y, MASK mask);
diff --git a/linden/indra/llui/llscrollcontainer.cpp b/linden/indra/llui/llscrollcontainer.cpp
index 15b59d4..a6c1c6d 100644
--- a/linden/indra/llui/llscrollcontainer.cpp
+++ b/linden/indra/llui/llscrollcontainer.cpp
@@ -61,6 +61,8 @@ static const F32 AUTO_SCROLL_RATE_ACCEL = 120.f;
61/// Class LLScrollableContainerView 61/// Class LLScrollableContainerView
62///---------------------------------------------------------------------------- 62///----------------------------------------------------------------------------
63 63
64static LLRegisterWidget<LLScrollableContainerView> r("scroll_container");
65
64// Default constructor 66// Default constructor
65LLScrollableContainerView::LLScrollableContainerView( const LLString& name, 67LLScrollableContainerView::LLScrollableContainerView( const LLString& name,
66 const LLRect& rect, 68 const LLRect& rect,
@@ -210,63 +212,33 @@ void LLScrollableContainerView::reshape(S32 width, S32 height,
210 } 212 }
211} 213}
212 214
213BOOL LLScrollableContainerView::handleKey( KEY key, MASK mask, BOOL called_from_parent ) 215BOOL LLScrollableContainerView::handleKeyHere(KEY key, MASK mask)
214{ 216{
215 if( getVisible() && getEnabled() ) 217 for( S32 i = 0; i < SCROLLBAR_COUNT; i++ )
216 { 218 {
217 if( called_from_parent ) 219 if( mScrollbar[i]->handleKeyHere(key, mask) )
218 {
219 // Downward traversal
220
221 // Don't pass keys to scrollbars on downward.
222
223 // Handle 'child' view.
224 if( mScrolledView && mScrolledView->handleKey(key, mask, TRUE) )
225 {
226 return TRUE;
227 }
228 }
229 else
230 { 220 {
231 // Upward traversal 221 return TRUE;
232
233 for( S32 i = 0; i < SCROLLBAR_COUNT; i++ )
234 {
235 // Note: the scrollbar _is_ actually being called from it's parent. Here
236 // we're delgating LLScrollableContainerView's upward traversal to the scrollbars
237 if( mScrollbar[i]->handleKey(key, mask, TRUE) )
238 {
239 return TRUE;
240 }
241 }
242
243 if (getParent())
244 {
245 return getParent()->handleKey( key, mask, FALSE );
246 }
247 } 222 }
248 } 223 }
249 224
250 return FALSE; 225 return FALSE;
251} 226}
252 227
253BOOL LLScrollableContainerView::handleScrollWheel( S32 x, S32 y, S32 clicks ) 228BOOL LLScrollableContainerView::handleScrollWheel( S32 x, S32 y, S32 clicks )
254{ 229{
255 if( getEnabled() ) 230 for( S32 i = 0; i < SCROLLBAR_COUNT; i++ )
256 { 231 {
257 for( S32 i = 0; i < SCROLLBAR_COUNT; i++ ) 232 // Note: tries vertical and then horizontal
258 {
259 // Note: tries vertical and then horizontal
260 233
261 // Pretend the mouse is over the scrollbar 234 // Pretend the mouse is over the scrollbar
262 if( mScrollbar[i]->handleScrollWheel( 0, 0, clicks ) ) 235 if( mScrollbar[i]->handleScrollWheel( 0, 0, clicks ) )
263 { 236 {
264 return TRUE; 237 return TRUE;
265 }
266 } 238 }
267 } 239 }
268 240
269 // Opaque 241 // Eat scroll wheel event (to avoid scrolling nested containers?)
270 return TRUE; 242 return TRUE;
271} 243}
272 244
@@ -446,80 +418,78 @@ void LLScrollableContainerView::draw()
446 // clear this flag to be set on next call to handleDragAndDrop 418 // clear this flag to be set on next call to handleDragAndDrop
447 mAutoScrolling = FALSE; 419 mAutoScrolling = FALSE;
448 420
449 if( getVisible() ) 421 // auto-focus when scrollbar active
422 // this allows us to capture user intent (i.e. stop automatically scrolling the view/etc)
423 if (!gFocusMgr.childHasKeyboardFocus(this) &&
424 (mScrollbar[VERTICAL]->hasMouseCapture() || mScrollbar[HORIZONTAL]->hasMouseCapture()))
450 { 425 {
451 // auto-focus when scrollbar active 426 focusFirstItem();
452 // this allows us to capture user intent (i.e. stop automatically scrolling the view/etc) 427 }
453 if (!gFocusMgr.childHasKeyboardFocus(this) &&
454 (mScrollbar[VERTICAL]->hasMouseCapture() || mScrollbar[HORIZONTAL]->hasMouseCapture()))
455 {
456 focusFirstItem();
457 }
458 428
459 // Draw background 429 // Draw background
460 if( mIsOpaque ) 430 if( mIsOpaque )
431 {
432 LLGLSNoTexture no_texture;
433 glColor4fv( mBackgroundColor.mV );
434 gl_rect_2d( mInnerRect );
435 }
436
437 // Draw mScrolledViews and update scroll bars.
438 // get a scissor region ready, and draw the scrolling view. The
439 // scissor region ensures that we don't draw outside of the bounds
440 // of the rectangle.
441 if( mScrolledView )
442 {
443 updateScroll();
444
445 // Draw the scrolled area.
461 { 446 {
462 LLGLSNoTexture no_texture; 447 S32 visible_width = 0;
463 gGL.color4fv( mBackgroundColor.mV ); 448 S32 visible_height = 0;
464 gl_rect_2d( mInnerRect ); 449 BOOL show_v_scrollbar = FALSE;
450 BOOL show_h_scrollbar = FALSE;
451 calcVisibleSize( mScrolledView->getRect(), &visible_width, &visible_height, &show_h_scrollbar, &show_v_scrollbar );
452
453 LLLocalClipRect clip(LLRect(mInnerRect.mLeft,
454 mInnerRect.mBottom + (show_h_scrollbar ? SCROLLBAR_SIZE : 0) + visible_height,
455 visible_width,
456 mInnerRect.mBottom + (show_h_scrollbar ? SCROLLBAR_SIZE : 0)
457 ));
458 drawChild(mScrolledView);
465 } 459 }
466 460 }
467 // Draw mScrolledViews and update scroll bars.
468 // get a scissor region ready, and draw the scrolling view. The
469 // scissor region ensures that we don't draw outside of the bounds
470 // of the rectangle.
471 if( mScrolledView )
472 {
473 updateScroll();
474 461
475 // Draw the scrolled area. 462 // Highlight border if a child of this container has keyboard focus
476 { 463 if( mBorder->getVisible() )
477 S32 visible_width = 0; 464 {
478 S32 visible_height = 0; 465 mBorder->setKeyboardFocusHighlight( gFocusMgr.childHasKeyboardFocus(this) );
479 BOOL show_v_scrollbar = FALSE; 466 }
480 BOOL show_h_scrollbar = FALSE;
481 calcVisibleSize( mScrolledView->getRect(), &visible_width, &visible_height, &show_h_scrollbar, &show_v_scrollbar );
482
483 LLLocalClipRect clip(LLRect(mInnerRect.mLeft,
484 mInnerRect.mBottom + (show_h_scrollbar ? SCROLLBAR_SIZE : 0) + visible_height,
485 visible_width,
486 mInnerRect.mBottom + (show_h_scrollbar ? SCROLLBAR_SIZE : 0)
487 ));
488 drawChild(mScrolledView);
489 }
490 }
491 467
492 // Highlight border if a child of this container has keyboard focus 468 // Draw all children except mScrolledView
493 if( mBorder->getVisible() ) 469 // Note: scrollbars have been adjusted by above drawing code
470 for (child_list_const_reverse_iter_t child_iter = getChildList()->rbegin();
471 child_iter != getChildList()->rend(); ++child_iter)
472 {
473 LLView *viewp = *child_iter;
474 if( sDebugRects )
494 { 475 {
495 mBorder->setKeyboardFocusHighlight( gFocusMgr.childHasKeyboardFocus(this) ); 476 sDepth++;
496 } 477 }
497 478 if( (viewp != mScrolledView) && viewp->getVisible() )
498 // Draw all children except mScrolledView
499 // Note: scrollbars have been adjusted by above drawing code
500 for (child_list_const_reverse_iter_t child_iter = getChildList()->rbegin();
501 child_iter != getChildList()->rend(); ++child_iter)
502 { 479 {
503 LLView *viewp = *child_iter; 480 drawChild(viewp);
504 if( sDebugRects )
505 {
506 sDepth++;
507 }
508 if( (viewp != mScrolledView) && viewp->getVisible() )
509 {
510 drawChild(viewp);
511 }
512 if( sDebugRects )
513 {
514 sDepth--;
515 }
516 } 481 }
517 482 if( sDebugRects )
518 if (sDebugRects)
519 { 483 {
520 drawDebugRect(); 484 sDepth--;
521 } 485 }
522 } 486 }
487
488 if (sDebugRects)
489 {
490 drawDebugRect();
491 }
492
523} // end draw 493} // end draw
524 494
525void LLScrollableContainerView::updateScroll() 495void LLScrollableContainerView::updateScroll()
diff --git a/linden/indra/llui/llscrollcontainer.h b/linden/indra/llui/llscrollcontainer.h
index 51b1527..b6999e6 100644
--- a/linden/indra/llui/llscrollcontainer.h
+++ b/linden/indra/llui/llscrollcontainer.h
@@ -70,8 +70,6 @@ public:
70 void setScrolledView(LLView* view) { mScrolledView = view; } 70 void setScrolledView(LLView* view) { mScrolledView = view; }
71 71
72 virtual void setValue(const LLSD& value) { mInnerRect.setValue(value); } 72 virtual void setValue(const LLSD& value) { mInnerRect.setValue(value); }
73 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_SCROLL_CONTAINER; }
74 virtual LLString getWidgetTag() const { return LL_SCROLLABLE_CONTAINER_VIEW_TAG; }
75 73
76 void calcVisibleSize( S32 *visible_width, S32 *visible_height, BOOL* show_h_scrollbar, BOOL* show_v_scrollbar ) const; 74 void calcVisibleSize( S32 *visible_width, S32 *visible_height, BOOL* show_h_scrollbar, BOOL* show_v_scrollbar ) const;
77 void calcVisibleSize( const LLRect& doc_rect, S32 *visible_width, S32 *visible_height, BOOL* show_h_scrollbar, BOOL* show_v_scrollbar ) const; 75 void calcVisibleSize( const LLRect& doc_rect, S32 *visible_width, S32 *visible_height, BOOL* show_h_scrollbar, BOOL* show_v_scrollbar ) const;
@@ -90,7 +88,7 @@ public:
90 88
91 // LLView functionality 89 // LLView functionality
92 virtual void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE); 90 virtual void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
93 virtual BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent); 91 virtual BOOL handleKeyHere(KEY key, MASK mask);
94 virtual BOOL handleScrollWheel( S32 x, S32 y, S32 clicks ); 92 virtual BOOL handleScrollWheel( S32 x, S32 y, S32 clicks );
95 virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, 93 virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
96 EDragAndDropType cargo_type, 94 EDragAndDropType cargo_type,
diff --git a/linden/indra/llui/llscrollingpanellist.cpp b/linden/indra/llui/llscrollingpanellist.cpp
index 8f85bc8..c9cdf3f 100644
--- a/linden/indra/llui/llscrollingpanellist.cpp
+++ b/linden/indra/llui/llscrollingpanellist.cpp
@@ -34,6 +34,9 @@
34 34
35#include "llscrollingpanellist.h" 35#include "llscrollingpanellist.h"
36 36
37static LLRegisterWidget<LLScrollingPanelList> r("scrolling_panel_list");
38
39
37///////////////////////////////////////////////////////////////////// 40/////////////////////////////////////////////////////////////////////
38// LLScrollingPanelList 41// LLScrollingPanelList
39 42
@@ -129,10 +132,8 @@ void LLScrollingPanelList::updatePanelVisiblilty()
129 132
130void LLScrollingPanelList::draw() 133void LLScrollingPanelList::draw()
131{ 134{
132 if( getVisible() ) 135 updatePanelVisiblilty();
133 { 136
134 updatePanelVisiblilty();
135 }
136 LLUICtrl::draw(); 137 LLUICtrl::draw();
137} 138}
138 139
diff --git a/linden/indra/llui/llscrollingpanellist.h b/linden/indra/llui/llscrollingpanellist.h
index 6fe35cd..7729250 100644
--- a/linden/indra/llui/llscrollingpanellist.h
+++ b/linden/indra/llui/llscrollingpanellist.h
@@ -56,8 +56,6 @@ public:
56 : LLUICtrl(name, rect, TRUE, NULL, NULL, FOLLOWS_LEFT | FOLLOWS_BOTTOM ) {} 56 : LLUICtrl(name, rect, TRUE, NULL, NULL, FOLLOWS_LEFT | FOLLOWS_BOTTOM ) {}
57 57
58 virtual void setValue(const LLSD& value) {}; 58 virtual void setValue(const LLSD& value) {};
59 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_SCROLLING_PANEL_LIST; }
60 virtual LLString getWidgetTag() const { return LL_SCROLLING_PANEL_LIST_TAG; }
61 59
62 virtual LLXMLNodePtr getXML(bool save_children) const { return LLUICtrl::getXML(); } 60 virtual LLXMLNodePtr getXML(bool save_children) const { return LLUICtrl::getXML(); }
63 61
diff --git a/linden/indra/llui/llscrolllistctrl.cpp b/linden/indra/llui/llscrolllistctrl.cpp
index 01c37d9..2066819 100644
--- a/linden/indra/llui/llscrolllistctrl.cpp
+++ b/linden/indra/llui/llscrolllistctrl.cpp
@@ -55,10 +55,11 @@
55#include "llkeyboard.h" 55#include "llkeyboard.h"
56#include "llresizebar.h" 56#include "llresizebar.h"
57 57
58const S32 LIST_BORDER_PAD = 0; // white space inside the border and to the left of the scrollbar
59const S32 MIN_COLUMN_WIDTH = 20; 58const S32 MIN_COLUMN_WIDTH = 20;
60const S32 LIST_SNAP_PADDING = 5; 59const S32 LIST_SNAP_PADDING = 5;
61 60
61static LLRegisterWidget<LLScrollListCtrl> r("scroll_list");
62
62// local structures & classes. 63// local structures & classes.
63struct SortScrollListItem 64struct SortScrollListItem
64{ 65{
@@ -68,37 +69,26 @@ struct SortScrollListItem
68 69
69 bool operator()(const LLScrollListItem* i1, const LLScrollListItem* i2) 70 bool operator()(const LLScrollListItem* i1, const LLScrollListItem* i2)
70 { 71 {
71 if ( mSortOrders.empty() ) return true; 72 if ( mSortOrders.empty() )
72 73 return i1 < i2;
73 const LLScrollListCell *cell1 = NULL;
74 const LLScrollListCell *cell2 = NULL;
75
76 sort_order_t::const_reverse_iterator end_it = mSortOrders.rend();
77 sort_order_t::const_reverse_iterator it;
78 74
79 // sort over all columns in order specified by mSortOrders 75 // sort over all columns in order specified by mSortOrders
80 S32 sort_result = 0; 76 S32 sort_result = 0;
81 for (it = mSortOrders.rbegin(); it != end_it; ++it) 77 for (sort_order_t::const_reverse_iterator it = mSortOrders.rbegin();
78 it != mSortOrders.rend(); ++it)
82 { 79 {
83 S32 col_idx = it->first; 80 S32 col_idx = it->first;
84 BOOL sort_ascending = it->second; 81 BOOL sort_ascending = it->second;
85 82
86 cell1 = i1->getColumn(col_idx); 83 const LLScrollListCell *cell1 = i1->getColumn(col_idx);
87 cell2 = i2->getColumn(col_idx); 84 const LLScrollListCell *cell2 = i2->getColumn(col_idx);
88 // ascending or descending sort for this column? 85 S32 order = sort_ascending ? 1 : -1; // ascending or descending sort for this column?
89 S32 order = 1;
90 if (!sort_ascending)
91 {
92 order = -1;
93 }
94
95 if (cell1 && cell2) 86 if (cell1 && cell2)
96 { 87 {
97 sort_result = (order * LLString::compareDict(cell1->getValue().asString(), cell2->getValue().asString())); 88 sort_result = order * LLString::compareDict(cell1->getValue().asString(), cell2->getValue().asString());
98 if (sort_result != 0) 89 if (sort_result != 0)
99 { 90 {
100 // we have a sort order! 91 break; // we have a sort order!
101 break;
102 } 92 }
103 } 93 }
104 } 94 }
@@ -114,24 +104,49 @@ struct SortScrollListItem
114// 104//
115// LLScrollListIcon 105// LLScrollListIcon
116// 106//
117LLScrollListIcon::LLScrollListIcon(const LLUUID& icon_id, S32 width) 107LLScrollListIcon::LLScrollListIcon(LLUIImagePtr icon, S32 width)
108 : LLScrollListCell(width),
109 mIcon(icon),
110 mColor(LLColor4::white)
111{
112}
113
114LLScrollListIcon::LLScrollListIcon(const LLSD& value, S32 width)
118 : LLScrollListCell(width), 115 : LLScrollListCell(width),
119 mColor(LLColor4::white), 116 mColor(LLColor4::white)
120 mImageUUID(icon_id)
121{ 117{
122 // don't use default image specified by LLUUID::null, use no image in that case 118 setValue(value);
123 mIcon = icon_id.isNull() ? NULL : LLUI::sImageProvider->getImageByID(icon_id);
124} 119}
125 120
121
126LLScrollListIcon::~LLScrollListIcon() 122LLScrollListIcon::~LLScrollListIcon()
127{ 123{
128} 124}
129 125
130void LLScrollListIcon::setValue(const LLSD& value) 126void LLScrollListIcon::setValue(const LLSD& value)
131{ 127{
132 mImageUUID = value.asUUID(); 128 if (value.isUUID())
133 // don't use default image specified by LLUUID::null, use no image in that case 129 {
134 mIcon = mImageUUID.isNull() ? NULL : LLUI::sImageProvider->getImageByID(mImageUUID); 130 // don't use default image specified by LLUUID::null, use no image in that case
131 LLUUID image_id = value.asUUID();
132 mIcon = image_id.notNull() ? LLUI::sImageProvider->getUIImageByID(image_id) : LLUIImagePtr(NULL);
133 }
134 else
135 {
136 LLString value_string = value.asString();
137 if (LLUUID::validate(value_string))
138 {
139 setValue(LLUUID(value_string));
140 }
141 else if (!value_string.empty())
142 {
143 mIcon = LLUI::getUIImage(value.asString());
144 }
145 else
146 {
147 mIcon = NULL;
148 }
149 }
135} 150}
136 151
137 152
@@ -143,7 +158,7 @@ void LLScrollListIcon::setColor(const LLColor4& color)
143S32 LLScrollListIcon::getWidth() const 158S32 LLScrollListIcon::getWidth() const
144{ 159{
145 // if no specified fix width, use width of icon 160 // if no specified fix width, use width of icon
146 if (LLScrollListCell::getWidth() == 0) 161 if (LLScrollListCell::getWidth() == 0 && mIcon.notNull())
147 { 162 {
148 return mIcon->getWidth(); 163 return mIcon->getWidth();
149 } 164 }
@@ -151,11 +166,11 @@ S32 LLScrollListIcon::getWidth() const
151} 166}
152 167
153 168
154void LLScrollListIcon::draw(const LLColor4& color, const LLColor4& highlight_color) const 169void LLScrollListIcon::draw(const LLColor4& color, const LLColor4& highlight_color) const
155{ 170{
156 if (mIcon) 171 if (mIcon)
157 { 172 {
158 gl_draw_image(0, 0, mIcon, mColor); 173 mIcon->draw(0, 0, mColor);
159 } 174 }
160} 175}
161 176
@@ -206,6 +221,13 @@ LLScrollListSeparator::LLScrollListSeparator(S32 width) : LLScrollListCell(width
206{ 221{
207} 222}
208 223
224//virtual
225S32 LLScrollListSeparator::getHeight() const
226{
227 return 5;
228}
229
230
209void LLScrollListSeparator::draw(const LLColor4& color, const LLColor4& highlight_color) const 231void LLScrollListSeparator::draw(const LLColor4& color, const LLColor4& highlight_color) const
210{ 232{
211 //*FIXME: use dynamic item heights and make separators narrow, and inactive 233 //*FIXME: use dynamic item heights and make separators narrow, and inactive
@@ -234,9 +256,34 @@ LLScrollListText::LLScrollListText( const LLString& text, const LLFontGL* font,
234 // initialize rounded rect image 256 // initialize rounded rect image
235 if (!mRoundedRectImage) 257 if (!mRoundedRectImage)
236 { 258 {
237 mRoundedRectImage = LLUI::sImageProvider->getImageByID(LLUUID(LLUI::sAssetsGroup->getString("rounded_square.tga"))); 259 mRoundedRectImage = LLUI::sImageProvider->getUIImage("rounded_square.tga");
238 } 260 }
239} 261}
262//virtual
263void LLScrollListText::highlightText(S32 offset, S32 num_chars)
264{
265 mHighlightOffset = offset;
266 mHighlightCount = num_chars;
267}
268
269//virtual
270BOOL LLScrollListText::isText() const
271{
272 return TRUE;
273}
274
275//virtual
276BOOL LLScrollListText::getVisible() const
277{
278 return mVisible;
279}
280
281//virtual
282S32 LLScrollListText::getHeight() const
283{
284 return llround(mFont->getLineHeight());
285}
286
240 287
241LLScrollListText::~LLScrollListText() 288LLScrollListText::~LLScrollListText()
242{ 289{
@@ -266,6 +313,13 @@ void LLScrollListText::setValue(const LLSD& text)
266 setText(text.asString()); 313 setText(text.asString());
267} 314}
268 315
316//virtual
317const LLSD LLScrollListText::getValue() const
318{
319 return LLSD(mText.getString());
320}
321
322
269void LLScrollListText::draw(const LLColor4& color, const LLColor4& highlight_color) const 323void LLScrollListText::draw(const LLColor4& color, const LLColor4& highlight_color) const
270{ 324{
271 LLColor4 display_color; 325 LLColor4 display_color;
@@ -280,8 +334,6 @@ void LLScrollListText::draw(const LLColor4& color, const LLColor4& highlight_col
280 334
281 if (mHighlightCount > 0) 335 if (mHighlightCount > 0)
282 { 336 {
283 mRoundedRectImage->bind();
284 gGL.color4fv(highlight_color.mV);
285 S32 left = 0; 337 S32 left = 0;
286 switch(mFontAlignment) 338 switch(mFontAlignment)
287 { 339 {
@@ -295,13 +347,11 @@ void LLScrollListText::draw(const LLColor4& color, const LLColor4& highlight_col
295 left = (getWidth() - mFont->getWidth(mText.getString())) / 2; 347 left = (getWidth() - mFont->getWidth(mText.getString())) / 2;
296 break; 348 break;
297 } 349 }
298 gl_segmented_rect_2d_tex(left - 2, 350 LLRect highlight_rect(left - 2,
299 llround(mFont->getLineHeight()) + 1, 351 llround(mFont->getLineHeight()) + 1,
300 left + mFont->getWidth(mText.getString(), mHighlightOffset, mHighlightCount) + 1, 352 left + mFont->getWidth(mText.getString(), mHighlightOffset, mHighlightCount) + 1,
301 1, 353 1);
302 mRoundedRectImage->getWidth(), 354 mRoundedRectImage->draw(highlight_rect, highlight_color);
303 mRoundedRectImage->getHeight(),
304 16);
305 } 355 }
306 356
307 // Try to draw the entire string 357 // Try to draw the entire string
@@ -389,8 +439,6 @@ void LLScrollListItem::draw(const LLRect& rect, const LLColor4& fg_color, const
389{ 439{
390 // draw background rect 440 // draw background rect
391 LLRect bg_rect = rect; 441 LLRect bg_rect = rect;
392 // pad background rectangle to separate it from contents
393 bg_rect.stretch(LIST_BORDER_PAD, 0);
394 { 442 {
395 LLGLSNoTexture no_texture; 443 LLGLSNoTexture no_texture;
396 gGL.color4fv(bg_color.mV); 444 gGL.color4fv(bg_color.mV);
@@ -432,7 +480,7 @@ LLScrollListItemComment::LLScrollListItemComment(const LLString& comment_string,
432: LLScrollListItem(FALSE), 480: LLScrollListItem(FALSE),
433 mColor(color) 481 mColor(color)
434{ 482{
435 addColumn( comment_string, gResMgr->getRes( LLFONT_SANSSERIF_SMALL ) ); 483 addColumn( comment_string, LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF_SMALL ) );
436} 484}
437 485
438void LLScrollListItemComment::draw(const LLRect& rect, const LLColor4& fg_color, const LLColor4& bg_color, const LLColor4& highlight_color, S32 column_padding) 486void LLScrollListItemComment::draw(const LLRect& rect, const LLColor4& fg_color, const LLColor4& bg_color, const LLColor4& highlight_color, S32 column_padding)
@@ -541,10 +589,10 @@ LLScrollListCtrl::LLScrollListCtrl(const LLString& name, const LLRect& rect,
541 mDrewSelected(FALSE) 589 mDrewSelected(FALSE)
542{ 590{
543 mItemListRect.setOriginAndSize( 591 mItemListRect.setOriginAndSize(
544 mBorderThickness + LIST_BORDER_PAD, 592 mBorderThickness,
545 mBorderThickness + LIST_BORDER_PAD, 593 mBorderThickness,
546 getRect().getWidth() - 2*( mBorderThickness + LIST_BORDER_PAD ), 594 getRect().getWidth() - 2 * mBorderThickness,
547 getRect().getHeight() - 2*( mBorderThickness + LIST_BORDER_PAD ) ); 595 getRect().getHeight() - 2 * mBorderThickness );
548 596
549 updateLineHeight(); 597 updateLineHeight();
550 598
@@ -738,10 +786,10 @@ void LLScrollListCtrl::updateLayout()
738 // reserve room for column headers, if needed 786 // reserve room for column headers, if needed
739 S32 heading_size = (mDisplayColumnHeaders ? mHeadingHeight : 0); 787 S32 heading_size = (mDisplayColumnHeaders ? mHeadingHeight : 0);
740 mItemListRect.setOriginAndSize( 788 mItemListRect.setOriginAndSize(
741 mBorderThickness + LIST_BORDER_PAD, 789 mBorderThickness,
742 mBorderThickness + LIST_BORDER_PAD, 790 mBorderThickness,
743 getRect().getWidth() - 2*( mBorderThickness + LIST_BORDER_PAD ), 791 getRect().getWidth() - 2 * mBorderThickness,
744 getRect().getHeight() - 2*( mBorderThickness + LIST_BORDER_PAD ) - heading_size ); 792 getRect().getHeight() - (2 * mBorderThickness ) - heading_size );
745 793
746 // how many lines of content in a single "page" 794 // how many lines of content in a single "page"
747 mPageLines = mLineHeight? mItemListRect.getHeight() / mLineHeight : 0; 795 mPageLines = mLineHeight? mItemListRect.getHeight() / mLineHeight : 0;
@@ -749,7 +797,7 @@ void LLScrollListCtrl::updateLayout()
749 if (scrollbar_visible) 797 if (scrollbar_visible)
750 { 798 {
751 // provide space on the right for scrollbar 799 // provide space on the right for scrollbar
752 mItemListRect.mRight = getRect().getWidth() - ( mBorderThickness + LIST_BORDER_PAD ) - SCROLLBAR_SIZE; 800 mItemListRect.mRight = getRect().getWidth() - mBorderThickness - SCROLLBAR_SIZE;
753 } 801 }
754 802
755 mScrollbar->reshape(SCROLLBAR_SIZE, mItemListRect.getHeight() + (mDisplayColumnHeaders ? mHeadingHeight : 0)); 803 mScrollbar->reshape(SCROLLBAR_SIZE, mItemListRect.getHeight() + (mDisplayColumnHeaders ? mHeadingHeight : 0));
@@ -775,7 +823,7 @@ LLRect LLScrollListCtrl::getRequiredRect()
775{ 823{
776 S32 heading_size = (mDisplayColumnHeaders ? mHeadingHeight : 0); 824 S32 heading_size = (mDisplayColumnHeaders ? mHeadingHeight : 0);
777 S32 height = (mLineHeight * getItemCount()) 825 S32 height = (mLineHeight * getItemCount())
778 + (2 * ( mBorderThickness + LIST_BORDER_PAD )) 826 + (2 * mBorderThickness )
779 + heading_size; 827 + heading_size;
780 S32 width = getRect().getWidth(); 828 S32 width = getRect().getWidth();
781 829
@@ -1357,7 +1405,6 @@ LLScrollListItem* LLScrollListCtrl::addCommentText(const LLString& comment_text,
1357 LLScrollListItem* item = NULL; 1405 LLScrollListItem* item = NULL;
1358 if (getItemCount() < mMaxItemCount) 1406 if (getItemCount() < mMaxItemCount)
1359 { 1407 {
1360 // simple items have their LLSD data set to their label
1361 // always draw comment text with "enabled" color 1408 // always draw comment text with "enabled" color
1362 item = new LLScrollListItemComment( comment_text, mFgUnselectedColor ); 1409 item = new LLScrollListItemComment( comment_text, mFgUnselectedColor );
1363 addItem( item, pos, FALSE ); 1410 addItem( item, pos, FALSE );
@@ -1525,7 +1572,7 @@ LLScrollListItem* LLScrollListCtrl::addStringUUIDItem(const LLString& item_text,
1525 if (getItemCount() < mMaxItemCount) 1572 if (getItemCount() < mMaxItemCount)
1526 { 1573 {
1527 item = new LLScrollListItem( enabled, NULL, id ); 1574 item = new LLScrollListItem( enabled, NULL, id );
1528 item->addColumn(item_text, gResMgr->getRes(LLFONT_SANSSERIF_SMALL), column_width); 1575 item->addColumn(item_text, LLResMgr::getInstance()->getRes(LLFONT_SANSSERIF_SMALL), column_width);
1529 addItem( item, pos ); 1576 addItem( item, pos );
1530 } 1577 }
1531 return item; 1578 return item;
@@ -1664,7 +1711,6 @@ void LLScrollListCtrl::drawItems()
1664 fg_color = (item->getEnabled() ? mFgUnselectedColor : mFgDisabledColor); 1711 fg_color = (item->getEnabled() ? mFgUnselectedColor : mFgDisabledColor);
1665 if( item->getSelected() && mCanSelect) 1712 if( item->getSelected() && mCanSelect)
1666 { 1713 {
1667 // Draw background of selected item
1668 bg_color = mBgSelectedColor; 1714 bg_color = mBgSelectedColor;
1669 fg_color = (item->getEnabled() ? mFgSelectedColor : mFgDisabledColor); 1715 fg_color = (item->getEnabled() ? mFgSelectedColor : mFgDisabledColor);
1670 } 1716 }
@@ -1697,43 +1743,40 @@ void LLScrollListCtrl::drawItems()
1697 1743
1698void LLScrollListCtrl::draw() 1744void LLScrollListCtrl::draw()
1699{ 1745{
1700 if( getVisible() ) 1746 // if user specifies sort, make sure it is maintained
1747 if (needsSorting() && !isSorted())
1701 { 1748 {
1702 // if user specifies sort, make sure it is maintained 1749 sortItems();
1703 if (needsSorting() && !isSorted()) 1750 }
1704 {
1705 sortItems();
1706 }
1707
1708 if (mNeedsScroll)
1709 {
1710 scrollToShowSelected();
1711 mNeedsScroll = FALSE;
1712 }
1713 LLRect background(0, getRect().getHeight(), getRect().getWidth(), 0);
1714 // Draw background
1715 if (mBackgroundVisible)
1716 {
1717 LLGLSNoTexture no_texture;
1718 gGL.color4fv( getEnabled() ? mBgWriteableColor.mV : mBgReadOnlyColor.mV );
1719 gl_rect_2d(background);
1720 }
1721 1751
1722 if (mColumnsDirty) 1752 if (mNeedsScroll)
1723 { 1753 {
1724 updateColumns(); 1754 scrollToShowSelected();
1725 mColumnsDirty = FALSE; 1755 mNeedsScroll = FALSE;
1726 } 1756 }
1757 LLRect background(0, getRect().getHeight(), getRect().getWidth(), 0);
1758 // Draw background
1759 if (mBackgroundVisible)
1760 {
1761 LLGLSNoTexture no_texture;
1762 glColor4fv( getEnabled() ? mBgWriteableColor.mV : mBgReadOnlyColor.mV );
1763 gl_rect_2d(background);
1764 }
1727 1765
1728 drawItems(); 1766 if (mColumnsDirty)
1767 {
1768 updateColumns();
1769 mColumnsDirty = FALSE;
1770 }
1729 1771
1730 if (mBorder) 1772 drawItems();
1731 {
1732 mBorder->setKeyboardFocusHighlight(gFocusMgr.getKeyboardFocus() == this);
1733 }
1734 1773
1735 LLUICtrl::draw(); 1774 if (mBorder)
1775 {
1776 mBorder->setKeyboardFocusHighlight(gFocusMgr.getKeyboardFocus() == this);
1736 } 1777 }
1778
1779 LLUICtrl::draw();
1737} 1780}
1738 1781
1739void LLScrollListCtrl::setEnabled(BOOL enabled) 1782void LLScrollListCtrl::setEnabled(BOOL enabled)
@@ -1950,23 +1993,21 @@ BOOL LLScrollListCtrl::handleMouseUp(S32 x, S32 y, MASK mask)
1950BOOL LLScrollListCtrl::handleDoubleClick(S32 x, S32 y, MASK mask) 1993BOOL LLScrollListCtrl::handleDoubleClick(S32 x, S32 y, MASK mask)
1951{ 1994{
1952 //BOOL handled = FALSE; 1995 //BOOL handled = FALSE;
1953 if(getVisible()) 1996 BOOL handled = handleClick(x, y, mask);
1954 {
1955 BOOL handled = handleClick(x, y, mask);
1956 1997
1957 if (!handled) 1998 if (!handled)
1999 {
2000 // Offer the click to the children, even if we aren't enabled
2001 // so the scroll bars will work.
2002 if (NULL == LLView::childrenHandleDoubleClick(x, y, mask))
1958 { 2003 {
1959 // Offer the click to the children, even if we aren't enabled 2004 if( mCanSelect && mOnDoubleClickCallback )
1960 // so the scroll bars will work.
1961 if (NULL == LLView::childrenHandleDoubleClick(x, y, mask))
1962 { 2005 {
1963 if( mCanSelect && mOnDoubleClickCallback ) 2006 mOnDoubleClickCallback( mCallbackUserData );
1964 {
1965 mOnDoubleClickCallback( mCallbackUserData );
1966 }
1967 } 2007 }
1968 } 2008 }
1969 } 2009 }
2010
1970 return TRUE; 2011 return TRUE;
1971} 2012}
1972 2013
@@ -2146,12 +2187,12 @@ BOOL LLScrollListCtrl::handleHover(S32 x,S32 y,MASK mask)
2146} 2187}
2147 2188
2148 2189
2149BOOL LLScrollListCtrl::handleKeyHere(KEY key,MASK mask, BOOL called_from_parent ) 2190BOOL LLScrollListCtrl::handleKeyHere(KEY key,MASK mask )
2150{ 2191{
2151 BOOL handled = FALSE; 2192 BOOL handled = FALSE;
2152 2193
2153 // not called from parent means we have keyboard focus or a child does 2194 // not called from parent means we have keyboard focus or a child does
2154 if (mCanSelect && !called_from_parent) 2195 if (mCanSelect)
2155 { 2196 {
2156 // Ignore capslock 2197 // Ignore capslock
2157 mask = mask; 2198 mask = mask;
@@ -2234,7 +2275,7 @@ BOOL LLScrollListCtrl::handleKeyHere(KEY key,MASK mask, BOOL called_from_parent
2234 // JC - Special case: Only claim to have handled it 2275 // JC - Special case: Only claim to have handled it
2235 // if we're the special non-commit-on-move 2276 // if we're the special non-commit-on-move
2236 // type. AND we are visible 2277 // type. AND we are visible
2237 if (!mCommitOnKeyboardMovement && mask == MASK_NONE && getVisible()) 2278 if (!mCommitOnKeyboardMovement && mask == MASK_NONE)
2238 { 2279 {
2239 onCommit(); 2280 onCommit();
2240 mSearchString.clear(); 2281 mSearchString.clear();
@@ -2281,7 +2322,7 @@ BOOL LLScrollListCtrl::handleKeyHere(KEY key,MASK mask, BOOL called_from_parent
2281 return handled; 2322 return handled;
2282} 2323}
2283 2324
2284BOOL LLScrollListCtrl::handleUnicodeCharHere(llwchar uni_char, BOOL called_from_parent) 2325BOOL LLScrollListCtrl::handleUnicodeCharHere(llwchar uni_char)
2285{ 2326{
2286 if ((uni_char < 0x20) || (uni_char == 0x7F)) // Control character or DEL 2327 if ((uni_char < 0x20) || (uni_char == 0x7F)) // Control character or DEL
2287 { 2328 {
@@ -3207,17 +3248,16 @@ LLScrollListItem* LLScrollListCtrl::addElement(const LLSD& value, EAddPosition p
3207 LLColor4 color = ((*itor)["color"]); 3248 LLColor4 color = ((*itor)["color"]);
3208 BOOL enabled = !(*itor).has("enabled") || (*itor)["enabled"].asBoolean() == true; 3249 BOOL enabled = !(*itor).has("enabled") || (*itor)["enabled"].asBoolean() == true;
3209 3250
3210 const LLFontGL *font = gResMgr->getRes(fontname); 3251 const LLFontGL *font = LLResMgr::getInstance()->getRes(fontname);
3211 if (!font) 3252 if (!font)
3212 { 3253 {
3213 font = gResMgr->getRes( LLFONT_SANSSERIF_SMALL ); 3254 font = LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF_SMALL );
3214 } 3255 }
3215 U8 font_style = LLFontGL::getStyleFromString(fontstyle); 3256 U8 font_style = LLFontGL::getStyleFromString(fontstyle);
3216 3257
3217 if (type == "icon") 3258 if (type == "icon")
3218 { 3259 {
3219 LLUUID image_id = value.asUUID(); 3260 LLScrollListIcon* cell = new LLScrollListIcon(value, width);
3220 LLScrollListIcon* cell = new LLScrollListIcon(value.asUUID(), width);
3221 if (has_color) 3261 if (has_color)
3222 { 3262 {
3223 cell->setColor(color); 3263 cell->setColor(color);
@@ -3270,7 +3310,7 @@ LLScrollListItem* LLScrollListCtrl::addElement(const LLSD& value, EAddPosition p
3270 if (new_item->getColumn(column_idx) == NULL) 3310 if (new_item->getColumn(column_idx) == NULL)
3271 { 3311 {
3272 LLScrollListColumn* column_ptr = &column_it->second; 3312 LLScrollListColumn* column_ptr = &column_it->second;
3273 new_item->setColumn(column_idx, new LLScrollListText("", gResMgr->getRes( LLFONT_SANSSERIF_SMALL ), column_ptr->mWidth, LLFontGL::NORMAL)); 3313 new_item->setColumn(column_idx, new LLScrollListText("", LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF_SMALL ), column_ptr->mWidth, LLFontGL::NORMAL));
3274 } 3314 }
3275 } 3315 }
3276 3316
@@ -3290,7 +3330,7 @@ LLScrollListItem* LLScrollListCtrl::addSimpleElement(const LLString& value, EAdd
3290 3330
3291 LLScrollListItem *new_item = new LLScrollListItem(entry_id); 3331 LLScrollListItem *new_item = new LLScrollListItem(entry_id);
3292 3332
3293 const LLFontGL *font = gResMgr->getRes( LLFONT_SANSSERIF_SMALL ); 3333 const LLFontGL *font = LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF_SMALL );
3294 3334
3295 new_item->addColumn(value, font, getRect().getWidth()); 3335 new_item->addColumn(value, font, getRect().getWidth());
3296 3336
@@ -3438,29 +3478,25 @@ LLColumnHeader::~LLColumnHeader()
3438 3478
3439void LLColumnHeader::draw() 3479void LLColumnHeader::draw()
3440{ 3480{
3441 if( getVisible() ) 3481 BOOL draw_arrow = !mColumn->mLabel.empty() && mColumn->mParentCtrl->isSorted() && mColumn->mParentCtrl->getSortColumnName() == mColumn->mSortingColumn;
3442 {
3443 BOOL draw_arrow = !mColumn->mLabel.empty() && mColumn->mParentCtrl->isSorted() && mColumn->mParentCtrl->getSortColumnName() == mColumn->mSortingColumn;
3444 3482
3445 BOOL is_ascending = mColumn->mParentCtrl->getSortAscending(); 3483 BOOL is_ascending = mColumn->mParentCtrl->getSortAscending();
3446 mButton->setImageOverlay(is_ascending ? "up_arrow.tga" : "down_arrow.tga", LLFontGL::RIGHT, draw_arrow ? LLColor4::white : LLColor4::transparent); 3484 mButton->setImageOverlay(is_ascending ? "up_arrow.tga" : "down_arrow.tga", LLFontGL::RIGHT, draw_arrow ? LLColor4::white : LLColor4::transparent);
3447 mArrowImage = mButton->getImageOverlay()->getImage(); 3485 mArrowImage = mButton->getImageOverlay();
3448 3486
3449 //BOOL clip = getRect().mRight > mColumn->mParentCtrl->getItemListRect().getWidth(); 3487 //BOOL clip = getRect().mRight > mColumn->mParentCtrl->getItemListRect().getWidth();
3450 //LLGLEnable scissor_test(clip ? GL_SCISSOR_TEST : GL_FALSE); 3488 //LLGLEnable scissor_test(clip ? GL_SCISSOR_TEST : GL_FALSE);
3451 3489
3452 //LLRect column_header_local_rect(-getRect().mLeft, getRect().getHeight(), mColumn->mParentCtrl->getItemListRect().getWidth() - getRect().mLeft, 0); 3490 //LLRect column_header_local_rect(-getRect().mLeft, getRect().getHeight(), mColumn->mParentCtrl->getItemListRect().getWidth() - getRect().mLeft, 0);
3453 //LLUI::setScissorRegionLocal(column_header_local_rect); 3491 //LLUI::setScissorRegionLocal(column_header_local_rect);
3454 3492
3455 // Draw children 3493 // Draw children
3456 LLComboBox::draw(); 3494 LLComboBox::draw();
3457
3458 if (mList->getVisible())
3459 {
3460 // sync sort order with list selection every frame
3461 mColumn->mParentCtrl->sortByColumn(mColumn->mSortingColumn, getCurrentIndex() == 0);
3462 }
3463 3495
3496 if (mList->getVisible())
3497 {
3498 // sync sort order with list selection every frame
3499 mColumn->mParentCtrl->sortByColumn(mColumn->mSortingColumn, getCurrentIndex() == 0);
3464 } 3500 }
3465} 3501}
3466 3502
diff --git a/linden/indra/llui/llscrolllistctrl.h b/linden/indra/llui/llscrolllistctrl.h
index 716d18a..8a31154 100644
--- a/linden/indra/llui/llscrolllistctrl.h
+++ b/linden/indra/llui/llscrolllistctrl.h
@@ -90,7 +90,7 @@ public:
90 LLScrollListSeparator(S32 width); 90 LLScrollListSeparator(S32 width);
91 virtual ~LLScrollListSeparator() {}; 91 virtual ~LLScrollListSeparator() {};
92 virtual void draw(const LLColor4& color, const LLColor4& highlight_color) const; // truncate to given width, if possible 92 virtual void draw(const LLColor4& color, const LLColor4& highlight_color) const; // truncate to given width, if possible
93 virtual S32 getHeight() const { return 5; }; 93 virtual S32 getHeight() const;
94 virtual BOOL isText() const { return FALSE; } 94 virtual BOOL isText() const { return FALSE; }
95}; 95};
96 96
@@ -105,14 +105,14 @@ public:
105 105
106 virtual void draw(const LLColor4& color, const LLColor4& highlight_color) const; 106 virtual void draw(const LLColor4& color, const LLColor4& highlight_color) const;
107 virtual S32 getContentWidth() const; 107 virtual S32 getContentWidth() const;
108 virtual S32 getHeight() const { return llround(mFont->getLineHeight()); } 108 virtual S32 getHeight() const;
109 virtual void setValue(const LLSD& value); 109 virtual void setValue(const LLSD& value);
110 virtual const LLSD getValue() const { return LLSD(mText.getString()); } 110 virtual const LLSD getValue() const;
111 virtual BOOL getVisible() const { return mVisible; } 111 virtual BOOL getVisible() const;
112 virtual void highlightText(S32 offset, S32 num_chars) {mHighlightOffset = offset; mHighlightCount = num_chars;} 112 virtual void highlightText(S32 offset, S32 num_chars);
113 113
114 virtual void setColor(const LLColor4&); 114 virtual void setColor(const LLColor4&);
115 virtual BOOL isText() const { return TRUE; } 115 virtual BOOL isText() const;
116 116
117 void setText(const LLStringExplicit& text); 117 void setText(const LLStringExplicit& text);
118 void setFontStyle(const U8 font_style) { mFontStyle = font_style; } 118 void setFontStyle(const U8 font_style) { mFontStyle = font_style; }
@@ -128,7 +128,7 @@ private:
128 S32 mHighlightCount; 128 S32 mHighlightCount;
129 S32 mHighlightOffset; 129 S32 mHighlightOffset;
130 130
131 LLPointer<LLImageGL> mRoundedRectImage; 131 LLPointer<LLUIImage> mRoundedRectImage;
132 132
133 static U32 sCount; 133 static U32 sCount;
134}; 134};
@@ -139,20 +139,19 @@ private:
139class LLScrollListIcon : public LLScrollListCell 139class LLScrollListIcon : public LLScrollListCell
140{ 140{
141public: 141public:
142 LLScrollListIcon( const LLUUID& icon_id, S32 width = 0); 142 LLScrollListIcon( LLUIImagePtr icon, S32 width = 0);
143 LLScrollListIcon(const LLSD& value, S32 width = 0);
143 /*virtual*/ ~LLScrollListIcon(); 144 /*virtual*/ ~LLScrollListIcon();
144 virtual void draw(const LLColor4& color, const LLColor4& highlight_color) const; 145 virtual void draw(const LLColor4& color, const LLColor4& highlight_color) const;
145 virtual S32 getWidth() const; 146 virtual S32 getWidth() const;
146 virtual S32 getHeight() const { return mIcon ? mIcon->getHeight() : 0; } 147 virtual S32 getHeight() const { return mIcon ? mIcon->getHeight() : 0; }
147 // used as sort criterion 148 virtual const LLSD getValue() const { return mIcon.isNull() ? LLString::null : mIcon->getName(); }
148 virtual const LLSD getValue() const { return LLSD(mImageUUID); }
149 virtual void setColor(const LLColor4&); 149 virtual void setColor(const LLColor4&);
150 virtual BOOL isText()const { return FALSE; } 150 virtual BOOL isText()const { return FALSE; }
151 virtual void setValue(const LLSD& value); 151 virtual void setValue(const LLSD& value);
152 152
153private: 153private:
154 LLPointer<LLImageGL> mIcon; 154 LLUIImagePtr mIcon;
155 LLUUID mImageUUID;
156 LLColor4 mColor; 155 LLColor4 mColor;
157}; 156};
158 157
@@ -342,8 +341,8 @@ public:
342 void addColumn( const LLString& text, const LLFontGL* font, S32 width = 0 , U8 font_style = LLFontGL::NORMAL, LLFontGL::HAlign font_alignment = LLFontGL::LEFT, BOOL visible = TRUE) 341 void addColumn( const LLString& text, const LLFontGL* font, S32 width = 0 , U8 font_style = LLFontGL::NORMAL, LLFontGL::HAlign font_alignment = LLFontGL::LEFT, BOOL visible = TRUE)
343 { mColumns.push_back( new LLScrollListText(text, font, width, font_style, font_alignment, LLColor4::black, FALSE, visible) ); } 342 { mColumns.push_back( new LLScrollListText(text, font, width, font_style, font_alignment, LLColor4::black, FALSE, visible) ); }
344 343
345 void addColumn( const LLUUID& icon_id, S32 width = 0 ) 344 void addColumn( LLUIImagePtr icon, S32 width = 0 )
346 { mColumns.push_back( new LLScrollListIcon(icon_id, width) ); } 345 { mColumns.push_back( new LLScrollListIcon(icon, width) ); }
347 346
348 void addColumn( LLCheckBoxCtrl* check, S32 width = 0 ) 347 void addColumn( LLCheckBoxCtrl* check, S32 width = 0 )
349 { mColumns.push_back( new LLScrollListCheck(check,width) ); } 348 { mColumns.push_back( new LLScrollListCheck(check,width) ); }
@@ -404,8 +403,7 @@ public:
404 BOOL draw_border = TRUE); 403 BOOL draw_border = TRUE);
405 404
406 virtual ~LLScrollListCtrl(); 405 virtual ~LLScrollListCtrl();
407 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_SCROLL_LIST; } 406
408 virtual LLString getWidgetTag() const { return LL_SCROLL_LIST_CTRL_TAG; }
409 virtual LLXMLNodePtr getXML(bool save_children = true) const; 407 virtual LLXMLNodePtr getXML(bool save_children = true) const;
410 void setScrollListParameters(LLXMLNodePtr node); 408 void setScrollListParameters(LLXMLNodePtr node);
411 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); 409 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
@@ -562,8 +560,8 @@ public:
562 /*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask); 560 /*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask);
563 /*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask); 561 /*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
564 /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask); 562 /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask);
565 /*virtual*/ BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); 563 /*virtual*/ BOOL handleKeyHere(KEY key, MASK mask);
566 /*virtual*/ BOOL handleUnicodeCharHere(llwchar uni_char, BOOL called_from_parent); 564 /*virtual*/ BOOL handleUnicodeCharHere(llwchar uni_char);
567 /*virtual*/ BOOL handleScrollWheel(S32 x, S32 y, S32 clicks); 565 /*virtual*/ BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
568 /*virtual*/ BOOL handleToolTip(S32 x, S32 y, LLString& msg, LLRect* sticky_rect); 566 /*virtual*/ BOOL handleToolTip(S32 x, S32 y, LLString& msg, LLRect* sticky_rect);
569 /*virtual*/ void setEnabled(BOOL enabled); 567 /*virtual*/ void setEnabled(BOOL enabled);
@@ -618,6 +616,7 @@ public:
618 616
619 S32 selectMultiple( LLDynamicArray<LLUUID> ids ); 617 S32 selectMultiple( LLDynamicArray<LLUUID> ids );
620 void sortItems(); 618 void sortItems();
619
621 // manually call this whenever editing list items in place to flag need for resorting 620 // manually call this whenever editing list items in place to flag need for resorting
622 void setSorted(BOOL sorted) { mSorted = sorted; } 621 void setSorted(BOOL sorted) { mSorted = sorted; }
623 void dirtyColumns(); // some operation has potentially affected column layout or ordering 622 void dirtyColumns(); // some operation has potentially affected column layout or ordering
diff --git a/linden/indra/llui/llslider.cpp b/linden/indra/llui/llslider.cpp
index 02841ee..12d794c 100644
--- a/linden/indra/llui/llslider.cpp
+++ b/linden/indra/llui/llslider.cpp
@@ -41,6 +41,10 @@
41#include "llcontrol.h" 41#include "llcontrol.h"
42#include "llimagegl.h" 42#include "llimagegl.h"
43 43
44static LLRegisterWidget<LLSlider> r1("slider_bar");
45static LLRegisterWidget<LLSlider> r2("volume_slider");
46
47
44LLSlider::LLSlider( 48LLSlider::LLSlider(
45 const LLString& name, 49 const LLString& name,
46 const LLRect& rect, 50 const LLRect& rect,
@@ -68,9 +72,9 @@ LLSlider::LLSlider(
68 mMouseDownCallback( NULL ), 72 mMouseDownCallback( NULL ),
69 mMouseUpCallback( NULL ) 73 mMouseUpCallback( NULL )
70{ 74{
71 mThumbImage = LLUI::sImageProvider->getImageByID(LLUUID(LLUI::sAssetsGroup->getString("icn_slide-thumb_dark.tga"))); 75 mThumbImage = LLUI::sImageProvider->getUIImage("icn_slide-thumb_dark.tga");
72 mTrackImage = LLUI::sImageProvider->getImageByID(LLUUID(LLUI::sAssetsGroup->getString("icn_slide-groove_dark.tga"))); 76 mTrackImage = LLUI::sImageProvider->getUIImage("icn_slide-groove_dark.tga");
73 mTrackHighlightImage = LLUI::sImageProvider->getImageByID(LLUUID(LLUI::sAssetsGroup->getString("icn_slide-highlight.tga"))); 77 mTrackHighlightImage = LLUI::sImageProvider->getUIImage("icn_slide-highlight.tga");
74 78
75 // properly handle setting the starting thumb rect 79 // properly handle setting the starting thumb rect
76 // do it this way to handle both the operating-on-settings 80 // do it this way to handle both the operating-on-settings
@@ -217,98 +221,68 @@ BOOL LLSlider::handleMouseDown(S32 x, S32 y, MASK mask)
217 return TRUE; 221 return TRUE;
218} 222}
219 223
220BOOL LLSlider::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent) 224BOOL LLSlider::handleKeyHere(KEY key, MASK mask)
221{ 225{
222 BOOL handled = FALSE; 226 BOOL handled = FALSE;
223 if( getVisible() && getEnabled() && !called_from_parent ) 227 switch(key)
224 { 228 {
225 switch(key) 229 case KEY_UP:
226 { 230 case KEY_DOWN:
227 case KEY_UP: 231 // eat up and down keys to be consistent
228 case KEY_DOWN: 232 handled = TRUE;
229 // eat up and down keys to be consistent 233 break;
230 handled = TRUE; 234 case KEY_LEFT:
231 break; 235 setValueAndCommit(getValueF32() - getIncrement());
232 case KEY_LEFT: 236 handled = TRUE;
233 setValueAndCommit(getValueF32() - getIncrement()); 237 break;
234 handled = TRUE; 238 case KEY_RIGHT:
235 break; 239 setValueAndCommit(getValueF32() + getIncrement());
236 case KEY_RIGHT: 240 handled = TRUE;
237 setValueAndCommit(getValueF32() + getIncrement()); 241 break;
238 handled = TRUE; 242 default:
239 break; 243 break;
240 default:
241 break;
242 }
243 } 244 }
244 return handled; 245 return handled;
245} 246}
246 247
247void LLSlider::draw() 248void LLSlider::draw()
248{ 249{
249 if( getVisible() ) 250 // since thumb image might still be decoding, need thumb to accomodate image size
250 { 251 updateThumbRect();
251 // since thumb image might still be decoding, need thumb to accomodate image size
252 updateThumbRect();
253
254 // Draw background and thumb.
255
256 // drawing solids requires texturing be disabled
257 LLGLSNoTexture no_texture;
258
259 LLRect rect(mDragStartThumbRect);
260
261 F32 opacity = getEnabled() ? 1.f : 0.3f;
262 LLColor4 center_color = (mThumbCenterColor % opacity);
263 LLColor4 track_color = (mTrackColor % opacity);
264
265 // Track
266 LLRect track_rect(mThumbImage->getWidth() / 2,
267 getLocalRect().getCenterY() + (mTrackImage->getHeight() / 2),
268 getRect().getWidth() - mThumbImage->getWidth() / 2,
269 getLocalRect().getCenterY() - (mTrackImage->getHeight() / 2) );
270
271 gl_draw_scaled_image_with_border(track_rect.mLeft, track_rect.mBottom, 3, 3, track_rect.getWidth(), track_rect.getHeight(),
272 mTrackImage, track_color);
273 gl_draw_scaled_image_with_border(track_rect.mLeft, track_rect.mBottom, 3, 3, mThumbRect.mLeft, track_rect.getHeight(),
274 mTrackHighlightImage, track_color);
275 252
253 // Draw background and thumb.
276 254
277 // Thumb 255 // drawing solids requires texturing be disabled
278 if( hasMouseCapture() ) 256 LLGLSNoTexture no_texture;
279 {
280 gl_draw_scaled_image(mDragStartThumbRect.mLeft, mDragStartThumbRect.mBottom, mDragStartThumbRect.getWidth(), mDragStartThumbRect.getHeight(),
281 mThumbImage, mThumbCenterColor % 0.3f);
282 257
283 if (hasFocus()) 258 F32 opacity = getEnabled() ? 1.f : 0.3f;
284 { 259 LLColor4 center_color = (mThumbCenterColor % opacity);
285 F32 lerp_amt = gFocusMgr.getFocusFlashAmt(); 260 LLColor4 track_color = (mTrackColor % opacity);
286 LLRect highlight_rect = mThumbRect;
287 highlight_rect.stretch(llround(lerp(1.f, 3.f, lerp_amt)));
288 gl_draw_scaled_image_with_border(highlight_rect.mLeft, highlight_rect.mBottom, 0, 0, highlight_rect.getWidth(), highlight_rect.getHeight(),
289 mThumbImage, gFocusMgr.getFocusColor(), TRUE);
290 }
291 261
292 gl_draw_scaled_image(mThumbRect.mLeft, mThumbRect.mBottom, mThumbRect.getWidth(), mThumbRect.getHeight(), 262 // Track
293 mThumbImage, mThumbOutlineColor); 263 LLRect track_rect(mThumbImage->getWidth() / 2,
264 getLocalRect().getCenterY() + (mTrackImage->getHeight() / 2),
265 getRect().getWidth() - mThumbImage->getWidth() / 2,
266 getLocalRect().getCenterY() - (mTrackImage->getHeight() / 2) );
267 LLRect highlight_rect(track_rect.mLeft, track_rect.mTop, mThumbRect.getCenterX(), track_rect.mBottom);
268 mTrackImage->draw(track_rect);
269 mTrackHighlightImage->draw(highlight_rect);
294 270
295 } 271 // Thumb
296 else 272 if( hasMouseCapture() )
297 { 273 {
298 if (hasFocus()) 274 // Show ghost where thumb was before dragging began.
299 { 275 mThumbImage->draw(mDragStartThumbRect, mThumbCenterColor % 0.3f);
300 F32 lerp_amt = gFocusMgr.getFocusFlashAmt();
301 LLRect highlight_rect = mThumbRect;
302 highlight_rect.stretch(llround(lerp(1.f, 3.f, lerp_amt)));
303 gl_draw_scaled_image_with_border(highlight_rect.mLeft, highlight_rect.mBottom, 0, 0, highlight_rect.getWidth(), highlight_rect.getHeight(),
304 mThumbImage, gFocusMgr.getFocusColor(), TRUE);
305 }
306
307 gl_draw_scaled_image(mThumbRect.mLeft, mThumbRect.mBottom, mThumbRect.getWidth(), mThumbRect.getHeight(),
308 mThumbImage, center_color);
309 }
310 LLUICtrl::draw();
311 } 276 }
277 if (hasFocus())
278 {
279 // Draw focus highlighting.
280 mThumbImage->drawBorder(mThumbRect, gFocusMgr.getFocusColor(), gFocusMgr.getFocusFlashWidth());
281 }
282 // Fill in the thumb.
283 mThumbImage->draw(mThumbRect, hasMouseCapture() ? mThumbOutlineColor : center_color);
284
285 LLUICtrl::draw();
312} 286}
313 287
314// virtual 288// virtual
diff --git a/linden/indra/llui/llslider.h b/linden/indra/llui/llslider.h
index 506a6bd..1c9d5e1 100644
--- a/linden/indra/llui/llslider.h
+++ b/linden/indra/llui/llslider.h
@@ -52,8 +52,6 @@ public:
52 BOOL volume, //TODO: create a "volume" slider sub-class or just use image art, no? -MG 52 BOOL volume, //TODO: create a "volume" slider sub-class or just use image art, no? -MG
53 const LLString& control_name = LLString::null ); 53 const LLString& control_name = LLString::null );
54 54
55 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_SLIDER_BAR; }
56 virtual LLString getWidgetTag() const { return LL_SLIDER_TAG; }
57 virtual LLXMLNodePtr getXML(bool save_children = true) const; 55 virtual LLXMLNodePtr getXML(bool save_children = true) const;
58 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, class LLUICtrlFactory *factory); 56 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, class LLUICtrlFactory *factory);
59 57
@@ -79,7 +77,7 @@ public:
79 virtual BOOL handleHover(S32 x, S32 y, MASK mask); 77 virtual BOOL handleHover(S32 x, S32 y, MASK mask);
80 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); 78 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
81 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); 79 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
82 virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); 80 virtual BOOL handleKeyHere(KEY key, MASK mask);
83 virtual void draw(); 81 virtual void draw();
84 82
85private: 83private:
@@ -96,9 +94,9 @@ private:
96 S32 mMouseOffset; 94 S32 mMouseOffset;
97 LLRect mDragStartThumbRect; 95 LLRect mDragStartThumbRect;
98 96
99 LLImageGL* mThumbImage; 97 LLUIImage* mThumbImage;
100 LLImageGL* mTrackImage; 98 LLUIImage* mTrackImage;
101 LLImageGL* mTrackHighlightImage; 99 LLUIImage* mTrackHighlightImage;
102 100
103 LLRect mThumbRect; 101 LLRect mThumbRect;
104 LLColor4 mTrackColor; 102 LLColor4 mTrackColor;
diff --git a/linden/indra/llui/llsliderctrl.cpp b/linden/indra/llui/llsliderctrl.cpp
index 58ab4ae..d3dc35f 100644
--- a/linden/indra/llui/llsliderctrl.cpp
+++ b/linden/indra/llui/llsliderctrl.cpp
@@ -52,6 +52,7 @@
52 52
53const U32 MAX_STRING_LENGTH = 10; 53const U32 MAX_STRING_LENGTH = 10;
54 54
55static LLRegisterWidget<LLSliderCtrl> r("slider");
55 56
56LLSliderCtrl::LLSliderCtrl(const LLString& name, const LLRect& rect, 57LLSliderCtrl::LLSliderCtrl(const LLString& name, const LLRect& rect,
57 const LLString& label, 58 const LLString& label,
diff --git a/linden/indra/llui/llsliderctrl.h b/linden/indra/llui/llsliderctrl.h
index 705fa5c..0c8a8b6 100644
--- a/linden/indra/llui/llsliderctrl.h
+++ b/linden/indra/llui/llsliderctrl.h
@@ -63,8 +63,7 @@ public:
63 const LLString& control_which = LLString::null ); 63 const LLString& control_which = LLString::null );
64 64
65 virtual ~LLSliderCtrl() {} // Children all cleaned up by default view destructor. 65 virtual ~LLSliderCtrl() {} // Children all cleaned up by default view destructor.
66 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_SLIDER; } 66
67 virtual LLString getWidgetTag() const { return LL_SLIDER_CTRL_TAG; }
68 virtual LLXMLNodePtr getXML(bool save_children = true) const; 67 virtual LLXMLNodePtr getXML(bool save_children = true) const;
69 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); 68 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
70 69
diff --git a/linden/indra/llui/llspinctrl.cpp b/linden/indra/llui/llspinctrl.cpp
index 98cdae1..9e85b20 100644
--- a/linden/indra/llui/llspinctrl.cpp
+++ b/linden/indra/llui/llspinctrl.cpp
@@ -52,6 +52,7 @@
52 52
53const U32 MAX_STRING_LENGTH = 32; 53const U32 MAX_STRING_LENGTH = 32;
54 54
55static LLRegisterWidget<LLSpinCtrl> r2("spinner");
55 56
56LLSpinCtrl::LLSpinCtrl( const LLString& name, const LLRect& rect, const LLString& label, const LLFontGL* font, 57LLSpinCtrl::LLSpinCtrl( const LLString& name, const LLRect& rect, const LLString& label, const LLFontGL* font,
57 void (*commit_callback)(LLUICtrl*, void*), 58 void (*commit_callback)(LLUICtrl*, void*),
@@ -409,26 +410,23 @@ void LLSpinCtrl::draw()
409 410
410BOOL LLSpinCtrl::handleScrollWheel(S32 x, S32 y, S32 clicks) 411BOOL LLSpinCtrl::handleScrollWheel(S32 x, S32 y, S32 clicks)
411{ 412{
412 if( getEnabled() ) 413 if( clicks > 0 )
413 { 414 {
414 if( clicks > 0 ) 415 while( clicks-- )
415 { 416 {
416 while( clicks-- ) 417 LLSpinCtrl::onDownBtn(this);
417 {
418 LLSpinCtrl::onDownBtn(this);
419 }
420 }
421 else
422 while( clicks++ )
423 {
424 LLSpinCtrl::onUpBtn(this);
425 } 418 }
426 } 419 }
420 else
421 while( clicks++ )
422 {
423 LLSpinCtrl::onUpBtn(this);
424 }
427 425
428 return TRUE; 426 return TRUE;
429} 427}
430 428
431BOOL LLSpinCtrl::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent) 429BOOL LLSpinCtrl::handleKeyHere(KEY key, MASK mask)
432{ 430{
433 if (mEditor->hasFocus()) 431 if (mEditor->hasFocus())
434 { 432 {
diff --git a/linden/indra/llui/llspinctrl.h b/linden/indra/llui/llspinctrl.h
index f1f971e..790e216 100644
--- a/linden/indra/llui/llspinctrl.h
+++ b/linden/indra/llui/llspinctrl.h
@@ -62,8 +62,7 @@ public:
62 S32 label_width = SPINCTRL_DEFAULT_LABEL_WIDTH ); 62 S32 label_width = SPINCTRL_DEFAULT_LABEL_WIDTH );
63 63
64 virtual ~LLSpinCtrl() {} // Children all cleaned up by default view destructor. 64 virtual ~LLSpinCtrl() {} // Children all cleaned up by default view destructor.
65 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_SPINNER; } 65
66 virtual LLString getWidgetTag() const { return LL_SPIN_CTRL_TAG; }
67 virtual LLXMLNodePtr getXML(bool save_children = true) const; 66 virtual LLXMLNodePtr getXML(bool save_children = true) const;
68 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, class LLUICtrlFactory *factory); 67 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, class LLUICtrlFactory *factory);
69 68
@@ -101,7 +100,7 @@ public:
101 void forceEditorCommit(); // for commit on external button 100 void forceEditorCommit(); // for commit on external button
102 101
103 virtual BOOL handleScrollWheel(S32 x,S32 y,S32 clicks); 102 virtual BOOL handleScrollWheel(S32 x,S32 y,S32 clicks);
104 virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); 103 virtual BOOL handleKeyHere(KEY key, MASK mask);
105 104
106 virtual void draw(); 105 virtual void draw();
107 106
diff --git a/linden/indra/llui/llstyle.cpp b/linden/indra/llui/llstyle.cpp
index cdf87d3..7c46114 100644
--- a/linden/indra/llui/llstyle.cpp
+++ b/linden/indra/llui/llstyle.cpp
@@ -138,12 +138,34 @@ void LLStyle::setFontName(const LLString& fontname)
138} 138}
139 139
140 140
141void LLStyle::setImage(const LLString& src) 141void LLStyle::setLinkHREF(const LLString& href)
142{ 142{
143 if (src.size() >= UUID_STR_LENGTH - 1) 143 mLink = href;
144 { 144}
145 mImagep = LLUI::sImageProvider->getImageByID(LLUUID(src)); 145
146 } 146BOOL LLStyle::isLink() const
147{
148 return mLink.size();
149}
150
151BOOL LLStyle::isVisible() const
152{
153 return mVisible;
154}
155
156void LLStyle::setVisible(BOOL is_visible)
157{
158 mVisible = is_visible;
159}
160
161LLUIImagePtr LLStyle::getImage() const
162{
163 return mImagep;
164}
165
166void LLStyle::setImage(const LLUUID& src)
167{
168 mImagep = LLUI::sImageProvider->getUIImageByID(src);
147} 169}
148 170
149 171
diff --git a/linden/indra/llui/llstyle.h b/linden/indra/llui/llstyle.h
index d6ae900..6f0099c 100644
--- a/linden/indra/llui/llstyle.h
+++ b/linden/indra/llui/llstyle.h
@@ -35,7 +35,7 @@
35#include "v4color.h" 35#include "v4color.h"
36#include "llresmgr.h" 36#include "llresmgr.h"
37#include "llfont.h" 37#include "llfont.h"
38#include "llimagegl.h" 38#include "llui.h"
39 39
40class LLStyle 40class LLStyle
41{ 41{
@@ -53,19 +53,20 @@ public:
53 virtual const LLColor4& getColor() const { return mColor; } 53 virtual const LLColor4& getColor() const { return mColor; }
54 virtual void setColor(const LLColor4 &color) { mColor = color; } 54 virtual void setColor(const LLColor4 &color) { mColor = color; }
55 55
56 virtual BOOL isVisible() const { return mVisible; } 56 virtual BOOL isVisible() const;
57 virtual void setVisible(BOOL is_visible) { mVisible = is_visible; } 57 virtual void setVisible(BOOL is_visible);
58 58
59 virtual const LLString& getFontString() const { return mFontName; } 59 virtual const LLString& getFontString() const { return mFontName; }
60 virtual void setFontName(const LLString& fontname); 60 virtual void setFontName(const LLString& fontname);
61 virtual LLFONT_ID getFontID() const { return mFontID; } 61 virtual LLFONT_ID getFontID() const { return mFontID; }
62 62
63 virtual const LLString& getLinkHREF() const { return mLink; } 63 virtual const LLString& getLinkHREF() const { return mLink; }
64 virtual void setLinkHREF(const LLString& href) { mLink = href; } 64 virtual void setLinkHREF(const LLString& href);
65 virtual BOOL isLink() const { return mLink.size(); } 65 virtual BOOL isLink() const;
66
67 virtual LLUIImagePtr getImage() const;
68 virtual void setImage(const LLUUID& src);
66 69
67 virtual LLImageGL *getImage() const { return mImagep; }
68 virtual void setImage(const LLString& src);
69 virtual BOOL isImage() const { return ((mImageWidth != 0) && (mImageHeight != 0)); } 70 virtual BOOL isImage() const { return ((mImageWidth != 0) && (mImageHeight != 0)); }
70 virtual void setImageSize(S32 width, S32 height); 71 virtual void setImageSize(S32 width, S32 height);
71 72
@@ -106,7 +107,7 @@ private:
106 LLString mFontName; 107 LLString mFontName;
107 LLFONT_ID mFontID; 108 LLFONT_ID mFontID;
108 LLString mLink; 109 LLString mLink;
109 LLPointer<LLImageGL> mImagep; 110 LLUIImagePtr mImagep;
110 BOOL mIsEmbeddedItem; 111 BOOL mIsEmbeddedItem;
111}; 112};
112 113
diff --git a/linden/indra/llui/lltabcontainer.cpp b/linden/indra/llui/lltabcontainer.cpp
index e632cf1..7f581dc 100644
--- a/linden/indra/llui/lltabcontainer.cpp
+++ b/linden/indra/llui/lltabcontainer.cpp
@@ -64,7 +64,7 @@ const S32 TABCNTRV_HEADER_HEIGHT = LLPANEL_BORDER_WIDTH + TABCNTRV_CLOSE_BTN_SIZ
64const S32 TABCNTRV_ARROW_BTN_SIZE = 16; 64const S32 TABCNTRV_ARROW_BTN_SIZE = 16;
65const S32 TABCNTRV_PAD = 0; 65const S32 TABCNTRV_PAD = 0;
66 66
67 67static LLRegisterWidget<LLTabContainer> r("tab_container");
68 68
69LLTabContainer::LLTabContainer(const LLString& name, const LLRect& rect, TabPosition pos, 69LLTabContainer::LLTabContainer(const LLString& name, const LLRect& rect, TabPosition pos,
70 BOOL bordered, BOOL is_vertical ) 70 BOOL bordered, BOOL is_vertical )
@@ -115,18 +115,6 @@ void LLTabContainer::setValue(const LLSD& value)
115} 115}
116 116
117//virtual 117//virtual
118EWidgetType LLTabContainer::getWidgetType() const
119{
120 return WIDGET_TYPE_TAB_CONTAINER;
121}
122
123//virtual
124LLString LLTabContainer::getWidgetTag() const
125{
126 return LL_TAB_CONTAINER_COMMON_TAG;
127}
128
129//virtual
130void LLTabContainer::reshape(S32 width, S32 height, BOOL called_from_parent) 118void LLTabContainer::reshape(S32 width, S32 height, BOOL called_from_parent)
131{ 119{
132 LLPanel::reshape( width, height, called_from_parent ); 120 LLPanel::reshape( width, height, called_from_parent );
@@ -134,7 +122,7 @@ void LLTabContainer::reshape(S32 width, S32 height, BOOL called_from_parent)
134} 122}
135 123
136//virtual 124//virtual
137LLView* LLTabContainer::getChildByName(const LLString& name, BOOL recurse) const 125LLView* LLTabContainer::getChildView(const LLString& name, BOOL recurse, BOOL create_if_missing) const
138{ 126{
139 tuple_list_t::const_iterator itor; 127 tuple_list_t::const_iterator itor;
140 for (itor = mTabList.begin(); itor != mTabList.end(); ++itor) 128 for (itor = mTabList.begin(); itor != mTabList.end(); ++itor)
@@ -145,19 +133,20 @@ LLView* LLTabContainer::getChildByName(const LLString& name, BOOL recurse) const
145 return panel; 133 return panel;
146 } 134 }
147 } 135 }
136
148 if (recurse) 137 if (recurse)
149 { 138 {
150 for (itor = mTabList.begin(); itor != mTabList.end(); ++itor) 139 for (itor = mTabList.begin(); itor != mTabList.end(); ++itor)
151 { 140 {
152 LLPanel *panel = (*itor)->mTabPanel; 141 LLPanel *panel = (*itor)->mTabPanel;
153 LLView *child = panel->getChild<LLView>(name, recurse); 142 LLView *child = panel->getChildView(name, recurse, FALSE);
154 if (child) 143 if (child)
155 { 144 {
156 return child; 145 return child;
157 } 146 }
158 } 147 }
159 } 148 }
160 return LLView::getChildByName(name, recurse); 149 return LLView::getChildView(name, recurse, create_if_missing);
161} 150}
162 151
163// virtual 152// virtual
@@ -185,124 +174,122 @@ void LLTabContainer::draw()
185 } 174 }
186 175
187 setScrollPosPixels((S32)lerp((F32)getScrollPosPixels(), (F32)target_pixel_scroll, LLCriticalDamp::getInterpolant(0.08f))); 176 setScrollPosPixels((S32)lerp((F32)getScrollPosPixels(), (F32)target_pixel_scroll, LLCriticalDamp::getInterpolant(0.08f)));
188 if( getVisible() ) 177
178 BOOL has_scroll_arrows = (mMaxScrollPos > 0) || (mScrollPosPixels > 0);
179 if (!mIsVertical)
189 { 180 {
190 BOOL has_scroll_arrows = (mMaxScrollPos > 0) || (mScrollPosPixels > 0); 181 mJumpPrevArrowBtn->setVisible( has_scroll_arrows );
191 if (!mIsVertical) 182 mJumpNextArrowBtn->setVisible( has_scroll_arrows );
192 { 183 }
193 mJumpPrevArrowBtn->setVisible( has_scroll_arrows ); 184 mPrevArrowBtn->setVisible( has_scroll_arrows );
194 mJumpNextArrowBtn->setVisible( has_scroll_arrows ); 185 mNextArrowBtn->setVisible( has_scroll_arrows );
195 }
196 mPrevArrowBtn->setVisible( has_scroll_arrows );
197 mNextArrowBtn->setVisible( has_scroll_arrows );
198 186
199 S32 left = 0, top = 0; 187 S32 left = 0, top = 0;
200 if (mIsVertical) 188 if (mIsVertical)
201 { 189 {
202 top = getRect().getHeight() - getTopBorderHeight() - LLPANEL_BORDER_WIDTH - 1 - (has_scroll_arrows ? TABCNTRV_ARROW_BTN_SIZE : 0); 190 top = getRect().getHeight() - getTopBorderHeight() - LLPANEL_BORDER_WIDTH - 1 - (has_scroll_arrows ? TABCNTRV_ARROW_BTN_SIZE : 0);
203 top += getScrollPosPixels(); 191 top += getScrollPosPixels();
204 } 192 }
205 else 193 else
206 { 194 {
207 // Set the leftmost position of the tab buttons. 195 // Set the leftmost position of the tab buttons.
208 left = LLPANEL_BORDER_WIDTH + (has_scroll_arrows ? (TABCNTR_ARROW_BTN_SIZE * 2) : TABCNTR_TAB_H_PAD); 196 left = LLPANEL_BORDER_WIDTH + (has_scroll_arrows ? (TABCNTR_ARROW_BTN_SIZE * 2) : TABCNTR_TAB_H_PAD);
209 left -= getScrollPosPixels(); 197 left -= getScrollPosPixels();
210 } 198 }
211 199
212 // Hide all the buttons 200 // Hide all the buttons
201 for(tuple_list_t::iterator iter = mTabList.begin(); iter != mTabList.end(); ++iter)
202 {
203 LLTabTuple* tuple = *iter;
204 tuple->mButton->setVisible( FALSE );
205 }
206
207 LLPanel::draw();
208
209 // if tabs are hidden, don't draw them and leave them in the invisible state
210 if (!getTabsHidden())
211 {
212 // Show all the buttons
213 for(tuple_list_t::iterator iter = mTabList.begin(); iter != mTabList.end(); ++iter) 213 for(tuple_list_t::iterator iter = mTabList.begin(); iter != mTabList.end(); ++iter)
214 { 214 {
215 LLTabTuple* tuple = *iter; 215 LLTabTuple* tuple = *iter;
216 tuple->mButton->setVisible( FALSE ); 216 tuple->mButton->setVisible( TRUE );
217 } 217 }
218 218
219 LLPanel::draw(); 219 // Draw some of the buttons...
220 220 LLRect clip_rect = getLocalRect();
221 // if tabs are hidden, don't draw them and leave them in the invisible state 221 if (has_scroll_arrows)
222 if (!getTabsHidden())
223 { 222 {
224 // Show all the buttons 223 // ...but clip them.
225 for(tuple_list_t::iterator iter = mTabList.begin(); iter != mTabList.end(); ++iter) 224 if (mIsVertical)
226 { 225 {
227 LLTabTuple* tuple = *iter; 226 clip_rect.mBottom = mNextArrowBtn->getRect().mTop + 3*TABCNTRV_PAD;
228 tuple->mButton->setVisible( TRUE ); 227 clip_rect.mTop = mPrevArrowBtn->getRect().mBottom - 3*TABCNTRV_PAD;
229 } 228 }
230 229 else
231 // Draw some of the buttons...
232 LLRect clip_rect = getLocalRect();
233 if (has_scroll_arrows)
234 { 230 {
235 // ...but clip them. 231 clip_rect.mLeft = mPrevArrowBtn->getRect().mRight;
236 if (mIsVertical) 232 clip_rect.mRight = mNextArrowBtn->getRect().mLeft;
237 {
238 clip_rect.mBottom = mNextArrowBtn->getRect().mTop + 3*TABCNTRV_PAD;
239 clip_rect.mTop = mPrevArrowBtn->getRect().mBottom - 3*TABCNTRV_PAD;
240 }
241 else
242 {
243 clip_rect.mLeft = mPrevArrowBtn->getRect().mRight;
244 clip_rect.mRight = mNextArrowBtn->getRect().mLeft;
245 }
246 } 233 }
247 LLLocalClipRect clip(clip_rect); 234 }
235 LLLocalClipRect clip(clip_rect);
248 236
249 S32 max_scroll_visible = getTabCount() - getMaxScrollPos() + getScrollPos(); 237 S32 max_scroll_visible = getTabCount() - getMaxScrollPos() + getScrollPos();
250 S32 idx = 0; 238 S32 idx = 0;
251 for(tuple_list_t::iterator iter = mTabList.begin(); iter != mTabList.end(); ++iter) 239 for(tuple_list_t::iterator iter = mTabList.begin(); iter != mTabList.end(); ++iter)
252 { 240 {
253 LLTabTuple* tuple = *iter; 241 LLTabTuple* tuple = *iter;
254 242
255 tuple->mButton->translate( left ? left - tuple->mButton->getRect().mLeft : 0, 243 tuple->mButton->translate( left ? left - tuple->mButton->getRect().mLeft : 0,
256 top ? top - tuple->mButton->getRect().mTop : 0 ); 244 top ? top - tuple->mButton->getRect().mTop : 0 );
257 if (top) top -= BTN_HEIGHT + TABCNTRV_PAD; 245 if (top) top -= BTN_HEIGHT + TABCNTRV_PAD;
258 if (left) left += tuple->mButton->getRect().getWidth(); 246 if (left) left += tuple->mButton->getRect().getWidth();
259 247
260 if (!mIsVertical) 248 if (!mIsVertical)
249 {
250 if( idx < getScrollPos() )
261 { 251 {
262 if( idx < getScrollPos() ) 252 if( tuple->mButton->getFlashing() )
263 {
264 if( tuple->mButton->getFlashing() )
265 {
266 mPrevArrowBtn->setFlashing( TRUE );
267 }
268 }
269 else if( max_scroll_visible < idx )
270 { 253 {
271 if( tuple->mButton->getFlashing() ) 254 mPrevArrowBtn->setFlashing( TRUE );
272 {
273 mNextArrowBtn->setFlashing( TRUE );
274 }
275 } 255 }
276 } 256 }
277 LLUI::pushMatrix(); 257 else if( max_scroll_visible < idx )
278 { 258 {
279 LLUI::translate((F32)tuple->mButton->getRect().mLeft, (F32)tuple->mButton->getRect().mBottom, 0.f); 259 if( tuple->mButton->getFlashing() )
280 tuple->mButton->draw(); 260 {
261 mNextArrowBtn->setFlashing( TRUE );
262 }
281 } 263 }
282 LLUI::popMatrix();
283
284 idx++;
285 } 264 }
286 265 LLUI::pushMatrix();
287
288 if( mIsVertical && has_scroll_arrows )
289 { 266 {
290 // Redraw the arrows so that they appears on top. 267 LLUI::translate((F32)tuple->mButton->getRect().mLeft, (F32)tuple->mButton->getRect().mBottom, 0.f);
291 gGL.pushMatrix(); 268 tuple->mButton->draw();
292 gGL.translatef((F32)mPrevArrowBtn->getRect().mLeft, (F32)mPrevArrowBtn->getRect().mBottom, 0.f);
293 mPrevArrowBtn->draw();
294 gGL.popMatrix();
295
296 gGL.pushMatrix();
297 gGL.translatef((F32)mNextArrowBtn->getRect().mLeft, (F32)mNextArrowBtn->getRect().mBottom, 0.f);
298 mNextArrowBtn->draw();
299 gGL.popMatrix();
300 } 269 }
270 LLUI::popMatrix();
271
272 idx++;
301 } 273 }
302 274
303 mPrevArrowBtn->setFlashing(FALSE); 275
304 mNextArrowBtn->setFlashing(FALSE); 276 if( mIsVertical && has_scroll_arrows )
277 {
278 // Redraw the arrows so that they appears on top.
279 gGL.pushMatrix();
280 gGL.translatef((F32)mPrevArrowBtn->getRect().mLeft, (F32)mPrevArrowBtn->getRect().mBottom, 0.f);
281 mPrevArrowBtn->draw();
282 gGL.popMatrix();
283
284 gGL.pushMatrix();
285 gGL.translatef((F32)mNextArrowBtn->getRect().mLeft, (F32)mNextArrowBtn->getRect().mBottom, 0.f);
286 mNextArrowBtn->draw();
287 gGL.popMatrix();
288 }
305 } 289 }
290
291 mPrevArrowBtn->setFlashing(FALSE);
292 mNextArrowBtn->setFlashing(FALSE);
306} 293}
307 294
308 295
@@ -524,12 +511,8 @@ BOOL LLTabContainer::handleToolTip( S32 x, S32 y, LLString& msg, LLRect* sticky_
524} 511}
525 512
526// virtual 513// virtual
527BOOL LLTabContainer::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent) 514BOOL LLTabContainer::handleKeyHere(KEY key, MASK mask)
528{ 515{
529 if (!getEnabled()) return FALSE;
530
531 if (!gFocusMgr.childHasKeyboardFocus(this)) return FALSE;
532
533 BOOL handled = FALSE; 516 BOOL handled = FALSE;
534 if (key == KEY_LEFT && mask == MASK_ALT) 517 if (key == KEY_LEFT && mask == MASK_ALT)
535 { 518 {
@@ -687,7 +670,7 @@ void LLTabContainer::addTabPanel(LLPanel* child,
687 // already a child of mine 670 // already a child of mine
688 return; 671 return;
689 } 672 }
690 const LLFontGL* font = gResMgr->getRes( mIsVertical ? LLFONT_SANSSERIF : LLFONT_SANSSERIF_SMALL ); 673 const LLFontGL* font = LLResMgr::getInstance()->getRes( mIsVertical ? LLFONT_SANSSERIF : LLFONT_SANSSERIF_SMALL );
691 674
692 // Store the original label for possible xml export. 675 // Store the original label for possible xml export.
693 child->setLabel(label); 676 child->setLabel(label);
@@ -1272,7 +1255,7 @@ void LLTabContainer::setTabImage(LLPanel* child, std::string image_name, const L
1272 1255
1273 if (!mIsVertical) 1256 if (!mIsVertical)
1274 { 1257 {
1275 const LLFontGL* fontp = gResMgr->getRes( LLFONT_SANSSERIF_SMALL ); 1258 const LLFontGL* fontp = LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF_SMALL );
1276 // remove current width from total tab strip width 1259 // remove current width from total tab strip width
1277 mTotalTabWidth -= tuple->mButton->getRect().getWidth(); 1260 mTotalTabWidth -= tuple->mButton->getRect().getWidth();
1278 1261
@@ -1353,7 +1336,7 @@ void LLTabContainer::setPanelTitle(S32 index, const LLString& title)
1353 { 1336 {
1354 LLTabTuple* tuple = getTab(index); 1337 LLTabTuple* tuple = getTab(index);
1355 LLButton* tab_button = tuple->mButton; 1338 LLButton* tab_button = tuple->mButton;
1356 const LLFontGL* fontp = gResMgr->getRes( LLFONT_SANSSERIF_SMALL ); 1339 const LLFontGL* fontp = LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF_SMALL );
1357 mTotalTabWidth -= tab_button->getRect().getWidth(); 1340 mTotalTabWidth -= tab_button->getRect().getWidth();
1358 tab_button->reshape(llclamp(fontp->getWidth(title) + TAB_PADDING + tuple->mPadding, mMinTabWidth, mMaxTabWidth), tab_button->getRect().getHeight()); 1341 tab_button->reshape(llclamp(fontp->getWidth(title) + TAB_PADDING + tuple->mPadding, mMinTabWidth, mMaxTabWidth), tab_button->getRect().getHeight());
1359 mTotalTabWidth += tab_button->getRect().getWidth(); 1342 mTotalTabWidth += tab_button->getRect().getWidth();
diff --git a/linden/indra/llui/lltabcontainer.h b/linden/indra/llui/lltabcontainer.h
index 152bd05..16f8be5 100644
--- a/linden/indra/llui/lltabcontainer.h
+++ b/linden/indra/llui/lltabcontainer.h
@@ -62,19 +62,19 @@ public:
62 62
63 // from LLView 63 // from LLView
64 /*virtual*/ void setValue(const LLSD& value); 64 /*virtual*/ void setValue(const LLSD& value);
65 /*virtual*/ EWidgetType getWidgetType() const; 65
66 /*virtual*/ LLString getWidgetTag() const;
67 /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE); 66 /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
68 /*virtual*/ void draw(); 67 /*virtual*/ void draw();
69 /*virtual*/ BOOL handleMouseDown( S32 x, S32 y, MASK mask ); 68 /*virtual*/ BOOL handleMouseDown( S32 x, S32 y, MASK mask );
70 /*virtual*/ BOOL handleHover( S32 x, S32 y, MASK mask ); 69 /*virtual*/ BOOL handleHover( S32 x, S32 y, MASK mask );
71 /*virtual*/ BOOL handleMouseUp( S32 x, S32 y, MASK mask ); 70 /*virtual*/ BOOL handleMouseUp( S32 x, S32 y, MASK mask );
72 /*virtual*/ BOOL handleToolTip(S32 x, S32 y, LLString& msg, LLRect* sticky_rect ); 71 /*virtual*/ BOOL handleToolTip(S32 x, S32 y, LLString& msg, LLRect* sticky_rect );
73 /*virtual*/ BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); 72 /*virtual*/ BOOL handleKeyHere(KEY key, MASK mask);
74 /*virtual*/ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, 73 /*virtual*/ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
75 EDragAndDropType type, void* cargo_data, 74 EDragAndDropType type, void* cargo_data,
76 EAcceptance* accept, LLString& tooltip); 75 EAcceptance* accept, LLString& tooltip);
77 /*virtual*/ LLXMLNodePtr getXML(bool save_children = true) const; 76 /*virtual*/ LLXMLNodePtr getXML(bool save_children = true) const;
77 /*virtual*/ LLView* getChildView(const LLString& name, BOOL recurse = TRUE, BOOL create_if_missing = TRUE) const;
78 78
79 void addTabPanel(LLPanel* child, 79 void addTabPanel(LLPanel* child,
80 const LLString& label, 80 const LLString& label,
@@ -142,10 +142,6 @@ public:
142 142
143 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); 143 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
144 144
145protected:
146 /*virtual*/ LLView* getChildByName(const LLString& name, BOOL recurse = FALSE) const;
147
148
149private: 145private:
150 // Structure used to map tab buttons to and from tab panels 146 // Structure used to map tab buttons to and from tab panels
151 struct LLTabTuple 147 struct LLTabTuple
diff --git a/linden/indra/llui/lltextbox.cpp b/linden/indra/llui/lltextbox.cpp
index 9ad7849..0f411b8 100644
--- a/linden/indra/llui/lltextbox.cpp
+++ b/linden/indra/llui/lltextbox.cpp
@@ -34,6 +34,8 @@
34#include "lluictrlfactory.h" 34#include "lluictrlfactory.h"
35#include "llfocusmgr.h" 35#include "llfocusmgr.h"
36 36
37static LLRegisterWidget<LLTextBox> r("text");
38
37LLTextBox::LLTextBox(const LLString& name, const LLRect& rect, const LLString& text, 39LLTextBox::LLTextBox(const LLString& name, const LLRect& rect, const LLString& text,
38 const LLFontGL* font, BOOL mouse_opaque) 40 const LLFontGL* font, BOOL mouse_opaque)
39: LLUICtrl(name, rect, mouse_opaque, NULL, NULL, FOLLOWS_LEFT | FOLLOWS_TOP ), 41: LLUICtrl(name, rect, mouse_opaque, NULL, NULL, FOLLOWS_LEFT | FOLLOWS_TOP ),
@@ -212,7 +214,7 @@ void LLTextBox::setLineLengths()
212 LLString::size_type cur = 0; 214 LLString::size_type cur = 0;
213 LLString::size_type len = mText.getWString().size(); 215 LLString::size_type len = mText.getWString().size();
214 216
215 while (cur < len) 217 while (cur < len)
216 { 218 {
217 LLString::size_type end = mText.getWString().find('\n', cur); 219 LLString::size_type end = mText.getWString().find('\n', cur);
218 LLString::size_type runLen; 220 LLString::size_type runLen;
@@ -323,63 +325,60 @@ BOOL LLTextBox::setTextArg( const LLString& key, const LLStringExplicit& text )
323 325
324void LLTextBox::draw() 326void LLTextBox::draw()
325{ 327{
326 if( getVisible() ) 328 if (mBorderVisible)
327 { 329 {
328 if (mBorderVisible) 330 gl_rect_2d_offset_local(getLocalRect(), 2, FALSE);
329 { 331 }
330 gl_rect_2d_offset_local(getLocalRect(), 2, FALSE);
331 }
332 332
333 if( mBorderDropShadowVisible ) 333 if( mBorderDropShadowVisible )
334 { 334 {
335 static LLColor4 color_drop_shadow = LLUI::sColorsGroup->getColor("ColorDropShadow"); 335 static LLColor4 color_drop_shadow = LLUI::sColorsGroup->getColor("ColorDropShadow");
336 static S32 drop_shadow_tooltip = LLUI::sConfigGroup->getS32("DropShadowTooltip"); 336 static S32 drop_shadow_tooltip = LLUI::sConfigGroup->getS32("DropShadowTooltip");
337 gl_drop_shadow(0, getRect().getHeight(), getRect().getWidth(), 0, 337 gl_drop_shadow(0, getRect().getHeight(), getRect().getWidth(), 0,
338 color_drop_shadow, drop_shadow_tooltip); 338 color_drop_shadow, drop_shadow_tooltip);
339 } 339 }
340
341 if (mBackgroundVisible)
342 {
343 LLRect r( 0, getRect().getHeight(), getRect().getWidth(), 0 );
344 gl_rect_2d( r, mBackgroundColor );
345 }
346 340
347 S32 text_x = 0; 341 if (mBackgroundVisible)
348 switch( mHAlign ) 342 {
349 { 343 LLRect r( 0, getRect().getHeight(), getRect().getWidth(), 0 );
350 case LLFontGL::LEFT: 344 gl_rect_2d( r, mBackgroundColor );
351 text_x = mHPad; 345 }
352 break;
353 case LLFontGL::HCENTER:
354 text_x = getRect().getWidth() / 2;
355 break;
356 case LLFontGL::RIGHT:
357 text_x = getRect().getWidth() - mHPad;
358 break;
359 }
360 346
361 S32 text_y = getRect().getHeight() - mVPad; 347 S32 text_x = 0;
348 switch( mHAlign )
349 {
350 case LLFontGL::LEFT:
351 text_x = mHPad;
352 break;
353 case LLFontGL::HCENTER:
354 text_x = getRect().getWidth() / 2;
355 break;
356 case LLFontGL::RIGHT:
357 text_x = getRect().getWidth() - mHPad;
358 break;
359 }
362 360
363 if ( getEnabled() ) 361 S32 text_y = getRect().getHeight() - mVPad;
362
363 if ( getEnabled() )
364 {
365 if(mHasHover)
364 { 366 {
365 if(mHasHover) 367 drawText( text_x, text_y, mHoverColor );
366 {
367 drawText( text_x, text_y, mHoverColor );
368 }
369 else
370 {
371 drawText( text_x, text_y, mTextColor );
372 }
373 } 368 }
374 else 369 else
375 { 370 {
376 drawText( text_x, text_y, mDisabledColor ); 371 drawText( text_x, text_y, mTextColor );
377 } 372 }
373 }
374 else
375 {
376 drawText( text_x, text_y, mDisabledColor );
377 }
378 378
379 if (sDebugRects) 379 if (sDebugRects)
380 { 380 {
381 drawDebugRect(); 381 drawDebugRect();
382 }
383 } 382 }
384 383
385 mHasHover = FALSE; // This is reset every frame. 384 mHasHover = FALSE; // This is reset every frame.
diff --git a/linden/indra/llui/lltextbox.h b/linden/indra/llui/lltextbox.h
index 7bea722..ffe6f4c 100644
--- a/linden/indra/llui/lltextbox.h
+++ b/linden/indra/llui/lltextbox.h
@@ -57,8 +57,7 @@ public:
57 LLTextBox(const LLString& name_and_label); 57 LLTextBox(const LLString& name_and_label);
58 58
59 virtual ~LLTextBox() {} 59 virtual ~LLTextBox() {}
60 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_TEXT_BOX; } 60
61 virtual LLString getWidgetTag() const { return LL_TEXT_BOX_TAG; }
62 virtual LLXMLNodePtr getXML(bool save_children = true) const; 61 virtual LLXMLNodePtr getXML(bool save_children = true) const;
63 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, class LLUICtrlFactory *factory); 62 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, class LLUICtrlFactory *factory);
64 63
diff --git a/linden/indra/llui/lltexteditor.cpp b/linden/indra/llui/lltexteditor.cpp
index 545fddb..4ed936f 100644
--- a/linden/indra/llui/lltexteditor.cpp
+++ b/linden/indra/llui/lltexteditor.cpp
@@ -64,6 +64,8 @@
64// 64//
65// Globals 65// Globals
66// 66//
67static LLRegisterWidget<LLTextEditor> r("simple_text_editor");
68
67BOOL gDebugTextEditorTips = FALSE; 69BOOL gDebugTextEditorTips = FALSE;
68 70
69// 71//
@@ -304,10 +306,10 @@ LLTextEditor::LLTextEditor(
304 // Init the scrollbar 306 // Init the scrollbar
305 LLRect scroll_rect; 307 LLRect scroll_rect;
306 scroll_rect.setOriginAndSize( 308 scroll_rect.setOriginAndSize(
307 getRect().getWidth() - UI_TEXTEDITOR_BORDER - SCROLLBAR_SIZE, 309 getRect().getWidth() - SCROLLBAR_SIZE,
308 UI_TEXTEDITOR_BORDER, 310 1,
309 SCROLLBAR_SIZE, 311 SCROLLBAR_SIZE,
310 getRect().getHeight() - 2 * UI_TEXTEDITOR_BORDER ); 312 getRect().getHeight() - 1);
311 S32 lines_in_doc = getLineCount(); 313 S32 lines_in_doc = getLineCount();
312 mScrollbar = new LLScrollbar( "Scrollbar", scroll_rect, 314 mScrollbar = new LLScrollbar( "Scrollbar", scroll_rect,
313 LLScrollbar::VERTICAL, 315 LLScrollbar::VERTICAL,
@@ -1102,14 +1104,7 @@ BOOL LLTextEditor::handleToolTip(S32 x, S32 y, LLString& msg, LLRect* sticky_rec
1102BOOL LLTextEditor::handleScrollWheel(S32 x, S32 y, S32 clicks) 1104BOOL LLTextEditor::handleScrollWheel(S32 x, S32 y, S32 clicks)
1103{ 1105{
1104 // Pretend the mouse is over the scrollbar 1106 // Pretend the mouse is over the scrollbar
1105 if (getVisible()) 1107 return mScrollbar->handleScrollWheel( 0, 0, clicks );
1106 {
1107 return mScrollbar->handleScrollWheel( 0, 0, clicks );
1108 }
1109 else
1110 {
1111 return FALSE;
1112 }
1113} 1108}
1114 1109
1115BOOL LLTextEditor::handleMouseDown(S32 x, S32 y, MASK mask) 1110BOOL LLTextEditor::handleMouseDown(S32 x, S32 y, MASK mask)
@@ -1197,91 +1192,88 @@ BOOL LLTextEditor::handleHover(S32 x, S32 y, MASK mask)
1197 BOOL handled = FALSE; 1192 BOOL handled = FALSE;
1198 1193
1199 mHoverSegment = NULL; 1194 mHoverSegment = NULL;
1200 if( getVisible() ) 1195 if(hasMouseCapture() )
1201 { 1196 {
1202 if(hasMouseCapture() ) 1197 if( mIsSelecting )
1203 { 1198 {
1204 if( mIsSelecting ) 1199 if (x != mLastSelectionX || y != mLastSelectionY)
1205 { 1200 {
1206 if (x != mLastSelectionX || y != mLastSelectionY) 1201 mLastSelectionX = x;
1207 { 1202 mLastSelectionY = y;
1208 mLastSelectionX = x; 1203 }
1209 mLastSelectionY = y;
1210 }
1211 1204
1212 if( y > mTextRect.mTop ) 1205 if( y > mTextRect.mTop )
1206 {
1207 mScrollbar->setDocPos( mScrollbar->getDocPos() - 1 );
1208 }
1209 else
1210 if( y < mTextRect.mBottom )
1211 {
1212 mScrollbar->setDocPos( mScrollbar->getDocPos() + 1 );
1213 }
1214
1215 setCursorAtLocalPos( x, y, TRUE );
1216 mSelectionEnd = mCursorPos;
1217
1218 updateScrollFromCursor();
1219 }
1220
1221 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (active)" << llendl;
1222 getWindow()->setCursor(UI_CURSOR_IBEAM);
1223 handled = TRUE;
1224 }
1225
1226 if( !handled )
1227 {
1228 // Pass to children
1229 handled = LLView::childrenHandleHover(x, y, mask) != NULL;
1230 }
1231
1232 if( handled )
1233 {
1234 // Delay cursor flashing
1235 resetKeystrokeTimer();
1236 }
1237
1238 // Opaque
1239 if( !handled && mTakesNonScrollClicks)
1240 {
1241 // Check to see if we're over an HTML-style link
1242 if( !mSegments.empty() )
1243 {
1244 const LLTextSegment* cur_segment = getSegmentAtLocalPos( x, y );
1245 if( cur_segment )
1246 {
1247 if(cur_segment->getStyle().isLink())
1213 { 1248 {
1214 mScrollbar->setDocPos( mScrollbar->getDocPos() - 1 ); 1249 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (over link, inactive)" << llendl;
1250 getWindow()->setCursor(UI_CURSOR_HAND);
1251 handled = TRUE;
1215 } 1252 }
1216 else 1253 else
1217 if( y < mTextRect.mBottom ) 1254 if(cur_segment->getStyle().getIsEmbeddedItem())
1218 { 1255 {
1219 mScrollbar->setDocPos( mScrollbar->getDocPos() + 1 ); 1256 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (over embedded item, inactive)" << llendl;
1257 getWindow()->setCursor(UI_CURSOR_HAND);
1258 //getWindow()->setCursor(UI_CURSOR_ARROW);
1259 handled = TRUE;
1220 } 1260 }
1221 1261 mHoverSegment = cur_segment;
1222 setCursorAtLocalPos( x, y, TRUE );
1223 mSelectionEnd = mCursorPos;
1224
1225 updateScrollFromCursor();
1226 } 1262 }
1227
1228 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (active)" << llendl;
1229 getWindow()->setCursor(UI_CURSOR_IBEAM);
1230 handled = TRUE;
1231 } 1263 }
1232 1264
1233 if( !handled ) 1265 if( !handled )
1234 { 1266 {
1235 // Pass to children 1267 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (inactive)" << llendl;
1236 handled = LLView::childrenHandleHover(x, y, mask) != NULL; 1268 if (!mScrollbar->getVisible() || x < getRect().getWidth() - SCROLLBAR_SIZE)
1237 }
1238
1239 if( handled )
1240 {
1241 // Delay cursor flashing
1242 resetKeystrokeTimer();
1243 }
1244
1245 // Opaque
1246 if( !handled && mTakesNonScrollClicks)
1247 {
1248 // Check to see if we're over an HTML-style link
1249 if( !mSegments.empty() )
1250 { 1269 {
1251 const LLTextSegment* cur_segment = getSegmentAtLocalPos( x, y ); 1270 getWindow()->setCursor(UI_CURSOR_IBEAM);
1252 if( cur_segment )
1253 {
1254 if(cur_segment->getStyle().isLink())
1255 {
1256 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (over link, inactive)" << llendl;
1257 getWindow()->setCursor(UI_CURSOR_HAND);
1258 handled = TRUE;
1259 }
1260 else
1261 if(cur_segment->getStyle().getIsEmbeddedItem())
1262 {
1263 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (over embedded item, inactive)" << llendl;
1264 getWindow()->setCursor(UI_CURSOR_HAND);
1265 //getWindow()->setCursor(UI_CURSOR_ARROW);
1266 handled = TRUE;
1267 }
1268 mHoverSegment = cur_segment;
1269 }
1270 } 1271 }
1271 1272 else
1272 if( !handled )
1273 { 1273 {
1274 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (inactive)" << llendl; 1274 getWindow()->setCursor(UI_CURSOR_ARROW);
1275 if (!mScrollbar->getVisible() || x < getRect().getWidth() - SCROLLBAR_SIZE)
1276 {
1277 getWindow()->setCursor(UI_CURSOR_IBEAM);
1278 }
1279 else
1280 {
1281 getWindow()->setCursor(UI_CURSOR_ARROW);
1282 }
1283 handled = TRUE;
1284 } 1275 }
1276 handled = TRUE;
1285 } 1277 }
1286 } 1278 }
1287 1279
@@ -2154,14 +2146,14 @@ void LLTextEditor::unindentLineBeforeCloseBrace()
2154} 2146}
2155 2147
2156 2148
2157BOOL LLTextEditor::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent ) 2149BOOL LLTextEditor::handleKeyHere(KEY key, MASK mask )
2158{ 2150{
2159 BOOL handled = FALSE; 2151 BOOL handled = FALSE;
2160 BOOL selection_modified = FALSE; 2152 BOOL selection_modified = FALSE;
2161 BOOL return_key_hit = FALSE; 2153 BOOL return_key_hit = FALSE;
2162 BOOL text_may_have_changed = TRUE; 2154 BOOL text_may_have_changed = TRUE;
2163 2155
2164 if ( (gFocusMgr.getKeyboardFocus() == this) && getVisible()) 2156 if ( gFocusMgr.getKeyboardFocus() == this )
2165 { 2157 {
2166 // Special case for TAB. If want to move to next field, report 2158 // Special case for TAB. If want to move to next field, report
2167 // not handled and let the parent take care of field movement. 2159 // not handled and let the parent take care of field movement.
@@ -2245,7 +2237,7 @@ BOOL LLTextEditor::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent )
2245} 2237}
2246 2238
2247 2239
2248BOOL LLTextEditor::handleUnicodeCharHere(llwchar uni_char, BOOL called_from_parent) 2240BOOL LLTextEditor::handleUnicodeCharHere(llwchar uni_char)
2249{ 2241{
2250 if ((uni_char < 0x20) || (uni_char == 0x7F)) // Control character or DEL 2242 if ((uni_char < 0x20) || (uni_char == 0x7F)) // Control character or DEL
2251 { 2243 {
@@ -2254,7 +2246,7 @@ BOOL LLTextEditor::handleUnicodeCharHere(llwchar uni_char, BOOL called_from_pare
2254 2246
2255 BOOL handled = FALSE; 2247 BOOL handled = FALSE;
2256 2248
2257 if ( (gFocusMgr.getKeyboardFocus() == this) && getVisible()) 2249 if ( gFocusMgr.getKeyboardFocus() == this )
2258 { 2250 {
2259 // Handle most keys only if the text editor is writeable. 2251 // Handle most keys only if the text editor is writeable.
2260 if( !mReadOnly ) 2252 if( !mReadOnly )
@@ -2939,8 +2931,8 @@ void LLTextEditor::drawText()
2939 LLStyle style = cur_segment->getStyle(); 2931 LLStyle style = cur_segment->getStyle();
2940 if ( style.isImage() && (cur_segment->getStart() >= seg_start) && (cur_segment->getStart() <= clipped_end)) 2932 if ( style.isImage() && (cur_segment->getStart() >= seg_start) && (cur_segment->getStart() <= clipped_end))
2941 { 2933 {
2942 LLImageGL *image = style.getImage(); 2934 LLUIImagePtr image = style.getImage();
2943 gl_draw_scaled_image( llround(text_x), llround(text_y)+line_height-style.mImageHeight, style.mImageWidth, style.mImageHeight, image, LLColor4::white ); 2935 image->draw(llround(text_x), llround(text_y)+line_height-style.mImageHeight, style.mImageWidth, style.mImageHeight);
2944 } 2936 }
2945 2937
2946 if (cur_segment == mHoverSegment && style.getIsEmbeddedItem()) 2938 if (cur_segment == mHoverSegment && style.getIsEmbeddedItem())
@@ -2984,7 +2976,7 @@ void LLTextEditor::drawClippedSegment(const LLWString &text, S32 seg_start, S32
2984 2976
2985 if ( style.getFontString()[0] ) 2977 if ( style.getFontString()[0] )
2986 { 2978 {
2987 font = gResMgr->getRes(style.getFontID()); 2979 font = LLResMgr::getInstance()->getRes(style.getFontID());
2988 } 2980 }
2989 2981
2990 U8 font_flags = LLFontGL::NORMAL; 2982 U8 font_flags = LLFontGL::NORMAL;
@@ -3051,10 +3043,6 @@ void LLTextEditor::drawClippedSegment(const LLWString &text, S32 seg_start, S32
3051 3043
3052void LLTextEditor::draw() 3044void LLTextEditor::draw()
3053{ 3045{
3054 if( !getVisible() )
3055 {
3056 return;
3057 }
3058 { 3046 {
3059 LLLocalClipRect clip(LLRect(0, getRect().getHeight(), getRect().getWidth() - (mScrollbar->getVisible() ? SCROLLBAR_SIZE : 0), 0)); 3047 LLLocalClipRect clip(LLRect(0, getRect().getHeight(), getRect().getWidth() - (mScrollbar->getVisible() ? SCROLLBAR_SIZE : 0), 0));
3060 3048
diff --git a/linden/indra/llui/lltexteditor.h b/linden/indra/llui/lltexteditor.h
index 7943129..54a34cc 100644
--- a/linden/indra/llui/lltexteditor.h
+++ b/linden/indra/llui/lltexteditor.h
@@ -71,9 +71,6 @@ public:
71 71
72 virtual ~LLTextEditor(); 72 virtual ~LLTextEditor();
73 73
74 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_TEXT_EDITOR; }
75 virtual LLString getWidgetTag() const { return LL_TEXT_EDITOR_TAG; }
76
77 virtual LLXMLNodePtr getXML(bool save_children = true) const; 74 virtual LLXMLNodePtr getXML(bool save_children = true) const;
78 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, class LLUICtrlFactory *factory); 75 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, class LLUICtrlFactory *factory);
79 void setTextEditorParameters(LLXMLNodePtr node); 76 void setTextEditorParameters(LLXMLNodePtr node);
@@ -85,8 +82,8 @@ public:
85 virtual BOOL handleHover(S32 x, S32 y, MASK mask); 82 virtual BOOL handleHover(S32 x, S32 y, MASK mask);
86 virtual BOOL handleScrollWheel(S32 x, S32 y, S32 clicks); 83 virtual BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
87 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask ); 84 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask );
88 virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent ); 85 virtual BOOL handleKeyHere(KEY key, MASK mask );
89 virtual BOOL handleUnicodeCharHere(llwchar uni_char, BOOL called_from_parent); 86 virtual BOOL handleUnicodeCharHere(llwchar uni_char);
90 87
91 virtual BOOL handleToolTip(S32 x, S32 y, LLString& msg, LLRect* sticky_rect); 88 virtual BOOL handleToolTip(S32 x, S32 y, LLString& msg, LLRect* sticky_rect);
92 virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, 89 virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
diff --git a/linden/indra/llui/llui.cpp b/linden/indra/llui/llui.cpp
index ec8c94e..aafd3af 100644
--- a/linden/indra/llui/llui.cpp
+++ b/linden/indra/llui/llui.cpp
@@ -55,6 +55,7 @@
55//#include "llstartup.h" 55//#include "llstartup.h"
56#include "llui.h" 56#include "llui.h"
57#include "llview.h" 57#include "llview.h"
58#include "lllineeditor.h"
58#include "llwindow.h" 59#include "llwindow.h"
59 60
60#include "llglheaders.h" 61#include "llglheaders.h"
@@ -73,7 +74,6 @@ std::list<LLString> gUntranslated;
73 74
74LLControlGroup* LLUI::sConfigGroup = NULL; 75LLControlGroup* LLUI::sConfigGroup = NULL;
75LLControlGroup* LLUI::sColorsGroup = NULL; 76LLControlGroup* LLUI::sColorsGroup = NULL;
76LLControlGroup* LLUI::sAssetsGroup = NULL;
77LLImageProviderInterface* LLUI::sImageProvider = NULL; 77LLImageProviderInterface* LLUI::sImageProvider = NULL;
78LLUIAudioCallback LLUI::sAudioCallback = NULL; 78LLUIAudioCallback LLUI::sAudioCallback = NULL;
79LLVector2 LLUI::sGLScaleFactor(1.f, 1.f); 79LLVector2 LLUI::sGLScaleFactor(1.f, 1.f);
@@ -321,7 +321,7 @@ void gl_drop_shadow(S32 left, S32 top, S32 right, S32 bottom, const LLColor4 &st
321void gl_line_2d(S32 x1, S32 y1, S32 x2, S32 y2 ) 321void gl_line_2d(S32 x1, S32 y1, S32 x2, S32 y2 )
322{ 322{
323 // Work around bug in ATI driver: vertical lines are offset by (-1,-1) 323 // Work around bug in ATI driver: vertical lines are offset by (-1,-1)
324 if( gGLManager.mATIOffsetVerticalLines && (x1 == x2) ) 324 if( (x1 == x2) && gGLManager.mATIOffsetVerticalLines )
325 { 325 {
326 x1++; 326 x1++;
327 x2++; 327 x2++;
@@ -340,7 +340,7 @@ void gl_line_2d(S32 x1, S32 y1, S32 x2, S32 y2 )
340void gl_line_2d(S32 x1, S32 y1, S32 x2, S32 y2, const LLColor4 &color ) 340void gl_line_2d(S32 x1, S32 y1, S32 x2, S32 y2, const LLColor4 &color )
341{ 341{
342 // Work around bug in ATI driver: vertical lines are offset by (-1,-1) 342 // Work around bug in ATI driver: vertical lines are offset by (-1,-1)
343 if( gGLManager.mATIOffsetVerticalLines && (x1 == x2) ) 343 if( (x1 == x2) && gGLManager.mATIOffsetVerticalLines )
344 { 344 {
345 x1++; 345 x1++;
346 x2++; 346 x2++;
@@ -458,24 +458,30 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLIma
458 return; 458 return;
459 } 459 }
460 460
461 // scale screen size of borders down 461 // shrink scaling region to be proportional to clipped image region
462 LLRectf clipped_scale_rect = uv_rect; 462 LLRectf scale_rect_uv(
463 clipped_scale_rect.intersectWith(scale_rect); 463 uv_rect.mLeft + (scale_rect.mLeft * uv_rect.getWidth()),
464 uv_rect.mBottom + (scale_rect.mTop * uv_rect.getHeight()),
465 uv_rect.mLeft + (scale_rect.mRight * uv_rect.getWidth()),
466 uv_rect.mBottom + (scale_rect.mBottom * uv_rect.getHeight()));
467
468 S32 image_natural_width = llround((F32)image->getWidth(0) * uv_rect.getWidth());
469 S32 image_natural_height = llround((F32)image->getHeight(0) * uv_rect.getHeight());
464 470
465 LLRect draw_rect(0, height, width, 0); 471 LLRect draw_rect(0, height, width, 0);
466 LLRect draw_scale_rect(llround((F32)image->getWidth() * scale_rect.mLeft), 472 LLRect draw_scale_rect(llround(scale_rect_uv.mLeft * (F32)image->getWidth(0)),
467 llround((F32)image->getHeight() * scale_rect.mTop), 473 llround(scale_rect_uv.mTop * (F32)image->getHeight(0)),
468 llround((F32)image->getWidth() * scale_rect.mRight), 474 llround(scale_rect_uv.mRight * (F32)image->getWidth(0)),
469 llround((F32)image->getHeight() * scale_rect.mBottom)); 475 llround(scale_rect_uv.mBottom * (F32)image->getHeight(0)));
470 // scale fixed region of image up with drawn region 476 // scale fixed region of image to drawn region
471 draw_scale_rect.mRight += width - image->getWidth(); 477 draw_scale_rect.mRight += width - image_natural_width;
472 draw_scale_rect.mTop += height - image->getHeight(); 478 draw_scale_rect.mTop += height - image_natural_height;
473 479
474 S32 border_shrink_width = llmax(0, draw_scale_rect.mLeft - draw_scale_rect.mRight); 480 S32 border_shrink_width = llmax(0, draw_scale_rect.mLeft - draw_scale_rect.mRight);
475 S32 border_shrink_height = llmax(0, draw_scale_rect.mBottom - draw_scale_rect.mTop); 481 S32 border_shrink_height = llmax(0, draw_scale_rect.mBottom - draw_scale_rect.mTop);
476 482
477 F32 shrink_width_ratio = scale_rect.getWidth() == 1.f ? 0.f : border_shrink_width / ((F32)image->getWidth() * (1.f - scale_rect.getWidth())); 483 F32 shrink_width_ratio = scale_rect.getWidth() == 1.f ? 0.f : border_shrink_width / ((F32)image_natural_width * (1.f - scale_rect.getWidth()));
478 F32 shrink_height_ratio = scale_rect.getHeight() == 1.f ? 0.f : border_shrink_height / ((F32)image->getHeight() * (1.f - scale_rect.getHeight())); 484 F32 shrink_height_ratio = scale_rect.getHeight() == 1.f ? 0.f : border_shrink_height / ((F32)image_natural_height * (1.f - scale_rect.getHeight()));
479 485
480 F32 shrink_scale = 1.f - llmax(shrink_width_ratio, shrink_height_ratio); 486 F32 shrink_scale = 1.f - llmax(shrink_width_ratio, shrink_height_ratio);
481 draw_scale_rect.mLeft = llround((F32)draw_scale_rect.mLeft * shrink_scale); 487 draw_scale_rect.mLeft = llround((F32)draw_scale_rect.mLeft * shrink_scale);
@@ -515,117 +521,117 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLIma
515 gGL.texCoord2f(uv_rect.mLeft, uv_rect.mBottom); 521 gGL.texCoord2f(uv_rect.mLeft, uv_rect.mBottom);
516 gGL.vertex2i(0, 0); 522 gGL.vertex2i(0, 0);
517 523
518 gGL.texCoord2f(clipped_scale_rect.mLeft, uv_rect.mBottom); 524 gGL.texCoord2f(scale_rect_uv.mLeft, uv_rect.mBottom);
519 gGL.vertex2i(draw_scale_rect.mLeft, 0); 525 gGL.vertex2i(draw_scale_rect.mLeft, 0);
520 526
521 gGL.texCoord2f(clipped_scale_rect.mLeft, clipped_scale_rect.mBottom); 527 gGL.texCoord2f(scale_rect_uv.mLeft, scale_rect_uv.mBottom);
522 gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mBottom); 528 gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mBottom);
523 529
524 gGL.texCoord2f(uv_rect.mLeft, clipped_scale_rect.mBottom); 530 gGL.texCoord2f(uv_rect.mLeft, scale_rect_uv.mBottom);
525 gGL.vertex2i(0, draw_scale_rect.mBottom); 531 gGL.vertex2i(0, draw_scale_rect.mBottom);
526 532
527 // draw bottom middle 533 // draw bottom middle
528 gGL.texCoord2f(clipped_scale_rect.mLeft, uv_rect.mBottom); 534 gGL.texCoord2f(scale_rect_uv.mLeft, uv_rect.mBottom);
529 gGL.vertex2i(draw_scale_rect.mLeft, 0); 535 gGL.vertex2i(draw_scale_rect.mLeft, 0);
530 536
531 gGL.texCoord2f(clipped_scale_rect.mRight, uv_rect.mBottom); 537 gGL.texCoord2f(scale_rect_uv.mRight, uv_rect.mBottom);
532 gGL.vertex2i(draw_scale_rect.mRight, 0); 538 gGL.vertex2i(draw_scale_rect.mRight, 0);
533 539
534 gGL.texCoord2f(clipped_scale_rect.mRight, clipped_scale_rect.mBottom); 540 gGL.texCoord2f(scale_rect_uv.mRight, scale_rect_uv.mBottom);
535 gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mBottom); 541 gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mBottom);
536 542
537 gGL.texCoord2f(clipped_scale_rect.mLeft, clipped_scale_rect.mBottom); 543 gGL.texCoord2f(scale_rect_uv.mLeft, scale_rect_uv.mBottom);
538 gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mBottom); 544 gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mBottom);
539 545
540 // draw bottom right 546 // draw bottom right
541 gGL.texCoord2f(clipped_scale_rect.mRight, uv_rect.mBottom); 547 gGL.texCoord2f(scale_rect_uv.mRight, uv_rect.mBottom);
542 gGL.vertex2i(draw_scale_rect.mRight, 0); 548 gGL.vertex2i(draw_scale_rect.mRight, 0);
543 549
544 gGL.texCoord2f(uv_rect.mRight, uv_rect.mBottom); 550 gGL.texCoord2f(uv_rect.mRight, uv_rect.mBottom);
545 gGL.vertex2i(width, 0); 551 gGL.vertex2i(width, 0);
546 552
547 gGL.texCoord2f(uv_rect.mRight, clipped_scale_rect.mBottom); 553 gGL.texCoord2f(uv_rect.mRight, scale_rect_uv.mBottom);
548 gGL.vertex2i(width, draw_scale_rect.mBottom); 554 gGL.vertex2i(width, draw_scale_rect.mBottom);
549 555
550 gGL.texCoord2f(clipped_scale_rect.mRight, clipped_scale_rect.mBottom); 556 gGL.texCoord2f(scale_rect_uv.mRight, scale_rect_uv.mBottom);
551 gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mBottom); 557 gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mBottom);
552 558
553 // draw left 559 // draw left
554 gGL.texCoord2f(uv_rect.mLeft, clipped_scale_rect.mBottom); 560 gGL.texCoord2f(uv_rect.mLeft, scale_rect_uv.mBottom);
555 gGL.vertex2i(0, draw_scale_rect.mBottom); 561 gGL.vertex2i(0, draw_scale_rect.mBottom);
556 562
557 gGL.texCoord2f(clipped_scale_rect.mLeft, clipped_scale_rect.mBottom); 563 gGL.texCoord2f(scale_rect_uv.mLeft, scale_rect_uv.mBottom);
558 gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mBottom); 564 gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mBottom);
559 565
560 gGL.texCoord2f(clipped_scale_rect.mLeft, clipped_scale_rect.mTop); 566 gGL.texCoord2f(scale_rect_uv.mLeft, scale_rect_uv.mTop);
561 gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mTop); 567 gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mTop);
562 568
563 gGL.texCoord2f(uv_rect.mLeft, clipped_scale_rect.mTop); 569 gGL.texCoord2f(uv_rect.mLeft, scale_rect_uv.mTop);
564 gGL.vertex2i(0, draw_scale_rect.mTop); 570 gGL.vertex2i(0, draw_scale_rect.mTop);
565 571
566 // draw middle 572 // draw middle
567 gGL.texCoord2f(clipped_scale_rect.mLeft, clipped_scale_rect.mBottom); 573 gGL.texCoord2f(scale_rect_uv.mLeft, scale_rect_uv.mBottom);
568 gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mBottom); 574 gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mBottom);
569 575
570 gGL.texCoord2f(clipped_scale_rect.mRight, clipped_scale_rect.mBottom); 576 gGL.texCoord2f(scale_rect_uv.mRight, scale_rect_uv.mBottom);
571 gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mBottom); 577 gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mBottom);
572 578
573 gGL.texCoord2f(clipped_scale_rect.mRight, clipped_scale_rect.mTop); 579 gGL.texCoord2f(scale_rect_uv.mRight, scale_rect_uv.mTop);
574 gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mTop); 580 gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mTop);
575 581
576 gGL.texCoord2f(clipped_scale_rect.mLeft, clipped_scale_rect.mTop); 582 gGL.texCoord2f(scale_rect_uv.mLeft, scale_rect_uv.mTop);
577 gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mTop); 583 gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mTop);
578 584
579 // draw right 585 // draw right
580 gGL.texCoord2f(clipped_scale_rect.mRight, clipped_scale_rect.mBottom); 586 gGL.texCoord2f(scale_rect_uv.mRight, scale_rect_uv.mBottom);
581 gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mBottom); 587 gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mBottom);
582 588
583 gGL.texCoord2f(uv_rect.mRight, clipped_scale_rect.mBottom); 589 gGL.texCoord2f(uv_rect.mRight, scale_rect_uv.mBottom);
584 gGL.vertex2i(width, draw_scale_rect.mBottom); 590 gGL.vertex2i(width, draw_scale_rect.mBottom);
585 591
586 gGL.texCoord2f(uv_rect.mRight, clipped_scale_rect.mTop); 592 gGL.texCoord2f(uv_rect.mRight, scale_rect_uv.mTop);
587 gGL.vertex2i(width, draw_scale_rect.mTop); 593 gGL.vertex2i(width, draw_scale_rect.mTop);
588 594
589 gGL.texCoord2f(clipped_scale_rect.mRight, clipped_scale_rect.mTop); 595 gGL.texCoord2f(scale_rect_uv.mRight, scale_rect_uv.mTop);
590 gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mTop); 596 gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mTop);
591 597
592 // draw top left 598 // draw top left
593 gGL.texCoord2f(uv_rect.mLeft, clipped_scale_rect.mTop); 599 gGL.texCoord2f(uv_rect.mLeft, scale_rect_uv.mTop);
594 gGL.vertex2i(0, draw_scale_rect.mTop); 600 gGL.vertex2i(0, draw_scale_rect.mTop);
595 601
596 gGL.texCoord2f(clipped_scale_rect.mLeft, clipped_scale_rect.mTop); 602 gGL.texCoord2f(scale_rect_uv.mLeft, scale_rect_uv.mTop);
597 gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mTop); 603 gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mTop);
598 604
599 gGL.texCoord2f(clipped_scale_rect.mLeft, uv_rect.mTop); 605 gGL.texCoord2f(scale_rect_uv.mLeft, uv_rect.mTop);
600 gGL.vertex2i(draw_scale_rect.mLeft, height); 606 gGL.vertex2i(draw_scale_rect.mLeft, height);
601 607
602 gGL.texCoord2f(uv_rect.mLeft, uv_rect.mTop); 608 gGL.texCoord2f(uv_rect.mLeft, uv_rect.mTop);
603 gGL.vertex2i(0, height); 609 gGL.vertex2i(0, height);
604 610
605 // draw top middle 611 // draw top middle
606 gGL.texCoord2f(clipped_scale_rect.mLeft, clipped_scale_rect.mTop); 612 gGL.texCoord2f(scale_rect_uv.mLeft, scale_rect_uv.mTop);
607 gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mTop); 613 gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mTop);
608 614
609 gGL.texCoord2f(clipped_scale_rect.mRight, clipped_scale_rect.mTop); 615 gGL.texCoord2f(scale_rect_uv.mRight, scale_rect_uv.mTop);
610 gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mTop); 616 gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mTop);
611 617
612 gGL.texCoord2f(clipped_scale_rect.mRight, uv_rect.mTop); 618 gGL.texCoord2f(scale_rect_uv.mRight, uv_rect.mTop);
613 gGL.vertex2i(draw_scale_rect.mRight, height); 619 gGL.vertex2i(draw_scale_rect.mRight, height);
614 620
615 gGL.texCoord2f(clipped_scale_rect.mLeft, uv_rect.mTop); 621 gGL.texCoord2f(scale_rect_uv.mLeft, uv_rect.mTop);
616 gGL.vertex2i(draw_scale_rect.mLeft, height); 622 gGL.vertex2i(draw_scale_rect.mLeft, height);
617 623
618 // draw top right 624 // draw top right
619 gGL.texCoord2f(clipped_scale_rect.mRight, clipped_scale_rect.mTop); 625 gGL.texCoord2f(scale_rect_uv.mRight, scale_rect_uv.mTop);
620 gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mTop); 626 gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mTop);
621 627
622 gGL.texCoord2f(uv_rect.mRight, clipped_scale_rect.mTop); 628 gGL.texCoord2f(uv_rect.mRight, scale_rect_uv.mTop);
623 gGL.vertex2i(width, draw_scale_rect.mTop); 629 gGL.vertex2i(width, draw_scale_rect.mTop);
624 630
625 gGL.texCoord2f(uv_rect.mRight, uv_rect.mTop); 631 gGL.texCoord2f(uv_rect.mRight, uv_rect.mTop);
626 gGL.vertex2i(width, height); 632 gGL.vertex2i(width, height);
627 633
628 gGL.texCoord2f(clipped_scale_rect.mRight, uv_rect.mTop); 634 gGL.texCoord2f(scale_rect_uv.mRight, uv_rect.mTop);
629 gGL.vertex2i(draw_scale_rect.mRight, height); 635 gGL.vertex2i(draw_scale_rect.mRight, height);
630 } 636 }
631 gGL.end(); 637 gGL.end();
@@ -1556,20 +1562,14 @@ void gl_segmented_rect_3d_tex_top(const LLVector2& border_scale, const LLVector3
1556 gl_segmented_rect_3d_tex(border_scale, border_width, border_height, width_vec, height_vec, ROUNDED_RECT_TOP); 1562 gl_segmented_rect_3d_tex(border_scale, border_width, border_height, width_vec, height_vec, ROUNDED_RECT_TOP);
1557} 1563}
1558 1564
1559class LLShowXUINamesListener: public LLSimpleListener 1565bool handleShowXUINamesChanged(const LLSD& newvalue)
1560{ 1566{
1561 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 1567 LLUI::sShowXUINames = newvalue.asBoolean();
1562 { 1568 return true;
1563 LLUI::sShowXUINames = (BOOL) event->getValue().asBoolean(); 1569}
1564 return true;
1565 }
1566};
1567static LLShowXUINamesListener show_xui_names_listener;
1568
1569 1570
1570void LLUI::initClass(LLControlGroup* config, 1571void LLUI::initClass(LLControlGroup* config,
1571 LLControlGroup* colors, 1572 LLControlGroup* colors,
1572 LLControlGroup* assets,
1573 LLImageProviderInterface* image_provider, 1573 LLImageProviderInterface* image_provider,
1574 LLUIAudioCallback audio_callback, 1574 LLUIAudioCallback audio_callback,
1575 const LLVector2* scale_factor, 1575 const LLVector2* scale_factor,
@@ -1577,7 +1577,6 @@ void LLUI::initClass(LLControlGroup* config,
1577{ 1577{
1578 sConfigGroup = config; 1578 sConfigGroup = config;
1579 sColorsGroup = colors; 1579 sColorsGroup = colors;
1580 sAssetsGroup = assets;
1581 sImageProvider = image_provider; 1580 sImageProvider = image_provider;
1582 sAudioCallback = audio_callback; 1581 sAudioCallback = audio_callback;
1583 sGLScaleFactor = (scale_factor == NULL) ? LLVector2(1.f, 1.f) : *scale_factor; 1582 sGLScaleFactor = (scale_factor == NULL) ? LLVector2(1.f, 1.f) : *scale_factor;
@@ -1585,11 +1584,13 @@ void LLUI::initClass(LLControlGroup* config,
1585 LLFontGL::sShadowColor = colors->getColor("ColorDropShadow"); 1584 LLFontGL::sShadowColor = colors->getColor("ColorDropShadow");
1586 1585
1587 LLUI::sShowXUINames = LLUI::sConfigGroup->getBOOL("ShowXUINames"); 1586 LLUI::sShowXUINames = LLUI::sConfigGroup->getBOOL("ShowXUINames");
1588 LLUI::sConfigGroup->getControl("ShowXUINames")->addListener(&show_xui_names_listener); 1587 LLUI::sConfigGroup->getControl("ShowXUINames")->getSignal()->connect(boost::bind(&handleShowXUINamesChanged, _1));
1589} 1588}
1590 1589
1591void LLUI::cleanupClass() 1590void LLUI::cleanupClass()
1592{ 1591{
1592 sImageProvider->cleanUp();
1593 LLLineEditor::cleanupClass();
1593} 1594}
1594 1595
1595 1596
@@ -1732,28 +1733,15 @@ void LLUI::glRectToScreen(const LLRect& gl, LLRect *screen)
1732 glPointToScreen(gl.mRight, gl.mBottom, &screen->mRight, &screen->mBottom); 1733 glPointToScreen(gl.mRight, gl.mBottom, &screen->mRight, &screen->mBottom);
1733} 1734}
1734 1735
1735//static
1736LLUUID LLUI::findAssetUUIDByName(const LLString &asset_name)
1737{
1738 if(asset_name == LLString::null) return LLUUID::null;
1739 LLString foundValue = LLUI::sConfigGroup->findString(asset_name);
1740 if(foundValue==LLString::null)
1741 {
1742 foundValue = LLUI::sAssetsGroup->findString(asset_name);
1743 }
1744 if(foundValue == LLString::null){
1745 return LLUUID::null;
1746 }
1747 return LLUUID( foundValue );
1748}
1749
1750//static 1736//static
1751LLUIImage* LLUI::getUIImageByName(const LLString& name) 1737LLUIImage* LLUI::getUIImage(const LLString& name)
1752{ 1738{
1753 return sImageProvider->getUIImageByID(findAssetUUIDByName(name)); 1739 if (!name.empty())
1740 return sImageProvider->getUIImage(name);
1741 else
1742 return NULL;
1754} 1743}
1755 1744
1756
1757// static 1745// static
1758void LLUI::setHtmlHelp(LLHtmlHelp* html_help) 1746void LLUI::setHtmlHelp(LLHtmlHelp* html_help)
1759{ 1747{
@@ -1834,7 +1822,8 @@ LLLocalClipRect::LLLocalClipRect(const LLRect &rect, BOOL enabled)
1834// LLUIImage 1822// LLUIImage
1835// 1823//
1836 1824
1837LLUIImage::LLUIImage(LLPointer<LLImageGL> image) : 1825LLUIImage::LLUIImage(const LLString& name, LLPointer<LLImageGL> image) :
1826 mName(name),
1838 mImage(image), 1827 mImage(image),
1839 mScaleRegion(0.f, 1.f, 1.f, 0.f), 1828 mScaleRegion(0.f, 1.f, 1.f, 0.f),
1840 mClipRegion(0.f, 1.f, 1.f, 0.f), 1829 mClipRegion(0.f, 1.f, 1.f, 0.f),
@@ -1898,24 +1887,32 @@ void LLUIImage::drawSolid(S32 x, S32 y, S32 width, S32 height, const LLColor4& c
1898 mScaleRegion); 1887 mScaleRegion);
1899} 1888}
1900 1889
1901void LLUIImage::drawSolid(S32 x, S32 y, const LLColor4& color) const 1890void LLUIImage::drawBorder(S32 x, S32 y, S32 width, S32 height, const LLColor4& color, S32 border_width) const
1902{ 1891{
1903 gl_draw_scaled_image_with_border( 1892 LLRect border_rect;
1904 x, y, 1893 border_rect.setOriginAndSize(x, y, width, height);
1905 getWidth(), getHeight(), 1894 border_rect.stretch(border_width, border_width);
1906 mImage, 1895 drawSolid(border_rect, color);
1907 color,
1908 TRUE,
1909 mClipRegion,
1910 mScaleRegion);
1911} 1896}
1912 1897
1913S32 LLUIImage::getWidth() const 1898S32 LLUIImage::getWidth() const
1914{ 1899{
1915 return mImage->getWidth(0); 1900 // return clipped dimensions of actual image area
1901 return llround((F32)mImage->getWidth(0) * mClipRegion.getWidth());
1916} 1902}
1917 1903
1918S32 LLUIImage::getHeight() const 1904S32 LLUIImage::getHeight() const
1919{ 1905{
1920 return mImage->getHeight(0); 1906 // return clipped dimensions of actual image area
1907 return llround((F32)mImage->getHeight(0) * mClipRegion.getHeight());
1908}
1909
1910S32 LLUIImage::getTextureWidth() const
1911{
1912 return mImage->getWidth(0);
1913}
1914
1915S32 LLUIImage::getTextureHeight() const
1916{
1917 return mImage->getHeight(0);
1921} 1918}
diff --git a/linden/indra/llui/llui.h b/linden/indra/llui/llui.h
index 9e275a5..0b06913 100644
--- a/linden/indra/llui/llui.h
+++ b/linden/indra/llui/llui.h
@@ -161,7 +161,6 @@ public:
161 // 161 //
162 static void initClass(LLControlGroup* config, 162 static void initClass(LLControlGroup* config,
163 LLControlGroup* colors, 163 LLControlGroup* colors,
164 LLControlGroup* assets,
165 LLImageProviderInterface* image_provider, 164 LLImageProviderInterface* image_provider,
166 LLUIAudioCallback audio_callback = NULL, 165 LLUIAudioCallback audio_callback = NULL,
167 const LLVector2 *scale_factor = NULL, 166 const LLVector2 *scale_factor = NULL,
@@ -179,8 +178,7 @@ public:
179 static void setCursorPositionLocal(const LLView* viewp, S32 x, S32 y); 178 static void setCursorPositionLocal(const LLView* viewp, S32 x, S32 y);
180 static void setScaleFactor(const LLVector2& scale_factor); 179 static void setScaleFactor(const LLVector2& scale_factor);
181 static void setLineWidth(F32 width); 180 static void setLineWidth(F32 width);
182 static LLUUID findAssetUUIDByName(const LLString& name); 181 static LLUIImage* getUIImage(const LLString& name);
183 static LLUIImage* getUIImageByName(const LLString& name);
184 static LLVector2 getWindowSize(); 182 static LLVector2 getWindowSize();
185 static void screenPointToGL(S32 screen_x, S32 screen_y, S32 *gl_x, S32 *gl_y); 183 static void screenPointToGL(S32 screen_x, S32 screen_y, S32 *gl_x, S32 *gl_y);
186 static void glPointToScreen(S32 gl_x, S32 gl_y, S32 *screen_x, S32 *screen_y); 184 static void glPointToScreen(S32 gl_x, S32 gl_y, S32 *screen_x, S32 *screen_y);
@@ -193,7 +191,6 @@ public:
193 // 191 //
194 static LLControlGroup* sConfigGroup; 192 static LLControlGroup* sConfigGroup;
195 static LLControlGroup* sColorsGroup; 193 static LLControlGroup* sColorsGroup;
196 static LLControlGroup* sAssetsGroup;
197 static LLImageProviderInterface* sImageProvider; 194 static LLImageProviderInterface* sImageProvider;
198 static LLUIAudioCallback sAudioCallback; 195 static LLUIAudioCallback sAudioCallback;
199 static LLVector2 sGLScaleFactor; 196 static LLVector2 sGLScaleFactor;
@@ -209,101 +206,6 @@ public:
209 206
210}; 207};
211 208
212// UI widgets
213// This MUST match UICtrlNames in lluictrlfactory.cpp
214typedef enum e_widget_type
215{
216 WIDGET_TYPE_VIEW = 0,
217 WIDGET_TYPE_ROOT_VIEW,
218 WIDGET_TYPE_FLOATER_VIEW,
219 WIDGET_TYPE_BUTTON,
220 WIDGET_TYPE_JOYSTICK_TURN,
221 WIDGET_TYPE_JOYSTICK_SLIDE,
222 WIDGET_TYPE_CHECKBOX,
223 WIDGET_TYPE_COLOR_SWATCH,
224 WIDGET_TYPE_COMBO_BOX,
225 WIDGET_TYPE_LINE_EDITOR,
226 WIDGET_TYPE_SEARCH_EDITOR,
227 WIDGET_TYPE_SCROLL_LIST,
228 WIDGET_TYPE_NAME_LIST,
229 WIDGET_TYPE_WEBBROWSER,
230 WIDGET_TYPE_SLIDER, // actually LLSliderCtrl
231 WIDGET_TYPE_SLIDER_BAR, // actually LLSlider
232 WIDGET_TYPE_VOLUME_SLIDER,//actually LLVolumeSliderCtrl
233 WIDGET_TYPE_MULTI_SLIDER, // actually LLMultiSliderCtrl
234 WIDGET_TYPE_MULTI_SLIDER_BAR, // actually LLMultiSlider
235 WIDGET_TYPE_SPINNER,
236 WIDGET_TYPE_TEXT_EDITOR,
237 WIDGET_TYPE_TEXTURE_PICKER,
238 WIDGET_TYPE_TEXT_BOX,
239 WIDGET_TYPE_PAD, // used in XML for positioning, not a real widget
240 WIDGET_TYPE_RADIO_GROUP,
241 WIDGET_TYPE_ICON,
242 WIDGET_TYPE_LANDMARK_PICKER,
243 WIDGET_TYPE_LOCATE, // used in XML for positioning, not a real widget
244 WIDGET_TYPE_VIEW_BORDER, // decorative border
245 WIDGET_TYPE_PANEL,
246 WIDGET_TYPE_MENU,
247 WIDGET_TYPE_PIE_MENU,
248 WIDGET_TYPE_PIE_MENU_BRANCH,
249 WIDGET_TYPE_MENU_ITEM,
250 WIDGET_TYPE_MENU_ITEM_SEPARATOR,
251 WIDGET_TYPE_MENU_SEPARATOR_VERTICAL,
252 WIDGET_TYPE_MENU_ITEM_CALL,
253 WIDGET_TYPE_MENU_ITEM_CHECK,
254 WIDGET_TYPE_MENU_ITEM_BRANCH,
255 WIDGET_TYPE_MENU_ITEM_BRANCH_DOWN,
256 WIDGET_TYPE_MENU_ITEM_BLANK,
257 WIDGET_TYPE_TEAROFF_MENU,
258 WIDGET_TYPE_MENU_BAR,
259 WIDGET_TYPE_TAB_CONTAINER,
260 WIDGET_TYPE_SCROLL_CONTAINER, // LLScrollableContainerView
261 WIDGET_TYPE_SCROLLBAR,
262 WIDGET_TYPE_INVENTORY_PANEL, // LLInventoryPanel
263 WIDGET_TYPE_FLOATER,
264 WIDGET_TYPE_DRAG_HANDLE_TOP,
265 WIDGET_TYPE_DRAG_HANDLE_LEFT,
266 WIDGET_TYPE_RESIZE_HANDLE,
267 WIDGET_TYPE_RESIZE_BAR,
268 WIDGET_TYPE_NAME_EDITOR,
269 WIDGET_TYPE_MULTI_FLOATER,
270 WIDGET_TYPE_MEDIA_REMOTE,
271 WIDGET_TYPE_FOLDER_VIEW,
272 WIDGET_TYPE_FOLDER_ITEM,
273 WIDGET_TYPE_FOLDER,
274 WIDGET_TYPE_STAT_GRAPH,
275 WIDGET_TYPE_STAT_VIEW,
276 WIDGET_TYPE_STAT_BAR,
277 WIDGET_TYPE_DROP_TARGET,
278 WIDGET_TYPE_TEXTURE_BAR,
279 WIDGET_TYPE_TEX_MEM_BAR,
280 WIDGET_TYPE_SNAPSHOT_LIVE_PREVIEW,
281 WIDGET_TYPE_STATUS_BAR,
282 WIDGET_TYPE_PROGRESS_VIEW,
283 WIDGET_TYPE_TALK_VIEW,
284 WIDGET_TYPE_OVERLAY_BAR,
285 WIDGET_TYPE_HUD_VIEW,
286 WIDGET_TYPE_HOVER_VIEW,
287 WIDGET_TYPE_MORPH_VIEW,
288 WIDGET_TYPE_NET_MAP,
289 WIDGET_TYPE_PERMISSIONS_VIEW,
290 WIDGET_TYPE_MENU_HOLDER,
291 WIDGET_TYPE_DEBUG_VIEW,
292 WIDGET_TYPE_SCROLLING_PANEL_LIST,
293 WIDGET_TYPE_AUDIO_STATUS,
294 WIDGET_TYPE_CONTAINER_VIEW,
295 WIDGET_TYPE_CONSOLE,
296 WIDGET_TYPE_FAST_TIMER_VIEW,
297 WIDGET_TYPE_VELOCITY_BAR,
298 WIDGET_TYPE_TEXTURE_VIEW,
299 WIDGET_TYPE_MEMORY_VIEW,
300 WIDGET_TYPE_FRAME_STAT_VIEW,
301 WIDGET_TYPE_LAYOUT_STACK,
302 WIDGET_TYPE_FLYOUT_BUTTON,
303 WIDGET_TYPE_DONTCARE,
304 WIDGET_TYPE_COUNT
305} EWidgetType;
306
307// FactoryPolicy is a static class that controls the creation and lookup of UI elements, 209// FactoryPolicy is a static class that controls the creation and lookup of UI elements,
308// such as floaters. 210// such as floaters.
309// The key parameter is used to provide a unique identifier and/or associated construction 211// The key parameter is used to provide a unique identifier and/or associated construction
@@ -509,7 +411,7 @@ public:
509class LLUIImage : public LLRefCount 411class LLUIImage : public LLRefCount
510{ 412{
511public: 413public:
512 LLUIImage(LLPointer<LLImageGL> image); 414 LLUIImage(const LLString& name, LLPointer<LLImageGL> image);
513 415
514 void setClipRegion(const LLRectf& region); 416 void setClipRegion(const LLRectf& region);
515 void setScaleRegion(const LLRectf& region); 417 void setScaleRegion(const LLRectf& region);
@@ -517,15 +419,29 @@ public:
517 LLPointer<LLImageGL> getImage() { return mImage; } 419 LLPointer<LLImageGL> getImage() { return mImage; }
518 const LLPointer<LLImageGL>& getImage() const { return mImage; } 420 const LLPointer<LLImageGL>& getImage() const { return mImage; }
519 421
520 void draw(S32 x, S32 y, const LLColor4& color = UI_VERTEX_COLOR) const;
521 void draw(S32 x, S32 y, S32 width, S32 height, const LLColor4& color = UI_VERTEX_COLOR) const; 422 void draw(S32 x, S32 y, S32 width, S32 height, const LLColor4& color = UI_VERTEX_COLOR) const;
423 void draw(S32 x, S32 y, const LLColor4& color = UI_VERTEX_COLOR) const;
424 void draw(const LLRect& rect, const LLColor4& color = UI_VERTEX_COLOR) const { draw(rect.mLeft, rect.mBottom, rect.getWidth(), rect.getHeight(), color); }
425
522 void drawSolid(S32 x, S32 y, S32 width, S32 height, const LLColor4& color) const; 426 void drawSolid(S32 x, S32 y, S32 width, S32 height, const LLColor4& color) const;
523 void drawSolid(S32 x, S32 y, const LLColor4& color) const; 427 void drawSolid(const LLRect& rect, const LLColor4& color) const { drawSolid(rect.mLeft, rect.mBottom, rect.getWidth(), rect.getHeight(), color); }
428 void drawSolid(S32 x, S32 y, const LLColor4& color) const { drawSolid(x, y, mImage->getWidth(0), mImage->getHeight(0), color); }
429
430 void drawBorder(S32 x, S32 y, S32 width, S32 height, const LLColor4& color, S32 border_width) const;
431 void drawBorder(const LLRect& rect, const LLColor4& color, S32 border_width) const { drawBorder(rect.mLeft, rect.mBottom, rect.getWidth(), rect.getHeight(), color, border_width); }
432 void drawBorder(S32 x, S32 y, const LLColor4& color, S32 border_width) const { drawBorder(x, y, mImage->getWidth(0), mImage->getHeight(0), color, border_width); }
433
434 const LLString& getName() const { return mName; }
524 435
525 S32 getWidth() const; 436 S32 getWidth() const;
526 S32 getHeight() const; 437 S32 getHeight() const;
527 438
439 // returns dimensions of underlying textures, which might not be equal to ui image portion
440 S32 getTextureWidth() const;
441 S32 getTextureHeight() const;
442
528protected: 443protected:
444 LLString mName;
529 LLRectf mScaleRegion; 445 LLRectf mScaleRegion;
530 LLRectf mClipRegion; 446 LLRectf mClipRegion;
531 LLPointer<LLImageGL> mImage; 447 LLPointer<LLImageGL> mImage;
@@ -533,6 +449,7 @@ protected:
533 BOOL mNoClip; 449 BOOL mNoClip;
534}; 450};
535 451
452typedef LLPointer<LLUIImage> LLUIImagePtr;
536 453
537template <typename T> 454template <typename T>
538class LLTombStone : public LLRefCount 455class LLTombStone : public LLRefCount
@@ -667,6 +584,7 @@ private:
667 LLRootHandle<T> mHandle; 584 LLRootHandle<T> mHandle;
668}; 585};
669 586
587
670//RN: maybe this needs to moved elsewhere? 588//RN: maybe this needs to moved elsewhere?
671class LLImageProviderInterface 589class LLImageProviderInterface
672{ 590{
@@ -674,8 +592,9 @@ public:
674 LLImageProviderInterface() {}; 592 LLImageProviderInterface() {};
675 virtual ~LLImageProviderInterface() {}; 593 virtual ~LLImageProviderInterface() {};
676 594
677 virtual LLUIImage* getUIImageByID(const LLUUID& id, BOOL clamped = TRUE) = 0; 595 virtual LLUIImagePtr getUIImage(const LLString& name) = 0;
678 virtual LLImageGL* getImageByID(const LLUUID& id, BOOL clamped = TRUE) = 0; 596 virtual LLUIImagePtr getUIImageByID(const LLUUID& id) = 0;
597 virtual void cleanUp() = 0;
679}; 598};
680 599
681#endif 600#endif
diff --git a/linden/indra/llui/lluictrl.cpp b/linden/indra/llui/lluictrl.cpp
index 0e6c155..66504b7 100644
--- a/linden/indra/llui/lluictrl.cpp
+++ b/linden/indra/llui/lluictrl.cpp
@@ -34,7 +34,9 @@
34#include "linden_common.h" 34#include "linden_common.h"
35#include "lluictrl.h" 35#include "lluictrl.h"
36#include "llfocusmgr.h" 36#include "llfocusmgr.h"
37#include "llpanel.h"
37 38
39static LLRegisterWidget<LLUICtrl> r("ui_ctrl");
38 40
39LLFocusableElement::LLFocusableElement() 41LLFocusableElement::LLFocusableElement()
40: mFocusLostCallback(NULL), 42: mFocusLostCallback(NULL),
@@ -473,7 +475,7 @@ BOOL LLUICtrl::focusPrevItem(BOOL text_fields_only)
473 return focusPrev(result); 475 return focusPrev(result);
474} 476}
475 477
476const LLUICtrl* LLUICtrl::findRootMostFocusRoot() const 478LLUICtrl* LLUICtrl::findRootMostFocusRoot() const
477{ 479{
478 const LLUICtrl* focus_root = NULL; 480 const LLUICtrl* focus_root = NULL;
479 const LLUICtrl* next_view = this; 481 const LLUICtrl* next_view = this;
@@ -485,7 +487,9 @@ const LLUICtrl* LLUICtrl::findRootMostFocusRoot() const
485 } 487 }
486 next_view = next_view->getParentUICtrl(); 488 next_view = next_view->getParentUICtrl();
487 } 489 }
488 return focus_root; 490 // since focus_root could be this, need to cast away const to return
491 // a non-const result
492 return const_cast<LLUICtrl*>(focus_root);
489} 493}
490 494
491 495
@@ -538,14 +542,22 @@ LLXMLNodePtr LLUICtrl::getXML(bool save_children) const
538 return node; 542 return node;
539} 543}
540 544
545//static
546LLView* LLUICtrl::fromXML(LLXMLNodePtr node, LLView* parent, class LLUICtrlFactory* factory)
547{
548 LLUICtrl* ctrl = new LLUICtrl();
549 ctrl->initFromXML(node, parent);
550 return ctrl;
551}
552
553
541// *NOTE: If other classes derive from LLPanel, they will need to be 554// *NOTE: If other classes derive from LLPanel, they will need to be
542// added to this function. 555// added to this function.
543LLPanel* LLUICtrl::getParentPanel() const 556LLPanel* LLUICtrl::getParentPanel() const
544{ 557{
545 LLView* parent = getParent(); 558 LLView* parent = getParent();
546 while (parent 559 LLPanel* parent_panel = dynamic_cast<LLPanel*>(parent);
547 && parent->getWidgetType() != WIDGET_TYPE_PANEL 560 while (!parent_panel)
548 && parent->getWidgetType() != WIDGET_TYPE_FLOATER)
549 { 561 {
550 parent = parent->getParent(); 562 parent = parent->getParent();
551 } 563 }
diff --git a/linden/indra/llui/lluictrl.h b/linden/indra/llui/lluictrl.h
index 0c43297..7bc5eeb 100644
--- a/linden/indra/llui/lluictrl.h
+++ b/linden/indra/llui/lluictrl.h
@@ -141,7 +141,9 @@ public:
141 void setValidateBeforeCommit( BOOL(*cb)(LLUICtrl*, void*) ) { mValidateCallback = cb; } 141 void setValidateBeforeCommit( BOOL(*cb)(LLUICtrl*, void*) ) { mValidateCallback = cb; }
142 void setLostTopCallback( void (*cb)(LLUICtrl*, void*) ) { mLostTopCallback = cb; } 142 void setLostTopCallback( void (*cb)(LLUICtrl*, void*) ) { mLostTopCallback = cb; }
143 143
144 const LLUICtrl* findRootMostFocusRoot() const; 144 static LLView* fromXML(LLXMLNodePtr node, LLView* parent, class LLUICtrlFactory* factory);
145
146 LLUICtrl* findRootMostFocusRoot() const;
145 147
146 class LLTextInputFilter : public LLQueryFilter, public LLSingleton<LLTextInputFilter> 148 class LLTextInputFilter : public LLQueryFilter, public LLSingleton<LLTextInputFilter>
147 { 149 {
diff --git a/linden/indra/llui/lluictrlfactory.cpp b/linden/indra/llui/lluictrlfactory.cpp
index cfee76a..cc8135c 100644
--- a/linden/indra/llui/lluictrlfactory.cpp
+++ b/linden/indra/llui/lluictrlfactory.cpp
@@ -71,100 +71,6 @@
71 71
72const char XML_HEADER[] = "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\" ?>\n"; 72const char XML_HEADER[] = "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\" ?>\n";
73 73
74// *NOTE: If you add a new class derived from LLPanel, add a check for its
75// widget type to LLUICtrl::getParentPanel().
76// *NOTE: This MUST match EWidgetType in llui.h
77//static
78const LLString LLUICtrlFactory::sUICtrlNames[WIDGET_TYPE_COUNT] =
79{
80 LLString("view"), //WIDGET_TYPE_VIEW
81 LLString("root_view"), //WIDGET_TYPE_ROOT_VIEW
82 LLString("floater_view"), //WIDGET_TYPE_FLOATER_VIEW
83 LLString("button"), //WIDGET_TYPE_BUTTON
84 LLString("joystick_turn"), //WIDGET_TYPE_JOYSTICK_TURN
85 LLString("joystick_slide"), //WIDGET_TYPE_JOYSTICK_SLIDE
86 LLString("check_box"), //WIDGET_TYPE_CHECKBOX
87 LLString("color_swatch"), //WIDGET_TYPE_COLOR_SWATCH
88 LLString("combo_box"), //WIDGET_TYPE_COMBO_BOX
89 LLString("line_editor"), //WIDGET_TYPE_LINE_EDITOR
90 LLString("search_editor"), //WIDGET_TYPE_SEARCH_EDITOR
91 LLString("scroll_list"), //WIDGET_TYPE_SCROLL_LIST
92 LLString("name_list"), //WIDGET_TYPE_NAME_LIST
93 LLString("web_browser"), //WIDGET_TYPE_WEBBROWSER
94 LLString("slider"), //WIDGET_TYPE_SLIDER, actually LLSliderCtrl
95 LLString("slider_bar"), //WIDGET_TYPE_SLIDER_BAR, actually LLSlider
96 LLString("volume_slider"), //WIDGET_TYPE_VOLUME_SLIDER, actually LLSlider + "volume" param
97 LLString("multi_slider"), //WIDGET_TYPE_MULTI_SLIDER, actually LLMultiSliderCtrl
98 LLString("multi_slider_bar"), //WIDGET_TYPE_MULTI_SLIDER_BAR, actually LLMultiSlider
99 LLString("spinner"), //WIDGET_TYPE_SPINNER, actually LLSpinCtrl
100 LLString("text_editor"), //WIDGET_TYPE_TEXT_EDITOR
101 LLString("texture_picker"),//WIDGET_TYPE_TEXTURE_PICKER
102 LLString("text"), //WIDGET_TYPE_TEXT_BOX
103 LLString("pad"), //WIDGET_TYPE_PAD
104 LLString("radio_group"), //WIDGET_TYPE_RADIO_GROUP
105 LLString("icon"), //WIDGET_TYPE_ICON
106 LLString("locate"), //WIDGET_TYPE_LOCATE
107 LLString("view_border"), //WIDGET_TYPE_VIEW_BORDER
108 LLString("panel"), //WIDGET_TYPE_PANEL
109 LLString("menu"), //WIDGET_TYPE_MENU
110 LLString("pie_menu"), //WIDGET_TYPE_PIE_MENU
111 LLString("pie_menu_branch"), //WIDGET_TYPE_PIE_MENU_BRANCH
112 LLString("menu_item"), //WIDGET_TYPE_MENU_ITEM
113 LLString("menu_item_separator"), //WIDGET_TYPE_MENU_ITEM_SEPARATOR
114 LLString("menu_separator_vertical"), // WIDGET_TYPE_MENU_SEPARATOR_VERTICAL
115 LLString("menu_item_call"), // WIDGET_TYPE_MENU_ITEM_CALL
116 LLString("menu_item_check"),// WIDGET_TYPE_MENU_ITEM_CHECK
117 LLString("menu_item_branch"), // WIDGET_TYPE_MENU_ITEM_BRANCH
118 LLString("menu_item_branch_down"), //WIDGET_TYPE_MENU_ITEM_BRANCH_DOWN,
119 LLString("menu_item_blank"), //WIDGET_TYPE_MENU_ITEM_BLANK,
120 LLString("tearoff_menu"), //WIDGET_TYPE_TEAROFF_MENU
121 LLString("menu_bar"), //WIDGET_TYPE_MENU_BAR
122 LLString("tab_container"),//WIDGET_TYPE_TAB_CONTAINER
123 LLString("scroll_container"),//WIDGET_TYPE_SCROLL_CONTAINER
124 LLString("scrollbar"), //WIDGET_TYPE_SCROLLBAR
125 LLString("inventory_panel"), //WIDGET_TYPE_INVENTORY_PANEL
126 LLString("floater"), //WIDGET_TYPE_FLOATER
127 LLString("drag_handle_top"), //WIDGET_TYPE_DRAG_HANDLE_TOP
128 LLString("drag_handle_left"), //WIDGET_TYPE_DRAG_HANDLE_LEFT
129 LLString("resize_handle"), //WIDGET_TYPE_RESIZE_HANDLE
130 LLString("resize_bar"), //WIDGET_TYPE_RESIZE_BAR
131 LLString("name_editor"), //WIDGET_TYPE_NAME_EDITOR
132 LLString("multi_floater"), //WIDGET_TYPE_MULTI_FLOATER
133 LLString("media_remote"), //WIDGET_TYPE_MEDIA_REMOTE
134 LLString("folder_view"), //WIDGET_TYPE_FOLDER_VIEW
135 LLString("folder_item"), //WIDGET_TYPE_FOLDER_ITEM
136 LLString("folder"), //WIDGET_TYPE_FOLDER
137 LLString("stat_graph"), //WIDGET_TYPE_STAT_GRAPH
138 LLString("stat_view"), //WIDGET_TYPE_STAT_VIEW
139 LLString("stat_bar"), //WIDGET_TYPE_STAT_BAR
140 LLString("drop_target"), //WIDGET_TYPE_DROP_TARGET
141 LLString("texture_bar"), //WIDGET_TYPE_TEXTURE_BAR
142 LLString("tex_mem_bar"), //WIDGET_TYPE_TEX_MEM_BAR
143 LLString("snapshot_live_preview"), //WIDGET_TYPE_SNAPSHOT_LIVE_PREVIEW
144 LLString("status_bar"), //WIDGET_TYPE_STATUS_BAR
145 LLString("progress_view"), //WIDGET_TYPE_PROGRESS_VIEW
146 LLString("talk_view"), //WIDGET_TYPE_TALK_VIEW
147 LLString("overlay_bar"), //WIDGET_TYPE_OVERLAY_BAR
148 LLString("hud_view"), //WIDGET_TYPE_HUD_VIEW
149 LLString("hover_view"), //WIDGET_TYPE_HOVER_VIEW
150 LLString("morph_view"), //WIDGET_TYPE_MORPH_VIEW
151 LLString("net_map"), //WIDGET_TYPE_NET_MAP
152 LLString("permissions_view"), //WIDGET_TYPE_PERMISSIONS_VIEW
153 LLString("menu_holder"), //WIDGET_TYPE_MENU_HOLDER
154 LLString("debug_view"), //WIDGET_TYPE_DEBUG_VIEW
155 LLString("scrolling_panel_list"), //WIDGET_TYPE_SCROLLING_PANEL_LIST
156 LLString("audio_status"), //WIDGET_TYPE_AUDIO_STATUS
157 LLString("container_view"), //WIDGET_TYPE_CONTAINER_VIEW
158 LLString("console"), //WIDGET_TYPE_CONSOLE
159 LLString("fast_timer_view"), //WIDGET_TYPE_FAST_TIMER_VIEW
160 LLString("velocity_bar"), //WIDGET_TYPE_VELOCITY_BAR
161 LLString("texture_view"), //WIDGET_TYPE_TEXTURE_VIEW
162 LLString("memory_view"), //WIDGET_TYPE_MEMORY_VIEW
163 LLString("frame_stat_view"), //WIDGET_TYPE_FRAME_STAT_VIEW
164 LLString("layout_stack"), //WIDGET_TYPE_LAYOUT_STACK
165 LLString("DONT_CARE"), //WIDGET_TYPE_DONTCARE
166};
167
168const S32 HPAD = 4; 74const S32 HPAD = 4;
169const S32 VPAD = 4; 75const S32 VPAD = 4;
170const S32 FLOATER_H_MARGIN = 15; 76const S32 FLOATER_H_MARGIN = 15;
@@ -179,9 +85,6 @@ public:
179 LLUICtrlLocate() : LLUICtrl("locate", LLRect(0,0,0,0), FALSE, NULL, NULL) { setTabStop(FALSE); } 85 LLUICtrlLocate() : LLUICtrl("locate", LLRect(0,0,0,0), FALSE, NULL, NULL) { setTabStop(FALSE); }
180 virtual void draw() { } 86 virtual void draw() { }
181 87
182 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_LOCATE; }
183 virtual LLString getWidgetTag() const { return LL_UI_CTRL_LOCATE_TAG; }
184
185 static LLView *fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory) 88 static LLView *fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory)
186 { 89 {
187 LLString name("pad"); 90 LLString name("pad");
@@ -194,39 +97,14 @@ public:
194 } 97 }
195}; 98};
196 99
100static LLRegisterWidget<LLUICtrlLocate> r1("locate");
101static LLRegisterWidget<LLUICtrlLocate> r2("pad");
102
197//----------------------------------------------------------------------------- 103//-----------------------------------------------------------------------------
198// LLUICtrlFactory() 104// LLUICtrlFactory()
199//----------------------------------------------------------------------------- 105//-----------------------------------------------------------------------------
200LLUICtrlFactory::LLUICtrlFactory() 106LLUICtrlFactory::LLUICtrlFactory()
201{ 107{
202 // Register controls
203 LLUICtrlCreator<LLButton>::registerCreator(LL_BUTTON_TAG, this);
204 LLUICtrlCreator<LLCheckBoxCtrl>::registerCreator(LL_CHECK_BOX_CTRL_TAG, this);
205 LLUICtrlCreator<LLComboBox>::registerCreator(LL_COMBO_BOX_TAG, this);
206 LLUICtrlCreator<LLFlyoutButton>::registerCreator(LL_FLYOUT_BUTTON_TAG, this);
207 LLUICtrlCreator<LLLineEditor>::registerCreator(LL_LINE_EDITOR_TAG, this);
208 LLUICtrlCreator<LLSearchEditor>::registerCreator(LL_SEARCH_EDITOR_TAG, this);
209 LLUICtrlCreator<LLScrollListCtrl>::registerCreator(LL_SCROLL_LIST_CTRL_TAG, this);
210 LLUICtrlCreator<LLSliderCtrl>::registerCreator(LL_SLIDER_CTRL_TAG, this);
211 LLUICtrlCreator<LLSlider>::registerCreator(LL_SLIDER_TAG, this);
212 LLUICtrlCreator<LLSlider>::registerCreator(LL_VOLUME_SLIDER_CTRL_TAG, this);
213 LLUICtrlCreator<LLMultiSliderCtrl>::registerCreator(LL_MULTI_SLIDER_CTRL_TAG, this);
214 LLUICtrlCreator<LLMultiSlider>::registerCreator(LL_MULTI_SLIDER_TAG, this);
215 LLUICtrlCreator<LLSpinCtrl>::registerCreator(LL_SPIN_CTRL_TAG, this);
216 LLUICtrlCreator<LLTextBox>::registerCreator(LL_TEXT_BOX_TAG, this);
217 LLUICtrlCreator<LLRadioGroup>::registerCreator(LL_RADIO_GROUP_TAG, this);
218 LLUICtrlCreator<LLIconCtrl>::registerCreator(LL_ICON_CTRL_TAG, this);
219 LLUICtrlCreator<LLUICtrlLocate>::registerCreator(LL_UI_CTRL_LOCATE_TAG, this);
220 LLUICtrlCreator<LLUICtrlLocate>::registerCreator(LL_PAD_TAG, this);
221 LLUICtrlCreator<LLViewBorder>::registerCreator(LL_VIEW_BORDER_TAG, this);
222 LLUICtrlCreator<LLTabContainer>::registerCreator(LL_TAB_CONTAINER_COMMON_TAG, this);
223 LLUICtrlCreator<LLScrollableContainerView>::registerCreator(LL_SCROLLABLE_CONTAINER_VIEW_TAG, this);
224 LLUICtrlCreator<LLPanel>::registerCreator(LL_PANEL_TAG, this);
225 LLUICtrlCreator<LLMenuGL>::registerCreator(LL_MENU_GL_TAG, this);
226 LLUICtrlCreator<LLMenuBarGL>::registerCreator(LL_MENU_BAR_GL_TAG, this);
227 LLUICtrlCreator<LLScrollingPanelList>::registerCreator(LL_SCROLLING_PANEL_LIST_TAG, this);
228 LLUICtrlCreator<LLLayoutStack>::registerCreator(LL_LAYOUT_STACK_TAG, this);
229
230 setupPaths(); 108 setupPaths();
231} 109}
232 110
@@ -548,43 +426,33 @@ void LLUICtrlFactory::rebuild()
548//----------------------------------------------------------------------------- 426//-----------------------------------------------------------------------------
549//----------------------------------------------------------------------------- 427//-----------------------------------------------------------------------------
550 428
551// static
552EWidgetType LLUICtrlFactory::getWidgetType(const LLString& ctrl_type)
553{
554 U32 ctrl_id;
555 for (ctrl_id = 0; ctrl_id < WIDGET_TYPE_COUNT; ctrl_id++)
556 {
557 if (sUICtrlNames[ctrl_id] == ctrl_type)
558 {
559 break;
560 }
561 }
562 return (EWidgetType) ctrl_id;
563}
564
565LLString LLUICtrlFactory::getWidgetType(EWidgetType ctrl_type)
566{
567 return sUICtrlNames[ctrl_type];
568}
569
570LLView *LLUICtrlFactory::createCtrlWidget(LLPanel *parent, LLXMLNodePtr node) 429LLView *LLUICtrlFactory::createCtrlWidget(LLPanel *parent, LLXMLNodePtr node)
571{ 430{
431 // panel for holding dummy widgets, so they have a parent for layout purposes, etc.
432 // does not manage lifetime of child widgets
433 static LLPanel dummy_panel;
434
572 LLString ctrl_type = node->getName()->mString; 435 LLString ctrl_type = node->getName()->mString;
573 LLString::toLower(ctrl_type); 436 LLString::toLower(ctrl_type);
574 437
575 creator_list_t::const_iterator it = mCreatorFunctions.find(ctrl_type); 438 LLWidgetClassRegistry::factory_func_t func = LLWidgetClassRegistry::getInstance()->getCreatorFunc(ctrl_type);
576 if (it == mCreatorFunctions.end()) 439
440 if (func == NULL)
577 { 441 {
578 llwarns << "Unknown control type " << ctrl_type << llendl; 442 llwarns << "Unknown control type " << ctrl_type << llendl;
579 return NULL; 443 return NULL;
580 } 444 }
581 445
582 LLView *ctrl = (*it->second)(node, parent, this); 446 if (parent == NULL)
447 {
448 parent = &dummy_panel;
449 }
450 LLView *ctrl = func(node, parent, this);
583 451
584 return ctrl; 452 return ctrl;
585} 453}
586 454
587void LLUICtrlFactory::createWidget(LLPanel *parent, LLXMLNodePtr node) 455LLView* LLUICtrlFactory::createWidget(LLPanel *parent, LLXMLNodePtr node)
588{ 456{
589 LLView* view = createCtrlWidget(parent, node); 457 LLView* view = createCtrlWidget(parent, node);
590 458
@@ -595,6 +463,8 @@ void LLUICtrlFactory::createWidget(LLPanel *parent, LLXMLNodePtr node)
595 { 463 {
596 parent->addChild(view, tab_group); 464 parent->addChild(view, tab_group);
597 } 465 }
466
467 return view;
598} 468}
599 469
600//----------------------------------------------------------------------------- 470//-----------------------------------------------------------------------------
@@ -648,138 +518,3 @@ BOOL LLUICtrlFactory::getAttributeColor(LLXMLNodePtr node, const LLString& name,
648 return res; 518 return res;
649} 519}
650 520
651//============================================================================
652
653LLButton* LLUICtrlFactory::getButtonByName(const LLPanel* panelp, const LLString& name)
654{
655 return panelp->getChild<LLButton>(name);
656}
657
658LLCheckBoxCtrl* LLUICtrlFactory::getCheckBoxByName(const LLPanel* panelp, const LLString& name)
659{
660 return panelp->getChild<LLCheckBoxCtrl>(name);
661}
662
663LLComboBox* LLUICtrlFactory::getComboBoxByName(const LLPanel* panelp, const LLString& name)
664{
665 return panelp->getChild<LLComboBox>(name);
666}
667
668LLIconCtrl* LLUICtrlFactory::getIconByName(const LLPanel* panelp, const LLString& name)
669{
670 return panelp->getChild<LLIconCtrl>(name);
671}
672
673LLLineEditor* LLUICtrlFactory::getLineEditorByName(const LLPanel* panelp, const LLString& name)
674{
675 return panelp->getChild<LLLineEditor>(name);
676}
677
678LLRadioGroup* LLUICtrlFactory::getRadioGroupByName(const LLPanel* panelp, const LLString& name)
679{
680 return panelp->getChild<LLRadioGroup>(name);
681}
682
683LLScrollListCtrl* LLUICtrlFactory::getScrollListByName(const LLPanel* panelp, const LLString& name)
684{
685 return panelp->getChild<LLScrollListCtrl>(name);
686}
687
688LLSliderCtrl* LLUICtrlFactory::getSliderByName(const LLPanel* panelp, const LLString& name)
689{
690 return panelp->getChild<LLSliderCtrl>(name);
691}
692
693LLSlider* LLUICtrlFactory::getSliderBarByName(const LLPanel* panelp, const LLString& name)
694{
695 return panelp->getChild<LLSlider>(name);
696}
697
698LLSpinCtrl* LLUICtrlFactory::getSpinnerByName(const LLPanel* panelp, const LLString& name)
699{
700 return panelp->getChild<LLSpinCtrl>(name);
701}
702
703LLTextBox* LLUICtrlFactory::getTextBoxByName(const LLPanel* panelp, const LLString& name)
704{
705 return panelp->getChild<LLTextBox>(name);
706}
707
708LLTextEditor* LLUICtrlFactory::getTextEditorByName(const LLPanel* panelp, const LLString& name)
709{
710 return panelp->getChild<LLTextEditor>(name);
711}
712
713LLTabContainer* LLUICtrlFactory::getTabContainerByName(const LLPanel* panelp, const LLString& name)
714{
715 return panelp->getChild<LLTabContainer>(name);
716}
717
718LLScrollableContainerView* LLUICtrlFactory::getScrollableContainerByName(const LLPanel* panelp, const LLString& name)
719{
720 return panelp->getChild<LLScrollableContainerView>(name);
721}
722
723LLPanel* LLUICtrlFactory::getPanelByName(const LLPanel* panelp, const LLString& name)
724{
725 return panelp->getChild<LLPanel>(name);
726}
727
728LLMenuItemCallGL* LLUICtrlFactory::getMenuItemCallByName(const LLPanel* panelp, const LLString& name)
729{
730 return panelp->getChild<LLMenuItemCallGL>(name);
731}
732
733LLScrollingPanelList* LLUICtrlFactory::getScrollingPanelList(const LLPanel* panelp, const LLString& name)
734{
735 return panelp->getChild<LLScrollingPanelList>(name);
736}
737
738LLMultiSliderCtrl* LLUICtrlFactory::getMultiSliderByName(const LLPanel* panelp, const LLString& name)
739{
740 return panelp->getChild<LLMultiSliderCtrl>(name);
741}
742
743LLMultiSlider* LLUICtrlFactory::getMultiSliderBarByName(const LLPanel* panelp, const LLString& name)
744{
745 return panelp->getChild<LLMultiSlider>(name);
746}
747
748
749LLCtrlListInterface* LLUICtrlFactory::getListInterfaceByName(const LLPanel* panelp, const LLString& name)
750{
751 LLView* viewp = panelp->getCtrlByNameAndType(name, WIDGET_TYPE_DONTCARE);
752 if (viewp && viewp->isCtrl())
753 {
754 return ((LLUICtrl*)viewp)->getListInterface();
755 }
756 return NULL;
757}
758
759LLCtrlSelectionInterface* LLUICtrlFactory::getSelectionInterfaceByName(const LLPanel* panelp, const LLString& name)
760{
761 LLView* viewp = panelp->getCtrlByNameAndType(name, WIDGET_TYPE_DONTCARE);
762 if (viewp && viewp->isCtrl())
763 {
764 return ((LLUICtrl*)viewp)->getSelectionInterface();
765 }
766 return NULL;
767}
768
769LLCtrlScrollInterface* LLUICtrlFactory::getScrollInterfaceByName(const LLPanel* panelp, const LLString& name)
770{
771 LLView* viewp = panelp->getCtrlByNameAndType(name, WIDGET_TYPE_DONTCARE);
772 if (viewp && viewp->isCtrl())
773 {
774 return ((LLUICtrl*)viewp)->getScrollInterface();
775 }
776 return NULL;
777}
778
779void LLUICtrlFactory::registerCreator(LLString ctrlname, creator_function_t function)
780{
781 LLString::toLower(ctrlname);
782 mCreatorFunctions[ctrlname] = function;
783}
784
785
diff --git a/linden/indra/llui/lluictrlfactory.h b/linden/indra/llui/lluictrlfactory.h
index e6a2cd3..b9325a0 100644
--- a/linden/indra/llui/lluictrlfactory.h
+++ b/linden/indra/llui/lluictrlfactory.h
@@ -41,7 +41,7 @@
41class LLView; 41class LLView;
42class LLPanel; 42class LLPanel;
43 43
44class LLUICtrlFactory 44class LLUICtrlFactory : public LLSingleton<LLUICtrlFactory>
45{ 45{
46public: 46public:
47 LLUICtrlFactory(); 47 LLUICtrlFactory();
@@ -49,7 +49,7 @@ public:
49 virtual ~LLUICtrlFactory() {} 49 virtual ~LLUICtrlFactory() {}
50 50
51 void setupPaths(); 51 void setupPaths();
52 52
53 void buildFloater(LLFloater* floaterp, const LLString &filename, 53 void buildFloater(LLFloater* floaterp, const LLString &filename,
54 const LLCallbackMap::map_t* factory_map = NULL, BOOL open = TRUE); 54 const LLCallbackMap::map_t* factory_map = NULL, BOOL open = TRUE);
55 BOOL buildPanel(LLPanel* panelp, const LLString &filename, 55 BOOL buildPanel(LLPanel* panelp, const LLString &filename,
@@ -65,84 +65,28 @@ public:
65 // Returns 0 on success 65 // Returns 0 on success
66 S32 saveToXML(LLView* viewp, const LLString& filename); 66 S32 saveToXML(LLView* viewp, const LLString& filename);
67 67
68
69 // Rebuilds all currently built panels. 68 // Rebuilds all currently built panels.
70 void rebuild(); 69 void rebuild();
71 70
72 static EWidgetType getWidgetType(const LLString& ctrl_type);
73 static LLString getWidgetType(EWidgetType ctrl_type);
74 static BOOL getAttributeColor(LLXMLNodePtr node, const LLString& name, LLColor4& color); 71 static BOOL getAttributeColor(LLXMLNodePtr node, const LLString& name, LLColor4& color);
75 72
76 // specific typed getters
77 static class LLButton* getButtonByName( const LLPanel* panelp, const LLString& name);
78 static class LLCheckBoxCtrl* getCheckBoxByName( const LLPanel* panelp, const LLString& name);
79 static class LLComboBox* getComboBoxByName( const LLPanel* panelp, const LLString& name);
80 static class LLIconCtrl* getIconByName( const LLPanel* panelp, const LLString& name);
81 static class LLLineEditor* getLineEditorByName( const LLPanel* panelp, const LLString& name);
82 static class LLRadioGroup* getRadioGroupByName( const LLPanel* panelp, const LLString& name);
83 static class LLScrollListCtrl* getScrollListByName( const LLPanel* panelp, const LLString& name);
84 static class LLSliderCtrl* getSliderByName( const LLPanel* panelp, const LLString& name);
85 static class LLSlider* getSliderBarByName( const LLPanel* panelp, const LLString& name);
86 static class LLSpinCtrl* getSpinnerByName( const LLPanel* panelp, const LLString& name);
87 static class LLTextBox* getTextBoxByName( const LLPanel* panelp, const LLString& name);
88 static class LLTextEditor* getTextEditorByName( const LLPanel* panelp, const LLString& name);
89 static class LLTabContainer* getTabContainerByName( const LLPanel* panelp, const LLString& name);
90 static class LLScrollableContainerView* getScrollableContainerByName(const LLPanel* panelp, const LLString& name);
91 static class LLPanel* getPanelByName( const LLPanel* panelp, const LLString& name);
92 static class LLMenuItemCallGL* getMenuItemCallByName( const LLPanel* panelp, const LLString& name);
93 static class LLScrollingPanelList* getScrollingPanelList( const LLPanel* panelp, const LLString& name);
94 static class LLMultiSliderCtrl* getMultiSliderByName( const LLPanel* panelp, const LLString& name);
95 static class LLMultiSlider* getMultiSliderBarByName(const LLPanel* panelp, const LLString& name);
96
97 // interface getters
98 static LLCtrlListInterface* getListInterfaceByName( const LLPanel* panelp, const LLString& name);
99 static LLCtrlSelectionInterface* getSelectionInterfaceByName(const LLPanel* panelp, const LLString& name);
100 static LLCtrlScrollInterface* getScrollInterfaceByName(const LLPanel* panelp, const LLString& name);
101
102 LLPanel* createFactoryPanel(LLString name); 73 LLPanel* createFactoryPanel(LLString name);
103 74
104 virtual LLView* createCtrlWidget(LLPanel *parent, LLXMLNodePtr node); 75 virtual LLView* createCtrlWidget(LLPanel *parent, LLXMLNodePtr node);
105 virtual void createWidget(LLPanel *parent, LLXMLNodePtr node); 76 virtual LLView* createWidget(LLPanel *parent, LLXMLNodePtr node);
106
107 template <class T> T* createDummyWidget(const LLString& name)
108 {
109 return NULL;
110 //static LLPanel dummy_panel;
111 //LLXMLNodePtr new_node_ptr = new LLXMLNode(T::getWidgetTag(), FALSE);
112 //return createWidget(&dummy_panel, new_node_ptr);
113 }
114
115 // Creator library
116 typedef LLView* (*creator_function_t)(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
117 void registerCreator(LLString ctrlname, creator_function_t function);
118 77
119 static bool getLayeredXMLNode(const LLString &filename, LLXMLNodePtr& root); 78 static bool getLayeredXMLNode(const LLString &filename, LLXMLNodePtr& root);
120 79
121protected:
122
123 template<class T>
124 class LLUICtrlCreator
125 {
126 public:
127 static void registerCreator(LLString name, LLUICtrlFactory *factory)
128 {
129 factory->registerCreator(name, T::fromXML);
130 }
131 };
132
133private: 80private:
134 81
135 typedef std::map<LLHandle<LLPanel>, LLString> built_panel_t; 82 typedef std::map<LLHandle<LLPanel>, LLString> built_panel_t;
136 built_panel_t mBuiltPanels; 83 built_panel_t mBuiltPanels;
84
137 typedef std::map<LLHandle<LLFloater>, LLString> built_floater_t; 85 typedef std::map<LLHandle<LLFloater>, LLString> built_floater_t;
138 built_floater_t mBuiltFloaters; 86 built_floater_t mBuiltFloaters;
139 87
140 std::deque<const LLCallbackMap::map_t*> mFactoryStack; 88 std::deque<const LLCallbackMap::map_t*> mFactoryStack;
141 89
142 static const LLString sUICtrlNames[];
143
144 typedef std::map<LLString, creator_function_t> creator_list_t;
145 creator_list_t mCreatorFunctions;
146 static std::vector<LLString> mXUIPaths; 90 static std::vector<LLString> mXUIPaths;
147}; 91};
148 92
diff --git a/linden/indra/llui/llview.cpp b/linden/indra/llui/llview.cpp
index e5415f8..c9828dd 100644
--- a/linden/indra/llui/llview.cpp
+++ b/linden/indra/llui/llview.cpp
@@ -49,7 +49,16 @@
49#include "lluictrl.h" 49#include "lluictrl.h"
50#include "llwindow.h" 50#include "llwindow.h"
51#include "v3color.h" 51#include "v3color.h"
52#include "lluictrlfactory.h"
52 53
54// for ui edit hack
55#include "llbutton.h"
56#include "lllineeditor.h"
57#include "lltexteditor.h"
58#include "lltextbox.h"
59
60//HACK: this allows you to instantiate LLView from xml with "<view/>" which we don't want
61static LLRegisterWidget<LLView> r("view");
53 62
54BOOL LLView::sDebugRects = FALSE; 63BOOL LLView::sDebugRects = FALSE;
55BOOL LLView::sDebugKeys = FALSE; 64BOOL LLView::sDebugKeys = FALSE;
@@ -153,6 +162,8 @@ LLView::~LLView()
153 162
154 std::for_each(mFloaterControls.begin(), mFloaterControls.end(), 163 std::for_each(mFloaterControls.begin(), mFloaterControls.end(),
155 DeletePairedPointer()); 164 DeletePairedPointer());
165 std::for_each(mDummyWidgets.begin(), mDummyWidgets.end(),
166 DeletePairedPointer());
156} 167}
157 168
158// virtual 169// virtual
@@ -716,7 +727,7 @@ BOOL LLView::handleToolTip(S32 x, S32 y, LLString& msg, LLRect* sticky_rect_scre
716 tool_tip = getShowNamesToolTip(); 727 tool_tip = getShowNamesToolTip();
717 } 728 }
718 729
719 BOOL showNamesTextBox = LLUI::sShowXUINames && (getWidgetType() == WIDGET_TYPE_TEXT_BOX); 730 BOOL showNamesTextBox = LLUI::sShowXUINames && dynamic_cast<LLTextBox*>(this) != NULL;
720 731
721 if( !handled && (blockMouseEvent(x, y) || showNamesTextBox) && !tool_tip.empty()) 732 if( !handled && (blockMouseEvent(x, y) || showNamesTextBox) && !tool_tip.empty())
722 { 733 {
@@ -741,23 +752,21 @@ BOOL LLView::handleKey(KEY key, MASK mask, BOOL called_from_parent)
741{ 752{
742 BOOL handled = FALSE; 753 BOOL handled = FALSE;
743 754
744 if( called_from_parent ) 755 if (getVisible() && getEnabled())
745 { 756 {
746 // Downward traversal 757 if( called_from_parent )
747 if (getVisible() && getEnabled())
748 { 758 {
759 // Downward traversal
749 handled = childrenHandleKey( key, mask ) != NULL; 760 handled = childrenHandleKey( key, mask ) != NULL;
750 } 761 }
751 }
752 762
753 // JC: Must pass to disabled views, since they could have 763 if (!handled)
754 // keyboard focus, which requires the escape key to exit.
755 if (!handled && getVisible())
756 {
757 handled = handleKeyHere( key, mask, called_from_parent );
758 if (handled && LLView::sDebugKeys)
759 { 764 {
760 llinfos << "Key handled by " << getName() << llendl; 765 handled = handleKeyHere( key, mask );
766 if (handled && LLView::sDebugKeys)
767 {
768 llinfos << "Key handled by " << getName() << llendl;
769 }
761 } 770 }
762 } 771 }
763 772
@@ -771,7 +780,7 @@ BOOL LLView::handleKey(KEY key, MASK mask, BOOL called_from_parent)
771 780
772// Called from handleKey() 781// Called from handleKey()
773// Handles key in this object. Checking parents and children happens in handleKey() 782// Handles key in this object. Checking parents and children happens in handleKey()
774BOOL LLView::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent) 783BOOL LLView::handleKeyHere(KEY key, MASK mask)
775{ 784{
776 return FALSE; 785 return FALSE;
777} 786}
@@ -780,25 +789,24 @@ BOOL LLView::handleUnicodeChar(llwchar uni_char, BOOL called_from_parent)
780{ 789{
781 BOOL handled = FALSE; 790 BOOL handled = FALSE;
782 791
783 if( called_from_parent ) 792 if (getVisible() && getEnabled())
784 { 793 {
785 // Downward traversal 794 if( called_from_parent )
786 if (getVisible() && getEnabled())
787 { 795 {
796 // Downward traversal
788 handled = childrenHandleUnicodeChar( uni_char ) != NULL; 797 handled = childrenHandleUnicodeChar( uni_char ) != NULL;
789 } 798 }
790 }
791 799
792 if (!handled && getVisible()) 800 if (!handled)
793 {
794 handled = handleUnicodeCharHere(uni_char, called_from_parent);
795 if (handled && LLView::sDebugKeys)
796 { 801 {
797 llinfos << "Unicode key handled by " << getName() << llendl; 802 handled = handleUnicodeCharHere(uni_char);
803 if (handled && LLView::sDebugKeys)
804 {
805 llinfos << "Unicode key handled by " << getName() << llendl;
806 }
798 } 807 }
799 } 808 }
800 809
801
802 if (!handled && !called_from_parent && mParentView) 810 if (!handled && !called_from_parent && mParentView)
803 { 811 {
804 // Upward traversal 812 // Upward traversal
@@ -809,7 +817,7 @@ BOOL LLView::handleUnicodeChar(llwchar uni_char, BOOL called_from_parent)
809} 817}
810 818
811 819
812BOOL LLView::handleUnicodeCharHere(llwchar uni_char, BOOL called_from_parent ) 820BOOL LLView::handleUnicodeCharHere(llwchar uni_char )
813{ 821{
814 return FALSE; 822 return FALSE;
815} 823}
@@ -903,11 +911,14 @@ BOOL LLView::handleMouseDown(S32 x, S32 y, MASK mask)
903 if (sEditingUI && handled_view) 911 if (sEditingUI && handled_view)
904 { 912 {
905 // need to find leaf views, big hack 913 // need to find leaf views, big hack
906 EWidgetType type = handled_view->getWidgetType(); 914 LLButton* buttonp = dynamic_cast<LLButton*>(handled_view);
907 if (type == WIDGET_TYPE_BUTTON 915 LLLineEditor* line_editorp = dynamic_cast<LLLineEditor*>(handled_view);
908 || type == WIDGET_TYPE_LINE_EDITOR 916 LLTextEditor* text_editorp = dynamic_cast<LLTextEditor*>(handled_view);
909 || type == WIDGET_TYPE_TEXT_EDITOR 917 LLTextBox* text_boxp = dynamic_cast<LLTextBox*>(handled_view);
910 || type == WIDGET_TYPE_TEXT_BOX) 918 if (buttonp
919 || line_editorp
920 || text_editorp
921 || text_boxp)
911 { 922 {
912 sEditingUIView = handled_view; 923 sEditingUIView = handled_view;
913 } 924 }
@@ -971,8 +982,10 @@ LLView* LLView::childrenHandleScrollWheel(S32 x, S32 y, S32 clicks)
971 LLView* viewp = *child_it; 982 LLView* viewp = *child_it;
972 S32 local_x = x - viewp->getRect().mLeft; 983 S32 local_x = x - viewp->getRect().mLeft;
973 S32 local_y = y - viewp->getRect().mBottom; 984 S32 local_y = y - viewp->getRect().mBottom;
974 if (viewp->pointInView(local_x, local_y) && 985 if (viewp->pointInView(local_x, local_y)
975 viewp->handleScrollWheel( local_x, local_y, clicks )) 986 && viewp->getVisible()
987 && viewp->getEnabled()
988 && viewp->handleScrollWheel( local_x, local_y, clicks ))
976 { 989 {
977 if (sDebugMouseHandling) 990 if (sDebugMouseHandling)
978 { 991 {
@@ -1528,7 +1541,7 @@ BOOL LLView::hasAncestor(const LLView* parentp) const
1528 1541
1529BOOL LLView::childHasKeyboardFocus( const LLString& childname ) const 1542BOOL LLView::childHasKeyboardFocus( const LLString& childname ) const
1530{ 1543{
1531 LLView *child = getChildByName(childname); 1544 LLView *child = getChildView(childname, TRUE, FALSE);
1532 if (child) 1545 if (child)
1533 { 1546 {
1534 return gFocusMgr.childHasKeyboardFocus(child); 1547 return gFocusMgr.childHasKeyboardFocus(child);
@@ -1543,16 +1556,17 @@ BOOL LLView::childHasKeyboardFocus( const LLString& childname ) const
1543 1556
1544BOOL LLView::hasChild(const LLString& childname, BOOL recurse) const 1557BOOL LLView::hasChild(const LLString& childname, BOOL recurse) const
1545{ 1558{
1546 return getChildByName(childname, recurse) != NULL; 1559 return getChildView(childname, recurse, FALSE) != NULL;
1547} 1560}
1548 1561
1549//----------------------------------------------------------------------------- 1562//-----------------------------------------------------------------------------
1550// getChildByName() 1563// getChildView()
1551//----------------------------------------------------------------------------- 1564//-----------------------------------------------------------------------------
1552LLView* LLView::getChildByName(const LLString& name, BOOL recurse) const 1565LLView* LLView::getChildView(const LLString& name, BOOL recurse, BOOL create_if_missing) const
1553{ 1566{
1554 if(name.empty()) 1567 //richard: should we allow empty names?
1555 return NULL; 1568 //if(name.empty())
1569 // return NULL;
1556 child_list_const_iter_t child_it; 1570 child_list_const_iter_t child_it;
1557 // Look for direct children *first* 1571 // Look for direct children *first*
1558 for ( child_it = mChildList.begin(); child_it != mChildList.end(); ++child_it) 1572 for ( child_it = mChildList.begin(); child_it != mChildList.end(); ++child_it)
@@ -1569,13 +1583,18 @@ LLView* LLView::getChildByName(const LLString& name, BOOL recurse) const
1569 for ( child_it = mChildList.begin(); child_it != mChildList.end(); ++child_it) 1583 for ( child_it = mChildList.begin(); child_it != mChildList.end(); ++child_it)
1570 { 1584 {
1571 LLView* childp = *child_it; 1585 LLView* childp = *child_it;
1572 LLView* viewp = childp->getChildByName(name, recurse); 1586 LLView* viewp = childp->getChildView(name, recurse, FALSE);
1573 if ( viewp ) 1587 if ( viewp )
1574 { 1588 {
1575 return viewp; 1589 return viewp;
1576 } 1590 }
1577 } 1591 }
1578 } 1592 }
1593
1594 if (create_if_missing)
1595 {
1596 return createDummyWidget<LLView>(name);
1597 }
1579 return NULL; 1598 return NULL;
1580} 1599}
1581 1600
@@ -1692,7 +1711,6 @@ BOOL LLView::translateIntoRect(const LLRect& constraint, BOOL allow_partial_outs
1692 if( getRect().mLeft + KEEP_ONSCREEN_PIXELS > constraint.mRight ) 1711 if( getRect().mLeft + KEEP_ONSCREEN_PIXELS > constraint.mRight )
1693 { 1712 {
1694 delta_x = constraint.mRight - (getRect().mLeft + KEEP_ONSCREEN_PIXELS); 1713 delta_x = constraint.mRight - (getRect().mLeft + KEEP_ONSCREEN_PIXELS);
1695 delta_x += llmax( 0, getRect().getWidth() - constraint.getWidth() );
1696 } 1714 }
1697 1715
1698 if( getRect().mTop > constraint.mTop ) 1716 if( getRect().mTop > constraint.mTop )
@@ -1703,7 +1721,6 @@ BOOL LLView::translateIntoRect(const LLRect& constraint, BOOL allow_partial_outs
1703 if( getRect().mTop - KEEP_ONSCREEN_PIXELS < constraint.mBottom ) 1721 if( getRect().mTop - KEEP_ONSCREEN_PIXELS < constraint.mBottom )
1704 { 1722 {
1705 delta_y = constraint.mBottom - (getRect().mTop - KEEP_ONSCREEN_PIXELS); 1723 delta_y = constraint.mBottom - (getRect().mTop - KEEP_ONSCREEN_PIXELS);
1706 delta_y -= llmax( 0, getRect().getHeight() - constraint.getHeight() );
1707 } 1724 }
1708 } 1725 }
1709 else 1726 else
@@ -1716,6 +1733,7 @@ BOOL LLView::translateIntoRect(const LLRect& constraint, BOOL allow_partial_outs
1716 if( getRect().mRight > constraint.mRight ) 1733 if( getRect().mRight > constraint.mRight )
1717 { 1734 {
1718 delta_x = constraint.mRight - getRect().mRight; 1735 delta_x = constraint.mRight - getRect().mRight;
1736 // compensate for left edge possible going off screen
1719 delta_x += llmax( 0, getRect().getWidth() - constraint.getWidth() ); 1737 delta_x += llmax( 0, getRect().getWidth() - constraint.getWidth() );
1720 } 1738 }
1721 1739
@@ -1727,6 +1745,7 @@ BOOL LLView::translateIntoRect(const LLRect& constraint, BOOL allow_partial_outs
1727 if( getRect().mBottom < constraint.mBottom ) 1745 if( getRect().mBottom < constraint.mBottom )
1728 { 1746 {
1729 delta_y = constraint.mBottom - getRect().mBottom; 1747 delta_y = constraint.mBottom - getRect().mBottom;
1748 // compensate for top edge possible going off screen
1730 delta_y -= llmax( 0, getRect().getHeight() - constraint.getHeight() ); 1749 delta_y -= llmax( 0, getRect().getHeight() - constraint.getHeight() );
1731 } 1750 }
1732 } 1751 }
@@ -1832,9 +1851,8 @@ BOOL LLView::localRectToOtherView( const LLRect& local, LLRect* other, LLView* o
1832// virtual 1851// virtual
1833LLXMLNodePtr LLView::getXML(bool save_children) const 1852LLXMLNodePtr LLView::getXML(bool save_children) const
1834{ 1853{
1835 const LLString& type_name = getWidgetTag(); 1854 //FIXME: need to provide actual derived type tag, probably outside this method
1836 1855 LLXMLNodePtr node = new LLXMLNode("view", FALSE);
1837 LLXMLNodePtr node = new LLXMLNode(type_name, FALSE);
1838 1856
1839 node->createChild("name", TRUE)->setStringValue(getName()); 1857 node->createChild("name", TRUE)->setStringValue(getName());
1840 node->createChild("width", TRUE)->setIntValue(getRect().getWidth()); 1858 node->createChild("width", TRUE)->setIntValue(getRect().getWidth());
@@ -1897,6 +1915,14 @@ LLXMLNodePtr LLView::getXML(bool save_children) const
1897 return node; 1915 return node;
1898} 1916}
1899 1917
1918//static
1919LLView* LLView::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory)
1920{
1921 LLView* viewp = new LLView();
1922 viewp->initFromXML(node, parent);
1923 return viewp;
1924}
1925
1900// static 1926// static
1901void LLView::addColorXML(LLXMLNodePtr node, const LLColor4& color, 1927void LLView::addColorXML(LLXMLNodePtr node, const LLColor4& color,
1902 const LLString& xml_name, const LLString& control_name) 1928 const LLString& xml_name, const LLString& control_name)
@@ -2426,16 +2452,7 @@ LLSimpleListener* LLView::getListenerByName(const LLString& callback_name)
2426 return callback; 2452 return callback;
2427} 2453}
2428 2454
2429void LLView::addListenerToControl(LLEventDispatcher *dispatcher, const LLString& name, LLSD filter, LLSD userdata) 2455LLControlVariable *LLView::findControl(LLString name)
2430{
2431 LLSimpleListener* listener = getListenerByName(name);
2432 if (listener)
2433 {
2434 dispatcher->addListener(listener, filter, userdata);
2435 }
2436}
2437
2438LLControlBase *LLView::findControl(LLString name)
2439{ 2456{
2440 control_map_t::iterator itor = mFloaterControls.find(name); 2457 control_map_t::iterator itor = mFloaterControls.find(name);
2441 if (itor != mFloaterControls.end()) 2458 if (itor != mFloaterControls.end())
@@ -2791,9 +2808,15 @@ LLFontGL::StyleFlags LLView::selectFontStyle(LLXMLNodePtr node)
2791 return gl_font_style; 2808 return gl_font_style;
2792} 2809}
2793 2810
2794void LLView::setControlValue(const LLSD& value) 2811bool LLView::setControlValue(const LLSD& value)
2795{ 2812{
2796 LLUI::sConfigGroup->setValue(getControlName(), value); 2813 LLString ctrlname = getControlName();
2814 if (!ctrlname.empty())
2815 {
2816 LLUI::sConfigGroup->setValue(ctrlname, value);
2817 return true;
2818 }
2819 return false;
2797} 2820}
2798 2821
2799//virtual 2822//virtual
@@ -2804,43 +2827,57 @@ void LLView::setControlName(const LLString& control_name, LLView *context)
2804 context = this; 2827 context = this;
2805 } 2828 }
2806 2829
2807 // Unregister from existing listeners
2808 if (!mControlName.empty()) 2830 if (!mControlName.empty())
2809 { 2831 {
2810 clearDispatchers(); 2832 llwarns << "setControlName called twice on same control!" << llendl;
2833 mControlConnection.disconnect(); // disconnect current signal
2834 mControlName.clear();
2811 } 2835 }
2812 2836
2813 // Register new listener 2837 // Register new listener
2814 if (!control_name.empty()) 2838 if (!control_name.empty())
2815 { 2839 {
2816 LLControlBase *control = context->findControl(control_name); 2840 LLControlVariable *control = context->findControl(control_name);
2817 if (control) 2841 if (control)
2818 { 2842 {
2819 mControlName = control_name; 2843 mControlName = control_name;
2820 LLSD state = control->registerListener(this, "DEFAULT"); 2844 mControlConnection = control->getSignal()->connect(boost::bind(&controlListener, _1, getHandle(), std::string("value")));
2821 setValue(state); 2845 setValue(control->getValue());
2822 } 2846 }
2823 } 2847 }
2824} 2848}
2825 2849
2826// virtual 2850// static
2827bool LLView::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 2851bool LLView::controlListener(const LLSD& newvalue, LLHandle<LLView> handle, std::string type)
2828{ 2852{
2829 if (userdata.asString() == "DEFAULT" && event->desc() == "value_changed") 2853 LLView* view = handle.get();
2854 if (view)
2830 { 2855 {
2831 LLSD state = event->getValue(); 2856 if (type == "value")
2832 setValue(state); 2857 {
2833 return TRUE; 2858 view->setValue(newvalue);
2859 return true;
2860 }
2861 else if (type == "enabled")
2862 {
2863 view->setEnabled(newvalue.asBoolean());
2864 return true;
2865 }
2866 else if (type == "visible")
2867 {
2868 view->setVisible(newvalue.asBoolean());
2869 return true;
2870 }
2834 } 2871 }
2835 return FALSE; 2872 return false;
2836} 2873}
2837 2874
2838void LLView::addBoolControl(LLString name, bool initial_value) 2875void LLView::addBoolControl(LLString name, bool initial_value)
2839{ 2876{
2840 mFloaterControls[name] = new LLControl(name, TYPE_BOOLEAN, initial_value, "Internal floater control"); 2877 mFloaterControls[name] = new LLControlVariable(name, TYPE_BOOLEAN, initial_value, "Internal floater control");
2841} 2878}
2842 2879
2843LLControlBase *LLView::getControl(LLString name) 2880LLControlVariable *LLView::getControl(LLString name)
2844{ 2881{
2845 control_map_t::iterator itor = mFloaterControls.find(name); 2882 control_map_t::iterator itor = mFloaterControls.find(name);
2846 if (itor != mFloaterControls.end()) 2883 if (itor != mFloaterControls.end())
@@ -2860,3 +2897,41 @@ LLSD LLView::getValue() const
2860{ 2897{
2861 return LLSD(); 2898 return LLSD();
2862} 2899}
2900
2901LLView* LLView::createWidget(LLXMLNodePtr xml_node) const
2902{
2903 // forward requests to ui ctrl factory
2904 return LLUICtrlFactory::getInstance()->createCtrlWidget(NULL, xml_node);
2905}
2906
2907//
2908// LLWidgetClassRegistry
2909//
2910
2911LLWidgetClassRegistry::LLWidgetClassRegistry()
2912{
2913}
2914
2915void LLWidgetClassRegistry::registerCtrl(const LLString& tag, LLWidgetClassRegistry::factory_func_t function)
2916{
2917 LLString lower_case_tag = tag;
2918 LLString::toLower(lower_case_tag);
2919
2920 mCreatorFunctions[lower_case_tag] = function;
2921}
2922
2923BOOL LLWidgetClassRegistry::isTagRegistered(const LLString &tag)
2924{
2925 return mCreatorFunctions.find(tag) != mCreatorFunctions.end();
2926}
2927
2928LLWidgetClassRegistry::factory_func_t LLWidgetClassRegistry::getCreatorFunc(const LLString& ctrl_type)
2929{
2930 factory_map_t::const_iterator found_it = mCreatorFunctions.find(ctrl_type);
2931 if (found_it == mCreatorFunctions.end())
2932 {
2933 return NULL;
2934 }
2935 return found_it->second;
2936}
2937
diff --git a/linden/indra/llui/llview.h b/linden/indra/llui/llview.h
index 51c314a..9a04ed7 100644
--- a/linden/indra/llui/llview.h
+++ b/linden/indra/llui/llview.h
@@ -52,7 +52,6 @@
52#include "stdenums.h" 52#include "stdenums.h"
53#include "lluistring.h" 53#include "lluistring.h"
54 54
55
56const U32 FOLLOWS_NONE = 0x00; 55const U32 FOLLOWS_NONE = 0x00;
57const U32 FOLLOWS_LEFT = 0x01; 56const U32 FOLLOWS_LEFT = 0x01;
58const U32 FOLLOWS_RIGHT = 0x02; 57const U32 FOLLOWS_RIGHT = 0x02;
@@ -65,7 +64,6 @@ const BOOL NOT_MOUSE_OPAQUE = FALSE;
65 64
66const U32 GL_NAME_UI_RESERVED = 2; 65const U32 GL_NAME_UI_RESERVED = 2;
67 66
68
69/* 67/*
70// virtual functions defined in LLView: 68// virtual functions defined in LLView:
71 69
@@ -120,9 +118,7 @@ virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,EDragAndDropTy
120 * 118 *
121virtual void draw(); 119virtual void draw();
122 * 120 *
123virtual EWidgetType getWidgetType() const = 0; 121
124 *
125virtual LLString getWidgetTag() const = 0;
126 * 122 *
127virtual LLXMLNodePtr getXML(bool save_children = true) const; 123virtual LLXMLNodePtr getXML(bool save_children = true) const;
128 * 124 *
@@ -132,7 +128,7 @@ virtual void onFocusLost() {}
132 LLUICtrl, LLScrollListCtrl, LLMenuGL, LLLineEditor, LLComboBox 128 LLUICtrl, LLScrollListCtrl, LLMenuGL, LLLineEditor, LLComboBox
133virtual void onFocusReceived() {} 129virtual void onFocusReceived() {}
134 LLUICtrl, LLTextEditor, LLScrollListVtrl, LLMenuGL, LLLineEditor 130 LLUICtrl, LLTextEditor, LLScrollListVtrl, LLMenuGL, LLLineEditor
135virtual LLView* getChildByName(const LLString& name, BOOL recurse = FALSE) const; 131virtual LLView* getChildView(const LLString& name, BOOL recurse = TRUE, BOOL create_if_missing = TRUE) const;
136 LLTabContainer, LLPanel, LLMenuGL 132 LLTabContainer, LLPanel, LLMenuGL
137virtual void setControlName(const LLString& control, LLView *context); 133virtual void setControlName(const LLString& control, LLView *context);
138 LLSliderCtrl, LLCheckBoxCtrl 134 LLSliderCtrl, LLCheckBoxCtrl
@@ -144,13 +140,72 @@ virtual void setValue(const LLSD& value);
144 * 140 *
145 141
146protected: 142protected:
147virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); 143virtual BOOL handleKeyHere(KEY key, MASK mask);
148 * 144 *
149virtual BOOL handleUnicodeCharHere(llwchar uni_char, BOOL called_from_parent); 145virtual BOOL handleUnicodeCharHere(llwchar uni_char);
150 * 146 *
151*/ 147*/
152 148
153class LLView : public LLMouseHandler, public LLMortician, public LLSimpleListenerObservable 149class LLUICtrlFactory;
150
151// maps xml strings to widget classes
152class LLWidgetClassRegistry : public LLSingleton<LLWidgetClassRegistry>
153{
154 friend class LLSingleton<LLWidgetClassRegistry>;
155public:
156 typedef LLView* (*factory_func_t)(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
157 typedef std::map<LLString, factory_func_t> factory_map_t;
158
159 void registerCtrl(const LLString& xml_tag, factory_func_t function);
160 BOOL isTagRegistered(const LLString& xml_tag);
161 factory_func_t getCreatorFunc(const LLString& xml_tag);
162
163 // get (first) xml tag for a given class
164 template <class T> std::string getTag()
165 {
166 factory_map_t::iterator it;
167 for(it = mCreatorFunctions.begin(); it != mCreatorFunctions.end(); ++it)
168 {
169 if (it->second == T::fromXML)
170 {
171 return it->first;
172 }
173 }
174
175 return "";
176 }
177
178private:
179 LLWidgetClassRegistry();
180 virtual ~LLWidgetClassRegistry() {};
181
182 typedef std::set<LLString> ctrl_name_set_t;
183 ctrl_name_set_t mUICtrlNames;
184
185 // map of xml tags to widget creator functions
186 factory_map_t mCreatorFunctions;
187};
188
189template<class T>
190class LLRegisterWidget
191{
192public:
193 LLRegisterWidget(const std::string& tag)
194 {
195 LLWidgetClassRegistry* registry = LLWidgetClassRegistry::getInstance();
196 if (registry->isTagRegistered(tag))
197 {
198 //error!
199 llerrs << "Widget named " << tag << " already registered!" << llendl;
200 }
201 else
202 {
203 registry->registerCtrl(tag, T::fromXML);
204 }
205 }
206};
207
208class LLView : public LLMouseHandler, public LLMortician
154{ 209{
155 210
156public: 211public:
@@ -294,7 +349,6 @@ public:
294 349
295 LLHandle<LLView> getHandle() { mHandle.bind(this); return mHandle; } 350 LLHandle<LLView> getHandle() { mHandle.bind(this); return mHandle; }
296 351
297
298 U32 getFollows() const { return mReshapeFlags; } 352 U32 getFollows() const { return mReshapeFlags; }
299 BOOL followsLeft() const { return mReshapeFlags & FOLLOWS_LEFT; } 353 BOOL followsLeft() const { return mReshapeFlags & FOLLOWS_LEFT; }
300 BOOL followsRight() const { return mReshapeFlags & FOLLOWS_RIGHT; } 354 BOOL followsRight() const { return mReshapeFlags & FOLLOWS_RIGHT; }
@@ -355,10 +409,9 @@ public:
355 409
356 virtual void draw(); 410 virtual void draw();
357 411
358 virtual EWidgetType getWidgetType() const = 0;
359 virtual LLString getWidgetTag() const = 0;
360 virtual LLXMLNodePtr getXML(bool save_children = true) const; 412 virtual LLXMLNodePtr getXML(bool save_children = true) const;
361 413 //FIXME: make LLView non-instantiable from XML
414 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, class LLUICtrlFactory *factory);
362 virtual void initFromXML(LLXMLNodePtr node, LLView* parent); 415 virtual void initFromXML(LLXMLNodePtr node, LLView* parent);
363 void parseFollowsFlags(LLXMLNodePtr node); 416 void parseFollowsFlags(LLXMLNodePtr node);
364 417
@@ -393,13 +446,13 @@ public:
393 void addListenerToControl(LLEventDispatcher *observer, const LLString& name, LLSD filter, LLSD userdata); 446 void addListenerToControl(LLEventDispatcher *observer, const LLString& name, LLSD filter, LLSD userdata);
394 447
395 void addBoolControl(LLString name, bool initial_value); 448 void addBoolControl(LLString name, bool initial_value);
396 LLControlBase *getControl(LLString name); 449 LLControlVariable *getControl(LLString name);
397 LLControlBase *findControl(LLString name); 450 LLControlVariable *findControl(LLString name);
398 451
399 void setControlValue(const LLSD& value); 452 bool setControlValue(const LLSD& value);
400 virtual void setControlName(const LLString& control, LLView *context); 453 virtual void setControlName(const LLString& control, LLView *context);
401 virtual LLString getControlName() const { return mControlName; } 454 virtual LLString getControlName() const { return mControlName; }
402 virtual bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata); 455// virtual bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata);
403 virtual void setValue(const LLSD& value); 456 virtual void setValue(const LLSD& value);
404 virtual LLSD getValue() const; 457 virtual LLSD getValue() const;
405 458
@@ -422,17 +475,74 @@ public:
422 /*virtual*/ void screenPointToLocal(S32 screen_x, S32 screen_y, S32* local_x, S32* local_y) const; 475 /*virtual*/ void screenPointToLocal(S32 screen_x, S32 screen_y, S32* local_x, S32* local_y) const;
423 /*virtual*/ void localPointToScreen(S32 local_x, S32 local_y, S32* screen_x, S32* screen_y) const; 476 /*virtual*/ void localPointToScreen(S32 local_x, S32 local_y, S32* screen_x, S32* screen_y) const;
424 477
425 template <class T> T* getChild(const LLString& name, BOOL recurse = TRUE) const 478 template <class T> T* getChild(const LLString& name, BOOL recurse = TRUE, BOOL create_if_missing = TRUE) const
426 { 479 {
427 T* result = dynamic_cast<T*>(getChildByName(name, TRUE)); 480 LLView* child = getChildView(name, recurse, FALSE);
428 //if (!result) 481 T* result = dynamic_cast<T*>(child);
429 //{ 482 if (!result)
430 // // create dummy widget instance here 483 {
431 // result = gUICtrlFactory->createDummyWidget<T>(name); 484 // did we find *something* with that name?
432 //} 485 if (child)
486 {
487 llwarns << "Found child named " << name << " but of wrong type" << llendl;
488 }
489 if (create_if_missing)
490 {
491 // create dummy widget instance here
492 result = createDummyWidget<T>(name);
493 }
494 }
433 return result; 495 return result;
434 } 496 }
435 497
498 virtual LLView* getChildView(const LLString& name, BOOL recurse = TRUE, BOOL create_if_missing = TRUE) const;
499
500 template <class T> T* createDummyWidget(const LLString& name) const
501 {
502 T* widget = getDummyWidget<T>(name);
503 if (!widget)
504 {
505 // get xml tag name corresponding to requested widget type (e.g. "button")
506 LLString xml_tag = LLWidgetClassRegistry::getInstance()->getTag<T>();
507 if (xml_tag.empty())
508 {
509 llwarns << "No xml tag registered for this class " << llendl;
510 return NULL;
511 }
512 // create dummy xml node (<button name="foo"/>)
513 LLXMLNodePtr new_node_ptr = new LLXMLNode(xml_tag, FALSE);
514 new_node_ptr->createChild("name", TRUE)->setStringValue(name);
515
516 widget = dynamic_cast<T*>(createWidget(new_node_ptr));
517 if (widget)
518 {
519 // need non-const to update private dummy widget cache
520 llwarns << "Making dummy " << xml_tag << " named " << name << " in " << getName() << llendl;
521 const_cast<LLView*>(this)->mDummyWidgets.insert(std::make_pair(name, widget));
522 }
523 else
524 {
525 // dynamic cast will fail if T::fromXML only registered for base class
526 llwarns << "Failed to create dummy widget of requested type " << llendl;
527 return NULL;
528 }
529 }
530 return widget;
531 }
532
533 template <class T> T* getDummyWidget(const LLString& name) const
534 {
535 dummy_widget_map_t::const_iterator found_it = mDummyWidgets.find(name);
536 if (found_it == mDummyWidgets.end())
537 {
538 return NULL;
539 }
540 return dynamic_cast<T*>(found_it->second);
541 }
542
543 LLView* createWidget(LLXMLNodePtr xml_node) const;
544
545
436 // statics 546 // statics
437 static U32 createRect(LLXMLNodePtr node, LLRect &rect, LLView* parent_view, const LLRect &required_rect = LLRect()); 547 static U32 createRect(LLXMLNodePtr node, LLRect &rect, LLView* parent_view, const LLRect &required_rect = LLRect());
438 548
@@ -471,8 +581,8 @@ public:
471 581
472 582
473protected: 583protected:
474 virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); 584 virtual BOOL handleKeyHere(KEY key, MASK mask);
475 virtual BOOL handleUnicodeCharHere(llwchar uni_char, BOOL called_from_parent); 585 virtual BOOL handleUnicodeCharHere(llwchar uni_char);
476 586
477 void drawDebugRect(); 587 void drawDebugRect();
478 void drawChild(LLView* childp, S32 x_offset = 0, S32 y_offset = 0, BOOL force_draw = FALSE); 588 void drawChild(LLView* childp, S32 x_offset = 0, S32 y_offset = 0, BOOL force_draw = FALSE);
@@ -494,10 +604,10 @@ protected:
494 LLView* childrenHandleRightMouseDown(S32 x, S32 y, MASK mask); 604 LLView* childrenHandleRightMouseDown(S32 x, S32 y, MASK mask);
495 LLView* childrenHandleRightMouseUp(S32 x, S32 y, MASK mask); 605 LLView* childrenHandleRightMouseUp(S32 x, S32 y, MASK mask);
496 606
497 typedef std::map<LLString, LLControlBase*> control_map_t; 607 static bool controlListener(const LLSD& newvalue, LLHandle<LLView> handle, std::string type);
498 control_map_t mFloaterControls;
499 608
500 virtual LLView* getChildByName(const LLString& name, BOOL recurse = FALSE) const; 609 typedef std::map<LLString, LLControlVariable*> control_map_t;
610 control_map_t mFloaterControls;
501 611
502private: 612private:
503 LLView* mParentView; 613 LLView* mParentView;
@@ -538,8 +648,11 @@ private:
538 648
539 LLString mControlName; 649 LLString mControlName;
540 650
651 typedef std::map<LLString, LLView*> dummy_widget_map_t;
652 dummy_widget_map_t mDummyWidgets;
541 653
542// Just debugging stuff? We should try to hide anything that's not. -MG 654 boost::signals::connection mControlConnection;
655
543public: 656public:
544 static BOOL sDebugRects; // Draw debug rects behind everything. 657 static BOOL sDebugRects; // Draw debug rects behind everything.
545 static BOOL sDebugKeys; 658 static BOOL sDebugKeys;
@@ -554,9 +667,6 @@ public:
554 static BOOL sForceReshape; 667 static BOOL sForceReshape;
555}; 668};
556 669
557
558
559
560class LLCompareByTabOrder 670class LLCompareByTabOrder
561{ 671{
562public: 672public:
@@ -568,4 +678,5 @@ private:
568 LLView::child_tab_order_t mTabOrder; 678 LLView::child_tab_order_t mTabOrder;
569}; 679};
570 680
681
571#endif //LL_LLVIEW_H 682#endif //LL_LLVIEW_H
diff --git a/linden/indra/llui/llviewborder.cpp b/linden/indra/llui/llviewborder.cpp
index 6c2d9fa..e8cff7b 100644
--- a/linden/indra/llui/llviewborder.cpp
+++ b/linden/indra/llui/llviewborder.cpp
@@ -33,6 +33,8 @@
33#include "llglimmediate.h" 33#include "llglimmediate.h"
34#include "llfocusmgr.h" 34#include "llfocusmgr.h"
35 35
36static LLRegisterWidget<LLViewBorder> r("view_border");
37
36LLViewBorder::LLViewBorder( const LLString& name, const LLRect& rect, EBevel bevel, EStyle style, S32 width ) 38LLViewBorder::LLViewBorder( const LLString& name, const LLRect& rect, EBevel bevel, EStyle style, S32 width )
37 : 39 :
38 LLView( name, rect, FALSE ), 40 LLView( name, rect, FALSE ),
@@ -66,47 +68,45 @@ void LLViewBorder::setColorsExtended( const LLColor4& shadow_light, const LLColo
66 68
67void LLViewBorder::setTexture( const LLUUID &image_id ) 69void LLViewBorder::setTexture( const LLUUID &image_id )
68{ 70{
69 mTexture = LLUI::sImageProvider->getImageByID(image_id); 71 mTexture = LLUI::sImageProvider->getUIImageByID(image_id);
70} 72}
71 73
72 74
73void LLViewBorder::draw() 75void LLViewBorder::draw()
74{ 76{
75 if( getVisible() ) 77 if( STYLE_LINE == mStyle )
76 { 78 {
77 if( STYLE_LINE == mStyle ) 79 if( 0 == mBorderWidth )
80 {
81 // no visible border
82 }
83 else
84 if( 1 == mBorderWidth )
85 {
86 drawOnePixelLines();
87 }
88 else
89 if( 2 == mBorderWidth )
78 { 90 {
79 if( 0 == mBorderWidth ) 91 drawTwoPixelLines();
80 {
81 // no visible border
82 }
83 else
84 if( 1 == mBorderWidth )
85 {
86 drawOnePixelLines();
87 }
88 else
89 if( 2 == mBorderWidth )
90 {
91 drawTwoPixelLines();
92 }
93 else
94 {
95 llassert( FALSE ); // not implemented
96 }
97 } 92 }
98 else 93 else
99 if( STYLE_TEXTURE == mStyle )
100 { 94 {
101 if( mTexture ) 95 llassert( FALSE ); // not implemented
102 {
103 drawTextures();
104 }
105 } 96 }
97 }
98 else
99 if( STYLE_TEXTURE == mStyle )
100 {
101 if( mTexture )
102 {
103 drawTextures();
104 }
105 }
106
107 // draw the children
108 LLView::draw();
106 109
107 // draw the children
108 LLView::draw();
109 }
110} 110}
111 111
112void LLViewBorder::drawOnePixelLines() 112void LLViewBorder::drawOnePixelLines()
@@ -134,11 +134,10 @@ void LLViewBorder::drawOnePixelLines()
134 134
135 if( mHasKeyboardFocus ) 135 if( mHasKeyboardFocus )
136 { 136 {
137 F32 lerp_amt = gFocusMgr.getFocusFlashAmt();
138 top_color = gFocusMgr.getFocusColor(); 137 top_color = gFocusMgr.getFocusColor();
139 bottom_color = top_color; 138 bottom_color = top_color;
140 139
141 LLUI::setLineWidth(lerp(1.f, 3.f, lerp_amt)); 140 LLUI::setLineWidth(lerp(1.f, 3.f, gFocusMgr.getFocusFlashAmt()));
142 } 141 }
143 142
144 S32 left = 0; 143 S32 left = 0;
@@ -225,20 +224,20 @@ void LLViewBorder::drawTwoPixelLines()
225 224
226void LLViewBorder::drawTextures() 225void LLViewBorder::drawTextures()
227{ 226{
228 LLGLSUIDefault gls_ui; 227 //LLGLSUIDefault gls_ui;
229 228
230 llassert( FALSE ); // TODO: finish implementing 229 //llassert( FALSE ); // TODO: finish implementing
231 230
232 gGL.color4fv(UI_VERTEX_COLOR.mV); 231 //gGL.color4fv(UI_VERTEX_COLOR.mV);
233 232
234 mTexture->bind(); 233 //mTexture->bind();
235 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); 234 //glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
236 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ); 235 //glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );
237 236
238 drawTextureTrapezoid( 0.f, mBorderWidth, getRect().getWidth(), 0, 0 ); 237 //drawTextureTrapezoid( 0.f, mBorderWidth, getRect().getWidth(), 0, 0 );
239 drawTextureTrapezoid( 90.f, mBorderWidth, getRect().getHeight(), (F32)getRect().getWidth(),0 ); 238 //drawTextureTrapezoid( 90.f, mBorderWidth, getRect().getHeight(), (F32)getRect().getWidth(),0 );
240 drawTextureTrapezoid( 180.f, mBorderWidth, getRect().getWidth(), (F32)getRect().getWidth(),(F32)getRect().getHeight() ); 239 //drawTextureTrapezoid( 180.f, mBorderWidth, getRect().getWidth(), (F32)getRect().getWidth(),(F32)getRect().getHeight() );
241 drawTextureTrapezoid( 270.f, mBorderWidth, getRect().getHeight(), 0, (F32)getRect().getHeight() ); 240 //drawTextureTrapezoid( 270.f, mBorderWidth, getRect().getHeight(), 0, (F32)getRect().getHeight() );
242} 241}
243 242
244 243
diff --git a/linden/indra/llui/llviewborder.h b/linden/indra/llui/llviewborder.h
index 4e5dfee..eacb2b5 100644
--- a/linden/indra/llui/llviewborder.h
+++ b/linden/indra/llui/llviewborder.h
@@ -44,8 +44,6 @@ public:
44 LLViewBorder( const LLString& name, const LLRect& rect, EBevel bevel = BEVEL_OUT, EStyle style = STYLE_LINE, S32 width = 1 ); 44 LLViewBorder( const LLString& name, const LLRect& rect, EBevel bevel = BEVEL_OUT, EStyle style = STYLE_LINE, S32 width = 1 );
45 45
46 virtual void setValue(const LLSD& val) { setRect(LLRect(val)); } 46 virtual void setValue(const LLSD& val) { setRect(LLRect(val)); }
47 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_VIEW_BORDER; }
48 virtual LLString getWidgetTag() const { return LL_VIEW_BORDER_TAG; }
49 47
50 virtual BOOL isCtrl() const { return FALSE; } 48 virtual BOOL isCtrl() const { return FALSE; }
51 49
@@ -85,7 +83,7 @@ private:
85 LLColor4 mShadowDark; 83 LLColor4 mShadowDark;
86 LLColor4 mBackgroundColor; 84 LLColor4 mBackgroundColor;
87 S32 mBorderWidth; 85 S32 mBorderWidth;
88 LLPointer<LLImageGL> mTexture; 86 LLUIImagePtr mTexture;
89 BOOL mHasKeyboardFocus; 87 BOOL mHasKeyboardFocus;
90}; 88};
91 89
diff --git a/linden/indra/llui/llviewquery.cpp b/linden/indra/llui/llviewquery.cpp
index 5c58ad6..b84fba5 100644
--- a/linden/indra/llui/llviewquery.cpp
+++ b/linden/indra/llui/llviewquery.cpp
@@ -66,11 +66,6 @@ filterResult_t LLCtrlFilter::operator() (const LLView* const view, const viewLis
66 return filterResult_t(view->isCtrl(),TRUE); 66 return filterResult_t(view->isCtrl(),TRUE);
67} 67}
68 68
69filterResult_t LLWidgetTypeFilter::operator() (const LLView* const view, const viewList_t & children) const
70{
71 return filterResult_t(view->getWidgetType() == mType, TRUE);
72}
73
74// 69//
75// LLViewQuery 70// LLViewQuery
76// 71//
diff --git a/linden/indra/llui/llviewquery.h b/linden/indra/llui/llviewquery.h
index 7e947cd..c76ed25 100644
--- a/linden/indra/llui/llviewquery.h
+++ b/linden/indra/llui/llviewquery.h
@@ -87,14 +87,14 @@ class LLCtrlFilter : public LLQueryFilter, public LLSingleton<LLCtrlFilter>
87 /*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const; 87 /*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const;
88}; 88};
89 89
90template <class T>
90class LLWidgetTypeFilter : public LLQueryFilter 91class LLWidgetTypeFilter : public LLQueryFilter
91{ 92{
92public: 93 /*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const
93 LLWidgetTypeFilter(EWidgetType type) : mType(type) {}; 94 {
94private: 95 return filterResult_t(dynamic_cast<const T*>(view) != NULL, TRUE);
95 /*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const; 96 }
96 97
97 EWidgetType mType;
98}; 98};
99 99
100// Algorithm for flattening 100// Algorithm for flattening
diff --git a/linden/indra/llvfs/llvfile.cpp b/linden/indra/llvfs/llvfile.cpp
index e8afbb0..61de885 100644
--- a/linden/indra/llvfs/llvfile.cpp
+++ b/linden/indra/llvfs/llvfile.cpp
@@ -45,7 +45,6 @@ const S32 LLVFile::APPEND = 0x00000006; // 0x00000004 & LLVFile::WRITE
45//---------------------------------------------------------------------------- 45//----------------------------------------------------------------------------
46LLVFSThread* LLVFile::sVFSThread = NULL; 46LLVFSThread* LLVFile::sVFSThread = NULL;
47BOOL LLVFile::sAllocdVFSThread = FALSE; 47BOOL LLVFile::sAllocdVFSThread = FALSE;
48BOOL LLVFile::ALLOW_ASYNC = TRUE;
49//---------------------------------------------------------------------------- 48//----------------------------------------------------------------------------
50 49
51//============================================================================ 50//============================================================================
diff --git a/linden/indra/llvfs/llvfile.h b/linden/indra/llvfs/llvfile.h
index b21c0e5..040e61a 100644
--- a/linden/indra/llvfs/llvfile.h
+++ b/linden/indra/llvfs/llvfile.h
@@ -78,8 +78,6 @@ public:
78 static const S32 WRITE; 78 static const S32 WRITE;
79 static const S32 READ_WRITE; 79 static const S32 READ_WRITE;
80 static const S32 APPEND; 80 static const S32 APPEND;
81
82 static BOOL ALLOW_ASYNC;
83 81
84protected: 82protected:
85 LLAssetType::EType mFileType; 83 LLAssetType::EType mFileType;
diff --git a/linden/indra/llwindow/lldxhardware.cpp b/linden/indra/llwindow/lldxhardware.cpp
index 352a5a3..4eb8cab 100644
--- a/linden/indra/llwindow/lldxhardware.cpp
+++ b/linden/indra/llwindow/lldxhardware.cpp
@@ -233,9 +233,10 @@ LLDXHardware::LLDXHardware()
233 233
234void LLDXHardware::cleanup() 234void LLDXHardware::cleanup()
235{ 235{
236 for_each(mDevices.begin(), mDevices.end(), DeletePairedPointer()); 236 // for_each(mDevices.begin(), mDevices.end(), DeletePairedPointer());
237} 237}
238 238
239/*
239LLString LLDXHardware::dumpDevices() 240LLString LLDXHardware::dumpDevices()
240{ 241{
241 if (gWriteDebug) 242 if (gWriteDebug)
@@ -284,6 +285,7 @@ LLDXDevice *LLDXHardware::findDevice(const std::string &vendor, const std::strin
284 285
285 return NULL; 286 return NULL;
286} 287}
288*/
287 289
288BOOL LLDXHardware::getInfo(BOOL vram_only) 290BOOL LLDXHardware::getInfo(BOOL vram_only)
289{ 291{
@@ -296,7 +298,7 @@ BOOL LLDXHardware::getInfo(BOOL vram_only)
296 IDxDiagProvider *dx_diag_providerp = NULL; 298 IDxDiagProvider *dx_diag_providerp = NULL;
297 IDxDiagContainer *dx_diag_rootp = NULL; 299 IDxDiagContainer *dx_diag_rootp = NULL;
298 IDxDiagContainer *devices_containerp = NULL; 300 IDxDiagContainer *devices_containerp = NULL;
299 IDxDiagContainer *system_device_containerp= NULL; 301 // IDxDiagContainer *system_device_containerp= NULL;
300 IDxDiagContainer *device_containerp = NULL; 302 IDxDiagContainer *device_containerp = NULL;
301 IDxDiagContainer *file_containerp = NULL; 303 IDxDiagContainer *file_containerp = NULL;
302 IDxDiagContainer *driver_containerp = NULL; 304 IDxDiagContainer *driver_containerp = NULL;
@@ -362,15 +364,18 @@ BOOL LLDXHardware::getInfo(BOOL vram_only)
362 } 364 }
363 365
364 // Get the English VRAM string 366 // Get the English VRAM string
365 std::string ram_str = get_string(device_containerp, L"szDisplayMemoryEnglish"); 367 {
368 std::string ram_str = get_string(device_containerp, L"szDisplayMemoryEnglish");
366 369
367 // We don't need the device any more 370 // We don't need the device any more
368 SAFE_RELEASE(device_containerp); 371 SAFE_RELEASE(device_containerp);
372
373 // Dump the string as an int into the structure
374 char *stopstring;
375 mVRAM = strtol(ram_str.c_str(), &stopstring, 10);
376 llinfos << "VRAM Detected: " << mVRAM << " DX9 string: " << ram_str << llendl;
377 }
369 378
370 // Dump the string as an int into the structure
371 char *stopstring;
372 mVRAM = strtol(ram_str.c_str(), &stopstring, 10);
373 llinfos << "VRAM Detected: " << mVRAM << " DX9 string: " << ram_str << llendl;
374 379
375 if (vram_only) 380 if (vram_only)
376 { 381 {
@@ -378,6 +383,11 @@ BOOL LLDXHardware::getInfo(BOOL vram_only)
378 goto LCleanup; 383 goto LCleanup;
379 } 384 }
380 385
386
387 /* for now, we ONLY do vram_only the rest of this
388 is commented out, to ensure no-one is tempted
389 to use it
390
381 // Now let's get device and driver information 391 // Now let's get device and driver information
382 // Get the IDxDiagContainer object called "DxDiag_SystemDevices". 392 // Get the IDxDiagContainer object called "DxDiag_SystemDevices".
383 // This call may take some time while dxdiag gathers the info. 393 // This call may take some time while dxdiag gathers the info.
@@ -504,11 +514,12 @@ BOOL LLDXHardware::getInfo(BOOL vram_only)
504 } 514 }
505 SAFE_RELEASE(device_containerp); 515 SAFE_RELEASE(device_containerp);
506 } 516 }
517 */
507 } 518 }
508 519
509 dumpDevices(); 520 // dumpDevices();
510 ok = TRUE; 521 ok = TRUE;
511 522
512LCleanup: 523LCleanup:
513 if (!ok) 524 if (!ok)
514 { 525 {
@@ -526,7 +537,7 @@ LCleanup:
526 CoUninitialize(); 537 CoUninitialize();
527 538
528 return ok; 539 return ok;
529} 540 }
530 541
531LLSD LLDXHardware::getDisplayInfo() 542LLSD LLDXHardware::getDisplayInfo()
532{ 543{
diff --git a/linden/indra/llwindow/lldxhardware.h b/linden/indra/llwindow/lldxhardware.h
index f4f364e..12d106a 100644
--- a/linden/indra/llwindow/lldxhardware.h
+++ b/linden/indra/llwindow/lldxhardware.h
@@ -85,6 +85,7 @@ class LLDXHardware
85{ 85{
86public: 86public:
87 LLDXHardware(); 87 LLDXHardware();
88
88 void setWriteDebugFunc(void (*func)(const char*)); 89 void setWriteDebugFunc(void (*func)(const char*));
89 void cleanup(); 90 void cleanup();
90 91
@@ -100,12 +101,12 @@ public:
100 // Empty strings indicate that you don't care. 101 // Empty strings indicate that you don't care.
101 // You can separate multiple devices with '|' chars to indicate you want 102 // You can separate multiple devices with '|' chars to indicate you want
102 // ANY of them to match and return. 103 // ANY of them to match and return.
103 LLDXDevice *findDevice(const std::string &vendor, const std::string &devices); 104 // LLDXDevice *findDevice(const std::string &vendor, const std::string &devices);
104 105
105 LLString dumpDevices(); 106 // LLString dumpDevices();
106public: 107public:
107 typedef std::map<std::string, LLDXDevice *> device_map_t; 108 typedef std::map<std::string, LLDXDevice *> device_map_t;
108 device_map_t mDevices; 109 // device_map_t mDevices;
109protected: 110protected:
110 S32 mVRAM; 111 S32 mVRAM;
111}; 112};
diff --git a/linden/indra/llwindow/llgl.cpp b/linden/indra/llwindow/llgl.cpp
index 07840c1..a059cd4 100644
--- a/linden/indra/llwindow/llgl.cpp
+++ b/linden/indra/llwindow/llgl.cpp
@@ -563,7 +563,9 @@ void LLGLManager::initExtensions()
563 mHasCompressedTextures = glh_init_extensions("GL_ARB_texture_compression"); 563 mHasCompressedTextures = glh_init_extensions("GL_ARB_texture_compression");
564 mHasOcclusionQuery = ExtensionExists("GL_ARB_occlusion_query", gGLHExts.mSysExts); 564 mHasOcclusionQuery = ExtensionExists("GL_ARB_occlusion_query", gGLHExts.mSysExts);
565 mHasVertexBufferObject = ExtensionExists("GL_ARB_vertex_buffer_object", gGLHExts.mSysExts); 565 mHasVertexBufferObject = ExtensionExists("GL_ARB_vertex_buffer_object", gGLHExts.mSysExts);
566 mHasFramebufferObject = ExtensionExists("GL_EXT_framebuffer_object", gGLHExts.mSysExts); 566 // mask out FBO support when packed_depth_stencil isn't there 'cause we need it for LLRenderTarget -Brad
567 mHasFramebufferObject = ExtensionExists("GL_EXT_framebuffer_object", gGLHExts.mSysExts)
568 && ExtensionExists("GL_EXT_packed_depth_stencil", gGLHExts.mSysExts);
567#if !LL_DARWIN 569#if !LL_DARWIN
568 mHasPointParameters = !mIsATI && ExtensionExists("GL_ARB_point_parameters", gGLHExts.mSysExts); 570 mHasPointParameters = !mIsATI && ExtensionExists("GL_ARB_point_parameters", gGLHExts.mSysExts);
569#endif 571#endif
diff --git a/linden/indra/llwindow/llglstates.h b/linden/indra/llwindow/llglstates.h
index 7d65952..e53640c 100644
--- a/linden/indra/llwindow/llglstates.h
+++ b/linden/indra/llwindow/llglstates.h
@@ -62,7 +62,8 @@ protected:
62 LLGLEnable mColorMaterial; 62 LLGLEnable mColorMaterial;
63 LLGLDisable mAlphaTest, mBlend, mCullFace, mDither, mFog, 63 LLGLDisable mAlphaTest, mBlend, mCullFace, mDither, mFog,
64 mLineSmooth, mLineStipple, mNormalize, mPolygonSmooth, 64 mLineSmooth, mLineStipple, mNormalize, mPolygonSmooth,
65 mTextureGenQ, mTextureGenR, mTextureGenS, mTextureGenT; 65 mTextureGenQ, mTextureGenR, mTextureGenS, mTextureGenT,
66 mGLMultisample;
66public: 67public:
67 LLGLSDefault() 68 LLGLSDefault()
68 : 69 :
@@ -81,7 +82,8 @@ public:
81 mTextureGenQ(GL_TEXTURE_GEN_Q), 82 mTextureGenQ(GL_TEXTURE_GEN_Q),
82 mTextureGenR(GL_TEXTURE_GEN_R), 83 mTextureGenR(GL_TEXTURE_GEN_R),
83 mTextureGenS(GL_TEXTURE_GEN_S), 84 mTextureGenS(GL_TEXTURE_GEN_S),
84 mTextureGenT(GL_TEXTURE_GEN_T) 85 mTextureGenT(GL_TEXTURE_GEN_T),
86 mGLMultisample(GL_MULTISAMPLE_ARB)
85 { } 87 { }
86}; 88};
87 89
@@ -117,7 +119,7 @@ public:
117 119
118//---------------------------------------------------------------------------- 120//----------------------------------------------------------------------------
119 121
120class LLGLSUIDefault // : public LLGLSDefault 122class LLGLSUIDefault
121{ 123{
122protected: 124protected:
123 LLGLEnable mBlend, mAlphaTest; 125 LLGLEnable mBlend, mAlphaTest;
@@ -176,7 +178,7 @@ public:
176 178
177//---------------------------------------------------------------------------- 179//----------------------------------------------------------------------------
178 180
179class LLGLSPipeline // : public LLGLSDefault 181class LLGLSPipeline
180{ 182{
181protected: 183protected:
182 LLGLEnable mCullFace; 184 LLGLEnable mCullFace;
@@ -199,7 +201,7 @@ public:
199 { } 201 { }
200}; 202};
201 203
202class LLGLSPipelineEmbossBump // : public LLGLSPipelineAlpha 204class LLGLSPipelineEmbossBump
203{ 205{
204protected: 206protected:
205 LLGLDisable mFog; 207 LLGLDisable mFog;
@@ -209,7 +211,7 @@ public:
209 { } 211 { }
210}; 212};
211 213
212class LLGLSPipelineSelection // : public LLGLSPipelineAlpha 214class LLGLSPipelineSelection
213{ 215{
214protected: 216protected:
215 LLGLDisable mCullFace; 217 LLGLDisable mCullFace;
@@ -219,7 +221,7 @@ public:
219 {} 221 {}
220}; 222};
221 223
222class LLGLSPipelineAvatar // : public LLGLSPipeline 224class LLGLSPipelineAvatar
223{ 225{
224protected: 226protected:
225 LLGLEnable mNormalize; 227 LLGLEnable mNormalize;
@@ -229,7 +231,7 @@ public:
229 {} 231 {}
230}; 232};
231 233
232class LLGLSPipelineSkyBox // : public LLGLSPipeline 234class LLGLSPipelineSkyBox
233{ 235{
234protected: 236protected:
235 LLGLDisable mAlphaTest, mCullFace, mFog; 237 LLGLDisable mAlphaTest, mCullFace, mFog;
@@ -239,7 +241,7 @@ public:
239 { } 241 { }
240}; 242};
241 243
242class LLGLSTracker // : public LLGLSDefault 244class LLGLSTracker
243{ 245{
244protected: 246protected:
245 LLGLEnable mCullFace, mBlend, mAlphaTest; 247 LLGLEnable mCullFace, mBlend, mAlphaTest;
diff --git a/linden/indra/llwindow/llkeyboard.cpp b/linden/indra/llwindow/llkeyboard.cpp
index 9be23df..c6502ed 100644
--- a/linden/indra/llwindow/llkeyboard.cpp
+++ b/linden/indra/llwindow/llkeyboard.cpp
@@ -96,6 +96,7 @@ LLKeyboard::LLKeyboard() : mCallbacks(NULL), mNumpadDistinct(ND_NUMLOCK_OFF)
96 addKeyName(KEY_SUBTRACT, "Subtract" ); 96 addKeyName(KEY_SUBTRACT, "Subtract" );
97 addKeyName(KEY_MULTIPLY, "Multiply" ); 97 addKeyName(KEY_MULTIPLY, "Multiply" );
98 addKeyName(KEY_DIVIDE, "Divide" ); 98 addKeyName(KEY_DIVIDE, "Divide" );
99 addKeyName(KEY_PAD_DIVIDE, "PAD_DIVIDE" );
99 addKeyName(KEY_PAD_LEFT, "PAD_LEFT" ); 100 addKeyName(KEY_PAD_LEFT, "PAD_LEFT" );
100 addKeyName(KEY_PAD_RIGHT, "PAD_RIGHT" ); 101 addKeyName(KEY_PAD_RIGHT, "PAD_RIGHT" );
101 addKeyName(KEY_PAD_DOWN, "PAD_DOWN" ); 102 addKeyName(KEY_PAD_DOWN, "PAD_DOWN" );
diff --git a/linden/indra/llwindow/llkeyboardmacosx.cpp b/linden/indra/llwindow/llkeyboardmacosx.cpp
index 4cb1029..181e264 100644
--- a/linden/indra/llwindow/llkeyboardmacosx.cpp
+++ b/linden/indra/llwindow/llkeyboardmacosx.cpp
@@ -83,7 +83,7 @@ LLKeyboardMacOSX::LLKeyboardMacOSX()
83 mTranslateKeyMap[0x29] = ';'; 83 mTranslateKeyMap[0x29] = ';';
84 mTranslateKeyMap[0x2a] = '\\'; 84 mTranslateKeyMap[0x2a] = '\\';
85 mTranslateKeyMap[0x2b] = ','; 85 mTranslateKeyMap[0x2b] = ',';
86 mTranslateKeyMap[0x2c] = '/'; 86 mTranslateKeyMap[0x2c] = KEY_DIVIDE;
87 mTranslateKeyMap[0x2d] = 'N'; 87 mTranslateKeyMap[0x2d] = 'N';
88 mTranslateKeyMap[0x2e] = 'M'; 88 mTranslateKeyMap[0x2e] = 'M';
89 mTranslateKeyMap[0x2f] = '.'; 89 mTranslateKeyMap[0x2f] = '.';
@@ -100,7 +100,7 @@ LLKeyboardMacOSX::LLKeyboardMacOSX()
100 mTranslateKeyMap[0x41] = '.'; // keypad 100 mTranslateKeyMap[0x41] = '.'; // keypad
101 mTranslateKeyMap[0x43] = '*'; // keypad 101 mTranslateKeyMap[0x43] = '*'; // keypad
102 mTranslateKeyMap[0x45] = '+'; // keypad 102 mTranslateKeyMap[0x45] = '+'; // keypad
103 mTranslateKeyMap[0x4b] = '/'; // keypad 103 mTranslateKeyMap[0x4b] = KEY_PAD_DIVIDE; // keypad
104 mTranslateKeyMap[0x4c] = KEY_RETURN; // keypad enter 104 mTranslateKeyMap[0x4c] = KEY_RETURN; // keypad enter
105 mTranslateKeyMap[0x4e] = '-'; // keypad 105 mTranslateKeyMap[0x4e] = '-'; // keypad
106 mTranslateKeyMap[0x51] = '='; // keypad 106 mTranslateKeyMap[0x51] = '='; // keypad
diff --git a/linden/indra/llwindow/llkeyboardsdl.cpp b/linden/indra/llwindow/llkeyboardsdl.cpp
index f9d59ac..196a623 100644
--- a/linden/indra/llwindow/llkeyboardsdl.cpp
+++ b/linden/indra/llwindow/llkeyboardsdl.cpp
@@ -103,7 +103,7 @@ LLKeyboardSDL::LLKeyboardSDL()
103 mTranslateKeyMap[SDLK_KP_PLUS] = KEY_ADD; 103 mTranslateKeyMap[SDLK_KP_PLUS] = KEY_ADD;
104 mTranslateKeyMap[SDLK_KP_MINUS] = KEY_SUBTRACT; 104 mTranslateKeyMap[SDLK_KP_MINUS] = KEY_SUBTRACT;
105 mTranslateKeyMap[SDLK_KP_MULTIPLY] = KEY_MULTIPLY; 105 mTranslateKeyMap[SDLK_KP_MULTIPLY] = KEY_MULTIPLY;
106 mTranslateKeyMap[SDLK_KP_DIVIDE] = KEY_DIVIDE; 106 mTranslateKeyMap[SDLK_KP_DIVIDE] = KEY_PAD_DIVIDE;
107 mTranslateKeyMap[SDLK_F1] = KEY_F1; 107 mTranslateKeyMap[SDLK_F1] = KEY_F1;
108 mTranslateKeyMap[SDLK_F2] = KEY_F2; 108 mTranslateKeyMap[SDLK_F2] = KEY_F2;
109 mTranslateKeyMap[SDLK_F3] = KEY_F3; 109 mTranslateKeyMap[SDLK_F3] = KEY_F3;
@@ -121,7 +121,7 @@ LLKeyboardSDL::LLKeyboardSDL()
121 mTranslateKeyMap[SDLK_MINUS] = '-'; 121 mTranslateKeyMap[SDLK_MINUS] = '-';
122 mTranslateKeyMap[SDLK_PERIOD] = '.'; 122 mTranslateKeyMap[SDLK_PERIOD] = '.';
123 mTranslateKeyMap[SDLK_BACKQUOTE] = '`'; 123 mTranslateKeyMap[SDLK_BACKQUOTE] = '`';
124 mTranslateKeyMap[SDLK_SLASH] = '/'; 124 mTranslateKeyMap[SDLK_SLASH] = KEY_DIVIDE;
125 mTranslateKeyMap[SDLK_SEMICOLON] = ';'; 125 mTranslateKeyMap[SDLK_SEMICOLON] = ';';
126 mTranslateKeyMap[SDLK_LEFTBRACKET] = '['; 126 mTranslateKeyMap[SDLK_LEFTBRACKET] = '[';
127 mTranslateKeyMap[SDLK_BACKSLASH] = '\\'; 127 mTranslateKeyMap[SDLK_BACKSLASH] = '\\';
diff --git a/linden/indra/llwindow/llkeyboardwin32.cpp b/linden/indra/llwindow/llkeyboardwin32.cpp
index 1b68112..68cedf1 100644
--- a/linden/indra/llwindow/llkeyboardwin32.cpp
+++ b/linden/indra/llwindow/llkeyboardwin32.cpp
@@ -77,7 +77,7 @@ LLKeyboardWin32::LLKeyboardWin32()
77 mTranslateKeyMap[VK_OEM_COMMA] = ','; 77 mTranslateKeyMap[VK_OEM_COMMA] = ',';
78 mTranslateKeyMap[VK_OEM_MINUS] = '-'; 78 mTranslateKeyMap[VK_OEM_MINUS] = '-';
79 mTranslateKeyMap[VK_OEM_PERIOD] = '.'; 79 mTranslateKeyMap[VK_OEM_PERIOD] = '.';
80 mTranslateKeyMap[VK_OEM_2] = '/'; 80 mTranslateKeyMap[VK_OEM_2] = KEY_PAD_DIVIDE;
81 mTranslateKeyMap[VK_OEM_3] = '`'; 81 mTranslateKeyMap[VK_OEM_3] = '`';
82 mTranslateKeyMap[VK_OEM_4] = '['; 82 mTranslateKeyMap[VK_OEM_4] = '[';
83 mTranslateKeyMap[VK_OEM_5] = '\\'; 83 mTranslateKeyMap[VK_OEM_5] = '\\';
@@ -137,7 +137,11 @@ LLKeyboardWin32::LLKeyboardWin32()
137 mTranslateNumpadMap[0x67] = KEY_PAD_HOME; // keypad 7 137 mTranslateNumpadMap[0x67] = KEY_PAD_HOME; // keypad 7
138 mTranslateNumpadMap[0x68] = KEY_PAD_UP; // keypad 8 138 mTranslateNumpadMap[0x68] = KEY_PAD_UP; // keypad 8
139 mTranslateNumpadMap[0x69] = KEY_PAD_PGUP; // keypad 9 139 mTranslateNumpadMap[0x69] = KEY_PAD_PGUP; // keypad 9
140 mTranslateNumpadMap[0x6A] = KEY_PAD_MULTIPLY; // keypad *
141 mTranslateNumpadMap[0x6B] = KEY_PAD_ADD; // keypad +
142 mTranslateNumpadMap[0x6D] = KEY_PAD_SUBTRACT; // keypad -
140 mTranslateNumpadMap[0x6E] = KEY_PAD_DEL; // keypad . 143 mTranslateNumpadMap[0x6E] = KEY_PAD_DEL; // keypad .
144 mTranslateNumpadMap[0x6F] = KEY_PAD_DIVIDE; // keypad /
141 145
142 for (iter = mTranslateNumpadMap.begin(); iter != mTranslateNumpadMap.end(); iter++) 146 for (iter = mTranslateNumpadMap.begin(); iter != mTranslateNumpadMap.end(); iter++)
143 { 147 {
diff --git a/linden/indra/llwindow/lllogitechlcd.cpp b/linden/indra/llwindow/lllogitechlcd.cpp
index 8bd77cb..81e97a0 100644
--- a/linden/indra/llwindow/lllogitechlcd.cpp
+++ b/linden/indra/llwindow/lllogitechlcd.cpp
@@ -47,6 +47,7 @@ extern LLControlGroup gSavedSettings;
47 47
48LLLCDPageGroup::LLLCDPageGroup(CEzLcd *LCD, int type, HICON SLIcon): 48LLLCDPageGroup::LLLCDPageGroup(CEzLcd *LCD, int type, HICON SLIcon):
49mType(type), 49mType(type),
50mHandle(NULL),
50mSLIcon(SLIcon), 51mSLIcon(SLIcon),
51mDisplayPage(false), 52mDisplayPage(false),
52mLCD(LCD) 53mLCD(LCD)
@@ -100,7 +101,9 @@ mDebounceTimer(),
100mPageToShow(-1), 101mPageToShow(-1),
101mInstance(instance), 102mInstance(instance),
102mDestinationLCD(-1), 103mDestinationLCD(-1),
103mFirstTimeThru(true) 104mFirstTimeThru(true),
105mCurrentGroupBeingShown(NULL),
106mSLIcon(NULL)
104{ 107{
105 HRESULT res_ = S_OK; 108 HRESULT res_ = S_OK;
106 109
diff --git a/linden/indra/llwindow/llpreeditor.h b/linden/indra/llwindow/llpreeditor.h
index f66a390..884101a 100644
--- a/linden/indra/llwindow/llpreeditor.h
+++ b/linden/indra/llwindow/llpreeditor.h
@@ -100,7 +100,7 @@ public:
100 // This is a back door of the method of same name of LLWindowCallback. 100 // This is a back door of the method of same name of LLWindowCallback.
101 // called_from_parent should be set to FALSE if calling through LLPreeditor. 101 // called_from_parent should be set to FALSE if calling through LLPreeditor.
102 102
103 virtual BOOL handleUnicodeCharHere(llwchar uni_char, BOOL called_from_parent) = 0; 103 virtual BOOL handleUnicodeCharHere(llwchar uni_char) = 0;
104}; 104};
105 105
106#endif 106#endif
diff --git a/linden/indra/llwindow/llwindow.cpp b/linden/indra/llwindow/llwindow.cpp
index 5e05f03..9963228 100644
--- a/linden/indra/llwindow/llwindow.cpp
+++ b/linden/indra/llwindow/llwindow.cpp
@@ -143,6 +143,11 @@ BOOL LLWindowCallbacks::handleActivate(LLWindow *window, BOOL activated)
143 return FALSE; 143 return FALSE;
144} 144}
145 145
146BOOL LLWindowCallbacks::handleActivateApp(LLWindow *window, BOOL activating)
147{
148 return FALSE;
149}
150
146void LLWindowCallbacks::handleMouseMove(LLWindow *window, const LLCoordGL pos, MASK mask) 151void LLWindowCallbacks::handleMouseMove(LLWindow *window, const LLCoordGL pos, MASK mask)
147{ 152{
148} 153}
@@ -190,6 +195,15 @@ void LLWindowCallbacks::handleDataCopy(LLWindow *window, S32 data_type, void *da
190{ 195{
191} 196}
192 197
198BOOL LLWindowCallbacks::handleTimerEvent(LLWindow *window)
199{
200 return FALSE;
201}
202
203BOOL LLWindowCallbacks::handleDeviceChange(LLWindow *window)
204{
205 return FALSE;
206}
193 207
194S32 OSMessageBox(const char* text, const char* caption, U32 type) 208S32 OSMessageBox(const char* text, const char* caption, U32 type)
195{ 209{
@@ -247,15 +261,6 @@ LLWindow::LLWindow(BOOL fullscreen, U32 flags)
247 mFlags(flags), 261 mFlags(flags),
248 mHighSurrogate(0) 262 mHighSurrogate(0)
249{ 263{
250 for (U32 i = 0; i < 8; i++)
251 {
252 mJoyAxis[i] = 0;
253 }
254
255 for (U32 i = 0; i < 16; i++)
256 {
257 mJoyButtonState[i] = 0;
258 }
259} 264}
260 265
261// virtual 266// virtual
@@ -273,24 +278,6 @@ void LLWindow::decBusyCount()
273 } 278 }
274} 279}
275 280
276F32 LLWindow::getJoystickAxis(U32 axis)
277{
278 if (axis < 8)
279 {
280 return mJoyAxis[axis];
281 }
282 return 0.f;
283}
284
285U8 LLWindow::getJoystickButton(U32 button)
286{
287 if (button < 16)
288 {
289 return mJoyButtonState[button];
290 }
291 return 0;
292}
293
294void LLWindow::setCallbacks(LLWindowCallbacks *callbacks) 281void LLWindow::setCallbacks(LLWindowCallbacks *callbacks)
295{ 282{
296 mCallbacks = callbacks; 283 mCallbacks = callbacks;
@@ -440,7 +427,8 @@ LLWindow* LLWindowManager::createWindow(
440 BOOL clearBg, 427 BOOL clearBg,
441 BOOL disable_vsync, 428 BOOL disable_vsync,
442 BOOL use_gl, 429 BOOL use_gl,
443 BOOL ignore_pixel_depth) 430 BOOL ignore_pixel_depth,
431 U32 fsaa_samples)
444{ 432{
445 LLWindow* new_window; 433 LLWindow* new_window;
446 434
@@ -453,15 +441,15 @@ LLWindow* LLWindowManager::createWindow(
453#elif LL_SDL 441#elif LL_SDL
454 new_window = new LLWindowSDL( 442 new_window = new LLWindowSDL(
455 title, x, y, width, height, flags, 443 title, x, y, width, height, flags,
456 fullscreen, clearBg, disable_vsync, use_gl, ignore_pixel_depth); 444 fullscreen, clearBg, disable_vsync, use_gl, ignore_pixel_depth, fsaa_samples);
457#elif LL_WINDOWS 445#elif LL_WINDOWS
458 new_window = new LLWindowWin32( 446 new_window = new LLWindowWin32(
459 title, name, x, y, width, height, flags, 447 title, name, x, y, width, height, flags,
460 fullscreen, clearBg, disable_vsync, use_gl, ignore_pixel_depth); 448 fullscreen, clearBg, disable_vsync, use_gl, ignore_pixel_depth, fsaa_samples);
461#elif LL_DARWIN 449#elif LL_DARWIN
462 new_window = new LLWindowMacOSX( 450 new_window = new LLWindowMacOSX(
463 title, name, x, y, width, height, flags, 451 title, name, x, y, width, height, flags,
464 fullscreen, clearBg, disable_vsync, use_gl, ignore_pixel_depth); 452 fullscreen, clearBg, disable_vsync, use_gl, ignore_pixel_depth, fsaa_samples);
465#elif LL_LINUX 453#elif LL_LINUX
466 new_window = new LLWindowLinux( 454 new_window = new LLWindowLinux(
467 title, name, x, y, width, height, flags, 455 title, name, x, y, width, height, flags,
diff --git a/linden/indra/llwindow/llwindow.h b/linden/indra/llwindow/llwindow.h
index 48ee4d6..89de5a0 100644
--- a/linden/indra/llwindow/llwindow.h
+++ b/linden/indra/llwindow/llwindow.h
@@ -107,6 +107,7 @@ public:
107 virtual BOOL handleMiddleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask); 107 virtual BOOL handleMiddleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask);
108 virtual BOOL handleMiddleMouseUp(LLWindow *window, LLCoordGL pos, MASK mask); 108 virtual BOOL handleMiddleMouseUp(LLWindow *window, LLCoordGL pos, MASK mask);
109 virtual BOOL handleActivate(LLWindow *window, BOOL activated); 109 virtual BOOL handleActivate(LLWindow *window, BOOL activated);
110 virtual BOOL handleActivateApp(LLWindow *window, BOOL activating);
110 virtual void handleMouseMove(LLWindow *window, LLCoordGL pos, MASK mask); 111 virtual void handleMouseMove(LLWindow *window, LLCoordGL pos, MASK mask);
111 virtual void handleScrollWheel(LLWindow *window, S32 clicks); 112 virtual void handleScrollWheel(LLWindow *window, S32 clicks);
112 virtual void handleResize(LLWindow *window, S32 width, S32 height); 113 virtual void handleResize(LLWindow *window, S32 width, S32 height);
@@ -118,6 +119,8 @@ public:
118 virtual void handleWindowBlock(LLWindow *window); // window is taking over CPU for a while 119 virtual void handleWindowBlock(LLWindow *window); // window is taking over CPU for a while
119 virtual void handleWindowUnblock(LLWindow *window); // window coming back after taking over CPU for a while 120 virtual void handleWindowUnblock(LLWindow *window); // window coming back after taking over CPU for a while
120 virtual void handleDataCopy(LLWindow *window, S32 data_type, void *data); 121 virtual void handleDataCopy(LLWindow *window, S32 data_type, void *data);
122 virtual BOOL handleTimerEvent(LLWindow *window);
123 virtual BOOL handleDeviceChange(LLWindow *window);
121}; 124};
122 125
123// Refer to llwindow_test in test/common/llwindow for usage example 126// Refer to llwindow_test in test/common/llwindow for usage example
@@ -154,7 +157,7 @@ public:
154 virtual BOOL getSize(LLCoordWindow *size) = 0; 157 virtual BOOL getSize(LLCoordWindow *size) = 0;
155 virtual BOOL setPosition(LLCoordScreen position) = 0; 158 virtual BOOL setPosition(LLCoordScreen position) = 0;
156 virtual BOOL setSize(LLCoordScreen size) = 0; 159 virtual BOOL setSize(LLCoordScreen size) = 0;
157 virtual BOOL switchContext(BOOL fullscreen, LLCoordScreen size, BOOL disable_vsync) = 0; 160 virtual BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL) = 0;
158 virtual BOOL setCursorPosition(LLCoordWindow position) = 0; 161 virtual BOOL setCursorPosition(LLCoordWindow position) = 0;
159 virtual BOOL getCursorPosition(LLCoordWindow *position) = 0; 162 virtual BOOL getCursorPosition(LLCoordWindow *position) = 0;
160 virtual void showCursor() = 0; 163 virtual void showCursor() = 0;
@@ -184,6 +187,8 @@ public:
184 virtual void flashIcon(F32 seconds) = 0; 187 virtual void flashIcon(F32 seconds) = 0;
185 virtual F32 getGamma() = 0; 188 virtual F32 getGamma() = 0;
186 virtual BOOL setGamma(const F32 gamma) = 0; // Set the gamma 189 virtual BOOL setGamma(const F32 gamma) = 0; // Set the gamma
190 virtual void setFSAASamples(const U32 fsaa_samples) = 0; //set number of FSAA samples
191 virtual U32 getFSAASamples() = 0;
187 virtual BOOL restoreGamma() = 0; // Restore original gamma table (before updating gamma) 192 virtual BOOL restoreGamma() = 0; // Restore original gamma table (before updating gamma)
188 virtual ESwapMethod getSwapMethod() { return mSwapMethod; } 193 virtual ESwapMethod getSwapMethod() { return mSwapMethod; }
189 virtual void gatherInput() = 0; 194 virtual void gatherInput() = 0;
@@ -212,9 +217,6 @@ public:
212 virtual F32 getPixelAspectRatio() = 0; 217 virtual F32 getPixelAspectRatio() = 0;
213 virtual void setNativeAspectRatio(F32 aspect) = 0; 218 virtual void setNativeAspectRatio(F32 aspect) = 0;
214 219
215 F32 getJoystickAxis(U32 axis);
216 U8 getJoystickButton(U32 button);
217
218 void setCallbacks(LLWindowCallbacks *callbacks); 220 void setCallbacks(LLWindowCallbacks *callbacks);
219 221
220 virtual void beforeDialog() {}; // prepare to put up an OS dialog (if special measures are required, such as in fullscreen mode) 222 virtual void beforeDialog() {}; // prepare to put up an OS dialog (if special measures are required, such as in fullscreen mode)
@@ -258,8 +260,6 @@ protected:
258 ESwapMethod mSwapMethod; 260 ESwapMethod mSwapMethod;
259 BOOL mHideCursorPermanent; 261 BOOL mHideCursorPermanent;
260 U32 mFlags; 262 U32 mFlags;
261 F32 mJoyAxis[8];
262 U8 mJoyButtonState[16];
263 U16 mHighSurrogate; 263 U16 mHighSurrogate;
264 264
265 // Handle a UTF-16 encoding unit received from keyboard. 265 // Handle a UTF-16 encoding unit received from keyboard.
@@ -340,7 +340,8 @@ public:
340 BOOL clearBg = FALSE, 340 BOOL clearBg = FALSE,
341 BOOL disable_vsync = TRUE, 341 BOOL disable_vsync = TRUE,
342 BOOL use_gl = TRUE, 342 BOOL use_gl = TRUE,
343 BOOL ignore_pixel_depth = FALSE); 343 BOOL ignore_pixel_depth = FALSE,
344 U32 fsaa_samples = 0);
344 static BOOL destroyWindow(LLWindow* window); 345 static BOOL destroyWindow(LLWindow* window);
345 static BOOL isWindowValid(LLWindow *window); 346 static BOOL isWindowValid(LLWindow *window);
346}; 347};
diff --git a/linden/indra/llwindow/llwindowheadless.h b/linden/indra/llwindow/llwindowheadless.h
index 15e7196..7cef7d8 100644
--- a/linden/indra/llwindow/llwindowheadless.h
+++ b/linden/indra/llwindow/llwindowheadless.h
@@ -50,7 +50,7 @@ public:
50 /*virtual*/ BOOL getSize(LLCoordWindow *size) {return FALSE;}; 50 /*virtual*/ BOOL getSize(LLCoordWindow *size) {return FALSE;};
51 /*virtual*/ BOOL setPosition(LLCoordScreen position) {return FALSE;}; 51 /*virtual*/ BOOL setPosition(LLCoordScreen position) {return FALSE;};
52 /*virtual*/ BOOL setSize(LLCoordScreen size) {return FALSE;}; 52 /*virtual*/ BOOL setSize(LLCoordScreen size) {return FALSE;};
53 /*virtual*/ BOOL switchContext(BOOL fullscreen, LLCoordScreen size, BOOL disable_vsync) {return FALSE;}; 53 /*virtual*/ BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL) {return FALSE;};
54 /*virtual*/ BOOL setCursorPosition(LLCoordWindow position) {return FALSE;}; 54 /*virtual*/ BOOL setCursorPosition(LLCoordWindow position) {return FALSE;};
55 /*virtual*/ BOOL getCursorPosition(LLCoordWindow *position) {return FALSE;}; 55 /*virtual*/ BOOL getCursorPosition(LLCoordWindow *position) {return FALSE;};
56 /*virtual*/ void showCursor() {}; 56 /*virtual*/ void showCursor() {};
@@ -69,6 +69,8 @@ public:
69 /*virtual*/ void flashIcon(F32 seconds) {}; 69 /*virtual*/ void flashIcon(F32 seconds) {};
70 /*virtual*/ F32 getGamma() {return 1.0f; }; 70 /*virtual*/ F32 getGamma() {return 1.0f; };
71 /*virtual*/ BOOL setGamma(const F32 gamma) {return FALSE; }; // Set the gamma 71 /*virtual*/ BOOL setGamma(const F32 gamma) {return FALSE; }; // Set the gamma
72 /*virtual*/ void setFSAASamples(const U32 fsaa_samples) { }
73 /*virtual*/ U32 getFSAASamples() { return 0; }
72 /*virtual*/ BOOL restoreGamma() {return FALSE; }; // Restore original gamma table (before updating gamma) 74 /*virtual*/ BOOL restoreGamma() {return FALSE; }; // Restore original gamma table (before updating gamma)
73 //virtual ESwapMethod getSwapMethod() { return mSwapMethod; } 75 //virtual ESwapMethod getSwapMethod() { return mSwapMethod; }
74 /*virtual*/ void gatherInput() {}; 76 /*virtual*/ void gatherInput() {};
diff --git a/linden/indra/llwindow/llwindowlinux.h b/linden/indra/llwindow/llwindowlinux.h
index bebf25a..da80fd4 100644
--- a/linden/indra/llwindow/llwindowlinux.h
+++ b/linden/indra/llwindow/llwindowlinux.h
@@ -50,7 +50,7 @@ public:
50 /*virtual*/ BOOL getSize(LLCoordWindow *size) {return FALSE;}; 50 /*virtual*/ BOOL getSize(LLCoordWindow *size) {return FALSE;};
51 /*virtual*/ BOOL setPosition(LLCoordScreen position) {return FALSE;}; 51 /*virtual*/ BOOL setPosition(LLCoordScreen position) {return FALSE;};
52 /*virtual*/ BOOL setSize(LLCoordScreen size) {return FALSE;}; 52 /*virtual*/ BOOL setSize(LLCoordScreen size) {return FALSE;};
53 /*virtual*/ BOOL switchContext(BOOL fullscreen, LLCoordScreen size, BOOL disable_vsync) {return FALSE;}; 53 /*virtual*/ BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL) {return FALSE;};
54 /*virtual*/ BOOL setCursorPosition(LLCoordWindow position) {return FALSE;}; 54 /*virtual*/ BOOL setCursorPosition(LLCoordWindow position) {return FALSE;};
55 /*virtual*/ BOOL getCursorPosition(LLCoordWindow *position) {return FALSE;}; 55 /*virtual*/ BOOL getCursorPosition(LLCoordWindow *position) {return FALSE;};
56 /*virtual*/ void showCursor() {}; 56 /*virtual*/ void showCursor() {};
diff --git a/linden/indra/llwindow/llwindowmacosx.cpp b/linden/indra/llwindow/llwindowmacosx.cpp
index 5c91cc0..f5cc8c6 100644
--- a/linden/indra/llwindow/llwindowmacosx.cpp
+++ b/linden/indra/llwindow/llwindowmacosx.cpp
@@ -246,7 +246,8 @@ LLWindowMacOSX::LLWindowMacOSX(char *title, char *name, S32 x, S32 y, S32 width,
246 S32 height, U32 flags, 246 S32 height, U32 flags,
247 BOOL fullscreen, BOOL clearBg, 247 BOOL fullscreen, BOOL clearBg,
248 BOOL disable_vsync, BOOL use_gl, 248 BOOL disable_vsync, BOOL use_gl,
249 BOOL ignore_pixel_depth) 249 BOOL ignore_pixel_depth,
250 U32 fsaa_samples)
250 : LLWindow(fullscreen, flags) 251 : LLWindow(fullscreen, flags)
251{ 252{
252 // Voodoo for calling cocoa from carbon (see llwindowmacosx-objc.mm). 253 // Voodoo for calling cocoa from carbon (see llwindowmacosx-objc.mm).
@@ -277,6 +278,8 @@ LLWindowMacOSX::LLWindowMacOSX(char *title, char *name, S32 x, S32 y, S32 width,
277 mTSMScriptCode = 0; 278 mTSMScriptCode = 0;
278 mTSMLangCode = 0; 279 mTSMLangCode = 0;
279 mPreeditor = NULL; 280 mPreeditor = NULL;
281 mFSAASamples = fsaa_samples;
282 mForceRebuild = FALSE;
280 283
281 // For reasons that aren't clear to me, LLTimers seem to be created in the "started" state. 284 // For reasons that aren't clear to me, LLTimers seem to be created in the "started" state.
282 // Since the started state of this one is used to track whether the NMRec has been installed, it wants to start out in the "stopped" state. 285 // Since the started state of this one is used to track whether the NMRec has been installed, it wants to start out in the "stopped" state.
@@ -558,6 +561,8 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
558 AGL_RGBA, 561 AGL_RGBA,
559 AGL_FULLSCREEN, 562 AGL_FULLSCREEN,
560 // AGL_NO_RECOVERY, // MBW -- XXX -- Not sure if we want this attribute 563 // AGL_NO_RECOVERY, // MBW -- XXX -- Not sure if we want this attribute
564 AGL_SAMPLE_BUFFERS_ARB, mFSAASamples > 0 ? 1 : 0,
565 AGL_SAMPLES_ARB, mFSAASamples,
561 AGL_DOUBLEBUFFER, 566 AGL_DOUBLEBUFFER,
562 AGL_CLOSEST_POLICY, 567 AGL_CLOSEST_POLICY,
563 AGL_ACCELERATED, 568 AGL_ACCELERATED,
@@ -586,6 +591,8 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
586 AGL_DOUBLEBUFFER, 591 AGL_DOUBLEBUFFER,
587 AGL_CLOSEST_POLICY, 592 AGL_CLOSEST_POLICY,
588 AGL_ACCELERATED, 593 AGL_ACCELERATED,
594 AGL_SAMPLE_BUFFERS_ARB, mFSAASamples > 0 ? 1 : 0,
595 AGL_SAMPLES_ARB, mFSAASamples,
589 AGL_RED_SIZE, 8, 596 AGL_RED_SIZE, 8,
590 AGL_GREEN_SIZE, 8, 597 AGL_GREEN_SIZE, 8,
591 AGL_BLUE_SIZE, 8, 598 AGL_BLUE_SIZE, 8,
@@ -819,13 +826,16 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
819 } 826 }
820 } 827 }
821 828
829 //make sure multisample starts off disabled
830 glDisable(GL_MULTISAMPLE_ARB);
831
822 // Don't need to get the current gamma, since there's a call that restores it to the system defaults. 832 // Don't need to get the current gamma, since there's a call that restores it to the system defaults.
823 return TRUE; 833 return TRUE;
824} 834}
825 835
826 836
827// changing fullscreen resolution, or switching between windowed and fullscreen mode. 837// changing fullscreen resolution, or switching between windowed and fullscreen mode.
828BOOL LLWindowMacOSX::switchContext(BOOL fullscreen, LLCoordScreen size, BOOL disable_vsync) 838BOOL LLWindowMacOSX::switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp)
829{ 839{
830 BOOL needsRebuild = FALSE; 840 BOOL needsRebuild = FALSE;
831 BOOL result = true; 841 BOOL result = true;
@@ -897,8 +907,9 @@ BOOL LLWindowMacOSX::switchContext(BOOL fullscreen, LLCoordScreen size, BOOL dis
897 } 907 }
898 908
899 stop_glerror(); 909 stop_glerror();
900 if(needsRebuild) 910 if(needsRebuild || mForceRebuild)
901 { 911 {
912 mForceRebuild = FALSE;
902 destroyContext(); 913 destroyContext();
903 result = createContext(0, 0, size.mX, size.mY, 0, fullscreen, disable_vsync); 914 result = createContext(0, 0, size.mX, size.mY, 0, fullscreen, disable_vsync);
904 if (result) 915 if (result)
@@ -1318,6 +1329,17 @@ F32 LLWindowMacOSX::getGamma()
1318 return result; 1329 return result;
1319} 1330}
1320 1331
1332U32 LLWindowMacOSX::getFSAASamples()
1333{
1334 return mFSAASamples;
1335}
1336
1337void LLWindowMacOSX::setFSAASamples(const U32 samples)
1338{
1339 mFSAASamples = samples;
1340 mForceRebuild = TRUE;
1341}
1342
1321BOOL LLWindowMacOSX::restoreGamma() 1343BOOL LLWindowMacOSX::restoreGamma()
1322{ 1344{
1323 CGDisplayRestoreColorSyncSettings(); 1345 CGDisplayRestoreColorSyncSettings();
@@ -2031,7 +2053,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e
2031 { 2053 {
2032 for (LLWString::const_iterator i = fix_string.begin(); i != fix_string.end(); i++) 2054 for (LLWString::const_iterator i = fix_string.begin(); i != fix_string.end(); i++)
2033 { 2055 {
2034 mPreeditor->handleUnicodeCharHere(*i, FALSE); 2056 mPreeditor->handleUnicodeCharHere(*i);
2035 } 2057 }
2036 } 2058 }
2037 2059
diff --git a/linden/indra/llwindow/llwindowmacosx.h b/linden/indra/llwindow/llwindowmacosx.h
index 789e2ed..1edb218 100644
--- a/linden/indra/llwindow/llwindowmacosx.h
+++ b/linden/indra/llwindow/llwindowmacosx.h
@@ -59,7 +59,7 @@ public:
59 /*virtual*/ BOOL getSize(LLCoordWindow *size); 59 /*virtual*/ BOOL getSize(LLCoordWindow *size);
60 /*virtual*/ BOOL setPosition(LLCoordScreen position); 60 /*virtual*/ BOOL setPosition(LLCoordScreen position);
61 /*virtual*/ BOOL setSize(LLCoordScreen size); 61 /*virtual*/ BOOL setSize(LLCoordScreen size);
62 /*virtual*/ BOOL switchContext(BOOL fullscreen, LLCoordScreen size, BOOL disable_vsync); 62 /*virtual*/ BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL);
63 /*virtual*/ BOOL setCursorPosition(LLCoordWindow position); 63 /*virtual*/ BOOL setCursorPosition(LLCoordWindow position);
64 /*virtual*/ BOOL getCursorPosition(LLCoordWindow *position); 64 /*virtual*/ BOOL getCursorPosition(LLCoordWindow *position);
65 /*virtual*/ void showCursor(); 65 /*virtual*/ void showCursor();
@@ -78,6 +78,8 @@ public:
78 /*virtual*/ void flashIcon(F32 seconds); 78 /*virtual*/ void flashIcon(F32 seconds);
79 /*virtual*/ F32 getGamma(); 79 /*virtual*/ F32 getGamma();
80 /*virtual*/ BOOL setGamma(const F32 gamma); // Set the gamma 80 /*virtual*/ BOOL setGamma(const F32 gamma); // Set the gamma
81 /*virtual*/ U32 getFSAASamples();
82 /*virtual*/ void setFSAASamples(const U32 fsaa_samples);
81 /*virtual*/ BOOL restoreGamma(); // Restore original gamma table (before updating gamma) 83 /*virtual*/ BOOL restoreGamma(); // Restore original gamma table (before updating gamma)
82 /*virtual*/ ESwapMethod getSwapMethod() { return mSwapMethod; } 84 /*virtual*/ ESwapMethod getSwapMethod() { return mSwapMethod; }
83 /*virtual*/ void gatherInput(); 85 /*virtual*/ void gatherInput();
@@ -118,7 +120,8 @@ protected:
118 LLWindowMacOSX( 120 LLWindowMacOSX(
119 char *title, char *name, int x, int y, int width, int height, U32 flags, 121 char *title, char *name, int x, int y, int width, int height, U32 flags,
120 BOOL fullscreen, BOOL clearBg, BOOL disable_vsync, BOOL use_gl, 122 BOOL fullscreen, BOOL clearBg, BOOL disable_vsync, BOOL use_gl,
121 BOOL ignore_pixel_depth); 123 BOOL ignore_pixel_depth,
124 U32 fsaa_samples);
122 ~LLWindowMacOSX(); 125 ~LLWindowMacOSX();
123 126
124 void initCursors(); 127 void initCursors();
@@ -184,7 +187,9 @@ protected:
184 LLCoordScreen mNeedsResizeSize; 187 LLCoordScreen mNeedsResizeSize;
185 F32 mOverrideAspectRatio; 188 F32 mOverrideAspectRatio;
186 BOOL mMinimized; 189 BOOL mMinimized;
187 190 U32 mFSAASamples;
191 BOOL mForceRebuild;
192
188 F32 mBounceTime; 193 F32 mBounceTime;
189 NMRec mBounceRec; 194 NMRec mBounceRec;
190 LLTimer mBounceTimer; 195 LLTimer mBounceTimer;
@@ -195,7 +200,7 @@ protected:
195 ScriptCode mTSMScriptCode; 200 ScriptCode mTSMScriptCode;
196 LangCode mTSMLangCode; 201 LangCode mTSMLangCode;
197 LLPreeditor* mPreeditor; 202 LLPreeditor* mPreeditor;
198 203
199 friend class LLWindowManager; 204 friend class LLWindowManager;
200}; 205};
201 206
diff --git a/linden/indra/llwindow/llwindowmesaheadless.h b/linden/indra/llwindow/llwindowmesaheadless.h
index 29e5878..fb32e38 100644
--- a/linden/indra/llwindow/llwindowmesaheadless.h
+++ b/linden/indra/llwindow/llwindowmesaheadless.h
@@ -54,7 +54,7 @@ public:
54 /*virtual*/ BOOL getSize(LLCoordWindow *size) {return FALSE;}; 54 /*virtual*/ BOOL getSize(LLCoordWindow *size) {return FALSE;};
55 /*virtual*/ BOOL setPosition(LLCoordScreen position) {return FALSE;}; 55 /*virtual*/ BOOL setPosition(LLCoordScreen position) {return FALSE;};
56 /*virtual*/ BOOL setSize(LLCoordScreen size) {return FALSE;}; 56 /*virtual*/ BOOL setSize(LLCoordScreen size) {return FALSE;};
57 /*virtual*/ BOOL switchContext(BOOL fullscreen, LLCoordScreen size, BOOL disable_vsync) {return FALSE;}; 57 /*virtual*/ BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL) {return FALSE;};
58 /*virtual*/ BOOL setCursorPosition(LLCoordWindow position) {return FALSE;}; 58 /*virtual*/ BOOL setCursorPosition(LLCoordWindow position) {return FALSE;};
59 /*virtual*/ BOOL getCursorPosition(LLCoordWindow *position) {return FALSE;}; 59 /*virtual*/ BOOL getCursorPosition(LLCoordWindow *position) {return FALSE;};
60 /*virtual*/ void showCursor() {}; 60 /*virtual*/ void showCursor() {};
@@ -74,6 +74,8 @@ public:
74 /*virtual*/ F32 getGamma() {return 1.0f; }; 74 /*virtual*/ F32 getGamma() {return 1.0f; };
75 /*virtual*/ BOOL setGamma(const F32 gamma) {return FALSE; }; // Set the gamma 75 /*virtual*/ BOOL setGamma(const F32 gamma) {return FALSE; }; // Set the gamma
76 /*virtual*/ BOOL restoreGamma() {return FALSE; }; // Restore original gamma table (before updating gamma) 76 /*virtual*/ BOOL restoreGamma() {return FALSE; }; // Restore original gamma table (before updating gamma)
77 /*virtual*/ void setFSAASamples(const U32 fsaa_samples) { /* FSAA not supported yet on Mesa headless.*/ }
78 /*virtual*/ U32 getFSAASamples() { return 0; }
77 //virtual ESwapMethod getSwapMethod() { return mSwapMethod; } 79 //virtual ESwapMethod getSwapMethod() { return mSwapMethod; }
78 /*virtual*/ void gatherInput() {}; 80 /*virtual*/ void gatherInput() {};
79 /*virtual*/ void delayInputProcessing() {}; 81 /*virtual*/ void delayInputProcessing() {};
diff --git a/linden/indra/llwindow/llwindowsdl.cpp b/linden/indra/llwindow/llwindowsdl.cpp
index 73753c3..d9dc040 100644
--- a/linden/indra/llwindow/llwindowsdl.cpp
+++ b/linden/indra/llwindow/llwindowsdl.cpp
@@ -82,7 +82,7 @@ static BOOL was_fullscreen = FALSE;
82 82
83void maybe_lock_display(void) 83void maybe_lock_display(void)
84{ 84{
85 if (gWindowImplementation) { 85 if (gWindowImplementation && gWindowImplementation->Lock_Display) {
86 gWindowImplementation->Lock_Display(); 86 gWindowImplementation->Lock_Display();
87 } 87 }
88} 88}
@@ -90,7 +90,7 @@ void maybe_lock_display(void)
90 90
91void maybe_unlock_display(void) 91void maybe_unlock_display(void)
92{ 92{
93 if (gWindowImplementation) { 93 if (gWindowImplementation && gWindowImplementation->Unlock_Display) {
94 gWindowImplementation->Unlock_Display(); 94 gWindowImplementation->Unlock_Display();
95 } 95 }
96} 96}
@@ -218,7 +218,7 @@ LLWindowSDL::LLWindowSDL(char *title, S32 x, S32 y, S32 width,
218 S32 height, U32 flags, 218 S32 height, U32 flags,
219 BOOL fullscreen, BOOL clearBg, 219 BOOL fullscreen, BOOL clearBg,
220 BOOL disable_vsync, BOOL use_gl, 220 BOOL disable_vsync, BOOL use_gl,
221 BOOL ignore_pixel_depth) 221 BOOL ignore_pixel_depth, U32 fsaa_samples)
222 : LLWindow(fullscreen, flags), mGamma(1.0f) 222 : LLWindow(fullscreen, flags), mGamma(1.0f)
223{ 223{
224 // Initialize the keyboard 224 // Initialize the keyboard
@@ -237,6 +237,7 @@ LLWindowSDL::LLWindowSDL(char *title, S32 x, S32 y, S32 width,
237 mReallyCapturedCount = 0; 237 mReallyCapturedCount = 0;
238 mHaveInputFocus = -1; 238 mHaveInputFocus = -1;
239 mIsMinimized = -1; 239 mIsMinimized = -1;
240 mFSAASamples = fsaa_samples;
240 241
241#if LL_X11 242#if LL_X11
242 mSDL_XWindowID = None; 243 mSDL_XWindowID = None;
@@ -261,7 +262,7 @@ LLWindowSDL::LLWindowSDL(char *title, S32 x, S32 y, S32 width,
261 mWindowTitle = new char[strlen(title) + 1]; /* Flawfinder: ignore */ 262 mWindowTitle = new char[strlen(title) + 1]; /* Flawfinder: ignore */
262 if(mWindowTitle == NULL) 263 if(mWindowTitle == NULL)
263 { 264 {
264 llerrs << "Memory allocation failure" << llendl; 265 llwarns << "Memory allocation failure" << llendl;
265 return; 266 return;
266 } 267 }
267 268
@@ -536,6 +537,12 @@ BOOL LLWindowSDL::createContext(int x, int y, int width, int height, int bits, B
536 537
537 SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); 538 SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
538 539
540 if (mFSAASamples > 0)
541 {
542 SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
543 SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, mFSAASamples);
544 }
545
539 mSDLFlags = sdlflags; 546 mSDLFlags = sdlflags;
540 547
541 if (mFullscreen) 548 if (mFullscreen)
@@ -747,6 +754,9 @@ BOOL LLWindowSDL::createContext(int x, int y, int width, int height, int bits, B
747#if LL_X11 754#if LL_X11
748 init_x11clipboard(); 755 init_x11clipboard();
749#endif // LL_X11 756#endif // LL_X11
757
758 //make sure multisampling is disabled by default
759 glDisable(GL_MULTISAMPLE_ARB);
750 760
751 // We need to do this here, once video is init'd 761 // We need to do this here, once video is init'd
752 if (-1 == SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, 762 if (-1 == SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY,
@@ -759,7 +769,7 @@ BOOL LLWindowSDL::createContext(int x, int y, int width, int height, int bits, B
759 769
760 770
761// changing fullscreen resolution, or switching between windowed and fullscreen mode. 771// changing fullscreen resolution, or switching between windowed and fullscreen mode.
762BOOL LLWindowSDL::switchContext(BOOL fullscreen, LLCoordScreen size, BOOL disable_vsync) 772BOOL LLWindowSDL::switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp)
763{ 773{
764 const BOOL needsRebuild = TRUE; // Just nuke the context and start over. 774 const BOOL needsRebuild = TRUE; // Just nuke the context and start over.
765 BOOL result = true; 775 BOOL result = true;
@@ -797,7 +807,6 @@ void LLWindowSDL::destroyContext()
797 gGLManager.shutdownGL(); 807 gGLManager.shutdownGL();
798 llinfos << "SDL_QuitSS/VID begins" << llendl; 808 llinfos << "SDL_QuitSS/VID begins" << llendl;
799 SDL_QuitSubSystem(SDL_INIT_VIDEO); // *FIX: this might be risky... 809 SDL_QuitSubSystem(SDL_INIT_VIDEO); // *FIX: this might be risky...
800 //unload_all_glsyms();
801 810
802 mWindow = NULL; 811 mWindow = NULL;
803} 812}
@@ -923,10 +932,10 @@ BOOL LLWindowSDL::getSize(LLCoordScreen *size)
923 { 932 {
924 size->mX = mWindow->w; 933 size->mX = mWindow->w;
925 size->mY = mWindow->h; 934 size->mY = mWindow->h;
926 return (TRUE); 935 return (TRUE);
927 } 936 }
928 937
929 llerrs << "LLWindowSDL::getPosition(): no window and not fullscreen!" << llendl; 938 llwarns << "LLWindowSDL::getPosition(): no window and not fullscreen!" << llendl;
930 return (FALSE); 939 return (FALSE);
931} 940}
932 941
@@ -936,10 +945,10 @@ BOOL LLWindowSDL::getSize(LLCoordWindow *size)
936 { 945 {
937 size->mX = mWindow->w; 946 size->mX = mWindow->w;
938 size->mY = mWindow->h; 947 size->mY = mWindow->h;
939 return (TRUE); 948 return (TRUE);
940 } 949 }
941 950
942 llerrs << "LLWindowSDL::getPosition(): no window and not fullscreen!" << llendl; 951 llwarns << "LLWindowSDL::getPosition(): no window and not fullscreen!" << llendl;
943 return (FALSE); 952 return (FALSE);
944} 953}
945 954
@@ -971,6 +980,16 @@ void LLWindowSDL::swapBuffers()
971 SDL_GL_SwapBuffers(); 980 SDL_GL_SwapBuffers();
972} 981}
973 982
983U32 LLWindowSDL::getFSAASamples()
984{
985 return mFSAASamples;
986}
987
988void LLWindowSDL::setFSAASamples(const U32 samples)
989{
990 mFSAASamples = samples;
991}
992
974F32 LLWindowSDL::getGamma() 993F32 LLWindowSDL::getGamma()
975{ 994{
976 return 1/mGamma; 995 return 1/mGamma;
@@ -1117,8 +1136,10 @@ F32 LLWindowSDL::getPixelAspectRatio()
1117 if (getFullscreen()) 1136 if (getFullscreen())
1118 { 1137 {
1119 LLCoordScreen screen_size; 1138 LLCoordScreen screen_size;
1120 getSize(&screen_size); 1139 if (getSize(&screen_size))
1121 pixel_aspect = getNativeAspectRatio() * (F32)screen_size.mY / (F32)screen_size.mX; 1140 {
1141 pixel_aspect = getNativeAspectRatio() * (F32)screen_size.mY / (F32)screen_size.mX;
1142 }
1122 } 1143 }
1123 1144
1124 return pixel_aspect; 1145 return pixel_aspect;
diff --git a/linden/indra/llwindow/llwindowsdl.h b/linden/indra/llwindow/llwindowsdl.h
index 3d102b9..d1b2b77 100644
--- a/linden/indra/llwindow/llwindowsdl.h
+++ b/linden/indra/llwindow/llwindowsdl.h
@@ -66,7 +66,7 @@ public:
66 /*virtual*/ BOOL getSize(LLCoordWindow *size); 66 /*virtual*/ BOOL getSize(LLCoordWindow *size);
67 /*virtual*/ BOOL setPosition(LLCoordScreen position); 67 /*virtual*/ BOOL setPosition(LLCoordScreen position);
68 /*virtual*/ BOOL setSize(LLCoordScreen size); 68 /*virtual*/ BOOL setSize(LLCoordScreen size);
69 /*virtual*/ BOOL switchContext(BOOL fullscreen, LLCoordScreen size, BOOL disable_vsync); 69 /*virtual*/ BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL);
70 /*virtual*/ BOOL setCursorPosition(LLCoordWindow position); 70 /*virtual*/ BOOL setCursorPosition(LLCoordWindow position);
71 /*virtual*/ BOOL getCursorPosition(LLCoordWindow *position); 71 /*virtual*/ BOOL getCursorPosition(LLCoordWindow *position);
72 /*virtual*/ void showCursor(); 72 /*virtual*/ void showCursor();
@@ -85,6 +85,8 @@ public:
85 /*virtual*/ void flashIcon(F32 seconds); 85 /*virtual*/ void flashIcon(F32 seconds);
86 /*virtual*/ F32 getGamma(); 86 /*virtual*/ F32 getGamma();
87 /*virtual*/ BOOL setGamma(const F32 gamma); // Set the gamma 87 /*virtual*/ BOOL setGamma(const F32 gamma); // Set the gamma
88 /*virtual*/ U32 getFSAASamples();
89 /*virtual*/ void setFSAASamples(const U32 samples);
88 /*virtual*/ BOOL restoreGamma(); // Restore original gamma table (before updating gamma) 90 /*virtual*/ BOOL restoreGamma(); // Restore original gamma table (before updating gamma)
89 /*virtual*/ ESwapMethod getSwapMethod() { return mSwapMethod; } 91 /*virtual*/ ESwapMethod getSwapMethod() { return mSwapMethod; }
90 /*virtual*/ void gatherInput(); 92 /*virtual*/ void gatherInput();
@@ -132,7 +134,7 @@ protected:
132 LLWindowSDL( 134 LLWindowSDL(
133 char *title, int x, int y, int width, int height, U32 flags, 135 char *title, int x, int y, int width, int height, U32 flags,
134 BOOL fullscreen, BOOL clearBg, BOOL disable_vsync, BOOL use_gl, 136 BOOL fullscreen, BOOL clearBg, BOOL disable_vsync, BOOL use_gl,
135 BOOL ignore_pixel_depth); 137 BOOL ignore_pixel_depth, U32 fsaa_samples);
136 ~LLWindowSDL(); 138 ~LLWindowSDL();
137 139
138 void initCursors(); 140 void initCursors();
@@ -183,6 +185,7 @@ protected:
183 LLCoordScreen mNeedsResizeSize; 185 LLCoordScreen mNeedsResizeSize;
184 F32 mOverrideAspectRatio; 186 F32 mOverrideAspectRatio;
185 F32 mGamma; 187 F32 mGamma;
188 U32 mFSAASamples;
186 189
187 int mSDLFlags; 190 int mSDLFlags;
188 191
diff --git a/linden/indra/llwindow/llwindowsolaris.h b/linden/indra/llwindow/llwindowsolaris.h
index 7aeac58..7a271c0 100644
--- a/linden/indra/llwindow/llwindowsolaris.h
+++ b/linden/indra/llwindow/llwindowsolaris.h
@@ -50,7 +50,7 @@ public:
50 /*virtual*/ BOOL getSize(LLCoordWindow *size) {return FALSE;}; 50 /*virtual*/ BOOL getSize(LLCoordWindow *size) {return FALSE;};
51 /*virtual*/ BOOL setPosition(LLCoordScreen position) {return FALSE;}; 51 /*virtual*/ BOOL setPosition(LLCoordScreen position) {return FALSE;};
52 /*virtual*/ BOOL setSize(LLCoordScreen size) {return FALSE;}; 52 /*virtual*/ BOOL setSize(LLCoordScreen size) {return FALSE;};
53 /*virtual*/ BOOL switchContext(BOOL fullscreen, LLCoordScreen size, BOOL disable_vsync) {return FALSE;}; 53 /*virtual*/ BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL) {return FALSE;};
54 /*virtual*/ BOOL setCursorPosition(LLCoordWindow position) {return FALSE;}; 54 /*virtual*/ BOOL setCursorPosition(LLCoordWindow position) {return FALSE;};
55 /*virtual*/ BOOL getCursorPosition(LLCoordWindow *position) {return FALSE;}; 55 /*virtual*/ BOOL getCursorPosition(LLCoordWindow *position) {return FALSE;};
56 /*virtual*/ void showCursor() {}; 56 /*virtual*/ void showCursor() {};
@@ -69,6 +69,8 @@ public:
69 /*virtual*/ void flashIcon(F32 seconds) {}; 69 /*virtual*/ void flashIcon(F32 seconds) {};
70 /*virtual*/ F32 getGamma() {return 1.0f; }; 70 /*virtual*/ F32 getGamma() {return 1.0f; };
71 /*virtual*/ BOOL setGamma(const F32 gamma) {return FALSE; }; // Set the gamma 71 /*virtual*/ BOOL setGamma(const F32 gamma) {return FALSE; }; // Set the gamma
72 /*virtual*/ U32 getFSAASamples() { return 0; }
73 /*virtual*/ void setFSAASamples(const U32 samples) { }
72 /*virtual*/ BOOL restoreGamma() {return FALSE; }; // Restore original gamma table (before updating gamma) 74 /*virtual*/ BOOL restoreGamma() {return FALSE; }; // Restore original gamma table (before updating gamma)
73 //virtual ESwapMethod getSwapMethod() { return mSwapMethod; } 75 //virtual ESwapMethod getSwapMethod() { return mSwapMethod; }
74 /*virtual*/ void gatherInput() {}; 76 /*virtual*/ void gatherInput() {};
diff --git a/linden/indra/llwindow/llwindowwin32.cpp b/linden/indra/llwindow/llwindowwin32.cpp
index f6beb79..b14df5e 100644
--- a/linden/indra/llwindow/llwindowwin32.cpp
+++ b/linden/indra/llwindow/llwindowwin32.cpp
@@ -1,4 +1,4 @@
1/** 1/**
2 * @file llwindowwin32.cpp 2 * @file llwindowwin32.cpp
3 * @brief Platform-dependent implementation of llwindow 3 * @brief Platform-dependent implementation of llwindow
4 * 4 *
@@ -46,7 +46,7 @@
46#define DIRECTINPUT_VERSION 0x0800 46#define DIRECTINPUT_VERSION 0x0800
47 47
48#include <dinput.h> 48#include <dinput.h>
49 49#include <Dbt.h.>
50 50
51#include "llkeyboardwin32.h" 51#include "llkeyboardwin32.h"
52#include "llerror.h" 52#include "llerror.h"
@@ -103,7 +103,7 @@ LLCoordWindow LLWindowWin32::sWinIMEWindowPosition(-1,-1);
103// as a default, and we can't link against imm32.lib statically. 103// as a default, and we can't link against imm32.lib statically.
104// I believe DLL loading of this type is best suited to do 104// I believe DLL loading of this type is best suited to do
105// in a static initialization of a class. What I'm not sure is 105// in a static initialization of a class. What I'm not sure is
106// whether it follows the Linden Conding Standard... 106// whether it follows the Linden Conding Standard...
107// See http://wiki.secondlife.com/wiki/Coding_standards#Static_Members 107// See http://wiki.secondlife.com/wiki/Coding_standards#Static_Members
108 108
109class LLWinImm 109class LLWinImm
@@ -113,16 +113,16 @@ public:
113 113
114public: 114public:
115 // Wrappers for IMM API. 115 // Wrappers for IMM API.
116 static BOOL isIME(HKL hkl); 116 static BOOL isIME(HKL hkl);
117 static HWND getDefaultIMEWnd(HWND hwnd); 117 static HWND getDefaultIMEWnd(HWND hwnd);
118 static HIMC getContext(HWND hwnd); 118 static HIMC getContext(HWND hwnd);
119 static BOOL releaseContext(HWND hwnd, HIMC himc); 119 static BOOL releaseContext(HWND hwnd, HIMC himc);
120 static BOOL getOpenStatus(HIMC himc); 120 static BOOL getOpenStatus(HIMC himc);
121 static BOOL setOpenStatus(HIMC himc, BOOL status); 121 static BOOL setOpenStatus(HIMC himc, BOOL status);
122 static BOOL getConversionStatus(HIMC himc, LPDWORD conversion, LPDWORD sentence); 122 static BOOL getConversionStatus(HIMC himc, LPDWORD conversion, LPDWORD sentence);
123 static BOOL setConversionStatus(HIMC himc, DWORD conversion, DWORD sentence); 123 static BOOL setConversionStatus(HIMC himc, DWORD conversion, DWORD sentence);
124 static BOOL getCompositionWindow(HIMC himc, LPCOMPOSITIONFORM form); 124 static BOOL getCompositionWindow(HIMC himc, LPCOMPOSITIONFORM form);
125 static BOOL setCompositionWindow(HIMC himc, LPCOMPOSITIONFORM form); 125 static BOOL setCompositionWindow(HIMC himc, LPCOMPOSITIONFORM form);
126 static LONG getCompositionString(HIMC himc, DWORD index, LPVOID data, DWORD length); 126 static LONG getCompositionString(HIMC himc, DWORD index, LPVOID data, DWORD length);
127 static BOOL setCompositionString(HIMC himc, DWORD index, LPVOID pComp, DWORD compLength, LPVOID pRead, DWORD readLength); 127 static BOOL setCompositionString(HIMC himc, DWORD index, LPVOID pComp, DWORD compLength, LPVOID pRead, DWORD readLength);
128 static BOOL setCompositionFont(HIMC himc, LPLOGFONTW logfont); 128 static BOOL setCompositionFont(HIMC himc, LPLOGFONTW logfont);
@@ -160,10 +160,10 @@ LLWinImm LLWinImm::sTheInstance;
160 160
161LLWinImm::LLWinImm() : mHImmDll(NULL) 161LLWinImm::LLWinImm() : mHImmDll(NULL)
162{ 162{
163 // Check system metrics 163 // Check system metrics
164 if ( !GetSystemMetrics( SM_DBCSENABLED ) ) 164 if ( !GetSystemMetrics( SM_DBCSENABLED ) )
165 return; 165 return;
166 166
167 167
168 mHImmDll = LoadLibraryA("Imm32"); 168 mHImmDll = LoadLibraryA("Imm32");
169 if (mHImmDll != NULL) 169 if (mHImmDll != NULL)
@@ -200,13 +200,13 @@ LLWinImm::LLWinImm() : mHImmDll(NULL)
200 mImmSetCandidateWindow == NULL || 200 mImmSetCandidateWindow == NULL ||
201 mImmNotifyIME == NULL) 201 mImmNotifyIME == NULL)
202 { 202 {
203 // If any of the above API entires are not found, we can't use IMM API. 203 // If any of the above API entires are not found, we can't use IMM API.
204 // So, turn off the IMM support. We should log some warning message in 204 // So, turn off the IMM support. We should log some warning message in
205 // the case, since it is very unusual; these APIs are available from 205 // the case, since it is very unusual; these APIs are available from
206 // the beginning, and all versions of IMM32.DLL should have them all. 206 // the beginning, and all versions of IMM32.DLL should have them all.
207 // Unfortunately, this code may be executed before initialization of 207 // Unfortunately, this code may be executed before initialization of
208 // the logging channel (llwarns), and we can't do it here... Yes, this 208 // the logging channel (llwarns), and we can't do it here... Yes, this
209 // is one of disadvantages to use static constraction to DLL loading. 209 // is one of disadvantages to use static constraction to DLL loading.
210 FreeLibrary(mHImmDll); 210 FreeLibrary(mHImmDll);
211 mHImmDll = NULL; 211 mHImmDll = NULL;
212 212
@@ -231,117 +231,117 @@ LLWinImm::LLWinImm() : mHImmDll(NULL)
231} 231}
232 232
233 233
234// static 234// static
235BOOL LLWinImm::isIME(HKL hkl) 235BOOL LLWinImm::isIME(HKL hkl)
236{ 236{
237 if ( sTheInstance.mImmIsIME ) 237 if ( sTheInstance.mImmIsIME )
238 return sTheInstance.mImmIsIME(hkl); 238 return sTheInstance.mImmIsIME(hkl);
239 return FALSE; 239 return FALSE;
240} 240}
241 241
242// static 242// static
243HIMC LLWinImm::getContext(HWND hwnd) 243HIMC LLWinImm::getContext(HWND hwnd)
244{ 244{
245 if ( sTheInstance.mImmGetContext ) 245 if ( sTheInstance.mImmGetContext )
246 return sTheInstance.mImmGetContext(hwnd); 246 return sTheInstance.mImmGetContext(hwnd);
247 return 0; 247 return 0;
248} 248}
249 249
250//static 250//static
251BOOL LLWinImm::releaseContext(HWND hwnd, HIMC himc) 251BOOL LLWinImm::releaseContext(HWND hwnd, HIMC himc)
252{ 252{
253 if ( sTheInstance.mImmIsIME ) 253 if ( sTheInstance.mImmIsIME )
254 return sTheInstance.mImmReleaseContext(hwnd, himc); 254 return sTheInstance.mImmReleaseContext(hwnd, himc);
255 return FALSE; 255 return FALSE;
256} 256}
257 257
258// static 258// static
259BOOL LLWinImm::getOpenStatus(HIMC himc) 259BOOL LLWinImm::getOpenStatus(HIMC himc)
260{ 260{
261 if ( sTheInstance.mImmGetOpenStatus ) 261 if ( sTheInstance.mImmGetOpenStatus )
262 return sTheInstance.mImmGetOpenStatus(himc); 262 return sTheInstance.mImmGetOpenStatus(himc);
263 return FALSE; 263 return FALSE;
264} 264}
265 265
266// static 266// static
267BOOL LLWinImm::setOpenStatus(HIMC himc, BOOL status) 267BOOL LLWinImm::setOpenStatus(HIMC himc, BOOL status)
268{ 268{
269 if ( sTheInstance.mImmSetOpenStatus ) 269 if ( sTheInstance.mImmSetOpenStatus )
270 return sTheInstance.mImmSetOpenStatus(himc, status); 270 return sTheInstance.mImmSetOpenStatus(himc, status);
271 return FALSE; 271 return FALSE;
272} 272}
273 273
274// static 274// static
275BOOL LLWinImm::getConversionStatus(HIMC himc, LPDWORD conversion, LPDWORD sentence) 275BOOL LLWinImm::getConversionStatus(HIMC himc, LPDWORD conversion, LPDWORD sentence)
276{ 276{
277 if ( sTheInstance.mImmGetConversionStatus ) 277 if ( sTheInstance.mImmGetConversionStatus )
278 return sTheInstance.mImmGetConversionStatus(himc, conversion, sentence); 278 return sTheInstance.mImmGetConversionStatus(himc, conversion, sentence);
279 return FALSE; 279 return FALSE;
280} 280}
281 281
282// static 282// static
283BOOL LLWinImm::setConversionStatus(HIMC himc, DWORD conversion, DWORD sentence) 283BOOL LLWinImm::setConversionStatus(HIMC himc, DWORD conversion, DWORD sentence)
284{ 284{
285 if ( sTheInstance.mImmSetConversionStatus ) 285 if ( sTheInstance.mImmSetConversionStatus )
286 return sTheInstance.mImmSetConversionStatus(himc, conversion, sentence); 286 return sTheInstance.mImmSetConversionStatus(himc, conversion, sentence);
287 return FALSE; 287 return FALSE;
288} 288}
289 289
290// static 290// static
291BOOL LLWinImm::getCompositionWindow(HIMC himc, LPCOMPOSITIONFORM form) 291BOOL LLWinImm::getCompositionWindow(HIMC himc, LPCOMPOSITIONFORM form)
292{ 292{
293 if ( sTheInstance.mImmGetCompostitionWindow ) 293 if ( sTheInstance.mImmGetCompostitionWindow )
294 return sTheInstance.mImmGetCompostitionWindow(himc, form); 294 return sTheInstance.mImmGetCompostitionWindow(himc, form);
295 return FALSE; 295 return FALSE;
296} 296}
297 297
298// static 298// static
299BOOL LLWinImm::setCompositionWindow(HIMC himc, LPCOMPOSITIONFORM form) 299BOOL LLWinImm::setCompositionWindow(HIMC himc, LPCOMPOSITIONFORM form)
300{ 300{
301 if ( sTheInstance.mImmSetCompostitionWindow ) 301 if ( sTheInstance.mImmSetCompostitionWindow )
302 return sTheInstance.mImmSetCompostitionWindow(himc, form); 302 return sTheInstance.mImmSetCompostitionWindow(himc, form);
303 return FALSE; 303 return FALSE;
304} 304}
305 305
306 306
307// static 307// static
308LONG LLWinImm::getCompositionString(HIMC himc, DWORD index, LPVOID data, DWORD length) 308LONG LLWinImm::getCompositionString(HIMC himc, DWORD index, LPVOID data, DWORD length)
309{ 309{
310 if ( sTheInstance.mImmGetCompositionString ) 310 if ( sTheInstance.mImmGetCompositionString )
311 return sTheInstance.mImmGetCompositionString(himc, index, data, length); 311 return sTheInstance.mImmGetCompositionString(himc, index, data, length);
312 return FALSE; 312 return FALSE;
313} 313}
314 314
315 315
316// static 316// static
317BOOL LLWinImm::setCompositionString(HIMC himc, DWORD index, LPVOID pComp, DWORD compLength, LPVOID pRead, DWORD readLength) 317BOOL LLWinImm::setCompositionString(HIMC himc, DWORD index, LPVOID pComp, DWORD compLength, LPVOID pRead, DWORD readLength)
318{ 318{
319 if ( sTheInstance.mImmSetCompositionString ) 319 if ( sTheInstance.mImmSetCompositionString )
320 return sTheInstance.mImmSetCompositionString(himc, index, pComp, compLength, pRead, readLength); 320 return sTheInstance.mImmSetCompositionString(himc, index, pComp, compLength, pRead, readLength);
321 return FALSE; 321 return FALSE;
322} 322}
323 323
324// static 324// static
325BOOL LLWinImm::setCompositionFont(HIMC himc, LPLOGFONTW pFont) 325BOOL LLWinImm::setCompositionFont(HIMC himc, LPLOGFONTW pFont)
326{ 326{
327 if ( sTheInstance.mImmSetCompositionFont ) 327 if ( sTheInstance.mImmSetCompositionFont )
328 return sTheInstance.mImmSetCompositionFont(himc, pFont); 328 return sTheInstance.mImmSetCompositionFont(himc, pFont);
329 return FALSE; 329 return FALSE;
330} 330}
331 331
332// static 332// static
333BOOL LLWinImm::setCandidateWindow(HIMC himc, LPCANDIDATEFORM form) 333BOOL LLWinImm::setCandidateWindow(HIMC himc, LPCANDIDATEFORM form)
334{ 334{
335 if ( sTheInstance.mImmSetCandidateWindow ) 335 if ( sTheInstance.mImmSetCandidateWindow )
336 return sTheInstance.mImmSetCandidateWindow(himc, form); 336 return sTheInstance.mImmSetCandidateWindow(himc, form);
337 return FALSE; 337 return FALSE;
338} 338}
339 339
340// static 340// static
341BOOL LLWinImm::notifyIME(HIMC himc, DWORD action, DWORD index, DWORD value) 341BOOL LLWinImm::notifyIME(HIMC himc, DWORD action, DWORD index, DWORD value)
342{ 342{
343 if ( sTheInstance.mImmNotifyIME ) 343 if ( sTheInstance.mImmNotifyIME )
344 return sTheInstance.mImmNotifyIME(himc, action, index, value); 344 return sTheInstance.mImmNotifyIME(himc, action, index, value);
345 return FALSE; 345 return FALSE;
346} 346}
347 347
@@ -359,22 +359,15 @@ LLWinImm::~LLWinImm()
359} 359}
360 360
361 361
362LPDIRECTINPUT8 g_pDI = NULL;
363LPDIRECTINPUTDEVICE8 g_pJoystick = NULL;
364BOOL CALLBACK EnumJoysticksCallback( const DIDEVICEINSTANCE* pdidInstance,
365 VOID* pContext );
366BOOL CALLBACK EnumObjectsCallback( const DIDEVICEOBJECTINSTANCE* pdidoi,
367 VOID* pContext );
368
369
370LLWindowWin32::LLWindowWin32(char *title, char *name, S32 x, S32 y, S32 width, 362LLWindowWin32::LLWindowWin32(char *title, char *name, S32 x, S32 y, S32 width,
371 S32 height, U32 flags, 363 S32 height, U32 flags,
372 BOOL fullscreen, BOOL clearBg, 364 BOOL fullscreen, BOOL clearBg,
373 BOOL disable_vsync, BOOL use_gl, 365 BOOL disable_vsync, BOOL use_gl,
374 BOOL ignore_pixel_depth) 366 BOOL ignore_pixel_depth,
367 U32 fsaa_samples)
375 : LLWindow(fullscreen, flags) 368 : LLWindow(fullscreen, flags)
376{ 369{
377 S32 i = 0; 370 mFSAASamples = fsaa_samples;
378 mIconResource = gIconResource; 371 mIconResource = gIconResource;
379 mOverrideAspectRatio = 0.f; 372 mOverrideAspectRatio = 0.f;
380 mNativeAspectRatio = 0.f; 373 mNativeAspectRatio = 0.f;
@@ -389,10 +382,7 @@ LLWindowWin32::LLWindowWin32(char *title, char *name, S32 x, S32 y, S32 width,
389 // based on the system's (user's) default settings. 382 // based on the system's (user's) default settings.
390 allowLanguageTextInput(mPreeditor, FALSE); 383 allowLanguageTextInput(mPreeditor, FALSE);
391 384
392 GLuint pixel_format;
393 WNDCLASS wc; 385 WNDCLASS wc;
394 DWORD dw_ex_style;
395 DWORD dw_style;
396 RECT window_rect; 386 RECT window_rect;
397 387
398 // Set the window title 388 // Set the window title
@@ -442,8 +432,8 @@ LLWindowWin32::LLWindowWin32(char *title, char *name, S32 x, S32 y, S32 width,
442 432
443 // Grab screen size to sanitize the window 433 // Grab screen size to sanitize the window
444 S32 window_border_y = GetSystemMetrics(SM_CYBORDER); 434 S32 window_border_y = GetSystemMetrics(SM_CYBORDER);
445 S32 virtual_screen_x = GetSystemMetrics(SM_XVIRTUALSCREEN); 435 S32 virtual_screen_x = GetSystemMetrics(SM_XVIRTUALSCREEN);
446 S32 virtual_screen_y = GetSystemMetrics(SM_YVIRTUALSCREEN); 436 S32 virtual_screen_y = GetSystemMetrics(SM_YVIRTUALSCREEN);
447 S32 virtual_screen_width = GetSystemMetrics(SM_CXVIRTUALSCREEN); 437 S32 virtual_screen_width = GetSystemMetrics(SM_CXVIRTUALSCREEN);
448 S32 virtual_screen_height = GetSystemMetrics(SM_CYVIRTUALSCREEN); 438 S32 virtual_screen_height = GetSystemMetrics(SM_CYVIRTUALSCREEN);
449 439
@@ -554,7 +544,7 @@ LLWindowWin32::LLWindowWin32(char *title, char *name, S32 x, S32 y, S32 width,
554 success = setDisplayResolution(width, height, BITS_PER_PIXEL, closest_refresh); 544 success = setDisplayResolution(width, height, BITS_PER_PIXEL, closest_refresh);
555 } 545 }
556 546
557 // Keep a copy of the actual current device mode in case we minimize 547 // Keep a copy of the actual current device mode in case we minimize
558 // and change the screen resolution. JC 548 // and change the screen resolution. JC
559 EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dev_mode); 549 EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dev_mode);
560 550
@@ -586,49 +576,7 @@ LLWindowWin32::LLWindowWin32(char *title, char *name, S32 x, S32 y, S32 width,
586 OSMessageBox(error, "Error", OSMB_OK); 576 OSMessageBox(error, "Error", OSMB_OK);
587 } 577 }
588 } 578 }
589 579
590 //-----------------------------------------------------------------------
591 // Resize window to account for borders
592 //-----------------------------------------------------------------------
593 if (mFullscreen)
594 {
595 dw_ex_style = WS_EX_APPWINDOW;
596 dw_style = WS_POPUP;
597
598 // Move window borders out not to cover window contents
599 AdjustWindowRectEx(&window_rect, dw_style, FALSE, dw_ex_style);
600 }
601 else
602 {
603 // Window with an edge
604 dw_ex_style = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
605 dw_style = WS_OVERLAPPEDWINDOW;
606 }
607
608 //-----------------------------------------------------------------------
609 // Create the window
610 // Microsoft help indicates that GL windows must be created with
611 // WS_CLIPSIBLINGS and WS_CLIPCHILDREN, but not CS_PARENTDC
612 //-----------------------------------------------------------------------
613 mWindowHandle = CreateWindowEx(dw_ex_style,
614 mWindowClassName,
615 mWindowTitle,
616 WS_CLIPSIBLINGS | WS_CLIPCHILDREN | dw_style,
617 x, // x pos
618 y, // y pos
619 window_rect.right - window_rect.left, // width
620 window_rect.bottom - window_rect.top, // height
621 NULL,
622 NULL,
623 mhInstance,
624 NULL);
625
626 if (!mWindowHandle)
627 {
628 OSMessageBox("Window creation error", "Error", OSMB_OK);
629 return;
630 }
631
632 // TODO: add this after resolving _WIN32_WINNT issue 580 // TODO: add this after resolving _WIN32_WINNT issue
633 // if (!fullscreen) 581 // if (!fullscreen)
634 // { 582 // {
@@ -637,380 +585,21 @@ LLWindowWin32::LLWindowWin32(char *title, char *name, S32 x, S32 y, S32 width,
637 // track_mouse_event.dwFlags = TME_LEAVE; 585 // track_mouse_event.dwFlags = TME_LEAVE;
638 // track_mouse_event.hwndTrack = mWindowHandle; 586 // track_mouse_event.hwndTrack = mWindowHandle;
639 // track_mouse_event.dwHoverTime = HOVER_DEFAULT; 587 // track_mouse_event.dwHoverTime = HOVER_DEFAULT;
640 // TrackMouseEvent( &track_mouse_event ); 588 // TrackMouseEvent( &track_mouse_event );
641 // } 589 // }
642 590
643 591
644
645 S32 pfdflags = PFD_DRAW_TO_WINDOW | PFD_DOUBLEBUFFER;
646 if (use_gl)
647 {
648 pfdflags |= PFD_SUPPORT_OPENGL;
649 }
650
651 //----------------------------------------------------------------------- 592 //-----------------------------------------------------------------------
652 // Create GL drawing context 593 // Create GL drawing context
653 //----------------------------------------------------------------------- 594 //-----------------------------------------------------------------------
654 PIXELFORMATDESCRIPTOR pfd = 595 LLCoordScreen windowPos(x,y);
596 LLCoordScreen windowSize(window_rect.right - window_rect.left,
597 window_rect.bottom - window_rect.top);
598 if (!switchContext(mFullscreen, windowSize, TRUE, &windowPos))
655 { 599 {
656 sizeof(PIXELFORMATDESCRIPTOR),
657 1,
658 pfdflags,
659 PFD_TYPE_RGBA,
660 BITS_PER_PIXEL,
661 0, 0, 0, 0, 0, 0, // RGB bits and shift, unused
662 8, // alpha bits
663 0, // alpha shift
664 0, // accum bits
665 0, 0, 0, 0, // accum RGBA
666 24, // depth bits
667 8, // stencil bits, avi added for stencil test
668 0,
669 PFD_MAIN_PLANE,
670 0,
671 0, 0, 0
672 };
673
674 if (!(mhDC = GetDC(mWindowHandle)))
675 {
676 close();
677 OSMessageBox("Can't make GL device context", "Error", OSMB_OK);
678 return; 600 return;
679 } 601 }
680 602
681 if (!(pixel_format = ChoosePixelFormat(mhDC, &pfd)))
682 {
683 close();
684 OSMessageBox("Can't find suitable pixel format", "Error", OSMB_OK);
685 return;
686 }
687
688 // Verify what pixel format we actually received.
689 if (!DescribePixelFormat(mhDC, pixel_format, sizeof(PIXELFORMATDESCRIPTOR),
690 &pfd))
691 {
692 close();
693 OSMessageBox("Can't get pixel format description", "Error", OSMB_OK);
694 return;
695 }
696
697 // sanity check pfd returned by Windows
698 if (!ignore_pixel_depth && (pfd.cColorBits < 32))
699 {
700 close();
701 OSMessageBox(
702 "Second Life requires True Color (32-bit) to run in a window.\n"
703 "Please go to Control Panels -> Display -> Settings and\n"
704 "set the screen to 32-bit color.\n"
705 "Alternately, if you choose to run fullscreen, Second Life\n"
706 "will automatically adjust the screen each time it runs.",
707 "Error",
708 OSMB_OK);
709 return;
710 }
711
712 if (!ignore_pixel_depth && (pfd.cAlphaBits < 8))
713 {
714 close();
715 OSMessageBox(
716 "Second Life is unable to run because it can't get an 8 bit alpha\n"
717 "channel. Usually this is due to video card driver issues.\n"
718 "Please make sure you have the latest video card drivers installed.\n"
719 "Also be sure your monitor is set to True Color (32-bit) in\n"
720 "Control Panels -> Display -> Settings.\n"
721 "If you continue to receive this message, contact customer service.",
722 "Error",
723 OSMB_OK);
724 return;
725 }
726
727 if (!SetPixelFormat(mhDC, pixel_format, &pfd))
728 {
729 close();
730 OSMessageBox("Can't set pixel format", "Error", OSMB_OK);
731 return;
732 }
733
734 if (use_gl)
735 {
736 if (!(mhRC = wglCreateContext(mhDC)))
737 {
738 close();
739 OSMessageBox("Can't create GL rendering context", "Error", OSMB_OK);
740 return;
741 }
742
743 if (!wglMakeCurrent(mhDC, mhRC))
744 {
745 close();
746 OSMessageBox("Can't activate GL rendering context", "Error", OSMB_OK);
747 return;
748 }
749
750 gGLManager.initWGL();
751
752 if (gGLManager.mHasWGLARBPixelFormat && (wglChoosePixelFormatARB != NULL))
753 {
754 // OK, at this point, use the ARB wglChoosePixelFormatsARB function to see if we
755 // can get exactly what we want.
756 GLint attrib_list[256];
757 S32 cur_attrib = 0;
758
759 attrib_list[cur_attrib++] = WGL_DEPTH_BITS_ARB;
760 attrib_list[cur_attrib++] = 24;
761
762 attrib_list[cur_attrib++] = WGL_STENCIL_BITS_ARB;
763 attrib_list[cur_attrib++] = 8;
764
765 attrib_list[cur_attrib++] = WGL_DRAW_TO_WINDOW_ARB;
766 attrib_list[cur_attrib++] = GL_TRUE;
767
768 attrib_list[cur_attrib++] = WGL_ACCELERATION_ARB;
769 attrib_list[cur_attrib++] = WGL_FULL_ACCELERATION_ARB;
770
771 attrib_list[cur_attrib++] = WGL_SUPPORT_OPENGL_ARB;
772 attrib_list[cur_attrib++] = GL_TRUE;
773
774 attrib_list[cur_attrib++] = WGL_DOUBLE_BUFFER_ARB;
775 attrib_list[cur_attrib++] = GL_TRUE;
776
777 attrib_list[cur_attrib++] = WGL_COLOR_BITS_ARB;
778 attrib_list[cur_attrib++] = 32;
779
780 attrib_list[cur_attrib++] = WGL_RED_BITS_ARB;
781 attrib_list[cur_attrib++] = 8;
782
783 attrib_list[cur_attrib++] = WGL_GREEN_BITS_ARB;
784 attrib_list[cur_attrib++] = 8;
785
786 attrib_list[cur_attrib++] = WGL_BLUE_BITS_ARB;
787 attrib_list[cur_attrib++] = 8;
788
789 attrib_list[cur_attrib++] = WGL_ALPHA_BITS_ARB;
790 attrib_list[cur_attrib++] = 8;
791
792 // End the list
793 attrib_list[cur_attrib++] = 0;
794
795 GLint pixel_formats[256];
796 U32 num_formats = 0;
797
798 // First we try and get a 32 bit depth pixel format
799 BOOL result = wglChoosePixelFormatARB(mhDC, attrib_list, NULL, 256, pixel_formats, &num_formats);
800 if (!result)
801 {
802 close();
803 show_window_creation_error("Error after wglChoosePixelFormatARB 32-bit");
804 return;
805 }
806
807 if (!num_formats)
808 {
809 llinfos << "No 32 bit z-buffer, trying 24 bits instead" << llendl;
810 // Try 24-bit format
811 attrib_list[1] = 24;
812 BOOL result = wglChoosePixelFormatARB(mhDC, attrib_list, NULL, 256, pixel_formats, &num_formats);
813 if (!result)
814 {
815 close();
816 show_window_creation_error("Error after wglChoosePixelFormatARB 24-bit");
817 return;
818 }
819
820 if (!num_formats)
821 {
822 llwarns << "Couldn't get 24 bit z-buffer,trying 16 bits instead!" << llendl;
823 attrib_list[1] = 16;
824 BOOL result = wglChoosePixelFormatARB(mhDC, attrib_list, NULL, 256, pixel_formats, &num_formats);
825 if (!result || !num_formats)
826 {
827 close();
828 show_window_creation_error("Error after wglChoosePixelFormatARB 16-bit");
829 return;
830 }
831 }
832
833 llinfos << "Choosing pixel formats: " << num_formats << " pixel formats returned" << llendl;
834
835 pixel_format = pixel_formats[0];
836 }
837
838 DestroyWindow(mWindowHandle);
839
840 mWindowHandle = CreateWindowEx(dw_ex_style,
841 mWindowClassName,
842 mWindowTitle,
843 WS_CLIPSIBLINGS | WS_CLIPCHILDREN | dw_style,
844 x, // x pos
845 y, // y pos
846 window_rect.right - window_rect.left, // width
847 window_rect.bottom - window_rect.top, // height
848 NULL,
849 NULL,
850 mhInstance,
851 NULL);
852
853 if (!(mhDC = GetDC(mWindowHandle)))
854 {
855 close();
856 OSMessageBox("Can't make GL device context", "Error", OSMB_OK);
857 return;
858 }
859
860 if (!SetPixelFormat(mhDC, pixel_format, &pfd))
861 {
862 close();
863 OSMessageBox("Can't set pixel format", "Error", OSMB_OK);
864 return;
865 }
866
867 int swap_method = 0;
868 GLint swap_query = WGL_SWAP_METHOD_ARB;
869
870 if (wglGetPixelFormatAttribivARB(mhDC, pixel_format, 0, 1, &swap_query, &swap_method))
871 {
872 switch (swap_method)
873 {
874 case WGL_SWAP_EXCHANGE_ARB:
875 mSwapMethod = SWAP_METHOD_EXCHANGE;
876 llinfos << "Swap Method: Exchange" << llendl;
877 break;
878 case WGL_SWAP_COPY_ARB:
879 mSwapMethod = SWAP_METHOD_COPY;
880 llinfos << "Swap Method: Copy" << llendl;
881 break;
882 case WGL_SWAP_UNDEFINED_ARB:
883 mSwapMethod = SWAP_METHOD_UNDEFINED;
884 llinfos << "Swap Method: Undefined" << llendl;
885 break;
886 default:
887 mSwapMethod = SWAP_METHOD_UNDEFINED;
888 llinfos << "Swap Method: Unknown" << llendl;
889 break;
890 }
891 }
892 }
893 else
894 {
895 llwarns << "No wgl_ARB_pixel_format extension, using default ChoosePixelFormat!" << llendl;
896 }
897
898 // Verify what pixel format we actually received.
899 if (!DescribePixelFormat(mhDC, pixel_format, sizeof(PIXELFORMATDESCRIPTOR),
900 &pfd))
901 {
902 close();
903 OSMessageBox("Can't get pixel format description", "Error", OSMB_OK);
904 return;
905 }
906 llinfos << "GL buffer: Color Bits " << S32(pfd.cColorBits)
907 << " Alpha Bits " << S32(pfd.cAlphaBits)
908 << " Depth Bits " << S32(pfd.cDepthBits)
909 << llendl;
910
911 if (pfd.cColorBits < 32)
912 {
913 close();
914 OSMessageBox(
915 "Second Life requires True Color (32-bit) to run in a window.\n"
916 "Please go to Control Panels -> Display -> Settings and\n"
917 "set the screen to 32-bit color.\n"
918 "Alternately, if you choose to run fullscreen, Second Life\n"
919 "will automatically adjust the screen each time it runs.",
920 "Error",
921 OSMB_OK);
922 return;
923 }
924
925 if (pfd.cAlphaBits < 8)
926 {
927 close();
928 OSMessageBox(
929 "Second Life is unable to run because it can't get an 8 bit alpha\n"
930 "channel. Usually this is due to video card driver issues.\n"
931 "Please make sure you have the latest video card drivers installed.\n"
932 "Also be sure your monitor is set to True Color (32-bit) in\n"
933 "Control Panels -> Display -> Settings.\n"
934 "If you continue to receive this message, contact customer service.",
935 "Error",
936 OSMB_OK);
937 return;
938 }
939
940 if (!(mhRC = wglCreateContext(mhDC)))
941 {
942 close();
943 OSMessageBox("Can't create GL rendering context", "Error", OSMB_OK);
944 return;
945 }
946
947 if (!wglMakeCurrent(mhDC, mhRC))
948 {
949 close();
950 OSMessageBox("Can't activate GL rendering context", "Error", OSMB_OK);
951 return;
952 }
953
954 if (!gGLManager.initGL())
955 {
956 close();
957 OSMessageBox(
958 "Second Life is unable to run because your video card drivers\n"
959 "are out of date or unsupported. Please make sure you have\n"
960 "the latest video card drivers installed.\n\n"
961 "If you continue to receive this message, contact customer service.",
962 "Error",
963 OSMB_OK);
964 return;
965 }
966
967 // Disable vertical sync for swap
968 if (disable_vsync && wglSwapIntervalEXT)
969 {
970 llinfos << "Disabling vertical sync" << llendl;
971 wglSwapIntervalEXT(0);
972 }
973 else
974 {
975 llinfos << "Keeping vertical sync" << llendl;
976 }
977
978
979 // OK, let's get the current gamma information and store it off.
980 mCurrentGamma = 0.f; // Not set, default;
981 if (!GetDeviceGammaRamp(mhDC, mPrevGammaRamp))
982 {
983 llwarns << "Unable to get device gamma ramp" << llendl;
984 }
985
986 // Calculate what the current gamma is. From a posting by Garrett T. Bass, Get/SetDeviceGammaRamp Demystified
987 // http://apollo.iwt.uni-bielefeld.de/~ml_robot/OpenGL-04-2000/0058.html
988
989 // We're going to assume that gamma's the same for all 3 channels, because I don't feel like doing it otherwise.
990 // Using the red channel.
991
992 F32 Csum = 0.0;
993 S32 Ccount = 0;
994 for (i = 0; i < 256; i++)
995 {
996 if (i != 0 && mPrevGammaRamp[i] != 0 && mPrevGammaRamp[i] != 65536)
997 {
998 F64 B = (i % 256) / 256.0;
999 F64 A = mPrevGammaRamp[i] / 65536.0;
1000 F32 C = (F32) ( log(A) / log(B) );
1001 Csum += C;
1002 Ccount++;
1003 }
1004 }
1005 mCurrentGamma = Csum / Ccount;
1006
1007 llinfos << "Previous gamma: " << mCurrentGamma << llendl;
1008 }
1009
1010
1011 //store this pointer for wndProc callback
1012 SetWindowLong(mWindowHandle, GWL_USERDATA, (U32)this);
1013
1014 //start with arrow cursor 603 //start with arrow cursor
1015 initCursors(); 604 initCursors();
1016 setCursor( UI_CURSOR_ARROW ); 605 setCursor( UI_CURSOR_ARROW );
@@ -1019,40 +608,6 @@ LLWindowWin32::LLWindowWin32(char *title, char *name, S32 x, S32 y, S32 width,
1019 // based on the system's (or user's) default settings. 608 // based on the system's (or user's) default settings.
1020 allowLanguageTextInput(NULL, FALSE); 609 allowLanguageTextInput(NULL, FALSE);
1021 610
1022 initInputDevices();
1023}
1024
1025void LLWindowWin32::initInputDevices()
1026{
1027 // Direct Input
1028 HRESULT hr;
1029
1030 if( FAILED( hr = DirectInput8Create( GetModuleHandle(NULL), DIRECTINPUT_VERSION,
1031 IID_IDirectInput8, (VOID**)&g_pDI, NULL ) ) )
1032 {
1033 llwarns << "Direct8InputCreate failed!" << llendl;
1034 }
1035 else
1036 {
1037 while(1)
1038 {
1039 // Look for a simple joystick we can use for this sample program.
1040 if (FAILED( hr = g_pDI->EnumDevices( DI8DEVCLASS_GAMECTRL,
1041 EnumJoysticksCallback,
1042 NULL, DIEDFL_ATTACHEDONLY ) ) )
1043 break;
1044 if (!g_pJoystick)
1045 break;
1046 if( FAILED( hr = g_pJoystick->SetDataFormat( &c_dfDIJoystick ) ) )
1047 break;
1048 if( FAILED( hr = g_pJoystick->EnumObjects( EnumObjectsCallback,
1049 (VOID*)mWindowHandle, DIDFT_ALL ) ) )
1050 break;
1051 g_pJoystick->Acquire();
1052 break;
1053 }
1054 }
1055
1056 SetTimer( mWindowHandle, 0, 1000 / 30, NULL ); // 30 fps timer 611 SetTimer( mWindowHandle, 0, 1000 / 30, NULL ); // 30 fps timer
1057} 612}
1058 613
@@ -1149,7 +704,7 @@ void LLWindowWin32::close()
1149 } 704 }
1150 705
1151 llinfos << "Destroying Window" << llendl; 706 llinfos << "Destroying Window" << llendl;
1152 707
1153 // Don't process events in our mainWindowProc any longer. 708 // Don't process events in our mainWindowProc any longer.
1154 SetWindowLong(mWindowHandle, GWL_USERDATA, NULL); 709 SetWindowLong(mWindowHandle, GWL_USERDATA, NULL);
1155 710
@@ -1283,7 +838,7 @@ BOOL LLWindowWin32::setSize(const LLCoordScreen size)
1283} 838}
1284 839
1285// changing fullscreen resolution 840// changing fullscreen resolution
1286BOOL LLWindowWin32::switchContext(BOOL fullscreen, LLCoordScreen size, BOOL disable_vsync) 841BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp)
1287{ 842{
1288 GLuint pixel_format; 843 GLuint pixel_format;
1289 DEVMODE dev_mode; 844 DEVMODE dev_mode;
@@ -1360,7 +915,7 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, LLCoordScreen size, BOOL disa
1360 success = setDisplayResolution(width, height, BITS_PER_PIXEL, closest_refresh); 915 success = setDisplayResolution(width, height, BITS_PER_PIXEL, closest_refresh);
1361 } 916 }
1362 917
1363 // Keep a copy of the actual current device mode in case we minimize 918 // Keep a copy of the actual current device mode in case we minimize
1364 // and change the screen resolution. JC 919 // and change the screen resolution. JC
1365 EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dev_mode); 920 EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dev_mode);
1366 921
@@ -1405,10 +960,10 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, LLCoordScreen size, BOOL disa
1405 else 960 else
1406 { 961 {
1407 mFullscreen = FALSE; 962 mFullscreen = FALSE;
1408 window_rect.left = (long) 0; 963 window_rect.left = (long) (posp ? posp->mX : 0);
1409 window_rect.right = (long) width; // Windows GDI rects don't include rightmost pixel 964 window_rect.right = (long) width + window_rect.left; // Windows GDI rects don't include rightmost pixel
1410 window_rect.top = (long) 0; 965 window_rect.top = (long) (posp ? posp->mY : 0);
1411 window_rect.bottom = (long) height; 966 window_rect.bottom = (long) height + window_rect.top;
1412 // Window with an edge 967 // Window with an edge
1413 dw_ex_style = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE; 968 dw_ex_style = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
1414 dw_style = WS_OVERLAPPEDWINDOW; 969 dw_style = WS_OVERLAPPEDWINDOW;
@@ -1437,9 +992,9 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, LLCoordScreen size, BOOL disa
1437 //----------------------------------------------------------------------- 992 //-----------------------------------------------------------------------
1438 static PIXELFORMATDESCRIPTOR pfd = 993 static PIXELFORMATDESCRIPTOR pfd =
1439 { 994 {
1440 sizeof(PIXELFORMATDESCRIPTOR), 995 sizeof(PIXELFORMATDESCRIPTOR),
1441 1, 996 1,
1442 PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER, 997 PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,
1443 PFD_TYPE_RGBA, 998 PFD_TYPE_RGBA,
1444 BITS_PER_PIXEL, 999 BITS_PER_PIXEL,
1445 0, 0, 0, 0, 0, 0, // RGB bits and shift, unused 1000 0, 0, 0, 0, 0, 0, // RGB bits and shift, unused
@@ -1558,17 +1113,19 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, LLCoordScreen size, BOOL disa
1558 attrib_list[cur_attrib++] = WGL_COLOR_BITS_ARB; 1113 attrib_list[cur_attrib++] = WGL_COLOR_BITS_ARB;
1559 attrib_list[cur_attrib++] = 24; 1114 attrib_list[cur_attrib++] = 24;
1560 1115
1561 attrib_list[cur_attrib++] = WGL_RED_BITS_ARB; 1116 attrib_list[cur_attrib++] = WGL_ALPHA_BITS_ARB;
1562 attrib_list[cur_attrib++] = 8;
1563
1564 attrib_list[cur_attrib++] = WGL_GREEN_BITS_ARB;
1565 attrib_list[cur_attrib++] = 8; 1117 attrib_list[cur_attrib++] = 8;
1566 1118
1567 attrib_list[cur_attrib++] = WGL_BLUE_BITS_ARB; 1119 U32 end_attrib = 0;
1568 attrib_list[cur_attrib++] = 8; 1120 if (mFSAASamples > 0)
1121 {
1122 end_attrib = cur_attrib;
1123 attrib_list[cur_attrib++] = WGL_SAMPLE_BUFFERS_ARB;
1124 attrib_list[cur_attrib++] = GL_TRUE;
1569 1125
1570 attrib_list[cur_attrib++] = WGL_ALPHA_BITS_ARB; 1126 attrib_list[cur_attrib++] = WGL_SAMPLES_ARB;
1571 attrib_list[cur_attrib++] = 8; 1127 attrib_list[cur_attrib++] = mFSAASamples;
1128 }
1572 1129
1573 // End the list 1130 // End the list
1574 attrib_list[cur_attrib++] = 0; 1131 attrib_list[cur_attrib++] = 0;
@@ -1587,36 +1144,67 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, LLCoordScreen size, BOOL disa
1587 1144
1588 if (!num_formats) 1145 if (!num_formats)
1589 { 1146 {
1590 llinfos << "No 32 bit z-buffer, trying 24 bits instead" << llendl; 1147 if (end_attrib > 0)
1591 // Try 24-bit format
1592 attrib_list[1] = 24;
1593 BOOL result = wglChoosePixelFormatARB(mhDC, attrib_list, NULL, 256, pixel_formats, &num_formats);
1594 if (!result)
1595 { 1148 {
1596 close(); 1149 llinfos << "No valid pixel format for " << mFSAASamples << "x anti-aliasing." << llendl;
1597 show_window_creation_error("Error after wglChoosePixelFormatARB 24-bit"); 1150 attrib_list[end_attrib] = 0;
1598 return FALSE; 1151
1152 BOOL result = wglChoosePixelFormatARB(mhDC, attrib_list, NULL, 256, pixel_formats, &num_formats);
1153 if (!result)
1154 {
1155 close();
1156 show_window_creation_error("Error after wglChoosePixelFormatARB 32-bit no AA");
1157 return FALSE;
1158 }
1599 } 1159 }
1600 1160
1601 if (!num_formats) 1161 if (!num_formats)
1602 { 1162 {
1603 llwarns << "Couldn't get 24 bit z-buffer,trying 16 bits instead!" << llendl; 1163 llinfos << "No 32 bit z-buffer, trying 24 bits instead" << llendl;
1604 attrib_list[1] = 16; 1164 // Try 24-bit format
1165 attrib_list[1] = 24;
1605 BOOL result = wglChoosePixelFormatARB(mhDC, attrib_list, NULL, 256, pixel_formats, &num_formats); 1166 BOOL result = wglChoosePixelFormatARB(mhDC, attrib_list, NULL, 256, pixel_formats, &num_formats);
1606 if (!result || !num_formats) 1167 if (!result)
1607 { 1168 {
1608 close(); 1169 close();
1609 show_window_creation_error("Error after wglChoosePixelFormatARB 16-bit"); 1170 show_window_creation_error("Error after wglChoosePixelFormatARB 24-bit");
1610 return FALSE; 1171 return FALSE;
1611 } 1172 }
1173
1174 if (!num_formats)
1175 {
1176 llwarns << "Couldn't get 24 bit z-buffer,trying 16 bits instead!" << llendl;
1177 attrib_list[1] = 16;
1178 BOOL result = wglChoosePixelFormatARB(mhDC, attrib_list, NULL, 256, pixel_formats, &num_formats);
1179 if (!result || !num_formats)
1180 {
1181 close();
1182 show_window_creation_error("Error after wglChoosePixelFormatARB 16-bit");
1183 return FALSE;
1184 }
1185 }
1612 } 1186 }
1613 1187
1614 llinfos << "Choosing pixel formats: " << num_formats << " pixel formats returned" << llendl; 1188 llinfos << "Choosing pixel formats: " << num_formats << " pixel formats returned" << llendl;
1189 }
1190
1191 pixel_format = pixel_formats[0];
1615 1192
1616 pixel_format = pixel_formats[0]; 1193 if (mhDC != 0) // Does The Window Have A Device Context?
1194 {
1195 wglMakeCurrent(mhDC, 0); // Set The Current Active Rendering Context To Zero
1196 if (mhRC != 0) // Does The Window Have A Rendering Context?
1197 {
1198 wglDeleteContext (mhRC); // Release The Rendering Context
1199 mhRC = 0; // Zero The Rendering Context
1200
1201 }
1202 ReleaseDC (mWindowHandle, mhDC); // Release The Device Context
1203 mhDC = 0; // Zero The Device Context
1617 } 1204 }
1205 DestroyWindow (mWindowHandle); // Destroy The Window
1206
1618 1207
1619 DestroyWindow(mWindowHandle);
1620 mWindowHandle = CreateWindowEx(dw_ex_style, 1208 mWindowHandle = CreateWindowEx(dw_ex_style,
1621 mWindowClassName, 1209 mWindowClassName,
1622 mWindowTitle, 1210 mWindowTitle,
@@ -1668,7 +1256,7 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, LLCoordScreen size, BOOL disa
1668 llinfos << "Swap Method: Unknown" << llendl; 1256 llinfos << "Swap Method: Unknown" << llendl;
1669 break; 1257 break;
1670 } 1258 }
1671 } 1259 }
1672 } 1260 }
1673 else 1261 else
1674 { 1262 {
@@ -1684,12 +1272,13 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, LLCoordScreen size, BOOL disa
1684 return FALSE; 1272 return FALSE;
1685 } 1273 }
1686 1274
1687 llinfos << "GL buffer: Color Bits " << S32(pfd.cColorBits) 1275 llinfos << "GL buffer: Color Bits " << S32(pfd.cColorBits)
1688 << " Alpha Bits " << S32(pfd.cAlphaBits) 1276 << " Alpha Bits " << S32(pfd.cAlphaBits)
1689 << " Depth Bits " << S32(pfd.cDepthBits) 1277 << " Depth Bits " << S32(pfd.cDepthBits)
1690 << llendl; 1278 << llendl;
1691 1279
1692 if (pfd.cColorBits < 32) 1280 // make sure we have 32 bits per pixel
1281 if (pfd.cColorBits < 32 || GetDeviceCaps(mhDC, BITSPIXEL) < 32)
1693 { 1282 {
1694 close(); 1283 close();
1695 OSMessageBox( 1284 OSMessageBox(
@@ -1759,7 +1348,9 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, LLCoordScreen size, BOOL disa
1759 SetWindowLong(mWindowHandle, GWL_USERDATA, (U32)this); 1348 SetWindowLong(mWindowHandle, GWL_USERDATA, (U32)this);
1760 show(); 1349 show();
1761 1350
1762 initInputDevices(); 1351 //make sure multi sampling is disabled by default
1352 glDisable(GL_MULTISAMPLE_ARB);
1353
1763 1354
1764 // ok to post quit messages now 1355 // ok to post quit messages now
1765 mPostQuit = TRUE; 1356 mPostQuit = TRUE;
@@ -1884,10 +1475,10 @@ void LLWindowWin32::initCursors()
1884 mCursor[ UI_CURSOR_CROSS ] = LoadCursor(NULL, IDC_CROSS); 1475 mCursor[ UI_CURSOR_CROSS ] = LoadCursor(NULL, IDC_CROSS);
1885 mCursor[ UI_CURSOR_SIZENWSE ] = LoadCursor(NULL, IDC_SIZENWSE); 1476 mCursor[ UI_CURSOR_SIZENWSE ] = LoadCursor(NULL, IDC_SIZENWSE);
1886 mCursor[ UI_CURSOR_SIZENESW ] = LoadCursor(NULL, IDC_SIZENESW); 1477 mCursor[ UI_CURSOR_SIZENESW ] = LoadCursor(NULL, IDC_SIZENESW);
1887 mCursor[ UI_CURSOR_SIZEWE ] = LoadCursor(NULL, IDC_SIZEWE); 1478 mCursor[ UI_CURSOR_SIZEWE ] = LoadCursor(NULL, IDC_SIZEWE);
1888 mCursor[ UI_CURSOR_SIZENS ] = LoadCursor(NULL, IDC_SIZENS); 1479 mCursor[ UI_CURSOR_SIZENS ] = LoadCursor(NULL, IDC_SIZENS);
1889 mCursor[ UI_CURSOR_NO ] = LoadCursor(NULL, IDC_NO); 1480 mCursor[ UI_CURSOR_NO ] = LoadCursor(NULL, IDC_NO);
1890 mCursor[ UI_CURSOR_WORKING ] = LoadCursor(NULL, IDC_APPSTARTING); 1481 mCursor[ UI_CURSOR_WORKING ] = LoadCursor(NULL, IDC_APPSTARTING);
1891 1482
1892 HMODULE module = GetModuleHandle(NULL); 1483 HMODULE module = GetModuleHandle(NULL);
1893 mCursor[ UI_CURSOR_TOOLGRAB ] = LoadCursor(module, TEXT("TOOLGRAB")); 1484 mCursor[ UI_CURSOR_TOOLGRAB ] = LoadCursor(module, TEXT("TOOLGRAB"));
@@ -1902,7 +1493,7 @@ void LLWindowWin32::initCursors()
1902 mCursor[ UI_CURSOR_ARROWLOCKED ]= LoadCursor(module, TEXT("ARROWLOCKED")); 1493 mCursor[ UI_CURSOR_ARROWLOCKED ]= LoadCursor(module, TEXT("ARROWLOCKED"));
1903 mCursor[ UI_CURSOR_GRABLOCKED ] = LoadCursor(module, TEXT("GRABLOCKED")); 1494 mCursor[ UI_CURSOR_GRABLOCKED ] = LoadCursor(module, TEXT("GRABLOCKED"));
1904 mCursor[ UI_CURSOR_TOOLTRANSLATE ] = LoadCursor(module, TEXT("TOOLTRANSLATE")); 1495 mCursor[ UI_CURSOR_TOOLTRANSLATE ] = LoadCursor(module, TEXT("TOOLTRANSLATE"));
1905 mCursor[ UI_CURSOR_TOOLROTATE ] = LoadCursor(module, TEXT("TOOLROTATE")); 1496 mCursor[ UI_CURSOR_TOOLROTATE ] = LoadCursor(module, TEXT("TOOLROTATE"));
1906 mCursor[ UI_CURSOR_TOOLSCALE ] = LoadCursor(module, TEXT("TOOLSCALE")); 1497 mCursor[ UI_CURSOR_TOOLSCALE ] = LoadCursor(module, TEXT("TOOLSCALE"));
1907 mCursor[ UI_CURSOR_TOOLCAMERA ] = LoadCursor(module, TEXT("TOOLCAMERA")); 1498 mCursor[ UI_CURSOR_TOOLCAMERA ] = LoadCursor(module, TEXT("TOOLCAMERA"));
1908 mCursor[ UI_CURSOR_TOOLPAN ] = LoadCursor(module, TEXT("TOOLPAN")); 1499 mCursor[ UI_CURSOR_TOOLPAN ] = LoadCursor(module, TEXT("TOOLPAN"));
@@ -2051,7 +1642,22 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
2051 S32 update_height; 1642 S32 update_height;
2052 1643
2053 case WM_TIMER: 1644 case WM_TIMER:
2054 window_imp->updateJoystick( ); 1645 window_imp->mCallbacks->handleTimerEvent(window_imp);
1646 break;
1647
1648 case WM_DEVICECHANGE:
1649 if (gDebugWindowProc)
1650 {
1651 llinfos << " WM_DEVICECHANGE: wParam=" << w_param
1652 << "; lParam=" << l_param << llendl;
1653 }
1654 if (w_param == DBT_DEVNODES_CHANGED || w_param == DBT_DEVICEARRIVAL)
1655 {
1656 if (window_imp->mCallbacks->handleDeviceChange(window_imp))
1657 {
1658 return 0;
1659 }
1660 }
2055 break; 1661 break;
2056 1662
2057 case WM_PAINT: 1663 case WM_PAINT:
@@ -2103,7 +1709,7 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
2103 1709
2104 if (window_imp->mFullscreen) 1710 if (window_imp->mFullscreen)
2105 { 1711 {
2106 // When we run fullscreen, restoring or minimizing the app needs 1712 // When we run fullscreen, restoring or minimizing the app needs
2107 // to switch the screen resolution 1713 // to switch the screen resolution
2108 if (activating) 1714 if (activating)
2109 { 1715 {
@@ -2116,6 +1722,9 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
2116 window_imp->resetDisplayResolution(); 1722 window_imp->resetDisplayResolution();
2117 } 1723 }
2118 } 1724 }
1725
1726 window_imp->mCallbacks->handleActivateApp(window_imp, activating);
1727
2119 break; 1728 break;
2120 } 1729 }
2121 1730
@@ -2131,13 +1740,13 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
2131 window_imp->interruptLanguageTextInput(); 1740 window_imp->interruptLanguageTextInput();
2132 } 1741 }
2133 1742
2134 // JC - I'm not sure why, but if we don't report that we handled the 1743 // JC - I'm not sure why, but if we don't report that we handled the
2135 // WM_ACTIVATE message, the WM_ACTIVATEAPP messages don't work 1744 // WM_ACTIVATE message, the WM_ACTIVATEAPP messages don't work
2136 // properly when we run fullscreen. 1745 // properly when we run fullscreen.
2137 if (gDebugWindowProc) 1746 if (gDebugWindowProc)
2138 { 1747 {
2139 llinfos << "WINDOWPROC Activate " 1748 llinfos << "WINDOWPROC Activate "
2140 << " activating " << S32(activating) 1749 << " activating " << S32(activating)
2141 << " minimized " << S32(minimized) 1750 << " minimized " << S32(minimized)
2142 << llendl; 1751 << llendl;
2143 } 1752 }
@@ -2153,9 +1762,9 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
2153 case WM_SYSCOMMAND: 1762 case WM_SYSCOMMAND:
2154 switch(w_param) 1763 switch(w_param)
2155 { 1764 {
2156 case SC_KEYMENU: 1765 case SC_KEYMENU:
2157 // Disallow the ALT key from triggering the default system menu. 1766 // Disallow the ALT key from triggering the default system menu.
2158 return 0; 1767 return 0;
2159 1768
2160 case SC_SCREENSAVE: 1769 case SC_SCREENSAVE:
2161 case SC_MONITORPOWER: 1770 case SC_MONITORPOWER:
@@ -2196,7 +1805,7 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
2196 if (gDebugWindowProc) 1805 if (gDebugWindowProc)
2197 { 1806 {
2198 llinfos << "Debug WindowProc WM_KEYDOWN " 1807 llinfos << "Debug WindowProc WM_KEYDOWN "
2199 << " key " << S32(w_param) 1808 << " key " << S32(w_param)
2200 << llendl; 1809 << llendl;
2201 } 1810 }
2202 if(gKeyboard->handleKeyDown(w_param, mask) && eat_keystroke) 1811 if(gKeyboard->handleKeyDown(w_param, mask) && eat_keystroke)
@@ -2215,7 +1824,7 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
2215 if (gDebugWindowProc) 1824 if (gDebugWindowProc)
2216 { 1825 {
2217 llinfos << "Debug WindowProc WM_KEYUP " 1826 llinfos << "Debug WindowProc WM_KEYUP "
2218 << " key " << S32(w_param) 1827 << " key " << S32(w_param)
2219 << llendl; 1828 << llendl;
2220 } 1829 }
2221 if (gKeyboard->handleKeyUp(w_param, mask) && eat_keystroke) 1830 if (gKeyboard->handleKeyUp(w_param, mask) && eat_keystroke)
@@ -2284,7 +1893,7 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
2284 if (gDebugWindowProc) 1893 if (gDebugWindowProc)
2285 { 1894 {
2286 llinfos << "Debug WindowProc WM_CHAR " 1895 llinfos << "Debug WindowProc WM_CHAR "
2287 << " key " << S32(w_param) 1896 << " key " << S32(w_param)
2288 << llendl; 1897 << llendl;
2289 } 1898 }
2290 // Even if LLWindowCallbacks::handleUnicodeChar(llwchar, BOOL) returned FALSE, 1899 // Even if LLWindowCallbacks::handleUnicodeChar(llwchar, BOOL) returned FALSE,
@@ -2527,7 +2136,7 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
2527 // track_mouse_event.dwFlags = TME_LEAVE; 2136 // track_mouse_event.dwFlags = TME_LEAVE;
2528 // track_mouse_event.hwndTrack = h_wnd; 2137 // track_mouse_event.hwndTrack = h_wnd;
2529 // track_mouse_event.dwHoverTime = HOVER_DEFAULT; 2138 // track_mouse_event.dwHoverTime = HOVER_DEFAULT;
2530 // TrackMouseEvent( &track_mouse_event ); 2139 // TrackMouseEvent( &track_mouse_event );
2531 return 0; 2140 return 0;
2532 } 2141 }
2533 */ 2142 */
@@ -2559,12 +2168,12 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
2559 << llendl; 2168 << llendl;
2560 } 2169 }
2561 2170
2562 // There's an odd behavior with WM_SIZE that I would call a bug. If 2171 // There's an odd behavior with WM_SIZE that I would call a bug. If
2563 // the window is maximized, and you call MoveWindow() with a size smaller 2172 // the window is maximized, and you call MoveWindow() with a size smaller
2564 // than a maximized window, it ends up sending WM_SIZE with w_param set 2173 // than a maximized window, it ends up sending WM_SIZE with w_param set
2565 // to SIZE_MAXIMIZED -- which isn't true. So the logic below doesn't work. 2174 // to SIZE_MAXIMIZED -- which isn't true. So the logic below doesn't work.
2566 // (SL-44655). Fixed it by calling ShowWindow(SW_RESTORE) first (see 2175 // (SL-44655). Fixed it by calling ShowWindow(SW_RESTORE) first (see
2567 // LLWindowWin32::moveWindow in this file). 2176 // LLWindowWin32::moveWindow in this file).
2568 2177
2569 // If we are now restored, but we weren't before, this 2178 // If we are now restored, but we weren't before, this
2570 // means that the window was un-minimized. 2179 // means that the window was un-minimized.
@@ -2589,8 +2198,8 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
2589 if (w_param != SIZE_MINIMIZED) 2198 if (w_param != SIZE_MINIMIZED)
2590 { 2199 {
2591 // Ignore updates for minimizing and minimized "windows" 2200 // Ignore updates for minimizing and minimized "windows"
2592 window_imp->mCallbacks->handleResize( window_imp, 2201 window_imp->mCallbacks->handleResize( window_imp,
2593 LOWORD(l_param), 2202 LOWORD(l_param),
2594 HIWORD(l_param) ); 2203 HIWORD(l_param) );
2595 } 2204 }
2596 2205
@@ -2619,7 +2228,7 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
2619 // received a URL 2228 // received a URL
2620 PCOPYDATASTRUCT myCDS = (PCOPYDATASTRUCT) l_param; 2229 PCOPYDATASTRUCT myCDS = (PCOPYDATASTRUCT) l_param;
2621 window_imp->mCallbacks->handleDataCopy(window_imp, myCDS->dwData, myCDS->lpData); 2230 window_imp->mCallbacks->handleDataCopy(window_imp, myCDS->dwData, myCDS->lpData);
2622 return 0; 2231 return 0;
2623 } 2232 }
2624 } 2233 }
2625 2234
@@ -2667,7 +2276,7 @@ BOOL LLWindowWin32::convertCoords(LLCoordWindow from, LLCoordGL* to)
2667} 2276}
2668 2277
2669BOOL LLWindowWin32::convertCoords(LLCoordScreen from, LLCoordWindow* to) 2278BOOL LLWindowWin32::convertCoords(LLCoordScreen from, LLCoordWindow* to)
2670{ 2279{
2671 POINT mouse_point; 2280 POINT mouse_point;
2672 2281
2673 mouse_point.x = from.mX; 2282 mouse_point.x = from.mX;
@@ -2778,7 +2387,7 @@ BOOL LLWindowWin32::copyTextToClipboard(const LLWString& wstr)
2778 const size_t size_utf16 = (out_utf16.length() + 1) * sizeof(WCHAR); 2387 const size_t size_utf16 = (out_utf16.length() + 1) * sizeof(WCHAR);
2779 2388
2780 // Memory is allocated and then ownership of it is transfered to the system. 2389 // Memory is allocated and then ownership of it is transfered to the system.
2781 HGLOBAL hglobal_copy_utf16 = GlobalAlloc(GMEM_MOVEABLE, size_utf16); 2390 HGLOBAL hglobal_copy_utf16 = GlobalAlloc(GMEM_MOVEABLE, size_utf16);
2782 if (hglobal_copy_utf16) 2391 if (hglobal_copy_utf16)
2783 { 2392 {
2784 WCHAR* copy_utf16 = (WCHAR*) GlobalLock(hglobal_copy_utf16); 2393 WCHAR* copy_utf16 = (WCHAR*) GlobalLock(hglobal_copy_utf16);
@@ -2841,12 +2450,12 @@ BOOL LLWindowWin32::getClientRectInScreenSpace( RECT* rectp )
2841 POINT top_left; 2450 POINT top_left;
2842 top_left.x = client_rect.left; 2451 top_left.x = client_rect.left;
2843 top_left.y = client_rect.top; 2452 top_left.y = client_rect.top;
2844 ClientToScreen(mWindowHandle, &top_left); 2453 ClientToScreen(mWindowHandle, &top_left);
2845 2454
2846 POINT bottom_right; 2455 POINT bottom_right;
2847 bottom_right.x = client_rect.right; 2456 bottom_right.x = client_rect.right;
2848 bottom_right.y = client_rect.bottom; 2457 bottom_right.y = client_rect.bottom;
2849 ClientToScreen(mWindowHandle, &bottom_right); 2458 ClientToScreen(mWindowHandle, &bottom_right);
2850 2459
2851 SetRect( rectp, 2460 SetRect( rectp,
2852 top_left.x, 2461 top_left.x,
@@ -2977,14 +2586,24 @@ BOOL LLWindowWin32::setGamma(const F32 gamma)
2977 if ( value > 0xffff ) 2586 if ( value > 0xffff )
2978 value = 0xffff; 2587 value = 0xffff;
2979 2588
2980 mCurrentGammaRamp [ 0 * 256 + i ] = 2589 mCurrentGammaRamp [ 0 * 256 + i ] =
2981 mCurrentGammaRamp [ 1 * 256 + i ] = 2590 mCurrentGammaRamp [ 1 * 256 + i ] =
2982 mCurrentGammaRamp [ 2 * 256 + i ] = ( WORD )value; 2591 mCurrentGammaRamp [ 2 * 256 + i ] = ( WORD )value;
2983 }; 2592 };
2984 2593
2985 return SetDeviceGammaRamp ( mhDC, mCurrentGammaRamp ); 2594 return SetDeviceGammaRamp ( mhDC, mCurrentGammaRamp );
2986} 2595}
2987 2596
2597void LLWindowWin32::setFSAASamples(const U32 fsaa_samples)
2598{
2599 mFSAASamples = fsaa_samples;
2600}
2601
2602U32 LLWindowWin32::getFSAASamples()
2603{
2604 return mFSAASamples;
2605}
2606
2988LLWindow::LLWindowResolution* LLWindowWin32::getSupportedResolutions(S32 &num_resolutions) 2607LLWindow::LLWindowResolution* LLWindowWin32::getSupportedResolutions(S32 &num_resolutions)
2989{ 2608{
2990 if (!mSupportedResolutions) 2609 if (!mSupportedResolutions)
@@ -3142,81 +2761,6 @@ void LLWindowWin32::swapBuffers()
3142} 2761}
3143 2762
3144 2763
3145BOOL CALLBACK EnumJoysticksCallback( const DIDEVICEINSTANCE* pdidInstance,
3146 VOID* pContext )
3147{
3148 HRESULT hr;
3149
3150 // Obtain an interface to the enumerated joystick.
3151 hr = g_pDI->CreateDevice( pdidInstance->guidInstance, &g_pJoystick, NULL );
3152
3153 // If it failed, then we can't use this joystick. (Maybe the user unplugged
3154 // it while we were in the middle of enumerating it.)
3155 if( FAILED(hr) )
3156 return DIENUM_CONTINUE;
3157
3158 // Stop enumeration. Note: we're just taking the first joystick we get. You
3159 // could store all the enumerated joysticks and let the user pick.
3160 return DIENUM_STOP;
3161}
3162
3163BOOL CALLBACK EnumObjectsCallback( const DIDEVICEOBJECTINSTANCE* pdidoi,
3164 VOID* pContext )
3165{
3166 if( pdidoi->dwType & DIDFT_AXIS )
3167 {
3168 DIPROPRANGE diprg;
3169 diprg.diph.dwSize = sizeof(DIPROPRANGE);
3170 diprg.diph.dwHeaderSize = sizeof(DIPROPHEADER);
3171 diprg.diph.dwHow = DIPH_BYID;
3172 diprg.diph.dwObj = pdidoi->dwType; // Specify the enumerated axis
3173 diprg.lMin = -1000;
3174 diprg.lMax = +1000;
3175
3176 // Set the range for the axis
3177 if( FAILED( g_pJoystick->SetProperty( DIPROP_RANGE, &diprg.diph ) ) )
3178 return DIENUM_STOP;
3179
3180 }
3181 return DIENUM_CONTINUE;
3182}
3183
3184void LLWindowWin32::updateJoystick( )
3185{
3186 HRESULT hr;
3187 DIJOYSTATE js; // DInput joystick state
3188
3189 if (!g_pJoystick)
3190 return;
3191 hr = g_pJoystick->Poll();
3192 if ( hr == DIERR_INPUTLOST )
3193 {
3194 hr = g_pJoystick->Acquire();
3195 return;
3196 }
3197 else if ( FAILED(hr) )
3198 return;
3199
3200 // Get the input's device state
3201 if( FAILED( hr = g_pJoystick->GetDeviceState( sizeof(DIJOYSTATE), &js ) ) )
3202 return; // The device should have been acquired during the Poll()
3203
3204 mJoyAxis[0] = js.lX/1000.f;
3205 mJoyAxis[1] = js.lY/1000.f;
3206 mJoyAxis[2] = js.lZ/1000.f;
3207 mJoyAxis[3] = js.lRx/1000.f;
3208 mJoyAxis[4] = js.lRy/1000.f;
3209 mJoyAxis[5] = js.lRz/1000.f;
3210 mJoyAxis[6] = js.rglSlider[0]/1000.f;
3211 mJoyAxis[7] = js.rglSlider[1]/1000.f;
3212
3213 for (U32 i = 0; i < 16; i++)
3214 {
3215 mJoyButtonState[i] = js.rgbButtons[i];
3216 }
3217}
3218
3219
3220// 2764//
3221// LLSplashScreenImp 2765// LLSplashScreenImp
3222// 2766//
@@ -3234,10 +2778,10 @@ void LLSplashScreenWin32::showImpl()
3234 // This appears to work. ??? 2778 // This appears to work. ???
3235 HINSTANCE hinst = GetModuleHandle(NULL); 2779 HINSTANCE hinst = GetModuleHandle(NULL);
3236 2780
3237 mWindow = CreateDialog(hinst, 2781 mWindow = CreateDialog(hinst,
3238 TEXT("SPLASHSCREEN"), 2782 TEXT("SPLASHSCREEN"),
3239 NULL, // no parent 2783 NULL, // no parent
3240 (DLGPROC) LLSplashScreenWin32::windowProc); 2784 (DLGPROC) LLSplashScreenWin32::windowProc);
3241 ShowWindow(mWindow, SW_SHOW); 2785 ShowWindow(mWindow, SW_SHOW);
3242} 2786}
3243 2787
@@ -3262,7 +2806,7 @@ void LLSplashScreenWin32::hideImpl()
3262 if (mWindow) 2806 if (mWindow)
3263 { 2807 {
3264 DestroyWindow(mWindow); 2808 DestroyWindow(mWindow);
3265 mWindow = NULL; 2809 mWindow = NULL;
3266 } 2810 }
3267} 2811}
3268 2812
@@ -3364,77 +2908,79 @@ void spawn_web_browser(const char* escaped_url )
3364 sei.lpFile = url_utf16.c_str(); 2908 sei.lpFile = url_utf16.c_str();
3365 ShellExecuteEx( &sei ); 2909 ShellExecuteEx( &sei );
3366 2910
3367 ////// TODO: LEAVING OLD CODE HERE SO I DON'T BONE OTHER MERGES 2911 //// TODO: LEAVING OLD CODE HERE SO I DON'T BONE OTHER MERGES
3368 ////// DELETE THIS ONCE THE MERGES ARE DONE 2912 //// DELETE THIS ONCE THE MERGES ARE DONE
3369 2913
3370 //// Figure out the user's default web browser 2914 // Figure out the user's default web browser
3371 //// HKEY_CLASSES_ROOT\http\shell\open\command 2915 // HKEY_CLASSES_ROOT\http\shell\open\command
3372 //char reg_path_str[256]; /* Flawfinder: ignore */ 2916 /*
3373 //snprintf(reg_path_str, sizeof(reg_path_str), "%s\\shell\\open\\command", gURLProtocolWhitelistHandler[i]); /* Flawfinder: ignore */ 2917 char reg_path_str[256]; // Flawfinder: ignore
3374 //WCHAR reg_path_wstr[256]; 2918 snprintf(reg_path_str, sizeof(reg_path_str), "%s\\shell\\open\\command", gURLProtocolWhitelistHandler[i]); // Flawfinder: ignore
3375 //mbstowcs(reg_path_wstr, reg_path_str, sizeof(reg_path_wstr)/sizeof(reg_path_wstr[0])); 2919 WCHAR reg_path_wstr[256];
3376 2920 mbstowcs(reg_path_wstr, reg_path_str, sizeof(reg_path_wstr)/sizeof(reg_path_wstr[0]));
3377 //HKEY key; 2921
3378 //WCHAR browser_open_wstr[1024]; 2922 HKEY key;
3379 //DWORD buffer_length = 1024; 2923 WCHAR browser_open_wstr[1024];
3380 //RegOpenKeyEx(HKEY_CLASSES_ROOT, reg_path_wstr, 0, KEY_QUERY_VALUE, &key); 2924 DWORD buffer_length = 1024;
3381 //RegQueryValueEx(key, NULL, NULL, NULL, (LPBYTE)browser_open_wstr, &buffer_length); 2925 RegOpenKeyEx(HKEY_CLASSES_ROOT, reg_path_wstr, 0, KEY_QUERY_VALUE, &key);
3382 //RegCloseKey(key); 2926 RegQueryValueEx(key, NULL, NULL, NULL, (LPBYTE)browser_open_wstr, &buffer_length);
3383 2927 RegCloseKey(key);
3384 //// Convert to STL string 2928
3385 //LLWString browser_open_wstring = utf16str_to_wstring(browser_open_wstr); 2929 // Convert to STL string
3386 2930 LLWString browser_open_wstring = utf16str_to_wstring(browser_open_wstr);
3387 //if (browser_open_wstring.length() < 2) 2931
3388 //{ 2932 if (browser_open_wstring.length() < 2)
3389 // llwarns << "Invalid browser executable in registry " << browser_open_wstring << llendl; 2933 {
3390 // return; 2934 llwarns << "Invalid browser executable in registry " << browser_open_wstring << llendl;
3391 //} 2935 return;
3392 2936 }
3393 //// Extract the process that's supposed to be launched 2937
3394 //LLWString browser_executable; 2938 // Extract the process that's supposed to be launched
3395 //if (browser_open_wstring[0] == '"') 2939 LLWString browser_executable;
3396 //{ 2940 if (browser_open_wstring[0] == '"')
3397 // // executable is quoted, find the matching quote 2941 {
3398 // size_t quote_pos = browser_open_wstring.find('"', 1); 2942 // executable is quoted, find the matching quote
3399 // // copy out the string including both quotes 2943 size_t quote_pos = browser_open_wstring.find('"', 1);
3400 // browser_executable = browser_open_wstring.substr(0, quote_pos+1); 2944 // copy out the string including both quotes
3401 //} 2945 browser_executable = browser_open_wstring.substr(0, quote_pos+1);
3402 //else 2946 }
3403 //{ 2947 else
3404 // // executable not quoted, find a space 2948 {
3405 // size_t space_pos = browser_open_wstring.find(' ', 1); 2949 // executable not quoted, find a space
3406 // browser_executable = browser_open_wstring.substr(0, space_pos); 2950 size_t space_pos = browser_open_wstring.find(' ', 1);
3407 //} 2951 browser_executable = browser_open_wstring.substr(0, space_pos);
3408 2952 }
3409 //llinfos << "Browser reg key: " << wstring_to_utf8str(browser_open_wstring) << llendl; 2953
3410 //llinfos << "Browser executable: " << wstring_to_utf8str(browser_executable) << llendl; 2954 llinfos << "Browser reg key: " << wstring_to_utf8str(browser_open_wstring) << llendl;
3411 2955 llinfos << "Browser executable: " << wstring_to_utf8str(browser_executable) << llendl;
3412 //// Convert URL to wide string for Windows API 2956
3413 //// Assume URL is UTF8, as can come from scripts 2957 // Convert URL to wide string for Windows API
3414 //LLWString url_wstring = utf8str_to_wstring(escaped_url); 2958 // Assume URL is UTF8, as can come from scripts
3415 //llutf16string url_utf16 = wstring_to_utf16str(url_wstring); 2959 LLWString url_wstring = utf8str_to_wstring(escaped_url);
3416 2960 llutf16string url_utf16 = wstring_to_utf16str(url_wstring);
3417 //// Convert executable and path to wide string for Windows API 2961
3418 //llutf16string browser_exec_utf16 = wstring_to_utf16str(browser_executable); 2962 // Convert executable and path to wide string for Windows API
3419 2963 llutf16string browser_exec_utf16 = wstring_to_utf16str(browser_executable);
3420 //// ShellExecute returns HINSTANCE for backwards compatiblity. 2964
3421 //// MS docs say to cast to int and compare to 32. 2965 // ShellExecute returns HINSTANCE for backwards compatiblity.
3422 //HWND our_window = NULL; 2966 // MS docs say to cast to int and compare to 32.
3423 //LPCWSTR directory_wstr = NULL; 2967 HWND our_window = NULL;
3424 //int retval = (int) ShellExecute(our_window, /* Flawfinder: ignore */ 2968 LPCWSTR directory_wstr = NULL;
3425 // L"open", 2969 int retval = (int) ShellExecute(our_window, // Flawfinder: ignore
3426 // browser_exec_utf16.c_str(), 2970 L"open",
3427 // url_utf16.c_str(), 2971 browser_exec_utf16.c_str(),
3428 // directory_wstr, 2972 url_utf16.c_str(),
3429 // SW_SHOWNORMAL); 2973 directory_wstr,
3430 //if (retval > 32) 2974 SW_SHOWNORMAL);
3431 //{ 2975 if (retval > 32)
3432 // llinfos << "load_url success with " << retval << llendl; 2976 {
3433 //} 2977 llinfos << "load_url success with " << retval << llendl;
3434 //else 2978 }
3435 //{ 2979 else
3436 // llinfos << "load_url failure with " << retval << llendl; 2980 {
3437 //} 2981 llinfos << "load_url failure with " << retval << llendl;
2982 }
2983 */
3438} 2984}
3439 2985
3440 2986
@@ -3448,13 +2994,13 @@ BOOL LLWindowWin32::dialog_color_picker ( F32 *r, F32 *g, F32 *b )
3448 cc.hwndOwner = mWindowHandle; 2994 cc.hwndOwner = mWindowHandle;
3449 cc.hInstance = NULL; 2995 cc.hInstance = NULL;
3450 cc.rgbResult = RGB ((*r * 255.f),(*g *255.f),(*b * 255.f)); 2996 cc.rgbResult = RGB ((*r * 255.f),(*g *255.f),(*b * 255.f));
3451 //cc.rgbResult = RGB (0x80,0x80,0x80); 2997 //cc.rgbResult = RGB (0x80,0x80,0x80);
3452 cc.lpCustColors = crCustColors; 2998 cc.lpCustColors = crCustColors;
3453 cc.Flags = CC_RGBINIT | CC_FULLOPEN; 2999 cc.Flags = CC_RGBINIT | CC_FULLOPEN;
3454 cc.lCustData = 0; 3000 cc.lCustData = 0;
3455 cc.lpfnHook = NULL; 3001 cc.lpfnHook = NULL;
3456 cc.lpTemplateName = NULL; 3002 cc.lpTemplateName = NULL;
3457 3003
3458 // This call is modal, so pause agent 3004 // This call is modal, so pause agent
3459 //send_agent_pause(); // this is in newview and we don't want to set up a dependency 3005 //send_agent_pause(); // this is in newview and we don't want to set up a dependency
3460 { 3006 {
@@ -3465,7 +3011,7 @@ BOOL LLWindowWin32::dialog_color_picker ( F32 *r, F32 *g, F32 *b )
3465 *b = ((F32)((cc.rgbResult >> 16) & 0xff)) / 255.f; 3011 *b = ((F32)((cc.rgbResult >> 16) & 0xff)) / 255.f;
3466 3012
3467 *g = ((F32)((cc.rgbResult >> 8) & 0xff)) / 255.f; 3013 *g = ((F32)((cc.rgbResult >> 8) & 0xff)) / 255.f;
3468 3014
3469 *r = ((F32)(cc.rgbResult & 0xff)) / 255.f; 3015 *r = ((F32)(cc.rgbResult & 0xff)) / 255.f;
3470 3016
3471 return (retval); 3017 return (retval);
@@ -3519,8 +3065,8 @@ void LLWindowWin32::allowLanguageTextInput(LLPreeditor *preeditor, BOOL b)
3519 3065
3520 if ( sLanguageTextInputAllowed ) 3066 if ( sLanguageTextInputAllowed )
3521 { 3067 {
3522 // Allowing: Restore the previous IME status, so that the user has a feeling that the previous 3068 // Allowing: Restore the previous IME status, so that the user has a feeling that the previous
3523 // text input continues naturally. Be careful, however, the IME status is meaningful only during the user keeps 3069 // text input continues naturally. Be careful, however, the IME status is meaningful only during the user keeps
3524 // using same Input Locale (aka Keyboard Layout). 3070 // using same Input Locale (aka Keyboard Layout).
3525 if (sWinIMEOpened && GetKeyboardLayout(0) == sWinInputLocale) 3071 if (sWinIMEOpened && GetKeyboardLayout(0) == sWinInputLocale)
3526 { 3072 {
@@ -3545,7 +3091,7 @@ void LLWindowWin32::allowLanguageTextInput(LLPreeditor *preeditor, BOOL b)
3545 { 3091 {
3546 LLWinImm::getConversionStatus(himc, &sWinIMEConversionMode, &sWinIMESentenceMode); 3092 LLWinImm::getConversionStatus(himc, &sWinIMEConversionMode, &sWinIMESentenceMode);
3547 3093
3548 // We need both ImmSetConversionStatus and ImmSetOpenStatus here to surely disable IME's 3094 // We need both ImmSetConversionStatus and ImmSetOpenStatus here to surely disable IME's
3549 // keyboard hooking, because Some IME reacts only on the former and some other on the latter... 3095 // keyboard hooking, because Some IME reacts only on the former and some other on the latter...
3550 LLWinImm::setConversionStatus(himc, IME_CMODE_NOCONVERSION, sWinIMESentenceMode); 3096 LLWinImm::setConversionStatus(himc, IME_CMODE_NOCONVERSION, sWinIMESentenceMode);
3551 LLWinImm::setOpenStatus(himc, FALSE); 3097 LLWinImm::setOpenStatus(himc, FALSE);
@@ -3555,7 +3101,7 @@ void LLWindowWin32::allowLanguageTextInput(LLPreeditor *preeditor, BOOL b)
3555 } 3101 }
3556} 3102}
3557 3103
3558void LLWindowWin32::fillCandidateForm(const LLCoordGL& caret, const LLRect& bounds, 3104void LLWindowWin32::fillCandidateForm(const LLCoordGL& caret, const LLRect& bounds,
3559 CANDIDATEFORM *form) 3105 CANDIDATEFORM *form)
3560{ 3106{
3561 LLCoordWindow caret_coord, top_left, bottom_right; 3107 LLCoordWindow caret_coord, top_left, bottom_right;
@@ -3584,7 +3130,7 @@ void LLWindowWin32::setLanguageTextInput( const LLCoordGL & position )
3584 LLCoordWindow win_pos; 3130 LLCoordWindow win_pos;
3585 convertCoords( position, &win_pos ); 3131 convertCoords( position, &win_pos );
3586 3132
3587 if ( win_pos.mX >= 0 && win_pos.mY >= 0 && 3133 if ( win_pos.mX >= 0 && win_pos.mY >= 0 &&
3588 (win_pos.mX != sWinIMEWindowPosition.mX) || (win_pos.mY != sWinIMEWindowPosition.mY) ) 3134 (win_pos.mX != sWinIMEWindowPosition.mX) || (win_pos.mY != sWinIMEWindowPosition.mY) )
3589 { 3135 {
3590 COMPOSITIONFORM ime_form; 3136 COMPOSITIONFORM ime_form;
@@ -3649,13 +3195,13 @@ void LLWindowWin32::fillCompositionLogfont(LOGFONT *logfont)
3649 default: 3195 default:
3650 logfont->lfCharSet = CHINESEBIG5_CHARSET; 3196 logfont->lfCharSet = CHINESEBIG5_CHARSET;
3651 lstrcpy(logfont->lfFaceName, TEXT("MingLiU")); 3197 lstrcpy(logfont->lfFaceName, TEXT("MingLiU"));
3652 break; 3198 break;
3653 } 3199 }
3654 break; 3200 break;
3655 case LANG_JAPANESE: 3201 case LANG_JAPANESE:
3656 logfont->lfCharSet = SHIFTJIS_CHARSET; 3202 logfont->lfCharSet = SHIFTJIS_CHARSET;
3657 lstrcpy(logfont->lfFaceName, TEXT("MS Gothic")); 3203 lstrcpy(logfont->lfFaceName, TEXT("MS Gothic"));
3658 break; 3204 break;
3659 case LANG_KOREAN: 3205 case LANG_KOREAN:
3660 logfont->lfCharSet = HANGUL_CHARSET; 3206 logfont->lfCharSet = HANGUL_CHARSET;
3661 lstrcpy(logfont->lfFaceName, TEXT("Gulim")); 3207 lstrcpy(logfont->lfFaceName, TEXT("Gulim"));
@@ -3665,10 +3211,10 @@ void LLWindowWin32::fillCompositionLogfont(LOGFONT *logfont)
3665 lstrcpy(logfont->lfFaceName, TEXT("Tahoma")); 3211 lstrcpy(logfont->lfFaceName, TEXT("Tahoma"));
3666 break; 3212 break;
3667 } 3213 }
3668 3214
3669 logfont->lfHeight = mPreeditor->getPreeditFontSize(); 3215 logfont->lfHeight = mPreeditor->getPreeditFontSize();
3670 logfont->lfWeight = FW_NORMAL; 3216 logfont->lfWeight = FW_NORMAL;
3671} 3217}
3672 3218
3673U32 LLWindowWin32::fillReconvertString(const LLWString &text, 3219U32 LLWindowWin32::fillReconvertString(const LLWString &text,
3674 S32 focus, S32 focus_length, RECONVERTSTRING *reconvert_string) 3220 S32 focus, S32 focus_length, RECONVERTSTRING *reconvert_string)
@@ -3782,7 +3328,7 @@ void LLWindowWin32::handleCompositionMessage(const U32 indexes)
3782 needs_update = TRUE; 3328 needs_update = TRUE;
3783 } 3329 }
3784 } 3330 }
3785 3331
3786 if (indexes & GCS_COMPSTR) 3332 if (indexes & GCS_COMPSTR)
3787 { 3333 {
3788 LONG size = LLWinImm::getCompositionString(himc, GCS_COMPSTR, NULL, 0); 3334 LONG size = LLWinImm::getCompositionString(himc, GCS_COMPSTR, NULL, 0);
@@ -3877,7 +3423,7 @@ void LLWindowWin32::handleCompositionMessage(const U32 indexes)
3877 { 3423 {
3878 for (LLWString::const_iterator i = result_string.begin(); i != result_string.end(); i++) 3424 for (LLWString::const_iterator i = result_string.begin(); i != result_string.end(); i++)
3879 { 3425 {
3880 mPreeditor->handleUnicodeCharHere(*i, FALSE); 3426 mPreeditor->handleUnicodeCharHere(*i);
3881 } 3427 }
3882 } 3428 }
3883 3429
@@ -3948,7 +3494,7 @@ BOOL LLWindowWin32::handleImeRequests(U32 request, U32 param, LRESULT *result)
3948 LLCoordGL caret_coord; 3494 LLCoordGL caret_coord;
3949 LLRect preedit_bounds; 3495 LLRect preedit_bounds;
3950 mPreeditor->getPreeditLocation(-1, &caret_coord, &preedit_bounds, NULL); 3496 mPreeditor->getPreeditLocation(-1, &caret_coord, &preedit_bounds, NULL);
3951 3497
3952 CANDIDATEFORM *const form = (CANDIDATEFORM *)param; 3498 CANDIDATEFORM *const form = (CANDIDATEFORM *)param;
3953 DWORD const dwIndex = form->dwIndex; 3499 DWORD const dwIndex = form->dwIndex;
3954 fillCandidateForm(caret_coord, preedit_bounds, form); 3500 fillCandidateForm(caret_coord, preedit_bounds, form);
@@ -3963,7 +3509,7 @@ BOOL LLWindowWin32::handleImeRequests(U32 request, U32 param, LRESULT *result)
3963 3509
3964 // char_position->dwCharPos counts in number of 3510 // char_position->dwCharPos counts in number of
3965 // WCHARs, i.e., UTF-16 encoding units, so we can't simply pass the 3511 // WCHARs, i.e., UTF-16 encoding units, so we can't simply pass the
3966 // number to getPreeditLocation. 3512 // number to getPreeditLocation.
3967 3513
3968 const LLWString & wtext = mPreeditor->getWText(); 3514 const LLWString & wtext = mPreeditor->getWText();
3969 S32 preedit, preedit_length; 3515 S32 preedit, preedit_length;
@@ -4037,7 +3583,7 @@ BOOL LLWindowWin32::handleImeRequests(U32 request, U32 param, LRESULT *result)
4037 const LLWString & wtext = mPreeditor->getWText(); 3583 const LLWString & wtext = mPreeditor->getWText();
4038 S32 preedit, preedit_length; 3584 S32 preedit, preedit_length;
4039 mPreeditor->getPreeditRange(&preedit, &preedit_length); 3585 mPreeditor->getPreeditRange(&preedit, &preedit_length);
4040 3586
4041 S32 context_offset; 3587 S32 context_offset;
4042 LLWString context = find_context(wtext, preedit, preedit_length, &context_offset); 3588 LLWString context = find_context(wtext, preedit, preedit_length, &context_offset);
4043 preedit -= context_offset; 3589 preedit -= context_offset;
@@ -4048,7 +3594,7 @@ BOOL LLWindowWin32::handleImeRequests(U32 request, U32 param, LRESULT *result)
4048 // Otherwise, some IME are confused. 3594 // Otherwise, some IME are confused.
4049 context.erase(preedit, preedit_length); 3595 context.erase(preedit, preedit_length);
4050 } 3596 }
4051 3597
4052 RECONVERTSTRING *reconvert_string = (RECONVERTSTRING *)param; 3598 RECONVERTSTRING *reconvert_string = (RECONVERTSTRING *)param;
4053 *result = fillReconvertString(context, preedit, 0, reconvert_string); 3599 *result = fillReconvertString(context, preedit, 0, reconvert_string);
4054 return TRUE; 3600 return TRUE;
diff --git a/linden/indra/llwindow/llwindowwin32.h b/linden/indra/llwindow/llwindowwin32.h
index f159d30..5535af4 100644
--- a/linden/indra/llwindow/llwindowwin32.h
+++ b/linden/indra/llwindow/llwindowwin32.h
@@ -59,7 +59,7 @@ public:
59 /*virtual*/ BOOL getSize(LLCoordWindow *size); 59 /*virtual*/ BOOL getSize(LLCoordWindow *size);
60 /*virtual*/ BOOL setPosition(LLCoordScreen position); 60 /*virtual*/ BOOL setPosition(LLCoordScreen position);
61 /*virtual*/ BOOL setSize(LLCoordScreen size); 61 /*virtual*/ BOOL setSize(LLCoordScreen size);
62 /*virtual*/ BOOL switchContext(BOOL fullscreen, LLCoordScreen size, BOOL disable_vsync); 62 /*virtual*/ BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL);
63 /*virtual*/ BOOL setCursorPosition(LLCoordWindow position); 63 /*virtual*/ BOOL setCursorPosition(LLCoordWindow position);
64 /*virtual*/ BOOL getCursorPosition(LLCoordWindow *position); 64 /*virtual*/ BOOL getCursorPosition(LLCoordWindow *position);
65 /*virtual*/ void showCursor(); 65 /*virtual*/ void showCursor();
@@ -78,6 +78,8 @@ public:
78 /*virtual*/ void flashIcon(F32 seconds); 78 /*virtual*/ void flashIcon(F32 seconds);
79 /*virtual*/ F32 getGamma(); 79 /*virtual*/ F32 getGamma();
80 /*virtual*/ BOOL setGamma(const F32 gamma); // Set the gamma 80 /*virtual*/ BOOL setGamma(const F32 gamma); // Set the gamma
81 /*virtual*/ void setFSAASamples(const U32 fsaa_samples);
82 /*virtual*/ U32 getFSAASamples();
81 /*virtual*/ BOOL restoreGamma(); // Restore original gamma table (before updating gamma) 83 /*virtual*/ BOOL restoreGamma(); // Restore original gamma table (before updating gamma)
82 /*virtual*/ ESwapMethod getSwapMethod() { return mSwapMethod; } 84 /*virtual*/ ESwapMethod getSwapMethod() { return mSwapMethod; }
83 /*virtual*/ void gatherInput(); 85 /*virtual*/ void gatherInput();
@@ -118,7 +120,7 @@ protected:
118 LLWindowWin32( 120 LLWindowWin32(
119 char *title, char *name, int x, int y, int width, int height, U32 flags, 121 char *title, char *name, int x, int y, int width, int height, U32 flags,
120 BOOL fullscreen, BOOL clearBg, BOOL disable_vsync, BOOL use_gl, 122 BOOL fullscreen, BOOL clearBg, BOOL disable_vsync, BOOL use_gl,
121 BOOL ignore_pixel_depth); 123 BOOL ignore_pixel_depth, U32 fsaa_samples);
122 ~LLWindowWin32(); 124 ~LLWindowWin32();
123 125
124 void initCursors(); 126 void initCursors();
@@ -184,6 +186,7 @@ protected:
184 static BOOL sIsClassRegistered; // has the window class been registered? 186 static BOOL sIsClassRegistered; // has the window class been registered?
185 187
186 F32 mCurrentGamma; 188 F32 mCurrentGamma;
189 U32 mFSAASamples;
187 WORD mPrevGammaRamp[256*3]; 190 WORD mPrevGammaRamp[256*3];
188 WORD mCurrentGammaRamp[256*3]; 191 WORD mCurrentGammaRamp[256*3];
189 192
diff --git a/linden/indra/llxml/llcontrol.cpp b/linden/indra/llxml/llcontrol.cpp
index 5504a10..18292d2 100644
--- a/linden/indra/llxml/llcontrol.cpp
+++ b/linden/indra/llxml/llcontrol.cpp
@@ -39,7 +39,6 @@
39 39
40#include "llstl.h" 40#include "llstl.h"
41 41
42#include "linked_lists.h"
43#include "llstring.h" 42#include "llstring.h"
44#include "v3math.h" 43#include "v3math.h"
45#include "v3dmath.h" 44#include "v3dmath.h"
@@ -57,19 +56,9 @@
57#endif 56#endif
58 57
59//this defines the current version of the settings file 58//this defines the current version of the settings file
60U32 LLControlBase::sMaxControlNameLength = 0;
61
62//These lists are used to store the ID's of registered event listeners.
63std::list<S32> LLControlBase::mFreeIDs;
64std::list<S32> LLControlBase::mUsedIDs;
65
66S32 LLControlBase::mTopID;
67
68std::set<LLControlBase*> LLControlBase::mChangedControls;
69
70const S32 CURRENT_VERSION = 101; 59const S32 CURRENT_VERSION = 101;
71 60
72BOOL LLControl::llsd_compare(const LLSD& a, const LLSD & b) 61BOOL LLControlVariable::llsd_compare(const LLSD& a, const LLSD & b)
73{ 62{
74 switch (mType) 63 switch (mType)
75 { 64 {
@@ -101,58 +90,154 @@ BOOL LLControl::llsd_compare(const LLSD& a, const LLSD & b)
101 return FALSE; 90 return FALSE;
102} 91}
103 92
104LLControlBase::~LLControlBase() 93LLControlVariable::LLControlVariable(const LLString& name, eControlType type,
94 LLSD initial, const LLString& comment,
95 BOOL persist)
96 : mName(name),
97 mComment(comment),
98 mType(type),
99 mPersist(persist)
100{
101 if (mPersist && mComment.empty())
102 {
103 llerrs << "Must supply a comment for control " << mName << llendl;
104 }
105 //Push back versus setValue'ing here, since we don't want to call a signal yet
106 mValues.push_back(initial);
107}
108
109
110
111LLControlVariable::~LLControlVariable()
112{
113}
114
115void LLControlVariable::setValue(const LLSD& value, bool saved_value)
105{ 116{
117 bool value_changed = llsd_compare(getValue(), value) == FALSE;
118 if(saved_value)
119 {
120 // If we're going to save this value, return to default but don't fire
121 resetToDefault(false);
122 if (llsd_compare(mValues.back(), value) == FALSE)
123 {
124 mValues.push_back(value);
125 }
126 }
127 else
128 {
129 // This is a unsaved value. Its needs to reside at
130 // mValues[2] (or greater). It must not affect
131 // the result of getSaveValue()
132 if (llsd_compare(mValues.back(), value) == FALSE)
133 {
134 while(mValues.size() > 2)
135 {
136 // Remove any unsaved values.
137 mValues.pop_back();
138 }
139
140 if(mValues.size() < 2)
141 {
142 // Add the default to the 'save' value.
143 mValues.push_back(mValues[0]);
144 }
145
146 // Add the 'un-save' value.
147 mValues.push_back(value);
148 }
149 }
150
151 if(value_changed)
152 {
153 mSignal(value);
154 }
106} 155}
107 156
108// virtual 157void LLControlVariable::resetToDefault(bool fire_signal)
109void LLControlBase::resetToDefault()
110{ 158{
159 //The first setting is always the default
160 //Pop to it and fire off the listener
161 while(mValues.size() > 1) mValues.pop_back();
162 if(fire_signal) firePropertyChanged();
163}
164
165bool LLControlVariable::isSaveValueDefault()
166{
167 return (mValues.size() == 1)
168 || ((mValues.size() > 1) && llsd_compare(mValues[1], mValues[0]));
111} 169}
112 170
113LLControlGroup::LLControlGroup(): mNameTable() 171LLSD LLControlVariable::getSaveValue() const
114{ 172{
115 //mFreeStringOffset = 0; 173 //The first level of the stack is default
174 //We assume that the second level is user preferences that should be saved
175 if(mValues.size() > 1) return mValues[1];
176 return mValues[0];
116} 177}
117 178
118LLControlGroup::~LLControlGroup() 179LLControlVariable* LLControlGroup::getControl(const LLString& name)
180{
181 ctrl_name_table_t::iterator iter = mNameTable.find(name);
182 return iter == mNameTable.end() ? NULL : iter->second;
183}
184
185
186////////////////////////////////////////////////////////////////////////////
187
188LLControlGroup::LLControlGroup()
119{ 189{
190 mTypeString[TYPE_U32] = "U32";
191 mTypeString[TYPE_S32] = "S32";
192 mTypeString[TYPE_F32] = "F32";
193 mTypeString[TYPE_BOOLEAN] = "Boolean";
194 mTypeString[TYPE_STRING] = "String";
195 mTypeString[TYPE_VEC3] = "Vector3";
196 mTypeString[TYPE_VEC3D] = "Vector3D";
197 mTypeString[TYPE_RECT] = "Rect";
198 mTypeString[TYPE_COL4] = "Color4";
199 mTypeString[TYPE_COL3] = "Color3";
200 mTypeString[TYPE_COL4U] = "Color4u";
201 mTypeString[TYPE_LLSD] = "LLSD";
120} 202}
121 203
122LLSD LLControlBase::registerListener(LLSimpleListenerObservable *listener, LLSD userdata) 204LLControlGroup::~LLControlGroup()
123{ 205{
124 // Symmetric listener relationship 206 cleanup();
125 addListener(listener, "", userdata);
126 listener->addListener(this, "", userdata);
127 return getValue();
128} 207}
129 208
130void LLControlGroup::cleanup() 209void LLControlGroup::cleanup()
131{ 210{
211 for_each(mNameTable.begin(), mNameTable.end(), DeletePairedPointer());
132 mNameTable.clear(); 212 mNameTable.clear();
133} 213}
134 214
135LLControlBase* LLControlGroup::getControl(const LLString& name) 215eControlType LLControlGroup::typeStringToEnum(const LLString& typestr)
136{ 216{
137 ctrl_name_table_t::iterator iter = mNameTable.find(name); 217 for(int i = 0; i < (int)TYPE_COUNT; ++i)
138 return iter == mNameTable.end() ? NULL : (LLControlBase*)iter->second; 218 {
219 if(mTypeString[i] == typestr) return (eControlType)i;
220 }
221 return (eControlType)-1;
222}
223
224LLString LLControlGroup::typeEnumToString(eControlType typeenum)
225{
226 return mTypeString[typeenum];
139} 227}
140 228
141BOOL LLControlGroup::declareControl(const LLString& name, eControlType type, const LLSD initial_val, const LLString& comment, BOOL persist) 229BOOL LLControlGroup::declareControl(const LLString& name, eControlType type, const LLSD initial_val, const LLString& comment, BOOL persist)
142{ 230{
143 if(!mNameTable[name]) 231 if(mNameTable.find(name) != mNameTable.end())
144 {
145 // if not, create the control and add it to the name table
146 LLControl* control = new LLControl(name, type, initial_val, comment, persist);
147 mNameTable[name] = control;
148 return TRUE;
149 }
150 else
151 { 232 {
152 llwarns << "LLControlGroup::declareControl: Control named " << name << " already exists." << llendl; 233 llwarns << "LLControlGroup::declareControl: Control named " << name << " already exists." << llendl;
153 mNameTable.erase(name); 234 mNameTable[name]->setValue(initial_val);
154 return FALSE; 235 return TRUE;
155 } 236 }
237 // if not, create the control and add it to the name table
238 LLControlVariable* control = new LLControlVariable(name, type, initial_val, comment, persist);
239 mNameTable[name] = control;
240 return TRUE;
156} 241}
157 242
158BOOL LLControlGroup::declareU32(const LLString& name, const U32 initial_val, const LLString& comment, BOOL persist) 243BOOL LLControlGroup::declareU32(const LLString& name, const U32 initial_val, const LLString& comment, BOOL persist)
@@ -210,19 +295,14 @@ BOOL LLControlGroup::declareColor3(const LLString& name, const LLColor3 &initial
210 return declareControl(name, TYPE_COL3, initial_val.getValue(), comment, persist); 295 return declareControl(name, TYPE_COL3, initial_val.getValue(), comment, persist);
211} 296}
212 297
213LLSD LLControlGroup::registerListener(const LLString& name, LLSimpleListenerObservable *listener) 298BOOL LLControlGroup::declareLLSD(const LLString& name, const LLSD &initial_val, const LLString& comment, BOOL persist )
214{ 299{
215 LLControlBase *control = getControl(name); 300 return declareControl(name, TYPE_LLSD, initial_val, comment, persist);
216 if (control)
217 {
218 return control->registerListener(listener);
219 }
220 return LLSD();
221} 301}
222 302
223BOOL LLControlGroup::getBOOL(const LLString& name) 303BOOL LLControlGroup::getBOOL(const LLString& name)
224{ 304{
225 LLControlBase* control = getControl(name); 305 LLControlVariable* control = getControl(name);
226 306
227 if (control && control->isType(TYPE_BOOLEAN)) 307 if (control && control->isType(TYPE_BOOLEAN))
228 return control->get().asBoolean(); 308 return control->get().asBoolean();
@@ -235,7 +315,7 @@ BOOL LLControlGroup::getBOOL(const LLString& name)
235 315
236S32 LLControlGroup::getS32(const LLString& name) 316S32 LLControlGroup::getS32(const LLString& name)
237{ 317{
238 LLControlBase* control = getControl(name); 318 LLControlVariable* control = getControl(name);
239 319
240 if (control && control->isType(TYPE_S32)) 320 if (control && control->isType(TYPE_S32))
241 return control->get().asInteger(); 321 return control->get().asInteger();
@@ -248,7 +328,7 @@ S32 LLControlGroup::getS32(const LLString& name)
248 328
249U32 LLControlGroup::getU32(const LLString& name) 329U32 LLControlGroup::getU32(const LLString& name)
250{ 330{
251 LLControlBase* control = getControl(name); 331 LLControlVariable* control = getControl(name);
252 332
253 if (control && control->isType(TYPE_U32)) 333 if (control && control->isType(TYPE_U32))
254 return control->get().asInteger(); 334 return control->get().asInteger();
@@ -261,7 +341,7 @@ U32 LLControlGroup::getU32(const LLString& name)
261 341
262F32 LLControlGroup::getF32(const LLString& name) 342F32 LLControlGroup::getF32(const LLString& name)
263{ 343{
264 LLControlBase* control = getControl(name); 344 LLControlVariable* control = getControl(name);
265 345
266 if (control && control->isType(TYPE_F32)) 346 if (control && control->isType(TYPE_F32))
267 return (F32) control->get().asReal(); 347 return (F32) control->get().asReal();
@@ -274,7 +354,7 @@ F32 LLControlGroup::getF32(const LLString& name)
274 354
275LLString LLControlGroup::findString(const LLString& name) 355LLString LLControlGroup::findString(const LLString& name)
276{ 356{
277 LLControlBase* control = getControl(name); 357 LLControlVariable* control = getControl(name);
278 358
279 if (control && control->isType(TYPE_STRING)) 359 if (control && control->isType(TYPE_STRING))
280 return control->get().asString(); 360 return control->get().asString();
@@ -283,7 +363,7 @@ LLString LLControlGroup::findString(const LLString& name)
283 363
284LLString LLControlGroup::getString(const LLString& name) 364LLString LLControlGroup::getString(const LLString& name)
285{ 365{
286 LLControlBase* control = getControl(name); 366 LLControlVariable* control = getControl(name);
287 367
288 if (control && control->isType(TYPE_STRING)) 368 if (control && control->isType(TYPE_STRING))
289 return control->get().asString(); 369 return control->get().asString();
@@ -309,7 +389,7 @@ LLString LLControlGroup::getText(const LLString& name)
309 389
310LLVector3 LLControlGroup::getVector3(const LLString& name) 390LLVector3 LLControlGroup::getVector3(const LLString& name)
311{ 391{
312 LLControlBase* control = getControl(name); 392 LLControlVariable* control = getControl(name);
313 393
314 if (control && control->isType(TYPE_VEC3)) 394 if (control && control->isType(TYPE_VEC3))
315 return control->get(); 395 return control->get();
@@ -322,7 +402,7 @@ LLVector3 LLControlGroup::getVector3(const LLString& name)
322 402
323LLVector3d LLControlGroup::getVector3d(const LLString& name) 403LLVector3d LLControlGroup::getVector3d(const LLString& name)
324{ 404{
325 LLControlBase* control = getControl(name); 405 LLControlVariable* control = getControl(name);
326 406
327 if (control && control->isType(TYPE_VEC3D)) 407 if (control && control->isType(TYPE_VEC3D))
328 return control->get(); 408 return control->get();
@@ -335,7 +415,7 @@ LLVector3d LLControlGroup::getVector3d(const LLString& name)
335 415
336LLRect LLControlGroup::getRect(const LLString& name) 416LLRect LLControlGroup::getRect(const LLString& name)
337{ 417{
338 LLControlBase* control = getControl(name); 418 LLControlVariable* control = getControl(name);
339 419
340 if (control && control->isType(TYPE_RECT)) 420 if (control && control->isType(TYPE_RECT))
341 return control->get(); 421 return control->get();
@@ -353,7 +433,7 @@ LLColor4 LLControlGroup::getColor(const LLString& name)
353 433
354 if (i != mNameTable.end()) 434 if (i != mNameTable.end())
355 { 435 {
356 LLControlBase* control = i->second; 436 LLControlVariable* control = i->second;
357 437
358 switch(control->mType) 438 switch(control->mType)
359 { 439 {
@@ -381,7 +461,7 @@ LLColor4 LLControlGroup::getColor(const LLString& name)
381 461
382LLColor4U LLControlGroup::getColor4U(const LLString& name) 462LLColor4U LLControlGroup::getColor4U(const LLString& name)
383{ 463{
384 LLControlBase* control = getControl(name); 464 LLControlVariable* control = getControl(name);
385 465
386 if (control && control->isType(TYPE_COL4U)) 466 if (control && control->isType(TYPE_COL4U))
387 return control->get(); 467 return control->get();
@@ -394,7 +474,7 @@ LLColor4U LLControlGroup::getColor4U(const LLString& name)
394 474
395LLColor4 LLControlGroup::getColor4(const LLString& name) 475LLColor4 LLControlGroup::getColor4(const LLString& name)
396{ 476{
397 LLControlBase* control = getControl(name); 477 LLControlVariable* control = getControl(name);
398 478
399 if (control && control->isType(TYPE_COL4)) 479 if (control && control->isType(TYPE_COL4))
400 return control->get(); 480 return control->get();
@@ -407,7 +487,7 @@ LLColor4 LLControlGroup::getColor4(const LLString& name)
407 487
408LLColor3 LLControlGroup::getColor3(const LLString& name) 488LLColor3 LLControlGroup::getColor3(const LLString& name)
409{ 489{
410 LLControlBase* control = getControl(name); 490 LLControlVariable* control = getControl(name);
411 491
412 if (control && control->isType(TYPE_COL3)) 492 if (control && control->isType(TYPE_COL3))
413 return control->get(); 493 return control->get();
@@ -418,6 +498,16 @@ LLColor3 LLControlGroup::getColor3(const LLString& name)
418 } 498 }
419} 499}
420 500
501LLSD LLControlGroup::getLLSD(const LLString& name)
502{
503 LLControlVariable* control = getControl(name);
504
505 if (control && control->isType(TYPE_LLSD))
506 return control->getValue();
507 CONTROL_ERRS << "Invalid LLSD control " << name << llendl;
508 return LLSD();
509}
510
421BOOL LLControlGroup::controlExists(const LLString& name) 511BOOL LLControlGroup::controlExists(const LLString& name)
422{ 512{
423 ctrl_name_table_t::iterator iter = mNameTable.find(name); 513 ctrl_name_table_t::iterator iter = mNameTable.find(name);
@@ -430,7 +520,7 @@ BOOL LLControlGroup::controlExists(const LLString& name)
430 520
431void LLControlGroup::setBOOL(const LLString& name, BOOL val) 521void LLControlGroup::setBOOL(const LLString& name, BOOL val)
432{ 522{
433 LLControlBase* control = getControl(name); 523 LLControlVariable* control = getControl(name);
434 524
435 if (control && control->isType(TYPE_BOOLEAN)) 525 if (control && control->isType(TYPE_BOOLEAN))
436 { 526 {
@@ -445,7 +535,7 @@ void LLControlGroup::setBOOL(const LLString& name, BOOL val)
445 535
446void LLControlGroup::setS32(const LLString& name, S32 val) 536void LLControlGroup::setS32(const LLString& name, S32 val)
447{ 537{
448 LLControlBase* control = getControl(name); 538 LLControlVariable* control = getControl(name);
449 539
450 if (control && control->isType(TYPE_S32)) 540 if (control && control->isType(TYPE_S32))
451 { 541 {
@@ -460,7 +550,7 @@ void LLControlGroup::setS32(const LLString& name, S32 val)
460 550
461void LLControlGroup::setF32(const LLString& name, F32 val) 551void LLControlGroup::setF32(const LLString& name, F32 val)
462{ 552{
463 LLControlBase* control = getControl(name); 553 LLControlVariable* control = getControl(name);
464 554
465 if (control && control->isType(TYPE_F32)) 555 if (control && control->isType(TYPE_F32))
466 { 556 {
@@ -475,7 +565,7 @@ void LLControlGroup::setF32(const LLString& name, F32 val)
475 565
476void LLControlGroup::setU32(const LLString& name, U32 val) 566void LLControlGroup::setU32(const LLString& name, U32 val)
477{ 567{
478 LLControlBase* control = getControl(name); 568 LLControlVariable* control = getControl(name);
479 569
480 if (control && control->isType(TYPE_U32)) 570 if (control && control->isType(TYPE_U32))
481 { 571 {
@@ -490,7 +580,7 @@ void LLControlGroup::setU32(const LLString& name, U32 val)
490 580
491void LLControlGroup::setString(const LLString& name, const LLString &val) 581void LLControlGroup::setString(const LLString& name, const LLString &val)
492{ 582{
493 LLControlBase* control = getControl(name); 583 LLControlVariable* control = getControl(name);
494 584
495 if (control && control->isType(TYPE_STRING)) 585 if (control && control->isType(TYPE_STRING))
496 { 586 {
@@ -505,7 +595,7 @@ void LLControlGroup::setString(const LLString& name, const LLString &val)
505 595
506void LLControlGroup::setVector3(const LLString& name, const LLVector3 &val) 596void LLControlGroup::setVector3(const LLString& name, const LLVector3 &val)
507{ 597{
508 LLControlBase* control = getControl(name); 598 LLControlVariable* control = getControl(name);
509 599
510 if (control && control->isType(TYPE_VEC3)) 600 if (control && control->isType(TYPE_VEC3))
511 { 601 {
@@ -519,7 +609,7 @@ void LLControlGroup::setVector3(const LLString& name, const LLVector3 &val)
519 609
520void LLControlGroup::setVector3d(const LLString& name, const LLVector3d &val) 610void LLControlGroup::setVector3d(const LLString& name, const LLVector3d &val)
521{ 611{
522 LLControlBase* control = getControl(name); 612 LLControlVariable* control = getControl(name);
523 613
524 if (control && control->isType(TYPE_VEC3D)) 614 if (control && control->isType(TYPE_VEC3D))
525 { 615 {
@@ -533,7 +623,7 @@ void LLControlGroup::setVector3d(const LLString& name, const LLVector3d &val)
533 623
534void LLControlGroup::setRect(const LLString& name, const LLRect &val) 624void LLControlGroup::setRect(const LLString& name, const LLRect &val)
535{ 625{
536 LLControlBase* control = getControl(name); 626 LLControlVariable* control = getControl(name);
537 627
538 if (control && control->isType(TYPE_RECT)) 628 if (control && control->isType(TYPE_RECT))
539 { 629 {
@@ -547,7 +637,7 @@ void LLControlGroup::setRect(const LLString& name, const LLRect &val)
547 637
548void LLControlGroup::setColor4U(const LLString& name, const LLColor4U &val) 638void LLControlGroup::setColor4U(const LLString& name, const LLColor4U &val)
549{ 639{
550 LLControlBase* control = getControl(name); 640 LLControlVariable* control = getControl(name);
551 641
552 if (control && control->isType(TYPE_COL4U)) 642 if (control && control->isType(TYPE_COL4U))
553 { 643 {
@@ -561,7 +651,7 @@ void LLControlGroup::setColor4U(const LLString& name, const LLColor4U &val)
561 651
562void LLControlGroup::setColor4(const LLString& name, const LLColor4 &val) 652void LLControlGroup::setColor4(const LLString& name, const LLColor4 &val)
563{ 653{
564 LLControlBase* control = getControl(name); 654 LLControlVariable* control = getControl(name);
565 655
566 if (control && control->isType(TYPE_COL4)) 656 if (control && control->isType(TYPE_COL4))
567 { 657 {
@@ -573,6 +663,20 @@ void LLControlGroup::setColor4(const LLString& name, const LLColor4 &val)
573 } 663 }
574} 664}
575 665
666void LLControlGroup::setLLSD(const LLString& name, const LLSD& val)
667{
668 LLControlVariable* control = getControl(name);
669
670 if (control && control->isType(TYPE_LLSD))
671 {
672 setValue(name, val);
673 }
674 else
675 {
676 CONTROL_ERRS << "Invalid LLSD control " << name << llendl;
677 }
678}
679
576void LLControlGroup::setValue(const LLString& name, const LLSD& val) 680void LLControlGroup::setValue(const LLString& name, const LLSD& val)
577{ 681{
578 if (name.empty()) 682 if (name.empty())
@@ -580,7 +684,7 @@ void LLControlGroup::setValue(const LLString& name, const LLSD& val)
580 return; 684 return;
581 } 685 }
582 686
583 LLControlBase* control = getControl(name); 687 LLControlVariable* control = getControl(name);
584 688
585 if (control) 689 if (control)
586 { 690 {
@@ -596,238 +700,8 @@ void LLControlGroup::setValue(const LLString& name, const LLSD& val)
596// Load and save 700// Load and save
597//--------------------------------------------------------------- 701//---------------------------------------------------------------
598 702
599U32 LLControlGroup::loadFromFileLegacy(const LLString& filename, BOOL require_declaration, eControlType declare_as)
600{
601 U32 item = 0;
602 U32 validitems = 0;
603 llifstream file;
604 S32 version;
605
606 file.open(filename.c_str()); /*Flawfinder: ignore*/
607
608 if (!file)
609 {
610 llinfos << "LLControlGroup::loadFromFile unable to open." << llendl;
611 return 0;
612 }
613
614 // Check file version
615 LLString name;
616 file >> name;
617 file >> version;
618 if (name != "version" || version != CURRENT_VERSION)
619 {
620 llinfos << filename << " does not appear to be a version " << CURRENT_VERSION << " controls file" << llendl;
621 return 0;
622 }
623
624 while (!file.eof())
625 {
626 file >> name;
627
628 if (name.empty())
629 {
630 continue;
631 }
632
633 if (name.substr(0,2) == "//")
634 {
635 // This is a comment.
636 char buffer[MAX_STRING]; /*Flawfinder: ignore*/
637 file.getline(buffer, MAX_STRING);
638 continue;
639 }
640
641 BOOL declared = mNameTable.find(name) != mNameTable.end();
642
643 if (require_declaration && !declared)
644 {
645 // Declaration required, but this name not declared.
646 // Complain about non-empty names.
647 if (!name.empty())
648 {
649 //read in to end of line
650 char buffer[MAX_STRING]; /*Flawfinder: ignore*/
651 file.getline(buffer, MAX_STRING);
652 llwarns << "LLControlGroup::loadFromFile() : Trying to set \"" << name << "\", setting doesn't exist." << llendl;
653 }
654 continue;
655 }
656
657 // Got an item. Load it up.
658 item++;
659
660 // If not declared, assume it's a string
661 if (!declared)
662 {
663 switch(declare_as)
664 {
665 case TYPE_COL4:
666 declareColor4(name, LLColor4::white, LLString::null, NO_PERSIST);
667 break;
668 case TYPE_COL4U:
669 declareColor4U(name, LLColor4U::white, LLString::null, NO_PERSIST);
670 break;
671 case TYPE_STRING:
672 default:
673 declareString(name, LLString::null, LLString::null, NO_PERSIST);
674 break;
675 }
676 }
677
678 // Control name has been declared in code.
679 LLControlBase *control = getControl(name);
680
681 llassert(control);
682
683 mLoadedSettings.insert(name);
684
685 switch(control->mType)
686 {
687 case TYPE_F32:
688 {
689 F32 initial;
690
691 file >> initial;
692
693 control->set(initial);
694 validitems++;
695 }
696 break;
697 case TYPE_S32:
698 {
699 S32 initial;
700
701 file >> initial;
702
703 control->set(initial);
704 validitems++;
705 }
706 break;
707 case TYPE_U32:
708 {
709 U32 initial;
710
711 file >> initial;
712 control->set((LLSD::Integer) initial);
713 validitems++;
714 }
715 break;
716 case TYPE_BOOLEAN:
717 {
718 char boolstring[256]; /*Flawfinder: ignore*/
719 BOOL valid = FALSE;
720 BOOL initial = FALSE;
721
722 file >> boolstring;
723 if (!strcmp("TRUE", boolstring))
724 {
725 initial = TRUE;
726 valid = TRUE;
727 }
728 else if (!strcmp("FALSE", boolstring))
729 {
730 initial = FALSE;
731 valid = TRUE;
732 }
733
734 if (valid)
735 {
736 control->set(initial);
737 }
738 else
739 {
740 llinfos << filename << "Item " << item << ": Invalid BOOL control " << name << ", " << boolstring << llendl;
741 }
742
743 validitems++;
744 }
745 break;
746 case TYPE_STRING:
747 {
748 LLString string;
749
750 file >> string;
751
752 control->set(string);
753 validitems++;
754 }
755 break;
756 case TYPE_VEC3:
757 {
758 F32 x, y, z;
759
760 file >> x >> y >> z;
761
762 LLVector3 vector(x, y, z);
763
764 control->set(vector.getValue());
765 validitems++;
766 }
767 break;
768 case TYPE_VEC3D:
769 {
770 F64 x, y, z;
771
772 file >> x >> y >> z;
773
774 LLVector3d vector(x, y, z);
775
776 control->set(vector.getValue());
777 validitems++;
778 }
779 break;
780 case TYPE_RECT:
781 {
782 S32 left, bottom, width, height;
783
784 file >> left >> bottom >> width >> height;
785
786 LLRect rect;
787 rect.setOriginAndSize(left, bottom, width, height);
788
789 control->set(rect.getValue());
790 validitems++;
791 }
792 break;
793 case TYPE_COL4U:
794 {
795 S32 red, green, blue, alpha;
796 LLColor4U color;
797 file >> red >> green >> blue >> alpha;
798 color.setVec(red, green, blue, alpha);
799 control->set(color.getValue());
800 validitems++;
801 }
802 break;
803 case TYPE_COL4:
804 {
805 LLColor4 color;
806 file >> color.mV[VRED] >> color.mV[VGREEN]
807 >> color.mV[VBLUE] >> color.mV[VALPHA];
808 control->set(color.getValue());
809 validitems++;
810 }
811 break;
812 case TYPE_COL3:
813 {
814 LLColor3 color;
815 file >> color.mV[VRED] >> color.mV[VGREEN]
816 >> color.mV[VBLUE];
817 control->set(color.getValue());
818 validitems++;
819 }
820 break;
821 }
822 }
823
824 file.close();
825
826 return validitems;
827}
828
829// Returns number of controls loaded, so 0 if failure 703// Returns number of controls loaded, so 0 if failure
830U32 LLControlGroup::loadFromFile(const LLString& filename, BOOL require_declaration, eControlType declare_as) 704U32 LLControlGroup::loadFromFileLegacy(const LLString& filename, BOOL require_declaration, eControlType declare_as)
831{ 705{
832 LLString name; 706 LLString name;
833 707
@@ -901,11 +775,9 @@ U32 LLControlGroup::loadFromFile(const LLString& filename, BOOL require_declarat
901 } 775 }
902 776
903 // Control name has been declared in code. 777 // Control name has been declared in code.
904 LLControlBase *control = getControl(name); 778 LLControlVariable *control = getControl(name);
905 779
906 llassert(control); 780 llassert(control);
907
908 mLoadedSettings.insert(name);
909 781
910 switch(control->mType) 782 switch(control->mType)
911 { 783 {
@@ -1019,59 +891,43 @@ U32 LLControlGroup::loadFromFile(const LLString& filename, BOOL require_declarat
1019 LLVector3 color; 891 LLVector3 color;
1020 892
1021 child_nodep->getAttributeVector3("value", color); 893 child_nodep->getAttributeVector3("value", color);
1022 control->set(LLColor3(color.mV).getValue()); 894 control->set(LLColor3(color.mV).getValue());
1023 validitems++; 895 validitems++;
1024 } 896 }
1025 break; 897 break;
1026 }
1027 898
899 default:
900 break;
901
902 }
903
1028 child_nodep = rootp->getNextChild(); 904 child_nodep = rootp->getNextChild();
1029 } 905 }
1030 906
1031 return validitems; 907 return validitems;
1032} 908}
1033 909
1034struct compare_controls
1035{
1036 bool operator() (const LLControlBase* const a, const LLControlBase* const b) const
1037 {
1038 return a->getName() < b->getName();
1039 }
1040};
1041
1042U32 LLControlGroup::saveToFile(const LLString& filename, BOOL nondefault_only) 910U32 LLControlGroup::saveToFile(const LLString& filename, BOOL nondefault_only)
1043{ 911{
1044 const char ENDL = '\n'; 912 LLSD settings;
1045 913 int num_saved = 0;
1046 llinfos << "Saving settings to file: " << filename << llendl;
1047
1048 // place the objects in a temporary container that enforces a sort
1049 // order to ease manual editing of the file
1050
1051 typedef std::set< LLControlBase*, compare_controls > control_list_t;
1052 control_list_t controls;
1053
1054 for (ctrl_name_table_t::iterator iter = mNameTable.begin(); 914 for (ctrl_name_table_t::iterator iter = mNameTable.begin();
1055 iter != mNameTable.end(); iter++) 915 iter != mNameTable.end(); iter++)
1056 { 916 {
1057 LLString name = iter->first; 917 LLControlVariable* control = iter->second;
1058 if (name.empty())
1059 {
1060 CONTROL_ERRS << "Control with no name found!!!" << llendl;
1061 break;
1062 }
1063
1064 LLControlBase* control = (LLControlBase *)iter->second;
1065 if (!control) 918 if (!control)
1066 { 919 {
1067 llwarns << "Tried to save invalid control: " << name << llendl; 920 llwarns << "Tried to save invalid control: " << iter->first << llendl;
1068 } 921 }
1069 922
1070 if( control && control->mPersist ) 923 if( control && control->isPersisted() )
1071 { 924 {
1072 if (!(nondefault_only && (control->mIsDefault))) 925 if (!(nondefault_only && (control->isSaveValueDefault())))
1073 { 926 {
1074 controls.insert( control ); 927 settings[iter->first]["Type"] = typeEnumToString(control->type());
928 settings[iter->first]["Comment"] = control->getComment();
929 settings[iter->first]["Value"] = control->getSaveValue();
930 ++num_saved;
1075 } 931 }
1076 else 932 else
1077 { 933 {
@@ -1080,156 +936,58 @@ U32 LLControlGroup::saveToFile(const LLString& filename, BOOL nondefault_only)
1080 } 936 }
1081 } 937 }
1082 } 938 }
1083
1084 llofstream file; 939 llofstream file;
1085 file.open(filename.c_str()); /*Flawfinder: ignore*/ 940 file.open(filename.c_str());
1086 941 if (file.is_open())
1087 if (!file.is_open())
1088 { 942 {
1089 // This is a warning because sometime we want to use settings files which can't be written... 943 LLSDSerialize::toPrettyXML(settings, file);
1090 llwarns << "LLControlGroup::saveToFile unable to open file for writing" << llendl; 944 file.close();
1091 return 0; 945 llinfos << "Saved to " << filename << llendl;
1092 } 946 }
1093 947 else
1094 // Write file version
1095 file << "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>\n";
1096 file << "<settings version = \"" << CURRENT_VERSION << "\">\n";
1097 for (control_list_t::iterator iter = controls.begin();
1098 iter != controls.end(); ++iter)
1099 { 948 {
1100 LLControlBase* control = *iter; 949 // This is a warning because sometime we want to use settings files which can't be written...
1101 file << "\t<!--" << control->comment() << "-->" << ENDL; 950 llwarns << "Unable to open settings file: " << filename << llendl;
1102 LLString name = control->getName(); 951 return 0;
1103 switch (control->type()) 952 }
1104 { 953 return num_saved;
1105 case TYPE_U32:
1106 {
1107 file << "\t<" << name << " value=\"" << (U32) control->get().asInteger() << "\"/>\n";
1108 break;
1109 }
1110 case TYPE_S32:
1111 {
1112 file << "\t<" << name << " value=\"" << (S32) control->get().asInteger() << "\"/>\n";
1113 break;
1114 }
1115 case TYPE_F32:
1116 {
1117 file << "\t<" << name << " value=\"" << (F32) control->get().asReal() << "\"/>\n";
1118 break;
1119 }
1120 case TYPE_VEC3:
1121 {
1122 LLVector3 vector(control->get());
1123 file << "\t<" << name << " value=\"" << vector.mV[VX] << " " << vector.mV[VY] << " " << vector.mV[VZ] << "\"/>\n";
1124 break;
1125 }
1126 case TYPE_VEC3D:
1127 {
1128 LLVector3d vector(control->get());
1129 file << "\t<" << name << " value=\"" << vector.mdV[VX] << " " << vector.mdV[VY] << " " << vector.mdV[VZ] << "\"/>\n";
1130 break;
1131 }
1132 case TYPE_RECT:
1133 {
1134 LLRect rect(control->get());
1135 file << "\t<" << name << " value=\"" << rect.mLeft << " " << rect.mBottom << " " << rect.getWidth() << " " << rect.getHeight() << "\"/>\n";
1136 break;
1137 }
1138 case TYPE_COL4:
1139 {
1140 LLColor4 color(control->get());
1141 file << "\t<" << name << " value=\"" << color.mV[VRED] << ", " << color.mV[VGREEN] << ", " << color.mV[VBLUE] << ", " << color.mV[VALPHA] << "\"/>\n";
1142 break;
1143 }
1144 case TYPE_COL3:
1145 {
1146 LLColor3 color(control->get());
1147 file << "\t<" << name << " value=\"" << color.mV[VRED] << ", " << color.mV[VGREEN] << ", " << color.mV[VBLUE] << "\"/>\n";
1148 break;
1149 }
1150 case TYPE_BOOLEAN:
1151 {
1152 file << "\t<" << name << " value=\"" << (control->get().asBoolean() ? "TRUE" : "FALSE") << "\"/>\n";
1153 break;
1154 }
1155 case TYPE_STRING:
1156 {
1157 file << "\t<" << name << " value=\"" << LLSDXMLFormatter::escapeString(control->get().asString()) << "\"/>\n";
1158 break;
1159 }
1160 default:
1161 {
1162 CONTROL_ERRS << "LLControlGroup::saveToFile - unknown control type!" << llendl;
1163 break;
1164 }
1165 }
1166
1167 // Debug spam
1168 // llinfos << name << " " << control->getValue().asString() << llendl;
1169 }// next
1170
1171 file << "</settings>\n";
1172 file.close();
1173
1174 return controls.size();
1175} 954}
1176 955
1177void LLControlGroup::applyOverrides(const std::map<std::string, std::string>& overrides) 956U32 LLControlGroup::loadFromFile(const LLString& filename, BOOL require_declaration, eControlType declare_as)
1178{ 957{
1179 for (std::map<std::string, std::string>::const_iterator iter = overrides.begin(); 958 LLString name;
1180 iter != overrides.end(); ++iter) 959 LLSD settings;
960 LLSD control_map;
961 llifstream infile;
962 infile.open(filename.c_str());
963 if(!infile.is_open())
1181 { 964 {
1182 const std::string& command = iter->first; 965 llwarns << "Cannot find file " << filename << " to load." << llendl;
1183 const std::string& value = iter->second; 966 return 0;
1184 LLControlBase* control = (LLControlBase *)mNameTable[command]; 967 }
1185 if (control) 968 S32 ret = LLSDSerialize::fromXML(settings, infile);
1186 { 969 if (ret <= 0)
1187 switch(control->mType) 970 {
1188 { 971 infile.close();
1189 case TYPE_U32: 972 llwarns << "Unable to open LLSD control file " << filename << ". Trying Legacy Method." << llendl;
1190 control->set((LLSD::Integer)atof(value.c_str())); 973 return loadFromFileLegacy(filename, require_declaration, declare_as);
1191 break; 974 }
1192 case TYPE_S32: 975
1193 control->set((S32)atof(value.c_str())); 976 U32 validitems = 0;
1194 break; 977 int persist = 1;
1195 case TYPE_F32: 978 for(LLSD::map_const_iterator itr = settings.beginMap(); itr != settings.endMap(); ++itr)
1196 control->set((F32)atof(value.c_str())); 979 {
1197 break; 980 name = (*itr).first;
1198 case TYPE_BOOLEAN: 981 control_map = (*itr).second;
1199 if (!LLString::compareInsensitive(value.c_str(), "TRUE")) 982
1200 { 983 if(control_map.has("Persist")) persist = control_map["Persist"].asInteger();
1201 control->set(TRUE); 984
1202 } 985 declareControl(name, typeStringToEnum(control_map["Type"].asString()), control_map["Value"], control_map["Comment"].asString(), persist);
1203 else if (!LLString::compareInsensitive(value.c_str(), "FALSE")) 986
1204 { 987 ++validitems;
1205 control->set(FALSE);
1206 }
1207 else
1208 {
1209 control->set((BOOL)atof(value.c_str()));
1210 }
1211 break;
1212 case TYPE_STRING:
1213 control->set(value);
1214 break;
1215// // *FIX: implement this given time and need.
1216// case TYPE_UUID:
1217// break;
1218 // we don't support command line overrides of vec3 or col4
1219 // yet - requires parsing of multiple values
1220 case TYPE_VEC3:
1221 case TYPE_VEC3D:
1222 case TYPE_COL4:
1223 case TYPE_COL3:
1224 default:
1225 break;
1226 }
1227 }
1228 else
1229 {
1230 llinfos << "There is no control variable " << command << llendl;
1231 }
1232 } 988 }
989
990 return validitems;
1233} 991}
1234 992
1235void LLControlGroup::resetToDefaults() 993void LLControlGroup::resetToDefaults()
@@ -1239,11 +997,20 @@ void LLControlGroup::resetToDefaults()
1239 control_iter != mNameTable.end(); 997 control_iter != mNameTable.end();
1240 ++control_iter) 998 ++control_iter)
1241 { 999 {
1242 LLControlBase* control = (*control_iter).second; 1000 LLControlVariable* control = (*control_iter).second;
1243 control->resetToDefault(); 1001 control->resetToDefault();
1244 } 1002 }
1245} 1003}
1246 1004
1005void LLControlGroup::applyToAll(ApplyFunctor* func)
1006{
1007 for (ctrl_name_table_t::iterator iter = mNameTable.begin();
1008 iter != mNameTable.end(); iter++)
1009 {
1010 func->apply(iter->first, iter->second);
1011 }
1012}
1013
1247//============================================================================ 1014//============================================================================
1248// First-use 1015// First-use
1249 1016
@@ -1264,7 +1031,7 @@ static LLString get_warn_name(const LLString& name)
1264void LLControlGroup::addWarning(const LLString& name) 1031void LLControlGroup::addWarning(const LLString& name)
1265{ 1032{
1266 LLString warnname = get_warn_name(name); 1033 LLString warnname = get_warn_name(name);
1267 if(!mNameTable[warnname]) 1034 if(mNameTable.find(warnname) == mNameTable.end())
1268 { 1035 {
1269 LLString comment = LLString("Enables ") + name + LLString(" warning dialog"); 1036 LLString comment = LLString("Enables ") + name + LLString(" warning dialog");
1270 declareBOOL(warnname, TRUE, comment); 1037 declareBOOL(warnname, TRUE, comment);
@@ -1293,91 +1060,6 @@ void LLControlGroup::resetWarnings()
1293 } 1060 }
1294} 1061}
1295 1062
1296
1297
1298//=============================================================================
1299// Listener ID generator/management
1300
1301void LLControlBase::releaseListenerID(S32 id)
1302{
1303 mFreeIDs.push_back(id);
1304}
1305
1306S32 LLControlBase::allocateListenerID()
1307{
1308 if(mFreeIDs.size() == 0)
1309 { //Out of IDs so generate some new ones.
1310 for(int t=0;t<32;t++)
1311 {
1312 mFreeIDs.push_back(mTopID++);
1313 }
1314 }
1315 S32 rtn = mFreeIDs.front();
1316 mFreeIDs.pop_front();
1317 mUsedIDs.push_back(rtn);
1318 return rtn;
1319}
1320
1321bool LLControlBase::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1322{
1323 if (event->desc() == "value_changed")
1324 {
1325 setValue(((LLValueChangedEvent*)(LLEvent*)event)->mValue);
1326 return TRUE;
1327 }
1328 return TRUE;
1329}
1330
1331void LLControlBase::firePropertyChanged()
1332{
1333 LLValueChangedEvent *evt = new LLValueChangedEvent(this, getValue());
1334 fireEvent(evt, "");
1335}
1336
1337//============================================================================
1338// Used to add a listener callback that will be called on the frame that the controls value changes
1339
1340S32 LLControl::addListener(LLControl::tListenerCallback* cbfn)
1341{
1342 S32 id = allocateListenerID();
1343 mListeners.push_back(cbfn);
1344 mListenerIDs.push_back( id );
1345 return id;
1346}
1347
1348void LLControl::updateListeners() {
1349 LLControl::tPropertyChangedListIter iter = mChangeEvents.begin();
1350 while(iter!=mChangeEvents.end()){
1351 LLControl::tPropertyChangedEvent& evt = *iter;
1352 (*evt.mCBFN)(evt.mNewValue,evt.mID,*this);
1353 iter++;
1354 }
1355 mChangeEvents.clear();
1356}
1357
1358//static
1359void LLControlBase::updateAllListeners()
1360{
1361 std::set< LLControlBase* >::iterator iter = mChangedControls.begin();
1362 while(iter != mChangedControls.end()){
1363 (*iter)->updateListeners();
1364 iter++;
1365 }
1366 mChangedControls.clear();
1367}
1368
1369LLControl::LLControl(
1370 const LLString& name,
1371 eControlType type,
1372 LLSD initial,
1373 const LLString& comment,
1374 BOOL persist) :
1375 LLControlBase(name, type, comment, persist),
1376 mCurrent(initial),
1377 mDefault(initial)
1378{
1379}
1380
1381//============================================================================ 1063//============================================================================
1382 1064
1383#ifdef TEST_HARNESS 1065#ifdef TEST_HARNESS
@@ -1393,17 +1075,17 @@ void main()
1393 llinfos << "Loaded " << count << " controls" << llendl; 1075 llinfos << "Loaded " << count << " controls" << llendl;
1394 1076
1395 // test insertion 1077 // test insertion
1396 foo = new LLControl<F32>("gFoo", 5.f, 1.f, 20.f); 1078 foo = new LLControlVariable<F32>("gFoo", 5.f, 1.f, 20.f);
1397 gGlobals.addEntry("gFoo", foo); 1079 gGlobals.addEntry("gFoo", foo);
1398 1080
1399 bar = new LLControl<S32>("gBar", 10, 2, 22); 1081 bar = new LLControlVariable<S32>("gBar", 10, 2, 22);
1400 gGlobals.addEntry("gBar", bar); 1082 gGlobals.addEntry("gBar", bar);
1401 1083
1402 baz = new LLControl<BOOL>("gBaz", FALSE); 1084 baz = new LLControlVariable<BOOL>("gBaz", FALSE);
1403 gGlobals.addEntry("gBaz", baz); 1085 gGlobals.addEntry("gBaz", baz);
1404 1086
1405 // test retrieval 1087 // test retrieval
1406 getfoo = (LLControl<F32>*) gGlobals.resolveName("gFoo"); 1088 getfoo = (LLControlVariable<F32>*) gGlobals.resolveName("gFoo");
1407 getfoo->dump(); 1089 getfoo->dump();
1408 1090
1409 getbar = (S32_CONTROL) gGlobals.resolveName("gBar"); 1091 getbar = (S32_CONTROL) gGlobals.resolveName("gBar");
@@ -1416,10 +1098,10 @@ void main()
1416 // Failure modes 1098 // Failure modes
1417 1099
1418 // ...min > max 1100 // ...min > max
1419 // badfoo = new LLControl<F32>("gFoo2", 100.f, 20.f, 5.f); 1101 // badfoo = new LLControlVariable<F32>("gFoo2", 100.f, 20.f, 5.f);
1420 1102
1421 // ...initial > max 1103 // ...initial > max
1422 // badbar = new LLControl<S32>("gBar2", 10, 20, 100000); 1104 // badbar = new LLControlVariable<S32>("gBar2", 10, 20, 100000);
1423 1105
1424 // ...misspelled name 1106 // ...misspelled name
1425 // getfoo = (F32_CONTROL) gGlobals.resolveName("fooMisspelled"); 1107 // getfoo = (F32_CONTROL) gGlobals.resolveName("fooMisspelled");
@@ -1441,3 +1123,4 @@ void main()
1441} 1123}
1442#endif 1124#endif
1443 1125
1126
diff --git a/linden/indra/llxml/llcontrol.h b/linden/indra/llxml/llcontrol.h
index e717bf1..9e11628 100644
--- a/linden/indra/llxml/llcontrol.h
+++ b/linden/indra/llxml/llcontrol.h
@@ -38,6 +38,26 @@
38#include "llstring.h" 38#include "llstring.h"
39#include "llrect.h" 39#include "llrect.h"
40 40
41#include <vector>
42
43// *NOTE: boost::visit_each<> generates warning 4675 on .net 2003
44// Disable the warning for the boost includes.
45#if LL_WINDOWS
46# if (_MSC_VER >= 1300 && _MSC_VER < 1400)
47# pragma warning(push)
48# pragma warning( disable : 4675 )
49# endif
50#endif
51
52#include <boost/bind.hpp>
53#include <boost/signal.hpp>
54
55#if LL_WINDOWS
56# if (_MSC_VER >= 1300 && _MSC_VER < 1400)
57# pragma warning(pop)
58# endif
59#endif
60
41class LLVector3; 61class LLVector3;
42class LLVector3d; 62class LLVector3d;
43class LLColor4; 63class LLColor4;
@@ -48,7 +68,7 @@ const BOOL NO_PERSIST = FALSE;
48 68
49typedef enum e_control_type 69typedef enum e_control_type
50{ 70{
51 TYPE_U32, 71 TYPE_U32 = 0,
52 TYPE_S32, 72 TYPE_S32,
53 TYPE_F32, 73 TYPE_F32,
54 TYPE_BOOLEAN, 74 TYPE_BOOLEAN,
@@ -58,159 +78,82 @@ typedef enum e_control_type
58 TYPE_RECT, 78 TYPE_RECT,
59 TYPE_COL4, 79 TYPE_COL4,
60 TYPE_COL3, 80 TYPE_COL3,
61 TYPE_COL4U 81 TYPE_COL4U,
82 TYPE_LLSD,
83 TYPE_COUNT
62} eControlType; 84} eControlType;
63 85
64class LLControlBase : public LLSimpleListenerObservable 86class LLControlVariable
65{ 87{
66friend class LLControlGroup; 88 friend class LLControlGroup;
67protected: 89 typedef boost::signal<void(const LLSD&)> signal_t;
90
91private:
68 LLString mName; 92 LLString mName;
69 LLString mComment; 93 LLString mComment;
70 eControlType mType; 94 eControlType mType;
71 BOOL mHasRange;
72 BOOL mPersist; 95 BOOL mPersist;
73 BOOL mIsDefault; 96 std::vector<LLSD> mValues;
74 97
75 static std::set<LLControlBase*> mChangedControls; 98 signal_t mSignal;
76 static std::list<S32> mFreeIDs;//These lists are used to store the ID's of registered event listeners. 99
77 static std::list<S32> mUsedIDs;
78 static S32 mTopID;//This is the index of the highest ID event listener ID. When the free pool is exhausted, new IDs are allocated from here.
79
80public: 100public:
81 static void releaseListenerID(S32 id); 101 LLControlVariable(const LLString& name, eControlType type,
82 static S32 allocateListenerID(); 102 LLSD initial, const LLString& comment,
83 static void updateAllListeners(); 103 BOOL persist = TRUE);
84 virtual void updateListeners() = 0;
85
86 LLControlBase(const LLString& name, eControlType type, const LLString& comment, BOOL persist)
87 : mName(name),
88 mComment(comment),
89 mType(type),
90 mHasRange(FALSE),
91 mPersist(persist),
92 mIsDefault(TRUE)
93 {
94 if (mPersist && mComment.empty())
95 {
96 llerrs << "Must supply a comment for control " << mName << llendl;
97 }
98 sMaxControlNameLength = llmax((U32)mName.size(), sMaxControlNameLength);
99 }
100
101 virtual ~LLControlBase();
102 104
105 virtual ~LLControlVariable();
106
103 const LLString& getName() const { return mName; } 107 const LLString& getName() const { return mName; }
104 const LLString& getComment() const { return mComment; } 108 const LLString& getComment() const { return mComment; }
105 109
106 eControlType type() { return mType; } 110 eControlType type() { return mType; }
107 BOOL isType(eControlType tp) { return tp == mType; } 111 BOOL isType(eControlType tp) { return tp == mType; }
108 112
109 // Defaults to no-op 113 void resetToDefault(bool fire_signal = TRUE);
110 virtual void resetToDefault(); 114
111 115 signal_t* getSignal() { return &mSignal; }
112 LLSD registerListener(LLSimpleListenerObservable *listener, LLSD userdata = ""); 116
113 117 bool isDefault() { return (mValues.size() == 1); }
114 virtual LLSD get() const = 0; 118 bool isSaveValueDefault();
115 virtual LLSD getValue() const = 0; 119 bool isPersisted() { return mPersist; }
116 virtual void setValue(LLSD value) = 0; 120 void set(const LLSD& val) { setValue(val); }
117 virtual void set(LLSD value) = 0; 121 LLSD get() const { return getValue(); }
118 122 LLSD getDefault() const { return mValues.front(); }
119 // From LLSimpleListener 123 LLSD getValue() const { return mValues.back(); }
120 virtual bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata); 124 LLSD getSaveValue() const;
121 125 void setValue(const LLSD& value, bool saved_value = TRUE);
122 void firePropertyChanged(); 126 void firePropertyChanged()
123
124 static U32 sMaxControlNameLength;
125
126protected:
127 const char* name() { return mName.c_str(); }
128 const char* comment() { return mComment.c_str(); }
129};
130
131class LLControl
132: public LLControlBase
133{
134friend class LLControlGroup;
135protected:
136 LLSD mCurrent;
137 LLSD mDefault;
138
139public:
140
141 typedef void tListenerCallback(const LLSD& newValue,S32 listenerID, LLControl& control);
142 typedef struct{
143 S32 mID;
144 LLSD mNewValue;
145 tListenerCallback* mCBFN;
146 }tPropertyChangedEvent;
147
148 typedef std::list<tPropertyChangedEvent>::iterator tPropertyChangedListIter;
149 std::list<tPropertyChangedEvent> mChangeEvents;
150 std::list< tListenerCallback* > mListeners;
151 std::list< S32 > mListenerIDs;
152
153 virtual void updateListeners();
154 S32 addListener(tListenerCallback* cbfn);
155
156 LLControl(
157 const LLString& name,
158 eControlType type,
159 LLSD initial, const
160 LLString& comment,
161 BOOL persist = TRUE);
162
163 void set(LLSD val) { setValue(val); }
164 LLSD get() const { return getValue(); }
165 LLSD getdefault() const { return mDefault; }
166 LLSD getValue() const { return mCurrent; }
167 BOOL llsd_compare(const LLSD& a, const LLSD& b);
168
169 void setValue(LLSD value)
170 {
171 if (llsd_compare(mCurrent, value) == FALSE)
172 {
173 mCurrent = value;
174 mIsDefault = llsd_compare(mCurrent, mDefault);
175 firePropertyChanged();
176 }
177 }
178
179 /*virtual*/ void resetToDefault()
180 {
181 setValue(mDefault);
182 }
183
184 virtual ~LLControl()
185 { 127 {
186 //Remove and deregister all listeners.. 128 mSignal(mValues.back());
187 while(mListenerIDs.size())
188 {
189 S32 id = mListenerIDs.front();
190 mListenerIDs.pop_front();
191 releaseListenerID(id);
192 }
193 } 129 }
130 BOOL llsd_compare(const LLSD& a, const LLSD& b);
194}; 131};
195 132
196//const U32 STRING_CACHE_SIZE = 10000; 133//const U32 STRING_CACHE_SIZE = 10000;
197class LLControlGroup 134class LLControlGroup
198{ 135{
199public: 136protected:
200 typedef std::map<LLString, LLPointer<LLControlBase> > ctrl_name_table_t; 137 typedef std::map<LLString, LLControlVariable* > ctrl_name_table_t;
201 ctrl_name_table_t mNameTable; 138 ctrl_name_table_t mNameTable;
202 std::set<LLString> mWarnings; 139 std::set<LLString> mWarnings;
203 std::set<LLString> mLoadedSettings; // Filled in with names loaded from settings.xml 140 LLString mTypeString[TYPE_COUNT];
204 141
142 eControlType typeStringToEnum(const LLString& typestr);
143 LLString typeEnumToString(eControlType typeenum);
205public: 144public:
206 LLControlGroup(); 145 LLControlGroup();
207 ~LLControlGroup(); 146 ~LLControlGroup();
208 void cleanup(); 147 void cleanup();
209 bool hasLoaded(const LLString& name) { return mLoadedSettings.find(name) != mLoadedSettings.end(); }
210 void clearLoaded() { mLoadedSettings.clear(); } // Call once we've done any settings tweaks which may need this data
211 148
212 LLControlBase* getControl(const LLString& name); 149 LLControlVariable* getControl(const LLString& name);
213 LLSD registerListener(const LLString& name, LLSimpleListenerObservable *listener); 150
151 struct ApplyFunctor
152 {
153 virtual ~ApplyFunctor() {};
154 virtual void apply(const LLString& name, LLControlVariable* control) = 0;
155 };
156 void applyToAll(ApplyFunctor* func);
214 157
215 BOOL declareControl(const LLString& name, eControlType type, const LLSD initial_val, const LLString& comment, BOOL persist); 158 BOOL declareControl(const LLString& name, eControlType type, const LLSD initial_val, const LLString& comment, BOOL persist);
216 BOOL declareU32(const LLString& name, U32 initial_val, const LLString& comment, BOOL persist = TRUE); 159 BOOL declareU32(const LLString& name, U32 initial_val, const LLString& comment, BOOL persist = TRUE);
@@ -224,6 +167,7 @@ public:
224 BOOL declareColor4U(const LLString& name, const LLColor4U &initial_val, const LLString& comment, BOOL persist = TRUE); 167 BOOL declareColor4U(const LLString& name, const LLColor4U &initial_val, const LLString& comment, BOOL persist = TRUE);
225 BOOL declareColor4(const LLString& name, const LLColor4 &initial_val, const LLString& comment, BOOL persist = TRUE); 168 BOOL declareColor4(const LLString& name, const LLColor4 &initial_val, const LLString& comment, BOOL persist = TRUE);
226 BOOL declareColor3(const LLString& name, const LLColor3 &initial_val, const LLString& comment, BOOL persist = TRUE); 169 BOOL declareColor3(const LLString& name, const LLColor3 &initial_val, const LLString& comment, BOOL persist = TRUE);
170 BOOL declareLLSD(const LLString& name, const LLSD &initial_val, const LLString& comment, BOOL persist = TRUE);
227 171
228 LLString findString(const LLString& name); 172 LLString findString(const LLString& name);
229 173
@@ -237,7 +181,7 @@ public:
237 S32 getS32(const LLString& name); 181 S32 getS32(const LLString& name);
238 F32 getF32(const LLString& name); 182 F32 getF32(const LLString& name);
239 U32 getU32(const LLString& name); 183 U32 getU32(const LLString& name);
240 LLSD getValue(const LLString& name); 184 LLSD getLLSD(const LLString& name);
241 185
242 186
243 // Note: If an LLColor4U control exists, it will cast it to the correct 187 // Note: If an LLColor4U control exists, it will cast it to the correct
@@ -258,19 +202,21 @@ public:
258 void setColor4U(const LLString& name, const LLColor4U &val); 202 void setColor4U(const LLString& name, const LLColor4U &val);
259 void setColor4(const LLString& name, const LLColor4 &val); 203 void setColor4(const LLString& name, const LLColor4 &val);
260 void setColor3(const LLString& name, const LLColor3 &val); 204 void setColor3(const LLString& name, const LLColor3 &val);
205 void setLLSD(const LLString& name, const LLSD& val);
261 void setValue(const LLString& name, const LLSD& val); 206 void setValue(const LLString& name, const LLSD& val);
262 207
208
263 BOOL controlExists(const LLString& name); 209 BOOL controlExists(const LLString& name);
264 210
265 // Returns number of controls loaded, 0 if failed 211 // Returns number of controls loaded, 0 if failed
266 // If require_declaration is false, will auto-declare controls it finds 212 // If require_declaration is false, will auto-declare controls it finds
267 // as the given type. 213 // as the given type.
268 U32 loadFromFileLegacy(const LLString& filename, BOOL require_declaration = TRUE, eControlType declare_as = TYPE_STRING); 214 U32 loadFromFileLegacy(const LLString& filename, BOOL require_declaration = TRUE, eControlType declare_as = TYPE_STRING);
269 U32 loadFromFile(const LLString& filename, BOOL require_declaration = TRUE, eControlType declare_as = TYPE_STRING); 215 U32 saveToFile(const LLString& filename, BOOL nondefault_only);
270 U32 saveToFile(const LLString& filename, BOOL skip_if_default); 216 U32 loadFromFile(const LLString& filename, BOOL require_declaration = TRUE, eControlType declare_as = TYPE_STRING);
271 void applyOverrides(const std::map<std::string, std::string>& overrides);
272 void resetToDefaults(); 217 void resetToDefaults();
273 218
219
274 // Ignorable Warnings 220 // Ignorable Warnings
275 221
276 // Add a config variable to be reset on resetWarnings() 222 // Add a config variable to be reset on resetWarnings()
diff --git a/linden/indra/lscript/lscript_byteconvert.h b/linden/indra/lscript/lscript_byteconvert.h
index a9b0094..e17f3fc 100644
--- a/linden/indra/lscript/lscript_byteconvert.h
+++ b/linden/indra/lscript/lscript_byteconvert.h
@@ -166,8 +166,15 @@ inline void bytestream_int2float(U8 *stream, S32 &offset)
166inline bool bytestream2char(char *buffer, const U8 *stream, S32 &offset, S32 buffsize) 166inline bool bytestream2char(char *buffer, const U8 *stream, S32 &offset, S32 buffsize)
167{ 167{
168 S32 source_len = strlen( (const char *)stream+offset ); 168 S32 source_len = strlen( (const char *)stream+offset );
169 strncpy( buffer, (const char *)stream+offset, buffsize-1 ); 169 S32 copy_len = buffsize - 1;
170 buffer[buffsize-1] = 0; 170 if( copy_len > source_len )
171 {
172 copy_len = source_len;
173 }
174
175 // strncpy without \0 padding overhead
176 memcpy( buffer, stream+offset, copy_len );
177 buffer[copy_len] = 0;
171 178
172 offset += source_len + 1; // advance past source string, include terminating '\0' 179 offset += source_len + 1; // advance past source string, include terminating '\0'
173 180
@@ -1073,28 +1080,20 @@ inline void safe_instruction_float2bytestream(U8 *stream, S32 &offset, F32 value
1073 1080
1074inline void safe_instruction_bytestream2char(char *buffer, U8 *stream, S32 &offset, S32 buffsize) 1081inline void safe_instruction_bytestream2char(char *buffer, U8 *stream, S32 &offset, S32 buffsize)
1075{ 1082{
1076 bool safe; 1083 // This varies from the old method. Previously, we would copy up until we got an error,
1077 while ( (safe = safe_instruction_check_address(stream, offset, 1)) 1084 // then halt the script via safe_isntruction_check_address. Now we don't bother
1078 && buffsize-- 1085 // copying a thing if there's an error.
1079 &&(*buffer++ = *(stream + offset++)))
1080 ;
1081 1086
1082 // Return if it ended in a null (success) or if script error handling is taking over 1087 if( safe_instruction_check_address(stream, offset, strlen( (const char *)stream + offset ) + 1 ) )
1083 if( !safe || (0 == *(buffer-1)) )
1084 { 1088 {
1085 return; // Yep. Success. 1089 // Takes the same parms as this function. Won't overread, per above check.
1090 bytestream2char( buffer, stream, offset, buffsize );
1091 }
1092 else
1093 {
1094 // Truncate - no point in copying
1095 *buffer = 0;
1086 } 1096 }
1087
1088 // Defensive mode. We copied at least one char and ran out of space before
1089 // null termination. Add the terminator...
1090 *(buffer-1) = 0;
1091
1092 // ...and advance offset past the end of the data as if we copied the rest. If we
1093 // violate the safety check, script error handling will protect us. No need to
1094 // keep advancing.
1095 while( safe_instruction_check_address(stream, offset, 1)
1096 && *( stream + offset++ ) )
1097 ;
1098} 1097}
1099 1098
1100inline void safe_instruction_bytestream_count_char(U8 *stream, S32 &offset) 1099inline void safe_instruction_bytestream_count_char(U8 *stream, S32 &offset)
diff --git a/linden/indra/lscript/lscript_compile/indra.l b/linden/indra/lscript/lscript_compile/indra.l
index c8458a3..8bb26ab 100644
--- a/linden/indra/lscript/lscript_compile/indra.l
+++ b/linden/indra/lscript/lscript_compile/indra.l
@@ -445,6 +445,7 @@ extern "C" { int yyerror(const char *fmt, ...); }
445"PRIM_BUMP_SHINY" { count(); yylval.ival = LSL_PRIM_BUMP_SHINY; return(INTEGER_CONSTANT); } 445"PRIM_BUMP_SHINY" { count(); yylval.ival = LSL_PRIM_BUMP_SHINY; return(INTEGER_CONSTANT); }
446"PRIM_FULLBRIGHT" { count(); yylval.ival = LSL_PRIM_FULLBRIGHT; return(INTEGER_CONSTANT); } 446"PRIM_FULLBRIGHT" { count(); yylval.ival = LSL_PRIM_FULLBRIGHT; return(INTEGER_CONSTANT); }
447"PRIM_TEXGEN" { count(); yylval.ival = LSL_PRIM_TEXGEN; return(INTEGER_CONSTANT); } 447"PRIM_TEXGEN" { count(); yylval.ival = LSL_PRIM_TEXGEN; return(INTEGER_CONSTANT); }
448"PRIM_GLOW" { count(); yylval.ival = LSL_PRIM_GLOW; return(INTEGER_CONSTANT); }
448 449
449"PRIM_TYPE_BOX" { count(); yylval.ival = LSL_PRIM_TYPE_BOX; return(INTEGER_CONSTANT); } 450"PRIM_TYPE_BOX" { count(); yylval.ival = LSL_PRIM_TYPE_BOX; return(INTEGER_CONSTANT); }
450"PRIM_TYPE_CYLINDER" { count(); yylval.ival = LSL_PRIM_TYPE_CYLINDER; return(INTEGER_CONSTANT); } 451"PRIM_TYPE_CYLINDER" { count(); yylval.ival = LSL_PRIM_TYPE_CYLINDER; return(INTEGER_CONSTANT); }
diff --git a/linden/indra/mac_updater/mac_updater.cpp b/linden/indra/mac_updater/mac_updater.cpp
index 623db1f..b7773e2 100644
--- a/linden/indra/mac_updater/mac_updater.cpp
+++ b/linden/indra/mac_updater/mac_updater.cpp
@@ -416,6 +416,7 @@ int main(int argc, char **argv)
416 if(err == noErr) 416 if(err == noErr)
417 { 417 {
418 ShowWindow(gWindow); 418 ShowWindow(gWindow);
419 SelectWindow(gWindow);
419 } 420 }
420 421
421 if(err == noErr) 422 if(err == noErr)
diff --git a/linden/indra/newview/app_settings/cmd_line.xml b/linden/indra/newview/app_settings/cmd_line.xml
new file mode 100644
index 0000000..3e6fa21
--- /dev/null
+++ b/linden/indra/newview/app_settings/cmd_line.xml
@@ -0,0 +1,335 @@
1<?xml version="1.0"?>
2<llsd>
3 <map>
4 <key>help</key>
5 <map>
6 <key>desc</key>
7 <string>display this help message</string>
8
9 <key>short</key>
10 <string>h</string>
11 </map>
12
13 <key>port</key>
14 <map>
15 <key>count</key>
16 <integer>1</integer>
17 <key>map-to</key>
18 <string>UserConnectionPort</string>
19 </map>
20
21 <key>drop</key>
22 <map>
23 <key>count</key>
24 <integer>1</integer>
25 <key>map-to</key>
26 <string>PacketDropPercentage</string>
27 </map>
28
29 <key>inbw</key>
30 <map>
31 <key>count</key>
32 <integer>1</integer>
33 <key>map-to</key>
34 <string>InBandwidth</string>
35 </map>
36
37 <key>outbw</key>
38 <map>
39 <key>count</key>
40 <integer>1</integer>
41 <key>map-to</key>
42 <string>OutBandwidth</string>
43 </map>
44
45 <key>grid</key>
46 <map>
47 <key>desc</key>
48 <string>Specify the name of the grid, local, or an IP address to connect to.</string>
49 <key>count</key>
50 <integer>1</integer>
51 <key>map-to</key>
52 <string>GridChoice</string>
53 </map>
54
55 <key>loginuri</key>
56 <map>
57 <key>desc</key>
58 <string>login server and CGI script to use</string>
59 <key>count</key>
60 <integer>1</integer>
61 <key>compose</key>
62 <boolean>true</boolean>
63 <key>map-to</key>
64 <string>LoginURI</string>
65 </map>
66
67 <key>helperuri</key>
68 <map>
69 <key>desc</key>
70 <string>helper web CGI prefix to use</string>
71 <key>count</key>
72 <integer>1</integer>
73 <key>map-to</key>
74 <string>HelperURI</string>
75 </map>
76
77 <key>debugviews</key>
78 <map>
79 <key>map-to</key>
80 <string>DebugViews</string>
81 </map>
82
83 <key>skin</key>
84 <map>
85 <key>desc</key>
86 <string>ui/branding skin folder to use</string>
87 <key>count</key>
88 <integer>1</integer>
89 <key>map-to</key>
90 <string>SkinFolder</string>
91 </map>
92
93 <key>autologin</key>
94 <map>
95 <key>desc</key>
96 <string>log in as last saved user</string>
97 <key>map-to</key>
98 <string>AutoLogin</string>
99 </map>
100
101 <key>quitafter</key>
102 <map>
103 <key>count</key>
104 <integer>1</integer>
105 <key>map-to</key>
106 <string>QuitAfterSeconds</string>
107 </map>
108
109 <key>rotate</key>
110 <map>
111 <key>map-to</key>
112 <string>RotateRight</string>
113 </map>
114
115 <key>noaudio</key>
116 <map>
117 <key>map-to</key>
118 <string>NoAudio</string>
119 </map>
120
121 <key>nosound</key>
122 <map>
123 <key>map-to</key>
124 <string>NoAudio</string>
125 </map>
126
127 <key>noprobe</key>
128 <map>
129 <key>map-to</key>
130 <string>NoHardwareProbe</string>
131 </map>
132
133 <key>noquicktime</key>
134 <map>
135 <key>map-to</key>
136 <string>NoQuickTime</string>
137 </map>
138
139 <key>nopreload</key>
140 <map>
141 <key>map-to</key>
142 <string>NoPreload</string>
143 </map>
144
145 <key>purge</key>
146 <map>
147 <key>desc</key>
148 <string>Delete files in the cache.</string>
149 <key>map-to</key>
150 <string>PurgeCacheOnNextStartup</string>
151 </map>
152
153 <key>noinvlib</key>
154 <map>
155 <key>desc</key>
156 <string>Do not request the inventory library.</string>
157 <key>map-to</key>
158 <string>NoInventoryLibrary</string>
159 </map>
160
161 <key>logfile</key>
162 <map>
163 <key>count</key>
164 <integer>1</integer>
165 <key>map-to</key>
166 <string>UserLogFile</string>
167 </map>
168
169 <key>setdefault</key>
170 <map>
171 <key>desc</key>
172 <string> specify the value of a particular
173 configuration variable which can be
174 overridden by settings.xml
175 </string>
176 <key>count</key>
177 <integer>2</integer>
178 <!-- Special case. Mapped to settings procedurally. -->
179 </map>
180
181 <key>set</key>
182 <map>
183 <key>desc</key>
184 <string> specify the value of a particular
185 configuration variable that
186 overrides all other settings
187 </string>
188 <key>count</key>
189 <integer>2</integer>
190 <!-- Special case. Mapped to settings procedurally. -->
191 </map>
192
193 <key>settings</key>
194 <map>
195 <key>desc</key>
196 <string>Specify the filename of a configuration file.</string>
197 <key>count</key>
198 <integer>1</integer>
199 <!-- Special case. Mapped to settings procedurally. -->
200 </map>
201
202 <key>login</key>
203 <map>
204 <key>desc</key>
205 <string>3 tokens: first, last and password</string>
206 <key>count</key>
207 <integer>3</integer>
208 <key>map-to</key>
209 <string>UserLoginInfo</string>
210 </map>
211
212 <key>god</key>
213 <map>
214 <key>desc</key>
215 <string>Log in a god if you have god access.</string>
216 <key>map-to</key>
217 <string>ConnectAsGod</string>
218 </map>
219
220 <key>console</key>
221 <map>
222 <key>count</key>
223 <integer>1</integer>
224 <key>map-to</key>
225 <string>ShowConsoleWindow</string>
226 </map>
227
228 <key>safe</key>
229 <map>
230 <key>desc</key>
231 <string>Reset preferences, run in safe mode.</string>
232 <key>map-to</key>
233 <string>SafeMode</string>
234 </map>
235
236 <key>multiple</key>
237 <map>
238 <key>desc</key>
239 <string>Allow multple viewers.</string>
240 <key>map-to</key>
241 <string>AllowMultipleViewers</string>
242 </map>
243
244 <key>novoice</key>
245 <map>
246 <key>desc</key>
247 <string>Disable voice.</string>
248 <key>map-to</key>
249 <string>CmdLineDisableVoice</string>
250 </map>
251
252 <key>url</key>
253 <map>
254 <key>desc</key>
255 <string>Startup location</string>
256 <key>count</key>
257 <integer>1</integer>
258 <key>last_option</key>
259 <boolean>true</boolean>
260 <!-- Special case. Not mapped to a setting. -->
261 </map>
262
263 <key>slurl</key>
264 <map>
265 <key>desc</key>
266 <string>Startup SLurl</string>
267 <key>count</key>
268 <integer>1</integer>
269 <key>positional</key>
270 <boolean>true</boolean>
271 <key>last_option</key>
272 <boolean>true</boolean>
273 <!-- Special case. Not mapped to a setting. -->
274 </map>
275
276 <key>ignorepixeldepth</key>
277 <map>
278 <key>desc</key>
279 <string>Ignore pixel depth settings.</string>
280 <key>map-to</key>
281 <string>IgnorePixelDepth</string>
282 </map>
283
284 <key>cooperative</key>
285 <map>
286 <key>desc</key>
287 <string>Yield some idle time to local host.</string>
288 <key>count</key>
289 <integer>1</integer>
290 <key>map-to</key>
291 <string>YieldTime</string>
292 </map>
293
294 <key>no-verify-ssl-cert</key>
295 <map>
296 <key>map-to</key>
297 <string>NoVerifySSLCert</string>
298 </map>
299
300 <key>channel</key>
301 <map>
302 <key>count</key>
303 <integer>1</integer>
304 <key>map-to</key>
305 <string>VersionChannelName</string>
306 </map>
307
308 <key>loginpage</key>
309 <map>
310 <key>desc</key>
311 <string>Login authentication page to use.</string>
312 <key>count</key>
313 <integer>1</integer>
314 <key>map-to</key>
315 <string>LoginPage</string>
316 </map>
317
318 <key>qa</key>
319 <map>
320 <key>desc</key>
321 <string>Activated debugging menu in Advanced Settings.</string>
322 <key>map-to</key>
323 <string>QAMode</string>
324 </map>
325
326 <key>crashonstartup</key>
327 <map>
328 <key>desc</key>
329 <string>Crashes on startup. For QA use.</string>
330 <key>map-to</key>
331 <string>CrashOnStartup</string>
332 </map>
333
334 </map>
335</llsd>
diff --git a/linden/indra/newview/app_settings/colors.ini b/linden/indra/newview/app_settings/colors.ini
deleted file mode 100644
index b4d1e85..0000000
--- a/linden/indra/newview/app_settings/colors.ini
+++ /dev/null
@@ -1,20 +0,0 @@
1version 101
2// colors.ini
3// Use this file to provide your own custom colors for the
4// Second Life user interface.
5//
6// Copy lines here from colors_base.ini and modify them
7// to your heart's content.
8//
9// The colors are in the format: <red> <green> <blue> <alpha>
10// 0 0 0 255 = black, fully opaque
11// 255 255 255 255 = white, fully opaque
12// 0 0 0 128 = black, half transparent
13//
14// The file version must appear before any comments.
15// Comments must start at the beginning of a line.
16// Set tab stops to 4 for best alignment.
17//
18// Example:
19// Make avatar names bright green:
20// AvatarNameColor 0 255 0 255
diff --git a/linden/indra/newview/app_settings/colors_base.xml b/linden/indra/newview/app_settings/colors_base.xml
index ded1eb2..d793116 100644
--- a/linden/indra/newview/app_settings/colors_base.xml
+++ b/linden/indra/newview/app_settings/colors_base.xml
@@ -1,160 +1,180 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes"?> 1<?xml version="1.0" encoding="utf-8" standalone="yes"?>
2<settings version = "101"> 2<settings version = "101">
3 3
4<!-- Color of the names over avatar heads --> 4<!-- WINDOWS -->
5<AvatarNameColor value="251, 175, 93, 255"/> 5<TitleBarFocusColor value="50, 115, 185, 120" /> <!-- Focused window title bar highlight, no equivalent for unfocused windows -->
6 6<FloaterFocusBorderColor value="50, 115, 185, 75" />
7<BalanceTextColor value="0, 255, 0, 255"/> 7<FloaterUnfocusBorderColor value="110, 110, 110, 60" />
8 8<FocusBackgroundColor value="165, 180, 200, 245" /> <!-- Background color of focused floaters -->
9<!-- These are "blended" with the button graphics, and hence should --> 9<DefaultBackgroundColor value="165, 180, 200, 128" /> <!-- Background color for unfocused floaters -->
10<!-- usually be left as opaque white. --> 10<ColorDropShadow value="0, 0, 0, 200" /> <!-- The drop shadow behind windows and menus -->
11<ButtonColor value="255, 255, 255, 255"/> 11<DefaultHighlightDark value="50, 115, 185, 255" />
12<ButtonImageColor value="255, 255, 255, 255"/> 12<DefaultHighlightLight value="50, 115, 185, 255" />
13<!-- Match the caution dialog buttons to the default --> 13<DefaultShadowDark value="50, 115, 185, 255" />
14<ButtonCautionImageColor value="255, 255, 255, 255"/> 14<DefaultShadowLight value="50, 115, 185, 255" />
15 15
16<!-- Text labels for buttons, like the "OK" text --> 16<!-- LABELS -->
17<ButtonLabelColor value="220, 220, 220, 255"/> 17<LabelDisabledColor value="0, 30, 60, 128" />
18<ButtonLabelSelectedColor value="220, 220, 220, 255"/> 18<LabelSelectedColor value="255, 255, 255, 255" />
19<ButtonLabelDisabledColor value="147, 169, 213, 200"/> 19<LabelSelectedDisabledColor value="164, 190, 237, 128" />
20<ButtonLabelSelectedDisabledColor value="164, 190, 237, 200"/> 20<LabelTextColor value="0, 30, 60, 255" />
21 21
22<ButtonSelectedBgColor value="62, 62, 62, 255"/> 22<!-- LOGIN -->
23<ButtonSelectedColor value="255, 255, 255, 255"/> 23<LoginProgressBarBgColor value="255, 255, 255, 255" />
24<ButtonUnselectedBgColor value="62, 62, 62, 255"/> 24<LoginProgressBarFgColor value="255, 255, 255, 255" />
25<ButtonUnselectedFgColor value="255, 255, 255, 255"/> 25<LoginProgressBoxBorderColor value="0, 30, 60, 0" />
26<ButtonBorderColor value="238, 156, 0, 255"/> 26<LoginProgressBoxCenterColor value="0, 0, 0, 200" />
27 27<LoginProgressBoxShadowColor value="0, 0, 0, 200" />
28<!-- Chat History dialog --> 28<LoginProgressBoxTextColor value="255, 255, 255, 255"/>
29<ChatHistoryBgColor value="0, 0, 0, 0"/> 29
30<ChatHistoryTextColor value="255, 255, 255, 255"/> 30<!-- BUTTONS -->
31 31<ButtonLabelColor value="0, 30, 60, 255" /> <!-- Text labels for buttons, like the "OK" text -->
32<!-- The floater buttons (like the close box) are white images that receive this color. --> 32<ButtonLabelSelectedColor value="255, 255, 255, 255" />
33<FloaterButtonImageColor value="239, 156, 0, 255"/> 33<ButtonLabelDisabledColor value="0, 30, 60, 128" />
34 34<ButtonLabelSelectedDisabledColor value="0, 30, 60, 128" />
35<!-- The drop shadow behind windows and menus. --> 35<ButtonSelectedBgColor value="62, 62, 62, 255" />
36<!-- The button one is baked into the graphic. --> 36<ButtonSelectedColor value="255, 255, 255, 255" />
37<ColorDropShadow value="0, 0, 0, 200"/> 37<ButtonUnselectedBgColor value="62, 62, 62, 255" />
38<!-- Background color for unfocused floaters --> 38<ButtonUnselectedFgColor value="255, 255, 255, 255" />
39<DefaultBackgroundColor value="62, 62, 62, 140"/> 39<ButtonBorderColor value="239, 156, 0, 255" />
40<DefaultHighlightDark value="26, 26, 26, 255"/> 40<ButtonColor value="255, 255, 255, 255" /> <!-- Blended with button art, usually left as opaque white -->
41<DefaultHighlightLight value="115, 132, 155, 255"/> 41<ButtonImageColor value="255, 255, 255, 255" /> <!-- Blended with button art, usually left as opaque white -->
42<DefaultShadowDark value="26, 26, 26, 255"/> 42
43<DefaultShadowLight value="0, 0, 0, 255"/> 43<!-- SLIDERS -->
44 44<SliderDisabledThumbColor value="0, 0, 0, 255" />
45<!-- Color of the rectangle around entry fields with keyboard focus. --> 45<SliderThumbCenterColor value="255, 255, 255, 255" />
46<FocusColor value="238, 156, 0, 255"/> 46<SliderThumbOutlineColor value="37, 64, 99, 255" />
47<FloaterFocusBorderColor value="0, 0, 0, 80"/> 47<SliderTrackColor value="37, 64, 99, 255" />
48<FloaterUnfocusBorderColor value="0, 0, 0, 80"/> 48
49<TitleBarFocusColor value="255, 255, 255, 30" /> 49<!-- TEXTFIELDS -->
50 50<TextBgFocusColor value="255, 255, 255, 255" /> <!-- Text field background when receiving input (focused) -->
51<!-- Edit mode grid --> 51<TextBgReadOnlyColor value="210, 220, 230, 255" /> <!-- Text field background when read-only -->
52<GridFocusPointColor value="255, 255, 255, 128"/> 52<TextBgWriteableColor value="255, 255, 255, 255" /> <!-- Text field background when not receiving input (unfocused) -->
53<GridlineColor value="255, 255, 255, 255"/> 53<TextCursorColor value="0, 0, 0, 255" />
54<GridlineBGColor value="235, 235, 255, 200"/> 54<TextFgColor value="45, 48, 45, 255" />
55<GridlineShadowColor value="0, 0, 0, 80"/> 55<TextFgReadOnlyColor value="0, 0, 0, 200" />
56 56<TextFgTentativeColor value="0, 0, 0, 128" />
57<HealthTextColor value="255, 255, 255, 255"/> 57<TextEmbeddedItemReadOnlyColor value="58, 147, 242, 255" /> <!-- i.e. About Land name that you don't own -->
58 58<TextEmbeddedItemColor value="0, 0, 128, 255" />
59<HelpBgColor value="200, 209, 204, 255"/> 59<TextDefaultColor value="0, 20, 0, 255"/>
60<HelpFgColor value="0, 0, 0, 255"/> 60
61 61<!-- LISTBOXES -->
62<HelpScrollTrackColor value="183, 184, 188, 255"/> 62<ScrollBgReadOnlyColor value="255, 255, 255, 140" />
63<HelpScrollThumbColor value="80, 96, 124, 255"/> 63<ScrollBgWriteableColor value="255, 255, 255, 140" />
64<HelpScrollHighlightColor value="115, 132, 155, 255"/> 64<ScrollBGStripeColor value="145, 180, 220, 60" />
65<HelpScrollShadowColor value="0, 0, 0, 255"/> 65<ScrollDisabledColor value="128, 128, 128, 204" />
66<ScrollSelectedBGColor value="50, 115, 185, 150" />
67<ScrollSelectedFGColor value="0, 30, 60, 255" /> <!-- Text color -->
68<ScrollUnselectedColor value="0, 30, 60, 255" /> <!-- Text color -->
69<ScrollHighlightedColor value="145, 180, 220, 128" /> <!-- Hover color -->
70<ScrollbarThumbColor value="120, 160, 200, 255" />
71<ScrollbarTrackColor value="183, 202, 220, 255" />
72
73<!-- MENUS -->
74<MenuBarBgColor value="185, 200, 220, 230" />
75<MenuBarGodBgColor value="100, 200, 130, 230" />
76<MenuNonProductionGodBgColor value="100, 200, 130, 230" />
77<MenuNonProductionBgColor value="230, 70, 70, 230" />
78<MenuDefaultBgColor value="210, 220, 230, 245" />
79<MenuItemDisabledColor value="0, 30, 60, 128" /> <!-- Menu text color; also text color for pie menus and treeviews (like Inventory) -->
80<MenuItemEnabledColor value="0, 30, 60, 255" /> <!-- Menu text color; also text color for pie menus and treeviews (like Inventory) -->
81<MenuItemHighlightBgColor value="50, 115, 185, 100" />
82<MenuItemHighlightFgColor value="0, 30, 60, 255" /> <!-- Highlighted menu text color; also treeview node selection highlight -->
83<MenuPopupBgColor value="197, 217, 234, 240" />
84
85<!-- PIE MENUS -->
86<PieMenuBgColor value="118, 156, 201, 230" />
87<PieMenuLineColor value="255, 255, 255, 60" />
88<PieMenuSelectedColor value="185, 200, 220, 120" />
89
90<!-- TOOLTIPS -->
91<ToolTipBgColor value="250, 255, 225, 230" />
92<ToolTipBorderColor value="171, 212, 245, 255" />
93<ToolTipTextColor value="0, 0, 0, 255" />
94
95<!-- NOTIFICATION POP-UPS -->
96<NotifyBoxColor value="170, 210, 255, 240" />
97<NotifyTextColor value="0, 30, 60, 255" />
98<NotifyCautionBoxColor value="254, 209, 118, 255" /> <!-- the background color of caution permissions prompts -->
99<NotifyCautionWarnColor value="0, 0, 0, 255" /> <!-- the foreground color of the special title text in caution permissions prompts -->
100<GroupNotifyBoxColor value="170, 210, 255, 240" />
101<GroupNotifyTextColor value="0, 30, 60, 255" />
102
103<!-- CHAT AND IM HISTORY TEXTBOX COLORS -->
104<ChatHistoryBgColor value="0, 30, 80, 200" />
105<ChatHistoryTextColor value="255, 255, 255, 255" />
106<IMHistoryBgColor value="0, 30, 80, 200" />
107<IMHistoryTextColor value="255, 255, 255, 255" />
108
109<!-- IN-WORLD SELECTION -->
110<SilhouetteParentColor value="255, 255, 0, 255" />
111<SilhouetteChildColor value="32, 106, 196, 255" />
112<HighlightParentColor value="171, 212, 245, 255" />
113<HighlightChildColor value="171, 212, 245, 255" />
114<HighlightInspectColor value="255, 0, 255, 255" />
115
116<!-- EDIT MODE GRID -->
117<GridFocusPointColor value="255, 255, 255, 128" />
118<GridlineColor value="255, 255, 255, 255" />
119<GridlineBGColor value="235, 235, 255, 200" />
120<GridlineShadowColor value="0, 0, 0, 80" />
121
122<!-- PROPERTY LINES -->
123<PropertyColorAvail value="0, 0, 0, 0" />
124<PropertyColorGroup value="0, 184, 184, 102" />
125<PropertyColorOther value="255, 0, 0, 102" />
126<PropertyColorSelf value="0, 255, 0, 102" />
127<PropertyColorForSale value="255, 128, 0, 102" />
128<PropertyColorAuction value="128, 0, 255, 102" /> <!-- Match the color on the world map -->
66 129
67<!-- Icon Enable/Disable --> 130<!-- Icon Enable/Disable -->
68<IconEnabledColor value="255, 255, 255, 255"/> 131<IconEnabledColor value="255, 255, 255, 255"/>
69<IconDisabledColor value="147, 169, 213, 200"/> 132<IconDisabledColor value="147, 169, 213, 200"/>
70 133
71<LabelDisabledColor value="147, 169, 213, 77"/> 134<!-- MINI-MAP -->
72<LabelSelectedColor value="255, 255, 255, 255"/> 135<NetMapBackgroundColor value="0, 0, 0, 77" />
73<LabelSelectedDisabledColor value="164, 190, 237, 128"/> 136<NetMapYouOwnAboveWater value="0, 255, 255, 255" />
74<LabelTextColor value="147, 169, 213, 255"/> 137<NetMapYouOwnBelowWater value="0, 200, 200, 255" />
75 138<NetMapGroupOwnAboveWater value="255, 0, 255, 255" />
76<MapAutopilotColor value="255, 128, 0, 255"/> 139<NetMapGroupOwnBelowWater value="200, 0, 200, 255" />
77 140<NetMapOtherOwnAboveWater value="60, 60, 60, 255" />
78<!-- Menus on the top of the screen --> 141<NetMapOtherOwnBelowWater value="30, 30, 30, 255" />
79<MenuBarBgColor value="62, 62, 62, 255"/> 142
80<MenuBarGodBgColor value="62, 128, 62, 255"/> 143<!-- HELP WINDOW -->
81<MenuNonProductionBgColor value="128, 0, 0, 255"/> 144<HelpBgColor value="200, 209, 204, 255" />
82<MenuNonProductionGodBgColor value="0,128,0,255"/> 145<HelpFgColor value="0, 0, 0, 255" />
83<MenuDefaultBgColor value="0, 0, 0, 255"/> 146<HelpScrollTrackColor value="0, 0, 0, 255" />
84<MenuItemDisabledColor value="133, 133, 164, 128"/> 147<HelpScrollThumbColor value="255, 255, 255, 255" />
85<MenuItemEnabledColor value="255, 255, 255, 255"/> 148<HelpScrollHighlightColor value="115, 132, 155, 255" />
86<MenuItemHighlightBgColor value="183, 184, 188, 100"/> 149<HelpScrollShadowColor value="0, 0, 0, 255" />
87<MenuItemHighlightFgColor value="255, 255, 255, 255"/> 150
88<MenuPopupBgColor value="0, 0, 0, 255"/> 151<!-- MISC -->
89 152<AvatarNameColor value="251, 175, 93, 255" /> <!-- Text color of avatar nametags -->
90<!-- Colors for the Mini-Map --> 153<FocusColor value="239, 156, 0, 255" /> <!-- Color of the glow around UI controls with keyboard focus -->
91<NetMapBackgroundColor value="0, 0, 0, 77"/> 154<FloaterButtonImageColor value="255, 255, 255, 255" /> <!-- The floater buttons (like the close box) are white images that receive this color. -->
92<NetMapYouOwnAboveWater value="0, 255, 255, 255"/> 155<ButtonCautionImageColor value="255, 255, 255, 255" /> <!-- Match the caution dialog buttons to the default -->
93<NetMapYouOwnBelowWater value="0, 200, 200, 255"/> 156<HealthTextColor value="255, 255, 255, 255" />
94<NetMapGroupOwnAboveWater value="255, 0, 255, 255"/> 157<MapAutopilotColor value="255, 128, 0, 255" />
95<NetMapGroupOwnBelowWater value="200, 0, 200, 255"/> 158<ContextSilhouetteColor value="239, 156, 0, 255" /> <!-- For "context" highlighting, i.e. pie menu -->
96<NetMapOtherOwnAboveWater value="60, 60, 60, 255"/> 159<ScriptBgReadOnlyColor value="180, 180, 180, 255" />
97<NetMapOtherOwnBelowWater value="30, 30, 30, 255"/> 160<ParcelTextColor value="40, 40, 90, 255" /> <!-- Parcel name on menu bar, normal state -->
98 161<ParcelHoverColor value="70, 70, 100, 255" /> <!-- Parcel name on menu bar, hover state -->
99<!-- Notify boxes are the slide-down notifications at the --> 162<TimeTextColor value="0, 30, 60, 255" /> <!-- SL Time on menu bar -->
100<!-- top-right of the screen. --> 163<BalanceTextColor value="0, 100, 40, 255" /> <!-- Linden dollar balance on menu bar -->
101<NotifyBoxColor value="58, 147, 242, 255"/> 164<HealthTextColor value="110, 15, 15, 255" /> <!-- Damage meter text on menu bar -->
102<NotifyTextColor value="0, 0, 0, 255"/> 165<GroupOverTierColor value="110, 15, 15, 255" /> <!-- Warning text in Group Info window -->
103<!-- the background color of caution permissions prompts --> 166<FilterBackgroundColor value="75, 75, 150, 180" /> <!-- Matching region of Inventory search text -->
104<NotifyCautionBoxColor value="254, 209, 118, 255"/> 167<FilterTextColor value="255, 200, 70, 255" />
105<!-- the foreground color of the special title text in caution permissions prompts --> 168<InventoryItemSuffixColor value="120, 70, 55, 255"/>
106<NotifyCautionWarnColor value="0, 0, 0, 255"/> 169<InventorySearchStatusColor value="0, 0, 0, 255" />
107<!-- Background color of focused floaters --> 170<ConsoleBackground value="0, 0, 0, 255" />
108<FocusBackgroundColor value="62, 62, 62, 255"/> 171<FolderViewLoadingMessageTextColor value="240, 165, 90, 255"/>
109<GroupNotifyBoxColor value="70, 170, 255, 255"/> 172
110 173 <!-- Alert box colors -->
111<!-- Alert box colors --> 174<AlertBoxColor value="165, 180, 200, 245"/>
112<AlertBoxColor value="62, 62, 62, 255"/> 175<AlertTextColor value="0, 30, 60, 255"/>
113<AlertTextColor value="147, 169, 213, 255"/> 176<AlertCautionBoxColor value="254, 209, 118, 255"/> <!-- Background color of caution alerts -->
114<!-- the background color of caution alerts --> 177<AlertCautionTextColor value="0, 0, 0, 255"/> <!-- Foreground color of the special title text in caution alerts -->
115<AlertCautionBoxColor value="254, 209, 118, 255"/>
116<!-- the foreground color of the special title text in caution alerts -->
117<AlertCautionTextColor value="0, 0, 0, 255"/>
118
119<!-- Menu that spawns on right-click -->
120<PieMenuBgColor value="62, 62, 62, 150"/>
121<PieMenuLineColor value="0, 0, 0, 128"/>
122<PieMenuSelectedColor value="183, 184, 188, 77"/>
123
124<!-- Colors for property lines and land ownership overlay -->
125<PropertyColorAvail value="0, 0, 0, 0"/>
126<PropertyColorGroup value="0, 184, 184, 102"/>
127<PropertyColorOther value="255, 0, 0, 102"/>
128<PropertyColorSelf value="0, 255, 0, 102"/>
129<PropertyColorForSale value="255, 128, 0, 102"/>
130<!-- match the color on the world map -->
131<PropertyColorAuction value="128, 0, 255, 102"/>
132
133<ScrollBgReadOnlyColor value="200, 209, 204, 255"/>
134<ScrollBgWriteableColor value="200, 209, 204, 255"/>
135<ScrollBGStripeColor value="100, 100, 100, 40"/>
136<ScrollDisabledColor value="128, 128, 128, 204"/>
137<ScrollSelectedBGColor value="100, 100, 188, 150"/>
138<ScrollSelectedFGColor value="0, 0, 0, 204"/>
139<ScrollUnselectedColor value="0, 0, 0, 204"/>
140<ScrollHighlightedColor value="183, 184, 188, 128"/>
141<ScrollbarThumbColor value="60, 76, 124, 255"/>
142<ScrollbarTrackColor value="153, 154, 158, 255"/>
143
144<!-- Outline for selected objects in world -->
145<SilhouetteParentColor value="255, 255, 0, 255"/>
146<SilhouetteChildColor value="32, 106, 196, 255"/>
147<HighlightParentColor value="171, 212, 245, 255"/>
148<HighlightChildColor value="171, 212, 245, 255"/>
149<HighlightInspectColor value="255, 0, 255, 255"/>
150
151<!-- For "context" highlighting, i.e. pie menu -->
152<ContextSilhouetteColor value="239, 156, 0, 255"/>
153
154<!-- Horizontal sliders, as in the audio preferences -->
155<SliderThumbCenterColor value="200, 200, 200, 255"/>
156<SliderThumbOutlineColor value="255, 255, 255, 255"/>
157<SliderTrackColor value="255, 255, 255, 255"/>
158 178
159<!-- Multi sliders, as in the sky animation setting --> 179<!-- Multi sliders, as in the sky animation setting -->
160<MultiSliderDisabledThumbColor value="0, 0, 0, 255"/> 180<MultiSliderDisabledThumbColor value="0, 0, 0, 255"/>
@@ -163,30 +183,4 @@
163<MultiSliderTrackColor value="30, 30, 30, 255"/> 183<MultiSliderTrackColor value="30, 30, 30, 255"/>
164<MultiSliderThumbCenterSelectedColor value="255, 50, 50, 255"/> 184<MultiSliderThumbCenterSelectedColor value="255, 50, 50, 255"/>
165<MultiSliderTriangleColor value="255, 255, 50, 255"/> 185<MultiSliderTriangleColor value="255, 255, 50, 255"/>
166
167<!-- Text field background when receiving input (focused) -->
168<TextBgFocusColor value="200, 209, 204, 255"/>
169<!-- Text field background when read-only -->
170<TextBgReadOnlyColor value="62, 62, 62, 160"/>
171<!-- Text field background when not receiving input (unfocused) -->
172<TextBgWriteableColor value="200, 209, 204, 230"/>
173<TextCursorColor value="0, 0, 0, 255"/>
174<TextFgColor value="0, 0, 0, 255"/>
175<TextFgReadOnlyColor value="255, 255, 255, 200"/>
176<TextFgTentativeColor value="0, 0, 0, 255"/>
177<TextEmbeddedItemReadOnlyColor value="58, 147, 242, 255"/>
178<TextEmbeddedItemColor value="0, 0, 128, 255"/>
179<TextDefaultColor value="0, 20, 0, 255"/>
180<ScriptBgReadOnlyColor value="100, 100, 100, 255"/>
181
182
183<!-- Pop-up tips on UI elements and in-world objects -->
184<ToolTipBgColor value="183, 184, 188, 200"/>
185<ToolTipBorderColor value="171, 212, 245, 255"/>
186<ToolTipTextColor value="0, 0, 0, 255"/>
187
188
189<FilterBackgroundColor value="0, 0, 20, 255"/>
190<FilterTextColor value="255, 200, 70, 255"/>
191<FolderViewLoadingMessageTextColor value="240, 165, 90, 255"/>
192</settings> 186</settings>
diff --git a/linden/indra/newview/app_settings/grass.xml b/linden/indra/newview/app_settings/grass.xml
index 7cc29fa..4fc3b79 100644
--- a/linden/indra/newview/app_settings/grass.xml
+++ b/linden/indra/newview/app_settings/grass.xml
@@ -3,35 +3,35 @@
3 <grass 3 <grass
4 name="Grass 0" 4 name="Grass 0"
5 species_id="0" 5 species_id="0"
6 texture_name="grass_texture_2.tga" 6 texture_id="6c4727b8-ac79-ba44-3b81-f9aa887b47eb"
7 blade_size_x="1.35" 7 blade_size_x="1.35"
8 blade_size_y="1.35" 8 blade_size_y="1.35"
9 /> 9 />
10 <grass 10 <grass
11 name="Grass 1" 11 name="Grass 1"
12 species_id="1" 12 species_id="1"
13 texture_name="grass_texture_1.tga" 13 texture_id="79504bf5-c3ec-0763-6563-d843de66d0a1"
14 blade_size_x="1.0" 14 blade_size_x="1.0"
15 blade_size_y="0.66" 15 blade_size_y="0.66"
16 /> 16 />
17 <grass 17 <grass
18 name="Grass 2" 18 name="Grass 2"
19 species_id="2" 19 species_id="2"
20 texture_name="grass_texture_2.tga" 20 texture_id="6c4727b8-ac79-ba44-3b81-f9aa887b47eb"
21 blade_size_x="1.8" 21 blade_size_x="1.8"
22 blade_size_y="1.8" 22 blade_size_y="1.8"
23 /> 23 />
24 <grass 24 <grass
25 name="Grass 3" 25 name="Grass 3"
26 species_id="3" 26 species_id="3"
27 texture_name="grass_texture_3.tga" 27 texture_id="99bd60a2-3250-efc9-2e39-2fbcadefbecc"
28 blade_size_x="1.0" 28 blade_size_x="1.0"
29 blade_size_y="1.0" 29 blade_size_y="1.0"
30 /> 30 />
31 <grass 31 <grass
32 name="Grass 4" 32 name="Grass 4"
33 species_id="4" 33 species_id="4"
34 texture_name="grass_texture_4.tga" 34 texture_id="7a2b3a4a-53c2-53ac-5716-aac7d743c020"
35 blade_size_x="2.25" 35 blade_size_x="2.25"
36 blade_size_y="2.25" 36 blade_size_y="2.25"
37 /> 37 />
@@ -44,4 +44,4 @@
44 /> 44 />
45 45
46 46
47</grass_defs> 47</grass_defs> \ No newline at end of file
diff --git a/linden/indra/newview/app_settings/keys.ini b/linden/indra/newview/app_settings/keys.ini
index 3a1e9ea..b79e5bf 100644
--- a/linden/indra/newview/app_settings/keys.ini
+++ b/linden/indra/newview/app_settings/keys.ini
@@ -40,6 +40,7 @@ FIRST_PERSON PAD_PGDN NONE push_down
40FIRST_PERSON PAD_HOME NONE toggle_fly 40FIRST_PERSON PAD_HOME NONE toggle_fly
41FIRST_PERSON PAD_CENTER NONE stop_moving 41FIRST_PERSON PAD_CENTER NONE stop_moving
42FIRST_PERSON PAD_ENTER NONE start_chat 42FIRST_PERSON PAD_ENTER NONE start_chat
43FIRST_PERSON PAD_DIVIDE NONE start_gesture
43 44
44FIRST_PERSON A SHIFT slide_left 45FIRST_PERSON A SHIFT slide_left
45FIRST_PERSON D SHIFT slide_right 46FIRST_PERSON D SHIFT slide_right
@@ -51,6 +52,7 @@ FIRST_PERSON F SHIFT toggle_fly
51 52
52FIRST_PERSON SPACE NONE stop_moving 53FIRST_PERSON SPACE NONE stop_moving
53FIRST_PERSON ENTER NONE start_chat 54FIRST_PERSON ENTER NONE start_chat
55FIRST_PERSON DIVIDE NONE start_gesture
54 56
55FIRST_PERSON LEFT SHIFT slide_left 57FIRST_PERSON LEFT SHIFT slide_left
56FIRST_PERSON RIGHT SHIFT slide_right 58FIRST_PERSON RIGHT SHIFT slide_right
@@ -67,6 +69,7 @@ FIRST_PERSON PAD_PGUP SHIFT jump
67FIRST_PERSON PAD_PGDN SHIFT push_down 69FIRST_PERSON PAD_PGDN SHIFT push_down
68FIRST_PERSON PAD_HOME SHIFT toggle_fly 70FIRST_PERSON PAD_HOME SHIFT toggle_fly
69FIRST_PERSON PAD_ENTER SHIFT start_chat 71FIRST_PERSON PAD_ENTER SHIFT start_chat
72FIRST_PERSON PAD_DIVIDE SHIFT start_gesture
70 73
71THIRD_PERSON A NONE turn_left 74THIRD_PERSON A NONE turn_left
72THIRD_PERSON D NONE turn_right 75THIRD_PERSON D NONE turn_right
@@ -86,6 +89,7 @@ THIRD_PERSON F SHIFT toggle_fly
86 89
87THIRD_PERSON SPACE NONE stop_moving 90THIRD_PERSON SPACE NONE stop_moving
88THIRD_PERSON ENTER NONE start_chat 91THIRD_PERSON ENTER NONE start_chat
92THIRD_PERSON DIVIDE NONE start_gesture
89 93
90THIRD_PERSON LEFT NONE turn_left 94THIRD_PERSON LEFT NONE turn_left
91THIRD_PERSON LEFT SHIFT slide_left 95THIRD_PERSON LEFT SHIFT slide_left
@@ -120,6 +124,8 @@ THIRD_PERSON PAD_CENTER NONE stop_moving
120THIRD_PERSON PAD_CENTER SHIFT stop_moving 124THIRD_PERSON PAD_CENTER SHIFT stop_moving
121THIRD_PERSON PAD_ENTER NONE start_chat 125THIRD_PERSON PAD_ENTER NONE start_chat
122THIRD_PERSON PAD_ENTER SHIFT start_chat 126THIRD_PERSON PAD_ENTER SHIFT start_chat
127THIRD_PERSON PAD_DIVIDE NONE start_gesture
128THIRD_PERSON PAD_DIVIDE SHIFT start_gesture
123 129
124# Camera controls in third person on Alt 130# Camera controls in third person on Alt
125THIRD_PERSON LEFT ALT spin_around_cw 131THIRD_PERSON LEFT ALT spin_around_cw
@@ -143,6 +149,7 @@ THIRD_PERSON PAD_DOWN ALT move_backward
143THIRD_PERSON PAD_PGUP ALT spin_over 149THIRD_PERSON PAD_PGUP ALT spin_over
144THIRD_PERSON PAD_PGDN ALT spin_under 150THIRD_PERSON PAD_PGDN ALT spin_under
145THIRD_PERSON PAD_ENTER ALT start_chat 151THIRD_PERSON PAD_ENTER ALT start_chat
152THIRD_PERSON PAD_DIVIDE ALT start_gesture
146 153
147# mimic alt zoom behavior with keyboard only 154# mimic alt zoom behavior with keyboard only
148THIRD_PERSON A CTL_ALT spin_around_cw 155THIRD_PERSON A CTL_ALT spin_around_cw
@@ -166,6 +173,7 @@ THIRD_PERSON PAD_DOWN CTL_ALT spin_under
166THIRD_PERSON PAD_PGUP CTL_ALT spin_over 173THIRD_PERSON PAD_PGUP CTL_ALT spin_over
167THIRD_PERSON PAD_PGDN CTL_ALT spin_under 174THIRD_PERSON PAD_PGDN CTL_ALT spin_under
168THIRD_PERSON PAD_ENTER CTL_ALT start_chat 175THIRD_PERSON PAD_ENTER CTL_ALT start_chat
176THIRD_PERSON PAD_DIVIDE CTL_ALT start_gesture
169 177
170# Therefore pan on Alt-Shift 178# Therefore pan on Alt-Shift
171THIRD_PERSON A CTL_ALT_SHIFT pan_left 179THIRD_PERSON A CTL_ALT_SHIFT pan_left
@@ -183,6 +191,7 @@ THIRD_PERSON PAD_RIGHT CTL_ALT_SHIFT pan_right
183THIRD_PERSON PAD_UP CTL_ALT_SHIFT pan_up 191THIRD_PERSON PAD_UP CTL_ALT_SHIFT pan_up
184THIRD_PERSON PAD_DOWN CTL_ALT_SHIFT pan_down 192THIRD_PERSON PAD_DOWN CTL_ALT_SHIFT pan_down
185THIRD_PERSON PAD_ENTER CTL_ALT_SHIFT start_chat 193THIRD_PERSON PAD_ENTER CTL_ALT_SHIFT start_chat
194THIRD_PERSON PAD_DIVIDE CTL_ALT_SHIFT start_gesture
186 195
187# Basic editing camera control 196# Basic editing camera control
188EDIT A NONE spin_around_cw 197EDIT A NONE spin_around_cw
@@ -192,7 +201,9 @@ EDIT S NONE move_backward
192EDIT E NONE spin_over 201EDIT E NONE spin_over
193EDIT C NONE spin_under 202EDIT C NONE spin_under
194EDIT ENTER NONE start_chat 203EDIT ENTER NONE start_chat
204EDIT DIVIDE NONE start_gesture
195EDIT PAD_ENTER NONE start_chat 205EDIT PAD_ENTER NONE start_chat
206EDIT PAD_DIVIDE NONE start_gesture
196 207
197EDIT LEFT NONE spin_around_cw 208EDIT LEFT NONE spin_around_cw
198EDIT RIGHT NONE spin_around_ccw 209EDIT RIGHT NONE spin_around_ccw
@@ -234,6 +245,7 @@ EDIT PAD_DOWN ALT push_backward
234EDIT PAD_PGUP ALT jump 245EDIT PAD_PGUP ALT jump
235EDIT PAD_PGDN ALT push_down 246EDIT PAD_PGDN ALT push_down
236EDIT PAD_ENTER ALT start_chat 247EDIT PAD_ENTER ALT start_chat
248EDIT PAD_DIVIDE ALT start_gesture
237 249
238SITTING A ALT spin_around_cw 250SITTING A ALT spin_around_cw
239SITTING D ALT spin_around_ccw 251SITTING D ALT spin_around_ccw
@@ -286,6 +298,7 @@ SITTING PAD_PGUP NONE spin_over_sitting
286SITTING PAD_PGDN NONE spin_under_sitting 298SITTING PAD_PGDN NONE spin_under_sitting
287SITTING PAD_CENTER NONE stop_moving 299SITTING PAD_CENTER NONE stop_moving
288SITTING PAD_ENTER NONE start_chat 300SITTING PAD_ENTER NONE start_chat
301SITTING PAD_DIVIDE NONE start_gesture
289 302
290# these are for passing controls when sitting on vehicles 303# these are for passing controls when sitting on vehicles
291SITTING A SHIFT slide_left 304SITTING A SHIFT slide_left
@@ -296,6 +309,7 @@ SITTING RIGHT SHIFT slide_right
296SITTING PAD_LEFT SHIFT slide_left 309SITTING PAD_LEFT SHIFT slide_left
297SITTING PAD_RIGHT SHIFT slide_right 310SITTING PAD_RIGHT SHIFT slide_right
298SITTING PAD_ENTER SHIFT start_chat 311SITTING PAD_ENTER SHIFT start_chat
312SITTING PAD_DIVIDE SHIFT start_gesture
299 313
300# pan on Alt-Shift 314# pan on Alt-Shift
301SITTING A CTL_ALT_SHIFT pan_left 315SITTING A CTL_ALT_SHIFT pan_left
@@ -313,8 +327,10 @@ SITTING PAD_RIGHT CTL_ALT_SHIFT pan_right
313SITTING PAD_UP CTL_ALT_SHIFT pan_up 327SITTING PAD_UP CTL_ALT_SHIFT pan_up
314SITTING PAD_DOWN CTL_ALT_SHIFT pan_down 328SITTING PAD_DOWN CTL_ALT_SHIFT pan_down
315SITTING PAD_ENTER CTL_ALT_SHIFT start_chat 329SITTING PAD_ENTER CTL_ALT_SHIFT start_chat
330SITTING PAD_DIVIDE CTL_ALT_SHIFT start_gesture
316 331
317SITTING ENTER NONE start_chat 332SITTING ENTER NONE start_chat
333SITTING DIVIDE NONE start_gesture
318 334
319# Avatar editing camera controls 335# Avatar editing camera controls
320EDIT_AVATAR A NONE edit_avatar_spin_cw 336EDIT_AVATAR A NONE edit_avatar_spin_cw
@@ -330,6 +346,7 @@ EDIT_AVATAR DOWN NONE edit_avatar_move_backward
330EDIT_AVATAR PGUP NONE edit_avatar_spin_over 346EDIT_AVATAR PGUP NONE edit_avatar_spin_over
331EDIT_AVATAR PGDN NONE edit_avatar_spin_under 347EDIT_AVATAR PGDN NONE edit_avatar_spin_under
332EDIT_AVATAR ENTER NONE start_chat 348EDIT_AVATAR ENTER NONE start_chat
349EDIT_AVATAR DIVIDE NONE start_gesture
333EDIT_AVATAR PAD_LEFT NONE edit_avatar_spin_cw 350EDIT_AVATAR PAD_LEFT NONE edit_avatar_spin_cw
334EDIT_AVATAR PAD_RIGHT NONE edit_avatar_spin_ccw 351EDIT_AVATAR PAD_RIGHT NONE edit_avatar_spin_ccw
335EDIT_AVATAR PAD_UP NONE edit_avatar_move_forward 352EDIT_AVATAR PAD_UP NONE edit_avatar_move_forward
@@ -337,3 +354,4 @@ EDIT_AVATAR PAD_DOWN NONE edit_avatar_move_backward
337EDIT_AVATAR PAD_PGUP NONE edit_avatar_spin_over 354EDIT_AVATAR PAD_PGUP NONE edit_avatar_spin_over
338EDIT_AVATAR PAD_PGDN NONE edit_avatar_spin_under 355EDIT_AVATAR PAD_PGDN NONE edit_avatar_spin_under
339EDIT_AVATAR PAD_ENTER NONE start_chat 356EDIT_AVATAR PAD_ENTER NONE start_chat
357EDIT_AVATAR PAD_DIVIDE NONE start_gesture
diff --git a/linden/indra/newview/app_settings/keywords.ini b/linden/indra/newview/app_settings/keywords.ini
index 0800647..9a8b1f7 100644
--- a/linden/indra/newview/app_settings/keywords.ini
+++ b/linden/indra/newview/app_settings/keywords.ini
@@ -339,7 +339,7 @@ PRIM_FLEXIBLE Sets primitive flexibility to TRUE or FALSE
339PRIM_POINT_LIGHT Sets light emission to TRUE or FALSE 339PRIM_POINT_LIGHT Sets light emission to TRUE or FALSE
340PRIM_TEMP_ON_REZ Sets temporay on rez to TRUE or FALSE 340PRIM_TEMP_ON_REZ Sets temporay on rez to TRUE or FALSE
341PRIM_PHANTOM Sets phantom to TRUE or FALSE 341PRIM_PHANTOM Sets phantom to TRUE or FALSE
342PRIM_CAST_SHADOWS Enables or disables shadow casting for the primitive 342PRIM_CAST_SHADOWS DEPRECATED. Takes 1 parameter, an integer, but has no effect when set and always returns 0 if used in llGetPrimitiveParams.
343PRIM_POSITION Sets primitive position to a vector position 343PRIM_POSITION Sets primitive position to a vector position
344PRIM_SIZE Sets primitive size to a vector size 344PRIM_SIZE Sets primitive size to a vector size
345PRIM_ROTATION Sets primitive rotation 345PRIM_ROTATION Sets primitive rotation
@@ -348,6 +348,7 @@ PRIM_COLOR Followed by an integer face, vector color, and float alpha
348PRIM_BUMP_SHINY Followed by an integer face, one of PRIM_SHINY_NONE, PRIM_SHINY_LOW,:PRIM_SHINY_MEDIUM, or PRIM_SHINY_HIGH,:and one of PRIM_BUMP_NONE, PRIM_BUMP_BRIGHT, PRIM_BUMP_DARK, etc 348PRIM_BUMP_SHINY Followed by an integer face, one of PRIM_SHINY_NONE, PRIM_SHINY_LOW,:PRIM_SHINY_MEDIUM, or PRIM_SHINY_HIGH,:and one of PRIM_BUMP_NONE, PRIM_BUMP_BRIGHT, PRIM_BUMP_DARK, etc
349PRIM_FULLBRIGHT Followed by an integer face, and TRUE or FALSE 349PRIM_FULLBRIGHT Followed by an integer face, and TRUE or FALSE
350PRIM_TEXGEN Followed by an integer face, and one of PRIM_TEXGEN_DEFAULT or PRIM_TEXGEN_PLANAR 350PRIM_TEXGEN Followed by an integer face, and one of PRIM_TEXGEN_DEFAULT or PRIM_TEXGEN_PLANAR
351PRIM_GLOW Followed by an integer face, and a float from 0.0 to 1.0 specifying glow amount
351 352
352PRIM_TYPE_BOX Followed by integer hole shape, vector cut, float hollow, vector twist,:vector top size, and vector top shear 353PRIM_TYPE_BOX Followed by integer hole shape, vector cut, float hollow, vector twist,:vector top size, and vector top shear
353PRIM_TYPE_CYLINDER Followed by integer hole shape, vector cut, float hollow, vector twist,:vector top size, and vector top shear 354PRIM_TYPE_CYLINDER Followed by integer hole shape, vector cut, float hollow, vector twist,:vector top size, and vector top shear
@@ -457,8 +458,6 @@ PARCEL_FLAG_USE_BAN_LIST Used with llGetParcelFlags to find if a parcel uses a
457PARCEL_FLAG_USE_LAND_PASS_LIST Used with llGetParcelFlags to find if a parcel allows passes to be purchased 458PARCEL_FLAG_USE_LAND_PASS_LIST Used with llGetParcelFlags to find if a parcel allows passes to be purchased
458PARCEL_FLAG_LOCAL_SOUND_ONLY Used with llGetParcelFlags to find if a parcel restricts spacialized sound to the parcel 459PARCEL_FLAG_LOCAL_SOUND_ONLY Used with llGetParcelFlags to find if a parcel restricts spacialized sound to the parcel
459PARCEL_FLAG_RESTRICT_PUSHOBJECT Used with llGetParcelFlags to find if a parcel restricts llPushObject() calls 460PARCEL_FLAG_RESTRICT_PUSHOBJECT Used with llGetParcelFlags to find if a parcel restricts llPushObject() calls
460PARCEL_FLAG_LOCAL_SOUND_ONLY Used with llGetParcelFlags to find if a parcel restricts spacialized sound to the parcel
461PARCEL_FLAG_RESTRICT_PUSHOBJECT Used with llGetParcelFlags to find if a parcel restricts llPushObject() calls
462PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY Used with llGetParcelFlags to find if a parcel allows all objects to enter 461PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY Used with llGetParcelFlags to find if a parcel allows all objects to enter
463PARCEL_FLAG_ALLOW_GROUP_OBJECT_ENTRY Used with llGetParcelFlags to find if a parcel only allows group (and owner) objects to enter 462PARCEL_FLAG_ALLOW_GROUP_OBJECT_ENTRY Used with llGetParcelFlags to find if a parcel only allows group (and owner) objects to enter
464 463
diff --git a/linden/indra/newview/app_settings/role_actions.xml b/linden/indra/newview/app_settings/role_actions.xml
deleted file mode 100644
index 02e484e..0000000
--- a/linden/indra/newview/app_settings/role_actions.xml
+++ /dev/null
@@ -1,314 +0,0 @@
1<?xml version="1.0" encoding="US-ASCII" standalone="yes"?>
2
3<role_actions>
4 <action_set
5 name="Membership"
6 description="These Abilities include powers to add and remove group Members, and allow new Members to join without an invitation."
7 >
8
9 <action
10 name="member invite"
11 description="Invite People to this Group"
12 longdescription="Invite People to this Group using the 'Invite New Person...' button in the Members &amp; Roles tab > Members sub-tab."
13 value="1"
14 />
15 <action
16 name="member eject"
17 description="Eject Members from this Group"
18 longdescription="Eject Members from this Group using the 'Eject From Group' button in the Members &amp; Roles tab > Members sub-tab. An Owner can eject anyone except another Owner. If you're not an Owner, a Member can be ejected from a group if, and only if, they're only in the Everyone Role, and NO other Roles. To remove Members from Roles, you need to have the 'Remove Members from Roles' Ability."
19 value="2"
20 />
21 <action
22 name="member options"
23 description="Toggle 'Open Enrollment' and change 'Signup Fee'"
24 longdescription="Toggle 'Open Enrollment' to let new Members join without an invitation, and change 'Signup Fee' in the Group Preferences section of the General tab."
25 value="3"
26 />
27 </action_set>
28
29 <action_set
30 name="Roles"
31 description="These Abilities include powers to add, remove, and change group Roles, add and remove Members in Roles, and assign Abilities to Roles."
32 >
33 <action
34 name="role create"
35 description="Create new Roles"
36 longdescription="Create new Roles in the Members &amp; Roles tab > Roles sub-tab."
37 value="4"
38 />
39 <action
40 name="role delete"
41 description="Delete Roles"
42 longdescription="Delete Roles in the Members &amp; Roles tab > Roles sub-tab."
43 value="5"
44 />
45 <action
46 name="role properties"
47 description="Change Role names, titles, and descriptions"
48 longdescription="Change Role names, titles, and descriptions at the bottom of the the Members &amp; Roles tab > Roles sub-tab after selecting a Role."
49 value="6"
50 />
51 <action name="role assign member limited" description="Assign Members to Assigner's Roles" longdescription="Assign Members to Roles in the Assigned Roles section of the Members &amp; Roles tab &gt; Members sub-tab. A member with this power can only add members to a role the assigner is already in." value="7"/>
52 <action name="role assign member" description="Assign Members to Any Role" longdescription="Assign Members to Any Role in the Assigned Roles section of the Members &amp; Roles tab &gt; Members sub-tab. *WARNING* Any Member in a Role with this Ability can assign themselves--and any other non-Owner Member--to Roles that have more powers than they currently have, potentially elevating themselves to near-Owner power. Be sure you know what you're doing before assigning this Ability." value="8"/>
53 <action
54 name="role remove member"
55 description="Remove Members from Roles"
56 longdescription="Remove Members from Roles in the Assigned Roles section of the Members &amp; Roles tab > Members sub-tab. Owners can't be removed."
57 value="9"
58 />
59 <action name="role change actions" description="Assign and Remove Abilities in Roles" longdescription="Assign and Remove Abilities in Roles in the Allowed Abilities section of the Members &amp; Roles tab &gt; Roles sub-tab. *WARNING* Any Member in a Role with this Ability can assign themselves--and any other non-Owner Member--all Abilities, potentially elevating themselves to near-Owner power. Be sure you know what you're doing before assigning this Ability." value="10"/>
60 </action_set>
61
62 <action_set
63 name="Group Identity"
64 description="These Abilities include powers to modify this group's identity, such as changing public visibility, charter, and insignia."
65 >
66 <action
67 name="group change identity"
68 description="Change Charter, Insignia, 'Publish on the Web', and which members are publicly visible in Group Information."
69 longdescription="Change Charter, Insignia, 'Publish on the Web', and which members are publicly visible in Group Information. This is done in the General tab."
70 value="11"
71 />
72 </action_set>
73
74 <action_set
75 name="Parcel Management"
76 description="These Abilities include powers to deed, modify, and sell land in this group's land holdings. To get to the About Land window, right-click the ground and select 'About Land...', or click the parcel info in the menu bar."
77 >
78
79 <action
80 name="land deed"
81 description="Deed land and buy land for group"
82 longdescription="Deed land and buy land for group. This is done in About Land > General tab."
83 value="12"
84 />
85 <action name="land release" description="Abandon land to Governor Linden" longdescription="Abandon land to Governor Linden. *WARNING* Any Member in a Role with this Ability can abandon group-owned land in About Land &gt; General tab, reverting it to Linden ownership without a sale! Be sure you know what you're doing before assigning this Ability." value="13"/>
86 <action name="land set sale info" description="Set land for sale info" longdescription="Set land for sale info. *WARNING* Any Member in a Role with this Ability can sell group-owned land in About Land &gt; General tab as they wish! Be sure you know what you're doing before assigning this Ability." value="14"/>
87 <action
88 name="land divide join"
89 description="Subdivide and join parcels"
90 longdescription="Subdivide and join parcels. This is done by right-clicking the ground, 'Edit Terrain', and dragging your mouse on the land to make a selection. To subdivide, select what you want to split and click 'Subdivide...'. To join, select two or more contiguous parcels and click 'Join...'. "
91 value="15"
92 />
93 </action_set>
94
95 <action_set
96 name="Parcel Identity"
97 description="These Abilities include powers to change the parcel name and publish settings, Find directory visibility, and landing point &amp; TP routing options."
98 >
99
100 <action
101 name="land find places"
102 description="Toggle 'Show in Find Places' and set category"
103 longdescription="Toggle 'Show in Find Places' and setting a parcel's category in About Land > Options tab."
104 value="17"
105 />
106 <action
107 name="land change identity"
108 description="Change parcel name, description, and 'Publish on the Web' settings"
109 longdescription="Change parcel name, description, and 'Publish on the Web' settings. This is done in About Land > Options tab."
110 value="18"
111 />
112 <action
113 name="land set landing point"
114 description="Set landing point and set teleport routing"
115 longdescription="On a group-owned parcel, Members in a Role with this Ability can set a landing point to specify where incoming teleports arrive, and also set teleport routing for further control. This is done in About Land > Options tab."
116 value="19"
117 />
118 </action_set>
119
120 <action_set
121 name="Parcel Settings"
122 description="These Abilities include powers which affect parcel options, such as 'Create Objects', 'Edit Terrain', and music &amp; media settings."
123 >
124
125 <action
126 name="land change media"
127 description="Change music &amp; media settings"
128 longdescription="Change streaming music and movie settings in About Land > Media tab."
129 value="20"
130 />
131 <action name="land edit" description="Toggle 'Edit Terrain'" longdescription="Toggle 'Edit Terrain'. *WARNING* About Land &gt; Options tab &gt; Edit Terrain allows anyone to terraform your land's shape, and place and move Linden plants. Be sure you know what you're doing before assigning this Ability. Editing terrain is toggled in About Land &gt; Options tab." value="21"/>
132 <action
133 name="land options"
134 description="Toggle various About Land > Options settings"
135 longdescription="Toggle 'Safe (no damage)', 'Fly', and allow other Residents to: 'Create Objects', 'Edit Terrain', 'Create Landmarks', and 'Run Scripts' on group-owned land in About Land > Options tab."
136 value="22"
137 />
138 </action_set>
139
140 <action_set
141 name="Parcel Powers"
142 description="These Abilities include powers which allow Members to bypass restrictions on group-owned parcels."
143 >
144
145 <action
146 name="land allow edit land"
147 description="Always allow 'Edit Terrain'"
148 longdescription="Members in a Role with this Ability can edit terrain on a group-owned parcel, even if it's turned off in About Land > Options tab."
149 value="23"
150 />
151 <action
152 name="land allow fly"
153 description="Always allow 'Fly'"
154 longdescription="Members in a Role with this Ability can fly on a group-owned parcel, even if it's turned off in About Land > Options tab."
155 value="24"
156 />
157 <action
158 name="land allow create"
159 description="Always allow 'Create Objects'"
160 longdescription="Members in a Role with this Ability can create objects on a group-owned parcel, even if it's turned off in About Land > Options tab."
161 value="25"
162 />
163 <action
164 name="land allow landmark"
165 description="Always allow 'Create Landmark'"
166 longdescription="Members in a Role with this Ability can landmark a group-owned parcel, even if it's turned off in About Land > Options tab."
167 value="26"
168 />
169 <action
170 name="land allow set home"
171 description="Allow 'Set Home to Here' on group land"
172 longdescription="Members in a Role with this Ability can use World menu > Set Home to Here on a group parcel (either land set or deeded to this group)."
173 value="28"
174 />
175 </action_set>
176
177 <action_set
178 name="Parcel Access"
179 description="These Abilities include powers to allow or restrict access to group-owned parcels, including freezing and ejecting Residents."
180 >
181
182 <action
183 name="land manage allowed"
184 description="Manage parcel Access lists"
185 longdescription="Manage parcel Access lists in About Land > Access tab."
186 value="29"
187 />
188 <action
189 name="land manage banned"
190 description="Manage parcel Ban lists"
191 longdescription="Manage parcel Ban lists in About Land > Ban tab."
192 value="30"
193 />
194 <action
195 name="land manage passes"
196 description="Change parcel 'Sell passes...' settings"
197 longdescription="Change parcel 'Sell passes...' settings in About Land > Access tab."
198 value="31"
199 />
200 <action
201 name="land admin"
202 description="Eject and freeze Residents on parcels"
203 longdescription="Members in a Role with this Ability can handle an unwelcome Resident on a group-owned parcel by right-clicking them, More >, and selecting 'Eject...' or 'Freeze...'."
204 value="32"
205 />
206 </action_set>
207
208 <action_set
209 name="Parcel Content"
210 description="These Abilities include powers to allow members to return objects and place and move Linden plants. This is useful for Members to clean up litter and do landscaping, but it should also be used with care, because there's no undo for returning objects."
211 >
212
213 <action
214 name="land return group owned"
215 description="Return objects owned by group"
216 longdescription="Return objects on group-owned parcels that are owned by the group in About Land > Objects tab."
217 value="48"
218 />
219 <action
220 name="land return group set"
221 description="Return objects set to group"
222 longdescription="Return objects on group-owned parcels that are set to the group in About Land > Objects tab."
223 value="33"
224 />
225 <action
226 name="land return non group"
227 description="Return non-group objects"
228 longdescription="Return objects on group-owned parcels that are non-group in About Land > Objects tab."
229 value="34"
230 />
231 <action
232 name="land gardening"
233 description="Landscaping using Linden plants"
234 longdescription="Landscaping ability to place and move Linden trees, plants, and grasses. These items can be found in your inventory's Library > Objects folder or they can be created via the Build button."
235 value="35"
236 />
237 </action_set>
238
239 <action_set
240 name="Object Management"
241 description="These Abilities include powers to deed, modify, and sell group-owned objects. These changes are done in the Edit Tools > General Tab. Right-click an object and Edit to see its settings. "
242 >
243
244 <action
245 name="object deed"
246 description="Deed objects to group"
247 longdescription="Deed objects to group in the Edit Tools > General Tab."
248 value="36"
249 />
250 <action
251 name="object manipulate"
252 description="Manipulate (move, copy, modify) group-owned objects"
253 longdescription="Manipulate (move, copy, modify) group-owned objects in the Edit Tools > General Tab."
254 value="38"
255 />
256 <action
257 name="object set sale"
258 description="Set group-owned objects for sale"
259 longdescription="Set group-owned objects for sale in the Edit Tools > General tab."
260 value="39"
261 />
262 </action_set>
263
264 <action_set
265 name="Accounting"
266 description="These Abilities include powers which require Members to pay group liabilities and receive group dividends, and restrict access to group account history."
267 >
268
269 <action
270 name="accounting accountable"
271 description="Pay group liabilities and receive group dividends"
272 longdescription="Members in a Role with this Ability will automatically pay group liabilities and receive group dividends. This means they will receive a portion of group-owned land sales which are distributed daily, as well as contribute towards things like parcel listing fees. "
273 value="40"
274 />
275 </action_set>
276
277 <action_set
278 name="Notices"
279 description="These Abilities include powers to allow Members to send, receive, and view group Notices."
280 >
281
282 <action
283 name="notices send"
284 description="Send Notices"
285 longdescription="Members in a Role with this Ability can send Notices in Group Information > Notices tab."
286 value="42"
287 />
288 <action
289 name="notices receive"
290 description="Receive Notices and view past Notices"
291 longdescription="Members in a Role with this Ability can receive Notices and view past Notices in Group Information > Notices tab."
292 value="43"
293 />
294 </action_set>
295
296 <action_set
297 name="Proposals"
298 description="These Abilities include powers to allow Members to set up Proposals, vote on Proposals, and view voting history."
299 >
300
301 <action
302 name="proposal start"
303 description="Create Proposals"
304 longdescription="Members in a Role with this Ability can create proposals to be voted on in Group Information > Proposals tab."
305 value="44"
306 />
307 <action
308 name="proposal vote"
309 description="Vote on Proposals"
310 longdescription="Members in a Role with this Ability can vote on proposals in Group Information > Proposals tab."
311 value="45"
312 />
313 </action_set>
314</role_actions>
diff --git a/linden/indra/newview/app_settings/settings.xml b/linden/indra/newview/app_settings/settings.xml
new file mode 100644
index 0000000..63d429f
--- /dev/null
+++ b/linden/indra/newview/app_settings/settings.xml
@@ -0,0 +1,10129 @@
1<llsd>
2 <map>
3 <key>AdvanceSnapshot</key>
4 <map>
5 <key>Comment</key>
6 <string>Display advanced parameter settings in snaphot interface</string>
7 <key>Persist</key>
8 <integer>1</integer>
9 <key>Type</key>
10 <string>Boolean</string>
11 <key>Value</key>
12 <integer>0</integer>
13 </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 <map>
27 <key>Comment</key>
28 <string>Color of chat messages from other residents</string>
29 <key>Persist</key>
30 <integer>1</integer>
31 <key>Type</key>
32 <string>Color4</string>
33 <key>Value</key>
34 <array>
35 <real>1</real>
36 <real>1</real>
37 <real>1</real>
38 <real>1</real>
39 </array>
40 </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>
58 <map>
59 <key>Comment</key>
60 <string>Automatically set AFK (away from keyboard) mode when idle</string>
61 <key>Persist</key>
62 <integer>1</integer>
63 <key>Type</key>
64 <string>Boolean</string>
65 <key>Value</key>
66 <integer>1</integer>
67 </map>
68 <key>AllowMultipleViewers</key>
69 <map>
70 <key>Comment</key>
71 <string>Allow multiple viewers.</string>
72 <key>Persist</key>
73 <integer>1</integer>
74 <key>Type</key>
75 <string>Boolean</string>
76 <key>Value</key>
77 <integer>0</integer>
78 </map>
79 <key>AllowTapTapHoldRun</key>
80 <map>
81 <key>Comment</key>
82 <string>Tapping a direction key twice and holding it down makes avatar run</string>
83 <key>Persist</key>
84 <integer>1</integer>
85 <key>Type</key>
86 <string>Boolean</string>
87 <key>Value</key>
88 <integer>1</integer>
89 </map>
90 <key>AnimateTextures</key>
91 <map>
92 <key>Comment</key>
93 <string>Enable texture animation (debug)</string>
94 <key>Persist</key>
95 <integer>1</integer>
96 <key>Type</key>
97 <string>Boolean</string>
98 <key>Value</key>
99 <integer>1</integer>
100 </map>
101 <key>AnimationDebug</key>
102 <map>
103 <key>Comment</key>
104 <string>Show active animations in a bubble above avatars head</string>
105 <key>Persist</key>
106 <integer>1</integer>
107 <key>Type</key>
108 <string>Boolean</string>
109 <key>Value</key>
110 <integer>0</integer>
111 </map>
112 <key>AppearanceCameraMovement</key>
113 <map>
114 <key>Comment</key>
115 <string>When entering appearance editing mode, camera zooms in on currently selected portion of avatar</string>
116 <key>Persist</key>
117 <integer>1</integer>
118 <key>Type</key>
119 <string>Boolean</string>
120 <key>Value</key>
121 <integer>1</integer>
122 </map>
123 <key>ApplyColorImmediately</key>
124 <map>
125 <key>Comment</key>
126 <string>Preview selections in color picker immediately</string>
127 <key>Persist</key>
128 <integer>1</integer>
129 <key>Type</key>
130 <string>Boolean</string>
131 <key>Value</key>
132 <integer>1</integer>
133 </map>
134 <key>ApplyTextureImmediately</key>
135 <map>
136 <key>Comment</key>
137 <string>Preview selections in texture picker immediately</string>
138 <key>Persist</key>
139 <integer>1</integer>
140 <key>Type</key>
141 <string>Boolean</string>
142 <key>Value</key>
143 <integer>1</integer>
144 </map>
145 <key>ArrowKeysMoveAvatar</key>
146 <map>
147 <key>Comment</key>
148 <string>While cursor is in chat entry box, arrow keys still control your avatar</string>
149 <key>Persist</key>
150 <integer>1</integer>
151 <key>Type</key>
152 <string>Boolean</string>
153 <key>Value</key>
154 <integer>1</integer>
155 </map>
156 <key>AskedAboutCrashReports</key>
157 <map>
158 <key>Comment</key>
159 <string>Turns off dialog asking if you want to enable crash reporting</string>
160 <key>Persist</key>
161 <integer>1</integer>
162 <key>Type</key>
163 <string>Boolean</string>
164 <key>Value</key>
165 <integer>0</integer>
166 </map>
167 <key>AsyncKeyboard</key>
168 <map>
169 <key>Comment</key>
170 <string>Improves responsiveness to keyboard input when at low framerates</string>
171 <key>Persist</key>
172 <integer>1</integer>
173 <key>Type</key>
174 <string>Boolean</string>
175 <key>Value</key>
176 <integer>1</integer>
177 </map>
178 <key>AuctionShowFence</key>
179 <map>
180 <key>Comment</key>
181 <string>When auctioning land, include parcel boundary marker in snapshot</string>
182 <key>Persist</key>
183 <integer>1</integer>
184 <key>Type</key>
185 <string>Boolean</string>
186 <key>Value</key>
187 <integer>1</integer>
188 </map>
189 <key>AudioLevelAmbient</key>
190 <map>
191 <key>Comment</key>
192 <string>Audio level of environment sounds</string>
193 <key>Persist</key>
194 <integer>1</integer>
195 <key>Type</key>
196 <string>F32</string>
197 <key>Value</key>
198 <real>0.5</real>
199 </map>
200 <key>AudioLevelDistance</key>
201 <map>
202 <key>Comment</key>
203 <string>Scale factor for audio engine (multiple of world scale, 2.0 = audio falls off twice as fast)</string>
204 <key>Persist</key>
205 <integer>1</integer>
206 <key>Type</key>
207 <string>F32</string>
208 <key>Value</key>
209 <real>1</real>
210 </map>
211 <key>AudioLevelDoppler</key>
212 <map>
213 <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>
215 <key>Persist</key>
216 <integer>1</integer>
217 <key>Type</key>
218 <string>F32</string>
219 <key>Value</key>
220 <real>1</real>
221 </map>
222 <key>AudioLevelMaster</key>
223 <map>
224 <key>Comment</key>
225 <string>Master audio level, or overall volume</string>
226 <key>Persist</key>
227 <integer>1</integer>
228 <key>Type</key>
229 <string>F32</string>
230 <key>Value</key>
231 <real>1</real>
232 </map>
233 <key>AudioLevelMedia</key>
234 <map>
235 <key>Comment</key>
236 <string>Audio level of Quicktime movies</string>
237 <key>Persist</key>
238 <integer>1</integer>
239 <key>Type</key>
240 <string>F32</string>
241 <key>Value</key>
242 <real>1</real>
243 </map>
244 <key>AudioLevelMic</key>
245 <map>
246 <key>Comment</key>
247 <string>Audio level of microphone input</string>
248 <key>Persist</key>
249 <integer>1</integer>
250 <key>Type</key>
251 <string>F32</string>
252 <key>Value</key>
253 <real>1</real>
254 </map>
255 <key>AudioLevelMusic</key>
256 <map>
257 <key>Comment</key>
258 <string>Audio level of streaming music</string>
259 <key>Persist</key>
260 <integer>1</integer>
261 <key>Type</key>
262 <string>F32</string>
263 <key>Value</key>
264 <real>1</real>
265 </map>
266 <key>AudioLevelRolloff</key>
267 <map>
268 <key>Comment</key>
269 <string>Controls the distance-based dropoff of audio volume (fraction or multiple of default audio rolloff)</string>
270 <key>Persist</key>
271 <integer>1</integer>
272 <key>Type</key>
273 <string>F32</string>
274 <key>Value</key>
275 <real>1</real>
276 </map>
277 <key>AudioLevelSFX</key>
278 <map>
279 <key>Comment</key>
280 <string>Audio level of in-world sound effects</string>
281 <key>Persist</key>
282 <integer>1</integer>
283 <key>Type</key>
284 <string>F32</string>
285 <key>Value</key>
286 <real>1</real>
287 </map>
288 <key>AudioLevelUI</key>
289 <map>
290 <key>Comment</key>
291 <string>Audio level of UI sound effects</string>
292 <key>Persist</key>
293 <integer>1</integer>
294 <key>Type</key>
295 <string>F32</string>
296 <key>Value</key>
297 <real>0.5</real>
298 </map>
299 <key>AudioLevelVoice</key>
300 <map>
301 <key>Comment</key>
302 <string>Audio level of voice chat</string>
303 <key>Persist</key>
304 <integer>1</integer>
305 <key>Type</key>
306 <string>F32</string>
307 <key>Value</key>
308 <real>0.5</real>
309 </map>
310 <key>AudioStreamingMusic</key>
311 <map>
312 <key>Comment</key>
313 <string>Enable streaming audio</string>
314 <key>Persist</key>
315 <integer>1</integer>
316 <key>Type</key>
317 <string>Boolean</string>
318 <key>Value</key>
319 <integer>0</integer>
320 </map>
321 <key>AudioStreamingVideo</key>
322 <map>
323 <key>Comment</key>
324 <string>Enable streaming video</string>
325 <key>Persist</key>
326 <integer>1</integer>
327 <key>Type</key>
328 <string>Boolean</string>
329 <key>Value</key>
330 <integer>0</integer>
331 </map>
332 <key>AutoAcceptNewInventory</key>
333 <map>
334 <key>Comment</key>
335 <string>Automatically accept new notecards/textures/landmarks</string>
336 <key>Persist</key>
337 <integer>1</integer>
338 <key>Type</key>
339 <string>Boolean</string>
340 <key>Value</key>
341 <integer>0</integer>
342 </map>
343 <key>AutoLoadWebProfiles</key>
344 <map>
345 <key>Comment</key>
346 <string>Automatically load ALL profile webpages without asking first.</string>
347 <key>Persist</key>
348 <integer>1</integer>
349 <key>Type</key>
350 <string>Boolean</string>
351 <key>Value</key>
352 <integer>0</integer>
353 </map>
354 <key>AutoLogin</key>
355 <map>
356 <key>Comment</key>
357 <string>Login automatically using last username/password combination</string>
358 <key>Persist</key>
359 <integer>1</integer>
360 <key>Type</key>
361 <string>Boolean</string>
362 <key>Value</key>
363 <integer>0</integer>
364 </map>
365 <key>AutoMimeDiscovery</key>
366 <map>
367 <key>Comment</key>
368 <string>Enable viewer mime type discovery of media URLs</string>
369 <key>Persist</key>
370 <integer>1</integer>
371 <key>Type</key>
372 <string>Boolean</string>
373 <key>Value</key>
374 <integer>0</integer>
375 </map>
376 <key>AutoPilotLocksCamera</key>
377 <map>
378 <key>Comment</key>
379 <string>Keep camera position locked when avatar walks to selected position</string>
380 <key>Persist</key>
381 <integer>1</integer>
382 <key>Type</key>
383 <string>Boolean</string>
384 <key>Value</key>
385 <integer>0</integer>
386 </map>
387 <key>AutoSnapshot</key>
388 <map>
389 <key>Comment</key>
390 <string>Update snapshot when camera stops moving, or any parameter changes</string>
391 <key>Persist</key>
392 <integer>1</integer>
393 <key>Type</key>
394 <string>Boolean</string>
395 <key>Value</key>
396 <integer>0</integer>
397 </map>
398 <key>AutomaticFly</key>
399 <map>
400 <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>
402 <key>Persist</key>
403 <integer>1</integer>
404 <key>Type</key>
405 <string>Boolean</string>
406 <key>Value</key>
407 <integer>1</integer>
408 </map>
409 <key>AvatarBacklight</key>
410 <map>
411 <key>Comment</key>
412 <string>Add rim lighting to avatar rendering to approximate shininess of skin</string>
413 <key>Persist</key>
414 <integer>1</integer>
415 <key>Type</key>
416 <string>Boolean</string>
417 <key>Value</key>
418 <integer>1</integer>
419 </map>
420 <key>AvatarCompositeLimit</key>
421 <map>
422 <key>Comment</key>
423 <string>Maximum number of avatars to display appearance changes on the fly</string>
424 <key>Persist</key>
425 <integer>1</integer>
426 <key>Type</key>
427 <string>S32</string>
428 <key>Value</key>
429 <integer>5</integer>
430 </map>
431 <key>AvatarPickerSortOrder</key>
432 <map>
433 <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>
435 <key>Persist</key>
436 <integer>1</integer>
437 <key>Type</key>
438 <string>U32</string>
439 <key>Value</key>
440 <integer>2</integer>
441 </map>
442 <key>AvatarSex</key>
443 <map>
444 <key>Comment</key>
445 <string />
446 <key>Persist</key>
447 <integer>0</integer>
448 <key>Type</key>
449 <string>U32</string>
450 <key>Value</key>
451 <integer>0</integer>
452 </map>
453 <key>BackgroundChatColor</key>
454 <map>
455 <key>Comment</key>
456 <string>Color of chat bubble background</string>
457 <key>Persist</key>
458 <integer>1</integer>
459 <key>Type</key>
460 <string>Color4</string>
461 <key>Value</key>
462 <array>
463 <real>0</real>
464 <real>0</real>
465 <real>0</real>
466 <real>1</real>
467 </array>
468 </map>
469 <key>BackgroundYieldTime</key>
470 <map>
471 <key>Comment</key>
472 <string>Amount of time to yield every frame to other applications when SL is not the foreground window (milliseconds)</string>
473 <key>Persist</key>
474 <integer>1</integer>
475 <key>Type</key>
476 <string>S32</string>
477 <key>Value</key>
478 <integer>40</integer>
479 </map>
480 <key>BackwardBtnRect</key>
481 <map>
482 <key>Comment</key>
483 <string />
484 <key>Persist</key>
485 <integer>0</integer>
486 <key>Type</key>
487 <string>Rect</string>
488 <key>Value</key>
489 <array>
490 <integer>45</integer>
491 <integer>29</integer>
492 <integer>66</integer>
493 <integer>4</integer>
494 </array>
495 </map>
496 <key>BasicHelpRect</key>
497 <map>
498 <key>Comment</key>
499 <string>Rectangle for help window</string>
500 <key>Persist</key>
501 <integer>1</integer>
502 <key>Type</key>
503 <string>Rect</string>
504 <key>Value</key>
505 <array>
506 <integer>0</integer>
507 <integer>404</integer>
508 <integer>467</integer>
509 <integer>0</integer>
510 </array>
511 </map>
512 <key>BeaconAlwaysOn</key>
513 <map>
514 <key>Comment</key>
515 <string>Beacons / highlighting always on</string>
516 <key>Persist</key>
517 <integer>1</integer>
518 <key>Type</key>
519 <string>Boolean</string>
520 <key>Value</key>
521 <integer>0</integer>
522 </map>
523 <key>BrowserHomePage</key>
524 <map>
525 <key>Comment</key>
526 <string>[NOT USED]</string>
527 <key>Persist</key>
528 <integer>1</integer>
529 <key>Type</key>
530 <string>String</string>
531 <key>Value</key>
532 <string>http://www.secondlife.com</string>
533 </map>
534 <key>BrowserProxyAddress</key>
535 <map>
536 <key>Comment</key>
537 <string>Address for the Web Proxy]</string>
538 <key>Persist</key>
539 <integer>1</integer>
540 <key>Type</key>
541 <string>String</string>
542 <key>Value</key>
543 <string />
544 </map>
545 <key>BrowserProxyEnabled</key>
546 <map>
547 <key>Comment</key>
548 <string>Use Web Proxy</string>
549 <key>Persist</key>
550 <integer>1</integer>
551 <key>Type</key>
552 <string>Boolean</string>
553 <key>Value</key>
554 <integer>0</integer>
555 </map>
556 <key>BrowserProxyExclusions</key>
557 <map>
558 <key>Comment</key>
559 <string>[NOT USED]</string>
560 <key>Persist</key>
561 <integer>1</integer>
562 <key>Type</key>
563 <string>String</string>
564 <key>Value</key>
565 <string />
566 </map>
567 <key>BrowserProxyPort</key>
568 <map>
569 <key>Comment</key>
570 <string>Port for Web Proxy</string>
571 <key>Persist</key>
572 <integer>1</integer>
573 <key>Type</key>
574 <string>S32</string>
575 <key>Value</key>
576 <integer>3128</integer>
577 </map>
578 <key>BrowserProxySocks45</key>
579 <map>
580 <key>Comment</key>
581 <string>[NOT USED]</string>
582 <key>Persist</key>
583 <integer>1</integer>
584 <key>Type</key>
585 <string>S32</string>
586 <key>Value</key>
587 <integer>5</integer>
588 </map>
589 <key>BuildBtnState</key>
590 <map>
591 <key>Comment</key>
592 <string />
593 <key>Persist</key>
594 <integer>0</integer>
595 <key>Type</key>
596 <string>Boolean</string>
597 <key>Value</key>
598 <integer>0</integer>
599 </map>
600 <key>ButtonFlashCount</key>
601 <map>
602 <key>Comment</key>
603 <string>Number of flashes after which flashing buttons stay lit up</string>
604 <key>Persist</key>
605 <integer>1</integer>
606 <key>Type</key>
607 <string>S32</string>
608 <key>Value</key>
609 <integer>3</integer>
610 </map>
611 <key>ButtonFlashRate</key>
612 <map>
613 <key>Comment</key>
614 <string>Frequency at which buttons flash (hz)</string>
615 <key>Persist</key>
616 <integer>1</integer>
617 <key>Type</key>
618 <string>F32</string>
619 <key>Value</key>
620 <real>2</real>
621 </map>
622 <key>ButtonHPad</key>
623 <map>
624 <key>Comment</key>
625 <string>Default horizontal spacing between buttons (pixels)</string>
626 <key>Persist</key>
627 <integer>1</integer>
628 <key>Type</key>
629 <string>S32</string>
630 <key>Value</key>
631 <integer>10</integer>
632 </map>
633 <key>ButtonHeight</key>
634 <map>
635 <key>Comment</key>
636 <string>Default height for normal buttons (pixels)</string>
637 <key>Persist</key>
638 <integer>1</integer>
639 <key>Type</key>
640 <string>S32</string>
641 <key>Value</key>
642 <integer>20</integer>
643 </map>
644 <key>ButtonHeightSmall</key>
645 <map>
646 <key>Comment</key>
647 <string>Default height for small buttons (pixels)</string>
648 <key>Persist</key>
649 <integer>1</integer>
650 <key>Type</key>
651 <string>S32</string>
652 <key>Value</key>
653 <integer>16</integer>
654 </map>
655 <key>ButtonVPad</key>
656 <map>
657 <key>Comment</key>
658 <string>Default vertical spacing between buttons (pixels)</string>
659 <key>Persist</key>
660 <integer>1</integer>
661 <key>Type</key>
662 <string>S32</string>
663 <key>Value</key>
664 <integer>1</integer>
665 </map>
666 <key>CacheLocation</key>
667 <map>
668 <key>Comment</key>
669 <string>Controls the location of the local disk cache</string>
670 <key>Persist</key>
671 <integer>1</integer>
672 <key>Type</key>
673 <string>String</string>
674 <key>Value</key>
675 <string />
676 </map>
677 <key>CacheSize</key>
678 <map>
679 <key>Comment</key>
680 <string>Controls amount of hard drive space reserved for local file caching in MB</string>
681 <key>Persist</key>
682 <integer>1</integer>
683 <key>Type</key>
684 <string>U32</string>
685 <key>Value</key>
686 <integer>500</integer>
687 </map>
688 <key>CacheValidateCounter</key>
689 <map>
690 <key>Comment</key>
691 <string>Used to distribute cache validation</string>
692 <key>Persist</key>
693 <integer>1</integer>
694 <key>Type</key>
695 <string>U32</string>
696 <key>Value</key>
697 <integer>0</integer>
698 </map>
699 <key>CameraOffset</key>
700 <map>
701 <key>Comment</key>
702 <string>Render with camera offset from view frustum (rendering debug)</string>
703 <key>Persist</key>
704 <integer>1</integer>
705 <key>Type</key>
706 <string>Boolean</string>
707 <key>Value</key>
708 <integer>0</integer>
709 </map>
710 <key>CameraOffsetBuild</key>
711 <map>
712 <key>Comment</key>
713 <string>Default camera position relative to focus point when entering build mode</string>
714 <key>Persist</key>
715 <integer>1</integer>
716 <key>Type</key>
717 <string>Vector3</string>
718 <key>Value</key>
719 <array>
720 <real>-6</real>
721 <real>0</real>
722 <real>6</real>
723 </array>
724 </map>
725 <key>CameraOffsetDefault</key>
726 <map>
727 <key>Comment</key>
728 <string>Default camera offset from avatar</string>
729 <key>Persist</key>
730 <integer>1</integer>
731 <key>Type</key>
732 <string>Vector3</string>
733 <key>Value</key>
734 <array>
735 <real>-3</real>
736 <real>0</real>
737 <real>0.75</real>
738 </array>
739 </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>
752 <map>
753 <key>Comment</key>
754 <string>Camera position when last logged out (global coordinates)</string>
755 <key>Persist</key>
756 <integer>1</integer>
757 <key>Type</key>
758 <string>Vector3D</string>
759 <key>Value</key>
760 <array>
761 <real>0</real>
762 <real>0</real>
763 <real>0</real>
764 </array>
765 </map>
766 <key>CameraMouseWheelZoom</key>
767 <map>
768 <key>Comment</key>
769 <string>Camera zooms in and out with mousewheel</string>
770 <key>Persist</key>
771 <integer>1</integer>
772 <key>Type</key>
773 <string>Boolean</string>
774 <key>Value</key>
775 <integer>1</integer>
776 </map>
777 <key>ChatBarStealsFocus</key>
778 <map>
779 <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>
781 <key>Persist</key>
782 <integer>1</integer>
783 <key>Type</key>
784 <string>Boolean</string>
785 <key>Value</key>
786 <integer>1</integer>
787 </map>
788 <key>ChatBubbleOpacity</key>
789 <map>
790 <key>Comment</key>
791 <string>Opacity of chat bubble background (0.0 = completely transparent, 1.0 = completely opaque)</string>
792 <key>Persist</key>
793 <integer>1</integer>
794 <key>Type</key>
795 <string>F32</string>
796 <key>Value</key>
797 <real>0.5</real>
798 </map>
799 <key>ChatFontSize</key>
800 <map>
801 <key>Comment</key>
802 <string>Size of chat text in chat console (0 = small, 1 = big)</string>
803 <key>Persist</key>
804 <integer>1</integer>
805 <key>Type</key>
806 <string>S32</string>
807 <key>Value</key>
808 <integer>1</integer>
809 </map>
810 <key>ChatFullWidth</key>
811 <map>
812 <key>Comment</key>
813 <string>Chat console takes up full width of SL window</string>
814 <key>Persist</key>
815 <integer>1</integer>
816 <key>Type</key>
817 <string>Boolean</string>
818 <key>Value</key>
819 <integer>1</integer>
820 </map>
821 <key>ChatHistoryTornOff</key>
822 <map>
823 <key>Comment</key>
824 <string>Show chat history window separately from Communicate window.</string>
825 <key>Persist</key>
826 <integer>1</integer>
827 <key>Type</key>
828 <string>Boolean</string>
829 <key>Value</key>
830 <integer>0</integer>
831 </map>
832 <key>ChatOnlineNotification</key>
833 <map>
834 <key>Comment</key>
835 <string>Provide notifications for when friend log on and off of SL</string>
836 <key>Persist</key>
837 <integer>1</integer>
838 <key>Type</key>
839 <string>Boolean</string>
840 <key>Value</key>
841 <integer>1</integer>
842 </map>
843 <key>ChatPersistTime</key>
844 <map>
845 <key>Comment</key>
846 <string>Time for which chat stays visible in console (seconds)</string>
847 <key>Persist</key>
848 <integer>1</integer>
849 <key>Type</key>
850 <string>F32</string>
851 <key>Value</key>
852 <real>15</real>
853 </map>
854 <key>ChatShowTimestamps</key>
855 <map>
856 <key>Comment</key>
857 <string>Show timestamps in chat</string>
858 <key>Persist</key>
859 <integer>1</integer>
860 <key>Type</key>
861 <string>Boolean</string>
862 <key>Value</key>
863 <integer>1</integer>
864 </map>
865 <key>ChatVisible</key>
866 <map>
867 <key>Comment</key>
868 <string>Chat bar is visible</string>
869 <key>Persist</key>
870 <integer>1</integer>
871 <key>Type</key>
872 <string>Boolean</string>
873 <key>Value</key>
874 <integer>1</integer>
875 </map>
876 <key>ChatterboxRect</key>
877 <map>
878 <key>Comment</key>
879 <string>Rectangle for chatterbox window</string>
880 <key>Persist</key>
881 <integer>1</integer>
882 <key>Type</key>
883 <string>Rect</string>
884 <key>Value</key>
885 <array>
886 <integer>0</integer>
887 <integer>400</integer>
888 <integer>350</integer>
889 <integer>0</integer>
890 </array>
891 </map>
892 <key>CheesyBeacon</key>
893 <map>
894 <key>Comment</key>
895 <string>Enable cheesy beacon effects</string>
896 <key>Persist</key>
897 <integer>1</integer>
898 <key>Type</key>
899 <string>Boolean</string>
900 <key>Value</key>
901 <integer>0</integer>
902 </map>
903 <key>ClientSettingsFile</key>
904 <map>
905 <key>Comment</key>
906 <string>Persisted client settings file name (per install).</string>
907 <key>Persist</key>
908 <integer>0</integer>
909 <key>Type</key>
910 <string>String</string>
911 <key>Value</key>
912 <string />
913 </map>
914 <key>CloseChatOnReturn</key>
915 <map>
916 <key>Comment</key>
917 <string>Close chat after hitting return</string>
918 <key>Persist</key>
919 <integer>1</integer>
920 <key>Type</key>
921 <string>Boolean</string>
922 <key>Value</key>
923 <integer>0</integer>
924 </map>
925 <key>CloseSnapshotOnKeep</key>
926 <map>
927 <key>Comment</key>
928 <string>Close snapshot window after saving snapshot</string>
929 <key>Persist</key>
930 <integer>1</integer>
931 <key>Type</key>
932 <string>Boolean</string>
933 <key>Value</key>
934 <integer>1</integer>
935 </map>
936 <key>ClothingBtnState</key>
937 <map>
938 <key>Comment</key>
939 <string />
940 <key>Persist</key>
941 <integer>0</integer>
942 <key>Type</key>
943 <string>Boolean</string>
944 <key>Value</key>
945 <integer>0</integer>
946 </map>
947 <key>CmdLineDisableVoice</key>
948 <map>
949 <key>Comment</key>
950 <string>Disable Voice.</string>
951 <key>Persist</key>
952 <integer>0</integer>
953 <key>Type</key>
954 <string>Boolean</string>
955 <key>Value</key>
956 <integer>0</integer>
957 </map>
958 <key>ColorPaletteEntry01</key>
959 <map>
960 <key>Comment</key>
961 <string>Color picker palette entry</string>
962 <key>Persist</key>
963 <integer>1</integer>
964 <key>Type</key>
965 <string>Color4</string>
966 <key>Value</key>
967 <array>
968 <real>0</real>
969 <real>0</real>
970 <real>0</real>
971 <real>1</real>
972 </array>
973 </map>
974 <key>ColorPaletteEntry02</key>
975 <map>
976 <key>Comment</key>
977 <string>Color picker palette entry</string>
978 <key>Persist</key>
979 <integer>1</integer>
980 <key>Type</key>
981 <string>Color4</string>
982 <key>Value</key>
983 <array>
984 <real>0.5</real>
985 <real>0.5</real>
986 <real>0.5</real>
987 <real>1</real>
988 </array>
989 </map>
990 <key>ColorPaletteEntry03</key>
991 <map>
992 <key>Comment</key>
993 <string>Color picker palette entry</string>
994 <key>Persist</key>
995 <integer>1</integer>
996 <key>Type</key>
997 <string>Color4</string>
998 <key>Value</key>
999 <array>
1000 <real>0.5</real>
1001 <real>0</real>
1002 <real>0</real>
1003 <real>1</real>
1004 </array>
1005 </map>
1006 <key>ColorPaletteEntry04</key>
1007 <map>
1008 <key>Comment</key>
1009 <string>Color picker palette entry</string>
1010 <key>Persist</key>
1011 <integer>1</integer>
1012 <key>Type</key>
1013 <string>Color4</string>
1014 <key>Value</key>
1015 <array>
1016 <real>0.5</real>
1017 <real>0.5</real>
1018 <real>0</real>
1019 <real>1</real>
1020 </array>
1021 </map>
1022 <key>ColorPaletteEntry05</key>
1023 <map>
1024 <key>Comment</key>
1025 <string>Color picker palette entry</string>
1026 <key>Persist</key>
1027 <integer>1</integer>
1028 <key>Type</key>
1029 <string>Color4</string>
1030 <key>Value</key>
1031 <array>
1032 <real>0</real>
1033 <real>0.5</real>
1034 <real>0</real>
1035 <real>1</real>
1036 </array>
1037 </map>
1038 <key>ColorPaletteEntry06</key>
1039 <map>
1040 <key>Comment</key>
1041 <string>Color picker palette entry</string>
1042 <key>Persist</key>
1043 <integer>1</integer>
1044 <key>Type</key>
1045 <string>Color4</string>
1046 <key>Value</key>
1047 <array>
1048 <real>0</real>
1049 <real>0.5</real>
1050 <real>0.5</real>
1051 <real>1</real>
1052 </array>
1053 </map>
1054 <key>ColorPaletteEntry07</key>
1055 <map>
1056 <key>Comment</key>
1057 <string>Color picker palette entry</string>
1058 <key>Persist</key>
1059 <integer>1</integer>
1060 <key>Type</key>
1061 <string>Color4</string>
1062 <key>Value</key>
1063 <array>
1064 <real>0</real>
1065 <real>0</real>
1066 <real>0.5</real>
1067 <real>1</real>
1068 </array>
1069 </map>
1070 <key>ColorPaletteEntry08</key>
1071 <map>
1072 <key>Comment</key>
1073 <string>Color picker palette entry</string>
1074 <key>Persist</key>
1075 <integer>1</integer>
1076 <key>Type</key>
1077 <string>Color4</string>
1078 <key>Value</key>
1079 <array>
1080 <real>0.5</real>
1081 <real>0</real>
1082 <real>0.5</real>
1083 <real>1</real>
1084 </array>
1085 </map>
1086 <key>ColorPaletteEntry09</key>
1087 <map>
1088 <key>Comment</key>
1089 <string>Color picker palette entry</string>
1090 <key>Persist</key>
1091 <integer>1</integer>
1092 <key>Type</key>
1093 <string>Color4</string>
1094 <key>Value</key>
1095 <array>
1096 <real>0.5</real>
1097 <real>0.5</real>
1098 <real>0</real>
1099 <real>1</real>
1100 </array>
1101 </map>
1102 <key>ColorPaletteEntry10</key>
1103 <map>
1104 <key>Comment</key>
1105 <string>Color picker palette entry</string>
1106 <key>Persist</key>
1107 <integer>1</integer>
1108 <key>Type</key>
1109 <string>Color4</string>
1110 <key>Value</key>
1111 <array>
1112 <real>0</real>
1113 <real>0.25</real>
1114 <real>0.25</real>
1115 <real>1</real>
1116 </array>
1117 </map>
1118 <key>ColorPaletteEntry11</key>
1119 <map>
1120 <key>Comment</key>
1121 <string>Color picker palette entry</string>
1122 <key>Persist</key>
1123 <integer>1</integer>
1124 <key>Type</key>
1125 <string>Color4</string>
1126 <key>Value</key>
1127 <array>
1128 <real>0</real>
1129 <real>0.5</real>
1130 <real>1</real>
1131 <real>1</real>
1132 </array>
1133 </map>
1134 <key>ColorPaletteEntry12</key>
1135 <map>
1136 <key>Comment</key>
1137 <string>Color picker palette entry</string>
1138 <key>Persist</key>
1139 <integer>1</integer>
1140 <key>Type</key>
1141 <string>Color4</string>
1142 <key>Value</key>
1143 <array>
1144 <real>0</real>
1145 <real>0.25</real>
1146 <real>0.5</real>
1147 <real>1</real>
1148 </array>
1149 </map>
1150 <key>ColorPaletteEntry13</key>
1151 <map>
1152 <key>Comment</key>
1153 <string>Color picker palette entry</string>
1154 <key>Persist</key>
1155 <integer>1</integer>
1156 <key>Type</key>
1157 <string>Color4</string>
1158 <key>Value</key>
1159 <array>
1160 <real>0.5</real>
1161 <real>0</real>
1162 <real>1</real>
1163 <real>1</real>
1164 </array>
1165 </map>
1166 <key>ColorPaletteEntry14</key>
1167 <map>
1168 <key>Comment</key>
1169 <string>Color picker palette entry</string>
1170 <key>Persist</key>
1171 <integer>1</integer>
1172 <key>Type</key>
1173 <string>Color4</string>
1174 <key>Value</key>
1175 <array>
1176 <real>0.5</real>
1177 <real>0.25</real>
1178 <real>0</real>
1179 <real>1</real>
1180 </array>
1181 </map>
1182 <key>ColorPaletteEntry15</key>
1183 <map>
1184 <key>Comment</key>
1185 <string>Color picker palette entry</string>
1186 <key>Persist</key>
1187 <integer>1</integer>
1188 <key>Type</key>
1189 <string>Color4</string>
1190 <key>Value</key>
1191 <array>
1192 <real>1</real>
1193 <real>1</real>
1194 <real>1</real>
1195 <real>1</real>
1196 </array>
1197 </map>
1198 <key>ColorPaletteEntry16</key>
1199 <map>
1200 <key>Comment</key>
1201 <string>Color picker palette entry</string>
1202 <key>Persist</key>
1203 <integer>1</integer>
1204 <key>Type</key>
1205 <string>Color4</string>
1206 <key>Value</key>
1207 <array>
1208 <real>1</real>
1209 <real>1</real>
1210 <real>1</real>
1211 <real>1</real>
1212 </array>
1213 </map>
1214 <key>ColorPaletteEntry17</key>
1215 <map>
1216 <key>Comment</key>
1217 <string>Color picker palette entry</string>
1218 <key>Persist</key>
1219 <integer>1</integer>
1220 <key>Type</key>
1221 <string>Color4</string>
1222 <key>Value</key>
1223 <array>
1224 <real>1</real>
1225 <real>1</real>
1226 <real>1</real>
1227 <real>1</real>
1228 </array>
1229 </map>
1230 <key>ColorPaletteEntry18</key>
1231 <map>
1232 <key>Comment</key>
1233 <string>Color picker palette entry</string>
1234 <key>Persist</key>
1235 <integer>1</integer>
1236 <key>Type</key>
1237 <string>Color4</string>
1238 <key>Value</key>
1239 <array>
1240 <real>0.75</real>
1241 <real>0.75</real>
1242 <real>0.75</real>
1243 <real>1</real>
1244 </array>
1245 </map>
1246 <key>ColorPaletteEntry19</key>
1247 <map>
1248 <key>Comment</key>
1249 <string>Color picker palette entry</string>
1250 <key>Persist</key>
1251 <integer>1</integer>
1252 <key>Type</key>
1253 <string>Color4</string>
1254 <key>Value</key>
1255 <array>
1256 <real>1</real>
1257 <real>0</real>
1258 <real>0</real>
1259 <real>1</real>
1260 </array>
1261 </map>
1262 <key>ColorPaletteEntry20</key>
1263 <map>
1264 <key>Comment</key>
1265 <string>Color picker palette entry</string>
1266 <key>Persist</key>
1267 <integer>1</integer>
1268 <key>Type</key>
1269 <string>Color4</string>
1270 <key>Value</key>
1271 <array>
1272 <real>1</real>
1273 <real>1</real>
1274 <real>0</real>
1275 <real>1</real>
1276 </array>
1277 </map>
1278 <key>ColorPaletteEntry21</key>
1279 <map>
1280 <key>Comment</key>
1281 <string>Color picker palette entry</string>
1282 <key>Persist</key>
1283 <integer>1</integer>
1284 <key>Type</key>
1285 <string>Color4</string>
1286 <key>Value</key>
1287 <array>
1288 <real>0</real>
1289 <real>1</real>
1290 <real>0</real>
1291 <real>1</real>
1292 </array>
1293 </map>
1294 <key>ColorPaletteEntry22</key>
1295 <map>
1296 <key>Comment</key>
1297 <string>Color picker palette entry</string>
1298 <key>Persist</key>
1299 <integer>1</integer>
1300 <key>Type</key>
1301 <string>Color4</string>
1302 <key>Value</key>
1303 <array>
1304 <real>0</real>
1305 <real>1</real>
1306 <real>1</real>
1307 <real>1</real>
1308 </array>
1309 </map>
1310 <key>ColorPaletteEntry23</key>
1311 <map>
1312 <key>Comment</key>
1313 <string>Color picker palette entry</string>
1314 <key>Persist</key>
1315 <integer>1</integer>
1316 <key>Type</key>
1317 <string>Color4</string>
1318 <key>Value</key>
1319 <array>
1320 <real>0</real>
1321 <real>0</real>
1322 <real>1</real>
1323 <real>1</real>
1324 </array>
1325 </map>
1326 <key>ColorPaletteEntry24</key>
1327 <map>
1328 <key>Comment</key>
1329 <string>Color picker palette entry</string>
1330 <key>Persist</key>
1331 <integer>1</integer>
1332 <key>Type</key>
1333 <string>Color4</string>
1334 <key>Value</key>
1335 <array>
1336 <real>1</real>
1337 <real>0</real>
1338 <real>1</real>
1339 <real>1</real>
1340 </array>
1341 </map>
1342 <key>ColorPaletteEntry25</key>
1343 <map>
1344 <key>Comment</key>
1345 <string>Color picker palette entry</string>
1346 <key>Persist</key>
1347 <integer>1</integer>
1348 <key>Type</key>
1349 <string>Color4</string>
1350 <key>Value</key>
1351 <array>
1352 <real>1</real>
1353 <real>1</real>
1354 <real>0.5</real>
1355 <real>1</real>
1356 </array>
1357 </map>
1358 <key>ColorPaletteEntry26</key>
1359 <map>
1360 <key>Comment</key>
1361 <string>Color picker palette entry</string>
1362 <key>Persist</key>
1363 <integer>1</integer>
1364 <key>Type</key>
1365 <string>Color4</string>
1366 <key>Value</key>
1367 <array>
1368 <real>0</real>
1369 <real>1</real>
1370 <real>0.5</real>
1371 <real>1</real>
1372 </array>
1373 </map>
1374 <key>ColorPaletteEntry27</key>
1375 <map>
1376 <key>Comment</key>
1377 <string>Color picker palette entry</string>
1378 <key>Persist</key>
1379 <integer>1</integer>
1380 <key>Type</key>
1381 <string>Color4</string>
1382 <key>Value</key>
1383 <array>
1384 <real>0.5</real>
1385 <real>1</real>
1386 <real>1</real>
1387 <real>1</real>
1388 </array>
1389 </map>
1390 <key>ColorPaletteEntry28</key>
1391 <map>
1392 <key>Comment</key>
1393 <string>Color picker palette entry</string>
1394 <key>Persist</key>
1395 <integer>1</integer>
1396 <key>Type</key>
1397 <string>Color4</string>
1398 <key>Value</key>
1399 <array>
1400 <real>0.5</real>
1401 <real>0.5</real>
1402 <real>1</real>
1403 <real>1</real>
1404 </array>
1405 </map>
1406 <key>ColorPaletteEntry29</key>
1407 <map>
1408 <key>Comment</key>
1409 <string>Color picker palette entry</string>
1410 <key>Persist</key>
1411 <integer>1</integer>
1412 <key>Type</key>
1413 <string>Color4</string>
1414 <key>Value</key>
1415 <array>
1416 <real>1</real>
1417 <real>0</real>
1418 <real>0.5</real>
1419 <real>1</real>
1420 </array>
1421 </map>
1422 <key>ColorPaletteEntry30</key>
1423 <map>
1424 <key>Comment</key>
1425 <string>Color picker palette entry</string>
1426 <key>Persist</key>
1427 <integer>1</integer>
1428 <key>Type</key>
1429 <string>Color4</string>
1430 <key>Value</key>
1431 <array>
1432 <real>1</real>
1433 <real>0.5</real>
1434 <real>0</real>
1435 <real>1</real>
1436 </array>
1437 </map>
1438 <key>ColorPaletteEntry31</key>
1439 <map>
1440 <key>Comment</key>
1441 <string>Color picker palette entry</string>
1442 <key>Persist</key>
1443 <integer>1</integer>
1444 <key>Type</key>
1445 <string>Color4</string>
1446 <key>Value</key>
1447 <array>
1448 <real>1</real>
1449 <real>1</real>
1450 <real>1</real>
1451 <real>1</real>
1452 </array>
1453 </map>
1454 <key>ColorPaletteEntry32</key>
1455 <map>
1456 <key>Comment</key>
1457 <string>Color picker palette entry</string>
1458 <key>Persist</key>
1459 <integer>1</integer>
1460 <key>Type</key>
1461 <string>Color4</string>
1462 <key>Value</key>
1463 <array>
1464 <real>1</real>
1465 <real>1</real>
1466 <real>1</real>
1467 <real>1</real>
1468 </array>
1469 </map>
1470 <key>ColumnHeaderDropDownDelay</key>
1471 <map>
1472 <key>Comment</key>
1473 <string>Time in seconds of mouse click before column header shows sort options list</string>
1474 <key>Persist</key>
1475 <integer>1</integer>
1476 <key>Type</key>
1477 <string>F32</string>
1478 <key>Value</key>
1479 <real>0.300000011920928955078125</real>
1480 </map>
1481 <key>CompileOutputRect</key>
1482 <map>
1483 <key>Comment</key>
1484 <string>Rectangle for script Recompile Everything output window</string>
1485 <key>Persist</key>
1486 <integer>1</integer>
1487 <key>Type</key>
1488 <string>Rect</string>
1489 <key>Value</key>
1490 <array>
1491 <integer>0</integer>
1492 <integer>400</integer>
1493 <integer>300</integer>
1494 <integer>0</integer>
1495 </array>
1496 </map>
1497 <key>CompressSnapshotsToDisk</key>
1498 <map>
1499 <key>Comment</key>
1500 <string>Compress snapshots saved to disk (Using JPEG 2000)</string>
1501 <key>Persist</key>
1502 <integer>1</integer>
1503 <key>Type</key>
1504 <string>Boolean</string>
1505 <key>Value</key>
1506 <integer>0</integer>
1507 </map>
1508 <key>ConnectAsGod</key>
1509 <map>
1510 <key>Comment</key>
1511 <string>Log in a god if you have god access.</string>
1512 <key>Persist</key>
1513 <integer>1</integer>
1514 <key>Type</key>
1515 <string>Boolean</string>
1516 <key>Value</key>
1517 <integer>0</integer>
1518 </map>
1519 <key>ConnectionPort</key>
1520 <map>
1521 <key>Comment</key>
1522 <string>Custom connection port number</string>
1523 <key>Persist</key>
1524 <integer>1</integer>
1525 <key>Type</key>
1526 <string>U32</string>
1527 <key>Value</key>
1528 <integer>13000</integer>
1529 </map>
1530 <key>ConnectionPortEnabled</key>
1531 <map>
1532 <key>Comment</key>
1533 <string>Use the custom connection port?</string>
1534 <key>Persist</key>
1535 <integer>1</integer>
1536 <key>Type</key>
1537 <string>Boolean</string>
1538 <key>Value</key>
1539 <integer>0</integer>
1540 </map>
1541 <key>ConsoleBackgroundOpacity</key>
1542 <map>
1543 <key>Comment</key>
1544 <string>Opacity of chat console (0.0 = completely transparent, 1.0 = completely opaque)</string>
1545 <key>Persist</key>
1546 <integer>1</integer>
1547 <key>Type</key>
1548 <string>F32</string>
1549 <key>Value</key>
1550 <real>0.4000000059604644775390625</real>
1551 </map>
1552 <key>ConsoleBufferSize</key>
1553 <map>
1554 <key>Comment</key>
1555 <string>Size of chat console history (lines of chat)</string>
1556 <key>Persist</key>
1557 <integer>1</integer>
1558 <key>Type</key>
1559 <string>S32</string>
1560 <key>Value</key>
1561 <integer>40</integer>
1562 </map>
1563 <key>ConsoleMaxLines</key>
1564 <map>
1565 <key>Comment</key>
1566 <string>Max number of lines of chat text visible in console.</string>
1567 <key>Persist</key>
1568 <integer>1</integer>
1569 <key>Type</key>
1570 <string>S32</string>
1571 <key>Value</key>
1572 <integer>40</integer>
1573 </map>
1574 <key>ContactsTornOff</key>
1575 <map>
1576 <key>Comment</key>
1577 <string>Show contacts window separately from Communicate window.</string>
1578 <key>Persist</key>
1579 <integer>1</integer>
1580 <key>Type</key>
1581 <string>Boolean</string>
1582 <key>Value</key>
1583 <integer>0</integer>
1584 </map>
1585 <key>CookiesEnabled</key>
1586 <map>
1587 <key>Comment</key>
1588 <string>Accept cookies from Web sites?</string>
1589 <key>Persist</key>
1590 <integer>1</integer>
1591 <key>Type</key>
1592 <string>Boolean</string>
1593 <key>Value</key>
1594 <integer>1</integer>
1595 </map>
1596 <key>CrashLogBehavior</key>
1597 <map>
1598 <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>
1600 <key>Persist</key>
1601 <integer>0</integer>
1602 <key>Type</key>
1603 <string>S32</string>
1604 <key>Value</key>
1605 <integer>1</integer>
1606 </map>
1607 <key>CreateToolCopyCenters</key>
1608 <map>
1609 <key>Comment</key>
1610 <string />
1611 <key>Persist</key>
1612 <integer>0</integer>
1613 <key>Type</key>
1614 <string>Boolean</string>
1615 <key>Value</key>
1616 <integer>1</integer>
1617 </map>
1618 <key>CreateToolCopyRotates</key>
1619 <map>
1620 <key>Comment</key>
1621 <string />
1622 <key>Persist</key>
1623 <integer>0</integer>
1624 <key>Type</key>
1625 <string>Boolean</string>
1626 <key>Value</key>
1627 <integer>0</integer>
1628 </map>
1629 <key>CreateToolCopySelection</key>
1630 <map>
1631 <key>Comment</key>
1632 <string />
1633 <key>Persist</key>
1634 <integer>0</integer>
1635 <key>Type</key>
1636 <string>Boolean</string>
1637 <key>Value</key>
1638 <integer>0</integer>
1639 </map>
1640 <key>CreateToolKeepSelected</key>
1641 <map>
1642 <key>Comment</key>
1643 <string>After using create tool, keep the create tool active</string>
1644 <key>Persist</key>
1645 <integer>1</integer>
1646 <key>Type</key>
1647 <string>Boolean</string>
1648 <key>Value</key>
1649 <integer>0</integer>
1650 </map>
1651 <key>CustomServer</key>
1652 <map>
1653 <key>Comment</key>
1654 <string>Specifies IP address or hostname of grid to which you connect</string>
1655 <key>Persist</key>
1656 <integer>1</integer>
1657 <key>Type</key>
1658 <string>String</string>
1659 <key>Value</key>
1660 <string />
1661 </map>
1662 <key>DebugBeaconLineWidth</key>
1663 <map>
1664 <key>Comment</key>
1665 <string>Size of lines for Debug Beacons</string>
1666 <key>Persist</key>
1667 <integer>1</integer>
1668 <key>Type</key>
1669 <string>S32</string>
1670 <key>Value</key>
1671 <integer>1</integer>
1672 </map>
1673 <key>DebugInventoryFilters</key>
1674 <map>
1675 <key>Comment</key>
1676 <string>Turn on debugging display for inventory filtering</string>
1677 <key>Persist</key>
1678 <integer>1</integer>
1679 <key>Type</key>
1680 <string>Boolean</string>
1681 <key>Value</key>
1682 <integer>0</integer>
1683 </map>
1684 <key>DebugPermissions</key>
1685 <map>
1686 <key>Comment</key>
1687 <string>Log permissions for selected inventory items</string>
1688 <key>Persist</key>
1689 <integer>1</integer>
1690 <key>Type</key>
1691 <string>Boolean</string>
1692 <key>Value</key>
1693 <integer>0</integer>
1694 </map>
1695 <key>DebugShowColor</key>
1696 <map>
1697 <key>Comment</key>
1698 <string>Show color under cursor</string>
1699 <key>Persist</key>
1700 <integer>1</integer>
1701 <key>Type</key>
1702 <string>Boolean</string>
1703 <key>Value</key>
1704 <integer>0</integer>
1705 </map>
1706 <key>DebugShowRenderInfo</key>
1707 <map>
1708 <key>Comment</key>
1709 <string>Show depth buffer contents</string>
1710 <key>Persist</key>
1711 <integer>1</integer>
1712 <key>Type</key>
1713 <string>Boolean</string>
1714 <key>Value</key>
1715 <integer>0</integer>
1716 </map>
1717 <key>DebugShowTime</key>
1718 <map>
1719 <key>Comment</key>
1720 <string>Show depth buffer contents</string>
1721 <key>Persist</key>
1722 <integer>1</integer>
1723 <key>Type</key>
1724 <string>Boolean</string>
1725 <key>Value</key>
1726 <integer>0</integer>
1727 </map>
1728 <key>DebugViews</key>
1729 <map>
1730 <key>Comment</key>
1731 <string>Display debugging info for views.</string>
1732 <key>Persist</key>
1733 <integer>1</integer>
1734 <key>Type</key>
1735 <string>Boolean</string>
1736 <key>Value</key>
1737 <integer>0</integer>
1738 </map>
1739 <key>DebugWindowProc</key>
1740 <map>
1741 <key>Comment</key>
1742 <string>Log windows messages</string>
1743 <key>Persist</key>
1744 <integer>1</integer>
1745 <key>Type</key>
1746 <string>Boolean</string>
1747 <key>Value</key>
1748 <integer>0</integer>
1749 </map>
1750 <key>DefaultObjectTexture</key>
1751 <map>
1752 <key>Comment</key>
1753 <string>Texture used as &apos;Default&apos; in texture picker. (UUID texture reference)</string>
1754 <key>Persist</key>
1755 <integer>1</integer>
1756 <key>Type</key>
1757 <string>String</string>
1758 <key>Value</key>
1759 <string>89556747-24cb-43ed-920b-47caed15465f</string>
1760 </map>
1761 <key>DisableCameraConstraints</key>
1762 <map>
1763 <key>Comment</key>
1764 <string>Disable the normal bounds put on the camera by avatar position</string>
1765 <key>Persist</key>
1766 <integer>1</integer>
1767 <key>Type</key>
1768 <string>Boolean</string>
1769 <key>Value</key>
1770 <integer>0</integer>
1771 </map>
1772 <key>DisableRendering</key>
1773 <map>
1774 <key>Comment</key>
1775 <string>Disable GL rendering and GUI (load testing)</string>
1776 <key>Persist</key>
1777 <integer>1</integer>
1778 <key>Type</key>
1779 <string>Boolean</string>
1780 <key>Value</key>
1781 <integer>0</integer>
1782 </map>
1783 <key>DisableVerticalSync</key>
1784 <map>
1785 <key>Comment</key>
1786 <string>Update frames as fast as possible (FALSE = update frames between display scans)</string>
1787 <key>Persist</key>
1788 <integer>1</integer>
1789 <key>Type</key>
1790 <string>Boolean</string>
1791 <key>Value</key>
1792 <integer>1</integer>
1793 </map>
1794 <key>DisplayAvatarAgentTarget</key>
1795 <map>
1796 <key>Comment</key>
1797 <string>Show avatar positioning locators (animation debug)</string>
1798 <key>Persist</key>
1799 <integer>1</integer>
1800 <key>Type</key>
1801 <string>Boolean</string>
1802 <key>Value</key>
1803 <integer>0</integer>
1804 </map>
1805 <key>DisplayChat</key>
1806 <map>
1807 <key>Comment</key>
1808 <string>Display Latest Chat message on LCD</string>
1809 <key>Persist</key>
1810 <integer>1</integer>
1811 <key>Type</key>
1812 <string>Boolean</string>
1813 <key>Value</key>
1814 <integer>1</integer>
1815 </map>
1816 <key>DisplayDebug</key>
1817 <map>
1818 <key>Comment</key>
1819 <string>Display Network Information on LCD</string>
1820 <key>Persist</key>
1821 <integer>1</integer>
1822 <key>Type</key>
1823 <string>Boolean</string>
1824 <key>Value</key>
1825 <integer>1</integer>
1826 </map>
1827 <key>DisplayDebugConsole</key>
1828 <map>
1829 <key>Comment</key>
1830 <string>Display Console Debug Information on LCD</string>
1831 <key>Persist</key>
1832 <integer>1</integer>
1833 <key>Type</key>
1834 <string>Boolean</string>
1835 <key>Value</key>
1836 <integer>1</integer>
1837 </map>
1838 <key>DisplayIM</key>
1839 <map>
1840 <key>Comment</key>
1841 <string>Display Latest IM message on LCD</string>
1842 <key>Persist</key>
1843 <integer>1</integer>
1844 <key>Type</key>
1845 <string>Boolean</string>
1846 <key>Value</key>
1847 <integer>1</integer>
1848 </map>
1849 <key>DisplayLinden</key>
1850 <map>
1851 <key>Comment</key>
1852 <string>Display Account Information on LCD</string>
1853 <key>Persist</key>
1854 <integer>1</integer>
1855 <key>Type</key>
1856 <string>Boolean</string>
1857 <key>Value</key>
1858 <integer>1</integer>
1859 </map>
1860 <key>DisplayRegion</key>
1861 <map>
1862 <key>Comment</key>
1863 <string>Display Location information on LCD</string>
1864 <key>Persist</key>
1865 <integer>1</integer>
1866 <key>Type</key>
1867 <string>Boolean</string>
1868 <key>Value</key>
1869 <integer>1</integer>
1870 </map>
1871 <key>DisplayTimecode</key>
1872 <map>
1873 <key>Comment</key>
1874 <string>Display timecode on screen</string>
1875 <key>Persist</key>
1876 <integer>1</integer>
1877 <key>Type</key>
1878 <string>Boolean</string>
1879 <key>Value</key>
1880 <integer>0</integer>
1881 </map>
1882 <key>Disregard128DefaultDrawDistance</key>
1883 <map>
1884 <key>Comment</key>
1885 <string>Whether to use the auto default to 128 draw distance</string>
1886 <key>Persist</key>
1887 <integer>1</integer>
1888 <key>Type</key>
1889 <string>Boolean</string>
1890 <key>Value</key>
1891 <integer>1</integer>
1892 </map>
1893 <key>Disregard96DefaultDrawDistance</key>
1894 <map>
1895 <key>Comment</key>
1896 <string>Whether to use the auto default to 96 draw distance</string>
1897 <key>Persist</key>
1898 <integer>1</integer>
1899 <key>Type</key>
1900 <string>Boolean</string>
1901 <key>Value</key>
1902 <integer>1</integer>
1903 </map>
1904 <key>DoubleClickAutoPilot</key>
1905 <map>
1906 <key>Comment</key>
1907 <string>Enable double-click auto pilot</string>
1908 <key>Persist</key>
1909 <integer>1</integer>
1910 <key>Type</key>
1911 <string>Boolean</string>
1912 <key>Value</key>
1913 <integer>0</integer>
1914 </map>
1915 <key>DragAndDropToolTipDelay</key>
1916 <map>
1917 <key>Comment</key>
1918 <string>Seconds before displaying tooltip when performing drag and drop operation</string>
1919 <key>Persist</key>
1920 <integer>1</integer>
1921 <key>Type</key>
1922 <string>F32</string>
1923 <key>Value</key>
1924 <real>0.1000000014901161193847656</real>
1925 </map>
1926 <key>DropShadowButton</key>
1927 <map>
1928 <key>Comment</key>
1929 <string>Drop shadow width for buttons (pixels)</string>
1930 <key>Persist</key>
1931 <integer>1</integer>
1932 <key>Type</key>
1933 <string>S32</string>
1934 <key>Value</key>
1935 <integer>2</integer>
1936 </map>
1937 <key>DropShadowFloater</key>
1938 <map>
1939 <key>Comment</key>
1940 <string>Drop shadow width for floaters (pixels)</string>
1941 <key>Persist</key>
1942 <integer>1</integer>
1943 <key>Type</key>
1944 <string>S32</string>
1945 <key>Value</key>
1946 <integer>5</integer>
1947 </map>
1948 <key>DropShadowSlider</key>
1949 <map>
1950 <key>Comment</key>
1951 <string>Drop shadow width for sliders (pixels)</string>
1952 <key>Persist</key>
1953 <integer>1</integer>
1954 <key>Type</key>
1955 <string>S32</string>
1956 <key>Value</key>
1957 <integer>3</integer>
1958 </map>
1959 <key>DropShadowTooltip</key>
1960 <map>
1961 <key>Comment</key>
1962 <string>Drop shadow width for tooltips (pixels)</string>
1963 <key>Persist</key>
1964 <integer>1</integer>
1965 <key>Type</key>
1966 <string>S32</string>
1967 <key>Value</key>
1968 <integer>4</integer>
1969 </map>
1970 <key>DynamicCameraStrength</key>
1971 <map>
1972 <key>Comment</key>
1973 <string>Amount camera lags behind avatar motion (0 = none, 30 = avatar velocity)</string>
1974 <key>Persist</key>
1975 <integer>1</integer>
1976 <key>Type</key>
1977 <string>F32</string>
1978 <key>Value</key>
1979 <real>2</real>
1980 </map>
1981 <key>EditCameraMovement</key>
1982 <map>
1983 <key>Comment</key>
1984 <string>When entering build mode, camera moves up above avatar</string>
1985 <key>Persist</key>
1986 <integer>1</integer>
1987 <key>Type</key>
1988 <string>Boolean</string>
1989 <key>Value</key>
1990 <integer>0</integer>
1991 </map>
1992 <key>EditLinkedParts</key>
1993 <map>
1994 <key>Comment</key>
1995 <string>Select individual parts of linked objects</string>
1996 <key>Persist</key>
1997 <integer>0</integer>
1998 <key>Type</key>
1999 <string>Boolean</string>
2000 <key>Value</key>
2001 <integer>0</integer>
2002 </map>
2003 <key>EffectColor</key>
2004 <map>
2005 <key>Comment</key>
2006 <string>Particle effects color</string>
2007 <key>Persist</key>
2008 <integer>1</integer>
2009 <key>Type</key>
2010 <string>Color4</string>
2011 <key>Value</key>
2012 <array>
2013 <real>1</real>
2014 <real>1</real>
2015 <real>1</real>
2016 <real>1</real>
2017 </array>
2018 </map>
2019 <key>EnablePushToTalk</key>
2020 <map>
2021 <key>Comment</key>
2022 <string>Must hold down a key or moouse button when talking into your microphone</string>
2023 <key>Persist</key>
2024 <integer>1</integer>
2025 <key>Type</key>
2026 <string>Boolean</string>
2027 <key>Value</key>
2028 <integer>1</integer>
2029 </map>
2030 <key>EnableVoiceChat</key>
2031 <map>
2032 <key>Comment</key>
2033 <string>Enable talking to other residents with a microphone</string>
2034 <key>Persist</key>
2035 <integer>1</integer>
2036 <key>Type</key>
2037 <string>Boolean</string>
2038 <key>Value</key>
2039 <integer>1</integer>
2040 </map>
2041 <key>EnergyFromTop</key>
2042 <map>
2043 <key>Comment</key>
2044 <string />
2045 <key>Persist</key>
2046 <integer>0</integer>
2047 <key>Type</key>
2048 <string>S32</string>
2049 <key>Value</key>
2050 <integer>20</integer>
2051 </map>
2052 <key>EnergyHeight</key>
2053 <map>
2054 <key>Comment</key>
2055 <string />
2056 <key>Persist</key>
2057 <integer>0</integer>
2058 <key>Type</key>
2059 <string>S32</string>
2060 <key>Value</key>
2061 <integer>40</integer>
2062 </map>
2063 <key>EnergyWidth</key>
2064 <map>
2065 <key>Comment</key>
2066 <string />
2067 <key>Persist</key>
2068 <integer>0</integer>
2069 <key>Type</key>
2070 <string>S32</string>
2071 <key>Value</key>
2072 <integer>175</integer>
2073 </map>
2074 <key>FilterItemsPerFrame</key>
2075 <map>
2076 <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>
2078 <key>Persist</key>
2079 <integer>1</integer>
2080 <key>Type</key>
2081 <string>S32</string>
2082 <key>Value</key>
2083 <integer>500</integer>
2084 </map>
2085 <key>FindLandArea</key>
2086 <map>
2087 <key>Comment</key>
2088 <string>Enables filtering of land search results by area</string>
2089 <key>Persist</key>
2090 <integer>1</integer>
2091 <key>Type</key>
2092 <string>Boolean</string>
2093 <key>Value</key>
2094 <integer>0</integer>
2095 </map>
2096 <key>FindLandPrice</key>
2097 <map>
2098 <key>Comment</key>
2099 <string>Enables filtering of land search results by price</string>
2100 <key>Persist</key>
2101 <integer>1</integer>
2102 <key>Type</key>
2103 <string>Boolean</string>
2104 <key>Value</key>
2105 <integer>1</integer>
2106 </map>
2107 <key>FindLandType</key>
2108 <map>
2109 <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>
2111 <key>Persist</key>
2112 <integer>1</integer>
2113 <key>Type</key>
2114 <string>String</string>
2115 <key>Value</key>
2116 <string>All</string>
2117 </map>
2118 <key>FindPeopleOnline</key>
2119 <map>
2120 <key>Comment</key>
2121 <string>Limits people search to only users who are logged on</string>
2122 <key>Persist</key>
2123 <integer>1</integer>
2124 <key>Type</key>
2125 <string>Boolean</string>
2126 <key>Value</key>
2127 <integer>1</integer>
2128 </map>
2129 <key>FindPlacesPictures</key>
2130 <map>
2131 <key>Comment</key>
2132 <string>Display only results of find places that have pictures</string>
2133 <key>Persist</key>
2134 <integer>1</integer>
2135 <key>Type</key>
2136 <string>Boolean</string>
2137 <key>Value</key>
2138 <integer>1</integer>
2139 </map>
2140 <key>FirstLoginThisInstall</key>
2141 <map>
2142 <key>Comment</key>
2143 <string>Specifies that you have not successfully logged in since you installed the latest update</string>
2144 <key>Persist</key>
2145 <integer>1</integer>
2146 <key>Type</key>
2147 <string>Boolean</string>
2148 <key>Value</key>
2149 <integer>1</integer>
2150 </map>
2151 <key>FirstName</key>
2152 <map>
2153 <key>Comment</key>
2154 <string>Login first name</string>
2155 <key>Persist</key>
2156 <integer>1</integer>
2157 <key>Type</key>
2158 <string>String</string>
2159 <key>Value</key>
2160 <string />
2161 </map>
2162 <key>FirstPersonAvatarVisible</key>
2163 <map>
2164 <key>Comment</key>
2165 <string>Display avatar and attachments below neck while in mouselook</string>
2166 <key>Persist</key>
2167 <integer>1</integer>
2168 <key>Type</key>
2169 <string>Boolean</string>
2170 <key>Value</key>
2171 <integer>0</integer>
2172 </map>
2173 <key>FirstPersonBtnState</key>
2174 <map>
2175 <key>Comment</key>
2176 <string />
2177 <key>Persist</key>
2178 <integer>0</integer>
2179 <key>Type</key>
2180 <string>Boolean</string>
2181 <key>Value</key>
2182 <integer>0</integer>
2183 </map>
2184 <key>FirstRunThisInstall</key>
2185 <map>
2186 <key>Comment</key>
2187 <string>Specifies that you have not run the viewer since you installed the latest update</string>
2188 <key>Persist</key>
2189 <integer>1</integer>
2190 <key>Type</key>
2191 <string>Boolean</string>
2192 <key>Value</key>
2193 <integer>1</integer>
2194 </map>
2195 <key>FixedWeather</key>
2196 <map>
2197 <key>Comment</key>
2198 <string>Weather effects do not change over time</string>
2199 <key>Persist</key>
2200 <integer>1</integer>
2201 <key>Type</key>
2202 <string>Boolean</string>
2203 <key>Value</key>
2204 <integer>0</integer>
2205 </map>
2206 <key>FloaterAboutRect</key>
2207 <map>
2208 <key>Comment</key>
2209 <string>Rectangle for About window</string>
2210 <key>Persist</key>
2211 <integer>1</integer>
2212 <key>Type</key>
2213 <string>Rect</string>
2214 <key>Value</key>
2215 <array>
2216 <integer>0</integer>
2217 <integer>440</integer>
2218 <integer>470</integer>
2219 <integer>0</integer>
2220 </array>
2221 </map>
2222 <key>FloaterActiveSpeakersRect</key>
2223 <map>
2224 <key>Comment</key>
2225 <string>Rectangle for active speakers window</string>
2226 <key>Persist</key>
2227 <integer>1</integer>
2228 <key>Type</key>
2229 <string>Rect</string>
2230 <key>Value</key>
2231 <array>
2232 <integer>0</integer>
2233 <integer>300</integer>
2234 <integer>250</integer>
2235 <integer>0</integer>
2236 </array>
2237 </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>
2250 <map>
2251 <key>Comment</key>
2252 <string>Whether to sort up or down</string>
2253 <key>Persist</key>
2254 <integer>1</integer>
2255 <key>Type</key>
2256 <string>Boolean</string>
2257 <key>Value</key>
2258 <integer>0</integer>
2259 </map>
2260 <key>FloaterAudioVolumeRect</key>
2261 <map>
2262 <key>Comment</key>
2263 <string>Rectangle for Audio Volume window</string>
2264 <key>Persist</key>
2265 <integer>1</integer>
2266 <key>Type</key>
2267 <string>Rect</string>
2268 <key>Value</key>
2269 <array>
2270 <integer>0</integer>
2271 <integer>440</integer>
2272 <integer>470</integer>
2273 <integer>0</integer>
2274 </array>
2275 </map>
2276 <key>FloaterBuildOptionsRect</key>
2277 <map>
2278 <key>Comment</key>
2279 <string>Rectangle for build options window.</string>
2280 <key>Persist</key>
2281 <integer>1</integer>
2282 <key>Type</key>
2283 <string>Rect</string>
2284 <key>Value</key>
2285 <array>
2286 <integer>0</integer>
2287 <integer>0</integer>
2288 <integer>0</integer>
2289 <integer>0</integer>
2290 </array>
2291 </map>
2292 <key>FloaterBumpRect</key>
2293 <map>
2294 <key>Comment</key>
2295 <string>Rectangle for Bumps/Hits window</string>
2296 <key>Persist</key>
2297 <integer>1</integer>
2298 <key>Type</key>
2299 <string>Rect</string>
2300 <key>Value</key>
2301 <array>
2302 <integer>0</integer>
2303 <integer>180</integer>
2304 <integer>400</integer>
2305 <integer>0</integer>
2306 </array>
2307 </map>
2308 <key>FloaterBuyContentsRect</key>
2309 <map>
2310 <key>Comment</key>
2311 <string>Rectangle for Buy Contents window</string>
2312 <key>Persist</key>
2313 <integer>1</integer>
2314 <key>Type</key>
2315 <string>Rect</string>
2316 <key>Value</key>
2317 <array>
2318 <integer>0</integer>
2319 <integer>250</integer>
2320 <integer>300</integer>
2321 <integer>0</integer>
2322 </array>
2323 </map>
2324 <key>FloaterBuyRect</key>
2325 <map>
2326 <key>Comment</key>
2327 <string>Rectangle for buy window</string>
2328 <key>Persist</key>
2329 <integer>1</integer>
2330 <key>Type</key>
2331 <string>Rect</string>
2332 <key>Value</key>
2333 <array>
2334 <integer>0</integer>
2335 <integer>250</integer>
2336 <integer>300</integer>
2337 <integer>0</integer>
2338 </array>
2339 </map>
2340 <key>FloaterCameraRect3</key>
2341 <map>
2342 <key>Comment</key>
2343 <string>Rectangle for camera control window</string>
2344 <key>Persist</key>
2345 <integer>1</integer>
2346 <key>Type</key>
2347 <string>Rect</string>
2348 <key>Value</key>
2349 <array>
2350 <integer>0</integer>
2351 <integer>64</integer>
2352 <integer>176</integer>
2353 <integer>0</integer>
2354 </array>
2355 </map>
2356 <key>FloaterChatRect</key>
2357 <map>
2358 <key>Comment</key>
2359 <string>Rectangle for chat history</string>
2360 <key>Persist</key>
2361 <integer>1</integer>
2362 <key>Type</key>
2363 <string>Rect</string>
2364 <key>Value</key>
2365 <array>
2366 <integer>0</integer>
2367 <integer>172</integer>
2368 <integer>500</integer>
2369 <integer>0</integer>
2370 </array>
2371 </map>
2372 <key>FloaterClothingRect</key>
2373 <map>
2374 <key>Comment</key>
2375 <string>Rectangle for clothing window</string>
2376 <key>Persist</key>
2377 <integer>1</integer>
2378 <key>Type</key>
2379 <string>Rect</string>
2380 <key>Value</key>
2381 <array>
2382 <integer>0</integer>
2383 <integer>480</integer>
2384 <integer>320</integer>
2385 <integer>0</integer>
2386 </array>
2387 </map>
2388 <key>FloaterContactsRect</key>
2389 <map>
2390 <key>Comment</key>
2391 <string>Rectangle for chat history</string>
2392 <key>Persist</key>
2393 <integer>1</integer>
2394 <key>Type</key>
2395 <string>Rect</string>
2396 <key>Value</key>
2397 <array>
2398 <integer>0</integer>
2399 <integer>390</integer>
2400 <integer>395</integer>
2401 <integer>0</integer>
2402 </array>
2403 </map>
2404 <key>FloaterCustomizeAppearanceRect</key>
2405 <map>
2406 <key>Comment</key>
2407 <string>Rectangle for avatar customization window</string>
2408 <key>Persist</key>
2409 <integer>1</integer>
2410 <key>Type</key>
2411 <string>Rect</string>
2412 <key>Value</key>
2413 <array>
2414 <integer>0</integer>
2415 <integer>540</integer>
2416 <integer>494</integer>
2417 <integer>0</integer>
2418 </array>
2419 </map>
2420 <key>FloaterFindRect2</key>
2421 <map>
2422 <key>Comment</key>
2423 <string>Rectangle for Find window</string>
2424 <key>Persist</key>
2425 <integer>1</integer>
2426 <key>Type</key>
2427 <string>Rect</string>
2428 <key>Value</key>
2429 <array>
2430 <integer>0</integer>
2431 <integer>570</integer>
2432 <integer>780</integer>
2433 <integer>0</integer>
2434 </array>
2435 </map>
2436 <key>FloaterFriendsRect</key>
2437 <map>
2438 <key>Comment</key>
2439 <string>Rectangle for friends window</string>
2440 <key>Persist</key>
2441 <integer>1</integer>
2442 <key>Type</key>
2443 <string>Rect</string>
2444 <key>Value</key>
2445 <array>
2446 <integer>0</integer>
2447 <integer>400</integer>
2448 <integer>250</integer>
2449 <integer>0</integer>
2450 </array>
2451 </map>
2452 <key>FloaterGestureRect2</key>
2453 <map>
2454 <key>Comment</key>
2455 <string>Rectangle for gestures window</string>
2456 <key>Persist</key>
2457 <integer>1</integer>
2458 <key>Type</key>
2459 <string>Rect</string>
2460 <key>Value</key>
2461 <array>
2462 <integer>0</integer>
2463 <integer>465</integer>
2464 <integer>350</integer>
2465 <integer>0</integer>
2466 </array>
2467 </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>
2485 <map>
2486 <key>Comment</key>
2487 <string>Rectangle for HUD Floater window</string>
2488 <key>Persist</key>
2489 <integer>1</integer>
2490 <key>Type</key>
2491 <string>Rect</string>
2492 <key>Value</key>
2493 <array>
2494 <integer>0</integer>
2495 <integer>282</integer>
2496 <integer>342</integer>
2497 <integer>0</integer>
2498 </array>
2499 </map>
2500 <key>FloaterIMRect</key>
2501 <map>
2502 <key>Comment</key>
2503 <string>Rectangle for IM window</string>
2504 <key>Persist</key>
2505 <integer>1</integer>
2506 <key>Type</key>
2507 <string>Rect</string>
2508 <key>Value</key>
2509 <array>
2510 <integer>0</integer>
2511 <integer>160</integer>
2512 <integer>500</integer>
2513 <integer>0</integer>
2514 </array>
2515 </map>
2516 <key>FloaterInspectRect</key>
2517 <map>
2518 <key>Comment</key>
2519 <string>Rectangle for Object Inspect window</string>
2520 <key>Persist</key>
2521 <integer>1</integer>
2522 <key>Type</key>
2523 <string>Rect</string>
2524 <key>Value</key>
2525 <array>
2526 <integer>0</integer>
2527 <integer>400</integer>
2528 <integer>400</integer>
2529 <integer>0</integer>
2530 </array>
2531 </map>
2532 <key>FloaterInventoryRect</key>
2533 <map>
2534 <key>Comment</key>
2535 <string>Rectangle for inventory window</string>
2536 <key>Persist</key>
2537 <integer>1</integer>
2538 <key>Type</key>
2539 <string>Rect</string>
2540 <key>Value</key>
2541 <array>
2542 <integer>0</integer>
2543 <integer>400</integer>
2544 <integer>300</integer>
2545 <integer>0</integer>
2546 </array>
2547 </map>
2548 <key>FloaterJoystickRect</key>
2549 <map>
2550 <key>Comment</key>
2551 <string>Rectangle for joystick controls window.</string>
2552 <key>Persist</key>
2553 <integer>1</integer>
2554 <key>Type</key>
2555 <string>Rect</string>
2556 <key>Value</key>
2557 <array>
2558 <integer>0</integer>
2559 <integer>0</integer>
2560 <integer>0</integer>
2561 <integer>0</integer>
2562 </array>
2563 </map>
2564 <key>FloaterLagMeter</key>
2565 <map>
2566 <key>Comment</key>
2567 <string>Rectangle for lag meter</string>
2568 <key>Persist</key>
2569 <integer>1</integer>
2570 <key>Type</key>
2571 <string>Rect</string>
2572 <key>Value</key>
2573 <array>
2574 <integer>0</integer>
2575 <integer>142</integer>
2576 <integer>350</integer>
2577 <integer>0</integer>
2578 </array>
2579 </map>
2580 <key>FloaterLandRect5</key>
2581 <map>
2582 <key>Comment</key>
2583 <string>Rectangle for About Land window</string>
2584 <key>Persist</key>
2585 <integer>1</integer>
2586 <key>Type</key>
2587 <string>Rect</string>
2588 <key>Value</key>
2589 <array>
2590 <integer>0</integer>
2591 <integer>370</integer>
2592 <integer>460</integer>
2593 <integer>0</integer>
2594 </array>
2595 </map>
2596 <key>FloaterLandmarkRect</key>
2597 <map>
2598 <key>Comment</key>
2599 <string>Rectangle for landmark picker</string>
2600 <key>Persist</key>
2601 <integer>1</integer>
2602 <key>Type</key>
2603 <string>Rect</string>
2604 <key>Value</key>
2605 <array>
2606 <integer>0</integer>
2607 <integer>290</integer>
2608 <integer>310</integer>
2609 <integer>0</integer>
2610 </array>
2611 </map>
2612 <key>FloaterMediaRect</key>
2613 <map>
2614 <key>Comment</key>
2615 <string>Rectangle for media browser window</string>
2616 <key>Persist</key>
2617 <integer>1</integer>
2618 <key>Type</key>
2619 <string>Rect</string>
2620 <key>Value</key>
2621 <array>
2622 <integer>16</integer>
2623 <integer>650</integer>
2624 <integer>600</integer>
2625 <integer>128</integer>
2626 </array>
2627 </map>
2628 <key>FloaterMiniMapRect</key>
2629 <map>
2630 <key>Comment</key>
2631 <string>Rectangle for world map</string>
2632 <key>Persist</key>
2633 <integer>1</integer>
2634 <key>Type</key>
2635 <string>Rect</string>
2636 <key>Value</key>
2637 <array>
2638 <integer>0</integer>
2639 <integer>225</integer>
2640 <integer>200</integer>
2641 <integer>0</integer>
2642 </array>
2643 </map>
2644 <key>FloaterMoveRect2</key>
2645 <map>
2646 <key>Comment</key>
2647 <string>Rectangle for avatar control window</string>
2648 <key>Persist</key>
2649 <integer>1</integer>
2650 <key>Type</key>
2651 <string>Rect</string>
2652 <key>Value</key>
2653 <array>
2654 <integer>0</integer>
2655 <integer>58</integer>
2656 <integer>135</integer>
2657 <integer>0</integer>
2658 </array>
2659 </map>
2660 <key>FloaterMuteRect3</key>
2661 <map>
2662 <key>Comment</key>
2663 <string>Rectangle for mute window</string>
2664 <key>Persist</key>
2665 <integer>1</integer>
2666 <key>Type</key>
2667 <string>Rect</string>
2668 <key>Value</key>
2669 <array>
2670 <integer>0</integer>
2671 <integer>300</integer>
2672 <integer>300</integer>
2673 <integer>0</integer>
2674 </array>
2675 </map>
2676 <key>FloaterOpenObjectRect</key>
2677 <map>
2678 <key>Comment</key>
2679 <string>Rectangle for Open Object window</string>
2680 <key>Persist</key>
2681 <integer>1</integer>
2682 <key>Type</key>
2683 <string>Rect</string>
2684 <key>Value</key>
2685 <array>
2686 <integer>0</integer>
2687 <integer>350</integer>
2688 <integer>300</integer>
2689 <integer>0</integer>
2690 </array>
2691 </map>
2692 <key>FloaterPayRectB</key>
2693 <map>
2694 <key>Comment</key>
2695 <string>Rectangle for pay window</string>
2696 <key>Persist</key>
2697 <integer>1</integer>
2698 <key>Type</key>
2699 <string>Rect</string>
2700 <key>Value</key>
2701 <array>
2702 <integer>0</integer>
2703 <integer>150</integer>
2704 <integer>400</integer>
2705 <integer>0</integer>
2706 </array>
2707 </map>
2708 <key>FloaterRegionInfo</key>
2709 <map>
2710 <key>Comment</key>
2711 <string>Rectangle for region info window</string>
2712 <key>Persist</key>
2713 <integer>1</integer>
2714 <key>Type</key>
2715 <string>Rect</string>
2716 <key>Value</key>
2717 <array>
2718 <integer>0</integer>
2719 <integer>512</integer>
2720 <integer>480</integer>
2721 <integer>0</integer>
2722 </array>
2723 </map>
2724 <key>FloaterScriptDebugRect</key>
2725 <map>
2726 <key>Comment</key>
2727 <string>Rectangle for Script Error/Debug window</string>
2728 <key>Persist</key>
2729 <integer>1</integer>
2730 <key>Type</key>
2731 <string>Rect</string>
2732 <key>Value</key>
2733 <array>
2734 <integer>0</integer>
2735 <integer>130</integer>
2736 <integer>450</integer>
2737 <integer>0</integer>
2738 </array>
2739 </map>
2740 <key>FloaterSnapshotRect</key>
2741 <map>
2742 <key>Comment</key>
2743 <string>Rectangle for snapshot window</string>
2744 <key>Persist</key>
2745 <integer>1</integer>
2746 <key>Type</key>
2747 <string>Rect</string>
2748 <key>Value</key>
2749 <array>
2750 <integer>0</integer>
2751 <integer>200</integer>
2752 <integer>200</integer>
2753 <integer>400</integer>
2754 </array>
2755 </map>
2756 <key>FloaterViewBottom</key>
2757 <map>
2758 <key>Comment</key>
2759 <string>[DO NOT MODIFY] Controls layout of floating windows within SL window</string>
2760 <key>Persist</key>
2761 <integer>1</integer>
2762 <key>Type</key>
2763 <string>S32</string>
2764 <key>Value</key>
2765 <integer>-1</integer>
2766 </map>
2767 <key>FloaterWorldMapRect2</key>
2768 <map>
2769 <key>Comment</key>
2770 <string>Rectangle for world map window</string>
2771 <key>Persist</key>
2772 <integer>1</integer>
2773 <key>Type</key>
2774 <string>Rect</string>
2775 <key>Value</key>
2776 <array>
2777 <integer>0</integer>
2778 <integer>0</integer>
2779 <integer>0</integer>
2780 <integer>0</integer>
2781 </array>
2782 </map>
2783 <key>FlyBtnState</key>
2784 <map>
2785 <key>Comment</key>
2786 <string />
2787 <key>Persist</key>
2788 <integer>0</integer>
2789 <key>Type</key>
2790 <string>Boolean</string>
2791 <key>Value</key>
2792 <integer>0</integer>
2793 </map>
2794 <key>FlycamAbsolute</key>
2795 <map>
2796 <key>Comment</key>
2797 <string>Treat Flycam values as absolute positions (not deltas).</string>
2798 <key>Persist</key>
2799 <integer>1</integer>
2800 <key>Type</key>
2801 <string>Boolean</string>
2802 <key>Value</key>
2803 <integer>0</integer>
2804 </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 <string>0</string>
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>
2971 <map>
2972 <key>Comment</key>
2973 <string>Flycam axis 0 dead zone.</string>
2974 <key>Persist</key>
2975 <integer>1</integer>
2976 <key>Type</key>
2977 <string>F32</string>
2978 <key>Value</key>
2979 <real>0.1</real>
2980 </map>
2981 <key>FlycamAxisDeadZone1</key>
2982 <map>
2983 <key>Comment</key>
2984 <string>Flycam axis 1 dead zone.</string>
2985 <key>Persist</key>
2986 <integer>1</integer>
2987 <key>Type</key>
2988 <string>F32</string>
2989 <key>Value</key>
2990 <real>0.1</real>
2991 </map>
2992 <key>FlycamAxisDeadZone2</key>
2993 <map>
2994 <key>Comment</key>
2995 <string>Flycam axis 2 dead zone.</string>
2996 <key>Persist</key>
2997 <integer>1</integer>
2998 <key>Type</key>
2999 <string>F32</string>
3000 <key>Value</key>
3001 <real>0.1</real>
3002 </map>
3003 <key>FlycamAxisDeadZone3</key>
3004 <map>
3005 <key>Comment</key>
3006 <string>Flycam axis 3 dead zone.</string>
3007 <key>Persist</key>
3008 <integer>1</integer>
3009 <key>Type</key>
3010 <string>F32</string>
3011 <key>Value</key>
3012 <real>0.1</real>
3013 </map>
3014 <key>FlycamAxisDeadZone4</key>
3015 <map>
3016 <key>Comment</key>
3017 <string>Flycam axis 4 dead zone.</string>
3018 <key>Persist</key>
3019 <integer>1</integer>
3020 <key>Type</key>
3021 <string>F32</string>
3022 <key>Value</key>
3023 <real>0.1</real>
3024 </map>
3025 <key>FlycamAxisDeadZone5</key>
3026 <map>
3027 <key>Comment</key>
3028 <string>Flycam axis 5 dead zone.</string>
3029 <key>Persist</key>
3030 <integer>1</integer>
3031 <key>Type</key>
3032 <string>F32</string>
3033 <key>Value</key>
3034 <real>0.1</real>
3035 </map>
3036 <key>FlycamAxisDeadZone6</key>
3037 <map>
3038 <key>Comment</key>
3039 <string>Flycam axis 6 dead zone.</string>
3040 <key>Persist</key>
3041 <integer>1</integer>
3042 <key>Type</key>
3043 <string>F32</string>
3044 <key>Value</key>
3045 <real>0.1</real>
3046 </map>
3047 <key>FlycamAxisScale0</key>
3048 <map>
3049 <key>Comment</key>
3050 <string>Flycam axis 0 scaler.</string>
3051 <key>Persist</key>
3052 <integer>1</integer>
3053 <key>Type</key>
3054 <string>F32</string>
3055 <key>Value</key>
3056 <real>1</real>
3057 </map>
3058 <key>FlycamAxisScale1</key>
3059 <map>
3060 <key>Comment</key>
3061 <string>Flycam axis 1 scaler.</string>
3062 <key>Persist</key>
3063 <integer>1</integer>
3064 <key>Type</key>
3065 <string>F32</string>
3066 <key>Value</key>
3067 <real>1</real>
3068 </map>
3069 <key>FlycamAxisScale2</key>
3070 <map>
3071 <key>Comment</key>
3072 <string>Flycam axis 2 scaler.</string>
3073 <key>Persist</key>
3074 <integer>1</integer>
3075 <key>Type</key>
3076 <string>F32</string>
3077 <key>Value</key>
3078 <real>1</real>
3079 </map>
3080 <key>FlycamAxisScale3</key>
3081 <map>
3082 <key>Comment</key>
3083 <string>Flycam axis 3 scaler.</string>
3084 <key>Persist</key>
3085 <integer>1</integer>
3086 <key>Type</key>
3087 <string>F32</string>
3088 <key>Value</key>
3089 <real>1</real>
3090 </map>
3091 <key>FlycamAxisScale4</key>
3092 <map>
3093 <key>Comment</key>
3094 <string>Flycam axis 4 scaler.</string>
3095 <key>Persist</key>
3096 <integer>1</integer>
3097 <key>Type</key>
3098 <string>F32</string>
3099 <key>Value</key>
3100 <real>1</real>
3101 </map>
3102 <key>FlycamAxisScale5</key>
3103 <map>
3104 <key>Comment</key>
3105 <string>Flycam axis 5 scaler.</string>
3106 <key>Persist</key>
3107 <integer>1</integer>
3108 <key>Type</key>
3109 <string>F32</string>
3110 <key>Value</key>
3111 <real>1</real>
3112 </map>
3113 <key>FlycamAxisScale6</key>
3114 <map>
3115 <key>Comment</key>
3116 <string>Flycam axis 6 scaler.</string>
3117 <key>Persist</key>
3118 <integer>1</integer>
3119 <key>Type</key>
3120 <string>F32</string>
3121 <key>Value</key>
3122 <real>1</real>
3123 </map>
3124 <key>FlycamFeathering</key>
3125 <map>
3126 <key>Comment</key>
3127 <string>Flycam feathering (less is softer)</string>
3128 <key>Persist</key>
3129 <integer>1</integer>
3130 <key>Type</key>
3131 <string>F32</string>
3132 <key>Value</key>
3133 <real>16</real>
3134 </map>
3135 <key>FlycamZoomDirect</key>
3136 <map>
3137 <key>Comment</key>
3138 <string>Map flycam zoom axis directly to camera zoom.</string>
3139 <key>Persist</key>
3140 <integer>1</integer>
3141 <key>Type</key>
3142 <string>Boolean</string>
3143 <key>Value</key>
3144 <integer>0</integer>
3145 </map>
3146 <key>FlyingAtExit</key>
3147 <map>
3148 <key>Comment</key>
3149 <string>Was flying when last logged out, so fly when logging in</string>
3150 <key>Persist</key>
3151 <integer>1</integer>
3152 <key>Type</key>
3153 <string>Boolean</string>
3154 <key>Value</key>
3155 <integer>0</integer>
3156 </map>
3157 <key>FocusOffsetDefault</key>
3158 <map>
3159 <key>Comment</key>
3160 <string>Default focus point offset relative to avatar (x-axis is forward)</string>
3161 <key>Persist</key>
3162 <integer>1</integer>
3163 <key>Type</key>
3164 <string>Vector3</string>
3165 <key>Value</key>
3166 <array>
3167 <real>1</real>
3168 <real>0</real>
3169 <real>1</real>
3170 </array>
3171 </map>
3172 <key>FocusPosOnLogout</key>
3173 <map>
3174 <key>Comment</key>
3175 <string>Camera focus point when last logged out (global coordinates)</string>
3176 <key>Persist</key>
3177 <integer>1</integer>
3178 <key>Type</key>
3179 <string>Vector3D</string>
3180 <key>Value</key>
3181 <array>
3182 <real>0</real>
3183 <real>0</real>
3184 <real>0</real>
3185 </array>
3186 </map>
3187 <key>FolderAutoOpenDelay</key>
3188 <map>
3189 <key>Comment</key>
3190 <string>Seconds before automatically expanding the folder under the mouse when performing inventory drag and drop</string>
3191 <key>Persist</key>
3192 <integer>1</integer>
3193 <key>Type</key>
3194 <string>F32</string>
3195 <key>Value</key>
3196 <real>0.75</real>
3197 </map>
3198 <key>FolderLoadingMessageWaitTime</key>
3199 <map>
3200 <key>Comment</key>
3201 <string>Seconds to wait before showing the LOADING... text in folder views</string>
3202 <key>Persist</key>
3203 <integer>1</integer>
3204 <key>Type</key>
3205 <string>F32</string>
3206 <key>Value</key>
3207 <real>0.5</real>
3208 </map>
3209 <key>FontMonospace</key>
3210 <map>
3211 <key>Comment</key>
3212 <string>Name of monospace font (Truetype file name)</string>
3213 <key>Persist</key>
3214 <integer>1</integer>
3215 <key>Type</key>
3216 <string>String</string>
3217 <key>Value</key>
3218 <string>profontwindows.ttf</string>
3219 </map>
3220 <key>FontSansSerif</key>
3221 <map>
3222 <key>Comment</key>
3223 <string>Name of san-serif font (Truetype file name)</string>
3224 <key>Persist</key>
3225 <integer>1</integer>
3226 <key>Type</key>
3227 <string>String</string>
3228 <key>Value</key>
3229 <string>MtBkLfRg.ttf</string>
3230 </map>
3231 <key>FontSansSerifBold</key>
3232 <map>
3233 <key>Comment</key>
3234 <string>Name of bold font (Truetype file name)</string>
3235 <key>Persist</key>
3236 <integer>1</integer>
3237 <key>Type</key>
3238 <string>String</string>
3239 <key>Value</key>
3240 <string>MtBdLfRg.ttf</string>
3241 </map>
3242 <key>FontSansSerifFallback</key>
3243 <map>
3244 <key>Comment</key>
3245 <string>Name of san-serif font (Truetype file name)</string>
3246 <key>Persist</key>
3247 <integer>1</integer>
3248 <key>Type</key>
3249 <string>String</string>
3250 <key>Value</key>
3251 <string></string>
3252 </map>
3253 <key>FontSansSerifFallbackScale</key>
3254 <map>
3255 <key>Comment</key>
3256 <string>Scale of fallback font relative to huge font (fraction of huge font size)</string>
3257 <key>Persist</key>
3258 <integer>1</integer>
3259 <key>Type</key>
3260 <string>F32</string>
3261 <key>Value</key>
3262 <real>1</real>
3263 </map>
3264 <key>FontScreenDPI</key>
3265 <map>
3266 <key>Comment</key>
3267 <string>Font resolution, higher is bigger (pixels per inch)</string>
3268 <key>Persist</key>
3269 <integer>1</integer>
3270 <key>Type</key>
3271 <string>F32</string>
3272 <key>Value</key>
3273 <real>96</real>
3274 </map>
3275 <key>FontSizeHuge</key>
3276 <map>
3277 <key>Comment</key>
3278 <string>Size of huge font (points, or 1/72 of an inch)</string>
3279 <key>Persist</key>
3280 <integer>1</integer>
3281 <key>Type</key>
3282 <string>F32</string>
3283 <key>Value</key>
3284 <real>16</real>
3285 </map>
3286 <key>FontSizeLarge</key>
3287 <map>
3288 <key>Comment</key>
3289 <string>Size of large font (points, or 1/72 of an inch)</string>
3290 <key>Persist</key>
3291 <integer>1</integer>
3292 <key>Type</key>
3293 <string>F32</string>
3294 <key>Value</key>
3295 <real>12</real>
3296 </map>
3297 <key>FontSizeMedium</key>
3298 <map>
3299 <key>Comment</key>
3300 <string>Size of medium font (points, or 1/72 of an inch)</string>
3301 <key>Persist</key>
3302 <integer>1</integer>
3303 <key>Type</key>
3304 <string>F32</string>
3305 <key>Value</key>
3306 <real>10</real>
3307 </map>
3308 <key>FontSizeMonospace</key>
3309 <map>
3310 <key>Comment</key>
3311 <string>Size of monospaced font (points, or 1/72 of an inch)</string>
3312 <key>Persist</key>
3313 <integer>1</integer>
3314 <key>Type</key>
3315 <string>F32</string>
3316 <key>Value</key>
3317 <real>9</real>
3318 </map>
3319 <key>FontSizeSmall</key>
3320 <map>
3321 <key>Comment</key>
3322 <string>Size of small font (points, or 1/72 of an inch)</string>
3323 <key>Persist</key>
3324 <integer>1</integer>
3325 <key>Type</key>
3326 <string>F32</string>
3327 <key>Value</key>
3328 <real>9</real>
3329 </map>
3330 <key>ForceShowGrid</key>
3331 <map>
3332 <key>Comment</key>
3333 <string>Always show grid dropdown on login screen</string>
3334 <key>Persist</key>
3335 <integer>1</integer>
3336 <key>Type</key>
3337 <string>Boolean</string>
3338 <key>Value</key>
3339 <integer>0</integer>
3340 </map>
3341 <key>ForwardBtnRect</key>
3342 <map>
3343 <key>Comment</key>
3344 <string />
3345 <key>Persist</key>
3346 <integer>0</integer>
3347 <key>Type</key>
3348 <string>Rect</string>
3349 <key>Value</key>
3350 <array>
3351 <integer>45</integer>
3352 <integer>54</integer>
3353 <integer>66</integer>
3354 <integer>29</integer>
3355 </array>
3356 </map>
3357 <key>FreezeTime</key>
3358 <map>
3359 <key>Comment</key>
3360 <string />
3361 <key>Persist</key>
3362 <integer>0</integer>
3363 <key>Type</key>
3364 <string>Boolean</string>
3365 <key>Value</key>
3366 <integer>0</integer>
3367 </map>
3368 <key>FullScreen</key>
3369 <map>
3370 <key>Comment</key>
3371 <string>Run SL in fullscreen mode</string>
3372 <key>Persist</key>
3373 <integer>1</integer>
3374 <key>Type</key>
3375 <string>Boolean</string>
3376 <key>Value</key>
3377 <integer>0</integer>
3378 </map>
3379 <key>FullScreenAspectRatio</key>
3380 <map>
3381 <key>Comment</key>
3382 <string>Aspect ratio of fullscreen display (width / height)</string>
3383 <key>Persist</key>
3384 <integer>1</integer>
3385 <key>Type</key>
3386 <string>F32</string>
3387 <key>Value</key>
3388 <real>1.33329999446868896484375</real>
3389 </map>
3390 <key>FullScreenAutoDetectAspectRatio</key>
3391 <map>
3392 <key>Comment</key>
3393 <string>Automatically detect proper aspect ratio for fullscreen display</string>
3394 <key>Persist</key>
3395 <integer>1</integer>
3396 <key>Type</key>
3397 <string>Boolean</string>
3398 <key>Value</key>
3399 <integer>1</integer>
3400 </map>
3401 <key>FullScreenHeight</key>
3402 <map>
3403 <key>Comment</key>
3404 <string>Fullscreen resolution in height</string>
3405 <key>Persist</key>
3406 <integer>1</integer>
3407 <key>Type</key>
3408 <string>S32</string>
3409 <key>Value</key>
3410 <integer>768</integer>
3411 </map>
3412 <key>FullScreenWidth</key>
3413 <map>
3414 <key>Comment</key>
3415 <string>Fullscreen resolution in width</string>
3416 <key>Persist</key>
3417 <integer>1</integer>
3418 <key>Type</key>
3419 <string>S32</string>
3420 <key>Value</key>
3421 <integer>1024</integer>
3422 </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>
3435 <map>
3436 <key>Comment</key>
3437 <string>Highlight cross sections of prims with grid manipulation plane.</string>
3438 <key>Persist</key>
3439 <integer>1</integer>
3440 <key>Type</key>
3441 <string>Boolean</string>
3442 <key>Value</key>
3443 <integer>0</integer>
3444 </map>
3445 <key>GridDrawSize</key>
3446 <map>
3447 <key>Comment</key>
3448 <string>Visible extent of 2D snap grid (meters)</string>
3449 <key>Persist</key>
3450 <integer>1</integer>
3451 <key>Type</key>
3452 <string>F32</string>
3453 <key>Value</key>
3454 <real>12</real>
3455 </map>
3456 <key>GridMode</key>
3457 <map>
3458 <key>Comment</key>
3459 <string>Snap grid reference frame (0 = world, 1 = local, 2 = reference object)</string>
3460 <key>Persist</key>
3461 <integer>1</integer>
3462 <key>Type</key>
3463 <string>S32</string>
3464 <key>Value</key>
3465 <integer>0</integer>
3466 </map>
3467 <key>GridOpacity</key>
3468 <map>
3469 <key>Comment</key>
3470 <string>Grid line opacity (0.0 = completely transparent, 1.0 = completely opaque)</string>
3471 <key>Persist</key>
3472 <integer>1</integer>
3473 <key>Type</key>
3474 <string>F32</string>
3475 <key>Value</key>
3476 <real>0.699999988079071044921875</real>
3477 </map>
3478 <key>GridResolution</key>
3479 <map>
3480 <key>Comment</key>
3481 <string>Size of single grid step (meters)</string>
3482 <key>Persist</key>
3483 <integer>1</integer>
3484 <key>Type</key>
3485 <string>F32</string>
3486 <key>Value</key>
3487 <real>0.5</real>
3488 </map>
3489 <key>GridSubUnit</key>
3490 <map>
3491 <key>Comment</key>
3492 <string>Display fractional grid steps, relative to grid size</string>
3493 <key>Persist</key>
3494 <integer>1</integer>
3495 <key>Type</key>
3496 <string>Boolean</string>
3497 <key>Value</key>
3498 <integer>0</integer>
3499 </map>
3500 <key>GridSubdivision</key>
3501 <map>
3502 <key>Comment</key>
3503 <string>Maximum number of times to divide single snap grid unit when GridSubUnit is true</string>
3504 <key>Persist</key>
3505 <integer>1</integer>
3506 <key>Type</key>
3507 <string>S32</string>
3508 <key>Value</key>
3509 <integer>32</integer>
3510 </map>
3511 <key>GroupNotifyBoxHeight</key>
3512 <map>
3513 <key>Comment</key>
3514 <string>Height of group notice messages</string>
3515 <key>Persist</key>
3516 <integer>1</integer>
3517 <key>Type</key>
3518 <string>S32</string>
3519 <key>Value</key>
3520 <integer>260</integer>
3521 </map>
3522 <key>GroupNotifyBoxWidth</key>
3523 <map>
3524 <key>Comment</key>
3525 <string>Width of group notice messages</string>
3526 <key>Persist</key>
3527 <integer>1</integer>
3528 <key>Type</key>
3529 <string>S32</string>
3530 <key>Value</key>
3531 <integer>400</integer>
3532 </map>
3533 <key>HTMLLinkColor</key>
3534 <map>
3535 <key>Comment</key>
3536 <string>Color of hyperlinks</string>
3537 <key>Persist</key>
3538 <integer>1</integer>
3539 <key>Type</key>
3540 <string>Color4</string>
3541 <key>Value</key>
3542 <array>
3543 <real>0.60000002384185791015625</real>
3544 <real>0.60000002384185791015625</real>
3545 <real>1</real>
3546 <real>1</real>
3547 </array>
3548 </map>
3549 <key>HelpHomeURL</key>
3550 <map>
3551 <key>Comment</key>
3552 <string>URL of initial help page</string>
3553 <key>Persist</key>
3554 <integer>1</integer>
3555 <key>Type</key>
3556 <string>String</string>
3557 <key>Value</key>
3558 <string>help/index.html</string>
3559 </map>
3560 <key>HelpLastVisitedURL</key>
3561 <map>
3562 <key>Comment</key>
3563 <string>URL of last help page, will be shown next time help is accessed</string>
3564 <key>Persist</key>
3565 <integer>1</integer>
3566 <key>Type</key>
3567 <string>String</string>
3568 <key>Value</key>
3569 <string>help/index.html</string>
3570 </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>
3583 <map>
3584 <key>Comment</key>
3585 <string>Double resolution of snapshot from current window resolution</string>
3586 <key>Persist</key>
3587 <integer>1</integer>
3588 <key>Type</key>
3589 <string>Boolean</string>
3590 <key>Value</key>
3591 <integer>0</integer>
3592 </map>
3593 <key>HtmlFindRect</key>
3594 <map>
3595 <key>Comment</key>
3596 <string>Rectangle for HTML find window</string>
3597 <key>Persist</key>
3598 <integer>1</integer>
3599 <key>Type</key>
3600 <string>Rect</string>
3601 <key>Value</key>
3602 <array>
3603 <integer>16</integer>
3604 <integer>650</integer>
3605 <integer>600</integer>
3606 <integer>128</integer>
3607 </array>
3608 </map>
3609 <key>HtmlHelpLastPage</key>
3610 <map>
3611 <key>Comment</key>
3612 <string>Last URL visited via help system</string>
3613 <key>Persist</key>
3614 <integer>1</integer>
3615 <key>Type</key>
3616 <string>String</string>
3617 <key>Value</key>
3618 <string />
3619 </map>
3620 <key>HtmlHelpRect</key>
3621 <map>
3622 <key>Comment</key>
3623 <string>Rectangle for HTML help window</string>
3624 <key>Persist</key>
3625 <integer>1</integer>
3626 <key>Type</key>
3627 <string>Rect</string>
3628 <key>Value</key>
3629 <array>
3630 <integer>16</integer>
3631 <integer>650</integer>
3632 <integer>600</integer>
3633 <integer>128</integer>
3634 </array>
3635 </map>
3636 <key>HtmlReleaseMessage</key>
3637 <map>
3638 <key>Comment</key>
3639 <string>Rectangle for HTML Release Message Floater window</string>
3640 <key>Persist</key>
3641 <integer>1</integer>
3642 <key>Type</key>
3643 <string>Rect</string>
3644 <key>Value</key>
3645 <array>
3646 <integer>46</integer>
3647 <integer>520</integer>
3648 <integer>400</integer>
3649 <integer>128</integer>
3650 </array>
3651 </map>
3652 <key>IMInChatHistory</key>
3653 <map>
3654 <key>Comment</key>
3655 <string>Copy IM into chat history</string>
3656 <key>Persist</key>
3657 <integer>1</integer>
3658 <key>Type</key>
3659 <string>Boolean</string>
3660 <key>Value</key>
3661 <integer>0</integer>
3662 </map>
3663 <key>IMShowTimestamps</key>
3664 <map>
3665 <key>Comment</key>
3666 <string>Show timestamps in IM</string>
3667 <key>Persist</key>
3668 <integer>1</integer>
3669 <key>Type</key>
3670 <string>Boolean</string>
3671 <key>Value</key>
3672 <integer>1</integer>
3673 </map>
3674 <key>IgnorePixelDepth</key>
3675 <map>
3676 <key>Comment</key>
3677 <string>Ignore pixel depth settings.</string>
3678 <key>Persist</key>
3679 <integer>1</integer>
3680 <key>Type</key>
3681 <string>Boolean</string>
3682 <key>Value</key>
3683 <integer>0</integer>
3684 </map>
3685 <key>ImagePipelineUseHTTP</key>
3686 <map>
3687 <key>Comment</key>
3688 <string>If TRUE use HTTP GET to fetch textures from the server</string>
3689 <key>Persist</key>
3690 <integer>1</integer>
3691 <key>Type</key>
3692 <string>Boolean</string>
3693 <key>Value</key>
3694 <integer>0</integer>
3695 </map>
3696 <key>InBandwidth</key>
3697 <map>
3698 <key>Comment</key>
3699 <string>Incoming bandwidth throttle (bps)</string>
3700 <key>Persist</key>
3701 <integer>1</integer>
3702 <key>Type</key>
3703 <string>F32</string>
3704 <key>Value</key>
3705 <real>0</real>
3706 </map>
3707 <key>InventoryAutoOpenDelay</key>
3708 <map>
3709 <key>Comment</key>
3710 <string>Seconds before automatically opening inventory when mouse is over inventory button when performing inventory drag and drop</string>
3711 <key>Persist</key>
3712 <integer>1</integer>
3713 <key>Type</key>
3714 <string>F32</string>
3715 <key>Value</key>
3716 <real>1</real>
3717 </map>
3718 <key>InventorySortOrder</key>
3719 <map>
3720 <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>
3722 <key>Persist</key>
3723 <integer>1</integer>
3724 <key>Type</key>
3725 <string>U32</string>
3726 <key>Value</key>
3727 <integer>7</integer>
3728 </map>
3729 <key>InvertMouse</key>
3730 <map>
3731 <key>Comment</key>
3732 <string>When in mouselook, moving mouse up looks down and vice verse (FALSE = moving up looks up)</string>
3733 <key>Persist</key>
3734 <integer>1</integer>
3735 <key>Type</key>
3736 <string>Boolean</string>
3737 <key>Value</key>
3738 <integer>0</integer>
3739 </map>
3740 <key>KeepAspectForSnapshot</key>
3741 <map>
3742 <key>Comment</key>
3743 <string>Use full window when taking snapshot, regardless of requested image size</string>
3744 <key>Persist</key>
3745 <integer>1</integer>
3746 <key>Type</key>
3747 <string>Boolean</string>
3748 <key>Value</key>
3749 <integer>1</integer>
3750 </map>
3751 <key>LCDDestination</key>
3752 <map>
3753 <key>Comment</key>
3754 <string>Which LCD to use</string>
3755 <key>Persist</key>
3756 <integer>1</integer>
3757 <key>Type</key>
3758 <string>S32</string>
3759 <key>Value</key>
3760 <integer>0</integer>
3761 </map>
3762 <key>LSLHelpRect</key>
3763 <map>
3764 <key>Comment</key>
3765 <string>Rectangle for LSL help window</string>
3766 <key>Persist</key>
3767 <integer>1</integer>
3768 <key>Type</key>
3769 <string>Rect</string>
3770 <key>Value</key>
3771 <array>
3772 <integer>0</integer>
3773 <integer>400</integer>
3774 <integer>400</integer>
3775 <integer>0</integer>
3776 </array>
3777 </map>
3778 <key>LSLHelpURL</key>
3779 <map>
3780 <key>Comment</key>
3781 <string>URL that points to LSL help files, with [LSL_STRING] corresponding to the referenced LSL function or keyword</string>
3782 <key>Persist</key>
3783 <integer>1</integer>
3784 <key>Type</key>
3785 <string>String</string>
3786 <key>Value</key>
3787 <string>https://wiki.secondlife.com/wiki/[LSL_STRING]</string>
3788 </map>
3789 <key>LagMeterShrunk</key>
3790 <map>
3791 <key>Comment</key>
3792 <string>Last large/small state for lag meter</string>
3793 <key>Persist</key>
3794 <integer>1</integer>
3795 <key>Type</key>
3796 <string>Boolean</string>
3797 <key>Value</key>
3798 <integer>0</integer>
3799 </map>
3800 <key>Language</key>
3801 <map>
3802 <key>Comment</key>
3803 <string>Language specifier (for XUI)</string>
3804 <key>Persist</key>
3805 <integer>1</integer>
3806 <key>Type</key>
3807 <string>String</string>
3808 <key>Value</key>
3809 <string>default</string>
3810 </map>
3811 <key>LastFeatureVersion</key>
3812 <map>
3813 <key>Comment</key>
3814 <string>[DO NOT MODIFY] Version number for tracking hardware changes</string>
3815 <key>Persist</key>
3816 <integer>1</integer>
3817 <key>Type</key>
3818 <string>S32</string>
3819 <key>Value</key>
3820 <integer>0</integer>
3821 </map>
3822 <key>LastFindPanel</key>
3823 <map>
3824 <key>Comment</key>
3825 <string>Controls which find operation appears by default when clicking &quot;Find&quot; button </string>
3826 <key>Persist</key>
3827 <integer>1</integer>
3828 <key>Type</key>
3829 <string>String</string>
3830 <key>Value</key>
3831 <string>find_all_panel</string>
3832 </map>
3833 <key>LastName</key>
3834 <map>
3835 <key>Comment</key>
3836 <string>Login last name</string>
3837 <key>Persist</key>
3838 <integer>1</integer>
3839 <key>Type</key>
3840 <string>String</string>
3841 <key>Value</key>
3842 <string />
3843 </map>
3844 <key>LastPrefTab</key>
3845 <map>
3846 <key>Comment</key>
3847 <string>Last selected tab in preferences window</string>
3848 <key>Persist</key>
3849 <integer>1</integer>
3850 <key>Type</key>
3851 <string>S32</string>
3852 <key>Value</key>
3853 <integer>0</integer>
3854 </map>
3855 <key>LastRunVersion</key>
3856 <map>
3857 <key>Comment</key>
3858 <string>Version number of last instance of the viewer that you ran</string>
3859 <key>Persist</key>
3860 <integer>1</integer>
3861 <key>Type</key>
3862 <string>String</string>
3863 <key>Value</key>
3864 <string>0.0.0</string>
3865 </map>
3866 <key>LastSnapshotHeight</key>
3867 <map>
3868 <key>Comment</key>
3869 <string>The height of the last snapshot, in px</string>
3870 <key>Persist</key>
3871 <integer>1</integer>
3872 <key>Type</key>
3873 <string>S32</string>
3874 <key>Value</key>
3875 <integer>768</integer>
3876 </map>
3877 <key>LastSnapshotType</key>
3878 <map>
3879 <key>Comment</key>
3880 <string>Select this as next type of snapshot to take (0 = postcard, 1 = texture, 2 = local image)</string>
3881 <key>Persist</key>
3882 <integer>1</integer>
3883 <key>Type</key>
3884 <string>S32</string>
3885 <key>Value</key>
3886 <integer>0</integer>
3887 </map>
3888 <key>LastSnapshotWidth</key>
3889 <map>
3890 <key>Comment</key>
3891 <string>The width of the last snapshot, in px</string>
3892 <key>Persist</key>
3893 <integer>1</integer>
3894 <key>Type</key>
3895 <string>S32</string>
3896 <key>Value</key>
3897 <integer>1024</integer>
3898 </map>
3899 <key>LeftClickShowMenu</key>
3900 <map>
3901 <key>Comment</key>
3902 <string>Left click opens pie menu (FALSE = left click touches or grabs object)</string>
3903 <key>Persist</key>
3904 <integer>1</integer>
3905 <key>Type</key>
3906 <string>Boolean</string>
3907 <key>Value</key>
3908 <integer>0</integer>
3909 </map>
3910 <key>LimitDragDistance</key>
3911 <map>
3912 <key>Comment</key>
3913 <string>Limit translation of object via translate tool</string>
3914 <key>Persist</key>
3915 <integer>1</integer>
3916 <key>Type</key>
3917 <string>Boolean</string>
3918 <key>Value</key>
3919 <integer>1</integer>
3920 </map>
3921 <key>LimitSelectDistance</key>
3922 <map>
3923 <key>Comment</key>
3924 <string>Disallow selection of objects beyond max select distance</string>
3925 <key>Persist</key>
3926 <integer>1</integer>
3927 <key>Type</key>
3928 <string>Boolean</string>
3929 <key>Value</key>
3930 <integer>1</integer>
3931 </map>
3932 <key>LocalCacheVersion</key>
3933 <map>
3934 <key>Comment</key>
3935 <string>Version number of cache</string>
3936 <key>Persist</key>
3937 <integer>1</integer>
3938 <key>Type</key>
3939 <string>S32</string>
3940 <key>Value</key>
3941 <integer>0</integer>
3942 </map>
3943 <key>LogMessages</key>
3944 <map>
3945 <key>Comment</key>
3946 <string>Log network traffic</string>
3947 <key>Persist</key>
3948 <integer>1</integer>
3949 <key>Type</key>
3950 <string>Boolean</string>
3951 <key>Value</key>
3952 <integer>0</integer>
3953 </map>
3954 <key>LoginAsGod</key>
3955 <map>
3956 <key>Comment</key>
3957 <string>Attempt to login with god powers (Linden accounts only)</string>
3958 <key>Persist</key>
3959 <integer>1</integer>
3960 <key>Type</key>
3961 <string>Boolean</string>
3962 <key>Value</key>
3963 <integer>0</integer>
3964 </map>
3965 <key>LoginLastLocation</key>
3966 <map>
3967 <key>Comment</key>
3968 <string>Login at same location you last logged out</string>
3969 <key>Persist</key>
3970 <integer>1</integer>
3971 <key>Type</key>
3972 <string>Boolean</string>
3973 <key>Value</key>
3974 <integer>1</integer>
3975 </map>
3976 <key>LoginPage</key>
3977 <map>
3978 <key>Comment</key>
3979 <string>Login authentication page.</string>
3980 <key>Persist</key>
3981 <integer>1</integer>
3982 <key>Type</key>
3983 <string>String</string>
3984 <key>Value</key>
3985 <string />
3986 </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>
3999 <map>
4000 <key>Comment</key>
4001 <string>Use lossless compression for small image uploads</string>
4002 <key>Persist</key>
4003 <integer>1</integer>
4004 <key>Type</key>
4005 <string>Boolean</string>
4006 <key>Value</key>
4007 <integer>0</integer>
4008 </map>
4009 <key>MapOverlayIndex</key>
4010 <map>
4011 <key>Comment</key>
4012 <string>Currently selected world map type</string>
4013 <key>Persist</key>
4014 <integer>1</integer>
4015 <key>Type</key>
4016 <string>S32</string>
4017 <key>Value</key>
4018 <integer>0</integer>
4019 </map>
4020 <key>MapScale</key>
4021 <map>
4022 <key>Comment</key>
4023 <string>World map zoom level (pixels per region)</string>
4024 <key>Persist</key>
4025 <integer>1</integer>
4026 <key>Type</key>
4027 <string>F32</string>
4028 <key>Value</key>
4029 <real>128</real>
4030 </map>
4031 <key>MapShowClassifieds</key>
4032 <map>
4033 <key>Comment</key>
4034 <string>Show locations associated with classified ads on world map</string>
4035 <key>Persist</key>
4036 <integer>1</integer>
4037 <key>Type</key>
4038 <string>Boolean</string>
4039 <key>Value</key>
4040 <integer>1</integer>
4041 </map>
4042 <key>MapShowEvents</key>
4043 <map>
4044 <key>Comment</key>
4045 <string>Show events on world map</string>
4046 <key>Persist</key>
4047 <integer>1</integer>
4048 <key>Type</key>
4049 <string>Boolean</string>
4050 <key>Value</key>
4051 <integer>1</integer>
4052 </map>
4053 <key>MapShowInfohubs</key>
4054 <map>
4055 <key>Comment</key>
4056 <string>Show infohubs on the world map</string>
4057 <key>Persist</key>
4058 <integer>1</integer>
4059 <key>Type</key>
4060 <string>Boolean</string>
4061 <key>Value</key>
4062 <integer>1</integer>
4063 </map>
4064 <key>MapShowLandForSale</key>
4065 <map>
4066 <key>Comment</key>
4067 <string>Show land for sale on world map</string>
4068 <key>Persist</key>
4069 <integer>1</integer>
4070 <key>Type</key>
4071 <string>Boolean</string>
4072 <key>Value</key>
4073 <integer>0</integer>
4074 </map>
4075 <key>MapShowPeople</key>
4076 <map>
4077 <key>Comment</key>
4078 <string>Show other users on world map</string>
4079 <key>Persist</key>
4080 <integer>1</integer>
4081 <key>Type</key>
4082 <string>Boolean</string>
4083 <key>Value</key>
4084 <integer>1</integer>
4085 </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>
4098 <map>
4099 <key>Comment</key>
4100 <string>Show telehubs on world map</string>
4101 <key>Persist</key>
4102 <integer>1</integer>
4103 <key>Type</key>
4104 <string>Boolean</string>
4105 <key>Value</key>
4106 <integer>1</integer>
4107 </map>
4108 <key>Marker</key>
4109 <map>
4110 <key>Comment</key>
4111 <string>[NOT USED]</string>
4112 <key>Persist</key>
4113 <integer>1</integer>
4114 <key>Type</key>
4115 <string>String</string>
4116 <key>Value</key>
4117 <string />
4118 </map>
4119 <key>MaxDragDistance</key>
4120 <map>
4121 <key>Comment</key>
4122 <string>Maximum allowed translation distance in a single operation of translate tool (meters from start point)</string>
4123 <key>Persist</key>
4124 <integer>1</integer>
4125 <key>Type</key>
4126 <string>F32</string>
4127 <key>Value</key>
4128 <real>48</real>
4129 </map>
4130 <key>MaxSelectDistance</key>
4131 <map>
4132 <key>Comment</key>
4133 <string>Maximum allowed selection distance (meters from avatar)</string>
4134 <key>Persist</key>
4135 <integer>1</integer>
4136 <key>Type</key>
4137 <string>F32</string>
4138 <key>Value</key>
4139 <real>64</real>
4140 </map>
4141 <key>MeanCollisionBump</key>
4142 <map>
4143 <key>Comment</key>
4144 <string>You have experienced an abuse of being bumped by an object or avatar</string>
4145 <key>Persist</key>
4146 <integer>1</integer>
4147 <key>Type</key>
4148 <string>Boolean</string>
4149 <key>Value</key>
4150 <integer>0</integer>
4151 </map>
4152 <key>MeanCollisionPhysical</key>
4153 <map>
4154 <key>Comment</key>
4155 <string>You have experienced an abuse from a physical object</string>
4156 <key>Persist</key>
4157 <integer>1</integer>
4158 <key>Type</key>
4159 <string>Boolean</string>
4160 <key>Value</key>
4161 <integer>0</integer>
4162 </map>
4163 <key>MeanCollisionPushObject</key>
4164 <map>
4165 <key>Comment</key>
4166 <string>You have experienced an abuse of being pushed by a scripted object</string>
4167 <key>Persist</key>
4168 <integer>1</integer>
4169 <key>Type</key>
4170 <string>Boolean</string>
4171 <key>Value</key>
4172 <integer>0</integer>
4173 </map>
4174 <key>MeanCollisionScripted</key>
4175 <map>
4176 <key>Comment</key>
4177 <string>You have experienced an abuse from a scripted object</string>
4178 <key>Persist</key>
4179 <integer>1</integer>
4180 <key>Type</key>
4181 <string>Boolean</string>
4182 <key>Value</key>
4183 <integer>0</integer>
4184 </map>
4185 <key>MeanCollisionSelected</key>
4186 <map>
4187 <key>Comment</key>
4188 <string>You have experienced an abuse of being pushed via a selected object</string>
4189 <key>Persist</key>
4190 <integer>1</integer>
4191 <key>Type</key>
4192 <string>Boolean</string>
4193 <key>Value</key>
4194 <integer>0</integer>
4195 </map>
4196 <key>MenuAccessKeyTime</key>
4197 <map>
4198 <key>Comment</key>
4199 <string>Time (seconds) in which the menu key must be tapped to move focus to the menu bar</string>
4200 <key>Persist</key>
4201 <integer>1</integer>
4202 <key>Type</key>
4203 <string>F32</string>
4204 <key>Value</key>
4205 <real>0.25</real>
4206 </map>
4207 <key>MenuBarHeight</key>
4208 <map>
4209 <key>Comment</key>
4210 <string />
4211 <key>Persist</key>
4212 <integer>0</integer>
4213 <key>Type</key>
4214 <string>S32</string>
4215 <key>Value</key>
4216 <integer>18</integer>
4217 </map>
4218 <key>MenuBarWidth</key>
4219 <map>
4220 <key>Comment</key>
4221 <string />
4222 <key>Persist</key>
4223 <integer>0</integer>
4224 <key>Type</key>
4225 <string>S32</string>
4226 <key>Value</key>
4227 <integer>410</integer>
4228 </map>
4229 <key>MiniMapRotate</key>
4230 <map>
4231 <key>Comment</key>
4232 <string>Rotate miniature world map to avatar direction</string>
4233 <key>Persist</key>
4234 <integer>1</integer>
4235 <key>Type</key>
4236 <string>Boolean</string>
4237 <key>Value</key>
4238 <integer>1</integer>
4239 </map>
4240 <key>MiniMapScale</key>
4241 <map>
4242 <key>Comment</key>
4243 <string>Miniature world map zoom levle (pixels per region)</string>
4244 <key>Persist</key>
4245 <integer>1</integer>
4246 <key>Type</key>
4247 <string>F32</string>
4248 <key>Value</key>
4249 <real>128</real>
4250 </map>
4251 <key>MouseSensitivity</key>
4252 <map>
4253 <key>Comment</key>
4254 <string>Controls responsiveness of mouse when in mouselook mode (fraction or multiple of default mouse sensitivity)</string>
4255 <key>Persist</key>
4256 <integer>1</integer>
4257 <key>Type</key>
4258 <string>F32</string>
4259 <key>Value</key>
4260 <real>3</real>
4261 </map>
4262 <key>MouseSmooth</key>
4263 <map>
4264 <key>Comment</key>
4265 <string>Smooths out motion of mouse when in mouselook mode.</string>
4266 <key>Persist</key>
4267 <integer>1</integer>
4268 <key>Type</key>
4269 <string>Boolean</string>
4270 <key>Value</key>
4271 <integer>0</integer>
4272 </map>
4273 <key>MouseSun</key>
4274 <map>
4275 <key>Comment</key>
4276 <string />
4277 <key>Persist</key>
4278 <integer>0</integer>
4279 <key>Type</key>
4280 <string>Boolean</string>
4281 <key>Value</key>
4282 <integer>0</integer>
4283 </map>
4284 <key>MouselookBtnState</key>
4285 <map>
4286 <key>Comment</key>
4287 <string />
4288 <key>Persist</key>
4289 <integer>0</integer>
4290 <key>Type</key>
4291 <string>Boolean</string>
4292 <key>Value</key>
4293 <integer>0</integer>
4294 </map>
4295 <key>MoveDownBtnRect</key>
4296 <map>
4297 <key>Comment</key>
4298 <string />
4299 <key>Persist</key>
4300 <integer>0</integer>
4301 <key>Type</key>
4302 <string>Rect</string>
4303 <key>Value</key>
4304 <array>
4305 <integer>91</integer>
4306 <integer>29</integer>
4307 <integer>116</integer>
4308 <integer>4</integer>
4309 </array>
4310 </map>
4311 <key>MoveUpBtnRect</key>
4312 <map>
4313 <key>Comment</key>
4314 <string />
4315 <key>Persist</key>
4316 <integer>0</integer>
4317 <key>Type</key>
4318 <string>Rect</string>
4319 <key>Value</key>
4320 <array>
4321 <integer>91</integer>
4322 <integer>54</integer>
4323 <integer>116</integer>
4324 <integer>29</integer>
4325 </array>
4326 </map>
4327 <key>MuteAmbient</key>
4328 <map>
4329 <key>Comment</key>
4330 <string>Ambient sound effects, such as wind noise, play at 0 volume</string>
4331 <key>Persist</key>
4332 <integer>1</integer>
4333 <key>Type</key>
4334 <string>Boolean</string>
4335 <key>Value</key>
4336 <integer>0</integer>
4337 </map>
4338 <key>MuteAudio</key>
4339 <map>
4340 <key>Comment</key>
4341 <string>All audio plays at 0 volume (streaming audio still takes up bandwidth, for example)</string>
4342 <key>Persist</key>
4343 <integer>1</integer>
4344 <key>Type</key>
4345 <string>Boolean</string>
4346 <key>Value</key>
4347 <integer>0</integer>
4348 </map>
4349 <key>MuteMedia</key>
4350 <map>
4351 <key>Comment</key>
4352 <string>Media plays at 0 volume (streaming audio still takes up bandwidth)</string>
4353 <key>Persist</key>
4354 <integer>1</integer>
4355 <key>Type</key>
4356 <string>Boolean</string>
4357 <key>Value</key>
4358 <integer>0</integer>
4359 </map>
4360 <key>MuteMusic</key>
4361 <map>
4362 <key>Comment</key>
4363 <string>Music plays at 0 volume (streaming audio still takes up bandwidth)</string>
4364 <key>Persist</key>
4365 <integer>1</integer>
4366 <key>Type</key>
4367 <string>Boolean</string>
4368 <key>Value</key>
4369 <integer>0</integer>
4370 </map>
4371 <key>MuteSounds</key>
4372 <map>
4373 <key>Comment</key>
4374 <string>Sound effects play at 0 volume</string>
4375 <key>Persist</key>
4376 <integer>1</integer>
4377 <key>Type</key>
4378 <string>Boolean</string>
4379 <key>Value</key>
4380 <integer>0</integer>
4381 </map>
4382 <key>MuteUI</key>
4383 <map>
4384 <key>Comment</key>
4385 <string>UI sound effects play at 0 volume</string>
4386 <key>Persist</key>
4387 <integer>1</integer>
4388 <key>Type</key>
4389 <string>Boolean</string>
4390 <key>Value</key>
4391 <integer>0</integer>
4392 </map>
4393 <key>MuteVoice</key>
4394 <map>
4395 <key>Comment</key>
4396 <string>Voice plays at 0 volume (streaming audio still takes up bandwidth)</string>
4397 <key>Persist</key>
4398 <integer>1</integer>
4399 <key>Type</key>
4400 <string>Boolean</string>
4401 <key>Value</key>
4402 <integer>0</integer>
4403 </map>
4404 <key>MuteWhenMinimized</key>
4405 <map>
4406 <key>Comment</key>
4407 <string>Mute audio when SL window is minimized</string>
4408 <key>Persist</key>
4409 <integer>1</integer>
4410 <key>Type</key>
4411 <string>Boolean</string>
4412 <key>Value</key>
4413 <integer>1</integer>
4414 </map>
4415 <key>NewCacheLocation</key>
4416 <map>
4417 <key>Comment</key>
4418 <string>Change the location of the local disk cache to this</string>
4419 <key>Persist</key>
4420 <integer>1</integer>
4421 <key>Type</key>
4422 <string>String</string>
4423 <key>Value</key>
4424 <string />
4425 </map>
4426 <key>NextLoginLocation</key>
4427 <map>
4428 <key>Comment</key>
4429 <string>Location to log into by default.</string>
4430 <key>Persist</key>
4431 <integer>1</integer>
4432 <key>Type</key>
4433 <string>String</string>
4434 <key>Value</key>
4435 <string />
4436 </map>
4437 <key>NoAudio</key>
4438 <map>
4439 <key>Comment</key>
4440 <string>Disable audio playback.</string>
4441 <key>Persist</key>
4442 <integer>1</integer>
4443 <key>Type</key>
4444 <string>Boolean</string>
4445 <key>Value</key>
4446 <integer>0</integer>
4447 </map>
4448 <key>NoHardwareProbe</key>
4449 <map>
4450 <key>Comment</key>
4451 <string>Disable hardware probe.</string>
4452 <key>Persist</key>
4453 <integer>1</integer>
4454 <key>Type</key>
4455 <string>Boolean</string>
4456 <key>Value</key>
4457 <integer>0</integer>
4458 </map>
4459 <key>NoInventoryLibrary</key>
4460 <map>
4461 <key>Comment</key>
4462 <string>Do not request inventory library.</string>
4463 <key>Persist</key>
4464 <integer>1</integer>
4465 <key>Type</key>
4466 <string>Boolean</string>
4467 <key>Value</key>
4468 <integer>0</integer>
4469 </map>
4470 <key>NoPreload</key>
4471 <map>
4472 <key>Comment</key>
4473 <string>Disable sound and image preload.</string>
4474 <key>Persist</key>
4475 <integer>1</integer>
4476 <key>Type</key>
4477 <string>Boolean</string>
4478 <key>Value</key>
4479 <integer>0</integer>
4480 </map>
4481 <key>NoQuickTime</key>
4482 <map>
4483 <key>Comment</key>
4484 <string>Disable quicktime playback.</string>
4485 <key>Persist</key>
4486 <integer>1</integer>
4487 <key>Type</key>
4488 <string>Boolean</string>
4489 <key>Value</key>
4490 <integer>0</integer>
4491 </map>
4492 <key>NoVerifySSLCert</key>
4493 <map>
4494 <key>Comment</key>
4495 <string>Do not verify SSL peers.</string>
4496 <key>Persist</key>
4497 <integer>1</integer>
4498 <key>Type</key>
4499 <string>Boolean</string>
4500 <key>Value</key>
4501 <integer>0</integer>
4502 </map>
4503 <key>NotecardEditorRect</key>
4504 <map>
4505 <key>Comment</key>
4506 <string>Rectangle for notecard editor</string>
4507 <key>Persist</key>
4508 <integer>1</integer>
4509 <key>Type</key>
4510 <string>Rect</string>
4511 <key>Value</key>
4512 <array>
4513 <integer>0</integer>
4514 <integer>400</integer>
4515 <integer>400</integer>
4516 <integer>0</integer>
4517 </array>
4518 </map>
4519 <key>NotifyBoxHeight</key>
4520 <map>
4521 <key>Comment</key>
4522 <string>Height of notification messages</string>
4523 <key>Persist</key>
4524 <integer>1</integer>
4525 <key>Type</key>
4526 <string>S32</string>
4527 <key>Value</key>
4528 <integer>200</integer>
4529 </map>
4530 <key>NotifyBoxWidth</key>
4531 <map>
4532 <key>Comment</key>
4533 <string>Width of notification messages</string>
4534 <key>Persist</key>
4535 <integer>1</integer>
4536 <key>Type</key>
4537 <string>S32</string>
4538 <key>Value</key>
4539 <integer>350</integer>
4540 </map>
4541 <key>NotifyMoneyChange</key>
4542 <map>
4543 <key>Comment</key>
4544 <string>Pop up notifications for all L$ transactions</string>
4545 <key>Persist</key>
4546 <integer>1</integer>
4547 <key>Type</key>
4548 <string>Boolean</string>
4549 <key>Value</key>
4550 <integer>1</integer>
4551 </map>
4552 <key>NotifyTipDuration</key>
4553 <map>
4554 <key>Comment</key>
4555 <string>Length of time that notification tips stay on screen (seconds)</string>
4556 <key>Persist</key>
4557 <integer>1</integer>
4558 <key>Type</key>
4559 <string>F32</string>
4560 <key>Value</key>
4561 <real>4</real>
4562 </map>
4563 <key>NumSessions</key>
4564 <map>
4565 <key>Comment</key>
4566 <string>Number of successful logins to Second Life</string>
4567 <key>Persist</key>
4568 <integer>1</integer>
4569 <key>Type</key>
4570 <string>S32</string>
4571 <key>Value</key>
4572 <integer>0</integer>
4573 </map>
4574 <key>NumpadControl</key>
4575 <map>
4576 <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>
4578 <key>Persist</key>
4579 <integer>1</integer>
4580 <key>Type</key>
4581 <string>S32</string>
4582 <key>Value</key>
4583 <integer>0</integer>
4584 </map>
4585 <key>ObjectChatColor</key>
4586 <map>
4587 <key>Comment</key>
4588 <string>Color of chat messages from objects</string>
4589 <key>Persist</key>
4590 <integer>1</integer>
4591 <key>Type</key>
4592 <string>Color4</string>
4593 <key>Value</key>
4594 <array>
4595 <real>0.699999988079071044921875</real>
4596 <real>0.89999997615814208984375</real>
4597 <real>0.699999988079071044921875</real>
4598 <real>1</real>
4599 </array>
4600 </map>
4601 <key>OpenDebugStatAdvanced</key>
4602 <map>
4603 <key>Comment</key>
4604 <string>Expand advanced performance stats display</string>
4605 <key>Persist</key>
4606 <integer>1</integer>
4607 <key>Type</key>
4608 <string>Boolean</string>
4609 <key>Value</key>
4610 <integer>0</integer>
4611 </map>
4612 <key>OpenDebugStatBasic</key>
4613 <map>
4614 <key>Comment</key>
4615 <string>Expand basic performance stats display</string>
4616 <key>Persist</key>
4617 <integer>1</integer>
4618 <key>Type</key>
4619 <string>Boolean</string>
4620 <key>Value</key>
4621 <integer>1</integer>
4622 </map>
4623 <key>OpenDebugStatNet</key>
4624 <map>
4625 <key>Comment</key>
4626 <string>Expand network stats display</string>
4627 <key>Persist</key>
4628 <integer>1</integer>
4629 <key>Type</key>
4630 <string>Boolean</string>
4631 <key>Value</key>
4632 <integer>1</integer>
4633 </map>
4634 <key>OpenDebugStatRender</key>
4635 <map>
4636 <key>Comment</key>
4637 <string>Expand render stats display</string>
4638 <key>Persist</key>
4639 <integer>1</integer>
4640 <key>Type</key>
4641 <string>Boolean</string>
4642 <key>Value</key>
4643 <integer>1</integer>
4644 </map>
4645 <key>OpenDebugStatSim</key>
4646 <map>
4647 <key>Comment</key>
4648 <string>Expand simulator performance stats display</string>
4649 <key>Persist</key>
4650 <integer>1</integer>
4651 <key>Type</key>
4652 <string>Boolean</string>
4653 <key>Value</key>
4654 <integer>1</integer>
4655 </map>
4656 <key>OutBandwidth</key>
4657 <map>
4658 <key>Comment</key>
4659 <string>Outgoing bandwidth throttle (bps)</string>
4660 <key>Persist</key>
4661 <integer>1</integer>
4662 <key>Type</key>
4663 <string>F32</string>
4664 <key>Value</key>
4665 <real>0</real>
4666 </map>
4667 <key>OverdrivenColor</key>
4668 <map>
4669 <key>Comment</key>
4670 <string>Color of various indicators when resident is speaking too loud.</string>
4671 <key>Persist</key>
4672 <integer>1</integer>
4673 <key>Type</key>
4674 <string>Color4</string>
4675 <key>Value</key>
4676 <array>
4677 <real>1</real>
4678 <real>0</real>
4679 <real>0</real>
4680 <real>1</real>
4681 </array>
4682 </map>
4683 <key>OverlayTitle</key>
4684 <map>
4685 <key>Comment</key>
4686 <string>Controls watermark text message displayed on screen when &quot;ShowOverlayTitle&quot; is enabled (one word, underscores become spaces)</string>
4687 <key>Persist</key>
4688 <integer>1</integer>
4689 <key>Type</key>
4690 <string>String</string>
4691 <key>Value</key>
4692 <string>Set_via_OverlayTitle_in_settings.xml</string>
4693 </map>
4694 <key>PTTCurrentlyEnabled</key>
4695 <map>
4696 <key>Comment</key>
4697 <string />
4698 <key>Persist</key>
4699 <integer>0</integer>
4700 <key>Type</key>
4701 <string>Boolean</string>
4702 <key>Value</key>
4703 <integer>1</integer>
4704 </map>
4705 <key>PacketDropPercentage</key>
4706 <map>
4707 <key>Comment</key>
4708 <string>Percentage of packets dropped by the client.</string>
4709 <key>Persist</key>
4710 <integer>1</integer>
4711 <key>Type</key>
4712 <string>F32</string>
4713 <key>Value</key>
4714 <real>0</real>
4715 </map>
4716 <key>PerAccountSettingsFile</key>
4717 <map>
4718 <key>Comment</key>
4719 <string>Persisted client settings file name (per user).</string>
4720 <key>Persist</key>
4721 <integer>0</integer>
4722 <key>Type</key>
4723 <string>String</string>
4724 <key>Value</key>
4725 <string />
4726 </map>
4727 <key>PermissionsCautionEnabled</key>
4728 <map>
4729 <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>
4731 <key>Persist</key>
4732 <integer>0</integer>
4733 <key>Type</key>
4734 <string>Boolean</string>
4735 <key>Value</key>
4736 <integer>1</integer>
4737 </map>
4738 <key>PermissionsCautionNotifyBoxHeight</key>
4739 <map>
4740 <key>Comment</key>
4741 <string>Height of caution-style notification messages</string>
4742 <key>Persist</key>
4743 <integer>0</integer>
4744 <key>Type</key>
4745 <string>S32</string>
4746 <key>Value</key>
4747 <integer>344</integer>
4748 </map>
4749 <key>PermissionsManagerRect</key>
4750 <map>
4751 <key>Comment</key>
4752 <string>Rectangle for permissions manager window</string>
4753 <key>Persist</key>
4754 <integer>1</integer>
4755 <key>Type</key>
4756 <string>Rect</string>
4757 <key>Value</key>
4758 <array>
4759 <integer>0</integer>
4760 <integer>85</integer>
4761 <integer>300</integer>
4762 <integer>0</integer>
4763 </array>
4764 </map>
4765 <key>PickerContextOpacity</key>
4766 <map>
4767 <key>Comment</key>
4768 <string>Controls overall opacity of context frustrum connecting color and texture pickers with their swatches</string>
4769 <key>Persist</key>
4770 <integer>1</integer>
4771 <key>Type</key>
4772 <string>F32</string>
4773 <key>Value</key>
4774 <real>0.3499999940395355224609375</real>
4775 </map>
4776 <key>PieMenuLineWidth</key>
4777 <map>
4778 <key>Comment</key>
4779 <string>Width of lines in pie menu display (pixels)</string>
4780 <key>Persist</key>
4781 <integer>1</integer>
4782 <key>Type</key>
4783 <string>F32</string>
4784 <key>Value</key>
4785 <real>2.5</real>
4786 </map>
4787 <key>PinTalkViewOpen</key>
4788 <map>
4789 <key>Comment</key>
4790 <string>Stay in IM after hitting return</string>
4791 <key>Persist</key>
4792 <integer>1</integer>
4793 <key>Type</key>
4794 <string>Boolean</string>
4795 <key>Value</key>
4796 <integer>1</integer>
4797 </map>
4798 <key>PingInterpolate</key>
4799 <map>
4800 <key>Comment</key>
4801 <string>Extrapolate object position along velocity vector based on ping delay</string>
4802 <key>Persist</key>
4803 <integer>1</integer>
4804 <key>Type</key>
4805 <string>Boolean</string>
4806 <key>Value</key>
4807 <integer>0</integer>
4808 </map>
4809 <key>PitchFromMousePosition</key>
4810 <map>
4811 <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>
4813 <key>Persist</key>
4814 <integer>1</integer>
4815 <key>Type</key>
4816 <string>F32</string>
4817 <key>Value</key>
4818 <real>90</real>
4819 </map>
4820 <key>PlayTypingAnim</key>
4821 <map>
4822 <key>Comment</key>
4823 <string>Your avatar plays the typing animation whenever you type in the chat bar</string>
4824 <key>Persist</key>
4825 <integer>1</integer>
4826 <key>Type</key>
4827 <string>Boolean</string>
4828 <key>Value</key>
4829 <integer>1</integer>
4830 </map>
4831 <key>PrecachingDelay</key>
4832 <map>
4833 <key>Comment</key>
4834 <string>Delay when logging in to load world before showing it (seconds)</string>
4835 <key>Persist</key>
4836 <integer>1</integer>
4837 <key>Type</key>
4838 <string>F32</string>
4839 <key>Value</key>
4840 <real>6</real>
4841 </map>
4842 <key>PreviewAnimRect</key>
4843 <map>
4844 <key>Comment</key>
4845 <string>Rectangle for animation preview window</string>
4846 <key>Persist</key>
4847 <integer>1</integer>
4848 <key>Type</key>
4849 <string>Rect</string>
4850 <key>Value</key>
4851 <array>
4852 <integer>0</integer>
4853 <integer>85</integer>
4854 <integer>300</integer>
4855 <integer>0</integer>
4856 </array>
4857 </map>
4858 <key>PreviewClassifiedRect</key>
4859 <map>
4860 <key>Comment</key>
4861 <string>Rectangle for URL preview window</string>
4862 <key>Persist</key>
4863 <integer>1</integer>
4864 <key>Type</key>
4865 <string>Rect</string>
4866 <key>Value</key>
4867 <array>
4868 <integer>0</integer>
4869 <integer>530</integer>
4870 <integer>420</integer>
4871 <integer>0</integer>
4872 </array>
4873 </map>
4874 <key>PreviewEventRect</key>
4875 <map>
4876 <key>Comment</key>
4877 <string>Rectangle for Event preview window</string>
4878 <key>Persist</key>
4879 <integer>1</integer>
4880 <key>Type</key>
4881 <string>Rect</string>
4882 <key>Value</key>
4883 <array>
4884 <integer>0</integer>
4885 <integer>530</integer>
4886 <integer>420</integer>
4887 <integer>0</integer>
4888 </array>
4889 </map>
4890 <key>PreviewLandmarkRect</key>
4891 <map>
4892 <key>Comment</key>
4893 <string>Rectangle for landmark preview window</string>
4894 <key>Persist</key>
4895 <integer>1</integer>
4896 <key>Type</key>
4897 <string>Rect</string>
4898 <key>Value</key>
4899 <array>
4900 <integer>0</integer>
4901 <integer>90</integer>
4902 <integer>300</integer>
4903 <integer>0</integer>
4904 </array>
4905 </map>
4906 <key>PreviewObjectRect</key>
4907 <map>
4908 <key>Comment</key>
4909 <string>Rectangle for object preview window</string>
4910 <key>Persist</key>
4911 <integer>1</integer>
4912 <key>Type</key>
4913 <string>Rect</string>
4914 <key>Value</key>
4915 <array>
4916 <integer>0</integer>
4917 <integer>85</integer>
4918 <integer>300</integer>
4919 <integer>0</integer>
4920 </array>
4921 </map>
4922 <key>PreviewScriptRect</key>
4923 <map>
4924 <key>Comment</key>
4925 <string>Rectangle for script preview window</string>
4926 <key>Persist</key>
4927 <integer>1</integer>
4928 <key>Type</key>
4929 <string>Rect</string>
4930 <key>Value</key>
4931 <array>
4932 <integer>0</integer>
4933 <integer>550</integer>
4934 <integer>500</integer>
4935 <integer>0</integer>
4936 </array>
4937 </map>
4938 <key>PreviewSoundRect</key>
4939 <map>
4940 <key>Comment</key>
4941 <string>Rectangle for sound preview window</string>
4942 <key>Persist</key>
4943 <integer>1</integer>
4944 <key>Type</key>
4945 <string>Rect</string>
4946 <key>Value</key>
4947 <array>
4948 <integer>0</integer>
4949 <integer>85</integer>
4950 <integer>300</integer>
4951 <integer>0</integer>
4952 </array>
4953 </map>
4954 <key>PreviewTextureRect</key>
4955 <map>
4956 <key>Comment</key>
4957 <string>Rectangle for texture preview window</string>
4958 <key>Persist</key>
4959 <integer>1</integer>
4960 <key>Type</key>
4961 <string>Rect</string>
4962 <key>Value</key>
4963 <array>
4964 <integer>0</integer>
4965 <integer>400</integer>
4966 <integer>400</integer>
4967 <integer>0</integer>
4968 </array>
4969 </map>
4970 <key>PreviewURLRect</key>
4971 <map>
4972 <key>Comment</key>
4973 <string>Rectangle for URL preview window</string>
4974 <key>Persist</key>
4975 <integer>1</integer>
4976 <key>Type</key>
4977 <string>Rect</string>
4978 <key>Value</key>
4979 <array>
4980 <integer>0</integer>
4981 <integer>90</integer>
4982 <integer>300</integer>
4983 <integer>0</integer>
4984 </array>
4985 </map>
4986 <key>PreviewWearableRect</key>
4987 <map>
4988 <key>Comment</key>
4989 <string>Rectangle for wearable preview window</string>
4990 <key>Persist</key>
4991 <integer>1</integer>
4992 <key>Type</key>
4993 <string>Rect</string>
4994 <key>Value</key>
4995 <array>
4996 <integer>0</integer>
4997 <integer>85</integer>
4998 <integer>300</integer>
4999 <integer>0</integer>
5000 </array>
5001 </map>
5002 <key>ProbeHardwareOnStartup</key>
5003 <map>
5004 <key>Comment</key>
5005 <string>Query current hardware configuration on application startup</string>
5006 <key>Persist</key>
5007 <integer>1</integer>
5008 <key>Type</key>
5009 <string>Boolean</string>
5010 <key>Value</key>
5011 <integer>1</integer>
5012 </map>
5013 <key>PropertiesRect</key>
5014 <map>
5015 <key>Comment</key>
5016 <string>Rectangle for inventory item properties window</string>
5017 <key>Persist</key>
5018 <integer>1</integer>
5019 <key>Type</key>
5020 <string>Rect</string>
5021 <key>Value</key>
5022 <array>
5023 <integer>0</integer>
5024 <integer>320</integer>
5025 <integer>350</integer>
5026 <integer>0</integer>
5027 </array>
5028 </map>
5029 <key>PurgeCacheOnNextStartup</key>
5030 <map>
5031 <key>Comment</key>
5032 <string>Clear local file cache next time viewer is run</string>
5033 <key>Persist</key>
5034 <integer>1</integer>
5035 <key>Type</key>
5036 <string>Boolean</string>
5037 <key>Value</key>
5038 <integer>0</integer>
5039 </map>
5040 <key>PurgeCacheOnStartup</key>
5041 <map>
5042 <key>Comment</key>
5043 <string>Clear local file cache every time viewer is run</string>
5044 <key>Persist</key>
5045 <integer>1</integer>
5046 <key>Type</key>
5047 <string>Boolean</string>
5048 <key>Value</key>
5049 <integer>0</integer>
5050 </map>
5051 <key>PushToTalkButton</key>
5052 <map>
5053 <key>Comment</key>
5054 <string>Which button or keyboard key is used for push-to-talk</string>
5055 <key>Persist</key>
5056 <integer>1</integer>
5057 <key>Type</key>
5058 <string>String</string>
5059 <key>Value</key>
5060 <string>MiddleMouse</string>
5061 </map>
5062 <key>PushToTalkToggle</key>
5063 <map>
5064 <key>Comment</key>
5065 <string>Should the push-to-talk button behave as a toggle</string>
5066 <key>Persist</key>
5067 <integer>1</integer>
5068 <key>Type</key>
5069 <string>Boolean</string>
5070 <key>Value</key>
5071 <integer>0</integer>
5072 </map>
5073 <key>QAMode</key>
5074 <map>
5075 <key>Comment</key>
5076 <string>Enable Testing Features.</string>
5077 <key>Persist</key>
5078 <integer>1</integer>
5079 <key>Type</key>
5080 <string>Boolean</string>
5081 <key>Value</key>
5082 <integer>0</integer>
5083 </map>
5084 <key>QuietSnapshotsToDisk</key>
5085 <map>
5086 <key>Comment</key>
5087 <string>Take snapshots to disk without playing animation or sound</string>
5088 <key>Persist</key>
5089 <integer>1</integer>
5090 <key>Type</key>
5091 <string>Boolean</string>
5092 <key>Value</key>
5093 <integer>0</integer>
5094 </map>
5095 <key>QuitAfterSeconds</key>
5096 <map>
5097 <key>Comment</key>
5098 <string>The duration allowed before quitting.</string>
5099 <key>Persist</key>
5100 <integer>1</integer>
5101 <key>Type</key>
5102 <string>F32</string>
5103 <key>Value</key>
5104 <real>0</real>
5105 </map>
5106 <key>RadioLandBrushAction</key>
5107 <map>
5108 <key>Comment</key>
5109 <string>Last selected land modification operation (0 = flatten, 1 = raise, 2 = lower, 3 = smooth, 4 = roughen, 5 = revert)</string>
5110 <key>Persist</key>
5111 <integer>1</integer>
5112 <key>Type</key>
5113 <string>S32</string>
5114 <key>Value</key>
5115 <integer>0</integer>
5116 </map>
5117 <key>RadioLandBrushSize</key>
5118 <map>
5119 <key>Comment</key>
5120 <string>Size of land modification brush (0 = small, 1 = medium, 2 = large)</string>
5121 <key>Persist</key>
5122 <integer>1</integer>
5123 <key>Type</key>
5124 <string>S32</string>
5125 <key>Value</key>
5126 <integer>0</integer>
5127 </map>
5128 <key>RecentItemsSortOrder</key>
5129 <map>
5130 <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>
5132 <key>Persist</key>
5133 <integer>1</integer>
5134 <key>Type</key>
5135 <string>U32</string>
5136 <key>Value</key>
5137 <integer>1</integer>
5138 </map>
5139 <key>RectangleSelectInclusive</key>
5140 <map>
5141 <key>Comment</key>
5142 <string>Select objects that have at least one vertex inside selection rectangle</string>
5143 <key>Persist</key>
5144 <integer>1</integer>
5145 <key>Type</key>
5146 <string>Boolean</string>
5147 <key>Value</key>
5148 <integer>1</integer>
5149 </map>
5150 <key>RegionTextureSize</key>
5151 <map>
5152 <key>Comment</key>
5153 <string>Terrain texture dimensions (power of 2)</string>
5154 <key>Persist</key>
5155 <integer>1</integer>
5156 <key>Type</key>
5157 <string>U32</string>
5158 <key>Value</key>
5159 <integer>256</integer>
5160 </map>
5161 <key>RememberPassword</key>
5162 <map>
5163 <key>Comment</key>
5164 <string>Keep password (in encrypted form) for next login</string>
5165 <key>Persist</key>
5166 <integer>1</integer>
5167 <key>Type</key>
5168 <string>Boolean</string>
5169 <key>Value</key>
5170 <integer>1</integer>
5171 </map>
5172 <key>RenderAnisotropic</key>
5173 <map>
5174 <key>Comment</key>
5175 <string>Render textures using anisotropic filtering</string>
5176 <key>Persist</key>
5177 <integer>1</integer>
5178 <key>Type</key>
5179 <string>Boolean</string>
5180 <key>Value</key>
5181 <integer>0</integer>
5182 </map>
5183 <key>RenderAppleUseMultGL</key>
5184 <map>
5185 <key>Comment</key>
5186 <string>Whether we want to use multi-threaded OpenGL on Apple hardware (requires restart of SL).</string>
5187 <key>Persist</key>
5188 <integer>1</integer>
5189 <key>Type</key>
5190 <string>Boolean</string>
5191 <key>Value</key>
5192 <integer>0</integer>
5193 </map>
5194 <key>RenderAvatarCloth</key>
5195 <map>
5196 <key>Comment</key>
5197 <string>Controls if avatars use wavy cloth</string>
5198 <key>Persist</key>
5199 <integer>1</integer>
5200 <key>Type</key>
5201 <string>Boolean</string>
5202 <key>Value</key>
5203 <integer>1</integer>
5204 </map>
5205 <key>RenderAvatarLODFactor</key>
5206 <map>
5207 <key>Comment</key>
5208 <string>Controls level of detail of avatars (multiplier for current screen area when calculated level of detail)</string>
5209 <key>Persist</key>
5210 <integer>1</integer>
5211 <key>Type</key>
5212 <string>F32</string>
5213 <key>Value</key>
5214 <real>0.5</real>
5215 </map>
5216 <key>RenderAvatarMaxVisible</key>
5217 <map>
5218 <key>Comment</key>
5219 <string>Maximum number of avatars to display at any one time</string>
5220 <key>Persist</key>
5221 <integer>1</integer>
5222 <key>Type</key>
5223 <string>S32</string>
5224 <key>Value</key>
5225 <integer>35</integer>
5226 </map>
5227 <key>RenderAvatarVP</key>
5228 <map>
5229 <key>Comment</key>
5230 <string>Use vertex programs to perform hardware skinning of avatar</string>
5231 <key>Persist</key>
5232 <integer>1</integer>
5233 <key>Type</key>
5234 <string>Boolean</string>
5235 <key>Value</key>
5236 <integer>1</integer>
5237 </map>
5238 <key>RenderBumpmapMinDistanceSquared</key>
5239 <map>
5240 <key>Comment</key>
5241 <string>Maximum distance at which to render bumpmapped primitives (distance in meters, squared)</string>
5242 <key>Persist</key>
5243 <integer>1</integer>
5244 <key>Type</key>
5245 <string>F32</string>
5246 <key>Value</key>
5247 <real>100</real>
5248 </map>
5249 <key>RenderCubeMap</key>
5250 <map>
5251 <key>Comment</key>
5252 <string>Whether we can render the cube map or not</string>
5253 <key>Persist</key>
5254 <integer>1</integer>
5255 <key>Type</key>
5256 <string>Boolean</string>
5257 <key>Value</key>
5258 <integer>1</integer>
5259 </map>
5260 <key>RenderCustomSettings</key>
5261 <map>
5262 <key>Comment</key>
5263 <string>Do you want to set the graphics settings yourself</string>
5264 <key>Persist</key>
5265 <integer>1</integer>
5266 <key>Type</key>
5267 <string>Boolean</string>
5268 <key>Value</key>
5269 <integer>0</integer>
5270 </map>
5271 <key>RenderDebugTextureBind</key>
5272 <map>
5273 <key>Comment</key>
5274 <string>Enable texture bind performance test.</string>
5275 <key>Persist</key>
5276 <integer>1</integer>
5277 <key>Type</key>
5278 <string>Boolean</string>
5279 <key>Value</key>
5280 <integer>0</integer>
5281 </map>
5282 <key>RenderDynamicLOD</key>
5283 <map>
5284 <key>Comment</key>
5285 <string>Dynamically adjust level of detail.</string>
5286 <key>Persist</key>
5287 <integer>1</integer>
5288 <key>Type</key>
5289 <string>Boolean</string>
5290 <key>Value</key>
5291 <integer>1</integer>
5292 </map>
5293 <key>RenderDynamicReflections</key>
5294 <map>
5295 <key>Comment</key>
5296 <string>Generate a dynamic cube map for reflections (objects reflect their environment, experimental).</string>
5297 <key>Persist</key>
5298 <integer>1</integer>
5299 <key>Type</key>
5300 <string>Boolean</string>
5301 <key>Value</key>
5302 <integer>0</integer>
5303 </map>
5304 <key>RenderFarClip</key>
5305 <map>
5306 <key>Comment</key>
5307 <string>Distance of far clip plane from camera (meters)</string>
5308 <key>Persist</key>
5309 <integer>1</integer>
5310 <key>Type</key>
5311 <string>F32</string>
5312 <key>Value</key>
5313 <real>256</real>
5314 </map>
5315 <key>RenderFastUI</key>
5316 <map>
5317 <key>Comment</key>
5318 <string>[NOT USED]</string>
5319 <key>Persist</key>
5320 <integer>1</integer>
5321 <key>Type</key>
5322 <string>Boolean</string>
5323 <key>Value</key>
5324 <integer>0</integer>
5325 </map>
5326 <key>RenderFlexTimeFactor</key>
5327 <map>
5328 <key>Comment</key>
5329 <string>Controls level of detail of flexible objects (multiplier for amount of time spent processing flex objects)</string>
5330 <key>Persist</key>
5331 <integer>1</integer>
5332 <key>Type</key>
5333 <string>F32</string>
5334 <key>Value</key>
5335 <real>1</real>
5336 </map>
5337 <key>RenderFogRatio</key>
5338 <map>
5339 <key>Comment</key>
5340 <string>Distance from camera where fog reaches maximum density (fraction or multiple of far clip distance)</string>
5341 <key>Persist</key>
5342 <integer>1</integer>
5343 <key>Type</key>
5344 <string>F32</string>
5345 <key>Value</key>
5346 <real>4.0</real>
5347 </map>
5348 <key>RenderGamma</key>
5349 <map>
5350 <key>Comment</key>
5351 <string>Sets gamma exponent for renderer</string>
5352 <key>Persist</key>
5353 <integer>1</integer>
5354 <key>Type</key>
5355 <string>F32</string>
5356 <key>Value</key>
5357 <real>0</real>
5358 </map>
5359 <key>RenderGammaFull</key>
5360 <map>
5361 <key>Comment</key>
5362 <string>Use fully controllable gamma correction, instead of faster, hard-coded gamma correction of 2.</string>
5363 <key>Persist</key>
5364 <integer>1</integer>
5365 <key>Type</key>
5366 <string>Boolean</string>
5367 <key>Value</key>
5368 <real>1</real>
5369 </map>
5370 <key>RenderGlow</key>
5371 <map>
5372 <key>Comment</key>
5373 <string>Render bloom post effect.</string>
5374 <key>Persist</key>
5375 <integer>1</integer>
5376 <key>Type</key>
5377 <string>Boolean</string>
5378 <key>Value</key>
5379 <integer>1</integer>
5380 </map>
5381 <key>RenderGlowIterations</key>
5382 <map>
5383 <key>Comment</key>
5384 <string>Number of times to iterate the glow (higher = wider and smoother but slower)</string>
5385 <key>Persist</key>
5386 <integer>1</integer>
5387 <key>Type</key>
5388 <string>S32</string>
5389 <key>Value</key>
5390 <integer>2</integer>
5391 </map>
5392 <key>RenderGlowLumWeights</key>
5393 <map>
5394 <key>Comment</key>
5395 <string>Weights for each color channel to be used in calculating luminance (should add up to 1.0)</string>
5396 <key>Persist</key>
5397 <integer>1</integer>
5398 <key>Type</key>
5399 <string>Vector3</string>
5400 <key>Value</key>
5401 <array>
5402 <real>0.299</real>
5403 <real>0.587</real>
5404 <real>0.114</real>
5405 </array>
5406 </map>
5407 <key>RenderGlowMaxExtractAlpha</key>
5408 <map>
5409 <key>Comment</key>
5410 <string>Max glow alpha value for brightness extraction to auto-glow.</string>
5411 <key>Persist</key>
5412 <integer>1</integer>
5413 <key>Type</key>
5414 <string>F32</string>
5415 <key>Value</key>
5416 <real>0.065</real>
5417 </map>
5418 <key>RenderGlowMinLuminance</key>
5419 <map>
5420 <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>
5422 <key>Persist</key>
5423 <integer>1</integer>
5424 <key>Type</key>
5425 <string>F32</string>
5426 <key>Value</key>
5427 <real>1.0</real>
5428 </map>
5429 <key>RenderGlowResolutionPow</key>
5430 <map>
5431 <key>Comment</key>
5432 <string>Glow map resolution power of two.</string>
5433 <key>Persist</key>
5434 <integer>1</integer>
5435 <key>Type</key>
5436 <string>S32</string>
5437 <key>Value</key>
5438 <integer>9</integer>
5439 </map>
5440 <key>RenderGlowStrength</key>
5441 <map>
5442 <key>Comment</key>
5443 <string>Additive strength of glow.</string>
5444 <key>Persist</key>
5445 <integer>1</integer>
5446 <key>Type</key>
5447 <string>F32</string>
5448 <key>Value</key>
5449 <real>0.35</real>
5450 </map>
5451 <key>RenderGlowWarmthAmount</key>
5452 <map>
5453 <key>Comment</key>
5454 <string>Amount of warmth extraction to use (versus luminance extraction). 0 = lum, 1.0 = warmth</string>
5455 <key>Persist</key>
5456 <integer>1</integer>
5457 <key>Type</key>
5458 <string>F32</string>
5459 <key>Value</key>
5460 <real>0</real>
5461 </map>
5462 <key>RenderGlowWarmthWeights</key>
5463 <map>
5464 <key>Comment</key>
5465 <string>Weight of each color channel used before finding the max warmth</string>
5466 <key>Persist</key>
5467 <integer>1</integer>
5468 <key>Type</key>
5469 <string>Vector3</string>
5470 <key>Value</key>
5471 <array>
5472 <real>1.0</real>
5473 <real>0.5</real>
5474 <real>0.7</real>
5475 </array>
5476 </map>
5477 <key>RenderGlowWidth</key>
5478 <map>
5479 <key>Comment</key>
5480 <string>Glow sample size (higher = wider and softer but eventually more pixelated)</string>
5481 <key>Persist</key>
5482 <integer>1</integer>
5483 <key>Type</key>
5484 <string>F32</string>
5485 <key>Value</key>
5486 <real>1.3</real>
5487 </map>
5488 <key>RenderHUDInSnapshot</key>
5489 <map>
5490 <key>Comment</key>
5491 <string>Display HUD attachments in snapshot</string>
5492 <key>Persist</key>
5493 <integer>1</integer>
5494 <key>Type</key>
5495 <string>Boolean</string>
5496 <key>Value</key>
5497 <integer>0</integer>
5498 </map>
5499 <key>RenderHiddenSelections</key>
5500 <map>
5501 <key>Comment</key>
5502 <string>Show selection lines on objects that are behind other objects</string>
5503 <key>Persist</key>
5504 <integer>1</integer>
5505 <key>Type</key>
5506 <string>Boolean</string>
5507 <key>Value</key>
5508 <integer>1</integer>
5509 </map>
5510 <key>RenderHideGroupTitle</key>
5511 <map>
5512 <key>Comment</key>
5513 <string>Don&apos;t show my group title in my name label</string>
5514 <key>Persist</key>
5515 <integer>1</integer>
5516 <key>Type</key>
5517 <string>Boolean</string>
5518 <key>Value</key>
5519 <integer>0</integer>
5520 </map>
5521 <key>RenderHideGroupTitleAll</key>
5522 <map>
5523 <key>Comment</key>
5524 <string>Show group titles in name labels</string>
5525 <key>Persist</key>
5526 <integer>1</integer>
5527 <key>Type</key>
5528 <string>Boolean</string>
5529 <key>Value</key>
5530 <integer>0</integer>
5531 </map>
5532 <key>RenderInitError</key>
5533 <map>
5534 <key>Comment</key>
5535 <string>Error occured while initializing GL</string>
5536 <key>Persist</key>
5537 <integer>1</integer>
5538 <key>Type</key>
5539 <string>Boolean</string>
5540 <key>Value</key>
5541 <integer>0</integer>
5542 </map>
5543 <key>RenderLightRadius</key>
5544 <map>
5545 <key>Comment</key>
5546 <string>Render the radius of selected lights</string>
5547 <key>Persist</key>
5548 <integer>1</integer>
5549 <key>Type</key>
5550 <string>Boolean</string>
5551 <key>Value</key>
5552 <integer>0</integer>
5553 </map>
5554 <key>RenderLightingDetail</key>
5555 <map>
5556 <key>Comment</key>
5557 <string>Amount of detail for lighting objects/avatars/terrain (0=sun/moon only, 1=enable local lights)</string>
5558 <key>Persist</key>
5559 <integer>1</integer>
5560 <key>Type</key>
5561 <string>S32</string>
5562 <key>Value</key>
5563 <integer>1</integer>
5564 </map>
5565 <key>RenderMaxPartCount</key>
5566 <map>
5567 <key>Comment</key>
5568 <string>Maximum number of particles to display on screen</string>
5569 <key>Persist</key>
5570 <integer>1</integer>
5571 <key>Type</key>
5572 <string>S32</string>
5573 <key>Value</key>
5574 <integer>4096</integer>
5575 </map>
5576 <key>RenderMaxVBOSize</key>
5577 <map>
5578 <key>Comment</key>
5579 <string>Maximum size of a vertex buffer (in KB).</string>
5580 <key>Persist</key>
5581 <integer>1</integer>
5582 <key>Type</key>
5583 <string>S32</string>
5584 <key>Value</key>
5585 <integer>32</integer>
5586 </map>
5587 <key>RenderName</key>
5588 <map>
5589 <key>Comment</key>
5590 <string>Controls display of names above avatars (0 = never, 1 = fade, 2 = always)</string>
5591 <key>Persist</key>
5592 <integer>1</integer>
5593 <key>Type</key>
5594 <string>S32</string>
5595 <key>Value</key>
5596 <integer>2</integer>
5597 </map>
5598 <key>RenderNameFadeDuration</key>
5599 <map>
5600 <key>Comment</key>
5601 <string>Time interval over which to fade avatar names (seconds)</string>
5602 <key>Persist</key>
5603 <integer>1</integer>
5604 <key>Type</key>
5605 <string>F32</string>
5606 <key>Value</key>
5607 <real>1</real>
5608 </map>
5609 <key>RenderNameHideSelf</key>
5610 <map>
5611 <key>Comment</key>
5612 <string>Don&apos;t display own name above avatar</string>
5613 <key>Persist</key>
5614 <integer>1</integer>
5615 <key>Type</key>
5616 <string>Boolean</string>
5617 <key>Value</key>
5618 <integer>0</integer>
5619 </map>
5620 <key>RenderNameShowTime</key>
5621 <map>
5622 <key>Comment</key>
5623 <string>Fade avatar names after specified time (seconds)</string>
5624 <key>Persist</key>
5625 <integer>1</integer>
5626 <key>Type</key>
5627 <string>F32</string>
5628 <key>Value</key>
5629 <real>10</real>
5630 </map>
5631 <key>RenderObjectBump</key>
5632 <map>
5633 <key>Comment</key>
5634 <string>Show bumpmapping on primitives</string>
5635 <key>Persist</key>
5636 <integer>1</integer>
5637 <key>Type</key>
5638 <string>Boolean</string>
5639 <key>Value</key>
5640 <integer>1</integer>
5641 </map>
5642 <key>RenderQualityPerformance</key>
5643 <map>
5644 <key>Comment</key>
5645 <string>Which graphics settings you've chosen</string>
5646 <key>Persist</key>
5647 <integer>1</integer>
5648 <key>Type</key>
5649 <string>U32</string>
5650 <key>Value</key>
5651 <integer>1</integer>
5652 </map>
5653 <key>RenderReflectionDetail</key>
5654 <map>
5655 <key>Comment</key>
5656 <string>Detail of reflection render pass.</string>
5657 <key>Persist</key>
5658 <integer>1</integer>
5659 <key>Type</key>
5660 <string>S32</string>
5661 <key>Value</key>
5662 <integer>2</integer>
5663 </map>
5664 <key>RenderReflectionRes</key>
5665 <map>
5666 <key>Comment</key>
5667 <string>Reflection map resolution.</string>
5668 <key>Persist</key>
5669 <integer>1</integer>
5670 <key>Type</key>
5671 <string>S32</string>
5672 <key>Value</key>
5673 <integer>64</integer>
5674 </map>
5675 <key>RenderResolutionDivisor</key>
5676 <map>
5677 <key>Comment</key>
5678 <string>Divisor for rendering 3D scene at reduced resolution.</string>
5679 <key>Persist</key>
5680 <integer>1</integer>
5681 <key>Type</key>
5682 <string>U32</string>
5683 <key>Value</key>
5684 <integer>1</integer>
5685 </map>
5686 <key>RenderShaderLODThreshold</key>
5687 <map>
5688 <key>Comment</key>
5689 <string>Fraction of draw distance defining the switch to a different shader LOD</string>
5690 <key>Persist</key>
5691 <integer>1</integer>
5692 <key>Type</key>
5693 <string>F32</string>
5694 <key>Value</key>
5695 <integer>1.0</integer>
5696 </map>
5697 <key>RenderSunDynamicRange</key>
5698 <map>
5699 <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>
5701 <key>Persist</key>
5702 <integer>1</integer>
5703 <key>Type</key>
5704 <string>F32</string>
5705 <key>Value</key>
5706 <integer>1.0</integer>
5707 </map>
5708 <key>RenderTerrainDetail</key>
5709 <map>
5710 <key>Comment</key>
5711 <string>Detail applied to terrain texturing (0 = none, 1 or 2 = full)</string>
5712 <key>Persist</key>
5713 <integer>1</integer>
5714 <key>Type</key>
5715 <string>S32</string>
5716 <key>Value</key>
5717 <integer>2</integer>
5718 </map>
5719 <key>RenderTerrainLODFactor</key>
5720 <map>
5721 <key>Comment</key>
5722 <string>Controls level of detail of terrain (multiplier for current screen area when calculated level of detail)</string>
5723 <key>Persist</key>
5724 <integer>1</integer>
5725 <key>Type</key>
5726 <string>F32</string>
5727 <key>Value</key>
5728 <real>1.0</real>
5729 </map>
5730 <key>RenderTerrainScale</key>
5731 <map>
5732 <key>Comment</key>
5733 <string>Terrain detail texture scale</string>
5734 <key>Persist</key>
5735 <integer>1</integer>
5736 <key>Type</key>
5737 <string>F32</string>
5738 <key>Value</key>
5739 <real>12</real>
5740 </map>
5741 <key>RenderTreeLODFactor</key>
5742 <map>
5743 <key>Comment</key>
5744 <string>Controls level of detail of vegetation (multiplier for current screen area when calculated level of detail)</string>
5745 <key>Persist</key>
5746 <integer>1</integer>
5747 <key>Type</key>
5748 <string>F32</string>
5749 <key>Value</key>
5750 <real>0.5</real>
5751 </map>
5752 <key>RenderUIInSnapshot</key>
5753 <map>
5754 <key>Comment</key>
5755 <string>Display user interface in snapshot</string>
5756 <key>Persist</key>
5757 <integer>1</integer>
5758 <key>Type</key>
5759 <string>Boolean</string>
5760 <key>Value</key>
5761 <integer>0</integer>
5762 </map>
5763 <key>RenderUseCleverUI</key>
5764 <map>
5765 <key>Comment</key>
5766 <string>Turns on the \"clever\" UI rendering optimization. It's a known performace gain (and enabled by default) on apple.</string>
5767 <key>Persist</key>
5768 <integer>1</integer>
5769 <key>Type</key>
5770 <string>Boolean</string>
5771 <key>Value</key>
5772 <integer>1</integer>
5773 </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>
5786 <map>
5787 <key>Comment</key>
5788 <string>Whether we want to use GL_EXT_framebuffer_objects.</string>
5789 <key>Persist</key>
5790 <integer>1</integer>
5791 <key>Type</key>
5792 <string>Boolean</string>
5793 <key>Value</key>
5794 <integer>0</integer>
5795 </map>
5796 <key>RenderUseImpostors</key>
5797 <map>
5798 <key>Comment</key>
5799 <string>Whether we want to use impostors for far away avatars.</string>
5800 <key>Persist</key>
5801 <integer>1</integer>
5802 <key>Type</key>
5803 <string>Boolean</string>
5804 <key>Value</key>
5805 <integer>1</integer>
5806 </map>
5807 <key>RenderUseShaderLOD</key>
5808 <map>
5809 <key>Comment</key>
5810 <string>Whether we want to have different shaders for LOD</string>
5811 <key>Persist</key>
5812 <integer>1</integer>
5813 <key>Type</key>
5814 <string>Boolean</string>
5815 <key>Value</key>
5816 <integer>1</integer>
5817 </map>
5818 <key>RenderUseShaderNearParticles</key>
5819 <map>
5820 <key>Comment</key>
5821 <string>Whether we want to use shaders on near particles</string>
5822 <key>Persist</key>
5823 <integer>1</integer>
5824 <key>Type</key>
5825 <string>Boolean</string>
5826 <key>Value</key>
5827 <integer>0</integer>
5828 </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>
5841 <map>
5842 <key>Comment</key>
5843 <string>Use GL Vertex Buffer Objects</string>
5844 <key>Persist</key>
5845 <integer>1</integer>
5846 <key>Type</key>
5847 <string>Boolean</string>
5848 <key>Value</key>
5849 <integer>1</integer>
5850 </map>
5851 <key>RenderVolumeLODFactor</key>
5852 <map>
5853 <key>Comment</key>
5854 <string>Controls level of detail of primitives (multiplier for current screen area when calculated level of detail)</string>
5855 <key>Persist</key>
5856 <integer>1</integer>
5857 <key>Type</key>
5858 <string>F32</string>
5859 <key>Value</key>
5860 <real>1</real>
5861 </map>
5862 <key>RenderWater</key>
5863 <map>
5864 <key>Comment</key>
5865 <string>Display water</string>
5866 <key>Persist</key>
5867 <integer>1</integer>
5868 <key>Type</key>
5869 <string>Boolean</string>
5870 <key>Value</key>
5871 <integer>1</integer>
5872 </map>
5873 <key>RenderWaterMipNormal</key>
5874 <map>
5875 <key>Comment</key>
5876 <string>Use mip maps for water normal map.</string>
5877 <key>Persist</key>
5878 <integer>1</integer>
5879 <key>Type</key>
5880 <string>Boolean</string>
5881 <key>Value</key>
5882 <integer>1</integer>
5883 </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>
5896 <map>
5897 <key>Comment</key>
5898 <string>Water planar reflection resolution.</string>
5899 <key>Persist</key>
5900 <integer>1</integer>
5901 <key>Type</key>
5902 <string>S32</string>
5903 <key>Value</key>
5904 <integer>512</integer>
5905 </map>
5906 <key>RotateRight</key>
5907 <map>
5908 <key>Comment</key>
5909 <string>Make the agent rotate to its right.</string>
5910 <key>Persist</key>
5911 <integer>1</integer>
5912 <key>Type</key>
5913 <string>Boolean</string>
5914 <key>Value</key>
5915 <integer>0</integer>
5916 </map>
5917 <key>RotationStep</key>
5918 <map>
5919 <key>Comment</key>
5920 <string>All rotations via rotation tool are constrained to multiples of this unit (degrees)</string>
5921 <key>Persist</key>
5922 <integer>1</integer>
5923 <key>Type</key>
5924 <string>F32</string>
5925 <key>Value</key>
5926 <real>1</real>
5927 </map>
5928 <key>RunBtnState</key>
5929 <map>
5930 <key>Comment</key>
5931 <string />
5932 <key>Persist</key>
5933 <integer>0</integer>
5934 <key>Type</key>
5935 <string>Boolean</string>
5936 <key>Value</key>
5937 <integer>0</integer>
5938 </map>
5939 <key>RunMultipleThreads</key>
5940 <map>
5941 <key>Comment</key>
5942 <string>If TRUE keep background threads active during render</string>
5943 <key>Persist</key>
5944 <integer>1</integer>
5945 <key>Type</key>
5946 <string>Boolean</string>
5947 <key>Value</key>
5948 <integer>0</integer>
5949 </map>
5950 <key>SafeMode</key>
5951 <map>
5952 <key>Comment</key>
5953 <string>Reset preferences, run in safe mode.</string>
5954 <key>Persist</key>
5955 <integer>1</integer>
5956 <key>Type</key>
5957 <string>Boolean</string>
5958 <key>Value</key>
5959 <integer>0</integer>
5960 </map>
5961 <key>SaveMinidump</key>
5962 <map>
5963 <key>Comment</key>
5964 <string>Save minidump for developer debugging on crash</string>
5965 <key>Persist</key>
5966 <integer>1</integer>
5967 <key>Type</key>
5968 <string>Boolean</string>
5969 <key>Value</key>
5970 <integer>1</integer>
5971 </map>
5972 <key>ScaleShowAxes</key>
5973 <map>
5974 <key>Comment</key>
5975 <string>Show indicator of selected scale axis when scaling</string>
5976 <key>Persist</key>
5977 <integer>1</integer>
5978 <key>Type</key>
5979 <string>Boolean</string>
5980 <key>Value</key>
5981 <integer>0</integer>
5982 </map>
5983 <key>ScaleStretchTextures</key>
5984 <map>
5985 <key>Comment</key>
5986 <string>Stretch textures along with object when scaling</string>
5987 <key>Persist</key>
5988 <integer>1</integer>
5989 <key>Type</key>
5990 <string>Boolean</string>
5991 <key>Value</key>
5992 <integer>1</integer>
5993 </map>
5994 <key>ScaleUniform</key>
5995 <map>
5996 <key>Comment</key>
5997 <string>Scale selected objects evenly about center of selection</string>
5998 <key>Persist</key>
5999 <integer>1</integer>
6000 <key>Type</key>
6001 <string>Boolean</string>
6002 <key>Value</key>
6003 <integer>0</integer>
6004 </map>
6005 <key>ScriptErrorColor</key>
6006 <map>
6007 <key>Comment</key>
6008 <string>Color of script error messages</string>
6009 <key>Persist</key>
6010 <integer>1</integer>
6011 <key>Type</key>
6012 <string>Color4</string>
6013 <key>Value</key>
6014 <array>
6015 <real>0.819999992847442626953125</real>
6016 <real>0.819999992847442626953125</real>
6017 <real>0.9900000095367431640625</real>
6018 <real>1</real>
6019 </array>
6020 </map>
6021 <key>ScriptErrorsAsChat</key>
6022 <map>
6023 <key>Comment</key>
6024 <string>Display script errors and warning in chat history</string>
6025 <key>Persist</key>
6026 <integer>1</integer>
6027 <key>Type</key>
6028 <string>Boolean</string>
6029 <key>Value</key>
6030 <integer>0</integer>
6031 </map>
6032 <key>ScriptHelpFollowsCursor</key>
6033 <map>
6034 <key>Comment</key>
6035 <string>Scripting help window updates contents based on script editor contents under text cursor</string>
6036 <key>Persist</key>
6037 <integer>1</integer>
6038 <key>Type</key>
6039 <string>Boolean</string>
6040 <key>Value</key>
6041 <integer>0</integer>
6042 </map>
6043 <key>SearchURLDefault</key>
6044 <map>
6045 <key>Comment</key>
6046 <string>URL to load for empty searches</string>
6047 <key>Persist</key>
6048 <integer>1</integer>
6049 <key>Type</key>
6050 <string>String</string>
6051 <key>Value</key>
6052 <string>http://secondlife.com/app/search/index.php?</string>
6053 </map>
6054 <key>SearchURLQuery</key>
6055 <map>
6056 <key>Comment</key>
6057 <string>URL to use for searches</string>
6058 <key>Persist</key>
6059 <integer>1</integer>
6060 <key>Type</key>
6061 <string>String</string>
6062 <key>Value</key>
6063 <string>http://secondlife.com/app/search/search_proxy.php?q=[QUERY]&amp;s=[COLLECTION]&amp;</string>
6064 </map>
6065 <key>SearchURLSuffix2</key>
6066 <map>
6067 <key>Comment</key>
6068 <string>Parameters added to end of search queries</string>
6069 <key>Persist</key>
6070 <integer>1</integer>
6071 <key>Type</key>
6072 <string>String</string>
6073 <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>
6075 </map>
6076 <key>SelectMovableOnly</key>
6077 <map>
6078 <key>Comment</key>
6079 <string>Select only objects you can move</string>
6080 <key>Persist</key>
6081 <integer>1</integer>
6082 <key>Type</key>
6083 <string>Boolean</string>
6084 <key>Value</key>
6085 <integer>0</integer>
6086 </map>
6087 <key>SelectOwnedOnly</key>
6088 <map>
6089 <key>Comment</key>
6090 <string>Select only objects you own</string>
6091 <key>Persist</key>
6092 <integer>1</integer>
6093 <key>Type</key>
6094 <string>Boolean</string>
6095 <key>Value</key>
6096 <integer>0</integer>
6097 </map>
6098 <key>SelectionHighlightAlpha</key>
6099 <map>
6100 <key>Comment</key>
6101 <string>Opacity of selection highlight (0.0 = completely transparent, 1.0 = completely opaque)</string>
6102 <key>Persist</key>
6103 <integer>1</integer>
6104 <key>Type</key>
6105 <string>F32</string>
6106 <key>Value</key>
6107 <real>0.4000000059604644775390625</real>
6108 </map>
6109 <key>SelectionHighlightAlphaTest</key>
6110 <map>
6111 <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>
6113 <key>Persist</key>
6114 <integer>1</integer>
6115 <key>Type</key>
6116 <string>F32</string>
6117 <key>Value</key>
6118 <real>0.1</real>
6119 </map>
6120 <key>SelectionHighlightThickness</key>
6121 <map>
6122 <key>Comment</key>
6123 <string>Thickness of selection highlight line (fraction of view distance)</string>
6124 <key>Persist</key>
6125 <integer>1</integer>
6126 <key>Type</key>
6127 <string>F32</string>
6128 <key>Value</key>
6129 <real>0.009999999776482582092285156</real>
6130 </map>
6131 <key>SelectionHighlightUAnim</key>
6132 <map>
6133 <key>Comment</key>
6134 <string>Rate at which texture animates along U direction in selection highlight line (fraction of texture per second)</string>
6135 <key>Persist</key>
6136 <integer>1</integer>
6137 <key>Type</key>
6138 <string>F32</string>
6139 <key>Value</key>
6140 <real>0</real>
6141 </map>
6142 <key>SelectionHighlightUScale</key>
6143 <map>
6144 <key>Comment</key>
6145 <string>Scale of texture display on selection highlight line (fraction of texture size)</string>
6146 <key>Persist</key>
6147 <integer>1</integer>
6148 <key>Type</key>
6149 <string>F32</string>
6150 <key>Value</key>
6151 <real>0.1</real>
6152 </map>
6153 <key>SelectionHighlightVAnim</key>
6154 <map>
6155 <key>Comment</key>
6156 <string>Rate at which texture animates along V direction in selection highlight line (fraction of texture per second)</string>
6157 <key>Persist</key>
6158 <integer>1</integer>
6159 <key>Type</key>
6160 <string>F32</string>
6161 <key>Value</key>
6162 <real>0.5</real>
6163 </map>
6164 <key>SelectionHighlightVScale</key>
6165 <map>
6166 <key>Comment</key>
6167 <string>Scale of texture display on selection highlight line (fraction of texture size)</string>
6168 <key>Persist</key>
6169 <integer>1</integer>
6170 <key>Type</key>
6171 <string>F32</string>
6172 <key>Value</key>
6173 <real>1</real>
6174 </map>
6175 <key>ServerChoice</key>
6176 <map>
6177 <key>Comment</key>
6178 <string>[DO NOT MODIFY] Controls which grid you connect to</string>
6179 <key>Persist</key>
6180 <integer>1</integer>
6181 <key>Type</key>
6182 <string>S32</string>
6183 <key>Value</key>
6184 <integer>0</integer>
6185 </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>
6198 <map>
6199 <key>Comment</key>
6200 <string>Display active speakers list on login</string>
6201 <key>Persist</key>
6202 <integer>1</integer>
6203 <key>Type</key>
6204 <string>Boolean</string>
6205 <key>Value</key>
6206 <integer>0</integer>
6207 </map>
6208 <key>ShowAxes</key>
6209 <map>
6210 <key>Comment</key>
6211 <string>Render coordinate frame at your position</string>
6212 <key>Persist</key>
6213 <integer>1</integer>
6214 <key>Type</key>
6215 <string>Boolean</string>
6216 <key>Value</key>
6217 <integer>0</integer>
6218 </map>
6219 <key>ShowCameraControls</key>
6220 <map>
6221 <key>Comment</key>
6222 <string>Display camera controls on login</string>
6223 <key>Persist</key>
6224 <integer>1</integer>
6225 <key>Type</key>
6226 <string>Boolean</string>
6227 <key>Value</key>
6228 <integer>1</integer>
6229 </map>
6230 <key>ShowChatHistory</key>
6231 <map>
6232 <key>Comment</key>
6233 <string />
6234 <key>Persist</key>
6235 <integer>0</integer>
6236 <key>Type</key>
6237 <string>Boolean</string>
6238 <key>Value</key>
6239 <integer>0</integer>
6240 </map>
6241 <key>ShowCommunicate</key>
6242 <map>
6243 <key>Comment</key>
6244 <string />
6245 <key>Persist</key>
6246 <integer>0</integer>
6247 <key>Type</key>
6248 <string>Boolean</string>
6249 <key>Value</key>
6250 <integer>0</integer>
6251 </map>
6252 <key>ShowConsoleWindow</key>
6253 <map>
6254 <key>Comment</key>
6255 <string>Show log in separate OS window</string>
6256 <key>Persist</key>
6257 <integer>1</integer>
6258 <key>Type</key>
6259 <string>Boolean</string>
6260 <key>Value</key>
6261 <integer>0</integer>
6262 </map>
6263 <key>ShowCrosshairs</key>
6264 <map>
6265 <key>Comment</key>
6266 <string>Display crosshairs when in mouselook mode</string>
6267 <key>Persist</key>
6268 <integer>1</integer>
6269 <key>Type</key>
6270 <string>Boolean</string>
6271 <key>Value</key>
6272 <integer>1</integer>
6273 </map>
6274 <key>ShowDebugConsole</key>
6275 <map>
6276 <key>Comment</key>
6277 <string>Show log in SL window</string>
6278 <key>Persist</key>
6279 <integer>1</integer>
6280 <key>Type</key>
6281 <string>Boolean</string>
6282 <key>Value</key>
6283 <integer>0</integer>
6284 </map>
6285 <key>ShowDebugStats</key>
6286 <map>
6287 <key>Comment</key>
6288 <string>Show performance stats display</string>
6289 <key>Persist</key>
6290 <integer>1</integer>
6291 <key>Type</key>
6292 <string>Boolean</string>
6293 <key>Value</key>
6294 <integer>0</integer>
6295 </map>
6296 <key>ShowDepthBuffer</key>
6297 <map>
6298 <key>Comment</key>
6299 <string>Show depth buffer contents</string>
6300 <key>Persist</key>
6301 <integer>1</integer>
6302 <key>Type</key>
6303 <string>Boolean</string>
6304 <key>Value</key>
6305 <integer>0</integer>
6306 </map>
6307 <key>ShowDirectory</key>
6308 <map>
6309 <key>Comment</key>
6310 <string />
6311 <key>Persist</key>
6312 <integer>0</integer>
6313 <key>Type</key>
6314 <string>Boolean</string>
6315 <key>Value</key>
6316 <integer>0</integer>
6317 </map>
6318 <key>ShowEmptyFoldersWhenSearching</key>
6319 <map>
6320 <key>Comment</key>
6321 <string>Shows folders that do not have any visible contents when applying a filter to inventory</string>
6322 <key>Persist</key>
6323 <integer>1</integer>
6324 <key>Type</key>
6325 <string>Boolean</string>
6326 <key>Value</key>
6327 <integer>0</integer>
6328 </map>
6329 <key>ShowHoverTips</key>
6330 <map>
6331 <key>Comment</key>
6332 <string>Show descriptive tooltip when mouse hovers over items in world</string>
6333 <key>Persist</key>
6334 <integer>1</integer>
6335 <key>Type</key>
6336 <string>Boolean</string>
6337 <key>Value</key>
6338 <integer>1</integer>
6339 </map>
6340 <key>ShowInventory</key>
6341 <map>
6342 <key>Comment</key>
6343 <string>Open inventory window on login</string>
6344 <key>Persist</key>
6345 <integer>1</integer>
6346 <key>Type</key>
6347 <string>Boolean</string>
6348 <key>Value</key>
6349 <integer>0</integer>
6350 </map>
6351 <key>ShowLandHoverTip</key>
6352 <map>
6353 <key>Comment</key>
6354 <string>Show descriptive tooltip when mouse hovers over land</string>
6355 <key>Persist</key>
6356 <integer>1</integer>
6357 <key>Type</key>
6358 <string>Boolean</string>
6359 <key>Value</key>
6360 <integer>0</integer>
6361 </map>
6362 <key>ShowLeaders</key>
6363 <map>
6364 <key>Comment</key>
6365 <string />
6366 <key>Persist</key>
6367 <integer>0</integer>
6368 <key>Type</key>
6369 <string>Boolean</string>
6370 <key>Value</key>
6371 <integer>0</integer>
6372 </map>
6373 <key>ShowMatureClassifieds</key>
6374 <map>
6375 <key>Comment</key>
6376 <string>Display results of find classifieds that are flagged as mature</string>
6377 <key>Persist</key>
6378 <integer>1</integer>
6379 <key>Type</key>
6380 <string>Boolean</string>
6381 <key>Value</key>
6382 <integer>0</integer>
6383 </map>
6384 <key>ShowMatureEvents</key>
6385 <map>
6386 <key>Comment</key>
6387 <string>Display results of find events that are flagged as mature</string>
6388 <key>Persist</key>
6389 <integer>1</integer>
6390 <key>Type</key>
6391 <string>Boolean</string>
6392 <key>Value</key>
6393 <integer>0</integer>
6394 </map>
6395 <key>ShowMatureFindAll</key>
6396 <map>
6397 <key>Comment</key>
6398 <string>Display results of find all that are in mature sims</string>
6399 <key>Persist</key>
6400 <integer>1</integer>
6401 <key>Type</key>
6402 <string>Boolean</string>
6403 <key>Value</key>
6404 <integer>0</integer>
6405 </map>
6406 <key>ShowMatureGroups</key>
6407 <map>
6408 <key>Comment</key>
6409 <string>Display results of find groups that are in flagged as mature</string>
6410 <key>Persist</key>
6411 <integer>1</integer>
6412 <key>Type</key>
6413 <string>Boolean</string>
6414 <key>Value</key>
6415 <integer>1</integer>
6416 </map>
6417 <key>ShowMatureSims</key>
6418 <map>
6419 <key>Comment</key>
6420 <string>Display results of find places or find popular that are in mature sims</string>
6421 <key>Persist</key>
6422 <integer>1</integer>
6423 <key>Type</key>
6424 <string>Boolean</string>
6425 <key>Value</key>
6426 <integer>0</integer>
6427 </map>
6428 <key>ShowMiniMap</key>
6429 <map>
6430 <key>Comment</key>
6431 <string>Display mini map on login</string>
6432 <key>Persist</key>
6433 <integer>1</integer>
6434 <key>Type</key>
6435 <string>Boolean</string>
6436 <key>Value</key>
6437 <integer>1</integer>
6438 </map>
6439 <key>ShowMovementControls</key>
6440 <map>
6441 <key>Comment</key>
6442 <string>Display movement controls on login</string>
6443 <key>Persist</key>
6444 <integer>1</integer>
6445 <key>Type</key>
6446 <string>Boolean</string>
6447 <key>Value</key>
6448 <integer>1</integer>
6449 </map>
6450 <key>ShowNearClip</key>
6451 <map>
6452 <key>Comment</key>
6453 <string />
6454 <key>Persist</key>
6455 <integer>0</integer>
6456 <key>Type</key>
6457 <string>Boolean</string>
6458 <key>Value</key>
6459 <integer>0</integer>
6460 </map>
6461 <key>ShowNewInventory</key>
6462 <map>
6463 <key>Comment</key>
6464 <string>Automatically views new notecards/textures/landmarks</string>
6465 <key>Persist</key>
6466 <integer>1</integer>
6467 <key>Type</key>
6468 <string>Boolean</string>
6469 <key>Value</key>
6470 <integer>1</integer>
6471 </map>
6472 <key>ShowObjectUpdates</key>
6473 <map>
6474 <key>Comment</key>
6475 <string>Show when update messages are received for individual objects</string>
6476 <key>Persist</key>
6477 <integer>1</integer>
6478 <key>Type</key>
6479 <string>Boolean</string>
6480 <key>Value</key>
6481 <integer>0</integer>
6482 </map>
6483 <key>ShowOverlayTitle</key>
6484 <map>
6485 <key>Comment</key>
6486 <string>Prints watermark text message on screen</string>
6487 <key>Persist</key>
6488 <integer>1</integer>
6489 <key>Type</key>
6490 <string>Boolean</string>
6491 <key>Value</key>
6492 <integer>0</integer>
6493 </map>
6494 <key>ShowParcelOwners</key>
6495 <map>
6496 <key>Comment</key>
6497 <string />
6498 <key>Persist</key>
6499 <integer>0</integer>
6500 <key>Type</key>
6501 <string>Boolean</string>
6502 <key>Value</key>
6503 <integer>0</integer>
6504 </map>
6505 <key>ShowPermissions</key>
6506 <map>
6507 <key>Comment</key>
6508 <string />
6509 <key>Persist</key>
6510 <integer>0</integer>
6511 <key>Type</key>
6512 <string>Boolean</string>
6513 <key>Value</key>
6514 <integer>0</integer>
6515 </map>
6516 <key>ShowPropertyLines</key>
6517 <map>
6518 <key>Comment</key>
6519 <string>Show line overlay demarking property boundaries</string>
6520 <key>Persist</key>
6521 <integer>1</integer>
6522 <key>Type</key>
6523 <string>Boolean</string>
6524 <key>Value</key>
6525 <integer>0</integer>
6526 </map>
6527 <key>ShowSearchBar</key>
6528 <map>
6529 <key>Comment</key>
6530 <string>Show the Search Bar in the Status Overlay</string>
6531 <key>Persist</key>
6532 <integer>1</integer>
6533 <key>Type</key>
6534 <string>Boolean</string>
6535 <key>Value</key>
6536 <integer>1</integer>
6537 </map>
6538 <key>ShowSelectionBeam</key>
6539 <map>
6540 <key>Comment</key>
6541 <string>Show selection particle beam when selecting or interacting with objects.</string>
6542 <key>Persist</key>
6543 <integer>1</integer>
6544 <key>Type</key>
6545 <string>Boolean</string>
6546 <key>Value</key>
6547 <integer>1</integer>
6548 </map>
6549 <key>ShowStartLocation</key>
6550 <map>
6551 <key>Comment</key>
6552 <string>Display starting location menu on login screen</string>
6553 <key>Persist</key>
6554 <integer>1</integer>
6555 <key>Type</key>
6556 <string>Boolean</string>
6557 <key>Value</key>
6558 <integer>0</integer>
6559 </map>
6560 <key>ShowTangentBasis</key>
6561 <map>
6562 <key>Comment</key>
6563 <string>Render normal and binormal (debugging bump mapping)</string>
6564 <key>Persist</key>
6565 <integer>1</integer>
6566 <key>Type</key>
6567 <string>Boolean</string>
6568 <key>Value</key>
6569 <integer>0</integer>
6570 </map>
6571 <key>ShowToolBar</key>
6572 <map>
6573 <key>Comment</key>
6574 <string>Show toolbar at bottom of screen</string>
6575 <key>Persist</key>
6576 <integer>1</integer>
6577 <key>Type</key>
6578 <string>Boolean</string>
6579 <key>Value</key>
6580 <integer>1</integer>
6581 </map>
6582 <key>ShowTools</key>
6583 <map>
6584 <key>Comment</key>
6585 <string />
6586 <key>Persist</key>
6587 <integer>0</integer>
6588 <key>Type</key>
6589 <string>Boolean</string>
6590 <key>Value</key>
6591 <integer>0</integer>
6592 </map>
6593 <key>ShowVoiceChannelPopup</key>
6594 <map>
6595 <key>Comment</key>
6596 <string>Controls visibility of the current voice channel popup above the voice tab</string>
6597 <key>Persist</key>
6598 <integer>1</integer>
6599 <key>Type</key>
6600 <string>Boolean</string>
6601 <key>Value</key>
6602 <integer>0</integer>
6603 </map>
6604 <key>ShowVolumeSettingsPopup</key>
6605 <map>
6606 <key>Comment</key>
6607 <string>Show individual volume slider for voice, sound effects, etc</string>
6608 <key>Persist</key>
6609 <integer>1</integer>
6610 <key>Type</key>
6611 <string>Boolean</string>
6612 <key>Value</key>
6613 <integer>0</integer>
6614 </map>
6615 <key>ShowWorldMap</key>
6616 <map>
6617 <key>Comment</key>
6618 <string>Display world map on login</string>
6619 <key>Persist</key>
6620 <integer>1</integer>
6621 <key>Type</key>
6622 <string>Boolean</string>
6623 <key>Value</key>
6624 <integer>0</integer>
6625 </map>
6626 <key>ShowXUINames</key>
6627 <map>
6628 <key>Comment</key>
6629 <string>Display XUI Names as Tooltips</string>
6630 <key>Persist</key>
6631 <integer>1</integer>
6632 <key>Type</key>
6633 <string>Boolean</string>
6634 <key>Value</key>
6635 <integer>0</integer>
6636 </map>
6637 <key>SitBtnState</key>
6638 <map>
6639 <key>Comment</key>
6640 <string />
6641 <key>Persist</key>
6642 <integer>0</integer>
6643 <key>Type</key>
6644 <string>Boolean</string>
6645 <key>Value</key>
6646 <integer>0</integer>
6647 </map>
6648 <key>SkinFolder</key>
6649 <map>
6650 <key>Comment</key>
6651 <string>The skin folder to use.</string>
6652 <key>Persist</key>
6653 <integer>1</integer>
6654 <key>Type</key>
6655 <string>String</string>
6656 <key>Value</key>
6657 <string />
6658 </map>
6659 <key>SkyAmbientScale</key>
6660 <map>
6661 <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>
6663 <key>Persist</key>
6664 <integer>1</integer>
6665 <key>Type</key>
6666 <string>F32</string>
6667 <key>Value</key>
6668 <real>0.300000011920928955078125</real>
6669 </map>
6670 <key>SkyNightColorShift</key>
6671 <map>
6672 <key>Comment</key>
6673 <string>Controls moonlight color (base color applied to moon as light source)</string>
6674 <key>Persist</key>
6675 <integer>1</integer>
6676 <key>Type</key>
6677 <string>Color3</string>
6678 <key>Value</key>
6679 <array>
6680 <real>0.699999988079071044921875</real>
6681 <real>0.699999988079071044921875</real>
6682 <real>1</real>
6683 </array>
6684 </map>
6685 <key>SkyOverrideSimSunPosition</key>
6686 <map>
6687 <key>Comment</key>
6688 <string />
6689 <key>Persist</key>
6690 <integer>0</integer>
6691 <key>Type</key>
6692 <string>Boolean</string>
6693 <key>Value</key>
6694 <integer>0</integer>
6695 </map>
6696 <key>SkySunDefaultPosition</key>
6697 <map>
6698 <key>Comment</key>
6699 <string>Default position of sun in sky (direction in world coordinates)</string>
6700 <key>Persist</key>
6701 <integer>1</integer>
6702 <key>Type</key>
6703 <string>Vector3</string>
6704 <key>Value</key>
6705 <array>
6706 <real>1</real>
6707 <real>0</real>
6708 <real>0.1</real>
6709 </array>
6710 </map>
6711 <key>SkyUseClassicClouds</key>
6712 <map>
6713 <key>Comment</key>
6714 <string>Whether to use the old Second Life particle clouds or not</string>
6715 <key>Persist</key>
6716 <integer>1</integer>
6717 <key>Type</key>
6718 <string>Boolean</string>
6719 <key>Value</key>
6720 <integer>1</integer>
6721 </map>
6722 <key>SlideLeftBtnRect</key>
6723 <map>
6724 <key>Comment</key>
6725 <string />
6726 <key>Persist</key>
6727 <integer>0</integer>
6728 <key>Type</key>
6729 <string>Rect</string>
6730 <key>Value</key>
6731 <array>
6732 <integer>20</integer>
6733 <integer>54</integer>
6734 <integer>45</integer>
6735 <integer>29</integer>
6736 </array>
6737 </map>
6738 <key>SlideRightBtnRect</key>
6739 <map>
6740 <key>Comment</key>
6741 <string />
6742 <key>Persist</key>
6743 <integer>0</integer>
6744 <key>Type</key>
6745 <string>Rect</string>
6746 <key>Value</key>
6747 <array>
6748 <integer>66</integer>
6749 <integer>54</integer>
6750 <integer>91</integer>
6751 <integer>29</integer>
6752 </array>
6753 </map>
6754 <key>SmallAvatarNames</key>
6755 <map>
6756 <key>Comment</key>
6757 <string>Display avatar name text in smaller font</string>
6758 <key>Persist</key>
6759 <integer>1</integer>
6760 <key>Type</key>
6761 <string>Boolean</string>
6762 <key>Value</key>
6763 <integer>1</integer>
6764 </map>
6765 <key>SnapEnabled</key>
6766 <map>
6767 <key>Comment</key>
6768 <string>Enable snapping to grid</string>
6769 <key>Persist</key>
6770 <integer>1</integer>
6771 <key>Type</key>
6772 <string>Boolean</string>
6773 <key>Value</key>
6774 <integer>1</integer>
6775 </map>
6776 <key>SnapMargin</key>
6777 <map>
6778 <key>Comment</key>
6779 <string>Controls maximum distance between windows before they auto-snap together (pixels)</string>
6780 <key>Persist</key>
6781 <integer>1</integer>
6782 <key>Type</key>
6783 <string>S32</string>
6784 <key>Value</key>
6785 <integer>10</integer>
6786 </map>
6787 <key>SnapToMouseCursor</key>
6788 <map>
6789 <key>Comment</key>
6790 <string>When snapping to grid, center object on nearest grid point to mouse cursor</string>
6791 <key>Persist</key>
6792 <integer>1</integer>
6793 <key>Type</key>
6794 <string>Boolean</string>
6795 <key>Value</key>
6796 <integer>0</integer>
6797 </map>
6798 <key>SnapshotLocalLastResolution</key>
6799 <map>
6800 <key>Comment</key>
6801 <string>Take next local snapshot at this resolution</string>
6802 <key>Persist</key>
6803 <integer>1</integer>
6804 <key>Type</key>
6805 <string>S32</string>
6806 <key>Value</key>
6807 <integer>0</integer>
6808 </map>
6809 <key>SnapshotPostcardLastResolution</key>
6810 <map>
6811 <key>Comment</key>
6812 <string>Take next postcard snapshot at this resolution</string>
6813 <key>Persist</key>
6814 <integer>1</integer>
6815 <key>Type</key>
6816 <string>S32</string>
6817 <key>Value</key>
6818 <integer>0</integer>
6819 </map>
6820 <key>SnapshotQuality</key>
6821 <map>
6822 <key>Comment</key>
6823 <string>Quality setting of postcard JPEGs (0 = worst, 100 = best)</string>
6824 <key>Persist</key>
6825 <integer>1</integer>
6826 <key>Type</key>
6827 <string>S32</string>
6828 <key>Value</key>
6829 <integer>75</integer>
6830 </map>
6831 <key>SnapshotTextureLastResolution</key>
6832 <map>
6833 <key>Comment</key>
6834 <string>Take next texture snapshot at this resolution</string>
6835 <key>Persist</key>
6836 <integer>1</integer>
6837 <key>Type</key>
6838 <string>S32</string>
6839 <key>Value</key>
6840 <integer>0</integer>
6841 </map>
6842 <key>SpeakingColor</key>
6843 <map>
6844 <key>Comment</key>
6845 <string>Color of various indicators when resident is speaking on a voice channel.</string>
6846 <key>Persist</key>
6847 <integer>1</integer>
6848 <key>Type</key>
6849 <string>Color4</string>
6850 <key>Value</key>
6851 <array>
6852 <real>0</real>
6853 <real>1</real>
6854 <real>0</real>
6855 <real>1</real>
6856 </array>
6857 </map>
6858 <key>SpeedTest</key>
6859 <map>
6860 <key>Comment</key>
6861 <string>Performance testing mode, no network</string>
6862 <key>Persist</key>
6863 <integer>1</integer>
6864 <key>Type</key>
6865 <string>Boolean</string>
6866 <key>Value</key>
6867 <integer>0</integer>
6868 </map>
6869 <key>StatsAutoRun</key>
6870 <map>
6871 <key>Comment</key>
6872 <string>Play back autopilot</string>
6873 <key>Persist</key>
6874 <integer>1</integer>
6875 <key>Type</key>
6876 <string>Boolean</string>
6877 <key>Value</key>
6878 <integer>0</integer>
6879 </map>
6880 <key>StatsFile</key>
6881 <map>
6882 <key>Comment</key>
6883 <string>Filename for stats logging output</string>
6884 <key>Persist</key>
6885 <integer>1</integer>
6886 <key>Type</key>
6887 <string>String</string>
6888 <key>Value</key>
6889 <string>fs.txt</string>
6890 </map>
6891 <key>StatsNumRuns</key>
6892 <map>
6893 <key>Comment</key>
6894 <string>Loop autopilot playback this number of times</string>
6895 <key>Persist</key>
6896 <integer>1</integer>
6897 <key>Type</key>
6898 <string>S32</string>
6899 <key>Value</key>
6900 <integer>-1</integer>
6901 </map>
6902 <key>StatsPilotFile</key>
6903 <map>
6904 <key>Comment</key>
6905 <string>Filename for stats logging autopilot path</string>
6906 <key>Persist</key>
6907 <integer>1</integer>
6908 <key>Type</key>
6909 <string>String</string>
6910 <key>Value</key>
6911 <string>pilot.txt</string>
6912 </map>
6913 <key>StatsQuitAfterRuns</key>
6914 <map>
6915 <key>Comment</key>
6916 <string>Quit application after this number of autopilot playback runs</string>
6917 <key>Persist</key>
6918 <integer>1</integer>
6919 <key>Type</key>
6920 <string>Boolean</string>
6921 <key>Value</key>
6922 <integer>0</integer>
6923 </map>
6924 <key>StatsSessionTrackFrameStats</key>
6925 <map>
6926 <key>Comment</key>
6927 <string>Track rendering and network statistics</string>
6928 <key>Persist</key>
6929 <integer>1</integer>
6930 <key>Type</key>
6931 <string>Boolean</string>
6932 <key>Value</key>
6933 <integer>0</integer>
6934 </map>
6935 <key>StatsSummaryFile</key>
6936 <map>
6937 <key>Comment</key>
6938 <string>Filename for stats logging summary</string>
6939 <key>Persist</key>
6940 <integer>1</integer>
6941 <key>Type</key>
6942 <string>String</string>
6943 <key>Value</key>
6944 <string>fss.txt</string>
6945 </map>
6946 <key>StatusBarHeight</key>
6947 <map>
6948 <key>Comment</key>
6949 <string>Height of menu/status bar at top of screen (pixels)</string>
6950 <key>Persist</key>
6951 <integer>1</integer>
6952 <key>Type</key>
6953 <string>S32</string>
6954 <key>Value</key>
6955 <integer>26</integer>
6956 </map>
6957 <key>StatusBarPad</key>
6958 <map>
6959 <key>Comment</key>
6960 <string>Spacing between popup buttons at bottom of screen (Stand up, Release Controls)</string>
6961 <key>Persist</key>
6962 <integer>1</integer>
6963 <key>Type</key>
6964 <string>S32</string>
6965 <key>Value</key>
6966 <integer>10</integer>
6967 </map>
6968 <key>SystemChatColor</key>
6969 <map>
6970 <key>Comment</key>
6971 <string>Color of chat messages from SL System</string>
6972 <key>Persist</key>
6973 <integer>1</integer>
6974 <key>Type</key>
6975 <string>Color4</string>
6976 <key>Value</key>
6977 <array>
6978 <real>0.800000011920928955078125</real>
6979 <real>1</real>
6980 <real>1</real>
6981 <real>1</real>
6982 </array>
6983 </map>
6984 <key>SystemLanguage</key>
6985 <map>
6986 <key>Comment</key>
6987 <string>Language indicated by system settings (for XUI)</string>
6988 <key>Persist</key>
6989 <integer>1</integer>
6990 <key>Type</key>
6991 <string>String</string>
6992 <key>Value</key>
6993 <string>en-us</string>
6994 </map>
6995 <key>TabToTextFieldsOnly</key>
6996 <map>
6997 <key>Comment</key>
6998 <string>TAB key takes you to next text entry field, instead of next widget</string>
6999 <key>Persist</key>
7000 <integer>1</integer>
7001 <key>Type</key>
7002 <string>Boolean</string>
7003 <key>Value</key>
7004 <integer>0</integer>
7005 </map>
7006 <key>TerrainColorHeightRange</key>
7007 <map>
7008 <key>Comment</key>
7009 <string>Altitude range over which a given terrain texture has effect (meters)</string>
7010 <key>Persist</key>
7011 <integer>1</integer>
7012 <key>Type</key>
7013 <string>F32</string>
7014 <key>Value</key>
7015 <real>60</real>
7016 </map>
7017 <key>TerrainColorStartHeight</key>
7018 <map>
7019 <key>Comment</key>
7020 <string>Starting altitude for terrain texturing (meters)</string>
7021 <key>Persist</key>
7022 <integer>1</integer>
7023 <key>Type</key>
7024 <string>F32</string>
7025 <key>Value</key>
7026 <real>20</real>
7027 </map>
7028 <key>TextureMemory</key>
7029 <map>
7030 <key>Comment</key>
7031 <string>Amount of memory to use for textures in MB (0 = autodetect)</string>
7032 <key>Persist</key>
7033 <integer>1</integer>
7034 <key>Type</key>
7035 <string>S32</string>
7036 <key>Value</key>
7037 <integer>0</integer>
7038 </map>
7039 <key>TexturePickerRect</key>
7040 <map>
7041 <key>Comment</key>
7042 <string>Rectangle for texture picker</string>
7043 <key>Persist</key>
7044 <integer>1</integer>
7045 <key>Type</key>
7046 <string>Rect</string>
7047 <key>Value</key>
7048 <array>
7049 <integer>0</integer>
7050 <integer>290</integer>
7051 <integer>350</integer>
7052 <integer>0</integer>
7053 </array>
7054 </map>
7055 <key>TexturePickerShowFolders</key>
7056 <map>
7057 <key>Comment</key>
7058 <string>Show folders with no texures in texture picker</string>
7059 <key>Persist</key>
7060 <integer>1</integer>
7061 <key>Type</key>
7062 <string>Boolean</string>
7063 <key>Value</key>
7064 <integer>1</integer>
7065 </map>
7066 <key>TexturePickerSortOrder</key>
7067 <map>
7068 <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>
7070 <key>Persist</key>
7071 <integer>1</integer>
7072 <key>Type</key>
7073 <string>U32</string>
7074 <key>Value</key>
7075 <integer>2</integer>
7076 </map>
7077 <key>ThirdPersonBtnState</key>
7078 <map>
7079 <key>Comment</key>
7080 <string />
7081 <key>Persist</key>
7082 <integer>0</integer>
7083 <key>Type</key>
7084 <string>Boolean</string>
7085 <key>Value</key>
7086 <integer>1</integer>
7087 </map>
7088 <key>ThrottleBandwidthKBPS</key>
7089 <map>
7090 <key>Comment</key>
7091 <string>Maximum allowable downstream bandwidth (kilo bits per second)</string>
7092 <key>Persist</key>
7093 <integer>1</integer>
7094 <key>Type</key>
7095 <string>F32</string>
7096 <key>Value</key>
7097 <real>500</real>
7098 </map>
7099 <key>ToolHelpRect</key>
7100 <map>
7101 <key>Comment</key>
7102 <string />
7103 <key>Persist</key>
7104 <integer>0</integer>
7105 <key>Type</key>
7106 <string>Rect</string>
7107 <key>Value</key>
7108 <array>
7109 <integer>8</integer>
7110 <integer>178</integer>
7111 <integer>75</integer>
7112 <integer>162</integer>
7113 </array>
7114 </map>
7115 <key>ToolTipDelay</key>
7116 <map>
7117 <key>Comment</key>
7118 <string>Seconds before displaying tooltip when mouse stops over UI element</string>
7119 <key>Persist</key>
7120 <integer>1</integer>
7121 <key>Type</key>
7122 <string>F32</string>
7123 <key>Value</key>
7124 <real>0.699999988079071044921875</real>
7125 </map>
7126 <key>ToolboxAutoMove</key>
7127 <map>
7128 <key>Comment</key>
7129 <string>[NOT USED]</string>
7130 <key>Persist</key>
7131 <integer>1</integer>
7132 <key>Type</key>
7133 <string>Boolean</string>
7134 <key>Value</key>
7135 <integer>0</integer>
7136 </map>
7137 <key>ToolboxRect</key>
7138 <map>
7139 <key>Comment</key>
7140 <string>Rectangle for tools window</string>
7141 <key>Persist</key>
7142 <integer>1</integer>
7143 <key>Type</key>
7144 <string>Rect</string>
7145 <key>Value</key>
7146 <array>
7147 <integer>0</integer>
7148 <integer>100</integer>
7149 <integer>100</integer>
7150 <integer>100</integer>
7151 </array>
7152 </map>
7153 <key>ToolboxShowMore</key>
7154 <map>
7155 <key>Comment</key>
7156 <string>Whether to show additional build tool controls</string>
7157 <key>Persist</key>
7158 <integer>1</integer>
7159 <key>Type</key>
7160 <string>Boolean</string>
7161 <key>Value</key>
7162 <integer>1</integer>
7163 </map>
7164 <key>TrackFocusObject</key>
7165 <map>
7166 <key>Comment</key>
7167 <string>Camera tracks last object zoomed on</string>
7168 <key>Persist</key>
7169 <integer>1</integer>
7170 <key>Type</key>
7171 <string>Boolean</string>
7172 <key>Value</key>
7173 <integer>1</integer>
7174 </map>
7175 <key>TurnLeftBtnRect</key>
7176 <map>
7177 <key>Comment</key>
7178 <string />
7179 <key>Persist</key>
7180 <integer>0</integer>
7181 <key>Type</key>
7182 <string>Rect</string>
7183 <key>Value</key>
7184 <array>
7185 <integer>20</integer>
7186 <integer>29</integer>
7187 <integer>45</integer>
7188 <integer>4</integer>
7189 </array>
7190 </map>
7191 <key>TurnRightBtnRect</key>
7192 <map>
7193 <key>Comment</key>
7194 <string />
7195 <key>Persist</key>
7196 <integer>0</integer>
7197 <key>Type</key>
7198 <string>Rect</string>
7199 <key>Value</key>
7200 <array>
7201 <integer>66</integer>
7202 <integer>29</integer>
7203 <integer>91</integer>
7204 <integer>4</integer>
7205 </array>
7206 </map>
7207 <key>TypeAheadTimeout</key>
7208 <map>
7209 <key>Comment</key>
7210 <string>Time delay before clearing type-ahead buffer in lists (seconds)</string>
7211 <key>Persist</key>
7212 <integer>1</integer>
7213 <key>Type</key>
7214 <string>F32</string>
7215 <key>Value</key>
7216 <real>1.5</real>
7217 </map>
7218 <key>UIAutoScale</key>
7219 <map>
7220 <key>Comment</key>
7221 <string>Keep UI scale consistent across different resolutions</string>
7222 <key>Persist</key>
7223 <integer>1</integer>
7224 <key>Type</key>
7225 <string>Boolean</string>
7226 <key>Value</key>
7227 <integer>1</integer>
7228 </map>
7229 <key>UIFloaterTestBool</key>
7230 <map>
7231 <key>Comment</key>
7232 <string>Example saved setting for the test floater</string>
7233 <key>Persist</key>
7234 <integer>1</integer>
7235 <key>Type</key>
7236 <string>Boolean</string>
7237 <key>Value</key>
7238 <integer>0</integer>
7239 </map>
7240 <key>UIImgBtnCloseActiveUUID</key>
7241 <map>
7242 <key>Comment</key>
7243 <string />
7244 <key>Persist</key>
7245 <integer>0</integer>
7246 <key>Type</key>
7247 <string>String</string>
7248 <key>Value</key>
7249 <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
7250 </map>
7251 <key>UIImgBtnCloseInactiveUUID</key>
7252 <map>
7253 <key>Comment</key>
7254 <string />
7255 <key>Persist</key>
7256 <integer>0</integer>
7257 <key>Type</key>
7258 <string>String</string>
7259 <key>Value</key>
7260 <string>779e4fa3-9b13-f74a-fba9-3886fe9c86ba</string>
7261 </map>
7262 <key>UIImgBtnClosePressedUUID</key>
7263 <map>
7264 <key>Comment</key>
7265 <string />
7266 <key>Persist</key>
7267 <integer>0</integer>
7268 <key>Type</key>
7269 <string>String</string>
7270 <key>Value</key>
7271 <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
7272 </map>
7273 <key>UIImgBtnForwardInUUID</key>
7274 <map>
7275 <key>Comment</key>
7276 <string />
7277 <key>Persist</key>
7278 <integer>0</integer>
7279 <key>Type</key>
7280 <string>String</string>
7281 <key>Value</key>
7282 <string>54197a61-f5d1-4c29-95d2-c071d08849cb</string>
7283 </map>
7284 <key>UIImgBtnForwardOutUUID</key>
7285 <map>
7286 <key>Comment</key>
7287 <string />
7288 <key>Persist</key>
7289 <integer>0</integer>
7290 <key>Type</key>
7291 <string>String</string>
7292 <key>Value</key>
7293 <string>a0eb4021-1b20-4a53-892d-8faa9265a6f5</string>
7294 </map>
7295 <key>UIImgBtnJumpLeftInUUID</key>
7296 <map>
7297 <key>Comment</key>
7298 <string />
7299 <key>Persist</key>
7300 <integer>0</integer>
7301 <key>Type</key>
7302 <string>String</string>
7303 <key>Value</key>
7304 <string>9cad3e6d-2d6d-107d-f8ab-5ba272b5bfe1</string>
7305 </map>
7306 <key>UIImgBtnJumpLeftOutUUID</key>
7307 <map>
7308 <key>Comment</key>
7309 <string />
7310 <key>Persist</key>
7311 <integer>0</integer>
7312 <key>Type</key>
7313 <string>String</string>
7314 <key>Value</key>
7315 <string>3c18c87e-5f50-14e2-e744-f44734aa365f</string>
7316 </map>
7317 <key>UIImgBtnJumpRightInUUID</key>
7318 <map>
7319 <key>Comment</key>
7320 <string />
7321 <key>Persist</key>
7322 <integer>0</integer>
7323 <key>Type</key>
7324 <string>String</string>
7325 <key>Value</key>
7326 <string>7dabc040-ec13-2309-ddf7-4f161f6de2f4</string>
7327 </map>
7328 <key>UIImgBtnJumpRightOutUUID</key>
7329 <map>
7330 <key>Comment</key>
7331 <string />
7332 <key>Persist</key>
7333 <integer>0</integer>
7334 <key>Type</key>
7335 <string>String</string>
7336 <key>Value</key>
7337 <string>ff9a71eb-7414-4cf8-866e-a701deb7c3cf</string>
7338 </map>
7339 <key>UIImgBtnLeftInUUID</key>
7340 <map>
7341 <key>Comment</key>
7342 <string />
7343 <key>Persist</key>
7344 <integer>0</integer>
7345 <key>Type</key>
7346 <string>String</string>
7347 <key>Value</key>
7348 <string>95463c78-aaa6-464d-892d-3a805b6bb7bf</string>
7349 </map>
7350 <key>UIImgBtnLeftOutUUID</key>
7351 <map>
7352 <key>Comment</key>
7353 <string />
7354 <key>Persist</key>
7355 <integer>0</integer>
7356 <key>Type</key>
7357 <string>String</string>
7358 <key>Value</key>
7359 <string>13a93910-6b44-45eb-ad3a-4d1324c59bac</string>
7360 </map>
7361 <key>UIImgBtnMinimizeActiveUUID</key>
7362 <map>
7363 <key>Comment</key>
7364 <string />
7365 <key>Persist</key>
7366 <integer>0</integer>
7367 <key>Type</key>
7368 <string>String</string>
7369 <key>Value</key>
7370 <string>34c9398d-bb78-4643-9633-46a2fa3e9637</string>
7371 </map>
7372 <key>UIImgBtnMinimizeInactiveUUID</key>
7373 <map>
7374 <key>Comment</key>
7375 <string />
7376 <key>Persist</key>
7377 <integer>0</integer>
7378 <key>Type</key>
7379 <string>String</string>
7380 <key>Value</key>
7381 <string>6e72abba-1378-437f-bf7a-f0c15f3e99a3</string>
7382 </map>
7383 <key>UIImgBtnMinimizePressedUUID</key>
7384 <map>
7385 <key>Comment</key>
7386 <string />
7387 <key>Persist</key>
7388 <integer>0</integer>
7389 <key>Type</key>
7390 <string>String</string>
7391 <key>Value</key>
7392 <string>39801651-26cb-4926-af57-7af9352c273c</string>
7393 </map>
7394 <key>UIImgBtnMoveDownInUUID</key>
7395 <map>
7396 <key>Comment</key>
7397 <string />
7398 <key>Persist</key>
7399 <integer>0</integer>
7400 <key>Type</key>
7401 <string>String</string>
7402 <key>Value</key>
7403 <string>b92a70b9-c841-4c94-b4b3-cee9eb460d48</string>
7404 </map>
7405 <key>UIImgBtnMoveDownOutUUID</key>
7406 <map>
7407 <key>Comment</key>
7408 <string />
7409 <key>Persist</key>
7410 <integer>0</integer>
7411 <key>Type</key>
7412 <string>String</string>
7413 <key>Value</key>
7414 <string>b5abc9fa-9e62-4e03-bc33-82c4c1b6b689</string>
7415 </map>
7416 <key>UIImgBtnMoveUpInUUID</key>
7417 <map>
7418 <key>Comment</key>
7419 <string />
7420 <key>Persist</key>
7421 <integer>0</integer>
7422 <key>Type</key>
7423 <string>String</string>
7424 <key>Value</key>
7425 <string>49b4b357-e430-4b56-b9e0-05b8759c3c82</string>
7426 </map>
7427 <key>UIImgBtnMoveUpOutUUID</key>
7428 <map>
7429 <key>Comment</key>
7430 <string />
7431 <key>Persist</key>
7432 <integer>0</integer>
7433 <key>Type</key>
7434 <string>String</string>
7435 <key>Value</key>
7436 <string>f887146d-829f-4e39-9211-cf872b78f97c</string>
7437 </map>
7438 <key>UIImgBtnPanDownInUUID</key>
7439 <map>
7440 <key>Comment</key>
7441 <string />
7442 <key>Persist</key>
7443 <integer>0</integer>
7444 <key>Type</key>
7445 <string>String</string>
7446 <key>Value</key>
7447 <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
7448 </map>
7449 <key>UIImgBtnPanDownOutUUID</key>
7450 <map>
7451 <key>Comment</key>
7452 <string />
7453 <key>Persist</key>
7454 <integer>0</integer>
7455 <key>Type</key>
7456 <string>String</string>
7457 <key>Value</key>
7458 <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
7459 </map>
7460 <key>UIImgBtnPanLeftInUUID</key>
7461 <map>
7462 <key>Comment</key>
7463 <string />
7464 <key>Persist</key>
7465 <integer>0</integer>
7466 <key>Type</key>
7467 <string>String</string>
7468 <key>Value</key>
7469 <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
7470 </map>
7471 <key>UIImgBtnPanLeftOutUUID</key>
7472 <map>
7473 <key>Comment</key>
7474 <string />
7475 <key>Persist</key>
7476 <integer>0</integer>
7477 <key>Type</key>
7478 <string>String</string>
7479 <key>Value</key>
7480 <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
7481 </map>
7482 <key>UIImgBtnPanRightInUUID</key>
7483 <map>
7484 <key>Comment</key>
7485 <string />
7486 <key>Persist</key>
7487 <integer>0</integer>
7488 <key>Type</key>
7489 <string>String</string>
7490 <key>Value</key>
7491 <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
7492 </map>
7493 <key>UIImgBtnPanRightOutUUID</key>
7494 <map>
7495 <key>Comment</key>
7496 <string />
7497 <key>Persist</key>
7498 <integer>0</integer>
7499 <key>Type</key>
7500 <string>String</string>
7501 <key>Value</key>
7502 <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
7503 </map>
7504 <key>UIImgBtnPanUpInUUID</key>
7505 <map>
7506 <key>Comment</key>
7507 <string />
7508 <key>Persist</key>
7509 <integer>0</integer>
7510 <key>Type</key>
7511 <string>String</string>
7512 <key>Value</key>
7513 <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
7514 </map>
7515 <key>UIImgBtnPanUpOutUUID</key>
7516 <map>
7517 <key>Comment</key>
7518 <string />
7519 <key>Persist</key>
7520 <integer>0</integer>
7521 <key>Type</key>
7522 <string>String</string>
7523 <key>Value</key>
7524 <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
7525 </map>
7526 <key>UIImgBtnRestoreActiveUUID</key>
7527 <map>
7528 <key>Comment</key>
7529 <string />
7530 <key>Persist</key>
7531 <integer>0</integer>
7532 <key>Type</key>
7533 <string>String</string>
7534 <key>Value</key>
7535 <string>111b39de-8928-4690-b7b2-e17d5c960277</string>
7536 </map>
7537 <key>UIImgBtnRestoreInactiveUUID</key>
7538 <map>
7539 <key>Comment</key>
7540 <string />
7541 <key>Persist</key>
7542 <integer>0</integer>
7543 <key>Type</key>
7544 <string>String</string>
7545 <key>Value</key>
7546 <string>0eafa471-70af-4882-b8c1-40a310929744</string>
7547 </map>
7548 <key>UIImgBtnRestorePressedUUID</key>
7549 <map>
7550 <key>Comment</key>
7551 <string />
7552 <key>Persist</key>
7553 <integer>0</integer>
7554 <key>Type</key>
7555 <string>String</string>
7556 <key>Value</key>
7557 <string>90a0ed5c-2e7b-4845-9958-a64a1b30f312</string>
7558 </map>
7559 <key>UIImgBtnRightInUUID</key>
7560 <map>
7561 <key>Comment</key>
7562 <string />
7563 <key>Persist</key>
7564 <integer>0</integer>
7565 <key>Type</key>
7566 <string>String</string>
7567 <key>Value</key>
7568 <string>5e616d0d-4335-476f-9977-560bccd009da</string>
7569 </map>
7570 <key>UIImgBtnRightOutUUID</key>
7571 <map>
7572 <key>Comment</key>
7573 <string />
7574 <key>Persist</key>
7575 <integer>0</integer>
7576 <key>Type</key>
7577 <string>String</string>
7578 <key>Value</key>
7579 <string>5a44fd04-f52b-4c30-8b00-4a31e27614bd</string>
7580 </map>
7581 <key>UIImgBtnScrollDownInUUID</key>
7582 <map>
7583 <key>Comment</key>
7584 <string />
7585 <key>Persist</key>
7586 <integer>0</integer>
7587 <key>Type</key>
7588 <string>String</string>
7589 <key>Value</key>
7590 <string>d2421bab-2eaf-4863-b8f6-5e4c52519247</string>
7591 </map>
7592 <key>UIImgBtnScrollDownOutUUID</key>
7593 <map>
7594 <key>Comment</key>
7595 <string />
7596 <key>Persist</key>
7597 <integer>0</integer>
7598 <key>Type</key>
7599 <string>String</string>
7600 <key>Value</key>
7601 <string>b4ecdecf-5c8d-44e7-b882-17a77e88ed55</string>
7602 </map>
7603 <key>UIImgBtnScrollLeftInUUID</key>
7604 <map>
7605 <key>Comment</key>
7606 <string />
7607 <key>Persist</key>
7608 <integer>0</integer>
7609 <key>Type</key>
7610 <string>String</string>
7611 <key>Value</key>
7612 <string>ea137a32-6718-4d05-9c22-7d570d27b2cd</string>
7613 </map>
7614 <key>UIImgBtnScrollLeftOutUUID</key>
7615 <map>
7616 <key>Comment</key>
7617 <string />
7618 <key>Persist</key>
7619 <integer>0</integer>
7620 <key>Type</key>
7621 <string>String</string>
7622 <key>Value</key>
7623 <string>43773e8d-49aa-48e0-80f3-a04715f4677a</string>
7624 </map>
7625 <key>UIImgBtnScrollRightInUUID</key>
7626 <map>
7627 <key>Comment</key>
7628 <string />
7629 <key>Persist</key>
7630 <integer>0</integer>
7631 <key>Type</key>
7632 <string>String</string>
7633 <key>Value</key>
7634 <string>b749de64-e903-4c3c-ac0b-25fb6fa39cb5</string>
7635 </map>
7636 <key>UIImgBtnScrollRightOutUUID</key>
7637 <map>
7638 <key>Comment</key>
7639 <string />
7640 <key>Persist</key>
7641 <integer>0</integer>
7642 <key>Type</key>
7643 <string>String</string>
7644 <key>Value</key>
7645 <string>3d700d19-e708-465d-87f2-46c8c0ee7938</string>
7646 </map>
7647 <key>UIImgBtnScrollUpInUUID</key>
7648 <map>
7649 <key>Comment</key>
7650 <string />
7651 <key>Persist</key>
7652 <integer>0</integer>
7653 <key>Type</key>
7654 <string>String</string>
7655 <key>Value</key>
7656 <string>a93abdf3-27b5-4e22-a8fa-c48216cd2e3a</string>
7657 </map>
7658 <key>UIImgBtnScrollUpOutUUID</key>
7659 <map>
7660 <key>Comment</key>
7661 <string />
7662 <key>Persist</key>
7663 <integer>0</integer>
7664 <key>Type</key>
7665 <string>String</string>
7666 <key>Value</key>
7667 <string>dad084d7-9a46-452a-b0ff-4b9f1cefdde9</string>
7668 </map>
7669 <key>UIImgBtnSlideLeftInUUID</key>
7670 <map>
7671 <key>Comment</key>
7672 <string />
7673 <key>Persist</key>
7674 <integer>0</integer>
7675 <key>Type</key>
7676 <string>String</string>
7677 <key>Value</key>
7678 <string>724996f5-b956-46f6-9844-4fcfce1d5e83</string>
7679 </map>
7680 <key>UIImgBtnSlideLeftOutUUID</key>
7681 <map>
7682 <key>Comment</key>
7683 <string />
7684 <key>Persist</key>
7685 <integer>0</integer>
7686 <key>Type</key>
7687 <string>String</string>
7688 <key>Value</key>
7689 <string>82476321-0374-4c26-9567-521535ab4cd7</string>
7690 </map>
7691 <key>UIImgBtnSlideRightInUUID</key>
7692 <map>
7693 <key>Comment</key>
7694 <string />
7695 <key>Persist</key>
7696 <integer>0</integer>
7697 <key>Type</key>
7698 <string>String</string>
7699 <key>Value</key>
7700 <string>7eeb57d2-3f37-454d-a729-8b217b8be443</string>
7701 </map>
7702 <key>UIImgBtnSlideRightOutUUID</key>
7703 <map>
7704 <key>Comment</key>
7705 <string />
7706 <key>Persist</key>
7707 <integer>0</integer>
7708 <key>Type</key>
7709 <string>String</string>
7710 <key>Value</key>
7711 <string>1fbe4e60-0607-44d1-a50a-032eff56ae75</string>
7712 </map>
7713 <key>UIImgBtnSpinDownInUUID</key>
7714 <map>
7715 <key>Comment</key>
7716 <string />
7717 <key>Persist</key>
7718 <integer>0</integer>
7719 <key>Type</key>
7720 <string>String</string>
7721 <key>Value</key>
7722 <string>a985ac71-052f-48e6-9c33-d931c813ac92</string>
7723 </map>
7724 <key>UIImgBtnSpinDownOutUUID</key>
7725 <map>
7726 <key>Comment</key>
7727 <string />
7728 <key>Persist</key>
7729 <integer>0</integer>
7730 <key>Type</key>
7731 <string>String</string>
7732 <key>Value</key>
7733 <string>b6d240dd-5602-426f-b606-bbb49a30726d</string>
7734 </map>
7735 <key>UIImgBtnSpinUpInUUID</key>
7736 <map>
7737 <key>Comment</key>
7738 <string />
7739 <key>Persist</key>
7740 <integer>0</integer>
7741 <key>Type</key>
7742 <string>String</string>
7743 <key>Value</key>
7744 <string>c8450082-96a0-4319-8090-d3ff900b4954</string>
7745 </map>
7746 <key>UIImgBtnSpinUpOutUUID</key>
7747 <map>
7748 <key>Comment</key>
7749 <string />
7750 <key>Persist</key>
7751 <integer>0</integer>
7752 <key>Type</key>
7753 <string>String</string>
7754 <key>Value</key>
7755 <string>56576e6e-6710-4e66-89f9-471b59122794</string>
7756 </map>
7757 <key>UIImgBtnTabBottomInUUID</key>
7758 <map>
7759 <key>Comment</key>
7760 <string />
7761 <key>Persist</key>
7762 <integer>0</integer>
7763 <key>Type</key>
7764 <string>String</string>
7765 <key>Value</key>
7766 <string>c001d8fd-a869-4b6f-86a1-fdcb106df9c7</string>
7767 </map>
7768 <key>UIImgBtnTabBottomOutUUID</key>
7769 <map>
7770 <key>Comment</key>
7771 <string />
7772 <key>Persist</key>
7773 <integer>0</integer>
7774 <key>Type</key>
7775 <string>String</string>
7776 <key>Value</key>
7777 <string>bf0a8779-689b-48c3-bb9a-6af546366ef4</string>
7778 </map>
7779 <key>UIImgBtnTabBottomPartialInUUID</key>
7780 <map>
7781 <key>Comment</key>
7782 <string />
7783 <key>Persist</key>
7784 <integer>0</integer>
7785 <key>Type</key>
7786 <string>String</string>
7787 <key>Value</key>
7788 <string>eb0b0904-8c91-4f24-b500-1180b91140de</string>
7789 </map>
7790 <key>UIImgBtnTabBottomPartialOutUUID</key>
7791 <map>
7792 <key>Comment</key>
7793 <string />
7794 <key>Persist</key>
7795 <integer>0</integer>
7796 <key>Type</key>
7797 <string>String</string>
7798 <key>Value</key>
7799 <string>8dca716c-b29c-403a-9886-91c028357d6e</string>
7800 </map>
7801 <key>UIImgBtnTabTopInUUID</key>
7802 <map>
7803 <key>Comment</key>
7804 <string />
7805 <key>Persist</key>
7806 <integer>0</integer>
7807 <key>Type</key>
7808 <string>String</string>
7809 <key>Value</key>
7810 <string>16d032e8-817b-4368-8a4e-b7b947ae3889</string>
7811 </map>
7812 <key>UIImgBtnTabTopOutUUID</key>
7813 <map>
7814 <key>Comment</key>
7815 <string />
7816 <key>Persist</key>
7817 <integer>0</integer>
7818 <key>Type</key>
7819 <string>String</string>
7820 <key>Value</key>
7821 <string>1ed83f57-41cf-4052-a3b4-2e8bb78d8191</string>
7822 </map>
7823 <key>UIImgBtnTabTopPartialInUUID</key>
7824 <map>
7825 <key>Comment</key>
7826 <string />
7827 <key>Persist</key>
7828 <integer>0</integer>
7829 <key>Type</key>
7830 <string>String</string>
7831 <key>Value</key>
7832 <string>7c6c6c26-0e25-4438-89bd-30d8b8e9d704</string>
7833 </map>
7834 <key>UIImgBtnTabTopPartialOutUUID</key>
7835 <map>
7836 <key>Comment</key>
7837 <string />
7838 <key>Persist</key>
7839 <integer>0</integer>
7840 <key>Type</key>
7841 <string>String</string>
7842 <key>Value</key>
7843 <string>932ad585-0e45-4a57-aa23-4cf81beeb7b0</string>
7844 </map>
7845 <key>UIImgBtnTearOffActiveUUID</key>
7846 <map>
7847 <key>Comment</key>
7848 <string />
7849 <key>Persist</key>
7850 <integer>0</integer>
7851 <key>Type</key>
7852 <string>String</string>
7853 <key>Value</key>
7854 <string>74e1a96f-4833-a24d-a1bb-1bce1468b0e7</string>
7855 </map>
7856 <key>UIImgBtnTearOffInactiveUUID</key>
7857 <map>
7858 <key>Comment</key>
7859 <string />
7860 <key>Persist</key>
7861 <integer>0</integer>
7862 <key>Type</key>
7863 <string>String</string>
7864 <key>Value</key>
7865 <string>74e1a96f-4833-a24d-a1bb-1bce1468b0e7</string>
7866 </map>
7867 <key>UIImgBtnTearOffPressedUUID</key>
7868 <map>
7869 <key>Comment</key>
7870 <string />
7871 <key>Persist</key>
7872 <integer>0</integer>
7873 <key>Type</key>
7874 <string>String</string>
7875 <key>Value</key>
7876 <string>d2524c13-4ba6-af7c-e305-8ac6cc18d86a</string>
7877 </map>
7878 <key>UIImgCheckboxActiveSelectedUUID</key>
7879 <map>
7880 <key>Comment</key>
7881 <string />
7882 <key>Persist</key>
7883 <integer>0</integer>
7884 <key>Type</key>
7885 <string>String</string>
7886 <key>Value</key>
7887 <string>cf4a2ed7-1533-4686-9dde-df9a37ddca55</string>
7888 </map>
7889 <key>UIImgCheckboxActiveUUID</key>
7890 <map>
7891 <key>Comment</key>
7892 <string />
7893 <key>Persist</key>
7894 <integer>0</integer>
7895 <key>Type</key>
7896 <string>String</string>
7897 <key>Value</key>
7898 <string>05bb64ee-96fd-4243-b74e-f40a41bc53ba</string>
7899 </map>
7900 <key>UIImgCheckboxInactiveSelectedUUID</key>
7901 <map>
7902 <key>Comment</key>
7903 <string />
7904 <key>Persist</key>
7905 <integer>0</integer>
7906 <key>Type</key>
7907 <string>String</string>
7908 <key>Value</key>
7909 <string>c817c642-9abd-4236-9287-ae0513fe7d2b</string>
7910 </map>
7911 <key>UIImgCheckboxInactiveUUID</key>
7912 <map>
7913 <key>Comment</key>
7914 <string />
7915 <key>Persist</key>
7916 <integer>0</integer>
7917 <key>Type</key>
7918 <string>String</string>
7919 <key>Value</key>
7920 <string>7d94cb59-32a2-49bf-a516-9e5a2045f9d9</string>
7921 </map>
7922 <key>UIImgCreateSelectedUUID</key>
7923 <map>
7924 <key>Comment</key>
7925 <string />
7926 <key>Persist</key>
7927 <integer>0</integer>
7928 <key>Type</key>
7929 <string>String</string>
7930 <key>Value</key>
7931 <string>0098b015-3daf-4cfe-a72f-915369ea97c2</string>
7932 </map>
7933 <key>UIImgCreateUUID</key>
7934 <map>
7935 <key>Comment</key>
7936 <string />
7937 <key>Persist</key>
7938 <integer>0</integer>
7939 <key>Type</key>
7940 <string>String</string>
7941 <key>Value</key>
7942 <string>7a0b1bdb-b5d9-4df5-bac2-ba230da93b5b</string>
7943 </map>
7944 <key>UIImgCrosshairsUUID</key>
7945 <map>
7946 <key>Comment</key>
7947 <string>Image to use for crosshair display (UUID texture reference)</string>
7948 <key>Persist</key>
7949 <integer>1</integer>
7950 <key>Type</key>
7951 <string>String</string>
7952 <key>Value</key>
7953 <string>6e1a3980-bf2d-4274-8970-91e60d85fb52</string>
7954 </map>
7955 <key>UIImgDefaultEyesUUID</key>
7956 <map>
7957 <key>Comment</key>
7958 <string />
7959 <key>Persist</key>
7960 <integer>0</integer>
7961 <key>Type</key>
7962 <string>String</string>
7963 <key>Value</key>
7964 <string>6522e74d-1660-4e7f-b601-6f48c1659a77</string>
7965 </map>
7966 <key>UIImgDefaultGlovesUUID</key>
7967 <map>
7968 <key>Comment</key>
7969 <string />
7970 <key>Persist</key>
7971 <integer>0</integer>
7972 <key>Type</key>
7973 <string>String</string>
7974 <key>Value</key>
7975 <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
7976 </map>
7977 <key>UIImgDefaultHairUUID</key>
7978 <map>
7979 <key>Comment</key>
7980 <string />
7981 <key>Persist</key>
7982 <integer>0</integer>
7983 <key>Type</key>
7984 <string>String</string>
7985 <key>Value</key>
7986 <string>7ca39b4c-bd19-4699-aff7-f93fd03d3e7b</string>
7987 </map>
7988 <key>UIImgDefaultJacketUUID</key>
7989 <map>
7990 <key>Comment</key>
7991 <string />
7992 <key>Persist</key>
7993 <integer>0</integer>
7994 <key>Type</key>
7995 <string>String</string>
7996 <key>Value</key>
7997 <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
7998 </map>
7999 <key>UIImgDefaultPantsUUID</key>
8000 <map>
8001 <key>Comment</key>
8002 <string />
8003 <key>Persist</key>
8004 <integer>0</integer>
8005 <key>Type</key>
8006 <string>String</string>
8007 <key>Value</key>
8008 <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
8009 </map>
8010 <key>UIImgDefaultShirtUUID</key>
8011 <map>
8012 <key>Comment</key>
8013 <string />
8014 <key>Persist</key>
8015 <integer>0</integer>
8016 <key>Type</key>
8017 <string>String</string>
8018 <key>Value</key>
8019 <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
8020 </map>
8021 <key>UIImgDefaultShoesUUID</key>
8022 <map>
8023 <key>Comment</key>
8024 <string />
8025 <key>Persist</key>
8026 <integer>0</integer>
8027 <key>Type</key>
8028 <string>String</string>
8029 <key>Value</key>
8030 <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
8031 </map>
8032 <key>UIImgDefaultSkirtUUID</key>
8033 <map>
8034 <key>Comment</key>
8035 <string />
8036 <key>Persist</key>
8037 <integer>0</integer>
8038 <key>Type</key>
8039 <string>String</string>
8040 <key>Value</key>
8041 <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
8042 </map>
8043 <key>UIImgDefaultSocksUUID</key>
8044 <map>
8045 <key>Comment</key>
8046 <string />
8047 <key>Persist</key>
8048 <integer>0</integer>
8049 <key>Type</key>
8050 <string>String</string>
8051 <key>Value</key>
8052 <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
8053 </map>
8054 <key>UIImgDefaultUnderwearUUID</key>
8055 <map>
8056 <key>Comment</key>
8057 <string />
8058 <key>Persist</key>
8059 <integer>0</integer>
8060 <key>Type</key>
8061 <string>String</string>
8062 <key>Value</key>
8063 <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
8064 </map>
8065 <key>UIImgDirectionArrowUUID</key>
8066 <map>
8067 <key>Comment</key>
8068 <string />
8069 <key>Persist</key>
8070 <integer>0</integer>
8071 <key>Type</key>
8072 <string>String</string>
8073 <key>Value</key>
8074 <string>586383e8-4d9b-4fba-9196-2b5938e79c2c</string>
8075 </map>
8076 <key>UIImgFaceSelectedUUID</key>
8077 <map>
8078 <key>Comment</key>
8079 <string />
8080 <key>Persist</key>
8081 <integer>0</integer>
8082 <key>Type</key>
8083 <string>String</string>
8084 <key>Value</key>
8085 <string>b4870163-6208-42a9-9801-93133bf9a6cd</string>
8086 </map>
8087 <key>UIImgFaceUUID</key>
8088 <map>
8089 <key>Comment</key>
8090 <string />
8091 <key>Persist</key>
8092 <integer>0</integer>
8093 <key>Type</key>
8094 <string>String</string>
8095 <key>Value</key>
8096 <string>ce15fd63-b0b6-463c-a37d-ea6393208b3e</string>
8097 </map>
8098 <key>UIImgFocusSelectedUUID</key>
8099 <map>
8100 <key>Comment</key>
8101 <string />
8102 <key>Persist</key>
8103 <integer>0</integer>
8104 <key>Type</key>
8105 <string>String</string>
8106 <key>Value</key>
8107 <string>ab6a730e-ddfd-4982-9a32-c6de3de6d31d</string>
8108 </map>
8109 <key>UIImgFocusUUID</key>
8110 <map>
8111 <key>Comment</key>
8112 <string />
8113 <key>Persist</key>
8114 <integer>0</integer>
8115 <key>Type</key>
8116 <string>String</string>
8117 <key>Value</key>
8118 <string>57bc39d1-288c-4519-aea6-6d1786a5c274</string>
8119 </map>
8120 <key>UIImgGrabSelectedUUID</key>
8121 <map>
8122 <key>Comment</key>
8123 <string />
8124 <key>Persist</key>
8125 <integer>0</integer>
8126 <key>Type</key>
8127 <string>String</string>
8128 <key>Value</key>
8129 <string>c1e21504-f136-451d-b8e9-929037812f1d</string>
8130 </map>
8131 <key>UIImgGrabUUID</key>
8132 <map>
8133 <key>Comment</key>
8134 <string />
8135 <key>Persist</key>
8136 <integer>0</integer>
8137 <key>Type</key>
8138 <string>String</string>
8139 <key>Value</key>
8140 <string>c63f124c-6340-4fbf-b59e-0869a44adb64</string>
8141 </map>
8142 <key>UIImgMoveSelectedUUID</key>
8143 <map>
8144 <key>Comment</key>
8145 <string />
8146 <key>Persist</key>
8147 <integer>0</integer>
8148 <key>Type</key>
8149 <string>String</string>
8150 <key>Value</key>
8151 <string>46f17c7b-8381-48c3-b628-6a406e060dd6</string>
8152 </map>
8153 <key>UIImgMoveUUID</key>
8154 <map>
8155 <key>Comment</key>
8156 <string />
8157 <key>Persist</key>
8158 <integer>0</integer>
8159 <key>Type</key>
8160 <string>String</string>
8161 <key>Value</key>
8162 <string>2fa5dc06-bcdd-4e09-a426-f9f262d4fa65</string>
8163 </map>
8164 <key>UIImgRadioActiveSelectedUUID</key>
8165 <map>
8166 <key>Comment</key>
8167 <string />
8168 <key>Persist</key>
8169 <integer>0</integer>
8170 <key>Type</key>
8171 <string>String</string>
8172 <key>Value</key>
8173 <string>52f09e07-5816-4052-953c-94c6c10479b7</string>
8174 </map>
8175 <key>UIImgRadioActiveUUID</key>
8176 <map>
8177 <key>Comment</key>
8178 <string />
8179 <key>Persist</key>
8180 <integer>0</integer>
8181 <key>Type</key>
8182 <string>String</string>
8183 <key>Value</key>
8184 <string>7a1ba9b8-1047-4d1e-9cfc-bc478c80b63f</string>
8185 </map>
8186 <key>UIImgRadioInactiveSelectedUUID</key>
8187 <map>
8188 <key>Comment</key>
8189 <string />
8190 <key>Persist</key>
8191 <integer>0</integer>
8192 <key>Type</key>
8193 <string>String</string>
8194 <key>Value</key>
8195 <string>1975db39-aa29-4251-aea0-409ac09d414d</string>
8196 </map>
8197 <key>UIImgRadioInactiveUUID</key>
8198 <map>
8199 <key>Comment</key>
8200 <string />
8201 <key>Persist</key>
8202 <integer>0</integer>
8203 <key>Type</key>
8204 <string>String</string>
8205 <key>Value</key>
8206 <string>90688481-67ff-4af0-be69-4aa084bcad1e</string>
8207 </map>
8208 <key>UIImgResizeBottomRightUUID</key>
8209 <map>
8210 <key>Comment</key>
8211 <string />
8212 <key>Persist</key>
8213 <integer>0</integer>
8214 <key>Type</key>
8215 <string>String</string>
8216 <key>Value</key>
8217 <string>e3690e25-9690-4f6c-a745-e7dcd885285a</string>
8218 </map>
8219 <key>UIImgRotateSelectedUUID</key>
8220 <map>
8221 <key>Comment</key>
8222 <string />
8223 <key>Persist</key>
8224 <integer>0</integer>
8225 <key>Type</key>
8226 <string>String</string>
8227 <key>Value</key>
8228 <string>cdfb7fde-0d13-418a-9d89-2bd91019fc95</string>
8229 </map>
8230 <key>UIImgRotateUUID</key>
8231 <map>
8232 <key>Comment</key>
8233 <string />
8234 <key>Persist</key>
8235 <integer>0</integer>
8236 <key>Type</key>
8237 <string>String</string>
8238 <key>Value</key>
8239 <string>c34b1eaa-aae3-4351-b082-e26c0b636779</string>
8240 </map>
8241 <key>UIImgScaleSelectedUUID</key>
8242 <map>
8243 <key>Comment</key>
8244 <string />
8245 <key>Persist</key>
8246 <integer>0</integer>
8247 <key>Type</key>
8248 <string>String</string>
8249 <key>Value</key>
8250 <string>55aa57ef-508a-47f7-8867-85d21c5a810d</string>
8251 </map>
8252 <key>UIImgScaleUUID</key>
8253 <map>
8254 <key>Comment</key>
8255 <string />
8256 <key>Persist</key>
8257 <integer>0</integer>
8258 <key>Type</key>
8259 <string>String</string>
8260 <key>Value</key>
8261 <string>88a90fef-b448-4883-9344-ecf378a60433</string>
8262 </map>
8263 <key>UIImgWhiteUUID</key>
8264 <map>
8265 <key>Comment</key>
8266 <string />
8267 <key>Persist</key>
8268 <integer>0</integer>
8269 <key>Type</key>
8270 <string>String</string>
8271 <key>Value</key>
8272 <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
8273 </map>
8274 <key>UIScaleFactor</key>
8275 <map>
8276 <key>Comment</key>
8277 <string>Size of UI relative to default layout on 1024x768 screen</string>
8278 <key>Persist</key>
8279 <integer>1</integer>
8280 <key>Type</key>
8281 <string>F32</string>
8282 <key>Value</key>
8283 <real>1</real>
8284 </map>
8285 <key>UISndAlert</key>
8286 <map>
8287 <key>Comment</key>
8288 <string>Sound file for alerts (uuid for sound asset)</string>
8289 <key>Persist</key>
8290 <integer>1</integer>
8291 <key>Type</key>
8292 <string>String</string>
8293 <key>Value</key>
8294 <string>ed124764-705d-d497-167a-182cd9fa2e6c</string>
8295 </map>
8296 <key>UISndBadKeystroke</key>
8297 <map>
8298 <key>Comment</key>
8299 <string>Sound file for invalid keystroke (uuid for sound asset)</string>
8300 <key>Persist</key>
8301 <integer>1</integer>
8302 <key>Type</key>
8303 <string>String</string>
8304 <key>Value</key>
8305 <string>2ca849ba-2885-4bc3-90ef-d4987a5b983a</string>
8306 </map>
8307 <key>UISndClick</key>
8308 <map>
8309 <key>Comment</key>
8310 <string>Sound file for mouse click (uuid for sound asset)</string>
8311 <key>Persist</key>
8312 <integer>1</integer>
8313 <key>Type</key>
8314 <string>String</string>
8315 <key>Value</key>
8316 <string>4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6</string>
8317 </map>
8318 <key>UISndClickRelease</key>
8319 <map>
8320 <key>Comment</key>
8321 <string>Sound file for mouse button release (uuid for sound asset)</string>
8322 <key>Persist</key>
8323 <integer>1</integer>
8324 <key>Type</key>
8325 <string>String</string>
8326 <key>Value</key>
8327 <string>4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6</string>
8328 </map>
8329 <key>UISndDebugSpamToggle</key>
8330 <map>
8331 <key>Comment</key>
8332 <string>Log UI sound effects as they are played</string>
8333 <key>Persist</key>
8334 <integer>1</integer>
8335 <key>Type</key>
8336 <string>Boolean</string>
8337 <key>Value</key>
8338 <integer>0</integer>
8339 </map>
8340 <key>UISndHealthReductionF</key>
8341 <map>
8342 <key>Comment</key>
8343 <string>Sound file for female pain (uuid for sound asset)</string>
8344 <key>Persist</key>
8345 <integer>1</integer>
8346 <key>Type</key>
8347 <string>String</string>
8348 <key>Value</key>
8349 <string>219c5d93-6c09-31c5-fb3f-c5fe7495c115</string>
8350 </map>
8351 <key>UISndHealthReductionM</key>
8352 <map>
8353 <key>Comment</key>
8354 <string>Sound file for male pain (uuid for sound asset)</string>
8355 <key>Persist</key>
8356 <integer>1</integer>
8357 <key>Type</key>
8358 <string>String</string>
8359 <key>Value</key>
8360 <string>e057c244-5768-1056-c37e-1537454eeb62</string>
8361 </map>
8362 <key>UISndHealthReductionThreshold</key>
8363 <map>
8364 <key>Comment</key>
8365 <string>Amount of health reduction required to trigger &quot;pain&quot; sound</string>
8366 <key>Persist</key>
8367 <integer>1</integer>
8368 <key>Type</key>
8369 <string>F32</string>
8370 <key>Value</key>
8371 <real>10</real>
8372 </map>
8373 <key>UISndInvalidOp</key>
8374 <map>
8375 <key>Comment</key>
8376 <string>Sound file for invalid operations (uuid for sound asset)</string>
8377 <key>Persist</key>
8378 <integer>1</integer>
8379 <key>Type</key>
8380 <string>String</string>
8381 <key>Value</key>
8382 <string>4174f859-0d3d-c517-c424-72923dc21f65</string>
8383 </map>
8384 <key>UISndMoneyChangeDown</key>
8385 <map>
8386 <key>Comment</key>
8387 <string>Sound file for L$ balance increase (uuid for sound asset)</string>
8388 <key>Persist</key>
8389 <integer>1</integer>
8390 <key>Type</key>
8391 <string>String</string>
8392 <key>Value</key>
8393 <string>104974e3-dfda-428b-99ee-b0d4e748d3a3</string>
8394 </map>
8395 <key>UISndMoneyChangeThreshold</key>
8396 <map>
8397 <key>Comment</key>
8398 <string>Amount of change in L$ balance required to trigger &quot;money&quot; sound</string>
8399 <key>Persist</key>
8400 <integer>1</integer>
8401 <key>Type</key>
8402 <string>F32</string>
8403 <key>Value</key>
8404 <real>50</real>
8405 </map>
8406 <key>UISndMoneyChangeUp</key>
8407 <map>
8408 <key>Comment</key>
8409 <string>Sound file for L$ balance decrease(uuid for sound asset)</string>
8410 <key>Persist</key>
8411 <integer>1</integer>
8412 <key>Type</key>
8413 <string>String</string>
8414 <key>Value</key>
8415 <string>77a018af-098e-c037-51a6-178f05877c6f</string>
8416 </map>
8417 <key>UISndNewIncomingIMSession</key>
8418 <map>
8419 <key>Comment</key>
8420 <string>Sound file for new instant message session(uuid for sound asset)</string>
8421 <key>Persist</key>
8422 <integer>1</integer>
8423 <key>Type</key>
8424 <string>String</string>
8425 <key>Value</key>
8426 <string>67cc2844-00f3-2b3c-b991-6418d01e1bb7</string>
8427 </map>
8428 <key>UISndObjectCreate</key>
8429 <map>
8430 <key>Comment</key>
8431 <string>Sound file for object creation (uuid for sound asset)</string>
8432 <key>Persist</key>
8433 <integer>1</integer>
8434 <key>Type</key>
8435 <string>String</string>
8436 <key>Value</key>
8437 <string>f4a0660f-5446-dea2-80b7-6482a082803c</string>
8438 </map>
8439 <key>UISndObjectDelete</key>
8440 <map>
8441 <key>Comment</key>
8442 <string>Sound file for object deletion (uuid for sound asset)</string>
8443 <key>Persist</key>
8444 <integer>1</integer>
8445 <key>Type</key>
8446 <string>String</string>
8447 <key>Value</key>
8448 <string>0cb7b00a-4c10-6948-84de-a93c09af2ba9</string>
8449 </map>
8450 <key>UISndObjectRezIn</key>
8451 <map>
8452 <key>Comment</key>
8453 <string>Sound file for rezzing objects (uuid for sound asset)</string>
8454 <key>Persist</key>
8455 <integer>1</integer>
8456 <key>Type</key>
8457 <string>String</string>
8458 <key>Value</key>
8459 <string>3c8fc726-1fd6-862d-fa01-16c5b2568db6</string>
8460 </map>
8461 <key>UISndObjectRezOut</key>
8462 <map>
8463 <key>Comment</key>
8464 <string>Sound file for derezzing objects (uuid for sound asset)</string>
8465 <key>Persist</key>
8466 <integer>1</integer>
8467 <key>Type</key>
8468 <string>String</string>
8469 <key>Value</key>
8470 <string>00000000-0000-0000-0000-000000000000</string>
8471 </map>
8472 <key>UISndPieMenuAppear</key>
8473 <map>
8474 <key>Comment</key>
8475 <string>Sound file for opening pie menu (uuid for sound asset)</string>
8476 <key>Persist</key>
8477 <integer>1</integer>
8478 <key>Type</key>
8479 <string>String</string>
8480 <key>Value</key>
8481 <string>8eaed61f-92ff-6485-de83-4dcc938a478e</string>
8482 </map>
8483 <key>UISndPieMenuHide</key>
8484 <map>
8485 <key>Comment</key>
8486 <string>Sound file for closing pie menu (uuid for sound asset)</string>
8487 <key>Persist</key>
8488 <integer>1</integer>
8489 <key>Type</key>
8490 <string>String</string>
8491 <key>Value</key>
8492 <string>00000000-0000-0000-0000-000000000000</string>
8493 </map>
8494 <key>UISndPieMenuSliceHighlight0</key>
8495 <map>
8496 <key>Comment</key>
8497 <string>Sound file for selecting pie menu item 0 (uuid for sound asset)</string>
8498 <key>Persist</key>
8499 <integer>1</integer>
8500 <key>Type</key>
8501 <string>String</string>
8502 <key>Value</key>
8503 <string>d9f73cf8-17b4-6f7a-1565-7951226c305d</string>
8504 </map>
8505 <key>UISndPieMenuSliceHighlight1</key>
8506 <map>
8507 <key>Comment</key>
8508 <string>Sound file for selecting pie menu item 1 (uuid for sound asset)</string>
8509 <key>Persist</key>
8510 <integer>1</integer>
8511 <key>Type</key>
8512 <string>String</string>
8513 <key>Value</key>
8514 <string>f6ba9816-dcaf-f755-7b67-51b31b6233e5</string>
8515 </map>
8516 <key>UISndPieMenuSliceHighlight2</key>
8517 <map>
8518 <key>Comment</key>
8519 <string>Sound file for selecting pie menu item 2 (uuid for sound asset)</string>
8520 <key>Persist</key>
8521 <integer>1</integer>
8522 <key>Type</key>
8523 <string>String</string>
8524 <key>Value</key>
8525 <string>7aff2265-d05b-8b72-63c7-dbf96dc2f21f</string>
8526 </map>
8527 <key>UISndPieMenuSliceHighlight3</key>
8528 <map>
8529 <key>Comment</key>
8530 <string>Sound file for selecting pie menu item 3 (uuid for sound asset)</string>
8531 <key>Persist</key>
8532 <integer>1</integer>
8533 <key>Type</key>
8534 <string>String</string>
8535 <key>Value</key>
8536 <string>09b2184e-8601-44e2-afbb-ce37434b8ba1</string>
8537 </map>
8538 <key>UISndPieMenuSliceHighlight4</key>
8539 <map>
8540 <key>Comment</key>
8541 <string>Sound file for selecting pie menu item 4 (uuid for sound asset)</string>
8542 <key>Persist</key>
8543 <integer>1</integer>
8544 <key>Type</key>
8545 <string>String</string>
8546 <key>Value</key>
8547 <string>bbe4c7fc-7044-b05e-7b89-36924a67593c</string>
8548 </map>
8549 <key>UISndPieMenuSliceHighlight5</key>
8550 <map>
8551 <key>Comment</key>
8552 <string>Sound file for selecting pie menu item 5 (uuid for sound asset)</string>
8553 <key>Persist</key>
8554 <integer>1</integer>
8555 <key>Type</key>
8556 <string>String</string>
8557 <key>Value</key>
8558 <string>d166039b-b4f5-c2ec-4911-c85c727b016c</string>
8559 </map>
8560 <key>UISndPieMenuSliceHighlight6</key>
8561 <map>
8562 <key>Comment</key>
8563 <string>Sound file for selecting pie menu item 6 (uuid for sound asset)</string>
8564 <key>Persist</key>
8565 <integer>1</integer>
8566 <key>Type</key>
8567 <string>String</string>
8568 <key>Value</key>
8569 <string>242af82b-43c2-9a3b-e108-3b0c7e384981</string>
8570 </map>
8571 <key>UISndPieMenuSliceHighlight7</key>
8572 <map>
8573 <key>Comment</key>
8574 <string>Sound file for selecting pie menu item 7 (uuid for sound asset)</string>
8575 <key>Persist</key>
8576 <integer>1</integer>
8577 <key>Type</key>
8578 <string>String</string>
8579 <key>Value</key>
8580 <string>c1f334fb-a5be-8fe7-22b3-29631c21cf0b</string>
8581 </map>
8582 <key>UISndSnapshot</key>
8583 <map>
8584 <key>Comment</key>
8585 <string>Sound file for taking a snapshot (uuid for sound asset)</string>
8586 <key>Persist</key>
8587 <integer>1</integer>
8588 <key>Type</key>
8589 <string>String</string>
8590 <key>Value</key>
8591 <string>3d09f582-3851-c0e0-f5ba-277ac5c73fb4</string>
8592 </map>
8593 <key>UISndStartIM</key>
8594 <map>
8595 <key>Comment</key>
8596 <string>Sound file for starting a new IM session (uuid for sound asset)</string>
8597 <key>Persist</key>
8598 <integer>1</integer>
8599 <key>Type</key>
8600 <string>String</string>
8601 <key>Value</key>
8602 <string>c825dfbc-9827-7e02-6507-3713d18916c1</string>
8603 </map>
8604 <key>UISndTeleportOut</key>
8605 <map>
8606 <key>Comment</key>
8607 <string>Sound file for teleporting (uuid for sound asset)</string>
8608 <key>Persist</key>
8609 <integer>1</integer>
8610 <key>Type</key>
8611 <string>String</string>
8612 <key>Value</key>
8613 <string>d7a9a565-a013-2a69-797d-5332baa1a947</string>
8614 </map>
8615 <key>UISndTyping</key>
8616 <map>
8617 <key>Comment</key>
8618 <string>Sound file for starting to type a chat message (uuid for sound asset)</string>
8619 <key>Persist</key>
8620 <integer>1</integer>
8621 <key>Type</key>
8622 <string>String</string>
8623 <key>Value</key>
8624 <string>5e191c7b-8996-9ced-a177-b2ac32bfea06</string>
8625 </map>
8626 <key>UISndWindowClose</key>
8627 <map>
8628 <key>Comment</key>
8629 <string>Sound file for closing a window (uuid for sound asset)</string>
8630 <key>Persist</key>
8631 <integer>1</integer>
8632 <key>Type</key>
8633 <string>String</string>
8634 <key>Value</key>
8635 <string>2c346eda-b60c-ab33-1119-b8941916a499</string>
8636 </map>
8637 <key>UISndWindowOpen</key>
8638 <map>
8639 <key>Comment</key>
8640 <string>Sound file for opening a window (uuid for sound asset)</string>
8641 <key>Persist</key>
8642 <integer>1</integer>
8643 <key>Type</key>
8644 <string>String</string>
8645 <key>Value</key>
8646 <string>c80260ba-41fd-8a46-768a-6bf236360e3a</string>
8647 </map>
8648 <key>UseAltKeyForMenus</key>
8649 <map>
8650 <key>Comment</key>
8651 <string>Access menus via keyboard by tapping Alt</string>
8652 <key>Persist</key>
8653 <integer>1</integer>
8654 <key>Type</key>
8655 <string>Boolean</string>
8656 <key>Value</key>
8657 <integer>0</integer>
8658 </map>
8659 <key>UseChatBubbles</key>
8660 <map>
8661 <key>Comment</key>
8662 <string>Show chat above avatars head in chat bubbles</string>
8663 <key>Persist</key>
8664 <integer>1</integer>
8665 <key>Type</key>
8666 <string>Boolean</string>
8667 <key>Value</key>
8668 <integer>0</integer>
8669 </map>
8670 <key>UseDebugLogin</key>
8671 <map>
8672 <key>Comment</key>
8673 <string>Provides extra control over which grid to connect to</string>
8674 <key>Persist</key>
8675 <integer>1</integer>
8676 <key>Type</key>
8677 <string>Boolean</string>
8678 <key>Value</key>
8679 <integer>0</integer>
8680 </map>
8681 <key>UseDebugMenus</key>
8682 <map>
8683 <key>Comment</key>
8684 <string>Turns on &quot;Debug&quot; menu</string>
8685 <key>Persist</key>
8686 <integer>1</integer>
8687 <key>Type</key>
8688 <string>Boolean</string>
8689 <key>Value</key>
8690 <integer>0</integer>
8691 </map>
8692 <key>UseDefaultColorPicker</key>
8693 <map>
8694 <key>Comment</key>
8695 <string>Use color picker supplied by operating system</string>
8696 <key>Persist</key>
8697 <integer>1</integer>
8698 <key>Type</key>
8699 <string>Boolean</string>
8700 <key>Value</key>
8701 <integer>0</integer>
8702 </map>
8703 <key>UseEnergy</key>
8704 <map>
8705 <key>Comment</key>
8706 <string />
8707 <key>Persist</key>
8708 <integer>0</integer>
8709 <key>Type</key>
8710 <string>Boolean</string>
8711 <key>Value</key>
8712 <integer>1</integer>
8713 </map>
8714 <key>UseExternalBrowser</key>
8715 <map>
8716 <key>Comment</key>
8717 <string>Use default browser when opening web pages instead of in-world browser.</string>
8718 <key>Persist</key>
8719 <integer>1</integer>
8720 <key>Type</key>
8721 <string>Boolean</string>
8722 <key>Value</key>
8723 <integer>0</integer>
8724 </map>
8725 <key>UseFreezeFrame</key>
8726 <map>
8727 <key>Comment</key>
8728 <string>Freeze time when taking snapshots.</string>
8729 <key>Persist</key>
8730 <integer>1</integer>
8731 <key>Type</key>
8732 <string>Boolean</string>
8733 <key>Value</key>
8734 <integer>0</integer>
8735 </map>
8736 <key>UseOcclusion</key>
8737 <map>
8738 <key>Comment</key>
8739 <string>Enable object culling based on occlusion (coverage) by other objects</string>
8740 <key>Persist</key>
8741 <integer>1</integer>
8742 <key>Type</key>
8743 <string>Boolean</string>
8744 <key>Value</key>
8745 <integer>1</integer>
8746 </map>
8747 <key>UseWebPagesOnPrims</key>
8748 <map>
8749 <key>Comment</key>
8750 <string>[NOT USED]</string>
8751 <key>Persist</key>
8752 <integer>1</integer>
8753 <key>Type</key>
8754 <string>Boolean</string>
8755 <key>Value</key>
8756 <integer>0</integer>
8757 </map>
8758 <key>UserConnectionPort</key>
8759 <map>
8760 <key>Comment</key>
8761 <string>Port that this client transmits on.</string>
8762 <key>Persist</key>
8763 <integer>1</integer>
8764 <key>Type</key>
8765 <string>U32</string>
8766 <key>Value</key>
8767 <integer>0</integer>
8768 </map>
8769 <key>UserLogFile</key>
8770 <map>
8771 <key>Comment</key>
8772 <string>User specified log file name.</string>
8773 <key>Persist</key>
8774 <integer>1</integer>
8775 <key>Type</key>
8776 <string>String</string>
8777 <key>Value</key>
8778 <string />
8779 </map>
8780 <key>UserLoginInfo</key>
8781 <map>
8782 <key>Comment</key>
8783 <string>Users loging data.</string>
8784 <key>Persist</key>
8785 <integer>1</integer>
8786 <key>Type</key>
8787 <string>LLSD</string>
8788 <key>Value</key>
8789 <map />
8790 </map>
8791 <key>UseStartScreen</key>
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>
8803 <map>
8804 <key>Comment</key>
8805 <string>[DO NOT MODIFY] Controls resizing of local file cache</string>
8806 <key>Persist</key>
8807 <integer>1</integer>
8808 <key>Type</key>
8809 <string>U32</string>
8810 <key>Value</key>
8811 <integer>0</integer>
8812 </map>
8813 <key>VFSSalt</key>
8814 <map>
8815 <key>Comment</key>
8816 <string>[DO NOT MODIFY] Controls local file caching behavior</string>
8817 <key>Persist</key>
8818 <integer>1</integer>
8819 <key>Type</key>
8820 <string>U32</string>
8821 <key>Value</key>
8822 <integer>1</integer>
8823 </map>
8824 <key>VectorizeEnable</key>
8825 <map>
8826 <key>Comment</key>
8827 <string>Enable general vector operations and data alignment.</string>
8828 <key>Persist</key>
8829 <integer>1</integer>
8830 <key>Type</key>
8831 <string>Boolean</string>
8832 <key>Value</key>
8833 <integer>0</integer>
8834 </map>
8835 <key>VectorizePerfTest</key>
8836 <map>
8837 <key>Comment</key>
8838 <string>Test SSE/vectorization performance and choose fastest version.</string>
8839 <key>Persist</key>
8840 <integer>1</integer>
8841 <key>Type</key>
8842 <string>Boolean</string>
8843 <key>Value</key>
8844 <integer>1</integer>
8845 </map>
8846 <key>VectorizeProcessor</key>
8847 <map>
8848 <key>Comment</key>
8849 <string>0=Compiler Default, 1=SSE, 2=SSE2, autodetected</string>
8850 <key>Persist</key>
8851 <integer>0</integer>
8852 <key>Type</key>
8853 <string>U32</string>
8854 <key>Value</key>
8855 <integer>0</integer>
8856 </map>
8857 <key>VectorizeSkin</key>
8858 <map>
8859 <key>Comment</key>
8860 <string>Enable vector operations for avatar skinning.</string>
8861 <key>Persist</key>
8862 <integer>1</integer>
8863 <key>Type</key>
8864 <string>Boolean</string>
8865 <key>Value</key>
8866 <integer>1</integer>
8867 </map>
8868 <key>VelocityInterpolate</key>
8869 <map>
8870 <key>Comment</key>
8871 <string>Extrapolate object motion from last packet based on received velocity</string>
8872 <key>Persist</key>
8873 <integer>1</integer>
8874 <key>Type</key>
8875 <string>Boolean</string>
8876 <key>Value</key>
8877 <integer>1</integer>
8878 </map>
8879 <key>VerboseLogs</key>
8880 <map>
8881 <key>Comment</key>
8882 <string>Display source file and line number for each log item for debugging purposes</string>
8883 <key>Persist</key>
8884 <integer>1</integer>
8885 <key>Type</key>
8886 <string>Boolean</string>
8887 <key>Value</key>
8888 <integer>0</integer>
8889 </map>
8890 <key>VersionChannelName</key>
8891 <map>
8892 <key>Comment</key>
8893 <string>Versioning Channel Name.</string>
8894 <key>Persist</key>
8895 <integer>1</integer>
8896 <key>Type</key>
8897 <string>String</string>
8898 <key>Value</key>
8899 <string>Second Life Release</string>
8900 </map>
8901 <key>VertexShaderEnable</key>
8902 <map>
8903 <key>Comment</key>
8904 <string>Enable/disable all GLSL shaders (debug)</string>
8905 <key>Persist</key>
8906 <integer>1</integer>
8907 <key>Type</key>
8908 <string>Boolean</string>
8909 <key>Value</key>
8910 <integer>0</integer>
8911 </map>
8912 <key>VivoxDebugLevel</key>
8913 <map>
8914 <key>Comment</key>
8915 <string>Logging level to use when launching the vivox daemon</string>
8916 <key>Persist</key>
8917 <integer>1</integer>
8918 <key>Type</key>
8919 <string>String</string>
8920 <key>Value</key>
8921 <string>-1</string>
8922 </map>
8923 <key>VivoxDebugServerName</key>
8924 <map>
8925 <key>Comment</key>
8926 <string>Hostname of the vivox account server to use for voice when not connected to Agni.</string>
8927 <key>Persist</key>
8928 <integer>1</integer>
8929 <key>Type</key>
8930 <string>String</string>
8931 <key>Value</key>
8932 <string>bhd.vivox.com</string>
8933 </map>
8934 <key>VoiceCallsFriendsOnly</key>
8935 <map>
8936 <key>Comment</key>
8937 <string>Only accept voice calls from residents on your friends list</string>
8938 <key>Persist</key>
8939 <integer>1</integer>
8940 <key>Type</key>
8941 <string>Boolean</string>
8942 <key>Value</key>
8943 <integer>0</integer>
8944 </map>
8945 <key>VoiceEarLocation</key>
8946 <map>
8947 <key>Comment</key>
8948 <string>Location of the virtual ear for voice</string>
8949 <key>Persist</key>
8950 <integer>1</integer>
8951 <key>Type</key>
8952 <string>S32</string>
8953 <key>Value</key>
8954 <integer>0</integer>
8955 </map>
8956 <key>VoiceHost</key>
8957 <map>
8958 <key>Comment</key>
8959 <string>Client SLVoice host to connect to</string>
8960 <key>Persist</key>
8961 <integer>1</integer>
8962 <key>Type</key>
8963 <string>String</string>
8964 <key>Value</key>
8965 <string>127.0.0.1</string>
8966 </map>
8967 <key>VoiceImageLevel0</key>
8968 <map>
8969 <key>Comment</key>
8970 <string>Texture UUID for voice image level 0</string>
8971 <key>Persist</key>
8972 <integer>1</integer>
8973 <key>Type</key>
8974 <string>String</string>
8975 <key>Value</key>
8976 <string>041ee5a0-cb6a-9ac5-6e49-41e9320507d5</string>
8977 </map>
8978 <key>VoiceImageLevel1</key>
8979 <map>
8980 <key>Comment</key>
8981 <string>Texture UUID for voice image level 1</string>
8982 <key>Persist</key>
8983 <integer>1</integer>
8984 <key>Type</key>
8985 <string>String</string>
8986 <key>Value</key>
8987 <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
8988 </map>
8989 <key>VoiceImageLevel2</key>
8990 <map>
8991 <key>Comment</key>
8992 <string>Texture UUID for voice image level 2</string>
8993 <key>Persist</key>
8994 <integer>1</integer>
8995 <key>Type</key>
8996 <string>String</string>
8997 <key>Value</key>
8998 <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
8999 </map>
9000 <key>VoiceImageLevel3</key>
9001 <map>
9002 <key>Comment</key>
9003 <string>Texture UUID for voice image level 3</string>
9004 <key>Persist</key>
9005 <integer>1</integer>
9006 <key>Type</key>
9007 <string>String</string>
9008 <key>Value</key>
9009 <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
9010 </map>
9011 <key>VoiceImageLevel4</key>
9012 <map>
9013 <key>Comment</key>
9014 <string>Texture UUID for voice image level 4</string>
9015 <key>Persist</key>
9016 <integer>1</integer>
9017 <key>Type</key>
9018 <string>String</string>
9019 <key>Value</key>
9020 <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
9021 </map>
9022 <key>VoiceImageLevel5</key>
9023 <map>
9024 <key>Comment</key>
9025 <string>Texture UUID for voice image level 5</string>
9026 <key>Persist</key>
9027 <integer>1</integer>
9028 <key>Type</key>
9029 <string>String</string>
9030 <key>Value</key>
9031 <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
9032 </map>
9033 <key>VoiceImageLevel6</key>
9034 <map>
9035 <key>Comment</key>
9036 <string>Texture UUID for voice image level 6</string>
9037 <key>Persist</key>
9038 <integer>1</integer>
9039 <key>Type</key>
9040 <string>String</string>
9041 <key>Value</key>
9042 <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
9043 </map>
9044 <key>VoiceInputAudioDevice</key>
9045 <map>
9046 <key>Comment</key>
9047 <string>Audio input device to use for voice</string>
9048 <key>Persist</key>
9049 <integer>1</integer>
9050 <key>Type</key>
9051 <string>String</string>
9052 <key>Value</key>
9053 <string>Default</string>
9054 </map>
9055 <key>VoiceOutputAudioDevice</key>
9056 <map>
9057 <key>Comment</key>
9058 <string>Audio output device to use for voice</string>
9059 <key>Persist</key>
9060 <integer>1</integer>
9061 <key>Type</key>
9062 <string>String</string>
9063 <key>Value</key>
9064 <string>Default</string>
9065 </map>
9066 <key>VoicePort</key>
9067 <map>
9068 <key>Comment</key>
9069 <string>Client SLVoice port to connect to</string>
9070 <key>Persist</key>
9071 <integer>1</integer>
9072 <key>Type</key>
9073 <string>U32</string>
9074 <key>Value</key>
9075 <integer>44124</integer>
9076 </map>
9077 <key>WarnAboutBadPCI</key>
9078 <map>
9079 <key>Comment</key>
9080 <string>Enables AboutBadPCI warning dialog</string>
9081 <key>Persist</key>
9082 <integer>1</integer>
9083 <key>Type</key>
9084 <string>Boolean</string>
9085 <key>Value</key>
9086 <integer>1</integer>
9087 </map>
9088 <key>WarnAboutDirectX9</key>
9089 <map>
9090 <key>Comment</key>
9091 <string>Enables AboutDirectX9 warning dialog</string>
9092 <key>Persist</key>
9093 <integer>1</integer>
9094 <key>Type</key>
9095 <string>Boolean</string>
9096 <key>Value</key>
9097 <integer>1</integer>
9098 </map>
9099 <key>WarnAboutOldGraphicsDriver</key>
9100 <map>
9101 <key>Comment</key>
9102 <string>Enables AboutOldGraphicsDriver warning dialog</string>
9103 <key>Persist</key>
9104 <integer>1</integer>
9105 <key>Type</key>
9106 <string>Boolean</string>
9107 <key>Value</key>
9108 <integer>1</integer>
9109 </map>
9110 <key>WarnAboutPCIGraphics</key>
9111 <map>
9112 <key>Comment</key>
9113 <string>Enables AboutPCIGraphics warning dialog</string>
9114 <key>Persist</key>
9115 <integer>1</integer>
9116 <key>Type</key>
9117 <string>Boolean</string>
9118 <key>Value</key>
9119 <integer>1</integer>
9120 </map>
9121 <key>WarnBrowserLaunch</key>
9122 <map>
9123 <key>Comment</key>
9124 <string>Enables BrowserLaunch warning dialog</string>
9125 <key>Persist</key>
9126 <integer>1</integer>
9127 <key>Type</key>
9128 <string>Boolean</string>
9129 <key>Value</key>
9130 <integer>1</integer>
9131 </map>
9132 <key>WarnDeedObject</key>
9133 <map>
9134 <key>Comment</key>
9135 <string>Enables DeedObject warning dialog</string>
9136 <key>Persist</key>
9137 <integer>1</integer>
9138 <key>Type</key>
9139 <string>Boolean</string>
9140 <key>Value</key>
9141 <integer>1</integer>
9142 </map>
9143 <key>WarnFirstAppearance</key>
9144 <map>
9145 <key>Comment</key>
9146 <string>Enables FirstAppearance warning dialog</string>
9147 <key>Persist</key>
9148 <integer>1</integer>
9149 <key>Type</key>
9150 <string>Boolean</string>
9151 <key>Value</key>
9152 <integer>1</integer>
9153 </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>
9166 <map>
9167 <key>Comment</key>
9168 <string>Enables FirstAttach warning dialog</string>
9169 <key>Persist</key>
9170 <integer>1</integer>
9171 <key>Type</key>
9172 <string>Boolean</string>
9173 <key>Value</key>
9174 <integer>1</integer>
9175 </map>
9176 <key>WarnFirstBalanceDecrease</key>
9177 <map>
9178 <key>Comment</key>
9179 <string>Enables FirstBalanceDecrease warning dialog</string>
9180 <key>Persist</key>
9181 <integer>1</integer>
9182 <key>Type</key>
9183 <string>Boolean</string>
9184 <key>Value</key>
9185 <integer>1</integer>
9186 </map>
9187 <key>WarnFirstBalanceIncrease</key>
9188 <map>
9189 <key>Comment</key>
9190 <string>Enables FirstBalanceIncrease warning dialog</string>
9191 <key>Persist</key>
9192 <integer>1</integer>
9193 <key>Type</key>
9194 <string>Boolean</string>
9195 <key>Value</key>
9196 <integer>1</integer>
9197 </map>
9198 <key>WarnFirstBuild</key>
9199 <map>
9200 <key>Comment</key>
9201 <string>Enables FirstBuild warning dialog</string>
9202 <key>Persist</key>
9203 <integer>1</integer>
9204 <key>Type</key>
9205 <string>Boolean</string>
9206 <key>Value</key>
9207 <integer>1</integer>
9208 </map>
9209 <key>WarnFirstDebugMenus</key>
9210 <map>
9211 <key>Comment</key>
9212 <string>Enables FirstDebugMenus warning dialog</string>
9213 <key>Persist</key>
9214 <integer>1</integer>
9215 <key>Type</key>
9216 <string>Boolean</string>
9217 <key>Value</key>
9218 <integer>1</integer>
9219 </map>
9220 <key>WarnFirstFlexible</key>
9221 <map>
9222 <key>Comment</key>
9223 <string>Enables FirstFlexible warning dialog</string>
9224 <key>Persist</key>
9225 <integer>1</integer>
9226 <key>Type</key>
9227 <string>Boolean</string>
9228 <key>Value</key>
9229 <integer>1</integer>
9230 </map>
9231 <key>WarnFirstGoTo</key>
9232 <map>
9233 <key>Comment</key>
9234 <string>Enables FirstGoTo warning dialog</string>
9235 <key>Persist</key>
9236 <integer>1</integer>
9237 <key>Type</key>
9238 <string>Boolean</string>
9239 <key>Value</key>
9240 <integer>1</integer>
9241 </map>
9242 <key>WarnFirstInventory</key>
9243 <map>
9244 <key>Comment</key>
9245 <string>Enables FirstInventory warning dialog</string>
9246 <key>Persist</key>
9247 <integer>1</integer>
9248 <key>Type</key>
9249 <string>Boolean</string>
9250 <key>Value</key>
9251 <integer>1</integer>
9252 </map>
9253 <key>WarnFirstLeftClickNoHit</key>
9254 <map>
9255 <key>Comment</key>
9256 <string>Enables FirstLeftClickNoHit warning dialog</string>
9257 <key>Persist</key>
9258 <integer>1</integer>
9259 <key>Type</key>
9260 <string>Boolean</string>
9261 <key>Value</key>
9262 <integer>1</integer>
9263 </map>
9264 <key>WarnFirstMap</key>
9265 <map>
9266 <key>Comment</key>
9267 <string>Enables FirstMap warning dialog</string>
9268 <key>Persist</key>
9269 <integer>1</integer>
9270 <key>Type</key>
9271 <string>Boolean</string>
9272 <key>Value</key>
9273 <integer>1</integer>
9274 </map>
9275 <key>WarnFirstMedia</key>
9276 <map>
9277 <key>Comment</key>
9278 <string>Enables FirstMedia warning dialog</string>
9279 <key>Persist</key>
9280 <integer>1</integer>
9281 <key>Type</key>
9282 <string>Boolean</string>
9283 <key>Value</key>
9284 <integer>1</integer>
9285 </map>
9286 <key>WarnFirstOverrideKeys</key>
9287 <map>
9288 <key>Comment</key>
9289 <string>Enables FirstOverrideKeys warning dialog</string>
9290 <key>Persist</key>
9291 <integer>1</integer>
9292 <key>Type</key>
9293 <string>Boolean</string>
9294 <key>Value</key>
9295 <integer>1</integer>
9296 </map>
9297 <key>WarnFirstSandbox</key>
9298 <map>
9299 <key>Comment</key>
9300 <string>Enables FirstSandbox warning dialog</string>
9301 <key>Persist</key>
9302 <integer>1</integer>
9303 <key>Type</key>
9304 <string>Boolean</string>
9305 <key>Value</key>
9306 <integer>1</integer>
9307 </map>
9308 <key>WarnFirstSculptedPrim</key>
9309 <map>
9310 <key>Comment</key>
9311 <string>Enables FirstSculptedPrim warning dialog</string>
9312 <key>Persist</key>
9313 <integer>1</integer>
9314 <key>Type</key>
9315 <string>Boolean</string>
9316 <key>Value</key>
9317 <integer>1</integer>
9318 </map>
9319 <key>WarnFirstSit</key>
9320 <map>
9321 <key>Comment</key>
9322 <string>Enables FirstSit warning dialog</string>
9323 <key>Persist</key>
9324 <integer>1</integer>
9325 <key>Type</key>
9326 <string>Boolean</string>
9327 <key>Value</key>
9328 <integer>1</integer>
9329 </map>
9330 <key>WarnFirstStreamingMusic</key>
9331 <map>
9332 <key>Comment</key>
9333 <string>Enables FirstStreamingMusic warning dialog</string>
9334 <key>Persist</key>
9335 <integer>1</integer>
9336 <key>Type</key>
9337 <string>Boolean</string>
9338 <key>Value</key>
9339 <integer>1</integer>
9340 </map>
9341 <key>WarnFirstStreamingVideo</key>
9342 <map>
9343 <key>Comment</key>
9344 <string>Enables FirstStreamingVideo warning dialog</string>
9345 <key>Persist</key>
9346 <integer>1</integer>
9347 <key>Type</key>
9348 <string>Boolean</string>
9349 <key>Value</key>
9350 <integer>1</integer>
9351 </map>
9352 <key>WarnFirstTeleport</key>
9353 <map>
9354 <key>Comment</key>
9355 <string>Enables FirstTeleport warning dialog</string>
9356 <key>Persist</key>
9357 <integer>1</integer>
9358 <key>Type</key>
9359 <string>Boolean</string>
9360 <key>Value</key>
9361 <integer>1</integer>
9362 </map>
9363 <key>WarnFirstVoice</key>
9364 <map>
9365 <key>Comment</key>
9366 <string>Enables FirstVoice warning dialog</string>
9367 <key>Persist</key>
9368 <integer>1</integer>
9369 <key>Type</key>
9370 <string>Boolean</string>
9371 <key>Value</key>
9372 <integer>1</integer>
9373 </map>
9374 <key>WarnNewClassified</key>
9375 <map>
9376 <key>Comment</key>
9377 <string>Enables NewClassified warning dialog</string>
9378 <key>Persist</key>
9379 <integer>1</integer>
9380 <key>Type</key>
9381 <string>Boolean</string>
9382 <key>Value</key>
9383 <integer>1</integer>
9384 </map>
9385 <key>WarnQuickTimeInstalled</key>
9386 <map>
9387 <key>Comment</key>
9388 <string>Enables QuickTimeInstalled warning dialog</string>
9389 <key>Persist</key>
9390 <integer>1</integer>
9391 <key>Type</key>
9392 <string>Boolean</string>
9393 <key>Value</key>
9394 <integer>1</integer>
9395 </map>
9396 <key>WarnReturnToOwner</key>
9397 <map>
9398 <key>Comment</key>
9399 <string>Enables ReturnToOwner warning dialog</string>
9400 <key>Persist</key>
9401 <integer>1</integer>
9402 <key>Type</key>
9403 <string>Boolean</string>
9404 <key>Value</key>
9405 <integer>1</integer>
9406 </map>
9407 <key>WindLightUseAtmosShaders</key>
9408 <map>
9409 <key>Comment</key>
9410 <string>Whether to enable or disable WindLight atmospheric shaders.</string>
9411 <key>Persist</key>
9412 <integer>1</integer>
9413 <key>Type</key>
9414 <string>Boolean</string>
9415 <key>Value</key>
9416 <integer>1</integer>
9417 </map>
9418 <key>WindowHeight</key>
9419 <map>
9420 <key>Comment</key>
9421 <string>SL viewer window height</string>
9422 <key>Persist</key>
9423 <integer>1</integer>
9424 <key>Type</key>
9425 <string>S32</string>
9426 <key>Value</key>
9427 <integer>700</integer>
9428 </map>
9429 <key>WindowMaximized</key>
9430 <map>
9431 <key>Comment</key>
9432 <string>SL viewer window maximized on login</string>
9433 <key>Persist</key>
9434 <integer>1</integer>
9435 <key>Type</key>
9436 <string>Boolean</string>
9437 <key>Value</key>
9438 <integer>1</integer>
9439 </map>
9440 <key>WindowWidth</key>
9441 <map>
9442 <key>Comment</key>
9443 <string>SL viewer window width</string>
9444 <key>Persist</key>
9445 <integer>1</integer>
9446 <key>Type</key>
9447 <string>S32</string>
9448 <key>Value</key>
9449 <integer>1000</integer>
9450 </map>
9451 <key>WindowX</key>
9452 <map>
9453 <key>Comment</key>
9454 <string>X coordinate of lower left corner of SL viewer window, relative to primary display (pixels)</string>
9455 <key>Persist</key>
9456 <integer>1</integer>
9457 <key>Type</key>
9458 <string>S32</string>
9459 <key>Value</key>
9460 <integer>10</integer>
9461 </map>
9462 <key>WindowY</key>
9463 <map>
9464 <key>Comment</key>
9465 <string>Y coordinate of lower left corner of SL viewer window, relative to primary display (pixels)</string>
9466 <key>Persist</key>
9467 <integer>1</integer>
9468 <key>Type</key>
9469 <string>S32</string>
9470 <key>Value</key>
9471 <integer>10</integer>
9472 </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>
9485 <map>
9486 <key>Comment</key>
9487 <string>Maximum allowable downstream bandwidth for asset transfers (bits per second)</string>
9488 <key>Persist</key>
9489 <integer>1</integer>
9490 <key>Type</key>
9491 <string>F32</string>
9492 <key>Value</key>
9493 <real>150000</real>
9494 </map>
9495 <key>YawFromMousePosition</key>
9496 <map>
9497 <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>
9499 <key>Persist</key>
9500 <integer>1</integer>
9501 <key>Type</key>
9502 <string>F32</string>
9503 <key>Value</key>
9504 <real>90</real>
9505 </map>
9506 <key>YieldTime</key>
9507 <map>
9508 <key>Comment</key>
9509 <string>Yield some time to the local host.</string>
9510 <key>Persist</key>
9511 <integer>1</integer>
9512 <key>Type</key>
9513 <string>S32</string>
9514 <key>Value</key>
9515 <integer>-1</integer>
9516 </map>
9517 <key>ZoomTime</key>
9518 <map>
9519 <key>Comment</key>
9520 <string>Time of transition between different camera modes (seconds)</string>
9521 <key>Persist</key>
9522 <integer>1</integer>
9523 <key>Type</key>
9524 <string>F32</string>
9525 <key>Value</key>
9526 <real>0.4000000059604644775390625</real>
9527 </map>
9528 <key>llOwnerSayChatColor</key>
9529 <map>
9530 <key>Comment</key>
9531 <string>Color of chat messages from objects only visible to the owner</string>
9532 <key>Persist</key>
9533 <integer>1</integer>
9534 <key>Type</key>
9535 <string>Color4</string>
9536 <key>Value</key>
9537 <array>
9538 <real>0.9900000095367431640625</real>
9539 <real>0.9900000095367431640625</real>
9540 <real>0.689999997615814208984375</real>
9541 <real>1</real>
9542 </array>
9543 </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>
9556 <map>
9557 <key>Comment</key>
9558 <string>Beacon / Highlight particle generators</string>
9559 <key>Persist</key>
9560 <integer>1</integer>
9561 <key>Type</key>
9562 <string>Boolean</string>
9563 <key>Value</key>
9564 <integer>0</integer>
9565 </map>
9566 <key>physicalbeacon</key>
9567 <map>
9568 <key>Comment</key>
9569 <string>Beacon / Highlight physical objects</string>
9570 <key>Persist</key>
9571 <integer>1</integer>
9572 <key>Type</key>
9573 <string>Boolean</string>
9574 <key>Value</key>
9575 <integer>1</integer>
9576 </map>
9577 <key>renderbeacons</key>
9578 <map>
9579 <key>Comment</key>
9580 <string>Beacon / Highlight particle generators</string>
9581 <key>Persist</key>
9582 <integer>1</integer>
9583 <key>Type</key>
9584 <string>Boolean</string>
9585 <key>Value</key>
9586 <integer>0</integer>
9587 </map>
9588 <key>renderhighlights</key>
9589 <map>
9590 <key>Comment</key>
9591 <string>Beacon / Highlight scripted objects with touch function</string>
9592 <key>Persist</key>
9593 <integer>1</integer>
9594 <key>Type</key>
9595 <string>Boolean</string>
9596 <key>Value</key>
9597 <integer>1</integer>
9598 </map>
9599 <key>scriptsbeacon</key>
9600 <map>
9601 <key>Comment</key>
9602 <string>Beacon / Highlight scripted objects</string>
9603 <key>Persist</key>
9604 <integer>1</integer>
9605 <key>Type</key>
9606 <string>Boolean</string>
9607 <key>Value</key>
9608 <integer>0</integer>
9609 </map>
9610 <key>scripttouchbeacon</key>
9611 <map>
9612 <key>Comment</key>
9613 <string>Beacon / Highlight scripted objects with touch function</string>
9614 <key>Persist</key>
9615 <integer>1</integer>
9616 <key>Type</key>
9617 <string>Boolean</string>
9618 <key>Value</key>
9619 <integer>1</integer>
9620 </map>
9621 <key>soundsbeacon</key>
9622 <map>
9623 <key>Comment</key>
9624 <string>Beacon / Highlight sound generators</string>
9625 <key>Persist</key>
9626 <integer>1</integer>
9627 <key>Type</key>
9628 <string>Boolean</string>
9629 <key>Value</key>
9630 <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>AlertedUnsupportedHardware</key>
9763 <map>
9764 <key>Comment</key>
9765 <string>Toggle that lets us tell the user he's on old hardware only once</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>RenderFastAlpha</key>
9774 <map>
9775 <key>Comment</key>
9776 <string>Use lossy alpha rendering optimization (opaque/nonexistent small alpha faces).</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>RenderDeferred</key>
9785 <map>
9786 <key>Comment</key>
9787 <string>Use deferred rendering pipeline.</string>
9788 <key>Persist</key>
9789 <integer>1</integer>
9790 <key>Type</key>
9791 <string>Boolean</string>
9792 <key>Value</key>
9793 <integer>0</integer>
9794 </map>
9795 <key>RenderFSAASamples</key>
9796 <map>
9797 <key>Comment</key>
9798 <string>Number of samples to use for FSAA (0 = no AA).</string>
9799 <key>Persist</key>
9800 <integer>1</integer>
9801 <key>Type</key>
9802 <string>U32</string>
9803 <key>Value</key>
9804 <integer>0</integer>
9805 </map>
9806 <key>RenderTextureMemoryMultiple</key>
9807 <map>
9808 <key>Comment</key>
9809 <string>Multiple of texture memory value to use (should fit: 0 &lt; value &lt;= 1.0)</string>
9810 <key>Persist</key>
9811 <integer>1</integer>
9812 <key>Type</key>
9813 <string>F32</string>
9814 <key>Value</key>
9815 <real>1.0</real>
9816 </map>
9817 <key>Disregard128DefaultDrawDistance</key>
9818 <map>
9819 <key>Comment</key>
9820 <string>Whether to use the auto default to 128 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 <key>Disregard96DefaultDrawDistance</key>
9829 <map>
9830 <key>Comment</key>
9831 <string>Whether to use the auto default to 96 draw distance</string>
9832 <key>Persist</key>
9833 <integer>1</integer>
9834 <key>Type</key>
9835 <string>Boolean</string>
9836 <key>Value</key>
9837 <real>1</real>
9838 </map>
9839
9840 <key>AvatarAxisDeadZone0</key>
9841 <map>
9842 <key>Comment</key>
9843 <string>Avatar axis 0 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>AvatarAxisDeadZone1</key>
9852 <map>
9853 <key>Comment</key>
9854 <string>Avatar axis 1 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>AvatarAxisDeadZone2</key>
9863 <map>
9864 <key>Comment</key>
9865 <string>Avatar axis 2 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>AvatarAxisDeadZone3</key>
9874 <map>
9875 <key>Comment</key>
9876 <string>Avatar axis 3 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>AvatarAxisDeadZone4</key>
9885 <map>
9886 <key>Comment</key>
9887 <string>Avatar axis 4 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>AvatarAxisDeadZone5</key>
9896 <map>
9897 <key>Comment</key>
9898 <string>Avatar axis 5 dead zone.</string>
9899 <key>Persist</key>
9900 <integer>1</integer>
9901 <key>Type</key>
9902 <string>F32</string>
9903 <key>Value</key>
9904 <real>0.1</real>
9905 </map>
9906 <key>AvatarAxisScale0</key>
9907 <map>
9908 <key>Comment</key>
9909 <string>Avatar axis 0 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>AvatarAxisScale1</key>
9918 <map>
9919 <key>Comment</key>
9920 <string>Avatar axis 1 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>AvatarAxisScale2</key>
9929 <map>
9930 <key>Comment</key>
9931 <string>Avatar axis 2 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>AvatarAxisScale3</key>
9940 <map>
9941 <key>Comment</key>
9942 <string>Avatar axis 3 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>AvatarAxisScale4</key>
9951 <map>
9952 <key>Comment</key>
9953 <string>Avatar axis 4 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>AvatarAxisScale5</key>
9962 <map>
9963 <key>Comment</key>
9964 <string>Avatar axis 5 scaler.</string>
9965 <key>Persist</key>
9966 <integer>1</integer>
9967 <key>Type</key>
9968 <string>F32</string>
9969 <key>Value</key>
9970 <real>1</real>
9971 </map>
9972 <key>AvatarFeathering</key>
9973 <map>
9974 <key>Comment</key>
9975 <string>Avatar feathering (less is softer)</string>
9976 <key>Persist</key>
9977 <integer>1</integer>
9978 <key>Type</key>
9979 <string>F32</string>
9980 <key>Value</key>
9981 <real>16</real>
9982 </map>
9983
9984 <key>BuildAxisDeadZone0</key>
9985 <map>
9986 <key>Comment</key>
9987 <string>Build axis 0 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>BuildAxisDeadZone1</key>
9996 <map>
9997 <key>Comment</key>
9998 <string>Build axis 1 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>BuildAxisDeadZone2</key>
10007 <map>
10008 <key>Comment</key>
10009 <string>Build axis 2 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>BuildAxisDeadZone3</key>
10018 <map>
10019 <key>Comment</key>
10020 <string>Build axis 3 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>BuildAxisDeadZone4</key>
10029 <map>
10030 <key>Comment</key>
10031 <string>Build axis 4 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>BuildAxisDeadZone5</key>
10040 <map>
10041 <key>Comment</key>
10042 <string>Build axis 5 dead zone.</string>
10043 <key>Persist</key>
10044 <integer>1</integer>
10045 <key>Type</key>
10046 <string>F32</string>
10047 <key>Value</key>
10048 <real>0.1</real>
10049 </map>
10050 <key>BuildAxisScale0</key>
10051 <map>
10052 <key>Comment</key>
10053 <string>Build axis 0 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>BuildAxisScale1</key>
10062 <map>
10063 <key>Comment</key>
10064 <string>Build axis 1 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>BuildAxisScale2</key>
10073 <map>
10074 <key>Comment</key>
10075 <string>Build axis 2 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>BuildAxisScale3</key>
10084 <map>
10085 <key>Comment</key>
10086 <string>Build axis 3 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>BuildAxisScale4</key>
10095 <map>
10096 <key>Comment</key>
10097 <string>Build axis 4 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>BuildAxisScale5</key>
10106 <map>
10107 <key>Comment</key>
10108 <string>Build axis 5 scaler.</string>
10109 <key>Persist</key>
10110 <integer>1</integer>
10111 <key>Type</key>
10112 <string>F32</string>
10113 <key>Value</key>
10114 <real>1</real>
10115 </map>
10116 <key>BuildFeathering</key>
10117 <map>
10118 <key>Comment</key>
10119 <string>Build feathering (less is softer)</string>
10120 <key>Persist</key>
10121 <integer>1</integer>
10122 <key>Type</key>
10123 <string>F32</string>
10124 <key>Value</key>
10125 <real>16</real>
10126 </map>
10127
10128 </map>
10129</llsd>
diff --git a/linden/indra/newview/app_settings/settings_crash_behavior.xml b/linden/indra/newview/app_settings/settings_crash_behavior.xml
new file mode 100644
index 0000000..cc7f5ac
--- /dev/null
+++ b/linden/indra/newview/app_settings/settings_crash_behavior.xml
@@ -0,0 +1,15 @@
1<llsd>
2 <map>
3 <key>CrashSubmitBehavior</key>
4 <map>
5 <key>Comment</key>
6 <string>Controls behavior when viewer crashes (0 = ask before sending crash report, 1 = always send crash report, 2 = never send crash report)</string>
7 <key>Persist</key>
8 <integer>1</integer>
9 <key>Type</key>
10 <string>S32</string>
11 <key>Value</key>
12 <integer>0</integer>
13 </map>
14 </map>
15</llsd>
diff --git a/linden/indra/newview/app_settings/settings_files.xml b/linden/indra/newview/app_settings/settings_files.xml
new file mode 100644
index 0000000..997bb0c
--- /dev/null
+++ b/linden/indra/newview/app_settings/settings_files.xml
@@ -0,0 +1,22 @@
1<llsd>
2 <map>
3 <key>Files</key>
4 <map>
5 <key>Comment</key>
6 <string>List of settings files to load. Key is the identifier, value is the filename</string>
7 <key>Persist</key>
8 <integer>0</integer>
9 <key>Type</key>
10 <string>LLSD</string>
11 <key>Value</key>
12 <map>
13 <key>Global</key>
14 <string>settings.xml</string>
15 <key>PerAccount</key>
16 <string>settings_per_account.xml</string>
17 <key>CrashSettings</key>
18 <string>settings_crash_behavior.xml</string>
19 </map>
20 </map>
21 </map>
22</llsd>
diff --git a/linden/indra/newview/app_settings/settings_per_account.xml b/linden/indra/newview/app_settings/settings_per_account.xml
new file mode 100644
index 0000000..90c7b11
--- /dev/null
+++ b/linden/indra/newview/app_settings/settings_per_account.xml
@@ -0,0 +1,114 @@
1<llsd>
2 <map>
3 <key>BusyModeResponse</key>
4 <map>
5 <key>Comment</key>
6 <string>Auto response to instant messages while in busy mode.</string>
7 <key>Persist</key>
8 <integer>1</integer>
9 <key>Type</key>
10 <string>String</string>
11 <key>Value</key>
12 <string>The Resident you messaged is in &apos;busy mode&apos; which means they have requested not to be disturbed. Your message will still be shown in their IM panel for later viewing.</string>
13 </map>
14 <key>IMLogTimestamp</key>
15 <map>
16 <key>Comment</key>
17 <string>Log Timestamp of Instant Messages</string>
18 <key>Persist</key>
19 <integer>1</integer>
20 <key>Type</key>
21 <string>Boolean</string>
22 <key>Value</key>
23 <integer>1</integer>
24 </map>
25 <key>InstantMessageLogPath</key>
26 <map>
27 <key>Comment</key>
28 <string>Path to your log files.</string>
29 <key>Persist</key>
30 <integer>1</integer>
31 <key>Type</key>
32 <string>String</string>
33 <key>Value</key>
34 <string />
35 </map>
36 <key>LastLogoff</key>
37 <map>
38 <key>Comment</key>
39 <string>Last logoff</string>
40 <key>Persist</key>
41 <integer>1</integer>
42 <key>Type</key>
43 <string>U32</string>
44 <key>Value</key>
45 <integer>0</integer>
46 </map>
47 <key>LogChat</key>
48 <map>
49 <key>Comment</key>
50 <string>Log Chat</string>
51 <key>Persist</key>
52 <integer>1</integer>
53 <key>Type</key>
54 <string>Boolean</string>
55 <key>Value</key>
56 <integer>0</integer>
57 </map>
58 <key>LogChatIM</key>
59 <map>
60 <key>Comment</key>
61 <string>Log Incoming Instant Messages with Chat</string>
62 <key>Persist</key>
63 <integer>1</integer>
64 <key>Type</key>
65 <string>Boolean</string>
66 <key>Value</key>
67 <integer>0</integer>
68 </map>
69 <key>LogChatTimestamp</key>
70 <map>
71 <key>Comment</key>
72 <string>Log Timestamp of Chat</string>
73 <key>Persist</key>
74 <integer>1</integer>
75 <key>Type</key>
76 <string>Boolean</string>
77 <key>Value</key>
78 <integer>0</integer>
79 </map>
80 <key>LogInstantMessages</key>
81 <map>
82 <key>Comment</key>
83 <string>Log Instant Messages</string>
84 <key>Persist</key>
85 <integer>1</integer>
86 <key>Type</key>
87 <string>Boolean</string>
88 <key>Value</key>
89 <integer>1</integer>
90 </map>
91 <key>LogShowHistory</key>
92 <map>
93 <key>Comment</key>
94 <string>Log Show History</string>
95 <key>Persist</key>
96 <integer>1</integer>
97 <key>Type</key>
98 <string>Boolean</string>
99 <key>Value</key>
100 <integer>1</integer>
101 </map>
102 <key>LogTimestampDate</key>
103 <map>
104 <key>Comment</key>
105 <string>Include Date with Timestamp</string>
106 <key>Persist</key>
107 <integer>1</integer>
108 <key>Type</key>
109 <string>Boolean</string>
110 <key>Value</key>
111 <integer>1</integer>
112 </map>
113 </map>
114</llsd>
diff --git a/linden/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl b/linden/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl
new file mode 100644
index 0000000..14e6361
--- /dev/null
+++ b/linden/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl
@@ -0,0 +1,16 @@
1/**
2 * @file diffuseF.glsl
3 *
4 * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc.
5 * $License$
6 */
7
8uniform sampler2D diffuseMap;
9
10varying vec3 vary_normal;
11
12void main()
13{
14 gl_FragColor = gl_Color * texture2D(diffuseMap, gl_TexCoord[0].xy);
15 gl_FragColor.rgb = vary_normal*0.5+0.5;
16}
diff --git a/linden/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl b/linden/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl
new file mode 100644
index 0000000..8e90693
--- /dev/null
+++ b/linden/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl
@@ -0,0 +1,22 @@
1/**
2 * @file diffuseV.glsl
3 *
4 * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc.
5 * $License$
6 */
7
8varying vec3 vary_normal;
9varying vec3 vary_position;
10
11void main()
12{
13 //transform vertex
14 gl_Position = ftransform();
15 gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
16
17 vary_position = (gl_ModelViewMatrix * gl_Vertex).xyz;
18
19 vary_normal = normalize(gl_NormalMatrix * gl_Normal);
20
21 gl_FrontColor = gl_Color;
22}
diff --git a/linden/indra/newview/app_settings/shaders/class1/environment/waterF.glsl b/linden/indra/newview/app_settings/shaders/class1/environment/waterF.glsl
index 1c14381..bd9b30a 100644
--- a/linden/indra/newview/app_settings/shaders/class1/environment/waterF.glsl
+++ b/linden/indra/newview/app_settings/shaders/class1/environment/waterF.glsl
@@ -86,7 +86,7 @@ void main()
86 color.rgb = mix(mix(fogCol.rgb, fb.rgb, fogCol.a), refcol.rgb, df); 86 color.rgb = mix(mix(fogCol.rgb, fb.rgb, fogCol.a), refcol.rgb, df);
87 color.rgb += spec * specular; 87 color.rgb += spec * specular;
88 88
89 color.rgb = atmosTransport(color.rgb); 89 //color.rgb = applyWaterFog(color);//atmosTransport(color.rgb);
90 color.rgb = scaleSoftClip(color.rgb); 90 color.rgb = scaleSoftClip(color.rgb);
91 color.a = spec * sunAngle2; 91 color.a = spec * sunAngle2;
92 92
diff --git a/linden/indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl b/linden/indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl
index 59e44fa..7ee4199 100644
--- a/linden/indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl
+++ b/linden/indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl
@@ -8,11 +8,11 @@
8vec4 applyWaterFog(vec4 color) 8vec4 applyWaterFog(vec4 color)
9{ 9{
10 // GL_EXP2 Fog 10 // GL_EXP2 Fog
11 float fog = exp(-gl_Fog.density * gl_Fog.density * gl_FogFragCoord * gl_FogFragCoord); 11 //float fog = exp(-gl_Fog.density * gl_Fog.density * gl_FogFragCoord * gl_FogFragCoord);
12 // GL_EXP Fog 12 // GL_EXP Fog
13 // float fog = exp(-gl_Fog.density * gl_FogFragCoord); 13 // float fog = exp(-gl_Fog.density * gl_FogFragCoord);
14 // GL_LINEAR Fog 14 // GL_LINEAR Fog
15 // float fog = (gl_Fog.end - gl_FogFragCoord) * gl_Fog.scale; 15 float fog = (gl_Fog.end - gl_FogFragCoord) * gl_Fog.scale;
16 fog = clamp(fog, 0.0, 1.0); 16 fog = clamp(fog, 0.0, 1.0);
17 color.rgb = mix(gl_Fog.color.rgb, color.rgb, fog); 17 color.rgb = mix(gl_Fog.color.rgb, color.rgb, fog);
18 return color; 18 return color;
diff --git a/linden/indra/newview/app_settings/shaders/class1/environment/waterV.glsl b/linden/indra/newview/app_settings/shaders/class1/environment/waterV.glsl
index d332798..48ac87e 100644
--- a/linden/indra/newview/app_settings/shaders/class1/environment/waterV.glsl
+++ b/linden/indra/newview/app_settings/shaders/class1/environment/waterV.glsl
@@ -63,9 +63,8 @@ void main()
63 //pass wave parameters to pixel shader 63 //pass wave parameters to pixel shader
64 vec2 bigWave = (v.xy) * vec2(0.04,0.04) + d1 * time * 0.055; 64 vec2 bigWave = (v.xy) * vec2(0.04,0.04) + d1 * time * 0.055;
65 //get two normal map (detail map) texture coordinates 65 //get two normal map (detail map) texture coordinates
66 littleWave.xy = (v.xy) * vec2(0.6, 1.2) + d2 * time * 0.05; 66 littleWave.xy = (v.xy) * vec2(0.45, 0.9) + d2 * time * 0.13;
67 // littleWave.zw = (v.xy) * vec2(0.07, 0.15) - d1 * time * 0.043; 67 littleWave.zw = (v.xy) * vec2(0.1, 0.2) + d1 * time * 0.1;
68 littleWave.zw = (v.xy) * vec2(0.3, 0.6) + d1 * time * 0.1;
69 view.w = bigWave.y; 68 view.w = bigWave.y;
70 refCoord.w = bigWave.x; 69 refCoord.w = bigWave.x;
71 70
diff --git a/linden/indra/newview/app_settings/shaders/class1/lighting/lightF.glsl b/linden/indra/newview/app_settings/shaders/class1/lighting/lightF.glsl
index 9ab986b..071489b 100644
--- a/linden/indra/newview/app_settings/shaders/class1/lighting/lightF.glsl
+++ b/linden/indra/newview/app_settings/shaders/class1/lighting/lightF.glsl
@@ -9,7 +9,7 @@ uniform sampler2D diffuseMap;
9 9
10void default_lighting() 10void default_lighting()
11{ 11{
12 color = gl_Color * texture2D(diffuseMap, gl_TexCoord[0].xy); 12 vec4 color = gl_Color * texture2D(diffuseMap, gl_TexCoord[0].xy);
13 gl_FragColor = color; 13 gl_FragColor = color;
14} 14}
15 15
diff --git a/linden/indra/newview/app_settings/shaders/class1/lighting/lightShinyF.glsl b/linden/indra/newview/app_settings/shaders/class1/lighting/lightShinyF.glsl
index c6f7f8b..89785c4 100644
--- a/linden/indra/newview/app_settings/shaders/class1/lighting/lightShinyF.glsl
+++ b/linden/indra/newview/app_settings/shaders/class1/lighting/lightShinyF.glsl
@@ -11,7 +11,7 @@ uniform samplerCube environmentMap;
11 11
12void shiny_lighting() 12void shiny_lighting()
13{ 13{
14 color = gl_Color * texture2D(diffuseMap, gl_TexCoord[0].xy); 14 vec4 color = gl_Color * texture2D(diffuseMap, gl_TexCoord[0].xy);
15 gl_FragColor = color; 15 gl_FragColor = color;
16} 16}
17 17
diff --git a/linden/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterF.glsl b/linden/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterF.glsl
index 75f61cc..7ac3c35 100644
--- a/linden/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterF.glsl
+++ b/linden/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterF.glsl
@@ -11,7 +11,7 @@ uniform samplerCube environmentMap;
11 11
12void shiny_lighting_water() 12void shiny_lighting_water()
13{ 13{
14 color = gl_Color * texture2D(diffuseMap, gl_TexCoord[0].xy); 14 vec4 color = gl_Color * texture2D(diffuseMap, gl_TexCoord[0].xy);
15 gl_FragColor = color; 15 gl_FragColor = color;
16} 16}
17 17
diff --git a/linden/indra/newview/app_settings/std_bump.ini b/linden/indra/newview/app_settings/std_bump.ini
index 9509c35..f34e21c 100644
--- a/linden/indra/newview/app_settings/std_bump.ini
+++ b/linden/indra/newview/app_settings/std_bump.ini
@@ -1,18 +1,18 @@
1LLStandardBumpmap version 1 1LLStandardBumpmap version 1
2 2
3 3
4woodgrain bump_woodgrain.tga 4woodgrain 058c75c0-a0d5-f2f8-43f3-e9699a89c2fc.j2c
5bark bump_bark.tga 5bark 6c9fa78a-1c69-2168-325b-3e03ffa348ce.j2c
6bricks bump_bricks.tga 6bricks b8eed5f0-64b7-6e12-b67f-43fa8e773440.j2c
7checker bump_checker.tga 7checker 9deab416-9c63-78d6-d558-9a156f12044c.j2c
8concrete bump_concrete.tga 8concrete db9d39ec-a896-c287-1ced-64566217021e.j2c
9crustytile bump_crustytile.tga 9crustytile f2d7b6f6-4200-1e9a-fd5b-96459e950f94.j2c
10cutstone bump_cutstone.tga 10cutstone d9258671-868f-7511-c321-7baef9e948a4.j2c
11discs bump_discs.tga 11discs d21e44ca-ff1c-a96e-b2ef-c0753426b7d9.j2c
12gravel bump_gravel.tga 12gravel 4726f13e-bd07-f2fb-feb0-bfa2ac58ab61.j2c
13petridish bump_petridish.tga 13petridish e569711a-27c2-aad4-9246-0c910239a179.j2c
14siding bump_siding.tga 14siding 073c9723-540c-5449-cdd4-0e87fdc159e3.j2c
15stonetile bump_stonetile.tga 15stonetile ae874d1a-93ef-54fb-5fd3-eb0cb156afc0.j2c
16stucco bump_stucco.tga 16stucco 92e66e00-f56f-598a-7997-048aa64cde18.j2c
17suction bump_suction.tga 17suction 83b77fc6-10b4-63ec-4de7-f40629f238c5.j2c
18weave bump_weave.tga 18weave 735198cf-6ea0-2550-e222-21d3c6a341ae.j2c
diff --git a/linden/indra/newview/fakevoicesoundsignal.cpp b/linden/indra/newview/fakevoicesoundsignal.cpp
deleted file mode 100644
index 25cb412..0000000
--- a/linden/indra/newview/fakevoicesoundsignal.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
1/**
2 * @file fakevoicesoundsignal.cpp
3 * @brief Fake Voice Sound Signal
4 * author: JJ Ventrella
5 * THIS IS A TEMPORARY FILE FOR DEVELOPMENT PURPOSES ONLY
6 *
7 * $LicenseInfo:firstyear=2000&license=viewergpl$
8 *
9 * Copyright (c) 2000-2008, Linden Research, Inc.
10 *
11 * Second Life Viewer Source Code
12 * The source code in this file ("Source Code") is provided by Linden Lab
13 * to you under the terms of the GNU General Public License, version 2.0
14 * ("GPL"), unless you have obtained a separate licensing agreement
15 * ("Other License"), formally executed by you and Linden Lab. Terms of
16 * the GPL can be found in doc/GPL-license.txt in this distribution, or
17 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
18 *
19 * There are special exceptions to the terms and conditions of the GPL as
20 * it is applied to this Source Code. View the full text of the exception
21 * in the file doc/FLOSS-exception.txt in this software distribution, or
22 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
23 *
24 * By copying, modifying or distributing this software, you acknowledge
25 * that you have read and understood your obligations described above,
26 * and agree to abide by those obligations.
27 *
28 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
29 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
30 * COMPLETENESS OR PERFORMANCE.
31 * $/LicenseInfo$
32 */
33
34#include "llviewerprecompiledheaders.h"
35#include "fakevoicesoundsignal.h"
36
37//-----------------------------------------------
38// constructor
39//-----------------------------------------------
40FakeVoiceSoundSignal::FakeVoiceSoundSignal()
41{
42}//---------------------------------------------------
43
44
45//-----------------------------------------------
46// destructor
47//-----------------------------------------------
48FakeVoiceSoundSignal::~FakeVoiceSoundSignal()
49{
50}//---------------------------------------------------
51
52//---------------------------------------------------
53F32 FakeVoiceSoundSignal::getAmplitude()
54{
55 return 0.0;
56
57}//---------------------------------------------------
58
59
60//---------------------------------------------------
61bool FakeVoiceSoundSignal::getActive()
62{
63 return false;
64
65}//---------------------------------------------------
66
67
68//---------------------------------------------------
69void FakeVoiceSoundSignal::update()
70{
71
72}//---------------------------------------------------
73
74
75
76
diff --git a/linden/indra/newview/featuretable.txt b/linden/indra/newview/featuretable.txt
index 6491275..032d9bf 100644
--- a/linden/indra/newview/featuretable.txt
+++ b/linden/indra/newview/featuretable.txt
@@ -52,6 +52,7 @@ WindLightUseAtmosShaders 1 1
52WLSkyDetail 1 128 52WLSkyDetail 1 128
53Disregard128DefaultDrawDistance 1 1 53Disregard128DefaultDrawDistance 1 1
54Disregard96DefaultDrawDistance 1 1 54Disregard96DefaultDrawDistance 1 1
55RenderTextureMemoryMultiple 1 1.0
55 56
56// 57//
57// Low Graphics Settings 58// Low Graphics Settings
@@ -249,6 +250,9 @@ RenderMaxPartCount 1 2048
249RenderTerrainDetail 1 0 250RenderTerrainDetail 1 0
250RenderVBOEnable 1 1 251RenderVBOEnable 1 1
251 252
253list SiS
254UseOcclusion 0 0
255
252 256
253list Intel_830M 257list Intel_830M
254RenderTerrainDetail 1 0 258RenderTerrainDetail 1 0
@@ -319,10 +323,25 @@ list Intel_Springdale
319RenderTerrainDetail 1 0 323RenderTerrainDetail 1 0
320RenderVBOEnable 1 0 324RenderVBOEnable 1 0
321 325
326
322list ATI_FireGL_5200 327list ATI_FireGL_5200
323RenderVBOEnable 1 0 328RenderVBOEnable 1 0
324WindLightUseAtmosShaders 0 0 329WindLightUseAtmosShaders 0 0
325 330
331
332list ATI_Mobility_Radeon_7xxx
333RenderVBOEnable 0 0
334
335list ATI_Radeon_7xxx
336RenderVBOEnable 0 0
337
338list ATI_All-in-Wonder_Radeon
339RenderVBOEnable 0 0
340
341list ATI_All-in-Wonder_7500
342RenderVBOEnable 0 0
343
344
326list ATI_Mobility_Radeon_9800 345list ATI_Mobility_Radeon_9800
327RenderAvatarCloth 0 0 346RenderAvatarCloth 0 0
328VertexShaderEnable 0 0 347VertexShaderEnable 0 0
diff --git a/linden/indra/newview/featuretable_linux.txt b/linden/indra/newview/featuretable_linux.txt
index bafda09..88570e3 100644
--- a/linden/indra/newview/featuretable_linux.txt
+++ b/linden/indra/newview/featuretable_linux.txt
@@ -51,6 +51,7 @@ WindLightUseAtmosShaders 1 1
51WLSkyDetail 1 128 51WLSkyDetail 1 128
52Disregard128DefaultDrawDistance 1 1 52Disregard128DefaultDrawDistance 1 1
53Disregard96DefaultDrawDistance 1 1 53Disregard96DefaultDrawDistance 1 1
54RenderTextureMemoryMultiple 1 1.0
54 55
55// 56//
56// Low Graphics Settings 57// Low Graphics Settings
diff --git a/linden/indra/newview/featuretable_mac.txt b/linden/indra/newview/featuretable_mac.txt
index be3507f..d19e4ed 100644
--- a/linden/indra/newview/featuretable_mac.txt
+++ b/linden/indra/newview/featuretable_mac.txt
@@ -23,33 +23,36 @@ version 16
23// NOTE: All settings are set to the MIN of applied values, including 'all'! 23// NOTE: All settings are set to the MIN of applied values, including 'all'!
24// 24//
25list all 25list all
26RenderAnisotropic 1 0 26RenderAnisotropic 1 0
27RenderAvatarCloth 0 0 27RenderAvatarCloth 0 0
28RenderAvatarLODFactor 1 1.0 28RenderAvatarLODFactor 1 1.0
29RenderAvatarVP 1 0 29RenderAvatarVP 1 0
30RenderCubeMap 1 1 30RenderCubeMap 1 1
31RenderFarClip 1 256 31RenderFarClip 1 256
32RenderFlexTimeFactor 1 1.0 32RenderFlexTimeFactor 1 1.0
33RenderFogRatio 1 4.0 33RenderFogRatio 1 4.0
34RenderGamma 1 0 34RenderGamma 1 0
35RenderGlowResolutionPow 1 9 35RenderGlowResolutionPow 1 9
36RenderLightingDetail 1 1 36RenderLightingDetail 1 1
37RenderMaxPartCount 1 8192 37RenderMaxPartCount 1 8192
38RenderNightBrightness 1 1.0 38RenderNightBrightness 1 1.0
39RenderObjectBump 1 1 39RenderObjectBump 1 1
40RenderReflectionDetail 1 3 40RenderReflectionDetail 1 3
41RenderTerrainDetail 1 1 41RenderTerrainDetail 1 1
42RenderTerrainLODFactor 1 2.0 42RenderTerrainLODFactor 1 2.0
43RenderTreeLODFactor 1 1.0 43RenderTreeLODFactor 1 1.0
44RenderUseImpostors 1 1 44RenderUseImpostors 1 1
45RenderVBOEnable 1 1 45RenderVBOEnable 1 1
46RenderVolumeLODFactor 1 2.0 46RenderVolumeLODFactor 1 2.0
47RenderWaterReflections 1 1 47RenderWaterReflections 1 1
48UseOcclusion 1 1 48UseOcclusion 1 1
49VertexShaderEnable 1 1 49VertexShaderEnable 1 1
50WindLightUseAtmosShaders 1 1 50WindLightUseAtmosShaders 1 1
51WLSkyDetail 1 128 51WLSkyDetail 1 128
52RenderUseCleverUI 1 1 52RenderUseCleverUI 1 1
53Disregard128DefaultDrawDistance 1 1
54Disregard96DefaultDrawDistance 1 1
55RenderTextureMemoryMultiple 1 0.5
53Disregard128DefaultDrawDistance 1 1 56Disregard128DefaultDrawDistance 1 1
54Disregard96DefaultDrawDistance 1 1 57Disregard96DefaultDrawDistance 1 1
55 58
@@ -337,6 +340,8 @@ VertexShaderEnable 0 0
337WindLightUseAtmosShaders 0 0 340WindLightUseAtmosShaders 0 0
338Disregard96DefaultDrawDistance 1 0 341Disregard96DefaultDrawDistance 1 0
339 342
343list NVIDIA_GeForce_8600
344RenderTextureMemoryMultiple 1 0.375
340 345
341/// tweaked ATI to 96 Draw distance 346/// tweaked ATI to 96 Draw distance
342 347
diff --git a/linden/indra/newview/featuretable_solaris.txt b/linden/indra/newview/featuretable_solaris.txt
index 7dd7c22..2a514ea 100644
--- a/linden/indra/newview/featuretable_solaris.txt
+++ b/linden/indra/newview/featuretable_solaris.txt
@@ -34,6 +34,7 @@ RenderParticleCount 1 4096
34RenderRippleWater 1 1 34RenderRippleWater 1 1
35RenderTerrainDetail 1 2 35RenderTerrainDetail 1 2
36VertexShaderEnable 1 1 36VertexShaderEnable 1 1
37RenderTextureMemoryMultiple 1 1.0
37 38
38// 39//
39// Class 0 Hardware (Unknown or just old) 40// Class 0 Hardware (Unknown or just old)
diff --git a/linden/indra/newview/files.lst b/linden/indra/newview/files.lst
index 0f07254..f2603d8 100644
--- a/linden/indra/newview/files.lst
+++ b/linden/indra/newview/files.lst
@@ -1,4 +1,3 @@
1newview/head.cpp
2newview/llagent.cpp 1newview/llagent.cpp
3newview/llagentdata.cpp 2newview/llagentdata.cpp
4newview/llagentpilot.cpp 3newview/llagentpilot.cpp
@@ -10,7 +9,6 @@ newview/llbbox.cpp
10newview/llbox.cpp 9newview/llbox.cpp
11newview/llcallbacklist.cpp 10newview/llcallbacklist.cpp
12newview/llcallingcard.cpp 11newview/llcallingcard.cpp
13newview/llcameraview.cpp
14newview/llcaphttpsender.cpp 12newview/llcaphttpsender.cpp
15newview/llchatbar.cpp 13newview/llchatbar.cpp
16newview/llclassifiedinfo.cpp 14newview/llclassifiedinfo.cpp
@@ -19,23 +17,24 @@ newview/llcloud.cpp
19newview/llcolorscheme.cpp 17newview/llcolorscheme.cpp
20newview/llcolorswatch.cpp 18newview/llcolorswatch.cpp
21newview/llcommandhandler.cpp 19newview/llcommandhandler.cpp
20newview/llcommandlineparser.cpp
22newview/llcompass.cpp 21newview/llcompass.cpp
23newview/llcompilequeue.cpp 22newview/llcompilequeue.cpp
24newview/llconfirmationmanager.cpp 23newview/llconfirmationmanager.cpp
25newview/llconsole.cpp 24newview/llconsole.cpp
26newview/llcontainerview.cpp 25newview/llcontainerview.cpp
27newview/llcontroldef.cpp
28newview/llcubemap.cpp 26newview/llcubemap.cpp
29newview/llcurrencyuimanager.cpp 27newview/llcurrencyuimanager.cpp
30newview/llcylinder.cpp 28newview/llcylinder.cpp
31newview/lldebugmessagebox.cpp 29newview/lldebugmessagebox.cpp
32newview/lldebugview.cpp 30newview/lldebugview.cpp
31newview/lldelayedgestureerror.cpp
33newview/lldirpicker.cpp 32newview/lldirpicker.cpp
34newview/lldrawable.cpp 33newview/lldrawable.cpp
34newview/lldrawpool.cpp
35newview/lldrawpoolalpha.cpp 35newview/lldrawpoolalpha.cpp
36newview/lldrawpoolavatar.cpp 36newview/lldrawpoolavatar.cpp
37newview/lldrawpoolbump.cpp 37newview/lldrawpoolbump.cpp
38newview/lldrawpool.cpp
39newview/lldrawpoolground.cpp 38newview/lldrawpoolground.cpp
40newview/lldrawpoolsimple.cpp 39newview/lldrawpoolsimple.cpp
41newview/lldrawpoolsky.cpp 40newview/lldrawpoolsky.cpp
@@ -64,10 +63,11 @@ newview/llfloateravatarpicker.cpp
64newview/llfloateravatartextures.cpp 63newview/llfloateravatartextures.cpp
65newview/llfloaterbuildoptions.cpp 64newview/llfloaterbuildoptions.cpp
66newview/llfloaterbump.cpp 65newview/llfloaterbump.cpp
67newview/llfloaterbuycontents.cpp
68newview/llfloaterbuy.cpp 66newview/llfloaterbuy.cpp
67newview/llfloaterbuycontents.cpp
69newview/llfloaterbuycurrency.cpp 68newview/llfloaterbuycurrency.cpp
70newview/llfloaterbuyland.cpp 69newview/llfloaterbuyland.cpp
70newview/llfloatercamera.cpp
71newview/llfloaterchat.cpp 71newview/llfloaterchat.cpp
72newview/llfloaterchatterbox.cpp 72newview/llfloaterchatterbox.cpp
73newview/llfloaterclassified.cpp 73newview/llfloaterclassified.cpp
@@ -88,8 +88,10 @@ newview/llfloatergroups.cpp
88newview/llfloaterhardwaresettings.cpp 88newview/llfloaterhardwaresettings.cpp
89newview/llfloaterhtml.cpp 89newview/llfloaterhtml.cpp
90newview/llfloaterhtmlhelp.cpp 90newview/llfloaterhtmlhelp.cpp
91newview/llfloaterhud.cpp
91newview/llfloaterimagepreview.cpp 92newview/llfloaterimagepreview.cpp
92newview/llfloaterinspect.cpp 93newview/llfloaterinspect.cpp
94newview/llfloaterjoystick.cpp
93newview/llfloaterlagmeter.cpp 95newview/llfloaterlagmeter.cpp
94newview/llfloaterland.cpp 96newview/llfloaterland.cpp
95newview/llfloaterlandholdings.cpp 97newview/llfloaterlandholdings.cpp
@@ -109,8 +111,10 @@ newview/llfloaterregioninfo.cpp
109newview/llfloaterreleasemsg.cpp 111newview/llfloaterreleasemsg.cpp
110newview/llfloaterreporter.cpp 112newview/llfloaterreporter.cpp
111newview/llfloaterscriptdebug.cpp 113newview/llfloaterscriptdebug.cpp
114newview/llfloatersettingsdebug.cpp
112newview/llfloatersellland.cpp 115newview/llfloatersellland.cpp
113newview/llfloatersnapshot.cpp 116newview/llfloatersnapshot.cpp
117newview/llfloaterstats.cpp
114newview/llfloatertelehub.cpp 118newview/llfloatertelehub.cpp
115newview/llfloatertest.cpp 119newview/llfloatertest.cpp
116newview/llfloatertools.cpp 120newview/llfloatertools.cpp
@@ -118,7 +122,7 @@ newview/llfloatertopobjects.cpp
118newview/llfloatertos.cpp 122newview/llfloatertos.cpp
119newview/llfloaterurldisplay.cpp 123newview/llfloaterurldisplay.cpp
120newview/llfloaterurlentry.cpp 124newview/llfloaterurlentry.cpp
121newview/llfloatervoicewizard.cpp 125newview/llfloatervoicedevicesettings.cpp
122newview/llfloaterwater.cpp 126newview/llfloaterwater.cpp
123newview/llfloaterwindlight.cpp 127newview/llfloaterwindlight.cpp
124newview/llfloaterworldmap.cpp 128newview/llfloaterworldmap.cpp
@@ -135,8 +139,8 @@ newview/llgroupmgr.cpp
135newview/llgroupnotify.cpp 139newview/llgroupnotify.cpp
136newview/llhippo.cpp 140newview/llhippo.cpp
137newview/llhoverview.cpp 141newview/llhoverview.cpp
138newview/llhudeffectbeam.cpp
139newview/llhudeffect.cpp 142newview/llhudeffect.cpp
143newview/llhudeffectbeam.cpp
140newview/llhudeffectlookat.cpp 144newview/llhudeffectlookat.cpp
141newview/llhudeffectpointat.cpp 145newview/llhudeffectpointat.cpp
142newview/llhudeffecttrail.cpp 146newview/llhudeffecttrail.cpp
@@ -224,8 +228,8 @@ newview/llpostprocess.cpp
224newview/llprefschat.cpp 228newview/llprefschat.cpp
225newview/llprefsim.cpp 229newview/llprefsim.cpp
226newview/llprefsvoice.cpp 230newview/llprefsvoice.cpp
227newview/llpreviewanim.cpp
228newview/llpreview.cpp 231newview/llpreview.cpp
232newview/llpreviewanim.cpp
229newview/llpreviewgesture.cpp 233newview/llpreviewgesture.cpp
230newview/llpreviewlandmark.cpp 234newview/llpreviewlandmark.cpp
231newview/llpreviewnotecard.cpp 235newview/llpreviewnotecard.cpp
@@ -239,7 +243,7 @@ newview/llsavedsettingsglue.cpp
239newview/llselectmgr.cpp 243newview/llselectmgr.cpp
240newview/llsky.cpp 244newview/llsky.cpp
241newview/llspatialpartition.cpp 245newview/llspatialpartition.cpp
242newview/llsphere.cpp 246newview/llrendersphere.cpp
243newview/llsprite.cpp 247newview/llsprite.cpp
244newview/llsrv.cpp 248newview/llsrv.cpp
245newview/llstartup.cpp 249newview/llstartup.cpp
@@ -254,10 +258,10 @@ newview/lltexturecache.cpp
254newview/lltexturectrl.cpp 258newview/lltexturectrl.cpp
255newview/lltexturefetch.cpp 259newview/lltexturefetch.cpp
256newview/lltextureview.cpp 260newview/lltextureview.cpp
261newview/lltool.cpp
257newview/lltoolbar.cpp 262newview/lltoolbar.cpp
258newview/lltoolbrush.cpp 263newview/lltoolbrush.cpp
259newview/lltoolcomp.cpp 264newview/lltoolcomp.cpp
260newview/lltool.cpp
261newview/lltooldraganddrop.cpp 265newview/lltooldraganddrop.cpp
262newview/lltoolface.cpp 266newview/lltoolface.cpp
263newview/lltoolfocus.cpp 267newview/lltoolfocus.cpp
@@ -295,11 +299,11 @@ newview/llviewergesture.cpp
295newview/llviewerimage.cpp 299newview/llviewerimage.cpp
296newview/llviewerimagelist.cpp 300newview/llviewerimagelist.cpp
297newview/llviewerinventory.cpp 301newview/llviewerinventory.cpp
298newview/llviewerjointattachment.cpp
299newview/llviewerjoint.cpp 302newview/llviewerjoint.cpp
303newview/llviewerjointattachment.cpp
300newview/llviewerjointmesh.cpp 304newview/llviewerjointmesh.cpp
301newview/llviewerjointmesh_sse2.cpp
302newview/llviewerjointmesh_sse.cpp 305newview/llviewerjointmesh_sse.cpp
306newview/llviewerjointmesh_sse2.cpp
303newview/llviewerjointmesh_vec.cpp 307newview/llviewerjointmesh_vec.cpp
304newview/llviewerjoystick.cpp 308newview/llviewerjoystick.cpp
305newview/llviewerkeyboard.cpp 309newview/llviewerkeyboard.cpp
@@ -323,7 +327,6 @@ newview/llviewerstats.cpp
323newview/llviewertexteditor.cpp 327newview/llviewertexteditor.cpp
324newview/llviewertextureanim.cpp 328newview/llviewertextureanim.cpp
325newview/llviewerthrottle.cpp 329newview/llviewerthrottle.cpp
326newview/llvieweruictrlfactory.cpp
327newview/llviewervisualparam.cpp 330newview/llviewervisualparam.cpp
328newview/llviewerwindow.cpp 331newview/llviewerwindow.cpp
329newview/llvlcomposition.cpp 332newview/llvlcomposition.cpp
@@ -349,8 +352,8 @@ newview/llwaterparammanager.cpp
349newview/llwaterparamset.cpp 352newview/llwaterparamset.cpp
350newview/llwearable.cpp 353newview/llwearable.cpp
351newview/llwearablelist.cpp 354newview/llwearablelist.cpp
352newview/llwebbrowserctrl.cpp
353newview/llweb.cpp 355newview/llweb.cpp
356newview/llwebbrowserctrl.cpp
354newview/llwind.cpp 357newview/llwind.cpp
355newview/llwindebug.cpp 358newview/llwindebug.cpp
356newview/llwlanimator.cpp 359newview/llwlanimator.cpp
@@ -361,6 +364,5 @@ newview/llworld.cpp
361newview/llworldmap.cpp 364newview/llworldmap.cpp
362newview/llworldmapview.cpp 365newview/llworldmapview.cpp
363newview/llxmlrpctransaction.cpp 366newview/llxmlrpctransaction.cpp
364newview/moviemaker.cpp
365newview/noise.cpp 367newview/noise.cpp
366newview/pipeline.cpp 368newview/pipeline.cpp
diff --git a/linden/indra/newview/gpu_table.txt b/linden/indra/newview/gpu_table.txt
index c75edc8..842e1af 100644
--- a/linden/indra/newview/gpu_table.txt
+++ b/linden/indra/newview/gpu_table.txt
@@ -22,12 +22,16 @@
223Dfx .*3Dfx.* 0 0 223Dfx .*3Dfx.* 0 0
233Dlabs .*3Dlabs.* 0 0 233Dlabs .*3Dlabs.* 0 0
24ATI 3D-Analyze .*ATI.*3D-Analyze.* 0 0 24ATI 3D-Analyze .*ATI.*3D-Analyze.* 0 0
25ATI All-in-Wonder PCI-E .*ATI.*All-in-Wonder.*PCI-E.* 1 1 25ATI All-in-Wonder 7500 .*ATI.*All-in-Wonder 75.* 0 1
26ATI All-in-Wonder 8500 .*ATI.*All-in-Wonder 85.* 0 1
27ATI All-in-Wonder 9200 .*ATI.*All-in-Wonder 92.* 0 1
26ATI All-in-Wonder 9xxx .*ATI.*All-in-Wonder 9.* 1 1 28ATI All-in-Wonder 9xxx .*ATI.*All-in-Wonder 9.* 1 1
27ATI All-in-Wonder X600 .*ATI.*All-in-Wonder X6.* 1 1 29ATI All-in-Wonder X600 .*ATI.*All-in-Wonder X6.* 1 1
28ATI All-in-Wonder X800 .*ATI.*All-in-Wonder X8.* 2 1 30ATI All-in-Wonder X800 .*ATI.*All-in-Wonder X8.* 2 1
29ATI All-in-Wonder X1800 .*ATI.*All-in-Wonder X18.* 3 1 31ATI All-in-Wonder X1800 .*ATI.*All-in-Wonder X18.* 3 1
30ATI All-in-Wonder X1900 .*ATI.*All-in-Wonder X19.* 3 1 32ATI All-in-Wonder X1900 .*ATI.*All-in-Wonder X19.* 3 1
33ATI All-in-Wonder PCI-E .*ATI.*All-in-Wonder.*PCI-E.* 1 1
34ATI All-in-Wonder Radeon .*ATI.*All-in-Wonder Radeon.* 0 1
31ATI ASUS A9xxx .*ATI.*ASUS.*A9.* 1 1 35ATI ASUS A9xxx .*ATI.*ASUS.*A9.* 1 1
32ATI ASUS AH24xx .*ATI.*ASUS.*AH24.* 1 1 36ATI ASUS AH24xx .*ATI.*ASUS.*AH24.* 1 1
33ATI ASUS AH26xx .*ATI.*ASUS.*AH26.* 3 1 37ATI ASUS AH26xx .*ATI.*ASUS.*AH26.* 3 1
@@ -52,6 +56,8 @@ ATI M52 .*ATI.*M52.* 1 1
52ATI M54 .*ATI.*M54.* 1 1 56ATI M54 .*ATI.*M54.* 1 1
53ATI M56 .*ATI.*M56.* 1 1 57ATI M56 .*ATI.*M56.* 1 1
54ATI M76 .*ATI.*M76.* 3 1 58ATI M76 .*ATI.*M76.* 3 1
59ATI Mobility Radeon 7xxx .*ATI.*Mobility.*Radeon 7.* 0 1
60ATI Mobility Radeon 8xxx .*ATI.*Mobility.*Radeon 8.* 0 1
55ATI Mobility Radeon 9800 .*ATI.*Mobility.*98.* 1 1 61ATI Mobility Radeon 9800 .*ATI.*Mobility.*98.* 1 1
56ATI Mobility Radeon 9700 .*ATI.*Mobility.*97.* 1 1 62ATI Mobility Radeon 9700 .*ATI.*Mobility.*97.* 1 1
57ATI Mobility Radeon 9600 .*ATI.*Mobility.*96.* 0 1 63ATI Mobility Radeon 9600 .*ATI.*Mobility.*96.* 0 1
@@ -70,8 +76,8 @@ ATI Radeon HD 3400 .*ATI.*Radeon HD 34.* 1 1
70ATI Radeon HD 3600 .*ATI.*Radeon HD 36.* 3 1 76ATI Radeon HD 3600 .*ATI.*Radeon HD 36.* 3 1
71ATI Radeon HD 3800 .*ATI.*Radeon HD 38.* 3 1 77ATI Radeon HD 3800 .*ATI.*Radeon HD 38.* 3 1
72ATI Radeon OpenGL .*ATI.*Radeon OpenGL.* 0 0 78ATI Radeon OpenGL .*ATI.*Radeon OpenGL.* 0 0
73ATI Radeon 7000 .*ATI.*Radeon 7.* 0 1 79ATI Radeon 7xxx .*ATI.*Radeon 7.* 0 1
74ATI Radeon 8000 .*ATI.*Radeon 8.* 0 1 80ATI Radeon 8xxx .*ATI.*Radeon 8.* 0 1
75ATI Radeon 9000 .*ATI.*Radeon 90.* 0 1 81ATI Radeon 9000 .*ATI.*Radeon 90.* 0 1
76ATI Radeon 9100 .*ATI.*Radeon 91.* 0 1 82ATI Radeon 9100 .*ATI.*Radeon 91.* 0 1
77ATI Radeon 9200 .*ATI.*Radeon 92.* 0 1 83ATI Radeon 9200 .*ATI.*Radeon 92.* 0 1
diff --git a/linden/indra/newview/head.cpp b/linden/indra/newview/head.cpp
deleted file mode 100644
index 54047cb..0000000
--- a/linden/indra/newview/head.cpp
+++ /dev/null
@@ -1,153 +0,0 @@
1/**
2 * @file head.cpp
3 * @brief Head class 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// implementation of a class that models the motion of a human head.
33// The physics aren't quite right, but it will suffice for right now.
34
35#include "llviewerprecompiledheaders.h"
36
37#include "head.h"
38
39#ifndef PI
40 #define PI ((F32) 3.14159265358979323846264338327)
41#endif
42
43// The friction force of the neck is modeled as:
44// friction = -E*phi_dot - F*phi_dot (for positive phi_dot)
45#define E1 0.75
46#define F1 0.0
47
48// TODO -- use the other PI defined in the math libs somewhere.
49
50// --------------------------------------------------
51// Misc. function delclarations...
52// --------------------------------------------------
53F32 phi_spring(F32 phi, F32 theta);
54F32 theta_spring(F32 theta, F32 phi);
55
56
57// --------------------------------------------------
58// Class Head member functions...
59// --------------------------------------------------
60
61Head::Head() {
62 mass = 1.0f;
63 radius = 1.0f;
64 inertia = 2.0f * mass * radius * radius / 5.0f;
65 phi = 0.0f;
66 theta = 0.0f;
67 //gettimeofday(&t, &tz);
68}
69
70Head::Head(F32 m, F32 r) {
71 mass = m;
72 radius = r;
73 inertia = 2.0f * mass * radius * radius / 5.0f;
74 phi = 0.0f;
75 theta = 0.0f;
76 //gettimeofday(&t, &tz);
77}
78
79F32 Head::setMass(F32 m) {
80 mass = m;
81 inertia = 2.0f * mass * radius * radius / 5.0f;
82 return mass;
83}
84
85F32 Head::setRadius(F32 r) {
86 radius = r;
87 inertia = 2.0f * mass * radius * radius / 5.0f;
88 return radius;
89}
90
91F32 Head::getMass() { return mass; }
92F32 Head::getRadius() { return radius; }
93F32 Head::getInertia() { return inertia; }
94
95void Head::propagate(F32 horizontal_force, F32 vertical_force, F32 dt) {
96 //struct timeval t1;
97 //F32 dt, temp;
98 F32 phi_torque, theta_torque;
99 F32 phi_dot, theta_dot;
100
101 //gettimeofday(&t1, &tz);
102 //dt = ((t1.tv_sec - t.tv_sec) * 1000000.0 + (t1.tv_usec - t.tv_usec)) / 1000000.0;
103 //dt = 0.033; // This is a kluge to prevent instabilities when using a stepper
104
105 // Calculate the return forces...
106 // Note: horizontal_force is positive toward right, so it's resultant torque
107 // is negative, since the phi spin angle is out the top of the head (using
108 // right-hand rule).
109 phi_torque = radius * (phi_spring(phi, theta) - horizontal_force);
110 theta_torque = radius * (theta_spring(phi, theta) + vertical_force);
111
112 // Propagate phi...
113 phi_dot = dt * phi_torque / inertia;
114
115 phi += dt * phi_dot;
116 if (phi >= PI/2.0f) {
117 phi = PI/2.0f;
118 }
119 else if (phi <= -PI/2.0f) {
120 phi = -PI/2.0f;
121 }
122
123 // Propagate theta...
124 theta_dot = dt * theta_torque / inertia;
125 theta += dt * theta_dot;
126 if (theta >= PI/2.0f) {
127 theta = PI/2.0f;
128 }
129 else if (theta <= -PI/2.0f) {
130 theta = -PI/2.0f;
131 }
132
133 //t = t1;
134 return;
135}
136
137
138F32 phi_spring(F32 phi, F32 theta) {
139// The srping force is linear with -phi and the magnitude of theta.
140 F32 phi_force;
141 phi_force = - 30 * phi;
142 phi_force = phi_force * (1.0f + (F32)fabs(theta) / PI);
143 return phi_force;
144}
145
146
147F32 theta_spring(F32 phi, F32 theta) {
148 return phi_spring(theta, phi);
149}
150
151
152
153
diff --git a/linden/indra/newview/installers/windows/installer_template.nsi b/linden/indra/newview/installers/windows/installer_template.nsi
index 0566b7e..8db336f 100644
--- a/linden/indra/newview/installers/windows/installer_template.nsi
+++ b/linden/indra/newview/installers/windows/installer_template.nsi
@@ -61,14 +61,6 @@ ShowInstDetails nevershow ; no details, no "show" button
61SetOverwrite on ; stomp files by default 61SetOverwrite on ; stomp files by default
62AutoCloseWindow true ; after all files install, close window 62AutoCloseWindow true ; after all files install, close window
63 63
64!ifdef UPDATE
65LicenseText $(LicenseDescUpdate) $(LicenseDescNext)
66!else
67LicenseText $(LicenseDescSetup) $(LicenseDescNext)
68!endif
69
70LicenseData "releasenotes.txt"
71
72InstallDir "$PROGRAMFILES\${INSTNAME}" 64InstallDir "$PROGRAMFILES\${INSTNAME}"
73InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "" 65InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" ""
74!ifdef UPDATE 66!ifdef UPDATE
@@ -944,19 +936,19 @@ Function .onInit
944 936
945 ; generate language ID that will be used as a command line arg 937 ; generate language ID that will be used as a command line arg
946 StrCmp $LANGUAGE "1042" 0 +3 938 StrCmp $LANGUAGE "1042" 0 +3
947 StrCpy $LANGFLAGS " -set SystemLanguage ko" 939 StrCpy $LANGFLAGS " --set SystemLanguage ko"
948 Goto EndOfFunc 940 Goto EndOfFunc
949 941
950 StrCmp $LANGUAGE "1041" 0 +3 942 StrCmp $LANGUAGE "1041" 0 +3
951 StrCpy $LANGFLAGS " -set SystemLanguage ja" 943 StrCpy $LANGFLAGS " --set SystemLanguage ja"
952 Goto EndOfFunc 944 Goto EndOfFunc
953 945
954 StrCmp $LANGUAGE "1031" 0 +3 946 StrCmp $LANGUAGE "1031" 0 +3
955 StrCpy $LANGFLAGS " -set SystemLanguage de" 947 StrCpy $LANGFLAGS " --set SystemLanguage de"
956 Goto EndOfFunc 948 Goto EndOfFunc
957 949
958 StrCmp $LANGUAGE "1033" 0 +3 950 StrCmp $LANGUAGE "1033" 0 +3
959 StrCpy $LANGFLAGS " -set SystemLanguage en-us" 951 StrCpy $LANGFLAGS " --set SystemLanguage en-us"
960 Goto EndOfFunc 952 Goto EndOfFunc
961 953
962 EndOfFunc: 954 EndOfFunc:
diff --git a/linden/indra/newview/installers/windows/lang_de.nsi b/linden/indra/newview/installers/windows/lang_de.nsi
index abb0c63..c410128 100644
--- a/linden/indra/newview/installers/windows/lang_de.nsi
+++ b/linden/indra/newview/installers/windows/lang_de.nsi
@@ -1,57 +1,57 @@
1; First is default 1; First is default
2LoadLanguageFile "${NSISDIR}\Contrib\Language files\German.nlf" 2LoadLanguageFile "${NSISDIR}\Contrib\Language files\German.nlf"
3 3
4; subtitle on license text caption (setup new version or update current one 4; subtitle on license text caption (setup new version or update current one
5LangString LicenseSubTitleUpdate ${LANG_GERMAN} " Update" 5LangString LicenseSubTitleUpdate ${LANG_GERMAN} " Update"
6LangString LicenseSubTitleSetup ${LANG_GERMAN} " Setup" 6LangString LicenseSubTitleSetup ${LANG_GERMAN} " Setup"
7 7
8; description on license page 8; description on license page
9LangString LicenseDescUpdate ${LANG_GERMAN} "Dieses Paket wird das bereits installierte Second Life mit Version ${VERSION_LONG}. ersetzen." 9LangString LicenseDescUpdate ${LANG_GERMAN} "Dieses Paket wird das bereits installierte Second Life mit Version ${VERSION_LONG}. ersetzen."
10LangString LicenseDescSetup ${LANG_GERMAN} "Dieses Paket wird Second Life auf Ihrem Computer installieren." 10LangString LicenseDescSetup ${LANG_GERMAN} "Dieses Paket wird Second Life auf Ihrem Computer installieren."
11LangString LicenseDescNext ${LANG_GERMAN} "Weiter" 11LangString LicenseDescNext ${LANG_GERMAN} "Weiter"
12 12
13; installation directory text 13; installation directory text
14LangString DirectoryChooseTitle ${LANG_GERMAN} "Installations-Ordner" 14LangString DirectoryChooseTitle ${LANG_GERMAN} "Installations-Ordner"
15LangString DirectoryChooseUpdate ${LANG_GERMAN} "Wählen Sie den Second Life Ordner für dieses Update:" 15LangString DirectoryChooseUpdate ${LANG_GERMAN} "Wählen Sie den Second Life Ordner für dieses Update:"
16LangString DirectoryChooseSetup ${LANG_GERMAN} "Pfad in dem Second Life installieren werden soll:" 16LangString DirectoryChooseSetup ${LANG_GERMAN} "Pfad in dem Second Life installieren werden soll:"
17 17
18; CheckStartupParams message box 18; CheckStartupParams message box
19LangString CheckStartupParamsMB ${LANG_GERMAN} "Konnte Programm '$INSTPROG' nicht finden. Stilles Update fehlgeschlagen." 19LangString CheckStartupParamsMB ${LANG_GERMAN} "Konnte Programm '$INSTPROG' nicht finden. Stilles Update fehlgeschlagen."
20 20
21; installation success dialog 21; installation success dialog
22LangString InstSuccesssQuestion ${LANG_GERMAN} "Second Life starten?" 22LangString InstSuccesssQuestion ${LANG_GERMAN} "Second Life starten?"
23 23
24; remove old NSIS version 24; remove old NSIS version
25LangString RemoveOldNSISVersion ${LANG_GERMAN} "Überprüfe alte Version ..." 25LangString RemoveOldNSISVersion ${LANG_GERMAN} "Überprüfe alte Version ..."
26 26
27; check windows version 27; check windows version
28LangString CheckWindowsVersionDP ${LANG_GERMAN} "Überprüfung der Windows Version ..." 28LangString CheckWindowsVersionDP ${LANG_GERMAN} "Überprüfung der Windows Version ..."
29LangString CheckWindowsVersionMB ${LANG_GERMAN} 'Second Life unterstützt nur Windows XP, Windows 2000 und Mac OS X.$\n$\nDer Versuch es auf Windows $R0 zu installieren, könnte zu unvorhersehbaren Abstürzen und Datenverlust führen.$\n$\nTrotzdem installieren?' 29LangString CheckWindowsVersionMB ${LANG_GERMAN} 'Second Life unterstützt nur Windows XP, Windows 2000 und Mac OS X.$\n$\nDer Versuch es auf Windows $R0 zu installieren, könnte zu unvorhersehbaren Abstürzen und Datenverlust führen.$\n$\nTrotzdem installieren?'
30 30
31; checkifadministrator function (install) 31; checkifadministrator function (install)
32LangString CheckAdministratorInstDP ${LANG_GERMAN} "Überprüfung der Installations-Berechtigungen ..." 32LangString CheckAdministratorInstDP ${LANG_GERMAN} "Überprüfung der Installations-Berechtigungen ..."
33LangString CheckAdministratorInstMB ${LANG_GERMAN} 'Sie besitzen ungenügende Berechtigungen.$\nSie müssen ein "administrator" sein, um Second Life installieren zu können.' 33LangString CheckAdministratorInstMB ${LANG_GERMAN} 'Sie besitzen ungenügende Berechtigungen.$\nSie müssen ein "administrator" sein, um Second Life installieren zu können.'
34 34
35; checkifadministrator function (uninstall) 35; checkifadministrator function (uninstall)
36LangString CheckAdministratorUnInstDP ${LANG_GERMAN} "Überprüfung der Entfernungs-Berechtigungen ..." 36LangString CheckAdministratorUnInstDP ${LANG_GERMAN} "Überprüfung der Entfernungs-Berechtigungen ..."
37LangString CheckAdministratorUnInstMB ${LANG_GERMAN} 'Sie besitzen ungenügende Berechtigungen.$\nSie müssen ein "administrator" sein, um Second Life entfernen zu können..' 37LangString CheckAdministratorUnInstMB ${LANG_GERMAN} 'Sie besitzen ungenügende Berechtigungen.$\nSie müssen ein "administrator" sein, um Second Life entfernen zu können..'
38 38
39; checkifalreadycurrent 39; checkifalreadycurrent
40LangString CheckIfCurrentMB ${LANG_GERMAN} "Anscheinend ist Second Life ${VERSION_LONG} bereits installiert.$\n$\nWürden Sie es gerne erneut installieren?" 40LangString CheckIfCurrentMB ${LANG_GERMAN} "Anscheinend ist Second Life ${VERSION_LONG} bereits installiert.$\n$\nWürden Sie es gerne erneut installieren?"
41 41
42; closesecondlife function (install) 42; closesecondlife function (install)
43LangString CloseSecondLifeInstDP ${LANG_GERMAN} "Warten auf die Beendigung von Second Life ..." 43LangString CloseSecondLifeInstDP ${LANG_GERMAN} "Warten auf die Beendigung von Second Life ..."
44LangString CloseSecondLifeInstMB ${LANG_GERMAN} "Second Life kann nicht installiert oder ersetzt werden, wenn es bereits läuft.$\n$\nBeenden Sie, was Sie gerade tun und klicken Sie OK, um Second Life zu beenden.$\nKlicken Sie CANCEL, um die Installation abzubrechen." 44LangString CloseSecondLifeInstMB ${LANG_GERMAN} "Second Life kann nicht installiert oder ersetzt werden, wenn es bereits läuft.$\n$\nBeenden Sie, was Sie gerade tun und klicken Sie OK, um Second Life zu beenden.$\nKlicken Sie CANCEL, um die Installation abzubrechen."
45 45
46; closesecondlife function (uninstall) 46; closesecondlife function (uninstall)
47LangString CloseSecondLifeUnInstDP ${LANG_GERMAN} "Warten auf die Beendigung von Second Life ..." 47LangString CloseSecondLifeUnInstDP ${LANG_GERMAN} "Warten auf die Beendigung von Second Life ..."
48LangString CloseSecondLifeUnInstMB ${LANG_GERMAN} "Second Life kann nicht entfernt werden, wenn es bereits läuft.$\n$\nBeenden Sie, was Sie gerade tun und klicken Sie OK, um Second Life zu beenden.$\nKlicken Sie CANCEL, um abzubrechen." 48LangString CloseSecondLifeUnInstMB ${LANG_GERMAN} "Second Life kann nicht entfernt werden, wenn es bereits läuft.$\n$\nBeenden Sie, was Sie gerade tun und klicken Sie OK, um Second Life zu beenden.$\nKlicken Sie CANCEL, um abzubrechen."
49 49
50; removecachefiles 50; removecachefiles
51LangString RemoveCacheFilesDP ${LANG_GERMAN} "Löschung aller Cache Dateien in Dokumente und Einstellungen." 51LangString RemoveCacheFilesDP ${LANG_GERMAN} "Löschung aller Cache Dateien in Dokumente und Einstellungen."
52 52
53; delete program files 53; delete program files
54LangString DeleteProgramFilesMB ${LANG_GERMAN} "Es existieren weiterhin Dateien in Ihrem SecondLife Programm Ordner.$\n$\nDies sind möglicherweise Dateien, die sie modifiziert oder bewegt haben:$\n$INSTDIR$\n$\nMöchten Sie diese ebenfalls löschen?" 54LangString DeleteProgramFilesMB ${LANG_GERMAN} "Es existieren weiterhin Dateien in Ihrem SecondLife Programm Ordner.$\n$\nDies sind möglicherweise Dateien, die sie modifiziert oder bewegt haben:$\n$INSTDIR$\n$\nMöchten Sie diese ebenfalls löschen?"
55 55
56; uninstall text 56; uninstall text
57LangString UninstallTextMsg ${LANG_GERMAN} "Dies wird Second Life ${VERSION_LONG} von Ihrem System entfernen." 57LangString UninstallTextMsg ${LANG_GERMAN} "Dies wird Second Life ${VERSION_LONG} von Ihrem System entfernen."
diff --git a/linden/indra/newview/installers/windows/lang_en-us.nsi b/linden/indra/newview/installers/windows/lang_en-us.nsi
index c26af12..218f1c6 100644
--- a/linden/indra/newview/installers/windows/lang_en-us.nsi
+++ b/linden/indra/newview/installers/windows/lang_en-us.nsi
@@ -1,57 +1,52 @@
1; First is default 1; First is default
2LoadLanguageFile "${NSISDIR}\Contrib\Language files\English.nlf" 2LoadLanguageFile "${NSISDIR}\Contrib\Language files\English.nlf"
3 3
4; subtitle on license text caption 4; subtitle on license text caption
5LangString LicenseSubTitleUpdate ${LANG_ENGLISH} " Update" 5LangString LicenseSubTitleUpdate ${LANG_ENGLISH} " Update"
6LangString LicenseSubTitleSetup ${LANG_ENGLISH} " Setup" 6LangString LicenseSubTitleSetup ${LANG_ENGLISH} " Setup"
7 7
8; description on license page 8; installation directory text
9LangString LicenseDescUpdate ${LANG_ENGLISH} "This package will update Second Life to version ${VERSION_LONG}.(XXX)" 9LangString DirectoryChooseTitle ${LANG_ENGLISH} "Installation Directory"
10LangString LicenseDescSetup ${LANG_ENGLISH} "This package will install Second Life on your computer." 10LangString DirectoryChooseUpdate ${LANG_ENGLISH} "Select the Second Life directory to update to version ${VERSION_LONG}.(XXX):"
11LangString LicenseDescNext ${LANG_ENGLISH} "Next" 11LangString DirectoryChooseSetup ${LANG_ENGLISH} "Select the directory to install Second Life in:"
12 12
13; installation directory text 13; CheckStartupParams message box
14LangString DirectoryChooseTitle ${LANG_ENGLISH} "Installation Directory" 14LangString CheckStartupParamsMB ${LANG_ENGLISH} "Could not find the program '$INSTPROG'. Silent update failed."
15LangString DirectoryChooseUpdate ${LANG_ENGLISH} "Select the Second Life directory to update:" 15
16LangString DirectoryChooseSetup ${LANG_ENGLISH} "Select the directory to install Second Life in:" 16; installation success dialog
17 17LangString InstSuccesssQuestion ${LANG_ENGLISH} "Start Second Life now?"
18; CheckStartupParams message box 18
19LangString CheckStartupParamsMB ${LANG_ENGLISH} "Could not find the program '$INSTPROG'. Silent update failed." 19; remove old NSIS version
20 20LangString RemoveOldNSISVersion ${LANG_ENGLISH} "Checking for old version..."
21; installation success dialog 21
22LangString InstSuccesssQuestion ${LANG_ENGLISH} "Start Second Life now?" 22; check windows version
23 23LangString CheckWindowsVersionDP ${LANG_ENGLISH} "Checking Windows version..."
24; remove old NSIS version 24LangString CheckWindowsVersionMB ${LANG_ENGLISH} 'Second Life only supports Windows XP, Windows 2000, and Mac OS X.$\n$\nAttempting to install on Windows $R0 can result in crashes and data loss.$\n$\nInstall anyway?'
25LangString RemoveOldNSISVersion ${LANG_ENGLISH} "Checking for old version..." 25
26 26; checkifadministrator function (install)
27; check windows version 27LangString CheckAdministratorInstDP ${LANG_ENGLISH} "Checking for permission to install..."
28LangString CheckWindowsVersionDP ${LANG_ENGLISH} "Checking Windows version..." 28LangString CheckAdministratorInstMB ${LANG_ENGLISH} 'You appear to be using a "limited" account.$\nYou must be an "administrator" to install Second Life.'
29LangString CheckWindowsVersionMB ${LANG_ENGLISH} 'Second Life only supports Windows XP, Windows 2000, and Mac OS X.$\n$\nAttempting to install on Windows $R0 can result in crashes and data loss.$\n$\nInstall anyway?' 29
30 30; checkifadministrator function (uninstall)
31; checkifadministrator function (install) 31LangString CheckAdministratorUnInstDP ${LANG_ENGLISH} "Checking for permission to uninstall..."
32LangString CheckAdministratorInstDP ${LANG_ENGLISH} "Checking for permission to install..." 32LangString CheckAdministratorUnInstMB ${LANG_ENGLISH} 'You appear to be using a "limited" account.$\nYou must be an "administrator" to uninstall Second Life.'
33LangString CheckAdministratorInstMB ${LANG_ENGLISH} 'You appear to be using a "limited" account.$\nYou must be an "administrator" to install Second Life.' 33
34 34; checkifalreadycurrent
35; checkifadministrator function (uninstall) 35LangString CheckIfCurrentMB ${LANG_ENGLISH} "It appears that Second Life ${VERSION_LONG} is already installed.$\n$\nWould you like to install it again?"
36LangString CheckAdministratorUnInstDP ${LANG_ENGLISH} "Checking for permission to uninstall..." 36
37LangString CheckAdministratorUnInstMB ${LANG_ENGLISH} 'You appear to be using a "limited" account.$\nYou must be an "administrator" to uninstall Second Life.' 37; closesecondlife function (install)
38 38LangString CloseSecondLifeInstDP ${LANG_ENGLISH} "Waiting for Second Life to shut down..."
39; checkifalreadycurrent 39LangString CloseSecondLifeInstMB ${LANG_ENGLISH} "Second Life can't be installed while it is already running.$\n$\nFinish what you're doing then select OK to close Second Life and continue.$\nSelect CANCEL to cancel installation."
40LangString CheckIfCurrentMB ${LANG_ENGLISH} "It appears that Second Life ${VERSION_LONG} is already installed.$\n$\nWould you like to install it again?" 40
41 41; closesecondlife function (uninstall)
42; closesecondlife function (install) 42LangString CloseSecondLifeUnInstDP ${LANG_ENGLISH} "Waiting for Second Life to shut down..."
43LangString CloseSecondLifeInstDP ${LANG_ENGLISH} "Waiting for Second Life to shut down..." 43LangString CloseSecondLifeUnInstMB ${LANG_ENGLISH} "Second Life can't be uninstalled while it is already running.$\n$\nFinish what you're doing then select OK to close Second Life and continue.$\nSelect CANCEL to cancel."
44LangString CloseSecondLifeInstMB ${LANG_ENGLISH} "Second Life can't be installed while it is already running.$\n$\nFinish what you're doing then select OK to close Second Life and continue.$\nSelect CANCEL to cancel installation." 44
45 45; removecachefiles
46; closesecondlife function (uninstall) 46LangString RemoveCacheFilesDP ${LANG_ENGLISH} "Deleting cache files in Documents and Settings folder"
47LangString CloseSecondLifeUnInstDP ${LANG_ENGLISH} "Waiting for Second Life to shut down..." 47
48LangString CloseSecondLifeUnInstMB ${LANG_ENGLISH} "Second Life can't be uninstalled while it is already running.$\n$\nFinish what you're doing then select OK to close Second Life and continue.$\nSelect CANCEL to cancel." 48; delete program files
49 49LangString DeleteProgramFilesMB ${LANG_ENGLISH} "There are still files in your SecondLife program directory.$\n$\nThese are possibly files you created or moved to:$\n$INSTDIR$\n$\nDo you want to remove them?"
50; removecachefiles 50
51LangString RemoveCacheFilesDP ${LANG_ENGLISH} "Deleting cache files in Documents and Settings folder" 51; uninstall text
52 52LangString UninstallTextMsg ${LANG_ENGLISH} "This will uninstall Second Life ${VERSION_LONG} from your system."
53; delete program files
54LangString DeleteProgramFilesMB ${LANG_ENGLISH} "There are still files in your SecondLife program directory.$\n$\nThese are possibly files you created or moved to:$\n$INSTDIR$\n$\nDo you want to remove them?"
55
56; uninstall text
57LangString UninstallTextMsg ${LANG_ENGLISH} "This will uninstall Second Life ${VERSION_LONG} from your system."
diff --git a/linden/indra/newview/installers/windows/lang_ja.nsi b/linden/indra/newview/installers/windows/lang_ja.nsi
index 43cb492..5e0496e 100644
--- a/linden/indra/newview/installers/windows/lang_ja.nsi
+++ b/linden/indra/newview/installers/windows/lang_ja.nsi
@@ -1,57 +1,57 @@
1; First is default 1; First is default
2LoadLanguageFile "${NSISDIR}\Contrib\Language files\Japanese.nlf" 2LoadLanguageFile "${NSISDIR}\Contrib\Language files\Japanese.nlf"
3 3
4; subtitle on license text caption 4; subtitle on license text caption
5LangString LicenseSubTitleUpdate ${LANG_JAPANESE} " ƒAƒbƒvƒf[ƒg" 5LangString LicenseSubTitleUpdate ${LANG_JAPANESE} " ƒAƒbƒvƒf[ƒg"
6LangString LicenseSubTitleSetup ${LANG_JAPANESE} " ƒZƒbƒgƒAƒbƒv" 6LangString LicenseSubTitleSetup ${LANG_JAPANESE} " ƒZƒbƒgƒAƒbƒv"
7 7
8; description on license page 8; description on license page
9LangString LicenseDescUpdate ${LANG_JAPANESE} "‚±‚̃pƒbƒP[ƒW‚̓ZƒJƒ“ƒhƒ‰ƒCƒt‚ðƒo[ƒWƒ‡ƒ“${VERSION_LONG}.‚ɃAƒbƒvƒf[ƒg‚µ‚Ü‚·B" 9LangString LicenseDescUpdate ${LANG_JAPANESE} "‚±‚̃pƒbƒP[ƒW‚̓ZƒJƒ“ƒhƒ‰ƒCƒt‚ðƒo[ƒWƒ‡ƒ“${VERSION_LONG}.‚ɃAƒbƒvƒf[ƒg‚µ‚Ü‚·B"
10LangString LicenseDescSetup ${LANG_JAPANESE} "‚±‚̃pƒbƒP[ƒW‚Í‚ ‚È‚½‚̃Rƒ“ƒsƒ…[ƒ^‚ɃZƒJƒ“ƒhƒ‰ƒCƒt‚ðƒCƒ“ƒXƒg[ƒ‹‚µ‚Ü‚·B" 10LangString LicenseDescSetup ${LANG_JAPANESE} "‚±‚̃pƒbƒP[ƒW‚Í‚ ‚È‚½‚̃Rƒ“ƒsƒ…[ƒ^‚ɃZƒJƒ“ƒhƒ‰ƒCƒt‚ðƒCƒ“ƒXƒg[ƒ‹‚µ‚Ü‚·B"
11LangString LicenseDescNext ${LANG_JAPANESE} "ŽŸ" 11LangString LicenseDescNext ${LANG_JAPANESE} "ŽŸ"
12 12
13; installation directory text 13; installation directory text
14LangString DirectoryChooseTitle ${LANG_JAPANESE} "ƒCƒ“ƒXƒg[ƒ‹EƒfƒBƒŒƒNƒgƒŠ" 14LangString DirectoryChooseTitle ${LANG_JAPANESE} "ƒCƒ“ƒXƒg[ƒ‹EƒfƒBƒŒƒNƒgƒŠ"
15LangString DirectoryChooseUpdate ${LANG_JAPANESE} "ƒAƒbƒvƒf[ƒg‚·‚éƒZƒJƒ“ƒhƒ‰ƒCƒt‚̃fƒBƒŒƒNƒgƒŠ‚ð‘I‘ð‚µ‚Ä‚­‚¾‚³‚¢B:" 15LangString DirectoryChooseUpdate ${LANG_JAPANESE} "ƒAƒbƒvƒf[ƒg‚·‚éƒZƒJƒ“ƒhƒ‰ƒCƒt‚̃fƒBƒŒƒNƒgƒŠ‚ð‘I‘ð‚µ‚Ä‚­‚¾‚³‚¢B:"
16LangString DirectoryChooseSetup ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚éƒfƒBƒŒƒNƒgƒŠ‚ð‘I‘ð‚µ‚Ä‚­‚¾‚³‚¢B: " 16LangString DirectoryChooseSetup ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚éƒfƒBƒŒƒNƒgƒŠ‚ð‘I‘ð‚µ‚Ä‚­‚¾‚³‚¢B: "
17 17
18; CheckStartupParams message box 18; CheckStartupParams message box
19LangString CheckStartupParamsMB ${LANG_JAPANESE} "ƒvƒƒOƒ‰ƒ€–¼'$INSTPROG'‚ªŒ©‚‚©‚è‚Ü‚¹‚ñBƒTƒCƒŒƒ“ƒgEƒAƒbƒvƒf[ƒg‚ÉŽ¸”s‚µ‚Ü‚µ‚½B" 19LangString CheckStartupParamsMB ${LANG_JAPANESE} "ƒvƒƒOƒ‰ƒ€–¼'$INSTPROG'‚ªŒ©‚‚©‚è‚Ü‚¹‚ñBƒTƒCƒŒƒ“ƒgEƒAƒbƒvƒf[ƒg‚ÉŽ¸”s‚µ‚Ü‚µ‚½B"
20 20
21; installation success dialog 21; installation success dialog
22LangString InstSuccesssQuestion ${LANG_JAPANESE} "’¼‚¿‚ɃZƒJƒ“ƒhƒ‰ƒCƒt‚ðŠJŽn‚µ‚Ü‚·‚©H " 22LangString InstSuccesssQuestion ${LANG_JAPANESE} "’¼‚¿‚ɃZƒJƒ“ƒhƒ‰ƒCƒt‚ðŠJŽn‚µ‚Ü‚·‚©H "
23 23
24; remove old NSIS version 24; remove old NSIS version
25LangString RemoveOldNSISVersion ${LANG_JAPANESE} "ŒÃ‚¢ƒo[ƒWƒ‡ƒ“î•ñ‚ðƒ`ƒFƒbƒN’†‚Å‚·c" 25LangString RemoveOldNSISVersion ${LANG_JAPANESE} "ŒÃ‚¢ƒo[ƒWƒ‡ƒ“î•ñ‚ðƒ`ƒFƒbƒN’†‚Å‚·c"
26 26
27; check windows version 27; check windows version
28LangString CheckWindowsVersionDP ${LANG_JAPANESE} "ƒEƒBƒ“ƒhƒEƒY‚̃o[ƒWƒ‡ƒ“î•ñ‚ðƒ`ƒFƒbƒN’†‚Å‚·..." 28LangString CheckWindowsVersionDP ${LANG_JAPANESE} "ƒEƒBƒ“ƒhƒEƒY‚̃o[ƒWƒ‡ƒ“î•ñ‚ðƒ`ƒFƒbƒN’†‚Å‚·..."
29LangString CheckWindowsVersionMB ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt‚ÍWindows XPAWindows 2000AMac OS X‚݂̂ðƒTƒ|[ƒg‚µ‚Ä‚¢‚Ü‚·BWindows $R0‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚鎖‚ÍAƒf[ƒ^‚ÌÁޏ‚âƒNƒ‰ƒbƒVƒ…‚ÌŒ´ˆö‚ɂȂé‰Â”\«‚ª‚ ‚è‚Ü‚·BƒCƒ“ƒXƒg[ƒ‹‚𑱂¯‚Ü‚·‚©H" 29LangString CheckWindowsVersionMB ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt‚ÍWindows XPAWindows 2000AMac OS X‚݂̂ðƒTƒ|[ƒg‚µ‚Ä‚¢‚Ü‚·BWindows $R0‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚鎖‚ÍAƒf[ƒ^‚ÌÁޏ‚âƒNƒ‰ƒbƒVƒ…‚ÌŒ´ˆö‚ɂȂé‰Â”\«‚ª‚ ‚è‚Ü‚·BƒCƒ“ƒXƒg[ƒ‹‚𑱂¯‚Ü‚·‚©H"
30 30
31; checkifadministrator function (install) 31; checkifadministrator function (install)
32LangString CheckAdministratorInstDP ${LANG_JAPANESE} "ƒCƒ“ƒXƒg[ƒ‹‚Ì‚½‚߂̌ ŒÀ‚ðƒ`ƒFƒbƒN’†‚Å‚·..." 32LangString CheckAdministratorInstDP ${LANG_JAPANESE} "ƒCƒ“ƒXƒg[ƒ‹‚Ì‚½‚߂̌ ŒÀ‚ðƒ`ƒFƒbƒN’†‚Å‚·..."
33LangString CheckAdministratorInstMB ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚é‚ɂ͊ǗŽÒŒ ŒÀ‚ª•K—v‚Å‚·B" 33LangString CheckAdministratorInstMB ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚é‚ɂ͊ǗŽÒŒ ŒÀ‚ª•K—v‚Å‚·B"
34 34
35; checkifadministrator function (uninstall) 35; checkifadministrator function (uninstall)
36LangString CheckAdministratorUnInstDP ${LANG_JAPANESE} "ƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚Ì‚½‚߂̌ ŒÀ‚ðƒ`ƒFƒbƒN’†‚Å‚·..." 36LangString CheckAdministratorUnInstDP ${LANG_JAPANESE} "ƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚Ì‚½‚߂̌ ŒÀ‚ðƒ`ƒFƒbƒN’†‚Å‚·..."
37LangString CheckAdministratorUnInstMB ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt‚ðƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚·‚é‚ɂ͊ǗŽÒŒ ŒÀ‚ª•K—v‚Å‚·B" 37LangString CheckAdministratorUnInstMB ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt‚ðƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚·‚é‚ɂ͊ǗŽÒŒ ŒÀ‚ª•K—v‚Å‚·B"
38 38
39; checkifalreadycurrent 39; checkifalreadycurrent
40LangString CheckIfCurrentMB ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt${VERSION_LONG} ‚̓Cƒ“ƒXƒg[ƒ‹Ï‚݂ł·BÄ“xƒCƒ“ƒXƒg[ƒ‹‚µ‚Ü‚·‚©H " 40LangString CheckIfCurrentMB ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt${VERSION_LONG} ‚̓Cƒ“ƒXƒg[ƒ‹Ï‚݂ł·BÄ“xƒCƒ“ƒXƒg[ƒ‹‚µ‚Ü‚·‚©H "
41 41
42; closesecondlife function (install) 42; closesecondlife function (install)
43LangString CloseSecondLifeInstDP ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt‚ðI—¹’†‚Å‚·..." 43LangString CloseSecondLifeInstDP ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt‚ðI—¹’†‚Å‚·..."
44LangString CloseSecondLifeInstMB ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt‚Ì‹N“®’†‚ɃCƒ“ƒXƒg[ƒ‹‚Ío—ˆ‚Ü‚¹‚ñB’¼‚¿‚ɃZƒJƒ“ƒhƒ‰ƒCƒt‚ðI—¹‚µ‚ăCƒ“ƒXƒg[ƒ‹‚ðŠJŽn‚·‚éꇂÍOKƒ{ƒ^ƒ“‚ð‰Ÿ‚µ‚Ä‚­‚¾‚³‚¢BCANCEL‚ð‰Ÿ‚·‚Æ’†Ž~‚µ‚Ü‚·B" 44LangString CloseSecondLifeInstMB ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt‚Ì‹N“®’†‚ɃCƒ“ƒXƒg[ƒ‹‚Ío—ˆ‚Ü‚¹‚ñB’¼‚¿‚ɃZƒJƒ“ƒhƒ‰ƒCƒt‚ðI—¹‚µ‚ăCƒ“ƒXƒg[ƒ‹‚ðŠJŽn‚·‚éꇂÍOKƒ{ƒ^ƒ“‚ð‰Ÿ‚µ‚Ä‚­‚¾‚³‚¢BCANCEL‚ð‰Ÿ‚·‚Æ’†Ž~‚µ‚Ü‚·B"
45 45
46; closesecondlife function (uninstall) 46; closesecondlife function (uninstall)
47LangString CloseSecondLifeUnInstDP ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt‚ðI—¹’†‚Å‚·..." 47LangString CloseSecondLifeUnInstDP ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt‚ðI—¹’†‚Å‚·..."
48LangString CloseSecondLifeUnInstMB ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt‚Ì‹N“®’†‚ɃAƒ“ƒCƒ“ƒXƒg[ƒ‹‚Ío—ˆ‚Ü‚¹‚ñB’¼‚¿‚ɃZƒJƒ“ƒhƒ‰ƒCƒt‚ðI—¹‚µ‚ăAƒ“ƒCƒ“ƒXƒg[ƒ‹‚ðŠJŽn‚·‚éꇂÍOKƒ{ƒ^ƒ“‚ð‰Ÿ‚µ‚Ä‚­‚¾‚³‚¢BCANCEL‚ð‰Ÿ‚·‚Æ’†Ž~‚µ‚Ü‚·B" 48LangString CloseSecondLifeUnInstMB ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt‚Ì‹N“®’†‚ɃAƒ“ƒCƒ“ƒXƒg[ƒ‹‚Ío—ˆ‚Ü‚¹‚ñB’¼‚¿‚ɃZƒJƒ“ƒhƒ‰ƒCƒt‚ðI—¹‚µ‚ăAƒ“ƒCƒ“ƒXƒg[ƒ‹‚ðŠJŽn‚·‚éꇂÍOKƒ{ƒ^ƒ“‚ð‰Ÿ‚µ‚Ä‚­‚¾‚³‚¢BCANCEL‚ð‰Ÿ‚·‚Æ’†Ž~‚µ‚Ü‚·B"
49 49
50; removecachefiles 50; removecachefiles
51LangString RemoveCacheFilesDP ${LANG_JAPANESE} " Documents and Settings ƒtƒHƒ‹ƒ_‚̃LƒƒƒbƒVƒ…ƒtƒ@ƒCƒ‹‚ðƒfƒŠ[ƒg’†‚Å‚·B" 51LangString RemoveCacheFilesDP ${LANG_JAPANESE} " Documents and Settings ƒtƒHƒ‹ƒ_‚̃LƒƒƒbƒVƒ…ƒtƒ@ƒCƒ‹‚ðƒfƒŠ[ƒg’†‚Å‚·B"
52 52
53; delete program files 53; delete program files
54LangString DeleteProgramFilesMB ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt‚̃fƒBƒŒƒNƒgƒŠ‚É‚ÍA‚Ü‚¾ƒtƒ@ƒCƒ‹‚ªŽc‚³‚ê‚Ä‚¢‚Ü‚·B$\n$INSTDIR$\n‚É‚ ‚È‚½‚ªì¬A‚Ü‚½‚͈ړ®‚³‚¹‚½ƒtƒ@ƒCƒ‹‚ª‚ ‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B‘S‚Ä휂µ‚Ü‚·‚©H " 54LangString DeleteProgramFilesMB ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt‚̃fƒBƒŒƒNƒgƒŠ‚É‚ÍA‚Ü‚¾ƒtƒ@ƒCƒ‹‚ªŽc‚³‚ê‚Ä‚¢‚Ü‚·B$\n$INSTDIR$\n‚É‚ ‚È‚½‚ªì¬A‚Ü‚½‚͈ړ®‚³‚¹‚½ƒtƒ@ƒCƒ‹‚ª‚ ‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B‘S‚Ä휂µ‚Ü‚·‚©H "
55 55
56; uninstall text 56; uninstall text
57LangString UninstallTextMsg ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt${VERSION_LONG}‚ðƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚µ‚Ü‚·B" 57LangString UninstallTextMsg ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt${VERSION_LONG}‚ðƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚µ‚Ü‚·B"
diff --git a/linden/indra/newview/installers/windows/lang_ko.nsi b/linden/indra/newview/installers/windows/lang_ko.nsi
index 4e6b5ec..b570315 100644
--- a/linden/indra/newview/installers/windows/lang_ko.nsi
+++ b/linden/indra/newview/installers/windows/lang_ko.nsi
@@ -1,57 +1,57 @@
1; First is default 1; First is default
2LoadLanguageFile "${NSISDIR}\Contrib\Language files\Korean.nlf" 2LoadLanguageFile "${NSISDIR}\Contrib\Language files\Korean.nlf"
3 3
4; subtitle on license text caption 4; subtitle on license text caption
5LangString LicenseSubTitleUpdate ${LANG_KOREAN} "¾÷µ¥ÀÌÆ®" 5LangString LicenseSubTitleUpdate ${LANG_KOREAN} "¾÷µ¥ÀÌÆ®"
6LangString LicenseSubTitleSetup ${LANG_KOREAN} " ¼³Ä¡Çϱâ" 6LangString LicenseSubTitleSetup ${LANG_KOREAN} " ¼³Ä¡Çϱâ"
7 7
8; description on license page 8; description on license page
9LangString LicenseDescUpdate ${LANG_KOREAN} "ÀÌ ÆÑŰÁö´Â ¼¼ÄÁµå¶óÀÌÇÁ¸¦ ¹öÀü${VERSION_LONG}.À¸·Î ¾÷µ¥ÀÌÆ® ÇÕ´Ï´Ù. " 9LangString LicenseDescUpdate ${LANG_KOREAN} "ÀÌ ÆÑŰÁö´Â ¼¼ÄÁµå¶óÀÌÇÁ¸¦ ¹öÀü${VERSION_LONG}.À¸·Î ¾÷µ¥ÀÌÆ® ÇÕ´Ï´Ù. "
10LangString LicenseDescSetup ${LANG_KOREAN} "ÀÌ ÆÑŰÁö´Â ¼¼ÄÁµå¶óÀÌÇÁ¸¦ ÄÄÇ»ÅÍ¿¡ ¼³Ä¡ÇÕ´Ï´Ù." 10LangString LicenseDescSetup ${LANG_KOREAN} "ÀÌ ÆÑŰÁö´Â ¼¼ÄÁµå¶óÀÌÇÁ¸¦ ÄÄÇ»ÅÍ¿¡ ¼³Ä¡ÇÕ´Ï´Ù."
11LangString LicenseDescNext ${LANG_KOREAN} "´ÙÀ½" 11LangString LicenseDescNext ${LANG_KOREAN} "´ÙÀ½"
12 12
13; installation directory text 13; installation directory text
14LangString DirectoryChooseTitle ${LANG_KOREAN} "¼³Ä¡ µð·ºÅ丮" 14LangString DirectoryChooseTitle ${LANG_KOREAN} "¼³Ä¡ µð·ºÅ丮"
15LangString DirectoryChooseUpdate ${LANG_KOREAN} "¼¼ÄÁµå¶óÀÌÇÁ¸¦ ¾÷µ¥ÀÌÆ®ÇÒ µð·ºÅ丮¸¦ ¼±ÅÃÇϼ¼¿ä. " 15LangString DirectoryChooseUpdate ${LANG_KOREAN} "¼¼ÄÁµå¶óÀÌÇÁ¸¦ ¾÷µ¥ÀÌÆ®ÇÒ µð·ºÅ丮¸¦ ¼±ÅÃÇϼ¼¿ä. "
16LangString DirectoryChooseSetup ${LANG_KOREAN} "¼¼ÄÁµå¶óÀÌÇÁ¸¦ ¼³Ä¡ÇÒ µð·ºÅ丮¸¦ ¼±ÅÃÇϼ¼¿ä:" 16LangString DirectoryChooseSetup ${LANG_KOREAN} "¼¼ÄÁµå¶óÀÌÇÁ¸¦ ¼³Ä¡ÇÒ µð·ºÅ丮¸¦ ¼±ÅÃÇϼ¼¿ä:"
17 17
18; CheckStartupParams message box 18; CheckStartupParams message box
19LangString CheckStartupParamsMB ${LANG_KOREAN} " ¡®$INSTPROG¡¯ ÇÁ·Î±×·¥À» ãÁö ¸øÇß½À´Ï´Ù. ÀÚµ¿ ¾÷µ¥ÀÌÆ®¿¡ ½ÇÆÐÇß½À´Ï´Ù." 19LangString CheckStartupParamsMB ${LANG_KOREAN} " ¡®$INSTPROG¡¯ ÇÁ·Î±×·¥À» ãÁö ¸øÇß½À´Ï´Ù. ÀÚµ¿ ¾÷µ¥ÀÌÆ®¿¡ ½ÇÆÐÇß½À´Ï´Ù."
20 20
21; installation success dialog 21; installation success dialog
22LangString InstSuccesssQuestion ${LANG_KOREAN} "¼¼ÄÁµå¶óÀÌÇÁ¸¦ ½ÃÀÛÇϰڽÀ´Ï±î?" 22LangString InstSuccesssQuestion ${LANG_KOREAN} "¼¼ÄÁµå¶óÀÌÇÁ¸¦ ½ÃÀÛÇϰڽÀ´Ï±î?"
23 23
24; remove old NSIS version 24; remove old NSIS version
25LangString RemoveOldNSISVersion ${LANG_KOREAN} "ÀÌÀü ¹öÀüÀ» ã°í ÀÖ½À´Ï´Ù¡¦ " 25LangString RemoveOldNSISVersion ${LANG_KOREAN} "ÀÌÀü ¹öÀüÀ» ã°í ÀÖ½À´Ï´Ù¡¦ "
26 26
27; check windows version 27; check windows version
28LangString CheckWindowsVersionDP ${LANG_KOREAN} "À©µµ¿ì ¹öÀüÀ» È®ÀÎÇϰí ÀÖ½À´Ï´Ù." 28LangString CheckWindowsVersionDP ${LANG_KOREAN} "À©µµ¿ì ¹öÀüÀ» È®ÀÎÇϰí ÀÖ½À´Ï´Ù."
29LangString CheckWindowsVersionMB ${LANG_KOREAN} "¼¼ÄÁµå¶óÀÌÇÁ´Â À©µµ¿ì XP, À©µµ¿ì 2000, ±×¸®°í ¸Æ OS X¸¦ Áö¿øÇÕ´Ï´Ù. À©µµ¿ì $R0¿¡ ¼³Ä¡¸¦ ½ÃµµÇÏ¸é ¿ÀÀÛµ¿°ú µ¥ÀÌÅÍ ºÐ½ÇÀÌ ÀϾ ¼ö ÀÖ½À´Ï´Ù. °è¼Ó ¼³Ä¡ÇϰڽÀ´Ï±î? " 29LangString CheckWindowsVersionMB ${LANG_KOREAN} "¼¼ÄÁµå¶óÀÌÇÁ´Â À©µµ¿ì XP, À©µµ¿ì 2000, ±×¸®°í ¸Æ OS X¸¦ Áö¿øÇÕ´Ï´Ù. À©µµ¿ì $R0¿¡ ¼³Ä¡¸¦ ½ÃµµÇÏ¸é ¿ÀÀÛµ¿°ú µ¥ÀÌÅÍ ºÐ½ÇÀÌ ÀϾ ¼ö ÀÖ½À´Ï´Ù. °è¼Ó ¼³Ä¡ÇϰڽÀ´Ï±î? "
30 30
31; checkifadministrator function (install) 31; checkifadministrator function (install)
32LangString CheckAdministratorInstDP ${LANG_KOREAN} "¼³Ä¡ ±ÇÇÑÀ» È®ÀÎ ÁßÀÔ´Ï´Ù... " 32LangString CheckAdministratorInstDP ${LANG_KOREAN} "¼³Ä¡ ±ÇÇÑÀ» È®ÀÎ ÁßÀÔ´Ï´Ù... "
33LangString CheckAdministratorInstMB ${LANG_KOREAN} "ÇöÀç ¡®¼Õ´Ô¡¯°èÁ¤À» »ç¿ë ÁßÀÔ´Ï´Ù. ¼¼ÄÁµå¶óÀÌÇÁ¸¦ ¼³Ä¡Çϱâ À§Çؼ± ¡®¿î¿µÀÚ¡± °èÁ¤À» »ç¿ëÇØ¾ß ÇÕ´Ï´Ù." 33LangString CheckAdministratorInstMB ${LANG_KOREAN} "ÇöÀç ¡®¼Õ´Ô¡¯°èÁ¤À» »ç¿ë ÁßÀÔ´Ï´Ù. ¼¼ÄÁµå¶óÀÌÇÁ¸¦ ¼³Ä¡Çϱâ À§Çؼ± ¡®¿î¿µÀÚ¡± °èÁ¤À» »ç¿ëÇØ¾ß ÇÕ´Ï´Ù."
34 34
35; checkifadministrator function (uninstall) 35; checkifadministrator function (uninstall)
36LangString CheckAdministratorUnInstDP ${LANG_KOREAN} "Á¦°Å ±ÇÇÑÀ» È®ÀÎ ÁßÀÔ´Ï´Ù. " 36LangString CheckAdministratorUnInstDP ${LANG_KOREAN} "Á¦°Å ±ÇÇÑÀ» È®ÀÎ ÁßÀÔ´Ï´Ù. "
37LangString CheckAdministratorUnInstMB ${LANG_KOREAN} " ÇöÀç ¡®¼Õ´Ô¡¯°èÁ¤À» »ç¿ë ÁßÀÔ´Ï´Ù. ¼¼ÄÁµå¶óÀÌÇÁ¸¦ Á¦°ÅÇϱâ À§Çؼ± ¡®¿î¿µÀÚ¡± °èÁ¤À» »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. " 37LangString CheckAdministratorUnInstMB ${LANG_KOREAN} " ÇöÀç ¡®¼Õ´Ô¡¯°èÁ¤À» »ç¿ë ÁßÀÔ´Ï´Ù. ¼¼ÄÁµå¶óÀÌÇÁ¸¦ Á¦°ÅÇϱâ À§Çؼ± ¡®¿î¿µÀÚ¡± °èÁ¤À» »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. "
38 38
39; checkifalreadycurrent 39; checkifalreadycurrent
40LangString CheckIfCurrentMB ${LANG_KOREAN} "¼¼ÄÁµå¶óÀÌÇÁ ¹öÀü ${VERSION_LONG}ÀÌ ÀÌ¹Ì ¼³Ä¡µÇ¾î ÀÖ½À´Ï´Ù. ´Ù½Ã ¼³Ä¡ÇϽðڽÀ´Ï±î? " 40LangString CheckIfCurrentMB ${LANG_KOREAN} "¼¼ÄÁµå¶óÀÌÇÁ ¹öÀü ${VERSION_LONG}ÀÌ ÀÌ¹Ì ¼³Ä¡µÇ¾î ÀÖ½À´Ï´Ù. ´Ù½Ã ¼³Ä¡ÇϽðڽÀ´Ï±î? "
41 41
42; closesecondlife function (install) 42; closesecondlife function (install)
43LangString CloseSecondLifeInstDP ${LANG_KOREAN} "¼¼ÄÁµå¶óÀÌÇÁ¸¦ Á¾·áÇÒ ¶§ ±îÁö ´ë±â Áß¡¦ " 43LangString CloseSecondLifeInstDP ${LANG_KOREAN} "¼¼ÄÁµå¶óÀÌÇÁ¸¦ Á¾·áÇÒ ¶§ ±îÁö ´ë±â Áß¡¦ "
44LangString CloseSecondLifeInstMB ${LANG_KOREAN} "¼¼ÄÁµå¶óÀÌÇÁ°¡ ÀÌ¹Ì ÀÛµ¿ ÁßÀÏ °æ¿ì ¼³Ä¡¸¦ °è¼Ó ÇÒ ¼ö ¾ø½À´Ï´Ù. ÇöÀç ÀÛ¾÷À» ¸ØÃß°í ¡®È®ÀΡ¯À» ´­·¯ ¼¼ÄÁµå¶óÀÌÇÁ¸¦ Á¾·áÇÑ ´ÙÀ½ ÁøÇàÇϱ⠹ٶø´Ï´Ù. ¼³Ä¡¸¦ Ãë¼ÒÇÏ·Á¸é ¡®Ãë¼Ò¡¯¸¦ ´©¸£¼¼¿ä." 44LangString CloseSecondLifeInstMB ${LANG_KOREAN} "¼¼ÄÁµå¶óÀÌÇÁ°¡ ÀÌ¹Ì ÀÛµ¿ ÁßÀÏ °æ¿ì ¼³Ä¡¸¦ °è¼Ó ÇÒ ¼ö ¾ø½À´Ï´Ù. ÇöÀç ÀÛ¾÷À» ¸ØÃß°í ¡®È®ÀΡ¯À» ´­·¯ ¼¼ÄÁµå¶óÀÌÇÁ¸¦ Á¾·áÇÑ ´ÙÀ½ ÁøÇàÇϱ⠹ٶø´Ï´Ù. ¼³Ä¡¸¦ Ãë¼ÒÇÏ·Á¸é ¡®Ãë¼Ò¡¯¸¦ ´©¸£¼¼¿ä."
45 45
46; closesecondlife function (uninstall) 46; closesecondlife function (uninstall)
47LangString CloseSecondLifeUnInstDP ${LANG_KOREAN} "¼¼ÄÁµå¶óÀÌÇÁ¸¦ Á¾·áÇÒ ¶§ ±îÁö ´ë±â Áß¡¦¡±" 47LangString CloseSecondLifeUnInstDP ${LANG_KOREAN} "¼¼ÄÁµå¶óÀÌÇÁ¸¦ Á¾·áÇÒ ¶§ ±îÁö ´ë±â Áß¡¦¡±"
48LangString CloseSecondLifeUnInstMB ${LANG_KOREAN} " ¼¼ÄÁµå¶óÀÌÇÁ°¡ ÀÌ¹Ì ÀÛµ¿ ÁßÀÏ °æ¿ì Á¦°Å¸¦ °è¼Ó ÇÒ ¼ö ¾ø½À´Ï´Ù. ÇöÀç ÀÛ¾÷À» ¸ØÃß°í ¡®È®ÀΡ¯À» ´­·¯ ¼¼ÄÁµå¶óÀÌÇÁ¸¦ Á¾·áÇÑ ´ÙÀ½ ÁøÇàÇϱ⠹ٶø´Ï´Ù. ¼³Ä¡¸¦ ÃëÇÏ·Á¸é ¡®Ãë¼Ò¡¯¸¦ ´©¸£¼¼¿ä. " 48LangString CloseSecondLifeUnInstMB ${LANG_KOREAN} " ¼¼ÄÁµå¶óÀÌÇÁ°¡ ÀÌ¹Ì ÀÛµ¿ ÁßÀÏ °æ¿ì Á¦°Å¸¦ °è¼Ó ÇÒ ¼ö ¾ø½À´Ï´Ù. ÇöÀç ÀÛ¾÷À» ¸ØÃß°í ¡®È®ÀΡ¯À» ´­·¯ ¼¼ÄÁµå¶óÀÌÇÁ¸¦ Á¾·áÇÑ ´ÙÀ½ ÁøÇàÇϱ⠹ٶø´Ï´Ù. ¼³Ä¡¸¦ ÃëÇÏ·Á¸é ¡®Ãë¼Ò¡¯¸¦ ´©¸£¼¼¿ä. "
49 49
50; removecachefiles 50; removecachefiles
51LangString RemoveCacheFilesDP ${LANG_KOREAN} " Documents and Settings Æú´õ ³»ÀÇ Ä³½Ã ÆÄÀϵéÀ» Áö¿ó´Ï´Ù." 51LangString RemoveCacheFilesDP ${LANG_KOREAN} " Documents and Settings Æú´õ ³»ÀÇ Ä³½Ã ÆÄÀϵéÀ» Áö¿ó´Ï´Ù."
52 52
53; delete program files 53; delete program files
54LangString DeleteProgramFilesMB ${LANG_KOREAN} "¼¼ÄÁµå¶óÀÌÇÁ ÇÁ·Î±×·¥ µð·ºÅ丮¿¡ ¾ÆÁ÷ ÆÄÀϵéÀÌ ³²¾Æ ÀÖ½À´Ï´Ù. ÀÌ ÆÄÀϵéÀº »ç¿ëÀÚ°¡ ¸¸µç °ÍµéÀ̰ųª$\n$INSTDIR$\n$\n·Î À̵¿ÇÑ ÆÄÀϵéÀÏ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ÆÄÀϵéÀ» Á¦°ÅÇϰڽÀ´Ï±î?" 54LangString DeleteProgramFilesMB ${LANG_KOREAN} "¼¼ÄÁµå¶óÀÌÇÁ ÇÁ·Î±×·¥ µð·ºÅ丮¿¡ ¾ÆÁ÷ ÆÄÀϵéÀÌ ³²¾Æ ÀÖ½À´Ï´Ù. ÀÌ ÆÄÀϵéÀº »ç¿ëÀÚ°¡ ¸¸µç °ÍµéÀ̰ųª$\n$INSTDIR$\n$\n·Î À̵¿ÇÑ ÆÄÀϵéÀÏ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ÆÄÀϵéÀ» Á¦°ÅÇϰڽÀ´Ï±î?"
55 55
56; uninstall text 56; uninstall text
57LangString UninstallTextMsg ${LANG_KOREAN} "¼¼ÄÁµå¶óÀÌÇÁ${VERSION_LONG}À» ½Ã½ºÅÛ¿¡¼­ Á¦°ÅÇÕ´Ï´Ù." 57LangString UninstallTextMsg ${LANG_KOREAN} "¼¼ÄÁµå¶óÀÌÇÁ${VERSION_LONG}À» ½Ã½ºÅÛ¿¡¼­ Á¦°ÅÇÕ´Ï´Ù."
diff --git a/linden/indra/newview/linux_tools/client-readme.txt b/linden/indra/newview/linux_tools/client-readme.txt
index ff607b7..87087be 100644
--- a/linden/indra/newview/linux_tools/client-readme.txt
+++ b/linden/indra/newview/linux_tools/client-readme.txt
@@ -104,9 +104,8 @@ the Beta release of the Linux client.
104 stability. See PROBLEM 3 in the TROUBLESHOOTING section if you wish to 104 stability. See PROBLEM 3 in the TROUBLESHOOTING section if you wish to
105 turn these on to possibly enhance your experience. 105 turn these on to possibly enhance your experience.
106 106
107* MISC - The following features are known to not yet be fully operational on 107* MISC - The following features are not currently fully implemented on the
108 the Linux client: 108 Linux client and are therefore known not to work properly:
109 * Movie recording (soon to be deprecated)
110 * Full Unicode font rendering 109 * Full Unicode font rendering
111 110
112* UPLOAD / SAVE / COLOR-PICKER DIALOGS - These only appear when the client 111* UPLOAD / SAVE / COLOR-PICKER DIALOGS - These only appear when the client
diff --git a/linden/indra/newview/linux_tools/wrapper.sh b/linden/indra/newview/linux_tools/wrapper.sh
index 070d45a..1b7d6b8 100755
--- a/linden/indra/newview/linux_tools/wrapper.sh
+++ b/linden/indra/newview/linux_tools/wrapper.sh
@@ -17,8 +17,7 @@
17## on some hardware. Disabling this option may cause BETTER PERFORMANCE but 17## on some hardware. Disabling this option may cause BETTER PERFORMANCE but
18## may also cause CRASHES and hangs on some unstable combinations of drivers 18## may also cause CRASHES and hangs on some unstable combinations of drivers
19## and hardware. 19## and hardware.
20## NOTE: This is 'off' for WindLight to help testing. Hopefully it's not 20## NOTE: This is now disabled by default.
21## really needed any more anyway.
22#export LL_GL_BASICEXT=x 21#export LL_GL_BASICEXT=x
23 22
24## - Avoids *all* optional OpenGL extensions. This is the safest and least- 23## - Avoids *all* optional OpenGL extensions. This is the safest and least-
diff --git a/linden/indra/newview/llagent.cpp b/linden/indra/newview/llagent.cpp
index 2dab8ff..397a11e 100644
--- a/linden/indra/newview/llagent.cpp
+++ b/linden/indra/newview/llagent.cpp
@@ -51,13 +51,13 @@
51#include "llquaternion.h" 51#include "llquaternion.h"
52#include "v3math.h" 52#include "v3math.h"
53#include "v4math.h" 53#include "v4math.h"
54#include "llsmoothstep.h"
54#include "llsdutil.h" 55#include "llsdutil.h"
55//#include "vmath.h" 56//#include "vmath.h"
56 57
57#include "imageids.h" 58#include "imageids.h"
58#include "llbox.h" 59#include "llbox.h"
59#include "llbutton.h" 60#include "llbutton.h"
60#include "llcameraview.h"
61#include "llcallingcard.h" 61#include "llcallingcard.h"
62#include "llchatbar.h" 62#include "llchatbar.h"
63#include "llconsole.h" 63#include "llconsole.h"
@@ -68,6 +68,7 @@
68#include "llfloateractivespeakers.h" 68#include "llfloateractivespeakers.h"
69#include "llfloateravatarinfo.h" 69#include "llfloateravatarinfo.h"
70#include "llfloaterbuildoptions.h" 70#include "llfloaterbuildoptions.h"
71#include "llfloatercamera.h"
71#include "llfloaterchat.h" 72#include "llfloaterchat.h"
72#include "llfloatercustomize.h" 73#include "llfloatercustomize.h"
73#include "llfloaterdirectory.h" 74#include "llfloaterdirectory.h"
@@ -91,11 +92,10 @@
91#include "llquantize.h" 92#include "llquantize.h"
92#include "llselectmgr.h" 93#include "llselectmgr.h"
93#include "llsky.h" 94#include "llsky.h"
94#include "llsphere.h" 95#include "llrendersphere.h"
95#include "llstatusbar.h" 96#include "llstatusbar.h"
96#include "llimview.h" 97#include "llimview.h"
97#include "lltool.h" 98#include "lltool.h"
98#include "lltoolcomp.h" // for gToolGun
99#include "lltoolfocus.h" 99#include "lltoolfocus.h"
100#include "lltoolgrab.h" 100#include "lltoolgrab.h"
101#include "lltoolmgr.h" 101#include "lltoolmgr.h"
@@ -176,6 +176,8 @@ const F32 AVATAR_ZOOM_MIN_Z_FACTOR = 1.15f;
176 176
177const F32 MAX_CAMERA_DISTANCE_FROM_AGENT = 50.f; 177const F32 MAX_CAMERA_DISTANCE_FROM_AGENT = 50.f;
178 178
179const F32 MAX_CAMERA_SMOOTH_DISTANCE = 20.0f;
180
179const F32 HEAD_BUFFER_SIZE = 0.3f; 181const F32 HEAD_BUFFER_SIZE = 0.3f;
180const F32 CUSTOMIZE_AVATAR_CAMERA_ANIM_SLOP = 0.2f; 182const F32 CUSTOMIZE_AVATAR_CAMERA_ANIM_SLOP = 0.2f;
181 183
@@ -270,8 +272,14 @@ void LLAgentFriendObserver::changed(U32 mask)
270// LLAgent() 272// LLAgent()
271//----------------------------------------------------------------------------- 273//-----------------------------------------------------------------------------
272LLAgent::LLAgent() 274LLAgent::LLAgent()
273: mViewerPort(NET_USE_OS_ASSIGNED_PORT), 275: mDrawDistance( DEFAULT_FAR_PLANE ),
274 mDrawDistance( DEFAULT_FAR_PLANE ), 276
277 mDoubleTapRunTimer(),
278 mDoubleTapRunMode(DOUBLETAP_NONE),
279
280 mbAlwaysRun(false),
281 mbRunning(false),
282
275 mAccess(SIM_ACCESS_PG), 283 mAccess(SIM_ACCESS_PG),
276 mGroupPowers(0), 284 mGroupPowers(0),
277 mGroupID(), 285 mGroupID(),
@@ -303,7 +311,6 @@ LLAgent::LLAgent()
303 mLastCameraMode( CAMERA_MODE_THIRD_PERSON ), 311 mLastCameraMode( CAMERA_MODE_THIRD_PERSON ),
304 mViewsPushed(FALSE), 312 mViewsPushed(FALSE),
305 313
306 mbAlwaysRun(FALSE),
307 mShowAvatar(TRUE), 314 mShowAvatar(TRUE),
308 315
309 mCameraAnimating( FALSE ), 316 mCameraAnimating( FALSE ),
@@ -329,6 +336,8 @@ LLAgent::LLAgent()
329 mFocusObjectOffset(), 336 mFocusObjectOffset(),
330 mFocusDotRadius( 0.1f ), // meters 337 mFocusDotRadius( 0.1f ), // meters
331 mTrackFocusObject(TRUE), 338 mTrackFocusObject(TRUE),
339 mCameraSmoothingLastPositionGlobal(),
340 mCameraSmoothingLastPositionAgent(),
332 341
333 mFrameAgent(), 342 mFrameAgent(),
334 343
@@ -422,14 +431,14 @@ void LLAgent::init()
422{ 431{
423 mDrawDistance = gSavedSettings.getF32("RenderFarClip"); 432 mDrawDistance = gSavedSettings.getF32("RenderFarClip");
424 433
425 gCamera = new LLViewerCamera(); 434 // *Note: this is where LLViewerCamera::getInstance() used to be constructed.
426 435
427 gCamera->setView(DEFAULT_FIELD_OF_VIEW); 436 LLViewerCamera::getInstance()->setView(DEFAULT_FIELD_OF_VIEW);
428 // Leave at 0.1 meters until we have real near clip management 437 // Leave at 0.1 meters until we have real near clip management
429 gCamera->setNear(0.1f); 438 LLViewerCamera::getInstance()->setNear(0.1f);
430 gCamera->setFar(mDrawDistance); // if you want to change camera settings, do so in camera.h 439 LLViewerCamera::getInstance()->setFar(mDrawDistance); // if you want to change camera settings, do so in camera.h
431 gCamera->setAspect( gViewerWindow->getDisplayAspectRatio() ); // default, overridden in LLViewerWindow::reshape 440 LLViewerCamera::getInstance()->setAspect( gViewerWindow->getDisplayAspectRatio() ); // default, overridden in LLViewerWindow::reshape
432 gCamera->setViewHeightInPixels(768); // default, overridden in LLViewerWindow::reshape 441 LLViewerCamera::getInstance()->setViewHeightInPixels(768); // default, overridden in LLViewerWindow::reshape
433 442
434 setFlying( gSavedSettings.getBOOL("FlyingAtExit") ); 443 setFlying( gSavedSettings.getBOOL("FlyingAtExit") );
435 444
@@ -444,8 +453,6 @@ void LLAgent::init()
444 mTrackFocusObject = gSavedSettings.getBOOL("TrackFocusObject"); 453 mTrackFocusObject = gSavedSettings.getBOOL("TrackFocusObject");
445 454
446// LLDebugVarMessageBox::show("Camera Lag", &CAMERA_FOCUS_HALF_LIFE, 0.5f, 0.01f); 455// LLDebugVarMessageBox::show("Camera Lag", &CAMERA_FOCUS_HALF_LIFE, 0.5f, 0.01f);
447 gSavedSettings.getControl("RenderHideGroupTitle")->addListener(&mHideGroupTitleListener);
448 gSavedSettings.getControl("EffectColor")->addListener(&mEffectColorListener);
449 456
450 mEffectColor = gSavedSettings.getColor4("EffectColor"); 457 mEffectColor = gSavedSettings.getColor4("EffectColor");
451 458
@@ -475,8 +482,7 @@ LLAgent::~LLAgent()
475 delete [] mActiveCacheQueries; 482 delete [] mActiveCacheQueries;
476 mActiveCacheQueries = NULL; 483 mActiveCacheQueries = NULL;
477 484
478 delete gCamera; 485 // *Note: this is where LLViewerCamera::getInstance() used to be deleted.
479 gCamera = NULL;
480} 486}
481 487
482// Change camera back to third person, stop the autopilot, 488// Change camera back to third person, stop the autopilot,
@@ -493,16 +499,16 @@ void LLAgent::resetView(BOOL reset_camera)
493 499
494 if (!gNoRender) 500 if (!gNoRender)
495 { 501 {
496 gSelectMgr->unhighlightAll(); 502 LLSelectMgr::getInstance()->unhighlightAll();
497 503
498 // By popular request, keep land selection while walking around. JC 504 // By popular request, keep land selection while walking around. JC
499 // gParcelMgr->deselectLand(); 505 // LLViewerParcelMgr::getInstance()->deselectLand();
500 506
501 // force deselect when walking and attachment is selected 507 // force deselect when walking and attachment is selected
502 // this is so people don't wig out when their avatar moves without animating 508 // this is so people don't wig out when their avatar moves without animating
503 if (gSelectMgr->getSelection()->isAttachment()) 509 if (LLSelectMgr::getInstance()->getSelection()->isAttachment())
504 { 510 {
505 gSelectMgr->deselectAll(); 511 LLSelectMgr::getInstance()->deselectAll();
506 } 512 }
507 513
508 // Hide all popup menus 514 // Hide all popup menus
@@ -539,7 +545,7 @@ void LLAgent::onAppFocusGained()
539 if (CAMERA_MODE_MOUSELOOK == mCameraMode) 545 if (CAMERA_MODE_MOUSELOOK == mCameraMode)
540 { 546 {
541 changeCameraToDefault(); 547 changeCameraToDefault();
542 gToolMgr->clearSavedTool(); 548 LLToolMgr::getInstance()->clearSavedTool();
543 } 549 }
544} 550}
545 551
@@ -575,7 +581,7 @@ void LLAgent::unlockView()
575//----------------------------------------------------------------------------- 581//-----------------------------------------------------------------------------
576// moveAt() 582// moveAt()
577//----------------------------------------------------------------------------- 583//-----------------------------------------------------------------------------
578void LLAgent::moveAt(S32 direction) 584void LLAgent::moveAt(S32 direction, bool reset)
579{ 585{
580 // age chat timer so it fades more quickly when you are intentionally moving 586 // age chat timer so it fades more quickly when you are intentionally moving
581 ageChat(); 587 ageChat();
@@ -591,7 +597,10 @@ void LLAgent::moveAt(S32 direction)
591 setControlFlags(AGENT_CONTROL_AT_NEG | AGENT_CONTROL_FAST_AT); 597 setControlFlags(AGENT_CONTROL_AT_NEG | AGENT_CONTROL_FAST_AT);
592 } 598 }
593 599
594 resetView(); 600 if (reset)
601 {
602 resetView();
603 }
595} 604}
596 605
597//----------------------------------------------------------------------------- 606//-----------------------------------------------------------------------------
@@ -685,7 +694,7 @@ void LLAgent::moveUp(S32 direction)
685//----------------------------------------------------------------------------- 694//-----------------------------------------------------------------------------
686// moveYaw() 695// moveYaw()
687//----------------------------------------------------------------------------- 696//-----------------------------------------------------------------------------
688void LLAgent::moveYaw(F32 mag) 697void LLAgent::moveYaw(F32 mag, bool reset_view)
689{ 698{
690 mYawKey = mag; 699 mYawKey = mag;
691 700
@@ -698,7 +707,10 @@ void LLAgent::moveYaw(F32 mag)
698 setControlFlags(AGENT_CONTROL_YAW_NEG); 707 setControlFlags(AGENT_CONTROL_YAW_NEG);
699 } 708 }
700 709
701 resetView(); 710 if (reset_view)
711 {
712 resetView();
713 }
702} 714}
703 715
704//----------------------------------------------------------------------------- 716//-----------------------------------------------------------------------------
@@ -724,12 +736,10 @@ BOOL LLAgent::canFly()
724{ 736{
725 if (isGodlike()) return TRUE; 737 if (isGodlike()) return TRUE;
726 738
727 if (!gParcelMgr) return FALSE;
728
729 LLViewerRegion* regionp = getRegion(); 739 LLViewerRegion* regionp = getRegion();
730 if (regionp && regionp->getBlockFly()) return FALSE; 740 if (regionp && regionp->getBlockFly()) return FALSE;
731 741
732 LLParcel* parcel = gParcelMgr->getAgentParcel(); 742 LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
733 if (!parcel) return FALSE; 743 if (!parcel) return FALSE;
734 744
735 // Allow owners to fly on their own land. 745 // Allow owners to fly on their own land.
@@ -764,20 +774,17 @@ void LLAgent::setFlying(BOOL fly)
764 if (fly) 774 if (fly)
765 { 775 {
766 BOOL was_flying = getFlying(); 776 BOOL was_flying = getFlying();
767 if (gParcelMgr) 777 if (!canFly() && !was_flying)
768 { 778 {
769 if (!canFly() && !was_flying) 779 // parcel doesn't let you start fly
770 { 780 // gods can always fly
771 // parcel doesn't let you start fly 781 // and it's OK if you're already flying
772 // gods can always fly 782 make_ui_sound("UISndBadKeystroke");
773 // and it's OK if you're already flying 783 return;
774 make_ui_sound("UISndBadKeystroke");
775 return;
776 }
777 } 784 }
778 if( !was_flying ) 785 if( !was_flying )
779 { 786 {
780 gViewerStats->incStat(LLViewerStats::ST_FLY_COUNT); 787 LLViewerStats::getInstance()->incStat(LLViewerStats::ST_FLY_COUNT);
781 } 788 }
782 setControlFlags(AGENT_CONTROL_FLY); 789 setControlFlags(AGENT_CONTROL_FLY);
783 gSavedSettings.setBOOL("FlyBtnState", TRUE); 790 gSavedSettings.setBOOL("FlyBtnState", TRUE);
@@ -831,12 +838,12 @@ void LLAgent::setRegion(LLViewerRegion *regionp)
831 delta.setVec(regionp->getOriginGlobal() - mRegionp->getOriginGlobal()); 838 delta.setVec(regionp->getOriginGlobal() - mRegionp->getOriginGlobal());
832 839
833 setPositionAgent(getPositionAgent() - delta); 840 setPositionAgent(getPositionAgent() - delta);
834 LLVector3 camera_position_agent = gCamera->getOrigin(); 841
835 842 LLVector3 camera_position_agent = LLViewerCamera::getInstance()->getOrigin();
836 gCamera->setOrigin(camera_position_agent - delta); 843 LLViewerCamera::getInstance()->setOrigin(camera_position_agent - delta);
837 844
838 // Update all of the regions. 845 // Update all of the regions.
839 gWorldPointer->updateAgentOffset(agent_offset_global); 846 LLWorld::getInstance()->updateAgentOffset(agent_offset_global);
840 847
841 // Hack to keep sky in the agent's region, otherwise it may get deleted - DJS 08/02/02 848 // Hack to keep sky in the agent's region, otherwise it may get deleted - DJS 08/02/02
842 // *TODO: possibly refactor into gSky->setAgentRegion(regionp)? -Brad 849 // *TODO: possibly refactor into gSky->setAgentRegion(regionp)? -Brad
@@ -860,18 +867,18 @@ void LLAgent::setRegion(LLViewerRegion *regionp)
860 delta.setVec(regionp->getOriginGlobal()); 867 delta.setVec(regionp->getOriginGlobal());
861 868
862 setPositionAgent(getPositionAgent() - delta); 869 setPositionAgent(getPositionAgent() - delta);
863 LLVector3 camera_position_agent = gCamera->getOrigin(); 870 LLVector3 camera_position_agent = LLViewerCamera::getInstance()->getOrigin();
864 gCamera->setOrigin(camera_position_agent - delta); 871 LLViewerCamera::getInstance()->setOrigin(camera_position_agent - delta);
865 872
866 // Update all of the regions. 873 // Update all of the regions.
867 gWorldPointer->updateAgentOffset(mAgentOriginGlobal); 874 LLWorld::getInstance()->updateAgentOffset(mAgentOriginGlobal);
868 } 875 }
869 } 876 }
870 mRegionp = regionp; 877 mRegionp = regionp;
871 878
872 // Must shift hole-covering water object locations because local 879 // Must shift hole-covering water object locations because local
873 // coordinate frame changed. 880 // coordinate frame changed.
874 gWorldPointer->updateWaterObjects(); 881 LLWorld::getInstance()->updateWaterObjects();
875 882
876 // keep a list of regions we've been too 883 // keep a list of regions we've been too
877 // this is just an interesting stat, logged at the dataserver 884 // this is just an interesting stat, logged at the dataserver
@@ -879,7 +886,7 @@ void LLAgent::setRegion(LLViewerRegion *regionp)
879 U64 handle = regionp->getHandle(); 886 U64 handle = regionp->getHandle();
880 mRegionsVisited.insert(handle); 887 mRegionsVisited.insert(handle);
881 888
882 gSelectMgr->updateSelectionCenter(); 889 LLSelectMgr::getInstance()->updateSelectionCenter();
883} 890}
884 891
885 892
@@ -1215,7 +1222,16 @@ LLVector3 LLAgent::getReferenceUpVector()
1215void LLAgent::pitch(F32 angle) 1222void LLAgent::pitch(F32 angle)
1216{ 1223{
1217 // don't let user pitch if pointed almost all the way down or up 1224 // don't let user pitch if pointed almost all the way down or up
1218 1225 mFrameAgent.pitch(clampPitchToLimits(angle));
1226}
1227
1228
1229// Radians, positive is forward into ground
1230//-----------------------------------------------------------------------------
1231// clampPitchToLimits()
1232//-----------------------------------------------------------------------------
1233F32 LLAgent::clampPitchToLimits(F32 angle)
1234{
1219 // A dot B = mag(A) * mag(B) * cos(angle between A and B) 1235 // A dot B = mag(A) * mag(B) * cos(angle between A and B)
1220 // so... cos(angle between A and B) = A dot B / mag(A) / mag(B) 1236 // so... cos(angle between A and B) = A dot B / mag(A) / mag(B)
1221 // = A dot B for unit vectors 1237 // = A dot B for unit vectors
@@ -1245,8 +1261,8 @@ void LLAgent::pitch(F32 angle)
1245 { 1261 {
1246 angle = look_up_limit - angle_from_skyward; 1262 angle = look_up_limit - angle_from_skyward;
1247 } 1263 }
1248 1264
1249 mFrameAgent.pitch(angle); 1265 return angle;
1250} 1266}
1251 1267
1252 1268
@@ -1293,7 +1309,7 @@ LLVector3d LLAgent::calcFocusOffset(LLViewerObject *object, S32 x, S32 y)
1293 LLVector3 obj_pos = is_avatar ? ((LLVOAvatar*)object)->mPelvisp->getWorldPosition() : object->getRenderPosition(); 1309 LLVector3 obj_pos = is_avatar ? ((LLVOAvatar*)object)->mPelvisp->getWorldPosition() : object->getRenderPosition();
1294 LLQuaternion inv_obj_rot = ~obj_rot; 1310 LLQuaternion inv_obj_rot = ~obj_rot;
1295 1311
1296 LLVector3 obj_dir_abs = obj_pos - gCamera->getOrigin(); 1312 LLVector3 obj_dir_abs = obj_pos - LLViewerCamera::getInstance()->getOrigin();
1297 obj_dir_abs.rotVec(inv_obj_rot); 1313 obj_dir_abs.rotVec(inv_obj_rot);
1298 obj_dir_abs.normVec(); 1314 obj_dir_abs.normVec();
1299 obj_dir_abs.abs(); 1315 obj_dir_abs.abs();
@@ -1327,7 +1343,7 @@ LLVector3d LLAgent::calcFocusOffset(LLViewerObject *object, S32 x, S32 y)
1327 gViewerWindow->mousePointOnPlaneGlobal(focus_pt_global, x, y, gAgent.getPosGlobalFromAgent(obj_pos), normal); 1343 gViewerWindow->mousePointOnPlaneGlobal(focus_pt_global, x, y, gAgent.getPosGlobalFromAgent(obj_pos), normal);
1328 LLVector3 focus_pt = gAgent.getPosAgentFromGlobal(focus_pt_global); 1344 LLVector3 focus_pt = gAgent.getPosAgentFromGlobal(focus_pt_global);
1329 // find vector from camera to focus point in object coordinates 1345 // find vector from camera to focus point in object coordinates
1330 LLVector3 camera_focus_vec = focus_pt - gCamera->getOrigin(); 1346 LLVector3 camera_focus_vec = focus_pt - LLViewerCamera::getInstance()->getOrigin();
1331 // convert to object-local space 1347 // convert to object-local space
1332 camera_focus_vec.rotVec(inv_obj_rot); 1348 camera_focus_vec.rotVec(inv_obj_rot);
1333 1349
@@ -1387,7 +1403,6 @@ LLVector3d LLAgent::calcFocusOffset(LLViewerObject *object, S32 x, S32 y)
1387 if (!is_avatar) 1403 if (!is_avatar)
1388 { 1404 {
1389 //unproject relative clicked coordinate from window coordinate using GL 1405 //unproject relative clicked coordinate from window coordinate using GL
1390
1391 GLint viewport[4]; 1406 GLint viewport[4];
1392 GLdouble modelview[16]; 1407 GLdouble modelview[16];
1393 GLdouble projection[16]; 1408 GLdouble projection[16];
@@ -1395,14 +1410,14 @@ LLVector3d LLAgent::calcFocusOffset(LLViewerObject *object, S32 x, S32 y)
1395 GLdouble posX, posY, posZ; 1410 GLdouble posX, posY, posZ;
1396 1411
1397 // convert our matrices to something that has a multiply that works 1412 // convert our matrices to something that has a multiply that works
1398 glh::matrix4f newModel((F32*)gCamera->getModelview().mMatrix); 1413 glh::matrix4f newModel((F32*)LLViewerCamera::getInstance()->getModelview().mMatrix);
1399 glh::matrix4f tmpObjMat((F32*)obj_matrix.mMatrix); 1414 glh::matrix4f tmpObjMat((F32*)obj_matrix.mMatrix);
1400 newModel *= tmpObjMat; 1415 newModel *= tmpObjMat;
1401 1416
1402 for(U32 i = 0; i < 16; ++i) 1417 for(U32 i = 0; i < 16; ++i)
1403 { 1418 {
1404 modelview[i] = newModel.m[i]; 1419 modelview[i] = newModel.m[i];
1405 projection[i] = gCamera->getProjection().mMatrix[i/4][i%4]; 1420 projection[i] = LLViewerCamera::getInstance()->getProjection().mMatrix[i/4][i%4];
1406 } 1421 }
1407 glGetIntegerv( GL_VIEWPORT, viewport ); 1422 glGetIntegerv( GL_VIEWPORT, viewport );
1408 1423
@@ -1421,8 +1436,8 @@ LLVector3d LLAgent::calcFocusOffset(LLViewerObject *object, S32 x, S32 y)
1421 //now that we have the object relative position, we should bias toward the center of the object 1436 //now that we have the object relative position, we should bias toward the center of the object
1422 //based on the distance of the camera to the focus point vs. the distance of the camera to the focus 1437 //based on the distance of the camera to the focus point vs. the distance of the camera to the focus
1423 1438
1424 F32 relDist = llabs(obj_rel * gCamera->getAtAxis()); 1439 F32 relDist = llabs(obj_rel * LLViewerCamera::getInstance()->getAtAxis());
1425 F32 viewDist = dist_vec(obj_center + obj_rel, gCamera->getOrigin()); 1440 F32 viewDist = dist_vec(obj_center + obj_rel, LLViewerCamera::getInstance()->getOrigin());
1426 1441
1427 1442
1428 LLBBox obj_bbox = object->getBoundingBoxAgent(); 1443 LLBBox obj_bbox = object->getBoundingBoxAgent();
@@ -1624,7 +1639,7 @@ BOOL LLAgent::calcCameraMinDistance(F32 &obj_min_distance)
1624 // clamp obj distance to diagonal of 10 by 10 cube 1639 // clamp obj distance to diagonal of 10 by 10 cube
1625 obj_min_distance = llmin(obj_min_distance, 10.f * F_SQRT3); 1640 obj_min_distance = llmin(obj_min_distance, 10.f * F_SQRT3);
1626 1641
1627 obj_min_distance += gCamera->getNear() + (soft_limit ? 0.1f : 0.2f); 1642 obj_min_distance += LLViewerCamera::getInstance()->getNear() + (soft_limit ? 0.1f : 0.2f);
1628 1643
1629 return TRUE; 1644 return TRUE;
1630} 1645}
@@ -1633,7 +1648,7 @@ F32 LLAgent::getCameraZoomFraction()
1633{ 1648{
1634 // 0.f -> camera zoomed all the way out 1649 // 0.f -> camera zoomed all the way out
1635 // 1.f -> camera zoomed all the way in 1650 // 1.f -> camera zoomed all the way in
1636 LLObjectSelectionHandle selection = gSelectMgr->getSelection(); 1651 LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
1637 if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD) 1652 if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD)
1638 { 1653 {
1639 // already [0,1] 1654 // already [0,1]
@@ -1652,9 +1667,9 @@ F32 LLAgent::getCameraZoomFraction()
1652 { 1667 {
1653 F32 min_zoom; 1668 F32 min_zoom;
1654 const F32 DIST_FUDGE = 16.f; // meters 1669 const F32 DIST_FUDGE = 16.f; // meters
1655 F32 max_zoom = gWorldPointer ? llmin(mDrawDistance - DIST_FUDGE, 1670 F32 max_zoom = llmin(mDrawDistance - DIST_FUDGE,
1656 gWorldPointer->getRegionWidthInMeters() - DIST_FUDGE, 1671 LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE,
1657 MAX_CAMERA_DISTANCE_FROM_AGENT) : MAX_CAMERA_DISTANCE_FROM_AGENT; 1672 MAX_CAMERA_DISTANCE_FROM_AGENT);
1658 1673
1659 F32 distance = (F32)mCameraFocusOffsetTarget.magVec(); 1674 F32 distance = (F32)mCameraFocusOffsetTarget.magVec();
1660 if (mFocusObject.notNull()) 1675 if (mFocusObject.notNull())
@@ -1681,7 +1696,7 @@ void LLAgent::setCameraZoomFraction(F32 fraction)
1681{ 1696{
1682 // 0.f -> camera zoomed all the way out 1697 // 0.f -> camera zoomed all the way out
1683 // 1.f -> camera zoomed all the way in 1698 // 1.f -> camera zoomed all the way in
1684 LLObjectSelectionHandle selection = gSelectMgr->getSelection(); 1699 LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
1685 1700
1686 if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD) 1701 if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD)
1687 { 1702 {
@@ -1702,7 +1717,7 @@ void LLAgent::setCameraZoomFraction(F32 fraction)
1702 F32 min_zoom = LAND_MIN_ZOOM; 1717 F32 min_zoom = LAND_MIN_ZOOM;
1703 const F32 DIST_FUDGE = 16.f; // meters 1718 const F32 DIST_FUDGE = 16.f; // meters
1704 F32 max_zoom = llmin(mDrawDistance - DIST_FUDGE, 1719 F32 max_zoom = llmin(mDrawDistance - DIST_FUDGE,
1705 gWorldPointer->getRegionWidthInMeters() - DIST_FUDGE, 1720 LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE,
1706 MAX_CAMERA_DISTANCE_FROM_AGENT); 1721 MAX_CAMERA_DISTANCE_FROM_AGENT);
1707 1722
1708 if (mFocusObject.notNull()) 1723 if (mFocusObject.notNull())
@@ -1733,7 +1748,7 @@ void LLAgent::setCameraZoomFraction(F32 fraction)
1733//----------------------------------------------------------------------------- 1748//-----------------------------------------------------------------------------
1734void LLAgent::cameraOrbitAround(const F32 radians) 1749void LLAgent::cameraOrbitAround(const F32 radians)
1735{ 1750{
1736 LLObjectSelectionHandle selection = gSelectMgr->getSelection(); 1751 LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
1737 if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD) 1752 if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD)
1738 { 1753 {
1739 // do nothing for hud selection 1754 // do nothing for hud selection
@@ -1756,7 +1771,7 @@ void LLAgent::cameraOrbitAround(const F32 radians)
1756//----------------------------------------------------------------------------- 1771//-----------------------------------------------------------------------------
1757void LLAgent::cameraOrbitOver(const F32 angle) 1772void LLAgent::cameraOrbitOver(const F32 angle)
1758{ 1773{
1759 LLObjectSelectionHandle selection = gSelectMgr->getSelection(); 1774 LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
1760 if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD) 1775 if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD)
1761 { 1776 {
1762 // do nothing for hud selection 1777 // do nothing for hud selection
@@ -1773,7 +1788,7 @@ void LLAgent::cameraOrbitOver(const F32 angle)
1773 F32 angle_from_up = acos( camera_offset_unit * getReferenceUpVector() ); 1788 F32 angle_from_up = acos( camera_offset_unit * getReferenceUpVector() );
1774 1789
1775 LLVector3d left_axis; 1790 LLVector3d left_axis;
1776 left_axis.setVec(gCamera->getLeftAxis()); 1791 left_axis.setVec(LLViewerCamera::getInstance()->getLeftAxis());
1777 F32 new_angle = llclamp(angle_from_up - angle, 1.f * DEG_TO_RAD, 179.f * DEG_TO_RAD); 1792 F32 new_angle = llclamp(angle_from_up - angle, 1.f * DEG_TO_RAD, 179.f * DEG_TO_RAD);
1778 mCameraFocusOffsetTarget.rotVec(angle_from_up - new_angle, left_axis); 1793 mCameraFocusOffsetTarget.rotVec(angle_from_up - new_angle, left_axis);
1779 1794
@@ -1791,7 +1806,7 @@ void LLAgent::cameraZoomIn(const F32 fraction)
1791 return; 1806 return;
1792 } 1807 }
1793 1808
1794 LLObjectSelectionHandle selection = gSelectMgr->getSelection(); 1809 LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
1795 if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD) 1810 if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD)
1796 { 1811 {
1797 // just update hud zoom level 1812 // just update hud zoom level
@@ -1826,7 +1841,7 @@ void LLAgent::cameraZoomIn(const F32 fraction)
1826 // Don't zoom too far back 1841 // Don't zoom too far back
1827 const F32 DIST_FUDGE = 16.f; // meters 1842 const F32 DIST_FUDGE = 16.f; // meters
1828 F32 max_distance = llmin(mDrawDistance - DIST_FUDGE, 1843 F32 max_distance = llmin(mDrawDistance - DIST_FUDGE,
1829 gWorldPointer->getRegionWidthInMeters() - DIST_FUDGE ); 1844 LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE );
1830 1845
1831 if (new_distance > max_distance) 1846 if (new_distance > max_distance)
1832 { 1847 {
@@ -1894,7 +1909,7 @@ void LLAgent::cameraOrbitIn(const F32 meters)
1894 // Don't zoom too far back 1909 // Don't zoom too far back
1895 const F32 DIST_FUDGE = 16.f; // meters 1910 const F32 DIST_FUDGE = 16.f; // meters
1896 F32 max_distance = llmin(mDrawDistance - DIST_FUDGE, 1911 F32 max_distance = llmin(mDrawDistance - DIST_FUDGE,
1897 gWorldPointer->getRegionWidthInMeters() - DIST_FUDGE ); 1912 LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE );
1898 1913
1899 if (new_distance > max_distance) 1914 if (new_distance > max_distance)
1900 { 1915 {
@@ -1907,7 +1922,7 @@ void LLAgent::cameraOrbitIn(const F32 meters)
1907 1922
1908 if( CAMERA_MODE_CUSTOMIZE_AVATAR == getCameraMode() ) 1923 if( CAMERA_MODE_CUSTOMIZE_AVATAR == getCameraMode() )
1909 { 1924 {
1910 llclamp( new_distance, APPEARANCE_MIN_ZOOM, APPEARANCE_MAX_ZOOM ); 1925 new_distance = llclamp( new_distance, APPEARANCE_MIN_ZOOM, APPEARANCE_MAX_ZOOM );
1911 } 1926 }
1912 1927
1913 // Compute new camera offset 1928 // Compute new camera offset
@@ -1923,7 +1938,7 @@ void LLAgent::cameraOrbitIn(const F32 meters)
1923void LLAgent::cameraPanIn(F32 meters) 1938void LLAgent::cameraPanIn(F32 meters)
1924{ 1939{
1925 LLVector3d at_axis; 1940 LLVector3d at_axis;
1926 at_axis.setVec(gCamera->getAtAxis()); 1941 at_axis.setVec(LLViewerCamera::getInstance()->getAtAxis());
1927 1942
1928 mFocusTargetGlobal += meters * at_axis; 1943 mFocusTargetGlobal += meters * at_axis;
1929 mFocusGlobal = mFocusTargetGlobal; 1944 mFocusGlobal = mFocusTargetGlobal;
@@ -1937,7 +1952,7 @@ void LLAgent::cameraPanIn(F32 meters)
1937void LLAgent::cameraPanLeft(F32 meters) 1952void LLAgent::cameraPanLeft(F32 meters)
1938{ 1953{
1939 LLVector3d left_axis; 1954 LLVector3d left_axis;
1940 left_axis.setVec(gCamera->getLeftAxis()); 1955 left_axis.setVec(LLViewerCamera::getInstance()->getLeftAxis());
1941 1956
1942 mFocusTargetGlobal += meters * left_axis; 1957 mFocusTargetGlobal += meters * left_axis;
1943 mFocusGlobal = mFocusTargetGlobal; 1958 mFocusGlobal = mFocusTargetGlobal;
@@ -1951,7 +1966,7 @@ void LLAgent::cameraPanLeft(F32 meters)
1951void LLAgent::cameraPanUp(F32 meters) 1966void LLAgent::cameraPanUp(F32 meters)
1952{ 1967{
1953 LLVector3d up_axis; 1968 LLVector3d up_axis;
1954 up_axis.setVec(gCamera->getUpAxis()); 1969 up_axis.setVec(LLViewerCamera::getInstance()->getUpAxis());
1955 1970
1956 mFocusTargetGlobal += meters * up_axis; 1971 mFocusTargetGlobal += meters * up_axis;
1957 mFocusGlobal = mFocusTargetGlobal; 1972 mFocusGlobal = mFocusTargetGlobal;
@@ -2126,10 +2141,7 @@ void LLAgent::setBusy()
2126 //*TODO:Translate 2141 //*TODO:Translate
2127 gBusyMenu->setLabel(LLString("Set Not Busy")); 2142 gBusyMenu->setLabel(LLString("Set Not Busy"));
2128 } 2143 }
2129 if (gFloaterMute) 2144 LLFloaterMute::getInstance()->updateButtons();
2130 {
2131 gFloaterMute->updateButtons();
2132 }
2133} 2145}
2134 2146
2135//----------------------------------------------------------------------------- 2147//-----------------------------------------------------------------------------
@@ -2144,10 +2156,7 @@ void LLAgent::clearBusy()
2144 //*TODO:Translate 2156 //*TODO:Translate
2145 gBusyMenu->setLabel(LLString("Set Busy")); 2157 gBusyMenu->setLabel(LLString("Set Busy"));
2146 } 2158 }
2147 if (gFloaterMute) 2159 LLFloaterMute::getInstance()->updateButtons();
2148 {
2149 gFloaterMute->updateButtons();
2150 }
2151} 2160}
2152 2161
2153//----------------------------------------------------------------------------- 2162//-----------------------------------------------------------------------------
@@ -2164,7 +2173,7 @@ BOOL LLAgent::getBusy() const
2164//----------------------------------------------------------------------------- 2173//-----------------------------------------------------------------------------
2165void LLAgent::startAutoPilotGlobal(const LLVector3d &target_global, const std::string& behavior_name, const LLQuaternion *target_rotation, void (*finish_callback)(BOOL, void *), void *callback_data, F32 stop_distance, F32 rot_threshold) 2174void LLAgent::startAutoPilotGlobal(const LLVector3d &target_global, const std::string& behavior_name, const LLQuaternion *target_rotation, void (*finish_callback)(BOOL, void *), void *callback_data, F32 stop_distance, F32 rot_threshold)
2166{ 2175{
2167 if (!gAgent.getAvatarObject() || !gWorldPointer) 2176 if (!gAgent.getAvatarObject())
2168 { 2177 {
2169 return; 2178 return;
2170 } 2179 }
@@ -2184,7 +2193,7 @@ void LLAgent::startAutoPilotGlobal(const LLVector3d &target_global, const std::s
2184 LLVector3d intersection; 2193 LLVector3d intersection;
2185 LLVector3 normal; 2194 LLVector3 normal;
2186 LLViewerObject *hit_obj; 2195 LLViewerObject *hit_obj;
2187 F32 heightDelta = gWorldPointer->resolveStepHeightGlobal(NULL, target_global, trace_target, intersection, normal, &hit_obj); 2196 F32 heightDelta = LLWorld::getInstance()->resolveStepHeightGlobal(NULL, target_global, trace_target, intersection, normal, &hit_obj);
2188 2197
2189 if (stop_distance > 0.f) 2198 if (stop_distance > 0.f)
2190 { 2199 {
@@ -2224,7 +2233,7 @@ void LLAgent::startAutoPilotGlobal(const LLVector3d &target_global, const std::s
2224 LLVector3 groundNorm; 2233 LLVector3 groundNorm;
2225 LLViewerObject *obj; 2234 LLViewerObject *obj;
2226 2235
2227 gWorldPointer->resolveStepHeightGlobal(NULL, target_global, traceEndPt, targetOnGround, groundNorm, &obj); 2236 LLWorld::getInstance()->resolveStepHeightGlobal(NULL, target_global, traceEndPt, targetOnGround, groundNorm, &obj);
2228 F64 target_height = llmax((F64)gAgent.getAvatarObject()->getPelvisToFoot(), target_global.mdV[VZ] - targetOnGround.mdV[VZ]); 2237 F64 target_height = llmax((F64)gAgent.getAvatarObject()->getPelvisToFoot(), target_global.mdV[VZ] - targetOnGround.mdV[VZ]);
2229 2238
2230 // clamp z value of target to minimum height above ground 2239 // clamp z value of target to minimum height above ground
@@ -2580,10 +2589,7 @@ void LLAgent::updateLookAt(const S32 mouse_x, const S32 mouse_y)
2580 // Move head based on cursor position 2589 // Move head based on cursor position
2581 ELookAtType lookAtType = LOOKAT_TARGET_NONE; 2590 ELookAtType lookAtType = LOOKAT_TARGET_NONE;
2582 LLVector3 headLookAxis; 2591 LLVector3 headLookAxis;
2583 LLCoordFrame frameCamera = *((LLCoordFrame*)gCamera); 2592 LLCoordFrame frameCamera = *((LLCoordFrame*)LLViewerCamera::getInstance());
2584
2585 F32 x_from_center = ((F32) mouse_x / (F32) gViewerWindow->getWindowWidth() ) - 0.5f;
2586 F32 y_from_center = ((F32) mouse_y / (F32) gViewerWindow->getWindowHeight() ) - 0.5f;
2587 2593
2588 if (cameraMouselook()) 2594 if (cameraMouselook())
2589 { 2595 {
@@ -2591,6 +2597,12 @@ void LLAgent::updateLookAt(const S32 mouse_x, const S32 mouse_y)
2591 } 2597 }
2592 else if (cameraThirdPerson()) 2598 else if (cameraThirdPerson())
2593 { 2599 {
2600 // range from -.5 to .5
2601 F32 x_from_center =
2602 ((F32) mouse_x / (F32) gViewerWindow->getWindowWidth() ) - 0.5f;
2603 F32 y_from_center =
2604 ((F32) mouse_y / (F32) gViewerWindow->getWindowHeight() ) - 0.5f;
2605
2594 frameCamera.yaw( - x_from_center * gSavedSettings.getF32("YawFromMousePosition") * DEG_TO_RAD); 2606 frameCamera.yaw( - x_from_center * gSavedSettings.getF32("YawFromMousePosition") * DEG_TO_RAD);
2595 frameCamera.pitch( - y_from_center * gSavedSettings.getF32("PitchFromMousePosition") * DEG_TO_RAD); 2607 frameCamera.pitch( - y_from_center * gSavedSettings.getF32("PitchFromMousePosition") * DEG_TO_RAD);
2596 lookAtType = LOOKAT_TARGET_FREELOOK; 2608 lookAtType = LOOKAT_TARGET_FREELOOK;
@@ -2636,11 +2648,11 @@ void LLAgent::setAvatarObject(LLVOAvatar *avatar)
2636 2648
2637 if (!mLookAt) 2649 if (!mLookAt)
2638 { 2650 {
2639 mLookAt = (LLHUDEffectLookAt *)gHUDManager->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_LOOKAT); 2651 mLookAt = (LLHUDEffectLookAt *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_LOOKAT);
2640 } 2652 }
2641 if (!mPointAt) 2653 if (!mPointAt)
2642 { 2654 {
2643 mPointAt = (LLHUDEffectPointAt *)gHUDManager->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINTAT); 2655 mPointAt = (LLHUDEffectPointAt *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINTAT);
2644 } 2656 }
2645 2657
2646 if (!mLookAt.isNull()) 2658 if (!mLookAt.isNull())
@@ -2741,7 +2753,7 @@ void LLAgent::clearRenderState(U8 clearstate)
2741//----------------------------------------------------------------------------- 2753//-----------------------------------------------------------------------------
2742U8 LLAgent::getRenderState() 2754U8 LLAgent::getRenderState()
2743{ 2755{
2744 if (gNoRender || gToolMgr == NULL || gSelectMgr == NULL || gKeyboard == NULL) 2756 if (gNoRender || gKeyboard == NULL)
2745 { 2757 {
2746 return 0; 2758 return 0;
2747 } 2759 }
@@ -2753,8 +2765,8 @@ U8 LLAgent::getRenderState()
2753 stopTyping(); 2765 stopTyping();
2754 } 2766 }
2755 2767
2756 if ((!gSelectMgr->getSelection()->isEmpty() && gSelectMgr->shouldShowSelection()) 2768 if ((!LLSelectMgr::getInstance()->getSelection()->isEmpty() && LLSelectMgr::getInstance()->shouldShowSelection())
2757 || gToolMgr->getCurrentTool()->isEditing() ) 2769 || LLToolMgr::getInstance()->getCurrentTool()->isEditing() )
2758 { 2770 {
2759 setRenderState(AGENT_STATE_EDITING); 2771 setRenderState(AGENT_STATE_EDITING);
2760 } 2772 }
@@ -2796,7 +2808,7 @@ void LLAgent::endAnimationUpdateUI()
2796 gMenuBarView->setVisible(TRUE); 2808 gMenuBarView->setVisible(TRUE);
2797 gStatusBar->setVisibleForMouselook(true); 2809 gStatusBar->setVisibleForMouselook(true);
2798 2810
2799 gToolMgr->setCurrentToolset(gBasicToolset); 2811 LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
2800 2812
2801 // Only pop if we have pushed... 2813 // Only pop if we have pushed...
2802 if (TRUE == mViewsPushed) 2814 if (TRUE == mViewsPushed)
@@ -2844,7 +2856,7 @@ void LLAgent::endAnimationUpdateUI()
2844 { 2856 {
2845 // make sure we ask to save changes 2857 // make sure we ask to save changes
2846 2858
2847 gToolMgr->setCurrentToolset(gBasicToolset); 2859 LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
2848 2860
2849 // HACK: If we're quitting, and we were in customize avatar, don't 2861 // HACK: If we're quitting, and we were in customize avatar, don't
2850 // let the mini-map go visible again. JC 2862 // let the mini-map go visible again. JC
@@ -2887,7 +2899,7 @@ void LLAgent::endAnimationUpdateUI()
2887 // JC - Added for always chat in third person option 2899 // JC - Added for always chat in third person option
2888 gFocusMgr.setKeyboardFocus(NULL); 2900 gFocusMgr.setKeyboardFocus(NULL);
2889 2901
2890 gToolMgr->setCurrentToolset(gMouselookToolset); 2902 LLToolMgr::getInstance()->setCurrentToolset(gMouselookToolset);
2891 2903
2892 mViewsPushed = TRUE; 2904 mViewsPushed = TRUE;
2893 2905
@@ -2929,7 +2941,7 @@ void LLAgent::endAnimationUpdateUI()
2929 } 2941 }
2930 if (mAvatarObject->getParent()) 2942 if (mAvatarObject->getParent())
2931 { 2943 {
2932 LLVector3 at_axis = gCamera->getAtAxis(); 2944 LLVector3 at_axis = LLViewerCamera::getInstance()->getAtAxis();
2933 LLViewerObject* root_object = (LLViewerObject*)mAvatarObject->getRoot(); 2945 LLViewerObject* root_object = (LLViewerObject*)mAvatarObject->getRoot();
2934 if (root_object->flagCameraDecoupled()) 2946 if (root_object->flagCameraDecoupled())
2935 { 2947 {
@@ -2945,7 +2957,7 @@ void LLAgent::endAnimationUpdateUI()
2945 } 2957 }
2946 else if (mCameraMode == CAMERA_MODE_CUSTOMIZE_AVATAR) 2958 else if (mCameraMode == CAMERA_MODE_CUSTOMIZE_AVATAR)
2947 { 2959 {
2948 gToolMgr->setCurrentToolset(gFaceEditToolset); 2960 LLToolMgr::getInstance()->setCurrentToolset(gFaceEditToolset);
2949 2961
2950 gFloaterMap->pushVisible(FALSE); 2962 gFloaterMap->pushVisible(FALSE);
2951 /* 2963 /*
@@ -3028,24 +3040,21 @@ void LLAgent::updateCamera()
3028 } 3040 }
3029 3041
3030 // Update UI with our camera inputs 3042 // Update UI with our camera inputs
3031 if (gFloaterCamera) 3043 LLFloaterCamera::getInstance()->mRotate->setToggleState(
3032 { 3044 mOrbitRightKey > 0.f, // left
3033 gFloaterCamera->mRotate->setToggleState( 3045 mOrbitUpKey > 0.f, // top
3034 mOrbitRightKey > 0.f, // left 3046 mOrbitLeftKey > 0.f, // right
3035 mOrbitUpKey > 0.f, // top 3047 mOrbitDownKey > 0.f); // bottom
3036 mOrbitLeftKey > 0.f, // right 3048
3037 mOrbitDownKey > 0.f); // bottom 3049 LLFloaterCamera::getInstance()->mZoom->setToggleState(
3038 3050 mOrbitInKey > 0.f, // top
3039 gFloaterCamera->mZoom->setToggleState( 3051 mOrbitOutKey > 0.f); // bottom
3040 mOrbitInKey > 0.f, // top 3052
3041 mOrbitOutKey > 0.f); // bottom 3053 LLFloaterCamera::getInstance()->mTrack->setToggleState(
3042 3054 mPanLeftKey > 0.f, // left
3043 gFloaterCamera->mTrack->setToggleState( 3055 mPanUpKey > 0.f, // top
3044 mPanLeftKey > 0.f, // left 3056 mPanRightKey > 0.f, // right
3045 mPanUpKey > 0.f, // top 3057 mPanDownKey > 0.f); // bottom
3046 mPanRightKey > 0.f, // right
3047 mPanDownKey > 0.f); // bottom
3048 }
3049 3058
3050 // Handle camera movement based on keyboard. 3059 // Handle camera movement based on keyboard.
3051 const F32 ORBIT_OVER_RATE = 90.f * DEG_TO_RAD; // radians per second 3060 const F32 ORBIT_OVER_RATE = 90.f * DEG_TO_RAD; // radians per second
@@ -3068,7 +3077,7 @@ void LLAgent::updateCamera()
3068 { 3077 {
3069 F32 input_rate = mOrbitInKey - mOrbitOutKey; 3078 F32 input_rate = mOrbitInKey - mOrbitOutKey;
3070 3079
3071 LLVector3d to_focus = gAgent.getPosGlobalFromAgent(gCamera->getOrigin()) - calcFocusPositionTargetGlobal(); 3080 LLVector3d to_focus = gAgent.getPosGlobalFromAgent(LLViewerCamera::getInstance()->getOrigin()) - calcFocusPositionTargetGlobal();
3072 F32 distance_to_focus = (F32)to_focus.magVec(); 3081 F32 distance_to_focus = (F32)to_focus.magVec();
3073 // Move at distance (in meters) meters per second 3082 // Move at distance (in meters) meters per second
3074 cameraOrbitIn( input_rate * distance_to_focus / gFPSClamped ); 3083 cameraOrbitIn( input_rate * distance_to_focus / gFPSClamped );
@@ -3185,8 +3194,9 @@ void LLAgent::updateCamera()
3185 } 3194 }
3186 3195
3187 // ...adjust position for animation 3196 // ...adjust position for animation
3188 camera_pos_global = lerp(mAnimationCameraStartGlobal, camera_target_global, fraction_of_animation); 3197 F32 smooth_fraction_of_animation = llsmoothstep(0.0f, 1.0f, fraction_of_animation);
3189 mFocusGlobal = lerp(mAnimationFocusStartGlobal, focus_target_global, fraction_of_animation); 3198 camera_pos_global = lerp(mAnimationCameraStartGlobal, camera_target_global, smooth_fraction_of_animation);
3199 mFocusGlobal = lerp(mAnimationFocusStartGlobal, focus_target_global, smooth_fraction_of_animation);
3190 } 3200 }
3191 else 3201 else
3192 { 3202 {
@@ -3205,13 +3215,52 @@ void LLAgent::updateCamera()
3205 getAvatarObject()->updateAttachmentVisibility(mCameraMode); 3215 getAvatarObject()->updateAttachmentVisibility(mCameraMode);
3206 } 3216 }
3207 } 3217 }
3208 else 3218 else
3209 { 3219 {
3210 camera_pos_global = camera_target_global; 3220 camera_pos_global = camera_target_global;
3211 mFocusGlobal = focus_target_global; 3221 mFocusGlobal = focus_target_global;
3212 mShowAvatar = TRUE; 3222 mShowAvatar = TRUE;
3213 } 3223 }
3214 3224
3225 // smoothing
3226 if (TRUE)
3227 {
3228 LLVector3d agent_pos = getPositionGlobal();
3229 LLVector3d camera_pos_agent = camera_pos_global - agent_pos;
3230
3231 if (cameraThirdPerson()) // only smooth in third person mode
3232 {
3233 F32 smoothing = llclampf(1.f - pow(2.f, -4.f * gSavedSettings.getF32("CameraPositionSmoothing") / gFPSClamped));
3234 // we use average FPS instead of LLCriticalDamp b/c exact frame time is jittery
3235
3236
3237 if (!mFocusObject) // we differentiate on avatar mode
3238 {
3239 // for avatar-relative focus, we smooth in avatar space -
3240 // the avatar moves too jerkily w/r/t global space to smooth there.
3241
3242 LLVector3d delta = camera_pos_agent - mCameraSmoothingLastPositionAgent;
3243 if (delta.magVec() < MAX_CAMERA_SMOOTH_DISTANCE) // only smooth over short distances please
3244 {
3245 camera_pos_agent = lerp(camera_pos_agent, mCameraSmoothingLastPositionAgent, smoothing);
3246 camera_pos_global = camera_pos_agent + agent_pos;
3247 }
3248 }
3249 else
3250 {
3251 LLVector3d delta = camera_pos_global - mCameraSmoothingLastPositionGlobal;
3252 if (delta.magVec() < MAX_CAMERA_SMOOTH_DISTANCE) // only smooth over short distances please
3253 {
3254 camera_pos_global = lerp(camera_pos_global, mCameraSmoothingLastPositionGlobal, smoothing);
3255 }
3256 }
3257 }
3258
3259 mCameraSmoothingLastPositionGlobal = camera_pos_global;
3260 mCameraSmoothingLastPositionAgent = camera_pos_agent;
3261 }
3262
3263
3215 mCameraCurrentFOVZoomFactor = lerp(mCameraCurrentFOVZoomFactor, mCameraFOVZoomFactor, LLCriticalDamp::getInterpolant(FOV_ZOOM_HALF_LIFE)); 3264 mCameraCurrentFOVZoomFactor = lerp(mCameraCurrentFOVZoomFactor, mCameraFOVZoomFactor, LLCriticalDamp::getInterpolant(FOV_ZOOM_HALF_LIFE));
3216 3265
3217// llinfos << "Current FOV Zoom: " << mCameraCurrentFOVZoomFactor << " Target FOV Zoom: " << mCameraFOVZoomFactor << " Object penetration: " << mFocusObjectDist << llendl; 3266// llinfos << "Current FOV Zoom: " << mCameraCurrentFOVZoomFactor << " Target FOV Zoom: " << mCameraFOVZoomFactor << " Object penetration: " << mFocusObjectDist << llendl;
@@ -3230,15 +3279,15 @@ void LLAgent::updateCamera()
3230 // Move the camera 3279 // Move the camera
3231 3280
3232 //Ventrella 3281 //Ventrella
3233 gCamera->updateCameraLocation(mCameraPositionAgent, mCameraUpVector, focus_agent); 3282 LLViewerCamera::getInstance()->updateCameraLocation(mCameraPositionAgent, mCameraUpVector, focus_agent);
3234 //gCamera->updateCameraLocation(mCameraPositionAgent, camera_skyward, focus_agent); 3283 //LLViewerCamera::getInstance()->updateCameraLocation(mCameraPositionAgent, camera_skyward, focus_agent);
3235 //end Ventrella 3284 //end Ventrella
3236 3285
3237 //RN: translate UI offset after camera is oriented properly 3286 //RN: translate UI offset after camera is oriented properly
3238 gCamera->translate(gCamera->getLeftAxis() * ui_offset); 3287 LLViewerCamera::getInstance()->translate(LLViewerCamera::getInstance()->getLeftAxis() * ui_offset);
3239 3288
3240 // Change FOV 3289 // Change FOV
3241 gCamera->setView(gCamera->getDefaultFOV() / (1.f + mCameraCurrentFOVZoomFactor)); 3290 LLViewerCamera::getInstance()->setView(LLViewerCamera::getInstance()->getDefaultFOV() / (1.f + mCameraCurrentFOVZoomFactor));
3242 3291
3243 // follow camera when in customize mode 3292 // follow camera when in customize mode
3244 if (cameraCustomizeAvatar()) 3293 if (cameraCustomizeAvatar())
@@ -3250,11 +3299,11 @@ void LLAgent::updateCamera()
3250 if(gVoiceClient && getRegion()) 3299 if(gVoiceClient && getRegion())
3251 { 3300 {
3252 LLMatrix3 rot; 3301 LLMatrix3 rot;
3253 rot.setRows(gCamera->getAtAxis(), gCamera->getLeftAxis (), gCamera->getUpAxis()); 3302 rot.setRows(LLViewerCamera::getInstance()->getAtAxis(), LLViewerCamera::getInstance()->getLeftAxis (), LLViewerCamera::getInstance()->getUpAxis());
3254 3303
3255 // MBW -- XXX -- Setting velocity to 0 for now. May figure it out later... 3304 // MBW -- XXX -- Setting velocity to 0 for now. May figure it out later...
3256 gVoiceClient->setCameraPosition( 3305 gVoiceClient->setCameraPosition(
3257 getRegion()->getPosGlobalFromRegion(gCamera->getOrigin()),// position 3306 getRegion()->getPosGlobalFromRegion(LLViewerCamera::getInstance()->getOrigin()),// position
3258 LLVector3::zero, // velocity 3307 LLVector3::zero, // velocity
3259 rot); // rotation matrix 3308 rot); // rotation matrix
3260 } 3309 }
@@ -3356,7 +3405,7 @@ F32 LLAgent::calcCustomizeAvatarUIOffset( const LLVector3d& camera_pos_global )
3356 3405
3357 // Move the camera so that the avatar isn't covered up by this floater. 3406 // Move the camera so that the avatar isn't covered up by this floater.
3358 F32 fraction_of_fov = 0.5f - (0.5f * (1.f - llmin(1.f, ((F32)rect.getWidth() / (F32)gViewerWindow->getWindowWidth())))); 3407 F32 fraction_of_fov = 0.5f - (0.5f * (1.f - llmin(1.f, ((F32)rect.getWidth() / (F32)gViewerWindow->getWindowWidth()))));
3359 F32 apparent_angle = fraction_of_fov * gCamera->getView() * gCamera->getAspect(); // radians 3408 F32 apparent_angle = fraction_of_fov * LLViewerCamera::getInstance()->getView() * LLViewerCamera::getInstance()->getAspect(); // radians
3360 F32 offset = tan(apparent_angle); 3409 F32 offset = tan(apparent_angle);
3361 3410
3362 if( rect.mLeft < (gViewerWindow->getWindowWidth() - rect.mRight) ) 3411 if( rect.mLeft < (gViewerWindow->getWindowWidth() - rect.mRight) )
@@ -3496,7 +3545,7 @@ void LLAgent::setupSitCamera()
3496//----------------------------------------------------------------------------- 3545//-----------------------------------------------------------------------------
3497const LLVector3 &LLAgent::getCameraPositionAgent() const 3546const LLVector3 &LLAgent::getCameraPositionAgent() const
3498{ 3547{
3499 return gCamera->getOrigin(); 3548 return LLViewerCamera::getInstance()->getOrigin();
3500} 3549}
3501 3550
3502//----------------------------------------------------------------------------- 3551//-----------------------------------------------------------------------------
@@ -3504,14 +3553,7 @@ const LLVector3 &LLAgent::getCameraPositionAgent() const
3504//----------------------------------------------------------------------------- 3553//-----------------------------------------------------------------------------
3505LLVector3d LLAgent::getCameraPositionGlobal() const 3554LLVector3d LLAgent::getCameraPositionGlobal() const
3506{ 3555{
3507 if (gCamera) 3556 return getPosGlobalFromAgent(LLViewerCamera::getInstance()->getOrigin());
3508 {
3509 return getPosGlobalFromAgent(gCamera->getOrigin());
3510 }
3511 else
3512 {
3513 return (LLVector3d::zero);
3514 }
3515} 3557}
3516 3558
3517//----------------------------------------------------------------------------- 3559//-----------------------------------------------------------------------------
@@ -3761,7 +3803,7 @@ LLVector3d LLAgent::calcCameraPositionTargetGlobal(BOOL *hit_limit)
3761 3803
3762 if (!gSavedSettings.getBOOL("DisableCameraConstraints") && !gAgent.isGodlike()) 3804 if (!gSavedSettings.getBOOL("DisableCameraConstraints") && !gAgent.isGodlike())
3763 { 3805 {
3764 LLViewerRegion* regionp = gWorldPointer->getRegionFromPosGlobal( 3806 LLViewerRegion* regionp = LLWorld::getInstance()->getRegionFromPosGlobal(
3765 camera_position_global); 3807 camera_position_global);
3766 bool constrain = true; 3808 bool constrain = true;
3767 if(regionp && regionp->canManageEstate()) 3809 if(regionp && regionp->canManageEstate())
@@ -3786,7 +3828,7 @@ LLVector3d LLAgent::calcCameraPositionTargetGlobal(BOOL *hit_limit)
3786 } 3828 }
3787 3829
3788// JC - Could constrain camera based on parcel stuff here. 3830// JC - Could constrain camera based on parcel stuff here.
3789// LLViewerRegion *regionp = gWorldPointer->getRegionFromPosGlobal(camera_position_global); 3831// LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromPosGlobal(camera_position_global);
3790// 3832//
3791// if (regionp && !regionp->mParcelOverlay->isBuildCameraAllowed(regionp->getPosRegionFromGlobal(camera_position_global))) 3833// if (regionp && !regionp->mParcelOverlay->isBuildCameraAllowed(regionp->getPosRegionFromGlobal(camera_position_global)))
3792// { 3834// {
@@ -3799,14 +3841,7 @@ LLVector3d LLAgent::calcCameraPositionTargetGlobal(BOOL *hit_limit)
3799 // Don't let camera go underground 3841 // Don't let camera go underground
3800 F32 camera_min_off_ground = getCameraMinOffGround(); 3842 F32 camera_min_off_ground = getCameraMinOffGround();
3801 3843
3802 if (gWorldPointer) 3844 camera_land_height = LLWorld::getInstance()->resolveLandHeightGlobal(camera_position_global);
3803 {
3804 camera_land_height = gWorldPointer->resolveLandHeightGlobal(camera_position_global);
3805 }
3806 else
3807 {
3808 camera_land_height = 0.f;
3809 }
3810 3845
3811 if (camera_position_global.mdV[VZ] < camera_land_height + camera_min_off_ground) 3846 if (camera_position_global.mdV[VZ] < camera_land_height + camera_min_off_ground)
3812 { 3847 {
@@ -3842,7 +3877,7 @@ void LLAgent::handleScrollWheel(S32 clicks)
3842 } 3877 }
3843 else 3878 else
3844 { 3879 {
3845 LLObjectSelectionHandle selection = gSelectMgr->getSelection(); 3880 LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
3846 const F32 ROOT_ROOT_TWO = sqrt(F_SQRT2); 3881 const F32 ROOT_ROOT_TWO = sqrt(F_SQRT2);
3847 3882
3848 // Block if camera is animating 3883 // Block if camera is animating
@@ -3922,7 +3957,7 @@ void LLAgent::changeCameraToMouselook(BOOL animate)
3922 // unpause avatar animation 3957 // unpause avatar animation
3923 mPauseRequest = NULL; 3958 mPauseRequest = NULL;
3924 3959
3925 gToolMgr->setCurrentToolset(gMouselookToolset); 3960 LLToolMgr::getInstance()->setCurrentToolset(gMouselookToolset);
3926 3961
3927 gSavedSettings.setBOOL("FirstPersonBtnState", FALSE); 3962 gSavedSettings.setBOOL("FirstPersonBtnState", FALSE);
3928 gSavedSettings.setBOOL("MouselookBtnState", TRUE); 3963 gSavedSettings.setBOOL("MouselookBtnState", TRUE);
@@ -3936,7 +3971,7 @@ void LLAgent::changeCameraToMouselook(BOOL animate)
3936 } 3971 }
3937 3972
3938 //gViewerWindow->stopGrab(); 3973 //gViewerWindow->stopGrab();
3939 gSelectMgr->deselectAll(); 3974 LLSelectMgr::getInstance()->deselectAll();
3940 gViewerWindow->hideCursor(); 3975 gViewerWindow->hideCursor();
3941 gViewerWindow->moveCursorToCenter(); 3976 gViewerWindow->moveCursorToCenter();
3942 3977
@@ -4000,11 +4035,11 @@ void LLAgent::changeCameraToFollow(BOOL animate)
4000 mCameraMode = CAMERA_MODE_FOLLOW; 4035 mCameraMode = CAMERA_MODE_FOLLOW;
4001 4036
4002 // bang-in the current focus, position, and up vector of the follow cam 4037 // bang-in the current focus, position, and up vector of the follow cam
4003 mFollowCam.reset( mCameraPositionAgent, gCamera->getPointOfInterest(), LLVector3::z_axis ); 4038 mFollowCam.reset( mCameraPositionAgent, LLViewerCamera::getInstance()->getPointOfInterest(), LLVector3::z_axis );
4004 4039
4005 if (gBasicToolset) 4040 if (gBasicToolset)
4006 { 4041 {
4007 gToolMgr->setCurrentToolset(gBasicToolset); 4042 LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
4008 } 4043 }
4009 4044
4010 if (mAvatarObject) 4045 if (mAvatarObject)
@@ -4073,7 +4108,7 @@ void LLAgent::changeCameraToThirdPerson(BOOL animate)
4073 { 4108 {
4074 if (gBasicToolset) 4109 if (gBasicToolset)
4075 { 4110 {
4076 gToolMgr->setCurrentToolset(gBasicToolset); 4111 LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
4077 } 4112 }
4078 4113
4079 mCameraLag.clearVec(); 4114 mCameraLag.clearVec();
@@ -4098,7 +4133,7 @@ void LLAgent::changeCameraToThirdPerson(BOOL animate)
4098 if (!mAvatarObject.isNull() && mAvatarObject->getParent()) 4133 if (!mAvatarObject.isNull() && mAvatarObject->getParent())
4099 { 4134 {
4100 LLQuaternion obj_rot = ((LLViewerObject*)mAvatarObject->getParent())->getRenderRotation(); 4135 LLQuaternion obj_rot = ((LLViewerObject*)mAvatarObject->getParent())->getRenderRotation();
4101 at_axis = gCamera->getAtAxis(); 4136 at_axis = LLViewerCamera::getInstance()->getAtAxis();
4102 at_axis.mV[VZ] = 0.f; 4137 at_axis.mV[VZ] = 0.f;
4103 at_axis.normVec(); 4138 at_axis.normVec();
4104 resetAxes(at_axis * ~obj_rot); 4139 resetAxes(at_axis * ~obj_rot);
@@ -4133,7 +4168,7 @@ void LLAgent::changeCameraToCustomizeAvatar(BOOL avatar_animate, BOOL camera_ani
4133 4168
4134 if (gFaceEditToolset) 4169 if (gFaceEditToolset)
4135 { 4170 {
4136 gToolMgr->setCurrentToolset(gFaceEditToolset); 4171 LLToolMgr::getInstance()->setCurrentToolset(gFaceEditToolset);
4137 } 4172 }
4138 4173
4139 gSavedSettings.setBOOL("FirstPersonBtnState", FALSE); 4174 gSavedSettings.setBOOL("FirstPersonBtnState", FALSE);
@@ -4353,11 +4388,11 @@ void LLAgent::setCameraPosAndFocusGlobal(const LLVector3d& camera_pos, const LLV
4353 if( CAMERA_MODE_CUSTOMIZE_AVATAR == mCameraMode ) 4388 if( CAMERA_MODE_CUSTOMIZE_AVATAR == mCameraMode )
4354 { 4389 {
4355 // Compensate for the fact that the camera has already been offset to make room for LLFloaterCustomize. 4390 // Compensate for the fact that the camera has already been offset to make room for LLFloaterCustomize.
4356 mAnimationCameraStartGlobal -= LLVector3d(gCamera->getLeftAxis() * calcCustomizeAvatarUIOffset( mAnimationCameraStartGlobal )); 4391 mAnimationCameraStartGlobal -= LLVector3d(LLViewerCamera::getInstance()->getLeftAxis() * calcCustomizeAvatarUIOffset( mAnimationCameraStartGlobal ));
4357 } 4392 }
4358 } 4393 }
4359 4394
4360 //gCamera->setOrigin( gAgent.getPosAgentFromGlobal( camera_pos ) ); 4395 //LLViewerCamera::getInstance()->setOrigin( gAgent.getPosAgentFromGlobal( camera_pos ) );
4361 setFocusObject(gObjectList.findObject(object_id)); 4396 setFocusObject(gObjectList.findObject(object_id));
4362 mFocusTargetGlobal = focus; 4397 mFocusTargetGlobal = focus;
4363 mCameraFocusOffsetTarget = camera_pos - focus; 4398 mCameraFocusOffsetTarget = camera_pos - focus;
@@ -4448,14 +4483,14 @@ void LLAgent::setFocusOnAvatar(BOOL focus_on_avatar, BOOL animate)
4448 if (!mAvatarObject.isNull() && mAvatarObject->getParent()) 4483 if (!mAvatarObject.isNull() && mAvatarObject->getParent())
4449 { 4484 {
4450 LLQuaternion obj_rot = ((LLViewerObject*)mAvatarObject->getParent())->getRenderRotation(); 4485 LLQuaternion obj_rot = ((LLViewerObject*)mAvatarObject->getParent())->getRenderRotation();
4451 at_axis = gCamera->getAtAxis(); 4486 at_axis = LLViewerCamera::getInstance()->getAtAxis();
4452 at_axis.mV[VZ] = 0.f; 4487 at_axis.mV[VZ] = 0.f;
4453 at_axis.normVec(); 4488 at_axis.normVec();
4454 resetAxes(at_axis * ~obj_rot); 4489 resetAxes(at_axis * ~obj_rot);
4455 } 4490 }
4456 else 4491 else
4457 { 4492 {
4458 at_axis = gCamera->getAtAxis(); 4493 at_axis = LLViewerCamera::getInstance()->getAtAxis();
4459 at_axis.mV[VZ] = 0.f; 4494 at_axis.mV[VZ] = 0.f;
4460 at_axis.normVec(); 4495 at_axis.normVec();
4461 resetAxes(at_axis); 4496 resetAxes(at_axis);
@@ -4473,7 +4508,7 @@ void LLAgent::heardChat(const LLUUID& id)
4473{ 4508{
4474 // log text and voice chat to speaker mgr 4509 // log text and voice chat to speaker mgr
4475 // for keeping track of active speakers, etc. 4510 // for keeping track of active speakers, etc.
4476 gLocalSpeakerMgr->speakerChatted(id); 4511 LLLocalSpeakerMgr::getInstance()->speakerChatted(id);
4477 4512
4478 // don't respond to your own voice 4513 // don't respond to your own voice
4479 if (id == getID()) return; 4514 if (id == getID()) return;
@@ -4583,7 +4618,7 @@ void LLAgent::setStartPosition(U32 location_id)
4583 // this simulator. Clamp it to the region the agent is 4618 // this simulator. Clamp it to the region the agent is
4584 // in, a little bit in on each side. 4619 // in, a little bit in on each side.
4585 const F32 INSET = 0.5f; //meters 4620 const F32 INSET = 0.5f; //meters
4586 const F32 REGION_WIDTH = gWorldPointer->getRegionWidthInMeters(); 4621 const F32 REGION_WIDTH = LLWorld::getInstance()->getRegionWidthInMeters();
4587 4622
4588 LLVector3 agent_pos = getPositionAgent(); 4623 LLVector3 agent_pos = getPositionAgent();
4589 4624
@@ -4599,7 +4634,7 @@ void LLAgent::setStartPosition(U32 location_id)
4599 // Don't let them go below ground, or too high. 4634 // Don't let them go below ground, or too high.
4600 agent_pos.mV[VZ] = llclamp( agent_pos.mV[VZ], 4635 agent_pos.mV[VZ] = llclamp( agent_pos.mV[VZ],
4601 mRegionp->getLandHeightRegion( agent_pos ), 4636 mRegionp->getLandHeightRegion( agent_pos ),
4602 gWorldPointer->getRegionMaxHeight() ); 4637 LLWorld::getInstance()->getRegionMaxHeight() );
4603 4638
4604 LLMessageSystem* msg = gMessageSystem; 4639 LLMessageSystem* msg = gMessageSystem;
4605 msg->newMessageFast(_PREHASH_SetStartLocationRequest); 4640 msg->newMessageFast(_PREHASH_SetStartLocationRequest);
@@ -4889,7 +4924,7 @@ void LLAgent::buildLocationString(std::string& str)
4889 4924
4890 // create a defult name and description for the landmark 4925 // create a defult name and description for the landmark
4891 std::string buffer; 4926 std::string buffer;
4892 if( gParcelMgr->getAgentParcelName().empty() ) 4927 if( LLViewerParcelMgr::getInstance()->getAgentParcelName().empty() )
4893 { 4928 {
4894 // the parcel doesn't have a name 4929 // the parcel doesn't have a name
4895 buffer = llformat("%.32s (%d, %d, %d)", 4930 buffer = llformat("%.32s (%d, %d, %d)",
@@ -4900,7 +4935,7 @@ void LLAgent::buildLocationString(std::string& str)
4900 { 4935 {
4901 // the parcel has a name, so include it in the landmark name 4936 // the parcel has a name, so include it in the landmark name
4902 buffer = llformat("%.32s, %.32s (%d, %d, %d)", 4937 buffer = llformat("%.32s, %.32s (%d, %d, %d)",
4903 gParcelMgr->getAgentParcelName().c_str(), 4938 LLViewerParcelMgr::getInstance()->getAgentParcelName().c_str(),
4904 getRegion()->getName().c_str(), 4939 getRegion()->getName().c_str(),
4905 pos_x, pos_y, pos_z); 4940 pos_x, pos_y, pos_z);
4906 } 4941 }
@@ -4920,7 +4955,7 @@ LLQuaternion LLAgent::getHeadRotation()
4920 } 4955 }
4921 4956
4922 // We must be in mouselook 4957 // We must be in mouselook
4923 LLVector3 look_dir( gCamera->getAtAxis() ); 4958 LLVector3 look_dir( LLViewerCamera::getInstance()->getAtAxis() );
4924 LLVector3 up = look_dir % mFrameAgent.getLeftAxis(); 4959 LLVector3 up = look_dir % mFrameAgent.getLeftAxis();
4925 LLVector3 left = up % look_dir; 4960 LLVector3 left = up % look_dir;
4926 4961
@@ -4990,6 +5025,20 @@ void LLAgent::sendAnimationRequest(const LLUUID &anim_id, EAnimRequest request)
4990 sendReliableMessage(); 5025 sendReliableMessage();
4991} 5026}
4992 5027
5028void LLAgent::sendWalkRun(bool running)
5029{
5030 LLMessageSystem* msgsys = gMessageSystem;
5031 if (msgsys)
5032 {
5033 msgsys->newMessageFast(_PREHASH_SetAlwaysRun);
5034 msgsys->nextBlockFast(_PREHASH_AgentData);
5035 msgsys->addUUIDFast(_PREHASH_AgentID, getID());
5036 msgsys->addUUIDFast(_PREHASH_SessionID, getSessionID());
5037 msgsys->addBOOLFast(_PREHASH_AlwaysRun, BOOL(running) );
5038 sendReliableMessage();
5039 }
5040}
5041
4993void LLAgent::friendsChanged() 5042void LLAgent::friendsChanged()
4994{ 5043{
4995 LLCollectProxyBuddies collector; 5044 LLCollectProxyBuddies collector;
@@ -5147,7 +5196,7 @@ void LLAgent::processAgentDropGroup(LLMessageSystem *msg, void **)
5147 // refresh all group information 5196 // refresh all group information
5148 gAgent.sendAgentDataUpdateRequest(); 5197 gAgent.sendAgentDataUpdateRequest();
5149 5198
5150 gGroupMgr->clearGroupData(group_id); 5199 LLGroupMgr::getInstance()->clearGroupData(group_id);
5151 // close the floater for this group, if any. 5200 // close the floater for this group, if any.
5152 LLFloaterGroupInfo::closeGroup(group_id); 5201 LLFloaterGroupInfo::closeGroup(group_id);
5153 // refresh the group panel of the search window, if necessary. 5202 // refresh the group panel of the search window, if necessary.
@@ -5226,7 +5275,7 @@ class LLAgentDropGroupViewerNode : public LLHTTPNode
5226 // refresh all group information 5275 // refresh all group information
5227 gAgent.sendAgentDataUpdateRequest(); 5276 gAgent.sendAgentDataUpdateRequest();
5228 5277
5229 gGroupMgr->clearGroupData(group_id); 5278 LLGroupMgr::getInstance()->clearGroupData(group_id);
5230 // close the floater for this group, if any. 5279 // close the floater for this group, if any.
5231 LLFloaterGroupInfo::closeGroup(group_id); 5280 LLFloaterGroupInfo::closeGroup(group_id);
5232 // refresh the group panel of the search window, 5281 // refresh the group panel of the search window,
@@ -5687,14 +5736,14 @@ bool LLAgent::teleportCore(bool is_local)
5687 LLFloaterWorldMap::hide(NULL); 5736 LLFloaterWorldMap::hide(NULL);
5688 LLFloaterDirectory::hide(NULL); 5737 LLFloaterDirectory::hide(NULL);
5689 5738
5690 gParcelMgr->deselectLand(); 5739 LLViewerParcelMgr::getInstance()->deselectLand();
5691 5740
5692 // Close all pie menus, deselect land, etc. 5741 // Close all pie menus, deselect land, etc.
5693 // Don't change the camera until we know teleport succeeded. JC 5742 // Don't change the camera until we know teleport succeeded. JC
5694 resetView(FALSE); 5743 resetView(FALSE);
5695 5744
5696 // local logic 5745 // local logic
5697 gViewerStats->incStat(LLViewerStats::ST_TELEPORT_COUNT); 5746 LLViewerStats::getInstance()->incStat(LLViewerStats::ST_TELEPORT_COUNT);
5698 if (!is_local) 5747 if (!is_local)
5699 { 5748 {
5700 gTeleportDisplay = TRUE; 5749 gTeleportDisplay = TRUE;
@@ -5802,7 +5851,7 @@ void LLAgent::teleportCancel()
5802void LLAgent::teleportViaLocation(const LLVector3d& pos_global) 5851void LLAgent::teleportViaLocation(const LLVector3d& pos_global)
5803{ 5852{
5804 LLViewerRegion* regionp = getRegion(); 5853 LLViewerRegion* regionp = getRegion();
5805 LLSimInfo* info = gWorldMap->simInfoFromPosGlobal(pos_global); 5854 LLSimInfo* info = LLWorldMap::getInstance()->simInfoFromPosGlobal(pos_global);
5806 if(regionp && info) 5855 if(regionp && info)
5807 { 5856 {
5808 U32 x_pos; 5857 U32 x_pos;
@@ -6857,7 +6906,7 @@ void LLAgent::sendAgentSetAppearance()
6857 msg->addUUIDFast(_PREHASH_AgentID, getID()); 6906 msg->addUUIDFast(_PREHASH_AgentID, getID());
6858 msg->addUUIDFast(_PREHASH_SessionID, getSessionID()); 6907 msg->addUUIDFast(_PREHASH_SessionID, getSessionID());
6859 6908
6860 // correct for the collisiton tolerance (to make it look like the 6909 // correct for the collision tolerance (to make it look like the
6861 // agent is actually walking on the ground/object) 6910 // agent is actually walking on the ground/object)
6862 // NOTE -- when we start correcting all of the other Havok geometry 6911 // NOTE -- when we start correcting all of the other Havok geometry
6863 // to compensate for the COLLISION_TOLERANCE ugliness we will have 6912 // to compensate for the COLLISION_TOLERANCE ugliness we will have
@@ -7401,19 +7450,6 @@ void LLAgent::userRemoveAllAttachments( void* userdata )
7401 gMessageSystem->sendReliable( gAgent.getRegionHost() ); 7450 gMessageSystem->sendReliable( gAgent.getRegionHost() );
7402} 7451}
7403 7452
7404bool LLAgent::LLHideGroupTitleListener::handleEvent(LLPointer<LLEvent> event, const LLSD &userdata)
7405{
7406 gAgent.setHideGroupTitle(event->getValue());
7407 return true;
7408
7409}
7410
7411bool LLAgent::LLEffectColorListener::handleEvent(LLPointer<LLEvent> event, const LLSD &userdata)
7412{
7413 gAgent.setEffectColor(LLColor4(event->getValue()));
7414 return true;
7415}
7416
7417void LLAgent::observeFriends() 7453void LLAgent::observeFriends()
7418{ 7454{
7419 if(!mFriendObserver) 7455 if(!mFriendObserver)
diff --git a/linden/indra/newview/llagent.h b/linden/indra/newview/llagent.h
index 2a875a0..01462f1 100644
--- a/linden/indra/newview/llagent.h
+++ b/linden/indra/newview/llagent.h
@@ -36,6 +36,7 @@
36 36
37#include "indra_constants.h" 37#include "indra_constants.h"
38#include "llmath.h" 38#include "llmath.h"
39#include "llcontrol.h"
39#include "llcoordframe.h" 40#include "llcoordframe.h"
40#include "llevent.h" 41#include "llevent.h"
41#include "llagentconstants.h" 42#include "llagentconstants.h"
@@ -180,7 +181,7 @@ public:
180 void updateCamera(); // call once per frame to update camera location/orientation 181 void updateCamera(); // call once per frame to update camera location/orientation
181 void resetCamera(); // slam camera into its default position 182 void resetCamera(); // slam camera into its default position
182 void setupSitCamera(); 183 void setupSitCamera();
183 void setCameraCollidePlane(LLVector4 &plane) { mCameraCollidePlane = plane; } 184 void setCameraCollidePlane(const LLVector4 &plane) { mCameraCollidePlane = plane; }
184 185
185 void changeCameraToDefault(); 186 void changeCameraToDefault();
186 void changeCameraToMouselook(BOOL animate = TRUE); 187 void changeCameraToMouselook(BOOL animate = TRUE);
@@ -201,16 +202,17 @@ public:
201 202
202 void heardChat(const LLUUID& id); 203 void heardChat(const LLUUID& id);
203 void lookAtLastChat(); 204 void lookAtLastChat();
204 LLUUID getLastChatter() { return mLastChatterID; } 205 F32 getTypingTime() { return mTypingTimer.getElapsedTimeF32(); }
205 F32 getTypingTime() { return mTypingTimer.getElapsedTimeF32(); }
206 206
207 void setAFK(); 207 void setAFK();
208 void clearAFK(); 208 void clearAFK();
209 BOOL getAFK() const; 209 BOOL getAFK() const;
210 210
211 void setAlwaysRun() { mbAlwaysRun = TRUE; } 211 void setAlwaysRun() { mbAlwaysRun = true; }
212 void clearAlwaysRun() { mbAlwaysRun = FALSE; } 212 void clearAlwaysRun() { mbAlwaysRun = false; }
213 BOOL getAlwaysRun() const { return mbAlwaysRun; } 213
214 void setRunning() { mbRunning = true; }
215 void clearRunning() { mbRunning = false; }
214 216
215 void setBusy(); 217 void setBusy();
216 void clearBusy(); 218 void clearBusy();
@@ -220,13 +222,12 @@ public:
220 void setGodLevel(U8 god_level) { mGodLevel = god_level; } 222 void setGodLevel(U8 god_level) { mGodLevel = god_level; }
221 void setFirstLogin(BOOL b) { mFirstLogin = b; } 223 void setFirstLogin(BOOL b) { mFirstLogin = b; }
222 void setGenderChosen(BOOL b) { mGenderChosen = b; } 224 void setGenderChosen(BOOL b) { mGenderChosen = b; }
223 225
224 BOOL getAdminOverride() const { return mAdminOverride; }
225 // update internal datastructures and update the server with the 226 // update internal datastructures and update the server with the
226 // new contribution level. Returns true if the group id was found 227 // new contribution level. Returns true if the group id was found
227 // and contribution could be set. 228 // and contribution could be set.
228 BOOL setGroupContribution(const LLUUID& group_id, S32 contribution); 229 BOOL setGroupContribution(const LLUUID& group_id, S32 contribution);
229 BOOL setUserGroupFlags(const LLUUID& group_id, BOOL accept_notices, BOOL list_in_profile); 230 BOOL setUserGroupFlags(const LLUUID& group_id, BOOL accept_notices, BOOL list_in_profile);
230 void setHideGroupTitle(BOOL hide) { mHideGroupTitle = hide; } 231 void setHideGroupTitle(BOOL hide) { mHideGroupTitle = hide; }
231 232
232 // 233 //
@@ -255,6 +256,11 @@ public:
255 F32 getFocusObjectDist() const { return mFocusObjectDist; } 256 F32 getFocusObjectDist() const { return mFocusObjectDist; }
256 BOOL inPrelude(); 257 BOOL inPrelude();
257 BOOL canManageEstate() const; 258 BOOL canManageEstate() const;
259 BOOL getAdminOverride() const { return mAdminOverride; }
260
261 LLUUID getLastChatter() const { return mLastChatterID; }
262 bool getAlwaysRun() const { return mbAlwaysRun; }
263 bool getRunning() const { return mbRunning; }
258 264
259 const LLUUID& getInventoryRootID() const { return mInventoryRootID; } 265 const LLUUID& getInventoryRootID() const { return mInventoryRootID; }
260 266
@@ -350,6 +356,7 @@ public:
350 void roll(F32 angle); 356 void roll(F32 angle);
351 void yaw(F32 angle); 357 void yaw(F32 angle);
352 LLVector3 getReferenceUpVector(); 358 LLVector3 getReferenceUpVector();
359 F32 clampPitchToLimits(F32 angle);
353 360
354 void setThirdPersonHeadOffset(LLVector3 offset) { mThirdPersonHeadOffset = offset; } 361 void setThirdPersonHeadOffset(LLVector3 offset) { mThirdPersonHeadOffset = offset; }
355 // Flight management 362 // Flight management
@@ -398,12 +405,12 @@ public:
398 // Movement from user input. All set the appropriate animation flags. 405 // Movement from user input. All set the appropriate animation flags.
399 // All turn off autopilot and make sure the camera is behind the avatar. 406 // All turn off autopilot and make sure the camera is behind the avatar.
400 // direction is either positive, zero, or negative 407 // direction is either positive, zero, or negative
401 void moveAt(S32 direction); 408 void moveAt(S32 direction, bool reset_view = true);
402 void moveAtNudge(S32 direction); 409 void moveAtNudge(S32 direction);
403 void moveLeft(S32 direction); 410 void moveLeft(S32 direction);
404 void moveLeftNudge(S32 direction); 411 void moveLeftNudge(S32 direction);
405 void moveUp(S32 direction); 412 void moveUp(S32 direction);
406 void moveYaw(F32 mag); 413 void moveYaw(F32 mag, bool reset_view = true);
407 void movePitch(S32 direction); 414 void movePitch(S32 direction);
408 415
409 void setOrbitLeftKey(F32 mag) { mOrbitLeftKey = mag; } 416 void setOrbitLeftKey(F32 mag) { mOrbitLeftKey = mag; }
@@ -422,7 +429,7 @@ public:
422 429
423 U32 getControlFlags(); 430 U32 getControlFlags();
424 void setControlFlags(U32 mask); // performs bitwise mControlFlags |= mask 431 void setControlFlags(U32 mask); // performs bitwise mControlFlags |= mask
425 void clearControlFlags(U32 mask); // performs bitwise mControlFlags &= mask 432 void clearControlFlags(U32 mask); // performs bitwise mControlFlags &= ~mask
426 BOOL controlFlagsDirty() const; 433 BOOL controlFlagsDirty() const;
427 void enableControlFlagReset(); 434 void enableControlFlagReset();
428 void resetControlFlags(); 435 void resetControlFlags();
@@ -535,6 +542,15 @@ public:
535 542
536 F32 getNearChatRadius() { return mNearChatRadius; } 543 F32 getNearChatRadius() { return mNearChatRadius; }
537 544
545 enum EDoubleTapRunMode
546 {
547 DOUBLETAP_NONE,
548 DOUBLETAP_FORWARD,
549 DOUBLETAP_BACKWARD,
550 DOUBLETAP_SLIDELEFT,
551 DOUBLETAP_SLIDERIGHT
552 };
553
538 enum ETeleportState 554 enum ETeleportState
539 { 555 {
540 TELEPORT_NONE = 0, // No teleport in progress 556 TELEPORT_NONE = 0, // No teleport in progress
@@ -637,6 +653,8 @@ public:
637 653
638 BOOL areWearablesLoaded() { return mWearablesLoaded; } 654 BOOL areWearablesLoaded() { return mWearablesLoaded; }
639 655
656 void sendWalkRun(bool running);
657
640 void observeFriends(); 658 void observeFriends();
641 void friendsChanged(); 659 void friendsChanged();
642 660
@@ -670,7 +688,6 @@ protected:
670 BOOL notify = TRUE); 688 BOOL notify = TRUE);
671public: 689public:
672 // TODO: Make these private! 690 // TODO: Make these private!
673 U32 mViewerPort; // Port this agent transmits on.
674 LLUUID mSecureSessionID; // secure token for this login session 691 LLUUID mSecureSessionID; // secure token for this login session
675 692
676 F32 mDrawDistance; 693 F32 mDrawDistance;
@@ -709,7 +726,13 @@ public:
709 static std::map<LLString, LLString> sTeleportErrorMessages; 726 static std::map<LLString, LLString> sTeleportErrorMessages;
710 static std::map<LLString, LLString> sTeleportProgressMessages; 727 static std::map<LLString, LLString> sTeleportProgressMessages;
711 728
729 LLFrameTimer mDoubleTapRunTimer;
730 EDoubleTapRunMode mDoubleTapRunMode;
731
712private: 732private:
733 bool mbAlwaysRun; // should the avatar run by default rather than walk
734 bool mbRunning; // is the avatar trying to run right now
735
713 // Access or "maturity" level 736 // Access or "maturity" level
714 U8 mAccess; // SIM_ACCESS_MATURE or SIM_ACCESS_PG 737 U8 mAccess; // SIM_ACCESS_MATURE or SIM_ACCESS_PG
715 ETeleportState mTeleportState; 738 ETeleportState mTeleportState;
@@ -738,7 +761,6 @@ private:
738 BOOL mViewsPushed; // keep track of whether or not we have pushed views. 761 BOOL mViewsPushed; // keep track of whether or not we have pushed views.
739 762
740 BOOL mCustomAnim ; //current animation is ANIM_AGENT_CUSTOMIZE ? 763 BOOL mCustomAnim ; //current animation is ANIM_AGENT_CUSTOMIZE ?
741 BOOL mbAlwaysRun; // should the avatar run rather than walk
742 BOOL mShowAvatar; // should we render the avatar? 764 BOOL mShowAvatar; // should we render the avatar?
743 BOOL mCameraAnimating; // camera is transitioning from one mode to another 765 BOOL mCameraAnimating; // camera is transitioning from one mode to another
744 LLVector3d mAnimationCameraStartGlobal; // camera start position, global coords 766 LLVector3d mAnimationCameraStartGlobal; // camera start position, global coords
@@ -762,7 +784,9 @@ private:
762 BOOL mSitCameraEnabled; // use provided camera information when sitting? 784 BOOL mSitCameraEnabled; // use provided camera information when sitting?
763 LLVector3 mSitCameraPos; // root relative camera pos when sitting 785 LLVector3 mSitCameraPos; // root relative camera pos when sitting
764 LLVector3 mSitCameraFocus; // root relative camera target when sitting 786 LLVector3 mSitCameraFocus; // root relative camera target when sitting
765 787 LLVector3d mCameraSmoothingLastPositionGlobal;
788 LLVector3d mCameraSmoothingLastPositionAgent;
789
766 //Ventrella 790 //Ventrella
767 LLVector3 mCameraUpVector; // camera's up direction in world coordinates (determines the 'roll' of the view) 791 LLVector3 mCameraUpVector; // camera's up direction in world coordinates (determines the 'roll' of the view)
768 //End Ventrella 792 //End Ventrella
@@ -909,21 +933,6 @@ private:
909 LLPointer<LLRefCount> mCB; 933 LLPointer<LLRefCount> mCB;
910 }; 934 };
911 935
912 //control listeners
913 class LLHideGroupTitleListener: public LLSimpleListener
914 {
915 public:
916 bool handleEvent(LLPointer<LLEvent> event, const LLSD &userdata);
917 };
918
919 class LLEffectColorListener: public LLSimpleListener
920 {
921 public:
922 bool handleEvent(LLPointer<LLEvent> event, const LLSD &userdata);
923 };
924
925 LLHideGroupTitleListener mHideGroupTitleListener;
926 LLEffectColorListener mEffectColorListener;
927 LLFriendObserver* mFriendObserver; 936 LLFriendObserver* mFriendObserver;
928}; 937};
929 938
diff --git a/linden/indra/newview/llappviewer.cpp b/linden/indra/newview/llappviewer.cpp
index cb94e51..7c71e46 100644
--- a/linden/indra/newview/llappviewer.cpp
+++ b/linden/indra/newview/llappviewer.cpp
@@ -32,10 +32,11 @@
32 32
33#include "llviewerprecompiledheaders.h" 33#include "llviewerprecompiledheaders.h"
34#include "llappviewer.h" 34#include "llappviewer.h"
35#include "llprimitive.h"
35 36
36#include "llversionviewer.h" 37#include "llversionviewer.h"
37#include "llfeaturemanager.h" 38#include "llfeaturemanager.h"
38#include "llvieweruictrlfactory.h" 39#include "lluictrlfactory.h"
39#include "llalertdialog.h" 40#include "llalertdialog.h"
40#include "llerrorcontrol.h" 41#include "llerrorcontrol.h"
41#include "llviewerimagelist.h" 42#include "llviewerimagelist.h"
@@ -45,12 +46,12 @@
45#include "llviewerstats.h" 46#include "llviewerstats.h"
46#include "llmd5.h" 47#include "llmd5.h"
47#include "llpumpio.h" 48#include "llpumpio.h"
48#include "llfloateractivespeakers.h"
49#include "llimpanel.h" 49#include "llimpanel.h"
50#include "llmimetypes.h" 50#include "llmimetypes.h"
51#include "llstartup.h" 51#include "llstartup.h"
52#include "llfocusmgr.h" 52#include "llfocusmgr.h"
53#include "llviewerjoystick.h" 53#include "llviewerjoystick.h"
54#include "llfloaterjoystick.h"
54#include "llares.h" 55#include "llares.h"
55#include "llcurl.h" 56#include "llcurl.h"
56#include "llfloatersnapshot.h" 57#include "llfloatersnapshot.h"
@@ -62,10 +63,13 @@
62#include "llmutelist.h" 63#include "llmutelist.h"
63#include "llurldispatcher.h" 64#include "llurldispatcher.h"
64#include "llurlhistory.h" 65#include "llurlhistory.h"
66#include "llfirstuse.h"
65 67
66#include "llweb.h" 68#include "llweb.h"
67#include "llsecondlifeurls.h" 69#include "llsecondlifeurls.h"
68 70
71#include <boost/bind.hpp>
72
69#if LL_WINDOWS 73#if LL_WINDOWS
70 #include "llwindebug.h" 74 #include "llwindebug.h"
71#endif 75#endif
@@ -93,7 +97,6 @@
93#include "lltoolmgr.h" 97#include "lltoolmgr.h"
94#include "llassetstorage.h" 98#include "llassetstorage.h"
95#include "llpolymesh.h" 99#include "llpolymesh.h"
96#include "lleconomy.h"
97#include "llcachename.h" 100#include "llcachename.h"
98#include "audioengine.h" 101#include "audioengine.h"
99#include "llviewermenu.h" 102#include "llviewermenu.h"
@@ -108,6 +111,7 @@
108#include "lldebugview.h" 111#include "lldebugview.h"
109#include "llconsole.h" 112#include "llconsole.h"
110#include "llcontainerview.h" 113#include "llcontainerview.h"
114#include "llfloaterstats.h"
111#include "llhoverview.h" 115#include "llhoverview.h"
112 116
113#include "llsdserialize.h" 117#include "llsdserialize.h"
@@ -148,14 +152,12 @@
148#include "llvieweraudio.h" 152#include "llvieweraudio.h"
149#include "llimview.h" 153#include "llimview.h"
150#include "llviewerthrottle.h" 154#include "llviewerthrottle.h"
155#include "llparcel.h"
151// 156//
152 157
153#include "llinventoryview.h" 158#include "llinventoryview.h"
154 159
155// *FIX: Remove these once the command line params thing is figured out. 160#include "llcommandlineparser.h"
156// Yuck!
157static int gTempArgC = 0;
158static char** gTempArgV;
159 161
160// *FIX: These extern globals should be cleaned up. 162// *FIX: These extern globals should be cleaned up.
161// The globals either represent state/config/resource-storage of either 163// The globals either represent state/config/resource-storage of either
@@ -168,7 +170,6 @@ static char** gTempArgV;
168//---------------------------------------------------------------------------- 170//----------------------------------------------------------------------------
169// llviewernetwork.h 171// llviewernetwork.h
170#include "llviewernetwork.h" 172#include "llviewernetwork.h"
171// extern EGridInfo gGridChoice;
172 173
173 174
174////// Windows-specific includes to the bottom - nasty defines in these pollute the preprocessor 175////// Windows-specific includes to the bottom - nasty defines in these pollute the preprocessor
@@ -210,26 +211,13 @@ extern OSStatus DisplayReleaseNotes(void);
210#endif // LL_DARWIN 211#endif // LL_DARWIN
211 212
212 213
213#include "moviemaker.h"
214extern BOOL gbCapturing;
215
216#if !LL_SOLARIS
217 extern MovieMaker gMovieMaker;
218#endif
219
220extern BOOL gRandomizeFramerate; 214extern BOOL gRandomizeFramerate;
221extern BOOL gPeriodicSlowFrame; 215extern BOOL gPeriodicSlowFrame;
222 216
223//////////////////////////////////////////////////////////// 217////////////////////////////////////////////////////////////
224// All from the last globals push... 218// All from the last globals push...
225bool gVerifySSLCert = true;
226BOOL gHandleKeysAsync = FALSE; 219BOOL gHandleKeysAsync = FALSE;
227 220
228BOOL gProbeHardware = TRUE; // Use DirectX 9 to probe for hardware
229
230S32 gYieldMS = 0; // set in parse_args, used in mainLoop
231BOOL gYieldTime = FALSE;
232
233const F32 DEFAULT_AFK_TIMEOUT = 5.f * 60.f; // time with no input before user flagged as Away From Keyboard 221const F32 DEFAULT_AFK_TIMEOUT = 5.f * 60.f; // time with no input before user flagged as Away From Keyboard
234 222
235F32 gSimLastTime; // Used in LLAppViewer::init and send_stats() 223F32 gSimLastTime; // Used in LLAppViewer::init and send_stats()
@@ -240,25 +228,13 @@ LLString gDisabledMessage; // Set in LLAppViewer::initConfiguration used in idle
240BOOL gHideLinks = FALSE; // Set in LLAppViewer::initConfiguration, used externally 228BOOL gHideLinks = FALSE; // Set in LLAppViewer::initConfiguration, used externally
241 229
242BOOL gAllowIdleAFK = TRUE; 230BOOL gAllowIdleAFK = TRUE;
243F32 gAFKTimeout = DEFAULT_AFK_TIMEOUT; 231BOOL gAllowTapTapHoldRun = TRUE;
244BOOL gShowObjectUpdates = FALSE; 232BOOL gShowObjectUpdates = FALSE;
245BOOL gLogMessages = FALSE;
246std::string gChannelName = LL_CHANNEL;
247BOOL gUseAudio = TRUE;
248BOOL gUseQuickTime = TRUE; 233BOOL gUseQuickTime = TRUE;
249LLString gCmdLineFirstName;
250LLString gCmdLineLastName;
251LLString gCmdLinePassword;
252
253BOOL gAutoLogin = FALSE;
254 234
255const char* DEFAULT_SETTINGS_FILE = "settings.xml";
256BOOL gRequestInventoryLibrary = TRUE;
257BOOL gGodConnect = FALSE;
258BOOL gAcceptTOS = FALSE; 235BOOL gAcceptTOS = FALSE;
259BOOL gAcceptCriticalMessage = FALSE; 236BOOL gAcceptCriticalMessage = FALSE;
260 237
261LLUUID gViewerDigest; // MD5 digest of the viewer's executable file.
262eLastExecEvent gLastExecEvent = LAST_EXEC_NORMAL; 238eLastExecEvent gLastExecEvent = LAST_EXEC_NORMAL;
263 239
264LLSD gDebugInfo; 240LLSD gDebugInfo;
@@ -285,7 +261,6 @@ F32 gLogoutMaxTime = LOGOUT_REQUEST_TIME;
285LLUUID gInventoryLibraryOwner; 261LLUUID gInventoryLibraryOwner;
286LLUUID gInventoryLibraryRoot; 262LLUUID gInventoryLibraryRoot;
287 263
288BOOL gDisableVoice = FALSE;
289BOOL gDisconnected = FALSE; 264BOOL gDisconnected = FALSE;
290 265
291// Map scale in pixels per region 266// Map scale in pixels per region
@@ -297,17 +272,11 @@ LLFrameTimer gRestoreGLTimer;
297BOOL gRestoreGL = FALSE; 272BOOL gRestoreGL = FALSE;
298BOOL gUseWireframe = FALSE; 273BOOL gUseWireframe = FALSE;
299 274
300F32 gMouseSensitivity = 3.f;
301BOOL gInvertMouse = FALSE;
302
303// VFS globals - see llappviewer.h 275// VFS globals - see llappviewer.h
304LLVFS* gStaticVFS = NULL; 276LLVFS* gStaticVFS = NULL;
305 277
306LLMemoryInfo gSysMemory; 278LLMemoryInfo gSysMemory;
307 279
308bool gPreloadImages = true;
309bool gPreloadSounds = true;
310
311LLString gLastVersionChannel; 280LLString gLastVersionChannel;
312 281
313LLVector3 gWindVec(3.0, 3.0, 0.0); 282LLVector3 gWindVec(3.0, 3.0, 0.0);
@@ -317,34 +286,16 @@ U32 gPacketsIn = 0;
317 286
318BOOL gPrintMessagesThisFrame = FALSE; 287BOOL gPrintMessagesThisFrame = FALSE;
319 288
320BOOL gUseConsole = TRUE;
321
322BOOL gRandomizeFramerate = FALSE; 289BOOL gRandomizeFramerate = FALSE;
323BOOL gPeriodicSlowFrame = FALSE; 290BOOL gPeriodicSlowFrame = FALSE;
324 291
325BOOL gQAMode = FALSE; 292BOOL gCrashOnStartup = FALSE;
326BOOL gLLErrorActivated = FALSE; 293BOOL gLLErrorActivated = FALSE;
327BOOL gLogoutInProgress = FALSE; 294BOOL gLogoutInProgress = FALSE;
328//////////////////////////////////////////////////////////// 295////////////////////////////////////////////////////////////
329// Internal globals... that should be removed. 296// Internal globals... that should be removed.
330static F32 gQuitAfterSeconds = 0.f;
331static BOOL gRotateRight = FALSE;
332static BOOL gIgnorePixelDepth = FALSE;
333
334// Allow multiple viewers in ReleaseForDownload
335#if LL_RELEASE_FOR_DOWNLOAD
336static BOOL gMultipleViewersOK = FALSE;
337#else
338static BOOL gMultipleViewersOK = TRUE;
339#endif
340
341static std::map<std::string, std::string> gCommandLineSettings;
342static std::map<std::string, std::string> gCommandLineForcedSettings;
343
344static LLString gArgs; 297static LLString gArgs;
345 298
346static LLString gOldSettingsFileName;
347static const char* LEGACY_DEFAULT_SETTINGS_FILE = "settings.ini";
348const char* MARKER_FILE_NAME = "SecondLife.exec_marker"; 299const char* MARKER_FILE_NAME = "SecondLife.exec_marker";
349const char* ERROR_MARKER_FILE_NAME = "SecondLife.error_marker"; 300const char* ERROR_MARKER_FILE_NAME = "SecondLife.error_marker";
350const char* LLERROR_MARKER_FILE_NAME = "SecondLife.llerror_marker"; 301const char* LLERROR_MARKER_FILE_NAME = "SecondLife.llerror_marker";
@@ -367,52 +318,10 @@ std::string gLoginPage;
367std::vector<std::string> gLoginURIs; 318std::vector<std::string> gLoginURIs;
368static std::string gHelperURI; 319static std::string gHelperURI;
369 320
370static const char USAGE[] = "\n"
371"usage:\tviewer [options]\n"
372"options:\n"
373" -login <first> <last> <password> log in as a user\n"
374" -autologin log in as last saved user\n"
375" -loginpage <URL> login authentication page to use\n"
376" -loginuri <URI> login server and CGI script to use\n"
377" -helperuri <URI> helper web CGI prefix to use\n"
378" -settings <filename> specify the filename of a\n"
379" configuration file\n"
380" default is settings.xml\n"
381" -setdefault <variable> <value> specify the value of a particular\n"
382" configuration variable which can be\n"
383" overridden by settings.xml\n"
384" -set <variable> <value> specify the value of a particular\n"
385" configuration variable that\n"
386" overrides all other settings\n"
387#if !LL_RELEASE_FOR_DOWNLOAD
388" -sim <simulator_ip> specify the simulator ip address\n"
389#endif
390" -god log in as god if you have god access\n"
391" -purge delete files in cache\n"
392" -safe reset preferences, run in safe mode\n"
393" -noutc logs in local time, not UTC\n"
394" -nothread run vfs in single thread\n"
395" -noinvlib Do not request inventory library\n"
396" -multiple allow multiple viewers\n"
397" -nomultiple block multiple viewers\n"
398" -novoice disable voice\n"
399" -ignorepixeldepth ignore pixel depth settings\n"
400" -cooperative [ms] yield some idle time to local host\n"
401" -skin ui/branding skin folder to use\n"
402#if LL_WINDOWS
403" -noprobe disable hardware probe\n"
404#endif
405" -noquicktime disable QuickTime movies, speeds startup\n"
406" -nopreload don't preload UI images or sounds, speeds startup\n"
407// these seem to be unused
408//" -noenv turn off environmental effects\n"
409//" -proxy <proxy_ip> specify the proxy ip address\n"
410"\n";
411
412void idle_afk_check() 321void idle_afk_check()
413{ 322{
414 // check idle timers 323 // check idle timers
415 if (gAllowIdleAFK && (gAwayTriggerTimer.getElapsedTimeF32() > gAFKTimeout)) 324 if (gAllowIdleAFK && (gAwayTriggerTimer.getElapsedTimeF32() > gSavedSettings.getF32("AFKTimeout")))
416 { 325 {
417 gAgent.setAFK(); 326 gAgent.setAFK();
418 } 327 }
@@ -432,8 +341,8 @@ void request_initial_instant_messages()
432{ 341{
433 static BOOL requested = FALSE; 342 static BOOL requested = FALSE;
434 if (!requested 343 if (!requested
435 && gMuteListp 344 && gMessageSystem
436 && gMuteListp->isLoaded() 345 && LLMuteList::getInstance()->isLoaded()
437 && gAgent.getAvatarObject()) 346 && gAgent.getAvatarObject())
438 { 347 {
439 // Auto-accepted inventory items may require the avatar object 348 // Auto-accepted inventory items may require the avatar object
@@ -451,7 +360,7 @@ void request_initial_instant_messages()
451 360
452// Use these strictly for things that are constructed at startup, 361// Use these strictly for things that are constructed at startup,
453// or for things that are performance critical. JC 362// or for things that are performance critical. JC
454static void saved_settings_to_globals() 363static void settings_to_globals()
455{ 364{
456 LLBUTTON_H_PAD = gSavedSettings.getS32("ButtonHPad"); 365 LLBUTTON_H_PAD = gSavedSettings.getS32("ButtonHPad");
457 LLBUTTON_V_PAD = gSavedSettings.getS32("ButtonVPad"); 366 LLBUTTON_V_PAD = gSavedSettings.getS32("ButtonVPad");
@@ -489,17 +398,18 @@ static void saved_settings_to_globals()
489 398
490 gDebugWindowProc = gSavedSettings.getBOOL("DebugWindowProc"); 399 gDebugWindowProc = gSavedSettings.getBOOL("DebugWindowProc");
491 gAllowIdleAFK = gSavedSettings.getBOOL("AllowIdleAFK"); 400 gAllowIdleAFK = gSavedSettings.getBOOL("AllowIdleAFK");
492 gAFKTimeout = gSavedSettings.getF32("AFKTimeout"); 401 gAllowTapTapHoldRun = gSavedSettings.getBOOL("AllowTapTapHoldRun");
493 gMouseSensitivity = gSavedSettings.getF32("MouseSensitivity");
494 gInvertMouse = gSavedSettings.getBOOL("InvertMouse");
495 gShowObjectUpdates = gSavedSettings.getBOOL("ShowObjectUpdates"); 402 gShowObjectUpdates = gSavedSettings.getBOOL("ShowObjectUpdates");
496 gMapScale = gSavedSettings.getF32("MapScale"); 403 gMapScale = gSavedSettings.getF32("MapScale");
497 gMiniMapScale = gSavedSettings.getF32("MiniMapScale"); 404 gMiniMapScale = gSavedSettings.getF32("MiniMapScale");
498 gHandleKeysAsync = gSavedSettings.getBOOL("AsyncKeyboard"); 405 gHandleKeysAsync = gSavedSettings.getBOOL("AsyncKeyboard");
499 LLHoverView::sShowHoverTips = gSavedSettings.getBOOL("ShowHoverTips"); 406 LLHoverView::sShowHoverTips = gSavedSettings.getBOOL("ShowHoverTips");
407}
500 408
409static void settings_modify()
410{
501 LLRenderTarget::sUseFBO = gSavedSettings.getBOOL("RenderUseFBO"); 411 LLRenderTarget::sUseFBO = gSavedSettings.getBOOL("RenderUseFBO");
502 LLVOAvatar::sUseImpostors = gSavedSettings.getBOOL("RenderUseImpostors"); 412 LLVOAvatar::sUseImpostors = FALSE; //gSavedSettings.getBOOL("RenderUseImpostors");
503 LLVOSurfacePatch::sLODFactor = gSavedSettings.getF32("RenderTerrainLODFactor"); 413 LLVOSurfacePatch::sLODFactor = gSavedSettings.getF32("RenderTerrainLODFactor");
504 LLVOSurfacePatch::sLODFactor *= LLVOSurfacePatch::sLODFactor; //sqaure lod factor to get exponential range of [1,4] 414 LLVOSurfacePatch::sLODFactor *= LLVOSurfacePatch::sLODFactor; //sqaure lod factor to get exponential range of [1,4]
505 415
@@ -539,374 +449,75 @@ static void saved_settings_to_globals()
539 449
540 // propagate push to talk preference to current status 450 // propagate push to talk preference to current status
541 gSavedSettings.setBOOL("PTTCurrentlyEnabled", TRUE); //gSavedSettings.getBOOL("EnablePushToTalk")); 451 gSavedSettings.setBOOL("PTTCurrentlyEnabled", TRUE); //gSavedSettings.getBOOL("EnablePushToTalk"));
542
543 settings_setup_listeners();
544
545 // gAgent.init() also loads from saved settings.
546} 452}
547 453
548int parse_args(int argc, char **argv) 454void initGridChoice()
549{ 455{
550 // Sometimes IP addresses passed in on the command line have leading 456 LLString gridChoice = gSavedSettings.getString("GridChoice");
551 // or trailing white space. Use LLString to clean that up. 457 if(!gridChoice.empty())
552 LLString ip_string;
553 S32 j;
554
555 for (j = 1; j < argc; j++)
556 {
557 // Used to show first chunk of each argument passed in the 458 // Used to show first chunk of each argument passed in the
558 // window title. 459 // window title.
559 gArgs += argv[j]; 460 {
560 gArgs += " "; 461 // find the grid choice from the user setting.
561 462 int gridIndex = GRID_INFO_NONE;
562 LLString argument = argv[j]; 463 for(;gridIndex < GRID_INFO_OTHER; ++gridIndex )
563 if ((!strcmp(argv[j], "-port")) && (++j < argc)) 464 {
564 { 465 if(0 == LLString::compareInsensitive(gGridInfo[gridIndex].mLabel, gridChoice.c_str()))
565 sscanf(argv[j], "%u", &(gAgent.mViewerPort)); 466 {
566 } 467 gGridChoice = (EGridInfo)gridIndex;
567 else if ((!strcmp(argv[j], "-drop")) && (++j < argc)) 468
568 { 469 if(GRID_INFO_LOCAL == gGridChoice)
569 sscanf(argv[j], "%f", &gPacketDropPercentage); 470 {
570 } 471 gGridName = LOOPBACK_ADDRESS_STRING;
571 else if ((!strcmp(argv[j], "-inbw")) && (++j < argc)) 472 break;
572 { 473 }
573 sscanf(argv[j], "%f", &gInBandwidth); 474 else
574 } 475 {
575 else if ((!strcmp(argv[j], "-outbw")) && (++j < argc)) 476 gGridName = gGridInfo[gGridChoice].mName;
576 { 477 break;
577 sscanf(argv[j], "%f", &gOutBandwidth); 478 }
578 } 479 }
579 else if (!strcmp(argv[j], "--aditi")) 480 }
580 { 481
581 gGridChoice = GRID_INFO_ADITI; 482 if(GRID_INFO_OTHER == gridIndex)
582 snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName); // Flawfinder: ignore 483 {
583 } 484 // *FIX:MEP Can and should we validate that this is an IP address?
584 else if (!strcmp(argv[j], "--agni")) 485 gGridChoice = (EGridInfo)gridIndex;
585 { 486 gGridName = llformat("%s", gSavedSettings.getString("GridChoice").c_str());
586 gGridChoice = GRID_INFO_AGNI; 487
587 snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName); // Flawfinder: ignore 488 }
588 } 489 }
589 else if (!strcmp(argv[j], "--aruna"))
590 {
591 gGridChoice = GRID_INFO_ARUNA;
592 sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);
593 }
594 else if (!strcmp(argv[j], "--durga"))
595 {
596 gGridChoice = GRID_INFO_DURGA;
597 snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName); // Flawfinder: ignore
598 }
599 else if (!strcmp(argv[j], "--ganga"))
600 {
601 gGridChoice = GRID_INFO_GANGA;
602 sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);
603 }
604 else if (!strcmp(argv[j], "--mitra"))
605 {
606 gGridChoice = GRID_INFO_MITRA;
607 sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);
608 }
609 else if (!strcmp(argv[j], "--mohini"))
610 {
611 gGridChoice = GRID_INFO_MOHINI;
612 sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);
613 }
614 else if (!strcmp(argv[j], "--nandi"))
615 {
616 gGridChoice = GRID_INFO_NANDI;
617 sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);
618 }
619 else if (!strcmp(argv[j], "--radha"))
620 {
621 gGridChoice = GRID_INFO_RADHA;
622 sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);
623 }
624 else if (!strcmp(argv[j], "--ravi"))
625 {
626 gGridChoice = GRID_INFO_RAVI;
627 sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);
628 }
629 else if (!strcmp(argv[j], "--siva"))
630 {
631 gGridChoice = GRID_INFO_SIVA;
632 snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName); // Flawfinder: ignore
633 }
634 else if (!strcmp(argv[j], "--shakti"))
635 {
636 gGridChoice = GRID_INFO_SHAKTI;
637 snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName); // Flawfinder: ignore
638 }
639 else if (!strcmp(argv[j], "--soma"))
640 {
641 gGridChoice = GRID_INFO_SOMA;
642 snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName); // Flawfinder: ignore
643 }
644 else if (!strcmp(argv[j], "--uma"))
645 {
646 gGridChoice = GRID_INFO_UMA;
647 sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);
648 }
649 else if (!strcmp(argv[j], "--vaak"))
650 {
651 gGridChoice = GRID_INFO_VAAK;
652 sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);
653 }
654 else if (!strcmp(argv[j], "--yami"))
655 {
656 gGridChoice = GRID_INFO_YAMI;
657 sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);
658 }
659 else if (!strcmp(argv[j], "-loginpage") && (++j < argc))
660 {
661 LLAppViewer::instance()->setLoginPage(utf8str_trim(argv[j]));
662 }
663 else if (!strcmp(argv[j], "-loginuri") && (++j < argc))
664 {
665 LLAppViewer::instance()->addLoginURI(utf8str_trim(argv[j]));
666 }
667 else if (!strcmp(argv[j], "-helperuri") && (++j < argc))
668 {
669 LLAppViewer::instance()->setHelperURI(utf8str_trim(argv[j]));
670 }
671 else if (!strcmp(argv[j], "-debugviews"))
672 {
673 LLView::sDebugRects = TRUE;
674 }
675 else if (!strcmp(argv[j], "-skin") && (++j < argc))
676 {
677 std::string folder(argv[j]);
678 gDirUtilp->setSkinFolder(folder);
679 }
680 else if (!strcmp(argv[j], "-autologin") || !strcmp(argv[j], "--autologin")) // keep --autologin for compatibility
681 {
682 gAutoLogin = TRUE;
683 }
684 else if (!strcmp(argv[j], "-quitafter") && (++j < argc))
685 {
686 gQuitAfterSeconds = (F32)atof(argv[j]);
687 }
688 else if (!strcmp(argv[j], "-rotate"))
689 {
690 gRotateRight = TRUE;
691 }
692// else if (!strcmp(argv[j], "-noenv"))
693// {
694 //turn OFF environmental effects for slow machines/video cards
695// gRequestParaboloidMap = FALSE;
696// }
697 else if (!strcmp(argv[j], "-noaudio"))
698 {
699 gUseAudio = FALSE;
700 }
701 else if (!strcmp(argv[j], "-nosound")) // tends to be popular cmdline on Linux.
702 {
703 gUseAudio = FALSE;
704 }
705 else if (!strcmp(argv[j], "-noprobe"))
706 {
707 gProbeHardware = FALSE;
708 }
709 else if (!strcmp(argv[j], "-noquicktime"))
710 {
711 // Developers can log in faster if they don't load all the
712 // quicktime dlls.
713 gUseQuickTime = false;
714 }
715 else if (!strcmp(argv[j], "-nopreload"))
716 {
717 // Developers can log in faster if they don't decode sounds
718 // or images on startup, ~5 seconds faster.
719 gPreloadSounds = false;
720 gPreloadImages = false;
721 }
722 else if (!strcmp(argv[j], "-purge"))
723 {
724 LLAppViewer::instance()->purgeCache();
725 }
726 else if(!strcmp(argv[j], "-noinvlib"))
727 {
728 gRequestInventoryLibrary = FALSE;
729 }
730 else if (!strcmp(argv[j], "-log"))
731 {
732 gLogMessages = TRUE;
733 continue;
734 }
735 else if (!strcmp(argv[j], "-logfile") && (++j < argc))
736 {
737 // *NOTE: This buffer size is hard coded into scanf() below.
738 char logfile[256]; // Flawfinder: ignore
739 sscanf(argv[j], "%255s", logfile); // Flawfinder: ignore
740 llinfos << "Setting log file to " << logfile << llendl;
741 LLFile::remove(logfile);
742 LLError::logToFile(logfile);
743 }
744 else if (!strcmp(argv[j], "-settings") && (++j < argc))
745 {
746 gSettingsFileName = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, argv[j]);
747 }
748 else if (!strcmp(argv[j], "-setdefault") && (j + 2 < argc))
749 {
750 std::string control_name;
751 std::string control_value;
752
753 j++;
754 if (argv[j]) control_name = std::string(argv[j]);
755 490
756 j++;
757 if (argv[j]) control_value = std::string(argv[j]);
758
759 // grab control name and value
760 if (!control_name.empty())
761 {
762 gCommandLineSettings[control_name] = control_value;
763 }
764 }
765 else if (!strcmp(argv[j], "-set") && (j + 2 < argc))
766 {
767 std::string control_name;
768 std::string control_value;
769
770 j++;
771 if (argv[j]) control_name = std::string(argv[j]);
772 491
773 j++; 492#if !LL_RELEASE_FOR_DOWNLOAD
774 if (argv[j]) control_value = std::string(argv[j]); 493 if (gGridChoice == GRID_INFO_NONE)
775 494 {
776 // grab control name and value 495 // Development version: load last server choice by default (overridden by cmd line args)
777 if (!control_name.empty()) 496 S32 server = gSavedSettings.getS32("ServerChoice");
778 { 497 if (server != 0)
779 gCommandLineForcedSettings[control_name] = control_value; 498 gGridChoice = (EGridInfo)llclamp(server, 0, (S32)GRID_INFO_COUNT - 1);
780 } 499 if (server == GRID_INFO_OTHER)
781 }
782 else if (!strcmp(argv[j], "-login"))
783 {
784 if (j + 3 < argc)
785 {
786 j++;
787 gCmdLineFirstName = argv[j];
788 j++;
789 gCmdLineLastName = argv[j];
790 j++;
791 gCmdLinePassword = argv[j];
792 }
793 else
794 {
795 // only works if -login is last parameter on command line
796 llerrs << "Not enough parameters to -login. Did you mean -loginuri?" << llendl;
797 }
798 }
799 else if (!strcmp(argv[j], "-god"))
800 {
801 gGodConnect = TRUE;
802 }
803 else if (!strcmp(argv[j], "-noconsole"))
804 {
805 gUseConsole = FALSE;
806 }
807 else if (!strcmp(argv[j], "-safe"))
808 {
809 llinfos << "Setting viewer feature table to run in safe mode, resetting prefs" << llendl;
810 gFeatureManagerp->setSafe(TRUE);
811 }
812 else if (!strcmp(argv[j], "-multiple"))
813 {
814 gMultipleViewersOK = TRUE;
815 }
816 else if (!strcmp(argv[j], "-nomultiple"))
817 {
818 gMultipleViewersOK = FALSE;
819 }
820 else if (!strcmp(argv[j], "-novoice"))
821 {
822 gDisableVoice = TRUE;
823 }
824 else if (!strcmp(argv[j], "-nothread"))
825 {
826 LLVFile::ALLOW_ASYNC = FALSE;
827 llinfos << "Running VFS in nothread mode" << llendl;
828 }
829 // some programs don't respect the command line options in protocol handlers (I'm looking at you, Opera)
830 // so this allows us to parse the URL straight off the command line without a "-url" paramater
831 else if (LLURLDispatcher::isSLURL(argv[j])
832 || !strcmp(argv[j], "-url") && (++j < argc))
833 {
834 std::string slurl = argv[j];
835 if (LLURLDispatcher::isSLURLCommand(slurl))
836 {
837 LLStartUp::sSLURLCommand = slurl;
838 }
839 else
840 {
841 LLURLSimString::setString(slurl);
842 }
843 // *NOTE: After setting the url, bail. What can happen is
844 // that someone can use IE (or potentially other browsers)
845 // and do the rough equivalent of command injection and
846 // steal passwords. Phoenix. SL-55321
847 return 0;
848 }
849 else if (!strcmp(argv[j], "-ignorepixeldepth"))
850 {
851 gIgnorePixelDepth = TRUE;
852 }
853 else if (!strcmp(argv[j], "-cooperative"))
854 { 500 {
855 S32 ms_to_yield = 0; 501 LLString custom_server = gSavedSettings.getString("CustomServer");
856 if(++j < argc) 502 if (custom_server.empty())
857 { 503 {
858 S32 rv = sscanf(argv[j], "%d", &ms_to_yield); 504 gGridName = "none";
859 if(0 == rv)
860 {
861 --j;
862 }
863 } 505 }
864 else 506 else
865 { 507 {
866 --j; 508 gGridName = custom_server.c_str();
867 } 509 }
868 gYieldMS = ms_to_yield;
869 gYieldTime = TRUE;
870 }
871 else if (!strcmp(argv[j], "-no-verify-ssl-cert"))
872 {
873 gVerifySSLCert = false;
874 } 510 }
875 else if ( (!strcmp(argv[j], "--channel") || !strcmp(argv[j], "-channel")) && (++j < argc))
876 {
877 gChannelName = argv[j];
878 }
879#if LL_DARWIN
880 else if (!strncmp(argv[j], "-psn_", 5))
881 {
882 // this is the Finder passing the process session number
883 // we ignore this
884 }
885#endif
886 else if(!strncmp(argv[j], "-qa", 3))
887 {
888 // This whole case should disappear with settings clean-up work in QAR-369
889 // or at least be replaced by setting a boolean in the settings repository. -MG
890 gQAMode = TRUE;
891 LLUI::setQAMode(gQAMode);
892 }
893 else if(argument == "-crash")
894 {
895 LLAppViewer::instance()->forceErrorBadMemoryAccess();
896 }
897 else
898 {
899 511
900 // DBC - Mac OS X passes some stuff by default on the command line (e.g. psn). 512 gSavedSettings.setString("GridChoice", gGridInfo[gGridChoice].mLabel);
901 // Second Life URLs are passed this way as well? 513 }
902 llwarns << "Possible unknown keyword " << argv[j] << llendl; 514#endif
903 515
904 // print usage information 516 if (gGridChoice == GRID_INFO_NONE)
905 llinfos << USAGE << llendl; 517 {
906 // return 1; 518 gGridChoice = GridDefaultChoice;
907 } 519 gSavedSettings.setString("GridChoice", gGridInfo[gGridChoice].mLabel);
908 } 520 }
909 return 0;
910} 521}
911 522
912bool send_url_to_other_instance(const std::string& url) 523bool send_url_to_other_instance(const std::string& url)
@@ -917,6 +528,7 @@ bool send_url_to_other_instance(const std::string& url)
917 window_class[255] = 0; 528 window_class[255] = 0;
918 // Use the class instead of the window name. 529 // Use the class instead of the window name.
919 HWND other_window = FindWindow(window_class, NULL); 530 HWND other_window = FindWindow(window_class, NULL);
531
920 if (other_window != NULL) 532 if (other_window != NULL)
921 { 533 {
922 lldebugs << "Found other window with the name '" << gWindowTitle << "'" << llendl; 534 lldebugs << "Found other window with the name '" << gWindowTitle << "'" << llendl;
@@ -942,6 +554,10 @@ bool send_url_to_other_instance(const std::string& url)
942// The single viewer app. 554// The single viewer app.
943LLAppViewer* LLAppViewer::sInstance = NULL; 555LLAppViewer* LLAppViewer::sInstance = NULL;
944 556
557const std::string LLAppViewer::sGlobalSettingsName = "Global";
558const std::string LLAppViewer::sPerAccountSettingsName = "PerAccount";
559const std::string LLAppViewer::sCrashSettingsName = "CrashSettings";
560
945LLTextureCache* LLAppViewer::sTextureCache = NULL; 561LLTextureCache* LLAppViewer::sTextureCache = NULL;
946LLWorkerThread* LLAppViewer::sImageDecodeThread = NULL; 562LLWorkerThread* LLAppViewer::sImageDecodeThread = NULL;
947LLTextureFetch* LLAppViewer::sTextureFetch = NULL; 563LLTextureFetch* LLAppViewer::sTextureFetch = NULL;
@@ -952,11 +568,12 @@ LLAppViewer::LLAppViewer() :
952 mReportedCrash(false), 568 mReportedCrash(false),
953 mNumSessions(0), 569 mNumSessions(0),
954 mPurgeCache(false), 570 mPurgeCache(false),
955 mPurgeOnExit(false), 571 mPurgeOnExit(false),
956 mSecondInstance(false), 572 mSecondInstance(false),
957 mSavedFinalSnapshot(false), 573 mSavedFinalSnapshot(false),
958 mQuitRequested(false), 574 mQuitRequested(false),
959 mLogoutRequestSent(false) 575 mLogoutRequestSent(false),
576 mYieldTime(-1)
960{ 577{
961 if(NULL != sInstance) 578 if(NULL != sInstance)
962 { 579 {
@@ -972,13 +589,6 @@ LLAppViewer::~LLAppViewer()
972 removeMarkerFile(); 589 removeMarkerFile();
973} 590}
974 591
975bool LLAppViewer::tempStoreCommandOptions(int argc, char** argv)
976{
977 gTempArgC = argc;
978 gTempArgV = argv;
979 return true;
980}
981
982bool LLAppViewer::init() 592bool LLAppViewer::init()
983{ 593{
984 // *NOTE:Mani - LLCurl::initClass is not thread safe. 594 // *NOTE:Mani - LLCurl::initClass is not thread safe.
@@ -987,7 +597,6 @@ bool LLAppViewer::init()
987 597
988 initThreads(); 598 initThreads();
989 599
990 initEarlyConfiguration();
991 600
992 // 601 //
993 // Start of the application 602 // Start of the application
@@ -1007,14 +616,19 @@ bool LLAppViewer::init()
1007 // 616 //
1008 // OK to write stuff to logs now, we've now crash reported if necessary 617 // OK to write stuff to logs now, we've now crash reported if necessary
1009 // 618 //
1010
1011 // Set up some defaults...
1012 gSettingsFileName = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, DEFAULT_SETTINGS_FILE);
1013 gOldSettingsFileName = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, LEGACY_DEFAULT_SETTINGS_FILE);
1014
1015 if (!initConfiguration()) 619 if (!initConfiguration())
1016 return false; 620 return false;
1017 621
622 writeSystemInfo();
623
624 // Build a string representing the current version number.
625 gCurrentVersion = llformat("%s %d.%d.%d.%d",
626 gSavedSettings.getString("VersionChannelName").c_str(),
627 LL_VERSION_MAJOR,
628 LL_VERSION_MINOR,
629 LL_VERSION_PATCH,
630 LL_VERSION_BUILD );
631
1018 ////////////////////////////////////////////////////////////////////////////// 632 //////////////////////////////////////////////////////////////////////////////
1019 ////////////////////////////////////////////////////////////////////////////// 633 //////////////////////////////////////////////////////////////////////////////
1020 ////////////////////////////////////////////////////////////////////////////// 634 //////////////////////////////////////////////////////////////////////////////
@@ -1022,47 +636,10 @@ bool LLAppViewer::init()
1022 // *FIX: The following code isn't grouped into functions yet. 636 // *FIX: The following code isn't grouped into functions yet.
1023 637
1024 // 638 //
1025 // Write system information into the debug log (CPU, OS, etc.) 639 // Various introspection concerning the libs we're using.
1026 // 640 //
1027 writeSystemInfo(); 641 llinfos << "J2C Engine is: " << LLImageJ2C::getEngineInfo() << llendl;
1028 642
1029 // Build a string representing the current version number.
1030 gCurrentVersion = llformat("%s %d.%d.%d.%d", gChannelName.c_str(), LL_VERSION_MAJOR, LL_VERSION_MINOR, LL_VERSION_PATCH, LL_VERSION_BUILD );
1031
1032 //
1033 // Merge with the command line overrides
1034 gSavedSettings.applyOverrides(gCommandLineSettings);
1035
1036 // Need to do this before calling parseAlerts
1037 gUICtrlFactory = new LLViewerUICtrlFactory();
1038
1039 // Pre-load alerts.xml to define the warnings settings (always loads from skins/xui/en-us/)
1040 // Do this *before* loading the settings file
1041 LLAlertDialog::parseAlerts("alerts.xml", &gSavedSettings, TRUE);
1042
1043 // Overwrite default settings with user settings
1044 llinfos << "Loading configuration file " << gSettingsFileName << llendl;
1045 if (0 == gSavedSettings.loadFromFile(gSettingsFileName))
1046 {
1047 llinfos << "Failed to load settings from " << gSettingsFileName << llendl;
1048 llinfos << "Loading legacy settings from " << gOldSettingsFileName << llendl;
1049 gSavedSettings.loadFromFileLegacy(gOldSettingsFileName);
1050 }
1051
1052 // need to do this here - need to have initialized global settings first
1053 LLString nextLoginLocation = gSavedSettings.getString( "NextLoginLocation" );
1054 if ( nextLoginLocation.length() )
1055 {
1056 LLURLSimString::setString( nextLoginLocation.c_str() );
1057 };
1058
1059 // Merge with the command line overrides
1060 gSavedSettings.applyOverrides(gCommandLineForcedSettings);
1061
1062 gLastRunVersion = gSavedSettings.getString("LastRunVersion");
1063
1064 fixup_settings();
1065
1066 // Get the single value from the crash settings file, if it exists 643 // Get the single value from the crash settings file, if it exists
1067 std::string crash_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE); 644 std::string crash_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
1068 gCrashSettings.loadFromFile(crash_settings_filename.c_str()); 645 gCrashSettings.loadFromFile(crash_settings_filename.c_str());
@@ -1101,68 +678,29 @@ bool LLAppViewer::init()
1101 { 678 {
1102 LLError::setPrintLocation(true); 679 LLError::setPrintLocation(true);
1103 } 680 }
1104
1105#if !LL_RELEASE_FOR_DOWNLOAD
1106 if (gGridChoice == GRID_INFO_NONE)
1107 {
1108 // Development version: load last server choice by default (overridden by cmd line args)
1109
1110 S32 server = gSavedSettings.getS32("ServerChoice");
1111 if (server != 0)
1112 gGridChoice = (EGridInfo)llclamp(server, 0, (S32)GRID_INFO_COUNT - 1);
1113 if (server == GRID_INFO_OTHER)
1114 {
1115 LLString custom_server = gSavedSettings.getString("CustomServer");
1116 if (custom_server.empty())
1117 {
1118 snprintf(gGridName, MAX_STRING, "none"); /* Flawfinder: ignore */
1119 }
1120 else
1121 {
1122 snprintf(gGridName, MAX_STRING, "%s", custom_server.c_str()); /* Flawfinder: ignore */
1123 }
1124 }
1125 }
1126#endif
1127
1128 if (gGridChoice == GRID_INFO_NONE)
1129 {
1130 gGridChoice = GridDefaultChoice;
1131 }
1132 681
1133 // Load art UUID information, don't require these strings to be declared in code. 682 // Load art UUID information, don't require these strings to be declared in code.
1134 LLString viewer_art_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"viewerart.xml");
1135 llinfos << "Loading art table from " << viewer_art_filename << llendl;
1136 gViewerArt.loadFromFile(viewer_art_filename.c_str(), FALSE);
1137 LLString textures_filename = gDirUtilp->getExpandedFilename(LL_PATH_SKINS, "textures", "textures.xml");
1138 llinfos << "Loading art table from " << textures_filename << llendl;
1139 gViewerArt.loadFromFile(textures_filename.c_str(), FALSE);
1140
1141 LLString colors_base_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "colors_base.xml"); 683 LLString colors_base_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "colors_base.xml");
1142 llinfos << "Loading base colors from " << colors_base_filename << llendl; 684 llinfos << "Loading base colors from " << colors_base_filename << llendl;
1143 gColors.loadFromFile(colors_base_filename.c_str(), FALSE, TYPE_COL4U); 685 gColors.loadFromFileLegacy(colors_base_filename.c_str(), FALSE, TYPE_COL4U);
1144 686
1145 // Load overrides from user colors file 687 // Load overrides from user colors file
1146 LLString user_colors_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "colors.xml"); 688 LLString user_colors_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "colors.xml");
1147 llinfos << "Loading user colors from " << user_colors_filename << llendl; 689 llinfos << "Loading user colors from " << user_colors_filename << llendl;
1148 if (gColors.loadFromFile(user_colors_filename.c_str(), FALSE, TYPE_COL4U) == 0) 690 if (gColors.loadFromFileLegacy(user_colors_filename.c_str(), FALSE, TYPE_COL4U) == 0)
1149 { 691 {
1150 llinfos << "Failed to load user colors from " << user_colors_filename << llendl; 692 llinfos << "Cannot load user colors from " << user_colors_filename << llendl;
1151 LLString user_legacy_colors_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "colors.ini");
1152 llinfos << "Loading legacy colors from " << user_legacy_colors_filename << llendl;
1153 gColors.loadFromFileLegacy(user_legacy_colors_filename.c_str(), FALSE, TYPE_COL4U);
1154 } 693 }
1155 694
1156 // Widget construction depends on LLUI being initialized 695 // Widget construction depends on LLUI being initialized
1157 LLUI::initClass(&gSavedSettings, 696 LLUI::initClass(&gSavedSettings,
1158 &gColors, 697 &gColors,
1159 &gViewerArt, 698 LLUIImageList::getInstance(),
1160 &gImageList,
1161 ui_audio_callback, 699 ui_audio_callback,
1162 &LLUI::sGLScaleFactor); 700 &LLUI::sGLScaleFactor);
1163 701
1164 LLWeb::initClass(); // do this after LLUI 702 LLWeb::initClass(); // do this after LLUI
1165 gUICtrlFactory->setupPaths(); // update paths with correct language set 703 LLUICtrlFactory::getInstance()->setupPaths(); // update paths with correct language set
1166 704
1167 ///////////////////////////////////////////////// 705 /////////////////////////////////////////////////
1168 // 706 //
@@ -1173,16 +711,18 @@ bool LLAppViewer::init()
1173 711
1174 LLAgent::parseTeleportMessages("teleport_strings.xml"); 712 LLAgent::parseTeleportMessages("teleport_strings.xml");
1175 713
714 LLViewerJointMesh::updateVectorize();
715
1176 // load MIME type -> media impl mappings 716 // load MIME type -> media impl mappings
1177 LLMIMETypes::parseMIMETypes( "mime_types.xml" ); 717 LLMIMETypes::parseMIMETypes( "mime_types.xml" );
1178 718
1179 mCrashBehavior = gCrashSettings.getS32(CRASH_BEHAVIOR_SETTING);
1180
1181 LLVectorPerformanceOptions::initClass();
1182
1183 // Move certain saved settings into global variables for speed
1184 saved_settings_to_globals();
1185 719
720 // Copy settings to globals. *TODO: Remove or move to appropriage class initializers
721 settings_to_globals();
722 // Setup settings listeners
723 settings_setup_listeners();
724 // Modify settings based on system configuration and compile options
725 settings_modify();
1186 726
1187 // Find partition serial number (Windows) or hardware serial (Mac) 727 // Find partition serial number (Windows) or hardware serial (Mac)
1188 mSerialNumber = generateSerialNumber(); 728 mSerialNumber = generateSerialNumber();
@@ -1203,7 +743,7 @@ bool LLAppViewer::init()
1203 MemSetErrorHandler(first_mem_error_handler); 743 MemSetErrorHandler(first_mem_error_handler);
1204#endif // LL_WINDOWS && LL_RELEASE_FOR_DOWNLOAD && LL_USE_SMARTHEAP 744#endif // LL_WINDOWS && LL_RELEASE_FOR_DOWNLOAD && LL_USE_SMARTHEAP
1205 745
1206 gViewerStats = new LLViewerStats(); 746 // *Note: this is where gViewerStats used to be created.
1207 747
1208 // 748 //
1209 // Initialize the VFS, and gracefully handle initialization errors 749 // Initialize the VFS, and gracefully handle initialization errors
@@ -1262,17 +802,6 @@ bool LLAppViewer::init()
1262 // Load Custom bindings (override defaults) 802 // Load Custom bindings (override defaults)
1263 gViewerKeyboard.loadBindings(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"custom_keys.ini").c_str()); 803 gViewerKeyboard.loadBindings(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"custom_keys.ini").c_str());
1264 804
1265 // Calculate the digest for the executable (takes < 90ms on a fast machine).
1266 FILE* app_file = LLFile::fopen( gDirUtilp->getExecutablePathAndName().c_str(), "rb" ); /* Flawfinder: ignore */
1267 if( app_file )
1268 {
1269 LLMD5 app_md5;
1270 app_md5.update( app_file ); // Automatically closes the file
1271 app_md5.finalize();
1272 app_md5.raw_digest( gViewerDigest.mData );
1273 }
1274 llinfos << "Viewer Digest: " << gViewerDigest << llendl;
1275
1276 // If we don't have the right GL requirements, exit. 805 // If we don't have the right GL requirements, exit.
1277 if (!gGLManager.mHasRequirements && !gNoRender) 806 if (!gGLManager.mHasRequirements && !gNoRender)
1278 { 807 {
@@ -1303,7 +832,7 @@ bool LLAppViewer::init()
1303 minRAMString >> minRAM; 832 minRAMString >> minRAM;
1304 minRAM = minRAM * 1024 * 1024; 833 minRAM = minRAM * 1024 * 1024;
1305 834
1306 if(!gFeatureManagerp->isGPUSupported()) 835 if(!LLFeatureManager::getInstance()->isGPUSupported())
1307 { 836 {
1308 minSpecs += LLAlertDialog::getTemplateMessage("UnsupportedGPU"); 837 minSpecs += LLAlertDialog::getTemplateMessage("UnsupportedGPU");
1309 minSpecs += "\n"; 838 minSpecs += "\n";
@@ -1338,6 +867,16 @@ bool LLAppViewer::init()
1338 gSimLastTime = gRenderStartTime.getElapsedTimeF32(); 867 gSimLastTime = gRenderStartTime.getElapsedTimeF32();
1339 gSimFrames = (F32)gFrameCount; 868 gSimFrames = (F32)gFrameCount;
1340 869
870 LLViewerJoystick::getInstance()->init(false);
871 if (LLViewerJoystick::getInstance()->isLikeSpaceNavigator())
872 {
873 if (gSavedSettings.getString("JoystickInitialized") != "SpaceNavigator")
874 {
875 LLFloaterJoystick::setSNDefaults();
876 gSavedSettings.setString("JoystickInitialized", "SpaceNavigator");
877 }
878 }
879
1341 return true; 880 return true;
1342} 881}
1343 882
@@ -1352,9 +891,7 @@ bool LLAppViewer::mainLoop()
1352 LLHTTPClient::setPump(*gServicePump); 891 LLHTTPClient::setPump(*gServicePump);
1353 LLCurl::setCAFile(gDirUtilp->getCAFile()); 892 LLCurl::setCAFile(gDirUtilp->getCAFile());
1354 893
1355 // initialize voice stuff here 894 // Note: this is where gLocalSpeakerMgr and gActiveSpeakerMgr used to be instantiated.
1356 gLocalSpeakerMgr = new LLLocalSpeakerMgr();
1357 gActiveChannelSpeakerMgr = new LLActiveSpeakerMgr();
1358 895
1359 LLVoiceChannel::initClass(); 896 LLVoiceChannel::initClass();
1360 LLVoiceClient::init(gServicePump); 897 LLVoiceClient::init(gServicePump);
@@ -1362,7 +899,9 @@ bool LLAppViewer::mainLoop()
1362 LLMemType mt1(LLMemType::MTYPE_MAIN); 899 LLMemType mt1(LLMemType::MTYPE_MAIN);
1363 LLTimer frameTimer,idleTimer; 900 LLTimer frameTimer,idleTimer;
1364 LLTimer debugTime; 901 LLTimer debugTime;
1365 902 LLViewerJoystick* joystick(LLViewerJoystick::getInstance());
903 joystick->setNeedsReset(true);
904
1366 // Handle messages 905 // Handle messages
1367 while (!LLApp::isExiting()) 906 while (!LLApp::isExiting())
1368 { 907 {
@@ -1383,7 +922,7 @@ bool LLAppViewer::mainLoop()
1383 gViewerWindow->mWindow->gatherInput(); 922 gViewerWindow->mWindow->gatherInput();
1384 } 923 }
1385 924
1386#if 1 && !RELEASE_FOR_DOWNLOAD 925#if 1 && !LL_RELEASE_FOR_DOWNLOAD
1387 // once per second debug info 926 // once per second debug info
1388 if (debugTime.getElapsedTimeF32() > 1.f) 927 if (debugTime.getElapsedTimeF32() > 1.f)
1389 { 928 {
@@ -1403,8 +942,8 @@ bool LLAppViewer::mainLoop()
1403 && !gViewerWindow->getShowProgress() 942 && !gViewerWindow->getShowProgress()
1404 && !gFocusMgr.focusLocked()) 943 && !gFocusMgr.focusLocked())
1405 { 944 {
945 joystick->scanJoystick();
1406 gKeyboard->scanKeyboard(); 946 gKeyboard->scanKeyboard();
1407 LLViewerJoystick::scanJoystick();
1408 } 947 }
1409 948
1410 // Update state based on messages, user input, object idle. 949 // Update state based on messages, user input, object idle.
@@ -1434,12 +973,6 @@ bool LLAppViewer::mainLoop()
1434 973
1435 LLFloaterSnapshot::update(); // take snapshots 974 LLFloaterSnapshot::update(); // take snapshots
1436 975
1437#if !LL_SOLARIS
1438 if (gbCapturing)
1439 {
1440 gMovieMaker.Snap();
1441 }
1442#endif
1443#if LL_WINDOWS && LL_LCD_COMPILE 976#if LL_WINDOWS && LL_LCD_COMPILE
1444 // update LCD Screen 977 // update LCD Screen
1445 gLcdScreen->UpdateDisplay(); 978 gLcdScreen->UpdateDisplay();
@@ -1454,9 +987,9 @@ bool LLAppViewer::mainLoop()
1454 bool run_multiple_threads = gSavedSettings.getBOOL("RunMultipleThreads"); 987 bool run_multiple_threads = gSavedSettings.getBOOL("RunMultipleThreads");
1455 988
1456 // yield some time to the os based on command line option 989 // yield some time to the os based on command line option
1457 if(gYieldTime) 990 if(mYieldTime >= 0)
1458 { 991 {
1459 ms_sleep(gYieldMS); 992 ms_sleep(mYieldTime);
1460 } 993 }
1461 994
1462 // yield cooperatively when not running as foreground window 995 // yield cooperatively when not running as foreground window
@@ -1589,15 +1122,11 @@ bool LLAppViewer::cleanup()
1589 gTransferManager.cleanup(); 1122 gTransferManager.cleanup();
1590#endif 1123#endif
1591 1124
1592 // Clean up map data storage 1125 // Note: this is where gWorldMap used to be deleted.
1593 delete gWorldMap;
1594 gWorldMap = NULL;
1595 1126
1596 delete gHUDManager; 1127 // Note: this is where gHUDManager used to be deleted.
1597 gHUDManager = NULL; 1128 LLHUDManager::getInstance()->shutdownClass();
1598 1129
1599 delete gToolMgr;
1600 gToolMgr = NULL;
1601 1130
1602 delete gAssetStorage; 1131 delete gAssetStorage;
1603 gAssetStorage = NULL; 1132 gAssetStorage = NULL;
@@ -1607,17 +1136,12 @@ bool LLAppViewer::cleanup()
1607 delete gCacheName; 1136 delete gCacheName;
1608 gCacheName = NULL; 1137 gCacheName = NULL;
1609 1138
1610 delete gGlobalEconomy; 1139 // Note: this is where gLocalSpeakerMgr and gActiveSpeakerMgr used to be deleted.
1611 gGlobalEconomy = NULL;
1612
1613 delete gActiveChannelSpeakerMgr;
1614 gActiveChannelSpeakerMgr = NULL;
1615
1616 delete gLocalSpeakerMgr;
1617 gLocalSpeakerMgr = NULL;
1618 1140
1619 LLNotifyBox::cleanup(); 1141 LLNotifyBox::cleanup();
1620 1142
1143 LLWorldMap::getInstance()->reset(); // release any images
1144
1621 llinfos << "Global stuff deleted" << llendflush; 1145 llinfos << "Global stuff deleted" << llendflush;
1622 1146
1623#if !LL_RELEASE_FOR_DOWNLOAD 1147#if !LL_RELEASE_FOR_DOWNLOAD
@@ -1631,9 +1155,7 @@ bool LLAppViewer::cleanup()
1631 llwarns << "Hack, skipping audio engine cleanup" << llendflush; 1155 llwarns << "Hack, skipping audio engine cleanup" << llendflush;
1632#endif 1156#endif
1633 1157
1634 llinfos << "Cleaning up feature manager" << llendflush; 1158 // Note: this is where LLFeatureManager::getInstance()-> used to be deleted.
1635 delete gFeatureManagerp;
1636 gFeatureManagerp = NULL;
1637 1159
1638 // Patch up settings for next time 1160 // Patch up settings for next time
1639 // Must do this before we delete the viewer window, 1161 // Must do this before we delete the viewer window,
@@ -1709,20 +1231,22 @@ bool LLAppViewer::cleanup()
1709 gLcdScreen = NULL; 1231 gLcdScreen = NULL;
1710#endif 1232#endif
1711 1233
1712 if (!gVolumeMgr->cleanup()) 1234 LLVolumeMgr* volume_manager = LLPrimitive::getVolumeManager();
1235 if (!volume_manager->cleanup())
1713 { 1236 {
1714 llwarns << "Remaining references in the volume manager!" << llendflush; 1237 llwarns << "Remaining references in the volume manager!" << llendflush;
1715 } 1238 }
1239 LLPrimitive::cleanupVolumeManager();
1716 1240
1717 LLViewerParcelMgr::cleanupGlobals(); 1241 LLViewerParcelMgr::cleanupGlobals();
1718 1242
1719 delete gViewerStats; 1243 // *Note: this is where gViewerStats used to be deleted.
1720 gViewerStats = NULL;
1721 1244
1722 //end_messaging_system(); 1245 //end_messaging_system();
1723 1246
1724 LLFollowCamMgr::cleanupClass(); 1247 LLFollowCamMgr::cleanupClass();
1725 LLVolumeMgr::cleanupClass(); 1248 //LLVolumeMgr::cleanupClass();
1249 LLPrimitive::cleanupVolumeManager();
1726 LLWorldMapView::cleanupClass(); 1250 LLWorldMapView::cleanupClass();
1727 LLUI::cleanupClass(); 1251 LLUI::cleanupClass();
1728 1252
@@ -1739,36 +1263,26 @@ bool LLAppViewer::cleanup()
1739 1263
1740 // Must do this after all panels have been deleted because panels that have persistent rects 1264 // Must do this after all panels have been deleted because panels that have persistent rects
1741 // save their rects on delete. 1265 // save their rects on delete.
1742 gSavedSettings.saveToFile(gSettingsFileName, TRUE); 1266 gSavedSettings.saveToFile(gSavedSettings.getString("ClientSettingsFile"), TRUE);
1743 if (!gPerAccountSettingsFileName.empty()) 1267
1744 { 1268 // PerAccountSettingsFile should be empty if no use has been logged on.
1745 gSavedPerAccountSettings.saveToFile(gPerAccountSettingsFileName, TRUE); 1269 // *FIX:Mani This should get really saved in a "logoff" mode.
1746 } 1270 gSavedPerAccountSettings.saveToFile(gSavedSettings.getString("PerAccountSettingsFile"), TRUE);
1747 llinfos << "Saved settings" << llendflush; 1271 llinfos << "Saved settings" << llendflush;
1748 1272
1749 std::string crash_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE); 1273 std::string crash_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
1750 // save all settings, even if equals defaults 1274 // save all settings, even if equals defaults
1751 gCrashSettings.saveToFile(crash_settings_filename.c_str(), FALSE); 1275 gCrashSettings.saveToFile(crash_settings_filename.c_str(), FALSE);
1752 1276
1753 delete gUICtrlFactory;
1754 gUICtrlFactory = NULL;
1755
1756 gSavedSettings.cleanup(); 1277 gSavedSettings.cleanup();
1757 gViewerArt.cleanup();
1758 gColors.cleanup(); 1278 gColors.cleanup();
1759 gCrashSettings.cleanup(); 1279 gCrashSettings.cleanup();
1760 1280
1761 // Save URL history file 1281 // Save URL history file
1762 LLURLHistory::saveFile("url_history.xml"); 1282 LLURLHistory::saveFile("url_history.xml");
1763 1283
1764 if (gMuteListp) 1284 // save mute list. gMuteList used to also be deleted here too.
1765 { 1285 LLMuteList::getInstance()->cache(gAgent.getID());
1766 // save mute list
1767 gMuteListp->cache(gAgent.getID());
1768
1769 delete gMuteListp;
1770 gMuteListp = NULL;
1771 }
1772 1286
1773 if (mPurgeOnExit) 1287 if (mPurgeOnExit)
1774 { 1288 {
@@ -1838,10 +1352,10 @@ bool LLAppViewer::cleanup()
1838 1352
1839 end_messaging_system(); 1353 end_messaging_system();
1840 1354
1841 // *NOTE:Mani - The following call is not thread safe. 1355 // *NOTE:Mani - The following call is not thread safe.
1842 LLCurl::cleanupClass(); 1356 LLCurl::cleanupClass();
1843 1357
1844 // If we're exiting to launch an URL, do that here so the screen 1358 // If we're exiting to launch an URL, do that here so the screen
1845 // is at the right resolution before we launch IE. 1359 // is at the right resolution before we launch IE.
1846 if (!gLaunchFileOnQuit.empty()) 1360 if (!gLaunchFileOnQuit.empty())
1847 { 1361 {
@@ -1862,106 +1376,6 @@ bool LLAppViewer::cleanup()
1862 return true; 1376 return true;
1863} 1377}
1864 1378
1865bool LLAppViewer::initEarlyConfiguration()
1866{
1867 // *FIX: globals - This method sets a bunch of globals early in the init process.
1868 int argc = gTempArgC;
1869 char** argv = gTempArgV;
1870
1871 // HACK! We REALLY want to know what grid they were trying to connect to if they
1872 // crashed hard.
1873 // So we walk through the command line args ONLY looking for the
1874 // userserver arguments first. And we don't do ANYTHING but set
1875 // the gGridName (which gets passed to the crash reporter).
1876 // We're assuming that they're trying to log into the same grid as last
1877 // time, which seems fairly reasonable.
1878 snprintf(gGridName, MAX_STRING, "%s", gGridInfo[GridDefaultChoice].mName); // Flawfinder: ignore
1879 S32 j;
1880 for (j = 1; j < argc; j++)
1881 {
1882 if (!strcmp(argv[j], "--aditi"))
1883 {
1884 snprintf(gGridName, MAX_STRING, "%s", gGridInfo[GRID_INFO_ADITI].mName); // Flawfinder: ignore
1885 }
1886 else if (!strcmp(argv[j], "--agni"))
1887 {
1888 snprintf(gGridName, MAX_STRING, "%s", gGridInfo[GRID_INFO_AGNI].mName); // Flawfinder: ignore
1889 }
1890 else if (!strcmp(argv[j], "--siva"))
1891 {
1892 snprintf(gGridName, MAX_STRING, "%s", gGridInfo[GRID_INFO_SIVA].mName); // Flawfinder: ignore
1893 }
1894 else if (!strcmp(argv[j], "--shakti"))
1895 {
1896 sprintf(gGridName,"%s", gGridInfo[GRID_INFO_SHAKTI].mName);
1897 }
1898 else if (!strcmp(argv[j], "--durga"))
1899 {
1900 snprintf(gGridName, MAX_STRING, "%s", gGridInfo[GRID_INFO_DURGA].mName); // Flawfinder: ignore
1901 }
1902 else if (!strcmp(argv[j], "--soma"))
1903 {
1904 snprintf(gGridName, MAX_STRING, "%s", gGridInfo[GRID_INFO_SOMA].mName); // Flawfinder: ignore
1905 }
1906 else if (!strcmp(argv[j], "--ganga"))
1907 {
1908 snprintf(gGridName, MAX_STRING, "%s", gGridInfo[GRID_INFO_GANGA].mName); // Flawfinder: ignore
1909 }
1910 else if (!strcmp(argv[j], "--vaak"))
1911 {
1912 sprintf(gGridName,"%s", gGridInfo[GRID_INFO_VAAK].mName);
1913 }
1914 else if (!strcmp(argv[j], "--uma"))
1915 {
1916 sprintf(gGridName,"%s", gGridInfo[GRID_INFO_UMA].mName);
1917 }
1918 else if (!strcmp(argv[j], "--mohini"))
1919 {
1920 sprintf(gGridName,"%s", gGridInfo[GRID_INFO_MOHINI].mName);
1921 }
1922 else if (!strcmp(argv[j], "--yami"))
1923 {
1924 sprintf(gGridName,"%s", gGridInfo[GRID_INFO_YAMI].mName);
1925 }
1926 else if (!strcmp(argv[j], "--nandi"))
1927 {
1928 sprintf(gGridName,"%s", gGridInfo[GRID_INFO_NANDI].mName);
1929 }
1930 else if (!strcmp(argv[j], "--mitra"))
1931 {
1932 sprintf(gGridName,"%s", gGridInfo[GRID_INFO_MITRA].mName);
1933 }
1934 else if (!strcmp(argv[j], "--radha"))
1935 {
1936 sprintf(gGridName,"%s", gGridInfo[GRID_INFO_RADHA].mName);
1937 }
1938 else if (!strcmp(argv[j], "--ravi"))
1939 {
1940 sprintf(gGridName,"%s", gGridInfo[GRID_INFO_RAVI].mName);
1941 }
1942 else if (!strcmp(argv[j], "--aruna"))
1943 {
1944 sprintf(gGridName,"%s", gGridInfo[GRID_INFO_ARUNA].mName);
1945 }
1946 else if (!strcmp(argv[j], "-multiple"))
1947 {
1948 // Hack to detect -multiple so we can disable the marker file check (which will always fail)
1949 gMultipleViewersOK = TRUE;
1950 }
1951 else if (!strcmp(argv[j], "-novoice"))
1952 {
1953 // May need to know this early also
1954 gDisableVoice = TRUE;
1955 }
1956 else if (!strcmp(argv[j], "-url") && (++j < argc))
1957 {
1958 LLURLSimString::setString(argv[j]);
1959 }
1960 }
1961
1962 return true;
1963}
1964
1965bool LLAppViewer::initThreads() 1379bool LLAppViewer::initThreads()
1966{ 1380{
1967#if MEM_TRACK_MEM 1381#if MEM_TRACK_MEM
@@ -2022,14 +1436,359 @@ bool LLAppViewer::initLogging()
2022 return true; 1436 return true;
2023} 1437}
2024 1438
1439void LLAppViewer::loadSettingsFromDirectory(ELLPath path_index)
1440{
1441 for(LLSD::map_iterator itr = mSettingsFileList.beginMap(); itr != mSettingsFileList.endMap(); ++itr)
1442 {
1443 LLString settings_name = (*itr).first;
1444 LLString settings_file = mSettingsFileList[settings_name].asString();
1445
1446 LLString full_settings_path = gDirUtilp->getExpandedFilename(path_index, settings_file);
1447
1448 if(settings_name == sGlobalSettingsName)
1449 {
1450 // The non-persistent setting, ClientSettingsFile, specifies a
1451 // custom name to use for the global settings file.
1452 std::string custom_path;
1453 if(gSettings[sGlobalSettingsName]->controlExists("ClientSettingsFile"))
1454 {
1455 custom_path =
1456 gSettings[sGlobalSettingsName]->getString("ClientSettingsFile");
1457 }
1458 if(!custom_path.empty())
1459 {
1460 full_settings_path = custom_path;
1461 }
1462 }
1463
1464 if(gSettings.find(settings_name) == gSettings.end())
1465 {
1466 llwarns << "Cannot load " << settings_file << " - No matching settings group for name " << settings_name << llendl;
1467 continue;
1468 }
1469 if(!gSettings[settings_name]->loadFromFile(full_settings_path))
1470 {
1471 llwarns << "Cannot load " << full_settings_path << " - No settings found." << llendl;
1472 }
1473 else
1474 {
1475 llinfos << "Loaded settings file " << full_settings_path << llendl;
1476 }
1477 }
1478}
1479
1480std::string LLAppViewer::getSettingsFileName(const std::string& file)
1481{
1482 if(mSettingsFileList.has(file))
1483 {
1484 return mSettingsFileList[file].asString();
1485 }
1486 return std::string();
1487}
1488
2025bool LLAppViewer::initConfiguration() 1489bool LLAppViewer::initConfiguration()
2026{ 1490{
2027 // Ye olde parse_args()... 1491 //Set up internal pointers
2028 if(!doConfigFromCommandLine()) 1492 gSettings[sGlobalSettingsName] = &gSavedSettings;
1493 gSettings[sPerAccountSettingsName] = &gSavedPerAccountSettings;
1494 gSettings[sCrashSettingsName] = &gCrashSettings;
1495
1496 //Load settings files list
1497 std::string settings_file_list = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "settings_files.xml");
1498 LLControlGroup settings_control;
1499 llinfos << "Loading settings file list" << settings_file_list << llendl;
1500 if (0 == settings_control.loadFromFile(settings_file_list))
1501 {
1502 llerrs << "Cannot load default configuration file " << settings_file_list << llendl;
1503 }
1504
1505 mSettingsFileList = settings_control.getLLSD("Files");
1506
1507 // The settings and command line parsing have a fragile
1508 // order-of-operation:
1509 // - load defaults from app_settings
1510 // - set procedural settings values
1511 // - read command line settings
1512 // - selectively apply settings needed to load user settings.
1513 // - load overrides from user_settings
1514 // - apply command line settings (to override the overrides)
1515 // - load per account settings (happens in llstartup
1516
1517 // - load defaults
1518 loadSettingsFromDirectory(LL_PATH_APP_SETTINGS);
1519
1520 // - set procedural settings
1521 gSavedSettings.setString("ClientSettingsFile",
1522 gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, getSettingsFileName("Global")));
1523
1524 gSavedSettings.setString("VersionChannelName", LL_CHANNEL);
1525
1526#ifndef LL_RELEASE_FOR_DOWNLOAD
1527 gSavedSettings.setBOOL("ShowConsoleWindow", TRUE);
1528 gSavedSettings.setBOOL("AllowMultipleViewers", TRUE);
1529#endif
1530
1531#if LL_WINDOWS
1532 // Lists Japanese, Korean, and Chinese sanserif fonts available in
1533 // Windows XP and Vista, as well as "Arial Unicode MS".
1534 gSavedSettings.setString("FontSansSerifFallback",
1535 "MSGOTHIC.TTC;gulim.ttc;simhei.ttf;ArialUni.ttf");
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
1548
1549
1550 // 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
1552 // for disable/reset ability
1553 LLFirstUse::addConfigVariable("FirstBalanceIncrease");
1554 LLFirstUse::addConfigVariable("FirstBalanceDecrease");
1555 LLFirstUse::addConfigVariable("FirstSit");
1556 LLFirstUse::addConfigVariable("FirstMap");
1557 LLFirstUse::addConfigVariable("FirstGoTo");
1558 LLFirstUse::addConfigVariable("FirstBuild");
1559 LLFirstUse::addConfigVariable("FirstLeftClickNoHit");
1560 LLFirstUse::addConfigVariable("FirstTeleport");
1561 LLFirstUse::addConfigVariable("FirstOverrideKeys");
1562 LLFirstUse::addConfigVariable("FirstAttach");
1563 LLFirstUse::addConfigVariable("FirstAppearance");
1564 LLFirstUse::addConfigVariable("FirstInventory");
1565 LLFirstUse::addConfigVariable("FirstSandbox");
1566 LLFirstUse::addConfigVariable("FirstFlexible");
1567 LLFirstUse::addConfigVariable("FirstDebugMenus");
1568 LLFirstUse::addConfigVariable("FirstStreamingMusic");
1569 LLFirstUse::addConfigVariable("FirstStreamingVideo");
1570 LLFirstUse::addConfigVariable("FirstSculptedPrim");
1571 LLFirstUse::addConfigVariable("FirstVoice");
1572 LLFirstUse::addConfigVariable("FirstMedia");
1573
1574 //////
1575 // *FIX:Mani - Find a way to remove the gUICtrlFactory and
1576 // LLAlertDialog::parseAlerts dependecies on the being loaded
1577 // *before* the user settings. Having to do this init here
1578 // seems odd.
1579
1580 // This is where gUICtrlFactory used to be instantiated with a new LLUICtrlFactory
1581 // which needed to happen before calling parseAlerts below.
1582 // TODO: That method is still dependant upon the base LLUICtrlFactory constructor being called
1583 // which registers some callbacks so I'm leaving in a call to getInstance here to cause that to
1584 // still happen. This needs to be cleaned up later when the base and derived classes
1585 // are planned to be combined. -MG
1586 LLUICtrlFactory::getInstance();
1587
1588
1589 // Pre-load alerts.xml to define the warnings settings (always loads from skins/xui/en-us/)
1590 // Do this *before* loading the settings file
1591 LLAlertDialog::parseAlerts("alerts.xml", &gSavedSettings, TRUE);
1592
1593 // - read command line settings
1594 LLControlGroupCLP clp;
1595 std::string cmd_line_config = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,
1596 "cmd_line.xml");
1597 clp.configure(cmd_line_config, &gSavedSettings);
1598
1599 if(!initParseCommandLine(clp))
2029 { 1600 {
1601 llwarns
1602 << "Error parsing command line options. Command Line options ignored."
1603 << llendl;
1604
1605 llinfos << "Command line usage:\n" << clp << llendl;
1606
1607 std::ostringstream msg;
1608 msg << "Second Life found an error parsing the command line. \n"
1609 << "Please see: http://wiki.secondlife.com/wiki/Client_parameters \n"
1610 << "Error: " << clp.getErrorMessage();
1611
1612 OSMessageBox(
1613 msg.str().c_str(),
1614 NULL,
1615 OSMB_OK);
1616
2030 return false; 1617 return false;
2031 } 1618 }
2032 1619
1620 // - selectively apply settings
1621
1622 // If the user has specified a alternate settings file name.
1623 // Load it now before loading the user_settings/settings.xml
1624 if(clp.hasOption("settings"))
1625 {
1626 std::string user_settings_filename =
1627 gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS,
1628 clp.getOption("settings")[0]);
1629 gSavedSettings.setString("ClientSettingsFile", user_settings_filename);
1630 llinfos << "Using command line specified settings filename: "
1631 << user_settings_filename << llendl;
1632 }
1633
1634 // - load overrides from user_settings
1635 loadSettingsFromDirectory(LL_PATH_USER_SETTINGS);
1636
1637 // - apply command line settings
1638 clp.notify();
1639
1640 // Handle initialization from settings.
1641 // Start up the debugging console before handling other options.
1642 if (gSavedSettings.getBOOL("ShowConsoleWindow"))
1643 {
1644 initConsole();
1645 }
1646
1647 if(clp.hasOption("help"))
1648 {
1649 std::ostringstream msg;
1650 msg << "Command line usage:\n" << clp;
1651 llinfos << msg.str() << llendl;
1652
1653 OSMessageBox(
1654 msg.str().c_str(),
1655 NULL,
1656 OSMB_OK);
1657
1658 return false;
1659 }
1660
1661 //////////////////////////
1662 // Apply settings...
1663 if(clp.hasOption("setdefault"))
1664 {
1665 //const LLCommandLineParser::token_vector_t& setdefault = clp.getOption("setdefault");
1666 //if(0x1 & setdefault.size())
1667 //{
1668 // llwarns << "Invalid '--setdefault' parameter count." << llendl;
1669 //}
1670 //else
1671 //{
1672 // LLCommandLineParser::token_vector_t::const_iterator itr = setdefault.begin();
1673 // for(; itr != setdefault.end(); ++itr)
1674 // {
1675 // const std::string& name = *itr;
1676 // const std::string& value = *(++itr);
1677 // LLControlVariable* c = gSettings[sGlobalSettingsName]->getControl(name);
1678 // if(c)
1679 // {
1680 // c->setDefault(value);
1681 // }
1682 // else
1683 // {
1684 // llwarns << "'--setdefault' specified with unknown setting: '"
1685 // << name << "'." << llendl;
1686 // }
1687 // }
1688 //}
1689 }
1690
1691 if(clp.hasOption("set"))
1692 {
1693 const LLCommandLineParser::token_vector_t& set_values = clp.getOption("set");
1694 if(0x1 & set_values.size())
1695 {
1696 llwarns << "Invalid '--set' parameter count." << llendl;
1697 }
1698 else
1699 {
1700 LLCommandLineParser::token_vector_t::const_iterator itr = set_values.begin();
1701 for(; itr != set_values.end(); ++itr)
1702 {
1703 const std::string& name = *itr;
1704 const std::string& value = *(++itr);
1705 LLControlVariable* c = gSettings[sGlobalSettingsName]->getControl(name);
1706 if(c)
1707 {
1708 c->setValue(value, false);
1709 }
1710 else
1711 {
1712 llwarns << "'--set' specified with unknown setting: '"
1713 << name << "'." << llendl;
1714 }
1715 }
1716 }
1717 }
1718
1719 initGridChoice();
1720
1721 // If we have specified crash on startup, set the global so we'll trigger the crash at the right time
1722 if(clp.hasOption("crashonstartup"))
1723 {
1724 gCrashOnStartup = TRUE;
1725 }
1726
1727 // Handle slurl use. NOTE: Don't let SL-55321 reappear.
1728
1729 // *FIX: This init code should be made more robust to prevent
1730 // the issue SL-55321 from returning. One thought is to allow
1731 // only select options to be set from command line when a slurl
1732 // is specified. More work on the settings system is needed to
1733 // achieve this. For now...
1734
1735 // *NOTE:Mani The command line parser parses tokens and is
1736 // setup to bail after parsing the '--url' option or the
1737 // first option specified without a '--option' flag (or
1738 // any other option that uses the 'last_option' setting -
1739 // see LLControlGroupCLP::configure())
1740
1741 // What can happen is that someone can use IE (or potentially
1742 // other browsers) and do the rough equivalent of command
1743 // injection and steal passwords. Phoenix. SL-55321
1744 if(clp.hasOption("url"))
1745 {
1746 std::string slurl = clp.getOption("url")[0];
1747 if (LLURLDispatcher::isSLURLCommand(slurl))
1748 {
1749 LLStartUp::sSLURLCommand = slurl;
1750 }
1751 else
1752 {
1753 LLURLSimString::setString(slurl);
1754 }
1755 }
1756 else if(clp.hasOption("slurl"))
1757 {
1758 std::string slurl = clp.getOption("slurl")[0];
1759 if(LLURLDispatcher::isSLURL(slurl))
1760 {
1761 if (LLURLDispatcher::isSLURLCommand(slurl))
1762 {
1763 LLStartUp::sSLURLCommand = slurl;
1764 }
1765 else
1766 {
1767 LLURLSimString::setString(slurl);
1768 }
1769 }
1770 }
1771
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");
1785 if(skinfolder && LLString::null != skinfolder->getValue().asString())
1786 {
1787 gDirUtilp->setSkinFolder(skinfolder->getValue().asString());
1788 }
1789
1790 mYieldTime = gSavedSettings.getS32("YieldTime");
1791
2033 // XUI:translate 1792 // XUI:translate
2034 gSecondLife = "Second Life"; 1793 gSecondLife = "Second Life";
2035 1794
@@ -2091,28 +1850,15 @@ bool LLAppViewer::initConfiguration()
2091 LLSplashScreen::show(); 1850 LLSplashScreen::show();
2092 LLSplashScreen::update(splash_msg.str().c_str()); 1851 LLSplashScreen::update(splash_msg.str().c_str());
2093 1852
2094 LLVolumeMgr::initClass(); 1853 //LLVolumeMgr::initClass();
1854 LLVolumeMgr* volume_manager = new LLVolumeMgr();
1855 volume_manager->useMutex(); // LLApp and LLMutex magic must be manually enabled
1856 LLPrimitive::setVolumeManager(volume_manager);
2095 1857
2096 // Initialize the feature manager 1858 // Note: this is where we used to initialize LLFeatureManager::getInstance()->.
2097 // The feature manager is responsible for determining what features
2098 // are turned on/off in the app.
2099 gFeatureManagerp = new LLFeatureManager;
2100 1859
2101 gStartTime = totalTime(); 1860 gStartTime = totalTime();
2102 1861
2103 ////////////////////////////////////////
2104 //
2105 // Process ini files
2106 //
2107
2108 // declare all possible setting variables
2109 declare_settings();
2110
2111#if !LL_RELEASE_FOR_DOWNLOAD
2112// only write the defaults for non-release builds!
2113 gSavedSettings.saveToFile(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS,"settings_default.xml").c_str(), FALSE);
2114#endif
2115
2116 // 1862 //
2117 // Set the name of the window 1863 // Set the name of the window
2118 // 1864 //
@@ -2125,33 +1871,34 @@ bool LLAppViewer::initConfiguration()
2125#endif 1871#endif
2126 LLString::truncate(gWindowTitle, 255); 1872 LLString::truncate(gWindowTitle, 255);
2127 1873
2128 if (!gMultipleViewersOK) 1874 //RN: if we received a URL, hand it off to the existing instance
1875 // don't call anotherInstanceRunning() when doing URL handoff, as
1876 // it relies on checking a marker file which will not work when running
1877 // out of different directories
1878 std::string slurl;
1879 if (!LLStartUp::sSLURLCommand.empty())
1880 {
1881 slurl = LLStartUp::sSLURLCommand;
1882 }
1883 else if (LLURLSimString::parse())
1884 {
1885 slurl = LLURLSimString::getURL();
1886 }
1887 if (!slurl.empty())
1888 {
1889 if (send_url_to_other_instance(slurl))
1890 {
1891 // successfully handed off URL to existing instance, exit
1892 return false;
1893 }
1894 }
1895
1896 if (!gSavedSettings.getBOOL("AllowMultipleViewers"))
2129 { 1897 {
2130 // 1898 //
2131 // Check for another instance of the app running 1899 // Check for another instance of the app running
2132 // 1900 //
2133 //RN: if we received a URL, hand it off to the existing instance 1901
2134 // don't call anotherInstanceRunning() when doing URL handoff, as
2135 // it relies on checking a marker file which will not work when running
2136 // out of different directories
2137 std::string slurl;
2138 if (!LLStartUp::sSLURLCommand.empty())
2139 {
2140 slurl = LLStartUp::sSLURLCommand;
2141 }
2142 else if (LLURLSimString::parse())
2143 {
2144 slurl = LLURLSimString::getURL();
2145 }
2146 if (!slurl.empty())
2147 {
2148 if (send_url_to_other_instance(slurl))
2149 {
2150 // successfully handed off URL to existing instance, exit
2151 return false;
2152 }
2153 }
2154
2155 mSecondInstance = anotherInstanceRunning(); 1902 mSecondInstance = anotherInstanceRunning();
2156 1903
2157 if (mSecondInstance) 1904 if (mSecondInstance)
@@ -2251,111 +1998,29 @@ bool LLAppViewer::initConfiguration()
2251 1998
2252 if (mSecondInstance) 1999 if (mSecondInstance)
2253 { 2000 {
2254 gDisableVoice = TRUE; 2001 // This is the second instance of SL. Turn off voice support,
2255 /* Don't start another instance if using -multiple 2002 // but make sure the setting is *not* persisted.
2256 //RN: if we received a URL, hand it off to the existing instance 2003 LLControlVariable* disable_voice = gSavedSettings.getControl("CmdLineDisableVoice");
2257 if (LLURLSimString::parse()) 2004 if(disable_voice)
2258 { 2005 {
2259 LLURLSimString::send_to_other_instance(); 2006 const BOOL DO_NOT_PERSIST = FALSE;
2260 return 1; 2007 disable_voice->setValue(LLSD(TRUE), DO_NOT_PERSIST);
2261 } 2008 }
2262 */
2263 } 2009 }
2264 2010
2265 initMarkerFile(); 2011 initMarkerFile();
2266 } 2012 }
2267 2013
2268 return true; // Config was successful. 2014 // need to do this here - need to have initialized global settings first
2269} 2015 LLString nextLoginLocation = gSavedSettings.getString( "NextLoginLocation" );
2270 2016 if ( nextLoginLocation.length() )
2271bool LLAppViewer::doConfigFromCommandLine()
2272{
2273 // *FIX: This is what parse args used to do, minus the arg reading part.
2274 // Now the arg parsing is handled by LLApp::parseCommandOptions() and this
2275 // method need only interpret settings. Perhaps some day interested parties
2276 // can ask an app about a setting rather than have the app set
2277 // a gazzillion globals.
2278
2279 /////////////////////////////////////////
2280 //
2281 // Process command line arguments
2282 //
2283 S32 args_result = 0;
2284
2285#if LL_DARWIN
2286 { 2017 {
2287 // On the Mac, read in arguments.txt (if it exists) and process it for additional arguments. 2018 LLURLSimString::setString( nextLoginLocation.c_str() );
2288 LLString args; 2019 };
2289 if(_read_file_into_string(args, "arguments.txt")) /* Flawfinder: ignore*/
2290 {
2291 // The arguments file exists.
2292 // It should consist of command line arguments separated by newlines.
2293 // Split it into individual arguments and build a fake argv[] to pass to parse_args.
2294 std::vector<std::string> arglist;
2295
2296 arglist.push_back("newview");
2297
2298 llinfos << "Reading additional command line arguments from arguments.txt..." << llendl;
2299
2300 typedef boost::tokenizer<boost::escaped_list_separator<char> > tokenizer;
2301 boost::escaped_list_separator<char> sep("\\", "\r\n ", "\"'");
2302 tokenizer tokens(args, sep);
2303 tokenizer::iterator token_iter;
2304
2305 for(token_iter = tokens.begin(); token_iter != tokens.end(); ++token_iter)
2306 {
2307 // people can put their password in the file. :(
2308 // http://jira.secondlife.com/browse/SEC-42
2309 //llinfos << "argument: '" << (token_iter->c_str()) << "'" << llendl;
2310
2311 arglist.push_back(*token_iter);
2312 }
2313
2314 char **fakeargv = new char*[arglist.size()];
2315 int i;
2316 for(i=0; i < arglist.size(); i++)
2317 fakeargv[i] = const_cast<char*>(arglist[i].c_str());
2318
2319 args_result = parse_args(arglist.size(), fakeargv);
2320 delete[] fakeargv;
2321 }
2322
2323 // Get the user's preferred language string based on the Mac OS localization mechanism.
2324 // To add a new localization:
2325 // go to the "Resources" section of the project
2326 // get info on "language.txt"
2327 // in the "General" tab, click the "Add Localization" button
2328 // create a new localization for the language you're adding
2329 // set the contents of the new localization of the file to the string corresponding to our localization
2330 // (i.e. "en-us", "ja", etc. Use the existing ones as a guide.)
2331 CFURLRef url = CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("language"), CFSTR("txt"), NULL);
2332 char path[MAX_PATH];
2333 if(CFURLGetFileSystemRepresentation(url, false, (UInt8 *)path, sizeof(path)))
2334 {
2335 LLString lang;
2336 if(_read_file_into_string(lang, path)) /* Flawfinder: ignore*/
2337 {
2338 gCommandLineForcedSettings["SystemLanguage"] = lang;
2339 }
2340 }
2341 CFRelease(url);
2342 }
2343#endif
2344
2345 int argc = gTempArgC;
2346 char** argv = gTempArgV;
2347 2020
2348 // 2021 gLastRunVersion = gSavedSettings.getString("LastRunVersion");
2349 // Parse the command line arguments
2350 //
2351 args_result |= parse_args(argc, argv);
2352 if (args_result)
2353 {
2354 removeMarkerFile();
2355 return false;
2356 }
2357 2022
2358 return true; 2023 return true; // Config was successful.
2359} 2024}
2360 2025
2361bool LLAppViewer::initWindow() 2026bool LLAppViewer::initWindow()
@@ -2374,10 +2039,11 @@ bool LLAppViewer::initWindow()
2374 window_title_str[sizeof(window_title_str) - 1] = '\0'; 2039 window_title_str[sizeof(window_title_str) - 1] = '\0';
2375 2040
2376 // always start windowed 2041 // always start windowed
2042 BOOL ignorePixelDepth = gSavedSettings.getBOOL("IgnorePixelDepth");
2377 gViewerWindow = new LLViewerWindow(window_title_str, "Second Life", 2043 gViewerWindow = new LLViewerWindow(window_title_str, "Second Life",
2378 gSavedSettings.getS32("WindowX"), gSavedSettings.getS32("WindowY"), 2044 gSavedSettings.getS32("WindowX"), gSavedSettings.getS32("WindowY"),
2379 gSavedSettings.getS32("WindowWidth"), gSavedSettings.getS32("WindowHeight"), 2045 gSavedSettings.getS32("WindowWidth"), gSavedSettings.getS32("WindowHeight"),
2380 FALSE, gIgnorePixelDepth); 2046 FALSE, ignorePixelDepth);
2381 2047
2382 if (gSavedSettings.getBOOL("FullScreen")) 2048 if (gSavedSettings.getBOOL("FullScreen"))
2383 { 2049 {
@@ -2399,14 +2065,20 @@ bool LLAppViewer::initWindow()
2399 2065
2400 // Set this flag in case we crash while initializing GL 2066 // Set this flag in case we crash while initializing GL
2401 gSavedSettings.setBOOL("RenderInitError", TRUE); 2067 gSavedSettings.setBOOL("RenderInitError", TRUE);
2402 gSavedSettings.saveToFile( gSettingsFileName, TRUE ); 2068 gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile"), TRUE );
2403 2069
2404 gPipeline.init(); 2070 gPipeline.init();
2405 stop_glerror(); 2071 stop_glerror();
2406 gViewerWindow->initGLDefaults(); 2072 gViewerWindow->initGLDefaults();
2407 2073
2408 gSavedSettings.setBOOL("RenderInitError", FALSE); 2074 gSavedSettings.setBOOL("RenderInitError", FALSE);
2409 gSavedSettings.saveToFile( gSettingsFileName, TRUE ); 2075 gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile"), TRUE );
2076 }
2077
2078 //If we have a startup crash, it's usually near GL initialization, so simulate that.
2079 if(gCrashOnStartup)
2080 {
2081 LLAppViewer::instance()->forceErrorLLError();
2410 } 2082 }
2411 2083
2412 LLUI::sWindow = gViewerWindow->getWindow(); 2084 LLUI::sWindow = gViewerWindow->getWindow();
@@ -2414,11 +2086,6 @@ bool LLAppViewer::initWindow()
2414 LLAlertDialog::parseAlerts("alerts.xml"); 2086 LLAlertDialog::parseAlerts("alerts.xml");
2415 LLNotifyBox::parseNotify("notify.xml"); 2087 LLNotifyBox::parseNotify("notify.xml");
2416 2088
2417 // *TODO - remove this when merging into release
2418 // DON'T Clean up the feature manager lookup table - settings are needed
2419 // for setting the graphics level.
2420 //gFeatureManagerp->cleanupFeatureTables();
2421
2422 // Show watch cursor 2089 // Show watch cursor
2423 gViewerWindow->setCursor(UI_CURSOR_WAIT); 2090 gViewerWindow->setCursor(UI_CURSOR_WAIT);
2424 2091
@@ -2427,6 +2094,7 @@ bool LLAppViewer::initWindow()
2427 2094
2428 // show viewer window 2095 // show viewer window
2429 gViewerWindow->mWindow->show(); 2096 gViewerWindow->mWindow->show();
2097
2430 2098
2431 return true; 2099 return true;
2432} 2100}
@@ -2455,6 +2123,7 @@ void LLAppViewer::cleanupSavedSettings()
2455 gSavedSettings.setBOOL("DebugWindowProc", gDebugWindowProc); 2123 gSavedSettings.setBOOL("DebugWindowProc", gDebugWindowProc);
2456 2124
2457 gSavedSettings.setBOOL("AllowIdleAFK", gAllowIdleAFK); 2125 gSavedSettings.setBOOL("AllowIdleAFK", gAllowIdleAFK);
2126 gSavedSettings.setBOOL("AllowTapTapHoldRun", gAllowTapTapHoldRun);
2458 gSavedSettings.setBOOL("ShowObjectUpdates", gShowObjectUpdates); 2127 gSavedSettings.setBOOL("ShowObjectUpdates", gShowObjectUpdates);
2459 2128
2460 if (!gNoRender) 2129 if (!gNoRender)
@@ -2462,7 +2131,7 @@ void LLAppViewer::cleanupSavedSettings()
2462 if (gDebugView) 2131 if (gDebugView)
2463 { 2132 {
2464 gSavedSettings.setBOOL("ShowDebugConsole", gDebugView->mDebugConsolep->getVisible()); 2133 gSavedSettings.setBOOL("ShowDebugConsole", gDebugView->mDebugConsolep->getVisible());
2465 gSavedSettings.setBOOL("ShowDebugStats", gDebugView->mStatViewp->getVisible()); 2134 gSavedSettings.setBOOL("ShowDebugStats", gDebugView->mFloaterStatsp->getVisible());
2466 } 2135 }
2467 } 2136 }
2468 2137
@@ -2508,7 +2177,7 @@ void LLAppViewer::writeSystemInfo()
2508{ 2177{
2509 gDebugInfo["SLLog"] = LLError::logFileName(); 2178 gDebugInfo["SLLog"] = LLError::logFileName();
2510 2179
2511 gDebugInfo["ClientInfo"]["Name"] = gChannelName; 2180 gDebugInfo["ClientInfo"]["Name"] = gSavedSettings.getString("VersionChannelName");
2512 gDebugInfo["ClientInfo"]["MajorVersion"] = LL_VERSION_MAJOR; 2181 gDebugInfo["ClientInfo"]["MajorVersion"] = LL_VERSION_MAJOR;
2513 gDebugInfo["ClientInfo"]["MinorVersion"] = LL_VERSION_MINOR; 2182 gDebugInfo["ClientInfo"]["MinorVersion"] = LL_VERSION_MINOR;
2514 gDebugInfo["ClientInfo"]["PatchVersion"] = LL_VERSION_PATCH; 2183 gDebugInfo["ClientInfo"]["PatchVersion"] = LL_VERSION_PATCH;
@@ -2543,6 +2212,13 @@ void LLAppViewer::writeSystemInfo()
2543 llinfos << "OS info: " << getOSInfo() << llendl; 2212 llinfos << "OS info: " << getOSInfo() << llendl;
2544} 2213}
2545 2214
2215void LLAppViewer::handleSyncViewerCrash()
2216{
2217 LLAppViewer* pApp = LLAppViewer::instance();
2218 // Call to pure virtual, handled by platform specific llappviewer instance.
2219 pApp->handleSyncCrashTrace();
2220}
2221
2546void LLAppViewer::handleViewerCrash() 2222void LLAppViewer::handleViewerCrash()
2547{ 2223{
2548 LLAppViewer* pApp = LLAppViewer::instance(); 2224 LLAppViewer* pApp = LLAppViewer::instance();
@@ -2562,13 +2238,25 @@ void LLAppViewer::handleViewerCrash()
2562 2238
2563 //We already do this in writeSystemInfo(), but we do it again here to make /sure/ we have a version 2239 //We already do this in writeSystemInfo(), but we do it again here to make /sure/ we have a version
2564 //to check against no matter what 2240 //to check against no matter what
2565 gDebugInfo["ClientInfo"]["Name"] = gChannelName; 2241 gDebugInfo["ClientInfo"]["Name"] = gSavedSettings.getString("VersionChannelName");
2242
2566 gDebugInfo["ClientInfo"]["MajorVersion"] = LL_VERSION_MAJOR; 2243 gDebugInfo["ClientInfo"]["MajorVersion"] = LL_VERSION_MAJOR;
2567 gDebugInfo["ClientInfo"]["MinorVersion"] = LL_VERSION_MINOR; 2244 gDebugInfo["ClientInfo"]["MinorVersion"] = LL_VERSION_MINOR;
2568 gDebugInfo["ClientInfo"]["PatchVersion"] = LL_VERSION_PATCH; 2245 gDebugInfo["ClientInfo"]["PatchVersion"] = LL_VERSION_PATCH;
2569 gDebugInfo["ClientInfo"]["BuildVersion"] = LL_VERSION_BUILD; 2246 gDebugInfo["ClientInfo"]["BuildVersion"] = LL_VERSION_BUILD;
2247
2248 LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
2249 if ( parcel && parcel->getMusicURL()[0])
2250 {
2251 gDebugInfo["ParcelMusicURL"] = parcel->getMusicURL();
2252 }
2253 if ( parcel && parcel->getMediaURL()[0])
2254 {
2255 gDebugInfo["ParcelMediaURL"] = parcel->getMediaURL();
2256 }
2257
2570 2258
2571 gDebugInfo["SettingsFilename"] = gSettingsFileName; 2259 gDebugInfo["SettingsFilename"] = gSavedSettings.getString("ClientSettingsFile");
2572 gDebugInfo["CAFilename"] = gDirUtilp->getCAFile(); 2260 gDebugInfo["CAFilename"] = gDirUtilp->getCAFile();
2573 gDebugInfo["ViewerExePath"] = gDirUtilp->getExecutablePathAndName().c_str(); 2261 gDebugInfo["ViewerExePath"] = gDirUtilp->getExecutablePathAndName().c_str();
2574 gDebugInfo["CurrentPath"] = gDirUtilp->getCurPath().c_str(); 2262 gDebugInfo["CurrentPath"] = gDirUtilp->getCurPath().c_str();
@@ -2625,10 +2313,8 @@ void LLAppViewer::handleViewerCrash()
2625 gMessageSystem->getCircuitInfo(gDebugInfo["CircuitInfo"]); 2313 gMessageSystem->getCircuitInfo(gDebugInfo["CircuitInfo"]);
2626 gMessageSystem->stopLogging(); 2314 gMessageSystem->stopLogging();
2627 } 2315 }
2628 if (gWorldp) 2316
2629 { 2317 LLWorld::getInstance()->getInfo(gDebugInfo);
2630 gWorldp->getInfo(gDebugInfo);
2631 }
2632 2318
2633 // Close the debug file 2319 // Close the debug file
2634 pApp->closeDebug(); 2320 pApp->closeDebug();
@@ -2644,7 +2330,7 @@ void LLAppViewer::handleViewerCrash()
2644 pApp->removeMarkerFile(false); 2330 pApp->removeMarkerFile(false);
2645 } 2331 }
2646 2332
2647 // Call to pure virtual, handled by platform specifc llappviewer instance. 2333 // Call to pure virtual, handled by platform specific llappviewer instance.
2648 pApp->handleCrashReporting(); 2334 pApp->handleCrashReporting();
2649 2335
2650 return; 2336 return;
@@ -2740,7 +2426,11 @@ void LLAppViewer::initMarkerFile()
2740 ll_apr_file_remove(error_marker_file); 2426 ll_apr_file_remove(error_marker_file);
2741 2427
2742 //Freeze case checks 2428 //Freeze case checks
2743 if(anotherInstanceRunning()) return; 2429 if(anotherInstanceRunning())
2430 {
2431 return;
2432 }
2433
2744 fMarker = ll_apr_file_open(mMarkerFileName, LL_APR_RB); 2434 fMarker = ll_apr_file_open(mMarkerFileName, LL_APR_RB);
2745 if (fMarker != NULL) 2435 if (fMarker != NULL)
2746 { 2436 {
@@ -2804,13 +2494,10 @@ void LLAppViewer::requestQuit()
2804 return; 2494 return;
2805 } 2495 }
2806 2496
2807 if (gHUDManager) 2497 LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral*)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINT, TRUE);
2808 { 2498 effectp->setPositionGlobal(gAgent.getPositionGlobal());
2809 LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral*)gHUDManager->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINT, TRUE); 2499 effectp->setColor(LLColor4U(gAgent.getEffectColor()));
2810 effectp->setPositionGlobal(gAgent.getPositionGlobal()); 2500 LLHUDManager::getInstance()->sendEffects();
2811 effectp->setColor(LLColor4U(gAgent.getEffectColor()));
2812 gHUDManager->sendEffects();
2813 }
2814 2501
2815 // Attempt to close all floaters that might be 2502 // Attempt to close all floaters that might be
2816 // editing things. 2503 // editing things.
@@ -2952,7 +2639,7 @@ bool LLAppViewer::initCache()
2952 char static_vfs_index_file[LL_MAX_PATH]; // Flawfinder: ignore 2639 char static_vfs_index_file[LL_MAX_PATH]; // Flawfinder: ignore
2953 char static_vfs_data_file[LL_MAX_PATH]; // Flawfinder: ignore 2640 char static_vfs_data_file[LL_MAX_PATH]; // Flawfinder: ignore
2954 2641
2955 if (gMultipleViewersOK) 2642 if (gSavedSettings.getBOOL("AllowMultipleViewers"))
2956 { 2643 {
2957 // don't mess with renaming the VFS in this case 2644 // don't mess with renaming the VFS in this case
2958 new_salt = old_salt; 2645 new_salt = old_salt;
@@ -3143,7 +2830,25 @@ const std::string& LLAppViewer::getHelperURI() const
3143 2830
3144void LLAppViewer::addLoginURI(const std::string& uri) 2831void LLAppViewer::addLoginURI(const std::string& uri)
3145{ 2832{
2833 // *NOTE:Mani - login uri trumps the --grid (gGridChoice) setting.
2834 // Update gGridChoice to reflect the loginURI setting.
3146 gLoginURIs.push_back(uri); 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 }
3147} 2852}
3148 2853
3149void LLAppViewer::setHelperURI(const std::string& uri) 2854void LLAppViewer::setHelperURI(const std::string& uri)
@@ -3151,17 +2856,6 @@ void LLAppViewer::setHelperURI(const std::string& uri)
3151 gHelperURI = uri; 2856 gHelperURI = uri;
3152} 2857}
3153 2858
3154void LLAppViewer::setLoginPage(const std::string& login_page)
3155{
3156 gLoginPage = login_page;
3157}
3158
3159const std::string& LLAppViewer::getLoginPage()
3160{
3161 return gLoginPage;
3162}
3163
3164
3165// Callback from a dialog indicating user was logged out. 2859// Callback from a dialog indicating user was logged out.
3166void finish_disconnect(S32 option, void* userdata) 2860void finish_disconnect(S32 option, void* userdata)
3167{ 2861{
@@ -3224,6 +2918,7 @@ void LLAppViewer::badNetworkHandler()
3224 // Generates the minidump. 2918 // Generates the minidump.
3225 LLWinDebug::handleException(NULL); 2919 LLWinDebug::handleException(NULL);
3226#endif 2920#endif
2921 LLAppViewer::handleSyncViewerCrash();
3227 LLAppViewer::handleViewerCrash(); 2922 LLAppViewer::handleViewerCrash();
3228 2923
3229 std::ostringstream message; 2924 std::ostringstream message;
@@ -3257,7 +2952,8 @@ void LLAppViewer::saveFinalSnapshot()
3257 LLString snap_filename = gDirUtilp->getLindenUserDir(); 2952 LLString snap_filename = gDirUtilp->getLindenUserDir();
3258 snap_filename += gDirUtilp->getDirDelimiter(); 2953 snap_filename += gDirUtilp->getDirDelimiter();
3259 snap_filename += SCREEN_LAST_FILENAME; 2954 snap_filename += SCREEN_LAST_FILENAME;
3260 gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowWidth(), gViewerWindow->getWindowHeight(), FALSE, TRUE); 2955 // use full pixel dimensions of viewer window (not post-scale dimensions)
2956 gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowDisplayWidth(), gViewerWindow->getWindowDisplayHeight(), FALSE, TRUE);
3261 mSavedFinalSnapshot = TRUE; 2957 mSavedFinalSnapshot = TRUE;
3262 } 2958 }
3263} 2959}
@@ -3299,7 +2995,10 @@ void LLAppViewer::saveNameCache()
3299 2995
3300bool LLAppViewer::isInProductionGrid() 2996bool LLAppViewer::isInProductionGrid()
3301{ 2997{
3302 return (GRID_INFO_AGNI == gGridChoice); 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);
3303} 3002}
3304 3003
3305 3004
@@ -3330,8 +3029,6 @@ void LLAppViewer::idle()
3330 // Update frame timers 3029 // Update frame timers
3331 static LLTimer idle_timer; 3030 static LLTimer idle_timer;
3332 3031
3333 LLControlBase::updateAllListeners();
3334
3335 LLFrameTimer::updateFrameTime(); 3032 LLFrameTimer::updateFrameTime();
3336 LLEventTimer::updateClass(); 3033 LLEventTimer::updateClass();
3337 LLCriticalDamp::updateInterpolants(); 3034 LLCriticalDamp::updateInterpolants();
@@ -3352,9 +3049,10 @@ void LLAppViewer::idle()
3352 // Smoothly weight toward current frame 3049 // Smoothly weight toward current frame
3353 gFPSClamped = (frame_rate_clamped + (4.f * gFPSClamped)) / 5.f; 3050 gFPSClamped = (frame_rate_clamped + (4.f * gFPSClamped)) / 5.f;
3354 3051
3355 if (gQuitAfterSeconds > 0.f) 3052 F32 qas = gSavedSettings.getF32("QuitAfterSeconds");
3053 if (qas > 0.f)
3356 { 3054 {
3357 if (gRenderStartTime.getElapsedTimeF32() > gQuitAfterSeconds) 3055 if (gRenderStartTime.getElapsedTimeF32() > qas)
3358 { 3056 {
3359 LLAppViewer::instance()->forceQuit(); 3057 LLAppViewer::instance()->forceQuit();
3360 } 3058 }
@@ -3385,7 +3083,7 @@ void LLAppViewer::idle()
3385 { 3083 {
3386 LLFastTimer t(LLFastTimer::FTM_NETWORK); 3084 LLFastTimer t(LLFastTimer::FTM_NETWORK);
3387 // Update spaceserver timeinfo 3085 // Update spaceserver timeinfo
3388 gWorldp->setSpaceTimeUSec(gWorldp->getSpaceTimeUSec() + (U32)(dt_raw * SEC_TO_MICROSEC)); 3086 LLWorld::getInstance()->setSpaceTimeUSec(LLWorld::getInstance()->getSpaceTimeUSec() + (U32)(dt_raw * SEC_TO_MICROSEC));
3389 3087
3390 3088
3391 ////////////////////////////////////// 3089 //////////////////////////////////////
@@ -3393,7 +3091,7 @@ void LLAppViewer::idle()
3393 // Update simulator agent state 3091 // Update simulator agent state
3394 // 3092 //
3395 3093
3396 if (gRotateRight) 3094 if (gSavedSettings.getBOOL("RotateRight"))
3397 { 3095 {
3398 gAgent.moveYaw(-1.f); 3096 gAgent.moveYaw(-1.f);
3399 } 3097 }
@@ -3519,7 +3217,7 @@ void LLAppViewer::idle()
3519 { 3217 {
3520 // After agent and camera moved, figure out if we need to 3218 // After agent and camera moved, figure out if we need to
3521 // deselect objects. 3219 // deselect objects.
3522 gSelectMgr->deselectAllIfTooFar(); 3220 LLSelectMgr::getInstance()->deselectAllIfTooFar();
3523 3221
3524 } 3222 }
3525 3223
@@ -3536,7 +3234,7 @@ void LLAppViewer::idle()
3536 3234
3537 if (!(logoutRequestSent() && hasSavedFinalSnapshot())) 3235 if (!(logoutRequestSent() && hasSavedFinalSnapshot()))
3538 { 3236 {
3539 gObjectList.update(gAgent, *gWorldp); 3237 gObjectList.update(gAgent, *LLWorld::getInstance());
3540 } 3238 }
3541 } 3239 }
3542 3240
@@ -3568,9 +3266,9 @@ void LLAppViewer::idle()
3568 3266
3569 { 3267 {
3570 gFrameStats.start(LLFrameStats::UPDATE_EFFECTS); 3268 gFrameStats.start(LLFrameStats::UPDATE_EFFECTS);
3571 gSelectMgr->updateEffects(); 3269 LLSelectMgr::getInstance()->updateEffects();
3572 gHUDManager->cleanupEffects(); 3270 LLHUDManager::getInstance()->cleanupEffects();
3573 gHUDManager->sendEffects(); 3271 LLHUDManager::getInstance()->sendEffects();
3574 } 3272 }
3575 3273
3576 stop_glerror(); 3274 stop_glerror();
@@ -3590,21 +3288,20 @@ void LLAppViewer::idle()
3590 // Update surfaces, and surface textures as well. 3288 // Update surfaces, and surface textures as well.
3591 // 3289 //
3592 3290
3593 gWorldp->updateVisibilities(); 3291 LLWorld::getInstance()->updateVisibilities();
3594 { 3292 {
3595 const F32 max_region_update_time = .001f; // 1ms 3293 const F32 max_region_update_time = .001f; // 1ms
3596 LLFastTimer t(LLFastTimer::FTM_REGION_UPDATE); 3294 LLFastTimer t(LLFastTimer::FTM_REGION_UPDATE);
3597 gWorldp->updateRegions(max_region_update_time); 3295 LLWorld::getInstance()->updateRegions(max_region_update_time);
3598 } 3296 }
3599 3297
3600 ///////////////////////// 3298 /////////////////////////
3601 // 3299 //
3602 // Update weather effects 3300 // Update weather effects
3603 // 3301 //
3604
3605 if (!gNoRender) 3302 if (!gNoRender)
3606 { 3303 {
3607 gWorldp->updateClouds(gFrameDTClamped); 3304 LLWorld::getInstance()->updateClouds(gFrameDTClamped);
3608 gSky.propagateHeavenlyBodies(gFrameDTClamped); // moves sun, moon, and planets 3305 gSky.propagateHeavenlyBodies(gFrameDTClamped); // moves sun, moon, and planets
3609 3306
3610 // Update wind vector 3307 // Update wind vector
@@ -3612,7 +3309,7 @@ void LLAppViewer::idle()
3612 static LLVector3 average_wind; 3309 static LLVector3 average_wind;
3613 3310
3614 LLViewerRegion *regionp; 3311 LLViewerRegion *regionp;
3615 regionp = gWorldp->resolveRegionGlobal(wind_position_region, gAgent.getPositionGlobal()); // puts agent's local coords into wind_position 3312 regionp = LLWorld::getInstance()->resolveRegionGlobal(wind_position_region, gAgent.getPositionGlobal()); // puts agent's local coords into wind_position
3616 if (regionp) 3313 if (regionp)
3617 { 3314 {
3618 gWindVec = regionp->mWind.getVelocity(wind_position_region); 3315 gWindVec = regionp->mWind.getVelocity(wind_position_region);
@@ -3635,27 +3332,6 @@ void LLAppViewer::idle()
3635 3332
3636 ////////////////////////////////////// 3333 //////////////////////////////////////
3637 // 3334 //
3638 // Update images, using the image stats generated during object update/culling
3639 //
3640 // Can put objects onto the retextured list.
3641 //
3642 gFrameStats.start(LLFrameStats::IMAGE_UPDATE);
3643
3644 {
3645 LLFastTimer t(LLFastTimer::FTM_IMAGE_UPDATE);
3646
3647 LLViewerImage::updateClass(gCamera->getVelocityStat()->getMean(),
3648 gCamera->getAngularVelocityStat()->getMean());
3649
3650 gBumpImageList.updateImages(); // must be called before gImageList version so that it's textures are thrown out first.
3651
3652 const F32 max_image_decode_time = llmin(0.005f, 0.005f*10.f*gFrameIntervalSeconds); // 50 ms/second decode time (no more than 5ms/frame)
3653 gImageList.updateImages(max_image_decode_time);
3654 stop_glerror();
3655 }
3656
3657 //////////////////////////////////////
3658 //
3659 // Sort and cull in the new renderer are moved to pipeline.cpp 3335 // Sort and cull in the new renderer are moved to pipeline.cpp
3660 // Here, particles are updated and drawables are moved. 3336 // Here, particles are updated and drawables are moved.
3661 // 3337 //
@@ -3667,17 +3343,22 @@ void LLAppViewer::idle()
3667 gPipeline.updateMove(); 3343 gPipeline.updateMove();
3668 3344
3669 gFrameStats.start(LLFrameStats::UPDATE_PARTICLES); 3345 gFrameStats.start(LLFrameStats::UPDATE_PARTICLES);
3670 gWorldp->updateParticles(); 3346 LLWorld::getInstance()->updateParticles();
3671 } 3347 }
3672 stop_glerror(); 3348 stop_glerror();
3673 3349
3674 if (!LLViewerJoystick::sOverrideCamera) 3350 if (LLViewerJoystick::getInstance()->getOverrideCamera())
3675 { 3351 {
3676 gAgent.updateCamera(); 3352 LLViewerJoystick::getInstance()->moveFlycam();
3677 } 3353 }
3678 else 3354 else
3679 { 3355 {
3680 LLViewerJoystick::updateCamera(); 3356 if (LLToolMgr::getInstance()->inBuildMode())
3357 {
3358 LLViewerJoystick::getInstance()->moveObjects();
3359 }
3360
3361 gAgent.updateCamera();
3681 } 3362 }
3682 3363
3683 // objects and camera should be in sync, do LOD calculations now 3364 // objects and camera should be in sync, do LOD calculations now
@@ -3948,9 +3629,9 @@ void LLAppViewer::disconnectViewer()
3948 } 3629 }
3949 } 3630 }
3950 3631
3951 if (gSelectMgr) 3632 if (LLSelectMgr::getInstance())
3952 { 3633 {
3953 gSelectMgr->deselectAll(); 3634 LLSelectMgr::getInstance()->deselectAll();
3954 } 3635 }
3955 3636
3956 if (!gNoRender) 3637 if (!gNoRender)
@@ -3971,9 +3652,9 @@ void LLAppViewer::disconnectViewer()
3971 // Also writes cached agent settings to gSavedSettings 3652 // Also writes cached agent settings to gSavedSettings
3972 gAgent.cleanup(); 3653 gAgent.cleanup();
3973 3654
3974 gObjectList.destroy(); 3655 // This is where we used to call gObjectList.destroy() and then delete gWorldp.
3975 delete gWorldp; 3656 // Now we just ask the LLWorld singleton to cleanly shut down.
3976 gWorldp = NULL; 3657 LLWorld::getInstance()->destroyClass();
3977 3658
3978 cleanup_xfer_manager(); 3659 cleanup_xfer_manager();
3979 gDisconnected = TRUE; 3660 gDisconnected = TRUE;
diff --git a/linden/indra/newview/llappviewer.h b/linden/indra/newview/llappviewer.h
index 88f3fdd..b3f3681 100644
--- a/linden/indra/newview/llappviewer.h
+++ b/linden/indra/newview/llappviewer.h
@@ -36,15 +36,21 @@ class LLTextureCache;
36class LLWorkerThread; 36class LLWorkerThread;
37class LLTextureFetch; 37class LLTextureFetch;
38 38
39class LLCommandLineParser;
40
39class LLAppViewer : public LLApp 41class LLAppViewer : public LLApp
40{ 42{
41public: 43public:
42 LLAppViewer(); 44 LLAppViewer();
43 virtual ~LLAppViewer(); 45 virtual ~LLAppViewer();
44 46
45 // *NOTE:Mani - Don't use this! 47 /**
46 // Having 48 * @brief Access to the LLAppViewer singleton.
47 static LLAppViewer* instance() {return sInstance; } 49 *
50 * The LLAppViewer singleton is created in main()/WinMain().
51 * So don't use it in pre-entry (static initialization) code.
52 */
53 static LLAppViewer* instance() {return sInstance; }
48 54
49 // 55 //
50 // Main application logic 56 // Main application logic
@@ -64,10 +70,6 @@ public:
64 bool quitRequested() { return mQuitRequested; } 70 bool quitRequested() { return mQuitRequested; }
65 bool logoutRequestSent() { return mLogoutRequestSent; } 71 bool logoutRequestSent() { return mLogoutRequestSent; }
66 72
67 // *FIX: This is meant to stay only until the command line issues are hashed out with repect to LLApp::parseCommandLine
68 // This version stores the argc and argv for later usage, make sure the params passed in last as long as this class.
69 bool tempStoreCommandOptions(int argc, char** argv);
70
71 void closeDebug(); 73 void closeDebug();
72 74
73 const LLOSInfo& getOSInfo() const { return mSysOSInfo; } 75 const LLOSInfo& getOSInfo() const { return mSysOSInfo; }
@@ -78,7 +80,9 @@ public:
78 S32 getCrashBehavior() const { return mCrashBehavior; } 80 S32 getCrashBehavior() const { return mCrashBehavior; }
79 void setCrashBehavior(S32 cb); 81 void setCrashBehavior(S32 cb);
80 virtual void handleCrashReporting() = 0; // What to do with crash report? 82 virtual void handleCrashReporting() = 0; // What to do with crash report?
81 static void handleViewerCrash(); // Hey! The viewer crashed. Do this. 83 virtual void handleSyncCrashTrace() = 0; // any low-level crash-prep that has to happen in the context of the crashing thread before the crash report is delivered.
84 static void handleViewerCrash(); // Hey! The viewer crashed. Do this, soon.
85 static void handleSyncViewerCrash(); // Hey! The viewer crashed. Do this right NOW in the context of the crashing thread.
82 86
83 // Thread accessors 87 // Thread accessors
84 static LLTextureCache* getTextureCache() { return sTextureCache; } 88 static LLTextureCache* getTextureCache() { return sTextureCache; }
@@ -87,9 +91,6 @@ public:
87 91
88 const std::string& getSerialNumber() { return mSerialNumber; } 92 const std::string& getSerialNumber() { return mSerialNumber; }
89 93
90 // *FIX:Mani purgeCache was made public for parse_args().
91 // If that beast is gone, make it private.
92 void purgeCache(); // Clear the local cache.
93 bool getPurgeCache() const { return mPurgeCache; } 94 bool getPurgeCache() const { return mPurgeCache; }
94 95
95 const LLString& getSecondLifeTitle() const; // The Second Life title. 96 const LLString& getSecondLifeTitle() const; // The Second Life title.
@@ -101,8 +102,6 @@ public:
101 const std::vector<std::string>& getLoginURIs() const; 102 const std::vector<std::string>& getLoginURIs() const;
102 const std::string& getHelperURI() const; 103 const std::string& getHelperURI() const;
103 void resetURIs() const; 104 void resetURIs() const;
104 void setLoginPage(const std::string& login_page);
105 const std::string& getLoginPage();
106 105
107 void forceDisconnect(const LLString& msg); // Force disconnection, with a message to the user. 106 void forceDisconnect(const LLString& msg); // Force disconnection, with a message to the user.
108 void badNetworkHandler(); // Cause a crash state due to bad network packet. 107 void badNetworkHandler(); // Cause a crash state due to bad network packet.
@@ -125,23 +124,39 @@ public:
125 virtual void forceErrorInifiniteLoop(); 124 virtual void forceErrorInifiniteLoop();
126 virtual void forceErrorSoftwareException(); 125 virtual void forceErrorSoftwareException();
127 126
127 // *NOTE: There are currently 3 settings files:
128 // "Global", "PerAccount" and "CrashSettings"
129 // The list is found in app_settings/settings_files.xml
130 // but since they are used explicitly in code,
131 // the follow consts should also do the trick.
132 static const std::string sGlobalSettingsName;
133 static const std::string sPerAccountSettingsName;
134 static const std::string sCrashSettingsName;
135
136 void loadSettingsFromDirectory(ELLPath path_index);
137
138 std::string getSettingsFileName(const std::string& file);
139
140
128protected: 141protected:
129 virtual bool initWindow(); // Initialize the viewer's window. 142 virtual bool initWindow(); // Initialize the viewer's window.
130 virtual bool initLogging(); // Initialize log files, logging system, return false on failure. 143 virtual bool initLogging(); // Initialize log files, logging system, return false on failure.
144 virtual void initConsole() {}; // Initialize OS level debugging console.
131 virtual bool initHardwareTest() { return true; } // A false result indicates the app should quit. 145 virtual bool initHardwareTest() { return true; } // A false result indicates the app should quit.
146
147 virtual bool initParseCommandLine(LLCommandLineParser& clp)
148 { return true; } // Allow platforms to specify the command line args.
132 149
133 virtual std::string generateSerialNumber() = 0; // Platforms specific classes generate this. 150 virtual std::string generateSerialNumber() = 0; // Platforms specific classes generate this.
134 151
135 152
136private: 153private:
137 154
138 bool initEarlyConfiguration(); // Initialize setting needed by crash reporting.
139 bool initThreads(); // Initialize viewer threads, return false on failure. 155 bool initThreads(); // Initialize viewer threads, return false on failure.
140 bool initConfiguration(); // Initialize settings from the command line/config file. 156 bool initConfiguration(); // Initialize settings from the command line/config file.
141 157
142 bool initCache(); // Initialize local client cache. 158 bool initCache(); // Initialize local client cache.
143 159 void purgeCache(); // Clear the local cache.
144 bool doConfigFromCommandLine(); // calls parse args.
145 160
146 void cleanupSavedSettings(); // Sets some config data to current or default values during cleanup. 161 void cleanupSavedSettings(); // Sets some config data to current or default values during cleanup.
147 void removeCacheFiles(const char *filemask); // Deletes cached files the match the given wildcard. 162 void removeCacheFiles(const char *filemask); // Deletes cached files the match the given wildcard.
@@ -190,6 +205,8 @@ private:
190 205
191 bool mQuitRequested; // User wants to quit, may have modified documents open. 206 bool mQuitRequested; // User wants to quit, may have modified documents open.
192 bool mLogoutRequestSent; // Disconnect message sent to simulator, no longer safe to send messages to the sim. 207 bool mLogoutRequestSent; // Disconnect message sent to simulator, no longer safe to send messages to the sim.
208 S32 mYieldTime;
209 LLSD mSettingsFileList;
193}; 210};
194 211
195// consts from viewer.h 212// consts from viewer.h
@@ -200,35 +217,18 @@ const S32 AGENT_UPDATES_PER_SECOND = 10;
200// 217//
201// "// llstartup" indicates that llstartup is the only client for this global. 218// "// llstartup" indicates that llstartup is the only client for this global.
202 219
203extern bool gVerifySSLCert; // parse_args setting used by llxmlrpctransaction.cpp
204extern BOOL gHandleKeysAsync; // gSavedSettings used by llviewerdisplay.cpp & llviewermenu.cpp 220extern BOOL gHandleKeysAsync; // gSavedSettings used by llviewerdisplay.cpp & llviewermenu.cpp
205extern BOOL gProbeHardware;
206extern LLString gDisabledMessage; // llstartup 221extern LLString gDisabledMessage; // llstartup
207extern BOOL gHideLinks; // used by llpanellogin, lllfloaterbuycurrency, llstartup 222extern BOOL gHideLinks; // used by llpanellogin, lllfloaterbuycurrency, llstartup
208extern LLSD gDebugInfo; 223extern LLSD gDebugInfo;
209 224
210extern BOOL gAllowIdleAFK; 225extern BOOL gAllowIdleAFK;
211extern F32 gAFKTimeout; 226extern BOOL gAllowTapTapHoldRun;
212extern BOOL gShowObjectUpdates; 227extern BOOL gShowObjectUpdates;
213 228
214extern BOOL gLogMessages; // llstartup
215extern std::string gChannelName;
216extern BOOL gUseAudio; // llstartup
217
218extern LLString gCmdLineFirstName; // llstartup
219extern LLString gCmdLineLastName;
220extern LLString gCmdLinePassword;
221
222extern BOOL gAutoLogin; // llstartup
223extern const char* DEFAULT_SETTINGS_FILE; // llstartup
224
225extern BOOL gRequestInventoryLibrary; // llstartup
226extern BOOL gGodConnect; // llstartup
227
228extern BOOL gAcceptTOS; 229extern BOOL gAcceptTOS;
229extern BOOL gAcceptCriticalMessage; 230extern BOOL gAcceptCriticalMessage;
230 231
231extern LLUUID gViewerDigest; // MD5 digest of the viewer's executable file.
232 232
233typedef enum 233typedef enum
234{ 234{
@@ -271,7 +271,6 @@ extern LLUUID gInventoryLibraryOwner;
271extern LLUUID gInventoryLibraryRoot; 271extern LLUUID gInventoryLibraryRoot;
272 272
273extern BOOL gDisconnected; 273extern BOOL gDisconnected;
274extern BOOL gDisableVoice;
275 274
276// Map scale in pixels per region 275// Map scale in pixels per region
277extern F32 gMapScale; 276extern F32 gMapScale;
@@ -281,9 +280,6 @@ extern LLFrameTimer gRestoreGLTimer;
281extern BOOL gRestoreGL; 280extern BOOL gRestoreGL;
282extern BOOL gUseWireframe; 281extern BOOL gUseWireframe;
283 282
284extern F32 gMouseSensitivity;
285extern BOOL gInvertMouse;
286
287// VFS globals - gVFS is for general use 283// VFS globals - gVFS is for general use
288// gStaticVFS is read-only and is shipped w/ the viewer 284// gStaticVFS is read-only and is shipped w/ the viewer
289// it has pre-cache data like the UI .TGAs 285// it has pre-cache data like the UI .TGAs
@@ -291,9 +287,6 @@ extern LLVFS *gStaticVFS;
291 287
292extern LLMemoryInfo gSysMemory; 288extern LLMemoryInfo gSysMemory;
293 289
294extern bool gPreloadImages;
295extern bool gPreloadSounds;
296
297extern LLString gLastVersionChannel; 290extern LLString gLastVersionChannel;
298 291
299extern LLVector3 gWindVec; 292extern LLVector3 gWindVec;
@@ -304,10 +297,7 @@ extern BOOL gPrintMessagesThisFrame;
304extern LLUUID gSunTextureID; 297extern LLUUID gSunTextureID;
305extern LLUUID gMoonTextureID; 298extern LLUUID gMoonTextureID;
306 299
307extern BOOL gUseConsole;
308
309extern BOOL gRandomizeFramerate; 300extern BOOL gRandomizeFramerate;
310extern BOOL gPeriodicSlowFrame; 301extern BOOL gPeriodicSlowFrame;
311 302
312extern BOOL gQAMode;
313#endif // LL_LLAPPVIEWER_H 303#endif // LL_LLAPPVIEWER_H
diff --git a/linden/indra/newview/llappviewerlinux.cpp b/linden/indra/newview/llappviewerlinux.cpp
index 659fbf49..084df9b 100644
--- a/linden/indra/newview/llappviewerlinux.cpp
+++ b/linden/indra/newview/llappviewerlinux.cpp
@@ -31,28 +31,50 @@
31 31
32#include "llviewerprecompiledheaders.h" 32#include "llviewerprecompiledheaders.h"
33 33
34#include "llmemtype.h"
35#include "llappviewerlinux.h" 34#include "llappviewerlinux.h"
36 35
36#include "llcommandlineparser.h"
37
38#include "llmemtype.h"
37#include "llviewernetwork.h" 39#include "llviewernetwork.h"
38#include "llmd5.h" 40#include "llmd5.h"
39 41
40 #if LL_LINUX 42#include <exception>
41 # include <dlfcn.h> // RTLD_LAZY 43
42 # include <execinfo.h> // backtrace - glibc only 44#if LL_LINUX
43 # ifndef LL_ELFBIN 45# include <dlfcn.h> // RTLD_LAZY
44 #define LL_ELFBIN 1 46# include <execinfo.h> // backtrace - glibc only
45 # endif // LL_ELFBIN 47# ifndef LL_ELFBIN
46 # if LL_ELFBIN 48# define LL_ELFBIN 1
47 # include <cxxabi.h> // for symbol demangling 49# endif // LL_ELFBIN
48 # include "ELFIO.h" // for better backtraces 50# if LL_ELFBIN
49 # endif // LL_ELFBIN 51# include <cxxabi.h> // for symbol demangling
50 #elif LL_SOLARIS 52# include "ELFIO.h" // for better backtraces
51 # include <sys/types.h> 53# endif // LL_ELFBIN
52 # include <unistd.h> 54#elif LL_SOLARIS
53 # include <fcntl.h> 55# include <sys/types.h>
54 # include <ucontext.h> 56# include <unistd.h>
55 #endif 57# include <fcntl.h>
58# include <ucontext.h>
59#endif
60
61namespace
62{
63 int gArgC = 0;
64 char **gArgV = NULL;
65 void (*gOldTerminateHandler)() = NULL;
66}
67
68static void exceptionTerminateHandler()
69{
70 // reinstall default terminate() handler in case we re-terminate.
71 if (gOldTerminateHandler) std::set_terminate(gOldTerminateHandler);
72 // treat this like a regular viewer crash, with nice stacktrace etc.
73 LLAppViewer::handleSyncViewerCrash();
74 LLAppViewer::handleViewerCrash();
75 // we've probably been killed-off before now, but...
76 gOldTerminateHandler(); // call old terminate() handler
77}
56 78
57int main( int argc, char **argv ) 79int main( int argc, char **argv )
58{ 80{
@@ -62,18 +84,18 @@ int main( int argc, char **argv )
62 asm ("ta\t6"); // NOTE: Make sure memory alignment is enforced on SPARC 84 asm ("ta\t6"); // NOTE: Make sure memory alignment is enforced on SPARC
63#endif 85#endif
64 86
87 gArgC = argc;
88 gArgV = argv;
89
65 LLAppViewer* viewer_app_ptr = new LLAppViewerLinux(); 90 LLAppViewer* viewer_app_ptr = new LLAppViewerLinux();
66 91
92 // install unexpected exception handler
93 gOldTerminateHandler = std::set_terminate(exceptionTerminateHandler);
94 // install crash handlers
67 viewer_app_ptr->setErrorHandler(LLAppViewer::handleViewerCrash); 95 viewer_app_ptr->setErrorHandler(LLAppViewer::handleViewerCrash);
96 viewer_app_ptr->setSyncErrorHandler(LLAppViewer::handleSyncViewerCrash);
68 97
69 bool ok = viewer_app_ptr->tempStoreCommandOptions(argc, argv); 98 bool ok = viewer_app_ptr->init();
70 if(!ok)
71 {
72 llwarns << "Unable to parse command line." << llendl;
73 return -1;
74 }
75
76 ok = viewer_app_ptr->init();
77 if(!ok) 99 if(!ok)
78 { 100 {
79 llwarns << "Application init failed." << llendl; 101 llwarns << "Application init failed." << llendl;
@@ -297,19 +319,22 @@ bool LLAppViewerLinux::init()
297 return LLAppViewer::init(); 319 return LLAppViewer::init();
298} 320}
299 321
300void LLAppViewerLinux::handleCrashReporting() 322void LLAppViewerLinux::handleSyncCrashTrace()
301{ 323{
324 // This backtrace writes into stack_trace.log
325# if LL_ELFBIN
326 do_elfio_glibc_backtrace(); // more useful backtrace
327# else
328 do_basic_glibc_backtrace(); // only slightly useful backtrace
329# endif // LL_ELFBIN
330}
302 331
332void LLAppViewerLinux::handleCrashReporting()
333{
303 // Always generate the report, have the logger do the asking, and 334 // Always generate the report, have the logger do the asking, and
304 // don't wait for the logger before exiting (-> total cleanup). 335 // don't wait for the logger before exiting (-> total cleanup).
305 if (CRASH_BEHAVIOR_NEVER_SEND != LLAppViewer::instance()->getCrashBehavior()) 336 if (CRASH_BEHAVIOR_NEVER_SEND != LLAppViewer::instance()->getCrashBehavior())
306 { 337 {
307 // This backtrace writes into stack_trace.log
308# if LL_ELFBIN
309 do_elfio_glibc_backtrace(); // more useful backtrace
310# else
311 do_basic_glibc_backtrace(); // only slightly useful backtrace
312# endif // LL_ELFBIN
313 // launch the actual crash logger 338 // launch the actual crash logger
314 char* ask_dialog = "-dialog"; 339 char* ask_dialog = "-dialog";
315 if (CRASH_BEHAVIOR_ASK != LLAppViewer::instance()->getCrashBehavior()) 340 if (CRASH_BEHAVIOR_ASK != LLAppViewer::instance()->getCrashBehavior())
@@ -321,10 +346,11 @@ void LLAppViewerLinux::handleCrashReporting()
321 {(char*)cmd.c_str(), 346 {(char*)cmd.c_str(),
322 ask_dialog, 347 ask_dialog,
323 (char*)"-user", 348 (char*)"-user",
324 (char*)gGridName, 349 (char*)gGridName.c_str(),
325 (char*)"-name", 350 (char*)"-name",
326 (char*)LLAppViewer::instance()->getSecondLifeTitle().c_str(), 351 (char*)LLAppViewer::instance()->getSecondLifeTitle().c_str(),
327 NULL}; 352 NULL};
353 fflush(NULL);
328 pid_t pid = fork(); 354 pid_t pid = fork();
329 if (pid == 0) 355 if (pid == 0)
330 { // child 356 { // child
@@ -348,9 +374,10 @@ void LLAppViewerLinux::handleCrashReporting()
348 } 374 }
349 } 375 }
350 } 376 }
351 // Sometimes signals don't seem to quit the viewer. 377 // Sometimes signals don't seem to quit the viewer. Also, we may
378 // have been called explicitly instead of from a signal handler.
352 // Make sure we exit so as to not totally confuse the user. 379 // Make sure we exit so as to not totally confuse the user.
353 exit(1); 380 _exit(1); // avoid atexit(), else we may re-crash in dtors.
354} 381}
355 382
356bool LLAppViewerLinux::beingDebugged() 383bool LLAppViewerLinux::beingDebugged()
@@ -403,6 +430,12 @@ bool LLAppViewerLinux::initLogging()
403 return LLAppViewer::initLogging(); 430 return LLAppViewer::initLogging();
404} 431}
405 432
433bool LLAppViewerLinux::initParseCommandLine(LLCommandLineParser& clp)
434{
435 clp.parseCommandLine(gArgC, gArgV);
436 return true;
437}
438
406std::string LLAppViewerLinux::generateSerialNumber() 439std::string LLAppViewerLinux::generateSerialNumber()
407{ 440{
408 char serial_md5[MD5HEX_STR_SIZE]; 441 char serial_md5[MD5HEX_STR_SIZE];
diff --git a/linden/indra/newview/llappviewerlinux.h b/linden/indra/newview/llappviewerlinux.h
index 9347f20..a180b4d 100644
--- a/linden/indra/newview/llappviewerlinux.h
+++ b/linden/indra/newview/llappviewerlinux.h
@@ -36,6 +36,8 @@
36#include "llappviewer.h" 36#include "llappviewer.h"
37#endif 37#endif
38 38
39class LLCommandLineParser;
40
39class LLAppViewerLinux : public LLAppViewer 41class LLAppViewerLinux : public LLAppViewer
40{ 42{
41public: 43public:
@@ -52,8 +54,10 @@ protected:
52 virtual bool beingDebugged(); 54 virtual bool beingDebugged();
53 55
54 virtual void handleCrashReporting(); 56 virtual void handleCrashReporting();
57 virtual void handleSyncCrashTrace();
55 58
56 virtual bool initLogging(); 59 virtual bool initLogging();
60 virtual bool initParseCommandLine(LLCommandLineParser& clp);
57}; 61};
58 62
59#endif // LL_LLAPPVIEWERLINUX_H 63#endif // LL_LLAPPVIEWERLINUX_H
diff --git a/linden/indra/newview/llappviewermacosx.cpp b/linden/indra/newview/llappviewermacosx.cpp
index e277425..c128634 100644
--- a/linden/indra/newview/llappviewermacosx.cpp
+++ b/linden/indra/newview/llappviewermacosx.cpp
@@ -36,15 +36,25 @@
36#endif 36#endif
37 37
38#include "llappviewermacosx.h" 38#include "llappviewermacosx.h"
39#include "llcommandlineparser.h"
40
39#include "llmemtype.h" 41#include "llmemtype.h"
40 42
41#include "llviewernetwork.h" 43#include "llviewernetwork.h"
44#include "llviewercontrol.h"
42#include "llmd5.h" 45#include "llmd5.h"
43#include "llurlsimstring.h" 46#include "llurlsimstring.h"
44#include "llfloaterworldmap.h" 47#include "llfloaterworldmap.h"
45#include "llurldispatcher.h" 48#include "llurldispatcher.h"
46#include <Carbon/Carbon.h> 49#include <Carbon/Carbon.h>
47 50
51namespace
52{
53 // The command line args stored.
54 // They are not used immediately by the app.
55 int gArgC;
56 char** gArgV;
57}
48 58
49int main( int argc, char **argv ) 59int main( int argc, char **argv )
50{ 60{
@@ -61,14 +71,11 @@ int main( int argc, char **argv )
61 71
62 viewer_app_ptr->setErrorHandler(LLAppViewer::handleViewerCrash); 72 viewer_app_ptr->setErrorHandler(LLAppViewer::handleViewerCrash);
63 73
64 bool ok = viewer_app_ptr->tempStoreCommandOptions(argc, argv); 74 // Store off the command line args for use later.
65 if(!ok) 75 gArgC = argc;
66 { 76 gArgV = argv;
67 llwarns << "Unable to parse command line." << llendl; 77
68 return -1; 78 bool ok = viewer_app_ptr->init();
69 }
70
71 ok = viewer_app_ptr->init();
72 if(!ok) 79 if(!ok)
73 { 80 {
74 llwarns << "Application init failed." << llendl; 81 llwarns << "Application init failed." << llendl;
@@ -108,6 +115,84 @@ bool LLAppViewerMacOSX::init()
108 return LLAppViewer::init(); 115 return LLAppViewer::init();
109} 116}
110 117
118// MacOSX may add and addition command line arguement for the process serial number.
119// The option takes a form like '-psn_0_12345'. The following method should be able to recognize
120// and either ignore or return a pair of values for the option.
121// look for this method to be added to the parser in parseAndStoreResults.
122std::pair<std::string, std::string> parse_psn(const std::string& s)
123{
124 if (s.find("-psn_") == 0)
125 {
126 // *FIX:Mani Not sure that the value makes sense.
127 // fix it once the actual -psn_XXX syntax is known.
128 return std::make_pair("psn", s.substr(5));
129 }
130 else
131 {
132 return std::make_pair(std::string(), std::string());
133 }
134}
135
136bool LLAppViewerMacOSX::initParseCommandLine(LLCommandLineParser& clp)
137{
138 // The next two lines add the support for parsing the mac -psn_XXX arg.
139 clp.addOptionDesc("psn", NULL, 1, "MacOSX process serial number");
140 clp.setCustomParser(parse_psn);
141
142 // First parse the command line, not often used on the mac.
143 if(clp.parseCommandLine(gArgC, gArgV) == false)
144 {
145 return false;
146 }
147
148 // Now read in the args from arguments txt.
149 // Succesive calls to clp.parse... will NOT override earlier
150 // options.
151 const char* filename = "arguments.txt";
152 llifstream ifs(filename, llifstream::binary);
153 if (!ifs.is_open())
154 {
155 llwarns << "Unable to open file" << filename << llendl;
156 return false;
157 }
158
159 if(clp.parseCommandLineFile(ifs) == false)
160 {
161 return false;
162 }
163
164 // Get the user's preferred language string based on the Mac OS localization mechanism.
165 // To add a new localization:
166 // go to the "Resources" section of the project
167 // get info on "language.txt"
168 // in the "General" tab, click the "Add Localization" button
169 // create a new localization for the language you're adding
170 // set the contents of the new localization of the file to the string corresponding to our localization
171 // (i.e. "en-us", "ja", etc. Use the existing ones as a guide.)
172 CFURLRef url = CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("language"), CFSTR("txt"), NULL);
173 char path[MAX_PATH];
174 if(CFURLGetFileSystemRepresentation(url, false, (UInt8 *)path, sizeof(path)))
175 {
176 LLString lang;
177 if(_read_file_into_string(lang, path)) /* Flawfinder: ignore*/
178 {
179 LLControlVariable* c = gSavedSettings.getControl("SystemLanguage");
180 if(c)
181 {
182 c->setValue(lang, false);
183 }
184 }
185 }
186 CFRelease(url);
187
188 return true;
189}
190
191void LLAppViewerMacOSX::handleSyncCrashTrace()
192{
193 // do nothing
194}
195
111void LLAppViewerMacOSX::handleCrashReporting() 196void LLAppViewerMacOSX::handleCrashReporting()
112{ 197{
113 // Macintosh 198 // Macintosh
diff --git a/linden/indra/newview/llappviewermacosx.h b/linden/indra/newview/llappviewermacosx.h
index 9f0b723..0d8c460 100644
--- a/linden/indra/newview/llappviewermacosx.h
+++ b/linden/indra/newview/llappviewermacosx.h
@@ -50,7 +50,10 @@ public:
50 50
51protected: 51protected:
52 virtual void handleCrashReporting(); 52 virtual void handleCrashReporting();
53 virtual void handleSyncCrashTrace();
54
53 std::string generateSerialNumber(); 55 std::string generateSerialNumber();
56 virtual bool initParseCommandLine(LLCommandLineParser& clp);
54}; 57};
55 58
56#endif // LL_LLAPPVIEWERMACOSX_H 59#endif // LL_LLAPPVIEWERMACOSX_H
diff --git a/linden/indra/newview/llappviewerwin32.cpp b/linden/indra/newview/llappviewerwin32.cpp
index b665cb4..a2d89a3 100644
--- a/linden/indra/newview/llappviewerwin32.cpp
+++ b/linden/indra/newview/llappviewerwin32.cpp
@@ -55,41 +55,13 @@
55#include "llviewernetwork.h" 55#include "llviewernetwork.h"
56#include "llmd5.h" 56#include "llmd5.h"
57 57
58void fill_args(int& argc, char** argv, const S32 max_args, LPSTR cmd_line) 58#include "llcommandlineparser.h"
59{
60 char *token = NULL;
61 if( cmd_line[0] == '\"' )
62 {
63 // Exe name is enclosed in quotes
64 token = strtok( cmd_line, "\"" );
65 argv[argc++] = token;
66 token = strtok( NULL, " \t," );
67 }
68 else
69 {
70 // Exe name is not enclosed in quotes
71 token = strtok( cmd_line, " \t," );
72 }
73 59
74 while( (token != NULL) && (argc < max_args) )
75 {
76 argv[argc++] = token;
77 /* Get next token: */
78 if (*(token + strlen(token) + 1) == '\"') /* Flawfinder: ignore*/
79 {
80 token = strtok( NULL, "\"");
81 }
82 else
83 {
84 token = strtok( NULL, " \t," );
85 }
86 }
87}
88
89// *NOTE:Mani - this code is stolen from LLApp, where its never actually used.
90LONG WINAPI viewer_windows_exception_handler(struct _EXCEPTION_POINTERS *exception_infop) 60LONG WINAPI viewer_windows_exception_handler(struct _EXCEPTION_POINTERS *exception_infop)
91{ 61{
92 // Translate the signals/exceptions into cross-platform stuff 62 // *NOTE:Mani - this code is stolen from LLApp, where its never actually used.
63
64 // Translate the signals/exceptions into cross-platform stuff
93 // Windows implementation 65 // Windows implementation
94 llinfos << "Entering Windows Exception Handler..." << llendl; 66 llinfos << "Entering Windows Exception Handler..." << llendl;
95 67
@@ -144,21 +116,7 @@ int APIENTRY WINMAIN(HINSTANCE hInstance,
144 // *FIX: global 116 // *FIX: global
145 gIconResource = MAKEINTRESOURCE(IDI_LL_ICON); 117 gIconResource = MAKEINTRESOURCE(IDI_LL_ICON);
146 118
147 // In Win32, we need to generate argc and argv ourselves... 119 LLAppViewerWin32* viewer_app_ptr = new LLAppViewerWin32(lpCmdLine);
148 // Note: GetCommandLine() returns a potentially return a LPTSTR
149 // which can resolve to a LPWSTR (unicode string).
150 // (That's why it's different from lpCmdLine which is a LPSTR.)
151 // We don't currently do unicode, so call the non-unicode version
152 // directly.
153 LPSTR cmd_line_including_exe_name = GetCommandLineA();
154
155 const S32 MAX_ARGS = 100;
156 int argc = 0;
157 char* argv[MAX_ARGS]; /* Flawfinder: ignore */
158
159 fill_args(argc, argv, MAX_ARGS, cmd_line_including_exe_name);
160
161 LLAppViewerWin32* viewer_app_ptr = new LLAppViewerWin32();
162 120
163 // *FIX:Mani This method is poorly named, since the exception 121 // *FIX:Mani This method is poorly named, since the exception
164 // is now handled by LLApp. 122 // is now handled by LLApp.
@@ -180,13 +138,6 @@ int APIENTRY WINMAIN(HINSTANCE hInstance,
180 138
181 viewer_app_ptr->setErrorHandler(LLAppViewer::handleViewerCrash); 139 viewer_app_ptr->setErrorHandler(LLAppViewer::handleViewerCrash);
182 140
183 ok = viewer_app_ptr->tempStoreCommandOptions(argc, argv);
184 if(!ok)
185 {
186 llwarns << "Unable to parse command line." << llendl;
187 return -1;
188 }
189
190 ok = viewer_app_ptr->init(); 141 ok = viewer_app_ptr->init();
191 if(!ok) 142 if(!ok)
192 { 143 {
@@ -308,7 +259,8 @@ void create_console()
308 setvbuf( stderr, NULL, _IONBF, 0 ); 259 setvbuf( stderr, NULL, _IONBF, 0 );
309} 260}
310 261
311LLAppViewerWin32::LLAppViewerWin32() 262LLAppViewerWin32::LLAppViewerWin32(const char* cmd_line) :
263 mCmdLine(cmd_line)
312{ 264{
313} 265}
314 266
@@ -339,15 +291,11 @@ bool LLAppViewerWin32::cleanup()
339 return result; 291 return result;
340} 292}
341 293
342bool LLAppViewerWin32::initWindow() 294void LLAppViewerWin32::initConsole()
343{ 295{
344 // pop up debug console if necessary 296 // pop up debug console
345 if (gUseConsole && gSavedSettings.getBOOL("ShowConsoleWindow")) 297 create_console();
346 { 298 return LLAppViewer::initConsole();
347 create_console();
348 }
349
350 return LLAppViewer::initWindow();
351} 299}
352 300
353void write_debug_dx(const char* str) 301void write_debug_dx(const char* str)
@@ -368,10 +316,14 @@ bool LLAppViewerWin32::initHardwareTest()
368 // Do driver verification and initialization based on DirectX 316 // Do driver verification and initialization based on DirectX
369 // hardware polling and driver versions 317 // hardware polling and driver versions
370 // 318 //
371 if (gProbeHardware) 319 if (FALSE == gSavedSettings.getBOOL("NoHardwareProbe"))
372 { 320 {
373 BOOL vram_only = !gSavedSettings.getBOOL("ProbeHardwareOnStartup"); 321 BOOL vram_only = !gSavedSettings.getBOOL("ProbeHardwareOnStartup");
374 322
323 // per DEV-11631 - disable hardware probing for everything
324 // but vram.
325 vram_only = TRUE;
326
375 LLSplashScreen::update("Detecting hardware..."); 327 LLSplashScreen::update("Detecting hardware...");
376 328
377 llinfos << "Attempting to poll DirectX for hardware info" << llendl; 329 llinfos << "Attempting to poll DirectX for hardware info" << llendl;
@@ -431,6 +383,16 @@ bool LLAppViewerWin32::initHardwareTest()
431 return true; 383 return true;
432} 384}
433 385
386bool LLAppViewerWin32::initParseCommandLine(LLCommandLineParser& clp)
387{
388 return clp.parseCommandLineString(mCmdLine);
389}
390
391void LLAppViewerWin32::handleSyncCrashTrace()
392{
393 // do nothing
394}
395
434void LLAppViewerWin32::handleCrashReporting() 396void LLAppViewerWin32::handleCrashReporting()
435{ 397{
436 // Windows only behaivor. Spawn win crash reporter. 398 // Windows only behaivor. Spawn win crash reporter.
@@ -486,4 +448,4 @@ std::string LLAppViewerWin32::generateSerialNumber()
486 llwarns << "GetVolumeInformation failed" << llendl; 448 llwarns << "GetVolumeInformation failed" << llendl;
487 } 449 }
488 return serial_md5; 450 return serial_md5;
489} \ No newline at end of file 451}
diff --git a/linden/indra/newview/llappviewerwin32.h b/linden/indra/newview/llappviewerwin32.h
index b015cc9..fe16ec4 100644
--- a/linden/indra/newview/llappviewerwin32.h
+++ b/linden/indra/newview/llappviewerwin32.h
@@ -39,7 +39,7 @@
39class LLAppViewerWin32 : public LLAppViewer 39class LLAppViewerWin32 : public LLAppViewer
40{ 40{
41public: 41public:
42 LLAppViewerWin32(); 42 LLAppViewerWin32(const char* cmd_line);
43 virtual ~LLAppViewerWin32(); 43 virtual ~LLAppViewerWin32();
44 44
45 // 45 //
@@ -49,15 +49,19 @@ public:
49 virtual bool cleanup(); 49 virtual bool cleanup();
50 50
51protected: 51protected:
52 virtual bool initWindow(); // Initialize the viewer's window. 52 virtual void initConsole(); // Initialize OS level debugging console.
53 virtual bool initHardwareTest(); // Win32 uses DX9 to test hardware. 53 virtual bool initHardwareTest(); // Win32 uses DX9 to test hardware.
54 virtual bool initParseCommandLine(LLCommandLineParser& clp);
55
54 virtual void handleCrashReporting(); 56 virtual void handleCrashReporting();
57 virtual void handleSyncCrashTrace();
55 58
56 std::string generateSerialNumber(); 59 std::string generateSerialNumber();
57 60
58private: 61private:
59 void disableWinErrorReporting(); 62 void disableWinErrorReporting();
60 63
64 std::string mCmdLine;
61}; 65};
62 66
63#endif // LL_LLAPPVIEWERWIN32_H 67#endif // LL_LLAPPVIEWERWIN32_H
diff --git a/linden/indra/newview/llassetuploadresponders.cpp b/linden/indra/newview/llassetuploadresponders.cpp
index b024fc2..2691f71 100644
--- a/linden/indra/newview/llassetuploadresponders.cpp
+++ b/linden/indra/newview/llassetuploadresponders.cpp
@@ -159,7 +159,7 @@ void LLAssetUploadResponder::uploadFailure(const LLSD& content)
159 // deal with L$ errors 159 // deal with L$ errors
160 if (reason == "insufficient funds") 160 if (reason == "insufficient funds")
161 { 161 {
162 LLFloaterBuyCurrency::buyCurrency("Uploading costs", gGlobalEconomy->getPriceUpload()); 162 LLFloaterBuyCurrency::buyCurrency("Uploading costs", LLGlobalEconomy::Singleton::getInstance()->getPriceUpload());
163 } 163 }
164 else 164 else
165 { 165 {
@@ -209,7 +209,7 @@ void LLNewAgentInventoryResponder::uploadComplete(const LLSD& content)
209 gAgent.sendReliableMessage(); 209 gAgent.sendReliableMessage();
210 210
211 LLString::format_map_t args; 211 LLString::format_map_t args;
212 args["[AMOUNT]"] = llformat("%d",gGlobalEconomy->getPriceUpload()); 212 args["[AMOUNT]"] = llformat("%d",LLGlobalEconomy::Singleton::getInstance()->getPriceUpload());
213 LLNotifyBox::showXml("UploadPayment", args); 213 LLNotifyBox::showXml("UploadPayment", args);
214 } 214 }
215 215
diff --git a/linden/indra/newview/llaudiosourcevo.cpp b/linden/indra/newview/llaudiosourcevo.cpp
index ae8ce5d..e668078 100644
--- a/linden/indra/newview/llaudiosourcevo.cpp
+++ b/linden/indra/newview/llaudiosourcevo.cpp
@@ -71,51 +71,49 @@ void LLAudioSourceVO::updateGain()
71 } 71 }
72 72
73 BOOL mute = FALSE; 73 BOOL mute = FALSE;
74 if (gParcelMgr) 74 LLVector3d pos_global;
75 {
76 LLVector3d pos_global;
77 75
78 if (mObjectp->isAttachment()) 76 if (mObjectp->isAttachment())
77 {
78 LLViewerObject* parent = mObjectp;
79 while (parent && !parent->isAvatar())
79 { 80 {
80 LLViewerObject* parent = mObjectp; 81 parent = (LLViewerObject*)parent->getParent();
81 while (parent
82 && !parent->isAvatar())
83 {
84 parent = (LLViewerObject*)parent->getParent();
85 }
86 if (parent)
87 pos_global = parent->getPositionGlobal();
88 } 82 }
89 83 if (parent)
90 else
91 pos_global = mObjectp->getPositionGlobal();
92
93 if (!gParcelMgr->canHearSound(pos_global))
94 { 84 {
95 mute = TRUE; 85 pos_global = parent->getPositionGlobal();
96 } 86 }
97 } 87 }
88 else
89 {
90 pos_global = mObjectp->getPositionGlobal();
91 }
92
93 if (!LLViewerParcelMgr::getInstance()->canHearSound(pos_global))
94 {
95 mute = TRUE;
96 }
98 97
99 if (!mute && gMuteListp) 98 if (!mute)
100 { 99 {
101 if (gMuteListp->isMuted(mObjectp->getID())) 100 if (LLMuteList::getInstance()->isMuted(mObjectp->getID()))
102 { 101 {
103 mute = TRUE; 102 mute = TRUE;
104 } 103 }
105 else if (gMuteListp->isMuted(mOwnerID, LLMute::flagObjectSounds)) 104 else if (LLMuteList::getInstance()->isMuted(mOwnerID, LLMute::flagObjectSounds))
106 { 105 {
107 mute = TRUE; 106 mute = TRUE;
108 } 107 }
109 else if (mObjectp->isAttachment()) 108 else if (mObjectp->isAttachment())
110 { 109 {
111 LLViewerObject* parent = mObjectp; 110 LLViewerObject* parent = mObjectp;
112 while (parent 111 while (parent && !parent->isAvatar())
113 && !parent->isAvatar())
114 { 112 {
115 parent = (LLViewerObject*)parent->getParent(); 113 parent = (LLViewerObject*)parent->getParent();
116 } 114 }
117 if (parent 115 if (parent
118 && gMuteListp->isMuted(parent->getID())) 116 && LLMuteList::getInstance()->isMuted(parent->getID()))
119 { 117 {
120 mute = TRUE; 118 mute = TRUE;
121 } 119 }
diff --git a/linden/indra/newview/llcallingcard.cpp b/linden/indra/newview/llcallingcard.cpp
index 86e0bfb..3a50cea 100644
--- a/linden/indra/newview/llcallingcard.cpp
+++ b/linden/indra/newview/llcallingcard.cpp
@@ -60,6 +60,8 @@
60#include "llviewerobjectlist.h" 60#include "llviewerobjectlist.h"
61#include "llviewerwindow.h" 61#include "llviewerwindow.h"
62#include "llvoavatar.h" 62#include "llvoavatar.h"
63#include "llimview.h"
64#include "llimpanel.h"
63 65
64///---------------------------------------------------------------------------- 66///----------------------------------------------------------------------------
65/// Local function declarations, constants, enums, and typedefs 67/// Local function declarations, constants, enums, and typedefs
@@ -671,7 +673,18 @@ void LLAvatarTracker::processNotify(LLMessageSystem* msg, bool online)
671 } 673 }
672 if(notify) 674 if(notify)
673 { 675 {
676 // Popup a notify box with online status of this agent
674 LLNotifyBox::showXml(online ? "FriendOnline" : "FriendOffline", args); 677 LLNotifyBox::showXml(online ? "FriendOnline" : "FriendOffline", args);
678
679 // If there's an open IM session with this agent, send a notification there too.
680 LLUUID session_id = LLIMMgr::computeSessionID(IM_NOTHING_SPECIAL, agent_id);
681 LLFloaterIMPanel *floater = gIMMgr->findFloaterBySession(session_id);
682 if (floater)
683 {
684 LLUIString notifyMsg = LLNotifyBox::getTemplateMessage((online ? "FriendOnline" : "FriendOffline"),args);
685 if (!notifyMsg.empty())
686 floater->addHistoryLine(notifyMsg,gSavedSettings.getColor4("SystemChatColor"));
687 }
675 } 688 }
676 689
677 mModifyMask |= LLFriendObserver::ONLINE; 690 mModifyMask |= LLFriendObserver::ONLINE;
diff --git a/linden/indra/newview/llcameraview.cpp b/linden/indra/newview/llcameraview.cpp
deleted file mode 100644
index 80e64f3..0000000
--- a/linden/indra/newview/llcameraview.cpp
+++ /dev/null
@@ -1,259 +0,0 @@
1/**
2 * @file llcameraview.cpp
3 * @brief Container for movement buttons like forward, left, fly
4 *
5 * $LicenseInfo:firstyear=2001&license=viewergpl$
6 *
7 * Copyright (c) 2001-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 "llcameraview.h"
35#include "llvieweruictrlfactory.h"
36
37// Library includes
38#include "llfontgl.h"
39
40// Viewer includes
41#include "llagent.h"
42#include "lljoystickbutton.h"
43#include "llviewercontrol.h"
44#include "llviewerwindow.h"
45#include "llappviewer.h"
46
47// Constants
48const char *CAMERA_TITLE = "";
49const F32 CAMERA_BUTTON_DELAY = 0.0f;
50
51// Globals
52LLFloaterCamera* gFloaterCamera = NULL;
53
54
55//
56// Member functions
57//
58
59LLFloaterCamera::LLFloaterCamera(const std::string& name)
60: LLFloater(name, "FloaterCameraRect", CAMERA_TITLE, FALSE, 100, 100, DRAG_ON_TOP,
61 MINIMIZE_NO)
62{
63 setIsChrome(TRUE);
64
65 S32 top = getRect().getHeight();
66 S32 bottom = 0;
67 S32 left = 16;
68
69 const S32 ROTATE_WIDTH = 64;
70 mRotate = new LLJoystickCameraRotate("cam rotate stick",
71 LLRect( left, top, left + ROTATE_WIDTH, bottom ),
72 "cam_rotate_out.tga",
73 "cam_rotate_in.tga" );
74 mRotate->setFollows(FOLLOWS_TOP | FOLLOWS_LEFT);
75 mRotate->setHeldDownDelay(CAMERA_BUTTON_DELAY);
76 mRotate->setToolTip( LLString("Rotate Camera Around Focus" )); // *TODO: Translate
77 mRotate->setSoundFlags(MOUSE_DOWN | MOUSE_UP);
78 addChild(mRotate);
79
80 left += ROTATE_WIDTH;
81
82 const S32 ZOOM_WIDTH = 16;
83 mZoom = new LLJoystickCameraZoom(
84 "zoom",
85 LLRect( left, top, left + ZOOM_WIDTH, bottom ),
86 "cam_zoom_out.tga",
87 "cam_zoom_plus_in.tga",
88 "cam_zoom_minus_in.tga");
89 mZoom->setFollows(FOLLOWS_TOP | FOLLOWS_LEFT);
90 mZoom->setHeldDownDelay(CAMERA_BUTTON_DELAY);
91 mZoom->setToolTip( LLString("Zoom Camera Towards Focus" )); // *TODO: Translate
92 mZoom->setSoundFlags(MOUSE_DOWN | MOUSE_UP);
93 addChild(mZoom);
94
95 left += ZOOM_WIDTH;
96
97 const S32 TRACK_WIDTH = 64;
98 mTrack = new LLJoystickCameraTrack("cam track stick",
99 LLRect( left, top, left + TRACK_WIDTH, bottom ),
100 "cam_tracking_out.tga",
101 "cam_tracking_in.tga");
102 mTrack->setFollows(FOLLOWS_TOP | FOLLOWS_LEFT);
103 mTrack->setHeldDownDelay(CAMERA_BUTTON_DELAY);
104 mTrack->setToolTip( LLString("Move Camera Up and Down, Left and Right" )); // *TODO: Translate
105 mTrack->setSoundFlags(MOUSE_DOWN | MOUSE_UP);
106 addChild(mTrack);
107}
108
109
110LLFloaterCamera::~LLFloaterCamera()
111{
112 // children all deleted by LLView destructor
113 gFloaterCamera = NULL;
114}
115
116// virtual
117void LLFloaterCamera::onClose(bool app_quitting)
118{
119 LLFloater::onClose(app_quitting);
120
121 if (!app_quitting)
122 {
123 gSavedSettings.setBOOL("ShowCameraControls", FALSE);
124 }
125}
126
127//
128// Static member functions
129//
130
131// static
132void LLFloaterCamera::show(void*)
133{
134 if(!gFloaterCamera)
135 {
136 gFloaterCamera = new LLFloaterCamera("camera floater");
137 }
138 gFloaterCamera->open(); /* Flawfinder: ignore */
139 gSavedSettings.setBOOL("ShowCameraControls", TRUE);
140}
141
142// static
143void LLFloaterCamera::toggle(void*)
144{
145 if (gFloaterCamera)
146 {
147 gFloaterCamera->close();
148 }
149 else
150 {
151 show(NULL);
152 }
153}
154
155// static
156BOOL LLFloaterCamera::visible(void*)
157{
158 if (gFloaterCamera)
159 {
160 return gFloaterCamera->getVisible();
161 }
162 else
163 {
164 return FALSE;
165 }
166}
167
168LLFloaterJoystick *LLFloaterJoystick::sInstance = NULL;
169
170
171LLFloaterJoystick::LLFloaterJoystick( )
172: LLFloater("Joystick floater")
173{
174 sInstance = this;
175}
176
177LLFloaterJoystick::~LLFloaterJoystick()
178{
179 sInstance = NULL;
180}
181
182void LLFloaterJoystick::draw()
183{
184 for (U32 i = 0; i < 8; i++)
185 {
186 F32 value = gViewerWindow->getWindow()->getJoystickAxis(i);
187 mAxis[i]->addValue(value*gFrameIntervalSeconds);
188
189 if (mAxisBar[i]->mMinBar > value)
190 {
191 mAxisBar[i]->mMinBar = value;
192 }
193 if (mAxisBar[i]->mMaxBar < value)
194 {
195 mAxisBar[i]->mMaxBar = value;
196 }
197 }
198
199 LLFloater::draw();
200}
201
202// static
203void LLFloaterJoystick::show(void*)
204{
205 if (sInstance)
206 {
207 sInstance->open(); /*Flawfinder: ignore*/
208 }
209 else
210 {
211 LLFloaterJoystick* floater = new LLFloaterJoystick();
212
213 gUICtrlFactory->buildFloater(floater, "floater_joystick.xml");
214 F32 range = gSavedSettings.getBOOL("FlycamAbsolute") ? 1024.f : 2.f;
215 LLUIString axis = floater->getUIString("Axis");
216 LLUIString joystick = floater->getUIString("JoystickMonitor");
217
218 LLView* child = floater->getChild<LLView>("ZoomLabel");
219 LLRect rect;
220
221 if (child)
222 {
223 LLRect r = child->getRect();
224 LLRect f = floater->getRect();
225 rect = LLRect(150, r.mTop, r.mRight, 0);
226 }
227
228 floater->mAxisStats = new LLStatView("axis values", joystick, "", rect);
229 floater->mAxisStats->setDisplayChildren(TRUE);
230
231 for (U32 i = 0; i < 8; i++)
232 {
233 axis.setArg("[NUM]", llformat("%d", i));
234 floater->mAxis[i] = new LLStat(4);
235 floater->mAxisBar[i] = floater->mAxisStats->addStat(axis, floater->mAxis[i]);
236 floater->mAxisBar[i]->mMinBar = -range;
237 floater->mAxisBar[i]->mMaxBar = range;
238 floater->mAxisBar[i]->mLabelSpacing = range * 0.5f;
239 floater->mAxisBar[i]->mTickSpacing = range * 0.25f;
240 }
241
242
243
244 floater->addChild(floater->mAxisStats);
245 floater->open(); /*Flawfinder: ignore*/
246 }
247}
248
249//static
250LLFloaterJoystick* LLFloaterJoystick::getInstance()
251{
252 return sInstance;
253}
254
255// static
256BOOL LLFloaterJoystick::visible(void*)
257{
258 return (sInstance != NULL);
259}
diff --git a/linden/indra/newview/llchatbar.cpp b/linden/indra/newview/llchatbar.cpp
index b47e468..d1834a6 100644
--- a/linden/indra/newview/llchatbar.cpp
+++ b/linden/indra/newview/llchatbar.cpp
@@ -45,6 +45,7 @@
45#include "llagent.h" 45#include "llagent.h"
46#include "llbutton.h" 46#include "llbutton.h"
47#include "llcombobox.h" 47#include "llcombobox.h"
48#include "llcommandhandler.h" // secondlife:///app/chat/ support
48#include "llviewercontrol.h" 49#include "llviewercontrol.h"
49#include "llfloaterchat.h" 50#include "llfloaterchat.h"
50#include "llgesturemgr.h" 51#include "llgesturemgr.h"
@@ -64,7 +65,7 @@
64#include "llmultigesture.h" 65#include "llmultigesture.h"
65#include "llui.h" 66#include "llui.h"
66#include "llviewermenu.h" 67#include "llviewermenu.h"
67#include "llvieweruictrlfactory.h" 68#include "lluictrlfactory.h"
68 69
69 70
70// 71//
@@ -76,6 +77,7 @@ LLChatBar *gChatBar = NULL;
76 77
77// legacy calllback glue 78// legacy calllback glue
78void toggleChatHistory(void* user_data); 79void toggleChatHistory(void* user_data);
80void send_chat_from_viewer(const std::string& utf8_out_text, EChatType type, S32 channel);
79 81
80 82
81class LLChatBarGestureObserver : public LLGestureManagerObserver 83class LLChatBarGestureObserver : public LLGestureManagerObserver
@@ -123,7 +125,7 @@ BOOL LLChatBar::postBuild()
123 childSetCommitCallback("Say", onClickSay, this); 125 childSetCommitCallback("Say", onClickSay, this);
124 126
125 // attempt to bind to an existing combo box named gesture 127 // attempt to bind to an existing combo box named gesture
126 setGestureCombo(LLUICtrlFactory::getComboBoxByName(this, "Gesture")); 128 setGestureCombo(getChild<LLComboBox>( "Gesture"));
127 129
128 LLButton * sayp = getChild<LLButton>("Say"); 130 LLButton * sayp = getChild<LLButton>("Say");
129 if(sayp) 131 if(sayp)
@@ -131,7 +133,7 @@ BOOL LLChatBar::postBuild()
131 setDefaultBtn(sayp); 133 setDefaultBtn(sayp);
132 } 134 }
133 135
134 mInputEditor = LLUICtrlFactory::getLineEditorByName(this, "Chat Editor"); 136 mInputEditor = getChild<LLLineEditor>("Chat Editor");
135 if (mInputEditor) 137 if (mInputEditor)
136 { 138 {
137 mInputEditor->setCallbackUserData(this); 139 mInputEditor->setCallbackUserData(this);
@@ -157,36 +159,34 @@ BOOL LLChatBar::postBuild()
157//----------------------------------------------------------------------- 159//-----------------------------------------------------------------------
158 160
159// virtual 161// virtual
160BOOL LLChatBar::handleKeyHere( KEY key, MASK mask, BOOL called_from_parent ) 162BOOL LLChatBar::handleKeyHere( KEY key, MASK mask )
161{ 163{
162 BOOL handled = FALSE; 164 BOOL handled = FALSE;
163 165
164 if( getVisible() && getEnabled() && !called_from_parent) 166 // ALT-RETURN is reserved for windowed/fullscreen toggle
167 if( KEY_RETURN == key )
165 { 168 {
166 // ALT-RETURN is reserved for windowed/fullscreen toggle 169 if (mask == MASK_CONTROL)
167 if( KEY_RETURN == key )
168 { 170 {
169 if (mask == MASK_CONTROL) 171 // shout
170 { 172 sendChat(CHAT_TYPE_SHOUT);
171 // shout 173 handled = TRUE;
172 sendChat(CHAT_TYPE_SHOUT);
173 handled = TRUE;
174 }
175 else if (mask == MASK_NONE)
176 {
177 // say
178 sendChat( CHAT_TYPE_NORMAL );
179 handled = TRUE;
180 }
181 } 174 }
182 // only do this in main chatbar 175 else if (mask == MASK_NONE)
183 else if ( KEY_ESCAPE == key && gChatBar == this)
184 { 176 {
185 stopChat(); 177 // say
186 178 sendChat( CHAT_TYPE_NORMAL );
187 handled = TRUE; 179 handled = TRUE;
188 } 180 }
189 } 181 }
182 // only do this in main chatbar
183 else if ( KEY_ESCAPE == key && gChatBar == this)
184 {
185 stopChat();
186
187 handled = TRUE;
188 }
189
190 return handled; 190 return handled;
191} 191}
192 192
@@ -429,10 +429,8 @@ void LLChatBar::sendChat( EChatType type )
429//----------------------------------------------------------------------- 429//-----------------------------------------------------------------------
430 430
431// static 431// static
432void LLChatBar::startChat(void* userdata) 432void LLChatBar::startChat(const char* line)
433{ 433{
434 const char* line = (const char*)userdata;
435
436 gChatBar->setVisible(TRUE); 434 gChatBar->setVisible(TRUE);
437 gChatBar->setKeyboardFocus(TRUE); 435 gChatBar->setKeyboardFocus(TRUE);
438 gSavedSettings.setBOOL("ChatVisible", TRUE); 436 gSavedSettings.setBOOL("ChatVisible", TRUE);
@@ -572,8 +570,6 @@ void LLChatBar::sendChatFromViewer(const std::string &utf8text, EChatType type,
572 570
573void LLChatBar::sendChatFromViewer(const LLWString &wtext, EChatType type, BOOL animate) 571void LLChatBar::sendChatFromViewer(const LLWString &wtext, EChatType type, BOOL animate)
574{ 572{
575 LLMessageSystem* msg = gMessageSystem;
576
577 // Look for "/20 foo" channel chats. 573 // Look for "/20 foo" channel chats.
578 S32 channel = 0; 574 S32 channel = 0;
579 LLWString out_text = stripChannelNumber(wtext, &channel); 575 LLWString out_text = stripChannelNumber(wtext, &channel);
@@ -618,6 +614,12 @@ void LLChatBar::sendChatFromViewer(const LLWString &wtext, EChatType type, BOOL
618 } 614 }
619 } 615 }
620 616
617 send_chat_from_viewer(utf8_out_text, type, channel);
618}
619
620void send_chat_from_viewer(const std::string& utf8_out_text, EChatType type, S32 channel)
621{
622 LLMessageSystem* msg = gMessageSystem;
621 msg->newMessageFast(_PREHASH_ChatFromViewer); 623 msg->newMessageFast(_PREHASH_ChatFromViewer);
622 msg->nextBlockFast(_PREHASH_AgentData); 624 msg->nextBlockFast(_PREHASH_AgentData);
623 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); 625 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
@@ -629,7 +631,7 @@ void LLChatBar::sendChatFromViewer(const LLWString &wtext, EChatType type, BOOL
629 631
630 gAgent.sendReliableMessage(); 632 gAgent.sendReliableMessage();
631 633
632 gViewerStats->incStat(LLViewerStats::ST_CHAT_COUNT); 634 LLViewerStats::getInstance()->incStat(LLViewerStats::ST_CHAT_COUNT);
633} 635}
634 636
635 637
@@ -672,3 +674,24 @@ void toggleChatHistory(void* user_data)
672{ 674{
673 LLFloaterChat::toggleInstance(LLSD()); 675 LLFloaterChat::toggleInstance(LLSD());
674} 676}
677
678
679class LLChatHandler : public LLCommandHandler
680{
681public:
682 // not allowed from outside the app
683 LLChatHandler() : LLCommandHandler("chat", false) { }
684
685 // Your code here
686 bool handle(const LLSD& tokens, const LLSD& queryMap)
687 {
688 if (tokens.size() < 2) return false;
689 S32 channel = tokens[0].asInteger();
690 std::string mesg = tokens[1].asString();
691 send_chat_from_viewer(mesg, CHAT_TYPE_NORMAL, channel);
692 return true;
693 }
694};
695
696// Creating the object registers with the dispatcher.
697LLChatHandler gChatHandler;
diff --git a/linden/indra/newview/llchatbar.h b/linden/indra/newview/llchatbar.h
index fd3b339..cfb5015 100644
--- a/linden/indra/newview/llchatbar.h
+++ b/linden/indra/newview/llchatbar.h
@@ -53,7 +53,7 @@ public:
53 ~LLChatBar(); 53 ~LLChatBar();
54 virtual BOOL postBuild(); 54 virtual BOOL postBuild();
55 55
56 virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); 56 virtual BOOL handleKeyHere(KEY key, MASK mask);
57 57
58 void refresh(); 58 void refresh();
59 void refreshGestures(); 59 void refreshGestures();
@@ -90,7 +90,7 @@ public:
90 90
91 static void onCommitGesture(LLUICtrl* ctrl, void* data); 91 static void onCommitGesture(LLUICtrl* ctrl, void* data);
92 92
93 static void startChat(void*); 93 static void startChat(const char* line);
94 static void stopChat(); 94 static void stopChat();
95 95
96protected: 96protected:
diff --git a/linden/indra/newview/llcloud.cpp b/linden/indra/newview/llcloud.cpp
index 3b8e466..92199a7 100644
--- a/linden/indra/newview/llcloud.cpp
+++ b/linden/indra/newview/llcloud.cpp
@@ -157,7 +157,7 @@ void LLCloudGroup::updatePuffOwnership()
157 } 157 }
158 158
159 //llinfos << "Cloud moving to new group" << llendl; 159 //llinfos << "Cloud moving to new group" << llendl;
160 LLCloudGroup *new_cgp = gWorldPointer->findCloudGroup(mCloudPuffs[i]); 160 LLCloudGroup *new_cgp = LLWorld::getInstance()->findCloudGroup(mCloudPuffs[i]);
161 if (!new_cgp) 161 if (!new_cgp)
162 { 162 {
163 //llinfos << "Killing puff not in group" << llendl; 163 //llinfos << "Killing puff not in group" << llendl;
diff --git a/linden/indra/newview/llcolorswatch.cpp b/linden/indra/newview/llcolorswatch.cpp
index e99b6bf..3f18d39 100644
--- a/linden/indra/newview/llcolorswatch.cpp
+++ b/linden/indra/newview/llcolorswatch.cpp
@@ -50,6 +50,8 @@
50#include "llviewerimagelist.h" 50#include "llviewerimagelist.h"
51#include "llfocusmgr.h" 51#include "llfocusmgr.h"
52 52
53static LLRegisterWidget<LLColorSwatchCtrl> r("color_swatch");
54
53LLColorSwatchCtrl::LLColorSwatchCtrl(const std::string& name, const LLRect& rect, const LLColor4& color, 55LLColorSwatchCtrl::LLColorSwatchCtrl(const std::string& name, const LLRect& rect, const LLColor4& color,
54 void (*commit_callback)(LLUICtrl* ctrl, void* userdata), 56 void (*commit_callback)(LLUICtrl* ctrl, void* userdata),
55 void* userdata ) 57 void* userdata )
@@ -74,8 +76,7 @@ LLColorSwatchCtrl::LLColorSwatchCtrl(const std::string& name, const LLRect& rect
74 mBorder = new LLViewBorder("border", border_rect, LLViewBorder::BEVEL_IN); 76 mBorder = new LLViewBorder("border", border_rect, LLViewBorder::BEVEL_IN);
75 addChild(mBorder); 77 addChild(mBorder);
76 78
77 mAlphaGradientImage = gImageList.getImageFromUUID(LLUUID(gViewerArt.getString("color_swatch_alpha.tga")), 79 mAlphaGradientImage = LLUI::getUIImage("color_swatch_alpha.tga");
78 MIPMAP_FALSE, TRUE, GL_ALPHA8, GL_ALPHA);
79} 80}
80 81
81LLColorSwatchCtrl::LLColorSwatchCtrl(const std::string& name, const LLRect& rect, const std::string& label, const LLColor4& color, 82LLColorSwatchCtrl::LLColorSwatchCtrl(const std::string& name, const LLRect& rect, const std::string& label, const LLColor4& color,
@@ -102,8 +103,7 @@ LLColorSwatchCtrl::LLColorSwatchCtrl(const std::string& name, const LLRect& rect
102 mBorder = new LLViewBorder("border", border_rect, LLViewBorder::BEVEL_IN); 103 mBorder = new LLViewBorder("border", border_rect, LLViewBorder::BEVEL_IN);
103 addChild(mBorder); 104 addChild(mBorder);
104 105
105 mAlphaGradientImage = gImageList.getImageFromUUID(LLUUID(gViewerArt.getString("color_swatch_alpha.tga")), 106 mAlphaGradientImage = LLUI::getUIImage("color_swatch_alpha.tga");
106 MIPMAP_FALSE, TRUE, GL_ALPHA8, GL_ALPHA);
107} 107}
108 108
109LLColorSwatchCtrl::~LLColorSwatchCtrl () 109LLColorSwatchCtrl::~LLColorSwatchCtrl ()
@@ -129,13 +129,13 @@ BOOL LLColorSwatchCtrl::handleHover(S32 x, S32 y, MASK mask)
129 return TRUE; 129 return TRUE;
130} 130}
131 131
132BOOL LLColorSwatchCtrl::handleUnicodeCharHere(llwchar uni_char, BOOL called_from_parent) 132BOOL LLColorSwatchCtrl::handleUnicodeCharHere(llwchar uni_char)
133{ 133{
134 if( getVisible() && getEnabled() && !called_from_parent && ' ' == uni_char ) 134 if( ' ' == uni_char )
135 { 135 {
136 showPicker(TRUE); 136 showPicker(TRUE);
137 } 137 }
138 return LLUICtrl::handleUnicodeCharHere(uni_char, called_from_parent); 138 return LLUICtrl::handleUnicodeCharHere(uni_char);
139} 139}
140 140
141// forces color of this swatch and any associated floater to the input value, if currently invalid 141// forces color of this swatch and any associated floater to the input value, if currently invalid
@@ -203,46 +203,41 @@ BOOL LLColorSwatchCtrl::handleMouseUp(S32 x, S32 y, MASK mask)
203// assumes GL state is set for 2D 203// assumes GL state is set for 2D
204void LLColorSwatchCtrl::draw() 204void LLColorSwatchCtrl::draw()
205{ 205{
206 if( getVisible() ) 206 mBorder->setKeyboardFocusHighlight(hasFocus());
207 { 207 // Draw border
208 mBorder->setKeyboardFocusHighlight(hasFocus()); 208 LLRect border( 0, getRect().getHeight(), getRect().getWidth(), BTN_HEIGHT_SMALL );
209 // Draw border 209 gl_rect_2d( border, mBorderColor, FALSE );
210 LLRect border( 0, getRect().getHeight(), getRect().getWidth(), BTN_HEIGHT_SMALL );
211 gl_rect_2d( border, mBorderColor, FALSE );
212 210
213 LLRect interior = border; 211 LLRect interior = border;
214 interior.stretch( -1 ); 212 interior.stretch( -1 );
215 213
216 // Check state 214 // Check state
217 if ( mValid ) 215 if ( mValid )
216 {
217 // Draw the color swatch
218 gl_rect_2d_checkerboard( interior );
219 gl_rect_2d(interior, mColor, TRUE);
220 LLColor4 opaque_color = mColor;
221 opaque_color.mV[VALPHA] = 1.f;
222 gGL.color4fv(opaque_color.mV);
223 if (mAlphaGradientImage.notNull())
218 { 224 {
219 // Draw the color swatch 225 gGL.pushMatrix();
220 gl_rect_2d_checkerboard( interior );
221 gl_rect_2d(interior, mColor, TRUE);
222 LLColor4 opaque_color = mColor;
223 opaque_color.mV[VALPHA] = 1.f;
224 gGL.color4fv(opaque_color.mV);
225 if (mAlphaGradientImage.notNull())
226 { 226 {
227 gGL.pushMatrix(); 227 mAlphaGradientImage->draw(interior, mColor);
228 {
229 gGL.translatef((F32)interior.mLeft, (F32)interior.mBottom, 0.f);
230 LLViewerImage::bindTexture(mAlphaGradientImage);
231 gl_rect_2d_simple_tex(interior.getWidth(), interior.getHeight());
232 }
233 gGL.popMatrix();
234 } 228 }
229 gGL.popMatrix();
235 } 230 }
236 else 231 }
237 { 232 else
238 // Draw grey and an X 233 {
239 gl_rect_2d(interior, LLColor4::grey, TRUE); 234 // Draw grey and an X
240 235 gl_rect_2d(interior, LLColor4::grey, TRUE);
241 gl_draw_x(interior, LLColor4::black);
242 }
243 236
244 LLUICtrl::draw(); 237 gl_draw_x(interior, LLColor4::black);
245 } 238 }
239
240 LLUICtrl::draw();
246} 241}
247 242
248void LLColorSwatchCtrl::setEnabled( BOOL enabled ) 243void LLColorSwatchCtrl::setEnabled( BOOL enabled )
diff --git a/linden/indra/newview/llcolorswatch.h b/linden/indra/newview/llcolorswatch.h
index 1c3a08b..5db9ea5 100644
--- a/linden/indra/newview/llcolorswatch.h
+++ b/linden/indra/newview/llcolorswatch.h
@@ -66,8 +66,7 @@ public:
66 ~LLColorSwatchCtrl (); 66 ~LLColorSwatchCtrl ();
67 67
68 virtual void setValue(const LLSD& value); 68 virtual void setValue(const LLSD& value);
69 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_COLOR_SWATCH; } 69
70 virtual LLString getWidgetTag() const { return LL_COLOR_SWATCH_CTRL_TAG; }
71 virtual LLSD getValue() const { return mColor.getValue(); } 70 virtual LLSD getValue() const { return mColor.getValue(); }
72 const LLColor4& get() { return mColor; } 71 const LLColor4& get() { return mColor; }
73 72
@@ -85,7 +84,7 @@ public:
85 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); 84 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
86 virtual BOOL handleDoubleClick(S32 x,S32 y,MASK mask); 85 virtual BOOL handleDoubleClick(S32 x,S32 y,MASK mask);
87 virtual BOOL handleHover(S32 x, S32 y, MASK mask); 86 virtual BOOL handleHover(S32 x, S32 y, MASK mask);
88 virtual BOOL handleUnicodeCharHere(llwchar uni_char, BOOL called_from_parent); 87 virtual BOOL handleUnicodeCharHere(llwchar uni_char);
89 virtual void draw(); 88 virtual void draw();
90 virtual void setEnabled( BOOL enabled ); 89 virtual void setEnabled( BOOL enabled );
91 virtual LLXMLNodePtr getXML(bool save_children = true) const; 90 virtual LLXMLNodePtr getXML(bool save_children = true) const;
@@ -104,7 +103,7 @@ protected:
104 LLUICtrlCallback mOnCancelCallback; 103 LLUICtrlCallback mOnCancelCallback;
105 LLUICtrlCallback mOnSelectCallback; 104 LLUICtrlCallback mOnSelectCallback;
106 105
107 LLPointer<LLViewerImage> mAlphaGradientImage; 106 LLPointer<LLUIImage> mAlphaGradientImage;
108}; 107};
109 108
110#endif // LL_LLBUTTON_H 109#endif // LL_LLBUTTON_H
diff --git a/linden/indra/newview/llcommandlineparser.cpp b/linden/indra/newview/llcommandlineparser.cpp
new file mode 100644
index 0000000..8123632
--- /dev/null
+++ b/linden/indra/newview/llcommandlineparser.cpp
@@ -0,0 +1,543 @@
1/**
2 * @file llcommandlineparser.cpp
3 * @brief The LLCommandLineParser 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#include "llviewerprecompiledheaders.h"
33#include "llcommandlineparser.h"
34
35// *NOTE: The boost::lexical_cast generates
36// the warning C4701(local used with out assignment) in VC7.1.
37// Disable the warning for the boost includes.
38#if _MSC_VER
39# pragma warning(push)
40# pragma warning( disable : 4701 )
41#else
42// NOTE: For the other platforms?
43#endif
44
45#include <boost/program_options.hpp>
46#include <boost/bind.hpp>
47#include<boost/tokenizer.hpp>
48
49#if _MSC_VER
50# pragma warning(pop)
51#endif
52
53#include "llsdserialize.h"
54#include <iostream>
55#include <sstream>
56
57#include "llcontrol.h"
58
59namespace po = boost::program_options;
60
61// *NTOE:MEP - Currently the boost object reside in file scope.
62// This has a couple of negatives, they are always around and
63// there can be only one instance of each.
64// The plus is that the boost-ly-ness of this implementation is
65// hidden from the rest of the world.
66// Its importatnt to realize that multiple LLCommandLineParser objects
67// will all have this single repository of option escs and parsed options.
68// This could be good or bad, and probably won't matter for most use cases.
69namespace
70{
71 po::options_description gOptionsDesc;
72 po::positional_options_description gPositionalOptions;
73 po::variables_map gVariableMap;
74
75 const LLCommandLineParser::token_vector_t gEmptyValue;
76
77 void read_file_into_string(std::string& str, const std::basic_istream < char >& file)
78 {
79 std::ostringstream oss;
80 oss << file.rdbuf();
81 str = oss.str();
82 }
83
84 bool gPastLastOption = false;
85}
86
87class LLCLPError : public std::logic_error {
88public:
89 LLCLPError(const std::string& what) : std::logic_error(what) {}
90};
91
92class LLCLPLastOption : public std::logic_error {
93public:
94 LLCLPLastOption(const std::string& what) : std::logic_error(what) {}
95};
96
97class LLCLPValue : public po::value_semantic_codecvt_helper<char>
98{
99 unsigned mMinTokens;
100 unsigned mMaxTokens;
101 bool mIsComposing;
102 typedef boost::function1<void, const LLCommandLineParser::token_vector_t&> notify_callback_t;
103 notify_callback_t mNotifyCallback;
104 bool mLastOption;
105
106public:
107 LLCLPValue() :
108 mMinTokens(0),
109 mMaxTokens(0),
110 mIsComposing(false),
111 mLastOption(false)
112 {}
113
114 virtual ~LLCLPValue() {};
115
116 void setMinTokens(unsigned c)
117 {
118 mMinTokens = c;
119 }
120
121 void setMaxTokens(unsigned c)
122 {
123 mMaxTokens = c;
124 }
125
126 void setComposing(bool c)
127 {
128 mIsComposing = c;
129 }
130
131 void setLastOption(bool c)
132 {
133 mLastOption = c;
134 }
135
136 void setNotifyCallback(notify_callback_t f)
137 {
138 mNotifyCallback = f;
139 }
140
141 // Overrides to support the value_semantic interface.
142 virtual std::string name() const
143 {
144 const std::string arg("arg");
145 const std::string args("args");
146 return (max_tokens() > 1) ? args : arg;
147 }
148
149 virtual unsigned min_tokens() const
150 {
151 return mMinTokens;
152 }
153
154 virtual unsigned max_tokens() const
155 {
156 return mMaxTokens;
157 }
158
159 virtual bool is_composing() const
160 {
161 return mIsComposing;
162 }
163
164 virtual bool apply_default(boost::any& value_store) const
165 {
166 return false; // No defaults.
167 }
168
169 virtual void notify(const boost::any& value_store) const
170 {
171 const LLCommandLineParser::token_vector_t* value =
172 boost::any_cast<const LLCommandLineParser::token_vector_t>(&value_store);
173 if(mNotifyCallback)
174 {
175 mNotifyCallback(*value);
176 }
177
178 }
179
180protected:
181 void xparse(boost::any& value_store,
182 const std::vector<std::string>& new_tokens) const
183 {
184 if(gPastLastOption)
185 {
186 throw(LLCLPLastOption("Don't parse no more!"));
187 }
188
189 // Error checks. Needed?
190 if (!value_store.empty() && !is_composing())
191 {
192 throw(LLCLPError("Non composing value with multiple occurences."));
193 }
194 if (new_tokens.size() < min_tokens() || new_tokens.size() > max_tokens())
195 {
196 throw(LLCLPError("Illegal number of tokens specified."));
197 }
198
199 if(value_store.empty())
200 {
201 value_store = boost::any(LLCommandLineParser::token_vector_t());
202 }
203 LLCommandLineParser::token_vector_t* tv =
204 boost::any_cast<LLCommandLineParser::token_vector_t>(&value_store);
205
206 for(unsigned i = 0; i < new_tokens.size() && i < mMaxTokens; ++i)
207 {
208 tv->push_back(new_tokens[i]);
209 }
210
211 if(mLastOption)
212 {
213 gPastLastOption = true;
214 }
215 }
216};
217
218//----------------------------------------------------------------------------
219// LLCommandLineParser defintions
220//----------------------------------------------------------------------------
221void LLCommandLineParser::addOptionDesc(const LLString& option_name,
222 boost::function1<void, const token_vector_t&> notify_callback,
223 unsigned int token_count,
224 const LLString& description,
225 const LLString& short_name,
226 bool composing,
227 bool positional,
228 bool last_option)
229{
230 // Compose the name for boost::po.
231 // It takes the format "long_name, short name"
232 const LLString comma(",");
233 LLString boost_option_name = option_name;
234 if(short_name != LLString::null)
235 {
236 boost_option_name += comma;
237 boost_option_name += short_name;
238 }
239
240 LLCLPValue* value_desc = new LLCLPValue();
241 value_desc->setMinTokens(token_count);
242 value_desc->setMaxTokens(token_count);
243 value_desc->setComposing(composing);
244 value_desc->setLastOption(last_option);
245
246 boost::shared_ptr<po::option_description> d(
247 new po::option_description(boost_option_name.c_str(),
248 value_desc,
249 description.c_str()));
250
251 if(!notify_callback.empty())
252 {
253 value_desc->setNotifyCallback(notify_callback);
254 }
255
256 gOptionsDesc.add(d);
257
258 if(positional)
259 {
260 gPositionalOptions.add(boost_option_name.c_str(), token_count);
261 }
262}
263
264bool LLCommandLineParser::parseAndStoreResults(po::command_line_parser& clp)
265{
266 try
267 {
268 clp.options(gOptionsDesc);
269 clp.positional(gPositionalOptions);
270 clp.style(po::command_line_style::default_style
271 | po::command_line_style::allow_long_disguise);
272 if(mExtraParser)
273 {
274 clp.extra_parser(mExtraParser);
275 }
276
277 po::basic_parsed_options<char> opts = clp.run();
278 po::store(opts, gVariableMap);
279 }
280 catch(po::error& e)
281 {
282 llwarns << "Caught Error:" << e.what() << llendl;
283 mErrorMsg = e.what();
284 return false;
285 }
286 catch(LLCLPError& e)
287 {
288 llwarns << "Caught Error:" << e.what() << llendl;
289 mErrorMsg = e.what();
290 return false;
291 }
292 catch(LLCLPLastOption&)
293 {
294 // Continue without parsing.
295 std::string msg = "Found tokens past last option. Ignoring.";
296 llwarns << msg << llendl;
297 mErrorMsg = msg;
298 // boost::po will have stored a mal-formed option.
299 // All such options will be removed below.
300 for(po::variables_map::iterator i = gVariableMap.begin(); i != gVariableMap.end();)
301 {
302 po::variables_map::iterator tempI = i++;
303 if(tempI->second.empty())
304 {
305 gVariableMap.erase(tempI);
306 }
307 }
308 }
309 return true;
310}
311
312bool LLCommandLineParser::parseCommandLine(int argc, char **argv)
313{
314 po::command_line_parser clp(argc, argv);
315 return parseAndStoreResults(clp);
316}
317
318bool LLCommandLineParser::parseCommandLineString(const std::string& str)
319{
320 // Split the string content into tokens
321 boost::escaped_list_separator<char> sep("\\", "\r\n ", "\"'");
322 boost::tokenizer< boost::escaped_list_separator<char> > tok(str, sep);
323 std::vector<std::string> tokens;
324 // std::copy(tok.begin(), tok.end(), std::back_inserter(tokens));
325 for(boost::tokenizer< boost::escaped_list_separator<char> >::iterator i = tok.begin();
326 i != tok.end();
327 ++i)
328 {
329 if(0 != i->size())
330 {
331 tokens.push_back(*i);
332 }
333 }
334
335 po::command_line_parser clp(tokens);
336 return parseAndStoreResults(clp);
337
338}
339
340bool LLCommandLineParser::parseCommandLineFile(const std::basic_istream < char >& file)
341{
342 std::string args;
343 read_file_into_string(args, file);
344
345 return parseCommandLineString(args);
346}
347
348void LLCommandLineParser::notify()
349{
350 po::notify(gVariableMap);
351}
352
353void LLCommandLineParser::printOptions() const
354{
355 for(po::variables_map::iterator i = gVariableMap.begin(); i != gVariableMap.end(); ++i)
356 {
357 std::string name = i->first;
358 token_vector_t values = i->second.as<token_vector_t>();
359 std::ostringstream oss;
360 oss << name << ": ";
361 for(token_vector_t::iterator t_itr = values.begin(); t_itr != values.end(); ++t_itr)
362 {
363 oss << t_itr->c_str() << " ";
364 }
365 llinfos << oss.str() << llendl;
366 }
367}
368
369std::ostream& LLCommandLineParser::printOptionsDesc(std::ostream& os) const
370{
371 return os << gOptionsDesc;
372}
373
374bool LLCommandLineParser::hasOption(const std::string& name) const
375{
376 return gVariableMap.count(name) > 0;
377}
378
379const LLCommandLineParser::token_vector_t& LLCommandLineParser::getOption(const std::string& name) const
380{
381 if(hasOption(name))
382 {
383 return gVariableMap[name].as<token_vector_t>();
384 }
385
386 return gEmptyValue;
387}
388
389//----------------------------------------------------------------------------
390// LLControlGroupCLP defintions
391//----------------------------------------------------------------------------
392void setControlValueCB(const LLCommandLineParser::token_vector_t& value,
393 const LLString& opt_name,
394 LLControlGroup* ctrlGroup)
395{
396 if(value.size() > 1)
397 {
398 llwarns << "Ignoring extra tokens mapped to the setting: " << opt_name << "." << llendl;
399 }
400
401 // *FIX: Do sematic conversion here.
402 // LLSD (ImplString) Is no good for doing string to type conversion for...
403 // booleans
404 // compound types
405 // ?...
406
407 LLControlVariable* ctrl = ctrlGroup->getControl(opt_name);
408 if(NULL != ctrl)
409 {
410 switch(ctrl->type())
411 {
412 case TYPE_BOOLEAN:
413 if(value.size() > 1)
414 {
415 llwarns << "Ignoring extra tokens." << llendl;
416 }
417
418 if(value.size() > 0)
419 {
420 // There's a token. check the string for true/false/1/0 etc.
421 BOOL result = false;
422 BOOL gotSet = LLString::convertToBOOL(value[0], result);
423 if(gotSet)
424 {
425 ctrl->setValue(LLSD(result), false);
426 }
427 }
428 else
429 {
430 ctrl->setValue(LLSD(true), false);
431 }
432 break;
433
434 default:
435 {
436 // For the default types, let llsd do the conversion.
437 if(value.size() > 1)
438 {
439 // Assume its an array...
440 LLSD llsdArray;
441 for(unsigned int i = 0; i < value.size(); ++i)
442 {
443 LLSD llsdValue;
444 llsdValue.assign(LLSD::String(value[i]));
445 llsdArray.set(i, llsdValue);
446 }
447
448 ctrl->setValue(llsdArray, false);
449 }
450 else if(value.size() > 0)
451 {
452 LLSD llsdValue;
453 llsdValue.assign(LLSD::String(value[0]));
454 ctrl->setValue(llsdValue, false);
455 }
456 }
457 break;
458 }
459 }
460 else
461 {
462 llwarns << "Command Line option mapping '"
463 << opt_name
464 << "' not found! Ignoring."
465 << llendl;
466 }
467}
468
469void LLControlGroupCLP::configure(const LLString& config_filename, LLControlGroup* controlGroup)
470{
471 // This method reads the llsd based config file, and uses it to set
472 // members of a control group.
473 LLSD clpConfigLLSD;
474
475 llifstream input_stream;
476 input_stream.open(config_filename.c_str(), std::ios::in | std::ios::binary);
477
478 if(input_stream.is_open())
479 {
480 LLSDSerialize::fromXML(clpConfigLLSD, input_stream);
481 for(LLSD::map_iterator option_itr = clpConfigLLSD.beginMap();
482 option_itr != clpConfigLLSD.endMap();
483 ++option_itr)
484 {
485 LLSD::String long_name = option_itr->first;
486 LLSD option_params = option_itr->second;
487
488 LLString desc("n/a");
489 if(option_params.has("desc"))
490 {
491 desc = option_params["desc"].asString();
492 }
493
494 LLString short_name = LLString::null;
495 if(option_params.has("short"))
496 {
497 short_name = option_params["short"].asString();
498 }
499
500 unsigned int token_count = 0;
501 if(option_params.has("count"))
502 {
503 token_count = option_params["count"].asInteger();
504 }
505
506 bool composing = false;
507 if(option_params.has("compose"))
508 {
509 composing = option_params["compose"].asBoolean();
510 }
511
512 bool positional = false;
513 if(option_params.has("positional"))
514 {
515 positional = option_params["positional"].asBoolean();
516 }
517
518 bool last_option = false;
519 if(option_params.has("last_option"))
520 {
521 last_option = option_params["last_option"].asBoolean();
522 }
523
524 boost::function1<void, const token_vector_t&> callback;
525 if(option_params.has("map-to") && (NULL != controlGroup))
526 {
527 LLString controlName = option_params["map-to"].asString();
528 callback = boost::bind(setControlValueCB, _1,
529 controlName, controlGroup);
530 }
531
532 this->addOptionDesc(
533 long_name,
534 callback,
535 token_count,
536 desc,
537 short_name,
538 composing,
539 positional,
540 last_option);
541 }
542 }
543}
diff --git a/linden/indra/newview/llcommandlineparser.h b/linden/indra/newview/llcommandlineparser.h
new file mode 100644
index 0000000..e281871
--- /dev/null
+++ b/linden/indra/newview/llcommandlineparser.h
@@ -0,0 +1,166 @@
1/**
2 * @file llcommandlineparser.h
3 * @brief LLCommandLineParser 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_LLCOMMANDLINEPARSER_H
33#define LL_LLCOMMANDLINEPARSER_H
34
35#include <boost/function/function1.hpp>
36
37// *NOTE:Mani The following is a forward decl of
38// boost::program_options::command_line_parser
39// "yay" c++!
40namespace boost
41{
42 namespace program_options
43 {
44 template <class charT> class basic_command_line_parser;
45 typedef basic_command_line_parser<char> command_line_parser;
46 }
47}
48
49
50/**
51 * @class LLCommandLineParser
52 * @brief Handle defining and parsing the command line.
53 */
54class LLCommandLineParser
55{
56public:
57 typedef std::vector< std::string > token_vector_t;
58
59 /**
60 * @brief Add a value-less option to the command line description.
61 * @param option_name The long name of the cmd-line option.
62 * @param description The text description of the option usage.
63 */
64 void addOptionDesc(
65 const LLString& option_name,
66 boost::function1<void, const token_vector_t&> notify_callback = 0,
67 unsigned int num_tokens = 0,
68 const LLString& description = LLString::null,
69 const LLString& short_name = LLString::null,
70 bool composing = false,
71 bool positional = false,
72 bool last_option = false);
73
74 /**
75 * @brief Parse the command line given by argc/argv.
76 */
77 bool parseCommandLine(int argc, char **argv);
78
79 /**
80 * @brief Parse the command line contained by the given file.
81 */
82 bool parseCommandLineString(const std::string& str);
83
84 /**
85 * @brief Parse the command line contained by the given file.
86 */
87 bool parseCommandLineFile(const std::basic_istream< char >& file);
88
89 /**
90 * @brief Call callbacks associated with option descriptions.
91 *
92 * Use this to handle the results of parsing.
93 */
94 void notify();
95
96 /** @brief Print a description of the configured options.
97 *
98 * Use this to print a description of options to the
99 * given ostream. Useful for displaying usage info.
100 */
101 std::ostream& printOptionsDesc(std::ostream& os) const;
102
103 /** @brief Manual option setting accessors.
104 *
105 * Use these to retrieve get the values set for an option.
106 * getOption will return an empty value if the option isn't
107 * set.
108 */
109 bool hasOption(const std::string& name) const;
110 const token_vector_t& getOption(const std::string& name) const;
111
112 /** @brief Print the list of configured options.
113 */
114 void printOptions() const;
115
116 /** @bried Get the error message, if it exists.
117 */
118 const std::string& getErrorMessage() const { return mErrorMsg; }
119
120 /** @brief Add a custom parser func to the parser.
121 *
122 * Use this method to add a custom parser for parsing values
123 * the the simple parser may not handle.
124 * it will be applied to each parameter before the
125 * default parser gets a chance.
126 * The parser_func takes an input string, and should return a
127 * name/value pair as the result.
128 */
129 typedef boost::function1<std::pair<std::string, std::string>, const std::string&> parser_func;
130 void setCustomParser(parser_func f) { mExtraParser = f; }
131
132private:
133 bool parseAndStoreResults(boost::program_options::command_line_parser& clp);
134 std::string mErrorMsg;
135 parser_func mExtraParser;
136};
137
138inline std::ostream& operator<<(std::ostream& out, const LLCommandLineParser& clp)
139{
140 return clp.printOptionsDesc(out);
141}
142
143class LLControlGroup;
144
145/**
146 * @class LLControlGroupCLP
147 * @brief Uses the CLP to configure an LLControlGroup
148 *
149 *
150 */
151class LLControlGroupCLP : public LLCommandLineParser
152{
153public:
154 /**
155 * @brief Configure the command line parser according the given config file.
156 *
157 * @param config_filename The name of the XML based LLSD config file.
158 * @param clp A reference to the command line parser object to configure.
159 *
160 * *FIX:Mani Specify config file format.
161 */
162 void configure(const LLString& config_filename,
163 LLControlGroup* controlGroup);
164};
165
166#endif // LL_LLCOMMANDLINEPARSER_H
diff --git a/linden/indra/newview/llcompilequeue.cpp b/linden/indra/newview/llcompilequeue.cpp
index 8e1ba81..aeaa189 100644
--- a/linden/indra/newview/llcompilequeue.cpp
+++ b/linden/indra/newview/llcompilequeue.cpp
@@ -56,7 +56,7 @@
56#include "lldir.h" 56#include "lldir.h"
57#include "llfloaterchat.h" 57#include "llfloaterchat.h"
58#include "llviewerstats.h" 58#include "llviewerstats.h"
59#include "llvieweruictrlfactory.h" 59#include "lluictrlfactory.h"
60 60
61///---------------------------------------------------------------------------- 61///----------------------------------------------------------------------------
62/// Local function declarations, constants, enums, and typedefs 62/// Local function declarations, constants, enums, and typedefs
@@ -106,7 +106,7 @@ LLFloaterScriptQueue::LLFloaterScriptQueue(const std::string& name,
106 DRAG_ON_TOP, MINIMIZE_YES, CLOSE_YES) 106 DRAG_ON_TOP, MINIMIZE_YES, CLOSE_YES)
107{ 107{
108 108
109 gUICtrlFactory->buildFloater(this,"floater_script_queue.xml"); 109 LLUICtrlFactory::getInstance()->buildFloater(this,"floater_script_queue.xml");
110 110
111 childSetAction("close",onCloseBtn,this); 111 childSetAction("close",onCloseBtn,this);
112 childSetEnabled("close",FALSE); 112 childSetEnabled("close",FALSE);
@@ -201,7 +201,7 @@ BOOL LLFloaterScriptQueue::start()
201 char buffer[MAX_STRING]; /*Flawfinder: ignore*/ 201 char buffer[MAX_STRING]; /*Flawfinder: ignore*/
202 snprintf(buffer, sizeof(buffer), "Starting %s of %d items.", mStartString, mObjectIDs.count()); /* Flawfinder: ignore */ 202 snprintf(buffer, sizeof(buffer), "Starting %s of %d items.", mStartString, mObjectIDs.count()); /* Flawfinder: ignore */
203 203
204 LLScrollListCtrl* list = LLUICtrlFactory::getScrollListByName(this, "queue output"); 204 LLScrollListCtrl* list = getChild<LLScrollListCtrl>("queue output");
205 list->addCommentText(buffer); 205 list->addCommentText(buffer);
206 206
207 return nextObject(); 207 return nextObject();
@@ -235,7 +235,7 @@ BOOL LLFloaterScriptQueue::nextObject()
235 if(isDone() && !mDone) 235 if(isDone() && !mDone)
236 { 236 {
237 237
238 LLScrollListCtrl* list = LLUICtrlFactory::getScrollListByName(this, "queue output"); 238 LLScrollListCtrl* list = getChild<LLScrollListCtrl>("queue output");
239 239
240 mDone = TRUE; 240 mDone = TRUE;
241 char buffer[MAX_STRING]; /*Flawfinder: ignore*/ 241 char buffer[MAX_STRING]; /*Flawfinder: ignore*/
@@ -412,10 +412,7 @@ void LLFloaterCompileQueue::scriptArrived(LLVFS *vfs, const LLUUID& asset_id,
412 } 412 }
413 else 413 else
414 { 414 {
415 if( gViewerStats ) 415 LLViewerStats::getInstance()->incStat( LLViewerStats::ST_DOWNLOAD_FAILED );
416 {
417 gViewerStats->incStat( LLViewerStats::ST_DOWNLOAD_FAILED );
418 }
419 416
420 if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status ) 417 if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status )
421 { 418 {
@@ -442,7 +439,7 @@ void LLFloaterCompileQueue::scriptArrived(LLVFS *vfs, const LLUUID& asset_id,
442 } 439 }
443 if(queue) 440 if(queue)
444 { 441 {
445 LLScrollListCtrl* list = LLUICtrlFactory::getScrollListByName(queue, "queue output"); 442 LLScrollListCtrl* list = queue->getChild<LLScrollListCtrl>("queue output");
446 list->addCommentText(buffer); 443 list->addCommentText(buffer);
447 } 444 }
448 delete data; 445 delete data;
@@ -621,7 +618,7 @@ void LLFloaterResetQueue::handleInventory(LLViewerObject* viewer_obj,
621 if (object) 618 if (object)
622 { 619 {
623 LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it)); 620 LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it));
624 LLScrollListCtrl* list = LLUICtrlFactory::getScrollListByName(this, "queue output"); 621 LLScrollListCtrl* list = getChild<LLScrollListCtrl>("queue output");
625 char buffer[MAX_STRING]; /*Flawfinder: ignore*/ 622 char buffer[MAX_STRING]; /*Flawfinder: ignore*/
626 snprintf(buffer, sizeof(buffer), "Resetting '%s'.", item->getName().c_str()); /* Flawfinder: ignore */ 623 snprintf(buffer, sizeof(buffer), "Resetting '%s'.", item->getName().c_str()); /* Flawfinder: ignore */
627 list->addCommentText(buffer); 624 list->addCommentText(buffer);
@@ -684,7 +681,7 @@ void LLFloaterRunQueue::handleInventory(LLViewerObject* viewer_obj,
684 if (object) 681 if (object)
685 { 682 {
686 LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it)); 683 LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it));
687 LLScrollListCtrl* list = LLUICtrlFactory::getScrollListByName(this, "queue output"); 684 LLScrollListCtrl* list = getChild<LLScrollListCtrl>("queue output");
688 char buffer[MAX_STRING]; /*Flawfinder: ignore*/ 685 char buffer[MAX_STRING]; /*Flawfinder: ignore*/
689 snprintf(buffer, sizeof(buffer), "Running '%s'.", item->getName().c_str()); /* Flawfinder: ignore */ 686 snprintf(buffer, sizeof(buffer), "Running '%s'.", item->getName().c_str()); /* Flawfinder: ignore */
690 list->addCommentText(buffer); 687 list->addCommentText(buffer);
@@ -749,7 +746,7 @@ void LLFloaterNotRunQueue::handleInventory(LLViewerObject* viewer_obj,
749 if (object) 746 if (object)
750 { 747 {
751 LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it)); 748 LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it));
752 LLScrollListCtrl* list = LLUICtrlFactory::getScrollListByName(this, "queue output"); 749 LLScrollListCtrl* list = getChild<LLScrollListCtrl>("queue output");
753 char buffer[MAX_STRING]; /*Flawfinder: ignore*/ 750 char buffer[MAX_STRING]; /*Flawfinder: ignore*/
754 snprintf(buffer, sizeof(buffer), "Not running '%s'.", item->getName().c_str()); /* Flawfinder: ignore */ 751 snprintf(buffer, sizeof(buffer), "Not running '%s'.", item->getName().c_str()); /* Flawfinder: ignore */
755 list->addCommentText(buffer); 752 list->addCommentText(buffer);
diff --git a/linden/indra/newview/llconsole.cpp b/linden/indra/newview/llconsole.cpp
index 79ab8cc..517e06f 100644
--- a/linden/indra/newview/llconsole.cpp
+++ b/linden/indra/newview/llconsole.cpp
@@ -76,16 +76,6 @@ LLConsole::~LLConsole()
76 mColors.clear(); 76 mColors.clear();
77} 77}
78 78
79EWidgetType LLConsole::getWidgetType() const
80{
81 return WIDGET_TYPE_CONSOLE;
82}
83
84LLString LLConsole::getWidgetTag() const
85{
86 return LL_CONSOLE_TAG;
87}
88
89void LLConsole::setLinePersistTime(F32 seconds) 79void LLConsole::setLinePersistTime(F32 seconds)
90{ 80{
91 mLinePersistTime = seconds; 81 mLinePersistTime = seconds;
@@ -172,12 +162,11 @@ void LLConsole::draw()
172 } 162 }
173 else 163 else
174 { 164 {
175 LLUUID image_id; 165 LLUIImagePtr imagep = LLUI::getUIImage("rounded_square.tga");
176 image_id.set(gViewerArt.getString("rounded_square.tga"));
177 LLViewerImage* imagep = gImageList.getImage(image_id, MIPMAP_FALSE, TRUE);
178 166
179 F32 console_opacity = llclamp(gSavedSettings.getF32("ConsoleBackgroundOpacity"), 0.f, 1.f); 167 F32 console_opacity = llclamp(gSavedSettings.getF32("ConsoleBackgroundOpacity"), 0.f, 1.f);
180 LLColor4 color(0.f, 0.f, 0.f, console_opacity); 168 LLColor4 color = gColors.getColor("ConsoleBackground");
169 color.mV[VALPHA] *= console_opacity;
181 170
182 S32 max_width = 0; 171 S32 max_width = 0;
183 for (i = 0; i < line_count; i++) 172 for (i = 0; i < line_count; i++)
@@ -191,8 +180,7 @@ void LLConsole::draw()
191 S32 target_width = max_width; 180 S32 target_width = max_width;
192 mLastBoxHeight = llmax(target_height, (S32)lerp((F32)mLastBoxHeight, (F32)target_height, u)); 181 mLastBoxHeight = llmax(target_height, (S32)lerp((F32)mLastBoxHeight, (F32)target_height, u));
193 mLastBoxWidth = llmax(MIN_CONSOLE_WIDTH, llmax(target_width, (S32)lerp((F32)mLastBoxWidth, (F32)target_width, u))); 182 mLastBoxWidth = llmax(MIN_CONSOLE_WIDTH, llmax(target_width, (S32)lerp((F32)mLastBoxWidth, (F32)target_width, u)));
194 gl_draw_scaled_image_with_border(-15, -10, 16, 16, mLastBoxWidth + 15, mLastBoxHeight, 183 imagep->drawSolid(-15, -10, mLastBoxWidth + 15, mLastBoxHeight, color);
195 imagep, color, TRUE );
196 } 184 }
197 185
198 y_pos += (line_count-1) * mFont->getLineHeight(); 186 y_pos += (line_count-1) * mFont->getLineHeight();
diff --git a/linden/indra/newview/llconsole.h b/linden/indra/newview/llconsole.h
index 9b50b83..04d8600 100644
--- a/linden/indra/newview/llconsole.h
+++ b/linden/indra/newview/llconsole.h
@@ -71,8 +71,6 @@ public:
71 S32 font_size_index, F32 persist_time ); 71 S32 font_size_index, F32 persist_time );
72 virtual ~LLConsole(); 72 virtual ~LLConsole();
73 73
74 virtual EWidgetType getWidgetType() const;
75 virtual LLString getWidgetTag() const;
76 74
77 // each line lasts this long after being added 75 // each line lasts this long after being added
78 void setLinePersistTime(F32 seconds); 76 void setLinePersistTime(F32 seconds);
diff --git a/linden/indra/newview/llcontainerview.cpp b/linden/indra/newview/llcontainerview.cpp
index 53c8e92..730da17 100644
--- a/linden/indra/newview/llcontainerview.cpp
+++ b/linden/indra/newview/llcontainerview.cpp
@@ -39,12 +39,15 @@
39#include "llui.h" 39#include "llui.h"
40#include "llresmgr.h" 40#include "llresmgr.h"
41#include "llstring.h" 41#include "llstring.h"
42#include "llscrollcontainer.h"
42 43
43LLContainerView::LLContainerView(const std::string& name, const LLRect& rect) 44LLContainerView::LLContainerView(const std::string& name, const LLRect& rect)
44: LLView(name, rect, FALSE) 45: LLView(name, rect, FALSE)
45{ 46{
47 mShowLabel = TRUE;
46 mCollapsible = TRUE; 48 mCollapsible = TRUE;
47 mDisplayChildren = TRUE; 49 mDisplayChildren = TRUE;
50 mScrollContainer = NULL;
48} 51}
49 52
50LLContainerView::~LLContainerView() 53LLContainerView::~LLContainerView()
@@ -52,77 +55,107 @@ LLContainerView::~LLContainerView()
52 // Children all cleaned up by default view destructor. 55 // Children all cleaned up by default view destructor.
53} 56}
54 57
55EWidgetType LLContainerView::getWidgetType() const
56{
57 return WIDGET_TYPE_CONTAINER_VIEW;
58}
59
60LLString LLContainerView::getWidgetTag() const
61{
62 return LL_CONTAINER_VIEW_TAG;
63}
64
65BOOL LLContainerView::handleMouseDown(S32 x, S32 y, MASK mask) 58BOOL LLContainerView::handleMouseDown(S32 x, S32 y, MASK mask)
66{ 59{
67 BOOL handled = FALSE; 60 BOOL handled = FALSE;
68 if (mDisplayChildren) 61 if (mDisplayChildren)
69 { 62 {
70 handled = LLView::childrenHandleMouseDown(x, y, mask) != NULL; 63 handled = (LLView::childrenHandleMouseDown(x, y, mask) != NULL);
71 } 64 }
72 if (!handled) 65 if (!handled)
73 { 66 {
74 if( mCollapsible && (y >= getRect().getHeight() - 10) ) 67 if( mCollapsible && mShowLabel && (y >= getRect().getHeight() - 10) )
75 { 68 {
76 setDisplayChildren(!mDisplayChildren); 69 setDisplayChildren(!mDisplayChildren);
77 reshape(getRect().getWidth(), getRect().getHeight(), FALSE); 70 reshape(getRect().getWidth(), getRect().getHeight(), FALSE);
71 handled = TRUE;
78 } 72 }
79 } 73 }
80 return TRUE; 74 return handled;
81} 75}
82 76
83BOOL LLContainerView::handleMouseUp(S32 x, S32 y, MASK mask) 77BOOL LLContainerView::handleMouseUp(S32 x, S32 y, MASK mask)
84{ 78{
79 BOOL handled = FALSE;
85 if (mDisplayChildren) 80 if (mDisplayChildren)
86 { 81 {
87 LLView::childrenHandleMouseUp(x, y, mask); 82 handled = (LLView::childrenHandleMouseUp(x, y, mask) != NULL);
88 } 83 }
89 return TRUE; 84 return handled;
90} 85}
91 86
87
92void LLContainerView::draw() 88void LLContainerView::draw()
93{ 89{
94 if (!getVisible())
95 {
96 return;
97 }
98
99 { 90 {
100 LLGLSNoTexture gls_no_texture; 91 LLGLSNoTexture gls_no_texture;
101 92
102 gl_rect_2d(0, getRect().getHeight(), getRect().getWidth(), 0, LLColor4(0.f, 0.f, 0.f, 0.25f)); 93 gl_rect_2d(0, getRect().getHeight(), getRect().getWidth(), 0, LLColor4(0.f, 0.f, 0.f, 0.25f));
103 } 94 }
104 95
105 // Draw the label. 96 // Draw the label
106 gResMgr->getRes( LLFONT_OCRA )->renderUTF8(mLabel, 0, 2, getRect().getHeight() - 2, LLColor4(1,1,1,1), LLFontGL::LEFT, LLFontGL::TOP); 97 if (mShowLabel)
98 {
99 LLResMgr::getInstance()->getRes( LLFONT_OCRA )->renderUTF8(mLabel, 0, 2, getRect().getHeight() - 2, LLColor4(1,1,1,1), LLFontGL::LEFT, LLFontGL::TOP);
100 }
107 101
108 LLView::draw(); 102 LLView::draw();
109} 103}
110 104
105
111void LLContainerView::reshape(S32 width, S32 height, BOOL called_from_parent) 106void LLContainerView::reshape(S32 width, S32 height, BOOL called_from_parent)
112{ 107{
108 S32 desired_width = width;
109 S32 desired_height = height;
110
111 if (mScrollContainer)
112 {
113 BOOL dum_bool;
114 mScrollContainer->calcVisibleSize(&desired_width, &desired_height, &dum_bool, &dum_bool);
115 }
116 else
117 {
118 // if we're uncontained - make height as small as possible
119 desired_height = 0;
120 }
121
122 arrange(desired_width, desired_height, called_from_parent);
123
124 // sometimes, after layout, our container will change size (scrollbars popping in and out)
125 // if so, attempt another layout
126 if (mScrollContainer)
127 {
128 S32 new_container_width;
129 S32 new_container_height;
130 BOOL dum_bool;
131 mScrollContainer->calcVisibleSize(&new_container_width, &new_container_height, &dum_bool, &dum_bool);
132
133 if ((new_container_width != desired_width) ||
134 (new_container_height != desired_height)) // the container size has changed, attempt to arrange again
135 {
136 arrange(new_container_width, new_container_height, called_from_parent);
137 }
138 }
139}
140
141void LLContainerView::arrange(S32 width, S32 height, BOOL called_from_parent)
142{
113 // Determine the sizes and locations of all contained views 143 // Determine the sizes and locations of all contained views
114 U32 total_height = 0; 144 S32 total_height = 0;
115 U32 top, left, right, bottom; 145 S32 top, left, right, bottom;
116 //LLView *childp; 146 //LLView *childp;
117 147
118 // These will be used for the children 148 // These will be used for the children
119 left = 4; 149 left = 4;
120 top = getRect().getHeight() - 4; 150 top = getRect().getHeight() - 4;
121 right = getRect().getWidth() - 2; 151 right = width - 2;
122 bottom = top; 152 bottom = top;
123 153
124 // Leave some space for the top label/grab handle 154 // Leave some space for the top label/grab handle
125 total_height += 20; 155 if (mShowLabel)
156 {
157 total_height += 20;
158 }
126 159
127 if (mDisplayChildren) 160 if (mDisplayChildren)
128 { 161 {
@@ -142,7 +175,9 @@ void LLContainerView::reshape(S32 width, S32 height, BOOL called_from_parent)
142 } 175 }
143 total_height += child_height; 176 total_height += child_height;
144 } 177 }
145 178
179 if (total_height < height)
180 total_height = height;
146 181
147 if (followsTop()) 182 if (followsTop())
148 { 183 {
@@ -157,7 +192,12 @@ void LLContainerView::reshape(S32 width, S32 height, BOOL called_from_parent)
157 // HACK: casting away const. Should use setRect or some helper function instead. 192 // HACK: casting away const. Should use setRect or some helper function instead.
158 const_cast<LLRect&>(getRect()).mRight = getRect().mLeft + width; 193 const_cast<LLRect&>(getRect()).mRight = getRect().mLeft + width;
159 194
160 top = total_height - 20; 195 top = total_height;
196 if (mShowLabel)
197 {
198 top -= 20;
199 }
200
161 bottom = top; 201 bottom = top;
162 202
163 if (mDisplayChildren) 203 if (mDisplayChildren)
@@ -184,6 +224,7 @@ void LLContainerView::reshape(S32 width, S32 height, BOOL called_from_parent)
184 getParent()->reshape(getParent()->getRect().getWidth(), getParent()->getRect().getHeight(), FALSE); 224 getParent()->reshape(getParent()->getRect().getWidth(), getParent()->getRect().getHeight(), FALSE);
185 } 225 }
186 } 226 }
227
187} 228}
188 229
189LLRect LLContainerView::getRequiredRect() 230LLRect LLContainerView::getRequiredRect()
@@ -196,10 +237,14 @@ LLRect LLContainerView::getRequiredRect()
196 237
197 // Leave some space for the top label/grab handle 238 // Leave some space for the top label/grab handle
198 239
199 if (mDisplayChildren) 240 if (mShowLabel)
200 { 241 {
201 total_height = 20; 242 total_height = 20;
243 }
202 244
245
246 if (mDisplayChildren)
247 {
203 // Determine total height 248 // Determine total height
204 U32 child_height = 0; 249 U32 child_height = 0;
205 for (child_list_const_iter_t child_iter = getChildList()->begin(); 250 for (child_list_const_iter_t child_iter = getChildList()->begin();
@@ -213,11 +258,6 @@ LLRect LLContainerView::getRequiredRect()
213 258
214 total_height += child_height; 259 total_height += child_height;
215 } 260 }
216 else
217 {
218 total_height = 20;
219 }
220
221 req_rect.mTop = total_height; 261 req_rect.mTop = total_height;
222 return req_rect; 262 return req_rect;
223} 263}
diff --git a/linden/indra/newview/llcontainerview.h b/linden/indra/newview/llcontainerview.h
index f47d685..62222b5 100644
--- a/linden/indra/newview/llcontainerview.h
+++ b/linden/indra/newview/llcontainerview.h
@@ -36,6 +36,8 @@
36#include "lltextbox.h" 36#include "lltextbox.h"
37#include "llstatbar.h" 37#include "llstatbar.h"
38 38
39class LLScrollableContainerView;
40
39class LLContainerView : public LLView 41class LLContainerView : public LLView
40{ 42{
41protected: 43protected:
@@ -47,9 +49,6 @@ public:
47 LLContainerView(const std::string& name, const LLRect& rect); 49 LLContainerView(const std::string& name, const LLRect& rect);
48 ~LLContainerView(); 50 ~LLContainerView();
49 51
50 virtual EWidgetType getWidgetType() const;
51 virtual LLString getWidgetTag() const;
52
53 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); 52 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
54 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); 53 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
55 54
@@ -58,7 +57,14 @@ public:
58 virtual LLRect getRequiredRect(); // Return the height of this object, given the set options. 57 virtual LLRect getRequiredRect(); // Return the height of this object, given the set options.
59 58
60 void setLabel(const LLString& label); 59 void setLabel(const LLString& label);
60 void showLabel(BOOL show) { mShowLabel = show; }
61 void setDisplayChildren(const BOOL displayChildren); 61 void setDisplayChildren(const BOOL displayChildren);
62 BOOL getDisplayChildren() { return mDisplayChildren; } 62 BOOL getDisplayChildren() { return mDisplayChildren; }
63 void setScrollContainer(LLScrollableContainerView* scroll) {mScrollContainer = scroll;}
64
65 private:
66 LLScrollableContainerView* mScrollContainer;
67 void arrange(S32 width, S32 height, BOOL called_from_parent = TRUE);
68 BOOL mShowLabel;
63}; 69};
64#endif // LL_CONTAINERVIEW_ 70#endif // LL_CONTAINERVIEW_
diff --git a/linden/indra/newview/llcontroldef.cpp b/linden/indra/newview/llcontroldef.cpp
deleted file mode 100644
index 7534fd5..0000000
--- a/linden/indra/newview/llcontroldef.cpp
+++ /dev/null
@@ -1,2159 +0,0 @@
1/**
2 * @file llcontroldef.cpp
3 * @author James Cook
4 * @brief Viewer control settings
5 *
6 * $LicenseInfo:firstyear=2001&license=viewergpl$
7 *
8 * Copyright (c) 2001-2008, Linden Research, Inc.
9 *
10 * Second Life Viewer Source Code
11 * The source code in this file ("Source Code") is provided by Linden Lab
12 * to you under the terms of the GNU General Public License, version 2.0
13 * ("GPL"), unless you have obtained a separate licensing agreement
14 * ("Other License"), formally executed by you and Linden Lab. Terms of
15 * the GPL can be found in doc/GPL-license.txt in this distribution, or
16 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
17 *
18 * There are special exceptions to the terms and conditions of the GPL as
19 * it is applied to this Source Code. View the full text of the exception
20 * in the file doc/FLOSS-exception.txt in this software distribution, or
21 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
22 *
23 * By copying, modifying or distributing this software, you acknowledge
24 * that you have read and understood your obligations described above,
25 * and agree to abide by those obligations.
26 *
27 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
28 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
29 * COMPLETENESS OR PERFORMANCE.
30 * $/LicenseInfo$
31 */
32
33// Put default viewer settings in here
34
35#include "llviewerprecompiledheaders.h"
36
37#include "llviewercontrol.h"
38
39#include "indra_constants.h"
40
41#include "v3math.h"
42#include "v3dmath.h"
43#include "llrect.h"
44#include "v4color.h"
45#include "v4coloru.h"
46#include "v3color.h"
47#include "llfirstuse.h"
48
49// For Listeners
50#include "audioengine.h"
51#include "llagent.h"
52#include "llconsole.h"
53#include "lldrawpoolterrain.h"
54#include "llflexibleobject.h"
55#include "llfeaturemanager.h"
56#include "llglslshader.h"
57#include "llpanelgeneral.h"
58#include "llpanelinput.h"
59#include "llsky.h"
60#include "llvieweraudio.h"
61#include "llviewerimagelist.h"
62#include "llviewerthrottle.h"
63#include "llviewerwindow.h"
64#include "llvoavatar.h"
65#include "llvosurfacepatch.h"
66#include "llvosky.h"
67#include "llvowlsky.h"
68#include "llvotree.h"
69#include "llvovolume.h"
70#include "llworld.h"
71#include "pipeline.h"
72#include "llviewerjoystick.h"
73#include "llviewerparcelmgr.h"
74#include "llparcel.h"
75#include "llnotify.h"
76#include "llkeyboard.h"
77#include "llglimmediate.h"
78
79extern BOOL gResizeScreenTexture;
80
81void declare_settings()
82{
83 // Somewhat under 1024 by 768, to give space for Windows task bar / Mac menu bar
84 // to emphasize window isn't actually maximized.
85 const S32 WINDOW_WIDTH = 1000;
86 const S32 WINDOW_HEIGHT = 700;
87
88 //------------------------------------------------------------------------
89 // Color constants
90 //------------------------------------------------------------------------
91
92 const S32 TOOL_PANEL_HEIGHT = 162 + 32;
93 const S32 TOOL_PANEL_WIDTH = 75 + 8;
94
95 // Colors that can be changed in the UI
96 gSavedSettings.declareColor4("EffectColor", LLColor4(1.f, 1.f, 1.f, 1.f), "Particle effects color");
97 gSavedSettings.declareColor4("SystemChatColor", LLColor4(0.8f, 1.f, 1.f, 1.f), "Color of chat messages from SL System");
98 gSavedSettings.declareColor4("AgentChatColor", LLColor4(1.0f, 1.0f, 1.0f, 1.0f), "Color of chat messages from other residents");
99 gSavedSettings.declareColor4("ObjectChatColor", LLColor4(0.7f, 0.9f, 0.7f, 1.0f), "Color of chat messages from objects");
100 gSavedSettings.declareColor4("llOwnerSayChatColor", LLColor4(0.99f, 0.99f, 0.69f, 1.0f), "Color of chat messages from objects only visible to the owner");
101 gSavedSettings.declareColor4("BackgroundChatColor", LLColor4(0.f, 0.f, 0.f, 1.0f), "Color of chat bubble background");
102 gSavedSettings.declareColor4("ScriptErrorColor", LLColor4(0.82f, 0.82f, 0.99f, 1.0f), "Color of script error messages");
103 gSavedSettings.declareColor4("HTMLLinkColor", LLColor4(0.6f, 0.6f, 1.0f, 1.0f), "Color of hyperlinks");
104
105 // color palette in color picker
106 gSavedSettings.declareColor4("ColorPaletteEntry01", LLColor4 ( 0.0f, 0.0f, 0.0f, 1.0f ), "Color picker palette entry");
107 gSavedSettings.declareColor4("ColorPaletteEntry02", LLColor4 ( 0.5f, 0.5f, 0.5f, 1.0f ), "Color picker palette entry");
108 gSavedSettings.declareColor4("ColorPaletteEntry03", LLColor4 ( 0.5f, 0.0f, 0.0f, 1.0f ), "Color picker palette entry");
109 gSavedSettings.declareColor4("ColorPaletteEntry04", LLColor4 ( 0.5f, 0.5f, 0.0f, 1.0f ), "Color picker palette entry");
110 gSavedSettings.declareColor4("ColorPaletteEntry05", LLColor4 ( 0.0f, 0.5f, 0.0f, 1.0f ), "Color picker palette entry");
111 gSavedSettings.declareColor4("ColorPaletteEntry06", LLColor4 ( 0.0f, 0.5f, 0.5f, 1.0f ), "Color picker palette entry");
112 gSavedSettings.declareColor4("ColorPaletteEntry07", LLColor4 ( 0.0f, 0.0f, 0.5f, 1.0f ), "Color picker palette entry");
113 gSavedSettings.declareColor4("ColorPaletteEntry08", LLColor4 ( 0.5f, 0.0f, 0.5f, 1.0f ), "Color picker palette entry");
114 gSavedSettings.declareColor4("ColorPaletteEntry09", LLColor4 ( 0.5f, 0.5f, 0.0f, 1.0f ), "Color picker palette entry");
115 gSavedSettings.declareColor4("ColorPaletteEntry10", LLColor4 ( 0.0f, 0.25f, 0.25f, 1.0f ), "Color picker palette entry");
116 gSavedSettings.declareColor4("ColorPaletteEntry11", LLColor4 ( 0.0f, 0.5f, 1.0f, 1.0f ), "Color picker palette entry");
117 gSavedSettings.declareColor4("ColorPaletteEntry12", LLColor4 ( 0.0f, 0.25f, 0.5f, 1.0f ), "Color picker palette entry");
118 gSavedSettings.declareColor4("ColorPaletteEntry13", LLColor4 ( 0.5f, 0.0f, 1.0f, 1.0f ), "Color picker palette entry");
119 gSavedSettings.declareColor4("ColorPaletteEntry14", LLColor4 ( 0.5f, 0.25f, 0.0f, 1.0f ), "Color picker palette entry");
120 gSavedSettings.declareColor4("ColorPaletteEntry15", LLColor4 ( 1.0f, 1.0f, 1.0f, 1.0f ), "Color picker palette entry");
121 gSavedSettings.declareColor4("ColorPaletteEntry16", LLColor4 ( 1.0f, 1.0f, 1.0f, 1.0f ), "Color picker palette entry");
122
123 gSavedSettings.declareColor4("ColorPaletteEntry17", LLColor4 ( 1.0f, 1.0f, 1.0f, 1.0f ), "Color picker palette entry");
124 gSavedSettings.declareColor4("ColorPaletteEntry18", LLColor4 ( 0.75f, 0.75f, 0.75f, 1.0f ), "Color picker palette entry");
125 gSavedSettings.declareColor4("ColorPaletteEntry19", LLColor4 ( 1.0f, 0.0f, 0.0f, 1.0f ), "Color picker palette entry");
126 gSavedSettings.declareColor4("ColorPaletteEntry20", LLColor4 ( 1.0f, 1.0f, 0.0f, 1.0f ), "Color picker palette entry");
127 gSavedSettings.declareColor4("ColorPaletteEntry21", LLColor4 ( 0.0f, 1.0f, 0.0f, 1.0f ), "Color picker palette entry");
128 gSavedSettings.declareColor4("ColorPaletteEntry22", LLColor4 ( 0.0f, 1.0f, 1.0f, 1.0f ), "Color picker palette entry");
129 gSavedSettings.declareColor4("ColorPaletteEntry23", LLColor4 ( 0.0f, 0.0f, 1.0f, 1.0f ), "Color picker palette entry");
130 gSavedSettings.declareColor4("ColorPaletteEntry24", LLColor4 ( 1.0f, 0.0f, 1.0f, 1.0f ), "Color picker palette entry");
131 gSavedSettings.declareColor4("ColorPaletteEntry25", LLColor4 ( 1.0f, 1.0f, 0.5f, 1.0f ), "Color picker palette entry");
132 gSavedSettings.declareColor4("ColorPaletteEntry26", LLColor4 ( 0.0f, 1.0f, 0.5f, 1.0f ), "Color picker palette entry");
133 gSavedSettings.declareColor4("ColorPaletteEntry27", LLColor4 ( 0.5f, 1.0f, 1.0f, 1.0f ), "Color picker palette entry");
134 gSavedSettings.declareColor4("ColorPaletteEntry28", LLColor4 ( 0.5f, 0.5f, 1.0f, 1.0f ), "Color picker palette entry");
135 gSavedSettings.declareColor4("ColorPaletteEntry29", LLColor4 ( 1.0f, 0.0f, 0.5f, 1.0f ), "Color picker palette entry");
136 gSavedSettings.declareColor4("ColorPaletteEntry30", LLColor4 ( 1.0f, 0.5f, 0.0f, 1.0f ), "Color picker palette entry");
137 gSavedSettings.declareColor4("ColorPaletteEntry31", LLColor4 ( 1.0f, 1.0f, 1.0f, 1.0f ), "Color picker palette entry");
138 gSavedSettings.declareColor4("ColorPaletteEntry32", LLColor4 ( 1.0f, 1.0f, 1.0f, 1.0f ), "Color picker palette entry");
139
140 //------------------------------------------------------------------------
141 // Main menu
142 //------------------------------------------------------------------------
143 gSavedSettings.declareS32("MenuBarHeight", 18, "", NO_PERSIST );
144 gSavedSettings.declareS32("MenuBarWidth", 410, "", NO_PERSIST );
145
146 gSavedSettings.declareF32("MenuAccessKeyTime", 0.25f, "Time (seconds) in which the menu key must be tapped to move focus to the menu bar");
147 gSavedSettings.declareBOOL("UseAltKeyForMenus", FALSE, "Access menus via keyboard by tapping Alt");
148 // Which background overlay to use
149 gSavedSettings.declareS32("MapOverlayIndex", 0, "Currently selected world map type");
150
151
152 //------------------------------------------------------------------------
153 // Pie Menus
154 //------------------------------------------------------------------------
155 gSavedSettings.declareF32("PieMenuLineWidth", 2.5f, "Width of lines in pie menu display (pixels)");
156
157 //------------------------------------------------------------------------
158 // Drop Shadows
159 //------------------------------------------------------------------------
160 gSavedSettings.declareS32("DropShadowButton", 2, "Drop shadow width for buttons (pixels)");
161 gSavedSettings.declareS32("DropShadowFloater", 5, "Drop shadow width for floaters (pixels)");
162 gSavedSettings.declareS32("DropShadowSlider", 3, "Drop shadow width for sliders (pixels)");
163 gSavedSettings.declareS32("DropShadowTooltip", 4, "Drop shadow width for tooltips (pixels)");
164
165 //------------------------------------------------------------------------
166 // Buttons
167 //------------------------------------------------------------------------
168 gSavedSettings.declareS32("ButtonHPad", 10, "Default horizontal spacing between buttons (pixels)"); // space from left of button to text
169 gSavedSettings.declareS32("ButtonVPad", 1, "Default vertical spacing between buttons (pixels)"); // space from bottom of button to text
170 gSavedSettings.declareS32("ButtonHeightSmall", 16, "Default height for small buttons (pixels)");
171 gSavedSettings.declareS32("ButtonHeight", 20, "Default height for normal buttons (pixels)");
172 gSavedSettings.declareF32("ButtonFlashRate", 2.f, "Frequency at which buttons flash (hz)");
173 gSavedSettings.declareS32("ButtonFlashCount", 3, "Number of flashes after which flashing buttons stay lit up");
174 //gSavedSettings.declareS32("ButtonHeightToolbar", 32, "[NOT USED]");
175
176 //gSavedSettings.declareS32("DefaultButtonWidth", DEFAULT_BUTTON_WIDTH, "[NOT USED]");
177 //gSavedSettings.declareS32("DefaultButtonHeight", DEFAULT_BUTTON_HEIGHT, "[NOT USED]");
178
179 //------------------------------------------------------------------------
180 // Scroll Lists
181 //------------------------------------------------------------------------
182 gSavedSettings.declareF32("TypeAheadTimeout", 1.5f, "Time delay before clearing type-ahead buffer in lists (seconds)");
183
184 //------------------------------------------------------------------------
185 // ToolTips
186 //------------------------------------------------------------------------
187 gSavedSettings.declareF32("ToolTipDelay", 0.7f, "Seconds before displaying tooltip when mouse stops over UI element");
188 gSavedSettings.declareF32("DragAndDropToolTipDelay", 0.1f, "Seconds before displaying tooltip when performing drag and drop operation");
189
190 //------------------------------------------------------------------------
191 // Auto-Open Folders
192 //------------------------------------------------------------------------
193 gSavedSettings.declareF32("FolderAutoOpenDelay", 0.75f, "Seconds before automatically expanding the folder under the mouse when performing inventory drag and drop");
194 gSavedSettings.declareF32("InventoryAutoOpenDelay", 1.f, "Seconds before automatically opening inventory when mouse is over inventory button when performing inventory drag and drop");
195 gSavedSettings.declareBOOL("ShowEmptyFoldersWhenSearching", FALSE, "Shows folders that do not have any visible contents when applying a filter to inventory");
196 gSavedSettings.declareS32("FilterItemsPerFrame", 500, "Maximum number of inventory items to match against search filter every frame (lower to increase framerate while searching, higher to improve search speed)");
197 gSavedSettings.declareBOOL("DebugInventoryFilters", FALSE, "Turn on debugging display for inventory filtering");
198 gSavedSettings.declareF32("FolderLoadingMessageWaitTime", 0.5f, "Seconds to wait before showing the LOADING... text in folder views");
199
200 //------------------------------------------------------------------------
201 // Status bar
202 //------------------------------------------------------------------------
203 gSavedSettings.declareS32("StatusBarHeight", 26, "Height of menu/status bar at top of screen (pixels)" );
204 //gSavedSettings.declareS32("StatusBarButtonWidth", 80, "[NOT USED]");
205
206 gSavedSettings.declareS32("StatusBarPad", 10, "Spacing between popup buttons at bottom of screen (Stand up, Release Controls)");
207
208 //gSavedSettings.declareS32("ChatWidth", 250, "[NOT USED]");
209
210 //------------------------------------------------------------------------
211 // Toolbar bar
212 //------------------------------------------------------------------------
213 //gSavedSettings.declareS32("ToolBarHeight", 20, "[NOT USED]" );
214 //gSavedSettings.declareS32("ToolBarWidth", 480, "[NOT USED]" );
215 //gSavedSettings.declareS32("ToolBarButtonWidth", 80, "[NOT USED]" );
216
217 //------------------------------------------------------------------------
218 // Fonts
219 //------------------------------------------------------------------------
220 gSavedSettings.declareF32("FontScreenDPI", 96.f, "Font resolution, higher is bigger (pixels per inch)"); // windows standard
221 gSavedSettings.declareF32("FontSizeMonospace", 9.f, "Size of monospaced font (points, or 1/72 of an inch)");
222 gSavedSettings.declareF32("FontSizeSmall", 9.f, "Size of small font (points, or 1/72 of an inch)");
223 gSavedSettings.declareF32("FontSizeMedium", 10.f, "Size of medium font (points, or 1/72 of an inch)");
224 gSavedSettings.declareF32("FontSizeLarge", 12.f, "Size of large font (points, or 1/72 of an inch)");
225 gSavedSettings.declareF32("FontSizeHuge", 16.f, "Size of huge font (points, or 1/72 of an inch)");
226
227 gSavedSettings.declareString("FontMonospace", "profontwindows.ttf", "Name of monospace font (Truetype file name)");
228 gSavedSettings.declareString("FontSansSerif", "MtBkLfRg.ttf", "Name of san-serif font (Truetype file name)");
229#if LL_WINDOWS
230 // Lists Japanese, Korean, and Chinese sanserif fonts available in
231 // Windows XP and Vista, as well as "Arial Unicode MS".
232 gSavedSettings.declareString(
233 "FontSansSerifFallback",
234 "MSGOTHIC.TTC;gulim.ttc;simhei.ttf;ArialUni.ttf",
235 "Name of fallback san-serif font (Truetype file name)");
236#elif LL_DARWIN
237 // This is a fairly complete Japanese font that ships with Mac OS X.
238 // The first filename is in UTF8, but it shows up in the font menu as "Hiragino Kaku Gothic Pro W3".
239 // The third filename is in UTF8, but it shows up in the font menu as "STHeiti Light"
240 gSavedSettings.declareString("FontSansSerifFallback", "\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", "Name of san-serif font (Truetype file name)");
241#else
242 // 'unicode.ttf' doesn't exist, but hopefully an international
243 // user can take the hint and drop in their favourite local font.
244 gSavedSettings.declareString("FontSansSerifFallback", "unicode.ttf", "Name of fallback san-serif font (Truetype file name)");
245#endif
246 gSavedSettings.declareF32("FontSansSerifFallbackScale", 1.0, "Scale of fallback font relative to huge font (fraction of huge font size)");
247 gSavedSettings.declareString("FontSansSerifBold", "MtBdLfRg.ttf", "Name of bold font (Truetype file name)");
248
249 //------------------------------------------------------------------------
250 // Chat
251 //------------------------------------------------------------------------
252
253 // 0 = small, 1 = big
254 gSavedSettings.declareS32("ChatFontSize", 1, "Size of chat text in chat console (0 = small, 1 = big)");
255
256 // Does the console occupy full window width or only left 2/3?
257 gSavedSettings.declareBOOL("ChatFullWidth", TRUE, "Chat console takes up full width of SL window");
258
259 // opacity of console background
260 gSavedSettings.declareF32("ConsoleBackgroundOpacity", 0.4f, "Opacity of chat console (0.0 = completely transparent, 1.0 = completely opaque)");
261 gSavedSettings.declareS32("ConsoleMaxLines", 40, "Max number of lines of chat text visible in console.");
262
263 // Seconds to keep line of text on console
264 gSavedSettings.declareF32("ChatPersistTime", 15.f, "Time for which chat stays visible in console (seconds)");
265 gSavedSettings.declareBOOL("PlayTypingAnim", TRUE, "Your avatar plays the typing animation whenever you type in the chat bar");
266
267 // show chat in bubbles above avatar heads
268 gSavedSettings.declareBOOL("UseChatBubbles", FALSE, "Show chat above avatars head in chat bubbles");
269 gSavedSettings.declareF32("ChatBubbleOpacity", 0.5f, "Opacity of chat bubble background (0.0 = completely transparent, 1.0 = completely opaque)");
270
271 gSavedSettings.declareBOOL("AllowIdleAFK", TRUE, "Automatically set AFK (away from keyboard) mode when idle");
272 gSavedSettings.declareF32("AFKTimeout", 300.f, "Time before automatically setting AFK (away from keyboard) mode (seconds)"); // 5 minutes
273
274 gSavedSettings.declareBOOL("SmallAvatarNames", TRUE, "Display avatar name text in smaller font");
275 gSavedSettings.declareBOOL("ScriptErrorsAsChat", FALSE, "Display script errors and warning in chat history");
276
277 gSavedSettings.declareBOOL("ChatShowTimestamps", TRUE, "Show timestamps in chat");
278
279 gSavedSettings.declareBOOL("EnableVoiceChat", TRUE, "Enable talking to other residents with a microphone");
280 gSavedSettings.declareBOOL("VoiceCallsFriendsOnly", FALSE, "Only accept voice calls from residents on your friends list");
281 gSavedSettings.declareBOOL("PTTCurrentlyEnabled", TRUE, "", NO_PERSIST);
282 gSavedSettings.declareBOOL("ShowVoiceChannelPopup", FALSE, "Controls visibility of the current voice channel popup above the voice tab");
283 gSavedSettings.declareBOOL("EnablePushToTalk", TRUE, "Must hold down a key or moouse button when talking into your microphone");
284 gSavedSettings.declareString("PushToTalkButton", "MiddleMouse", "Which button or keyboard key is used for push-to-talk");
285 gSavedSettings.declareBOOL("PushToTalkToggle", FALSE, "Should the push-to-talk button behave as a toggle");
286 gSavedSettings.declareS32("VoiceEarLocation", 0, "Location of the virtual ear for voice");
287 gSavedSettings.declareString("VivoxDebugServerName", "bhd.vivox.com", "Hostname of the vivox account server to use for voice when not connected to Agni.");
288 gSavedSettings.declareColor4("SpeakingColor", LLColor4(0.f, 1.f, 0.f, 1.f), "Color of various indicators when resident is speaking on a voice channel.");
289 gSavedSettings.declareColor4("OverdrivenColor", LLColor4(1.f, 0.f, 0.f, 1.f), "Color of various indicators when resident is speaking too loud.");
290 gSavedSettings.declareString("VoiceInputAudioDevice", "Default", "Audio input device to use for voice");
291 gSavedSettings.declareString("VoiceOutputAudioDevice", "Default", "Audio output device to use for voice");
292 gSavedSettings.declareString("VivoxDebugLevel", "-1", "Logging level to use when launching the vivox daemon");
293
294 //voice amplitude images;
295
296 /*
297 gSavedSettings.declareString("VoiceImageLevel0", "5b41b4c3-eb70-0f0f-17d9-1765cbd07d39", "Texture UUID for voice image level 0");
298 gSavedSettings.declareString("VoiceImageLevel1", "b06ffd0a-7bfe-0449-0bbc-df291f1857c4", "Texture UUID for voice image level 1");
299 gSavedSettings.declareString("VoiceImageLevel2", "bfa16494-b731-5b59-3260-9e4fd29d63f7", "Texture UUID for voice image level 2");
300 gSavedSettings.declareString("VoiceImageLevel3", "6951074f-de1d-3c55-cb2f-e972877f7f81", "Texture UUID for voice image level 3");
301 gSavedSettings.declareString("VoiceImageLevel4", "ce3df80a-f0c5-a7cb-f5bc-d3bb38949d0d", "Texture UUID for voice image level 4");
302 gSavedSettings.declareString("VoiceImageLevel5", "8d0e359c-5cea-bdf5-b6b0-32d2fea6355c", "Texture UUID for voice image level 5");
303 gSavedSettings.declareString("VoiceImageLevel6", "ad9e64e0-a763-5d8c-f2e8-7b5dfdb7f20f", "Texture UUID for voice image level 6");
304 */
305
306 /*
307 // Jeffrey's first version
308 gSavedSettings.declareString("VoiceImageLevel0", "5b41b4c3-eb70-0f0f-17d9-1765cbd07d39", "Texture UUID for voice image level 0");
309 gSavedSettings.declareString("VoiceImageLevel1", "cde76ae8-0044-d575-8e2c-65fb0a14cbde", "Texture UUID for voice image level 1");
310 gSavedSettings.declareString("VoiceImageLevel2", "cde76ae8-0044-d575-8e2c-65fb0a14cbde", "Texture UUID for voice image level 2");
311 gSavedSettings.declareString("VoiceImageLevel3", "cde76ae8-0044-d575-8e2c-65fb0a14cbde", "Texture UUID for voice image level 3");
312 gSavedSettings.declareString("VoiceImageLevel4", "cde76ae8-0044-d575-8e2c-65fb0a14cbde", "Texture UUID for voice image level 4");
313 gSavedSettings.declareString("VoiceImageLevel5", "cde76ae8-0044-d575-8e2c-65fb0a14cbde", "Texture UUID for voice image level 5");
314 gSavedSettings.declareString("VoiceImageLevel6", "cde76ae8-0044-d575-8e2c-65fb0a14cbde", "Texture UUID for voice image level 6");
315 */
316
317 // Brent's first version
318 /*
319 gSavedSettings.declareString("VoiceImageLevel0", "5b41b4c3-eb70-0f0f-17d9-1765cbd07d39", "Texture UUID for voice image level 0");
320 gSavedSettings.declareString("VoiceImageLevel1", "72365124-c7a7-a1f9-3d7a-d8e521eb5011", "Texture UUID for voice image level 1");
321 gSavedSettings.declareString("VoiceImageLevel2", "72365124-c7a7-a1f9-3d7a-d8e521eb5011", "Texture UUID for voice image level 2");
322 gSavedSettings.declareString("VoiceImageLevel3", "72365124-c7a7-a1f9-3d7a-d8e521eb5011", "Texture UUID for voice image level 3");
323 gSavedSettings.declareString("VoiceImageLevel4", "72365124-c7a7-a1f9-3d7a-d8e521eb5011", "Texture UUID for voice image level 4");
324 gSavedSettings.declareString("VoiceImageLevel5", "72365124-c7a7-a1f9-3d7a-d8e521eb5011", "Texture UUID for voice image level 5");
325 gSavedSettings.declareString("VoiceImageLevel6", "72365124-c7a7-a1f9-3d7a-d8e521eb5011", "Texture UUID for voice image level 6");
326 */
327
328 /*
329 // Brent's second version
330 gSavedSettings.declareString("VoiceImageLevel0", "5b41b4c3-eb70-0f0f-17d9-1765cbd07d39", "Texture UUID for voice image level 0");
331 gSavedSettings.declareString("VoiceImageLevel1", "4ee6a7ac-472e-b5ff-7125-f6213798cbee", "Texture UUID for voice image level 1");
332 gSavedSettings.declareString("VoiceImageLevel2", "4ee6a7ac-472e-b5ff-7125-f6213798cbee", "Texture UUID for voice image level 2");
333 gSavedSettings.declareString("VoiceImageLevel3", "4ee6a7ac-472e-b5ff-7125-f6213798cbee", "Texture UUID for voice image level 3");
334 gSavedSettings.declareString("VoiceImageLevel4", "4ee6a7ac-472e-b5ff-7125-f6213798cbee", "Texture UUID for voice image level 4");
335 gSavedSettings.declareString("VoiceImageLevel5", "4ee6a7ac-472e-b5ff-7125-f6213798cbee", "Texture UUID for voice image level 5");
336 gSavedSettings.declareString("VoiceImageLevel6", "4ee6a7ac-472e-b5ff-7125-f6213798cbee", "Texture UUID for voice image level 6");
337 */
338
339 // Jeffrey's tweak on 4/9/07
340 gSavedSettings.declareString("VoiceImageLevel0", "041ee5a0-cb6a-9ac5-6e49-41e9320507d5", "Texture UUID for voice image level 0");
341 gSavedSettings.declareString("VoiceImageLevel1", "29de489d-0491-fb00-7dab-f9e686d31e83", "Texture UUID for voice image level 1");
342 gSavedSettings.declareString("VoiceImageLevel2", "29de489d-0491-fb00-7dab-f9e686d31e83", "Texture UUID for voice image level 2");
343 gSavedSettings.declareString("VoiceImageLevel3", "29de489d-0491-fb00-7dab-f9e686d31e83", "Texture UUID for voice image level 3");
344 gSavedSettings.declareString("VoiceImageLevel4", "29de489d-0491-fb00-7dab-f9e686d31e83", "Texture UUID for voice image level 4");
345 gSavedSettings.declareString("VoiceImageLevel5", "29de489d-0491-fb00-7dab-f9e686d31e83", "Texture UUID for voice image level 5");
346 gSavedSettings.declareString("VoiceImageLevel6", "29de489d-0491-fb00-7dab-f9e686d31e83", "Texture UUID for voice image level 6");
347
348 gSavedSettings.declareString("VoiceHost", "127.0.0.1", "Client SLVoice host to connect to");
349 gSavedSettings.declareU32("VoicePort", 44124, "Client SLVoice port to connect to");
350
351 //------------------------------------------------------------------------
352 // Caution Script Permission Prompts
353 //------------------------------------------------------------------------
354
355 gSavedSettings.declareBOOL("PermissionsCautionEnabled", TRUE, "When enabled, changes the handling of script permission requests to help avoid accidental granting of certain permissions, such as the debit permission", NO_PERSIST);
356 gSavedSettings.declareS32("PermissionsCautionNotifyBoxHeight", 344, "Height of caution-style notification messages", NO_PERSIST);
357
358 //------------------------------------------------------------------------
359 // Other....
360 //------------------------------------------------------------------------
361
362 gSavedSettings.declareBOOL("ScriptHelpFollowsCursor", FALSE, "Scripting help window updates contents based on script editor contents under text cursor");
363
364 gSavedSettings.declareS32("LastFeatureVersion", 0, "[DO NOT MODIFY] Version number for tracking hardware changes", TRUE);
365 gSavedSettings.declareS32("NumSessions", 0, "Number of successful logins to Second Life");
366 gSavedSettings.declareBOOL("ShowInventory", FALSE, "Open inventory window on login");
367 gSavedSettings.declareBOOL("ChatOnlineNotification", TRUE, "Provide notifications for when friend log on and off of SL");
368
369 gSavedSettings.declareString("DefaultObjectTexture", "89556747-24cb-43ed-920b-47caed15465f", "Texture used as 'Default' in texture picker. (UUID texture reference)" ); // maple texture
370
371 gSavedSettings.declareBOOL("ShowPropertyLines", FALSE, "Show line overlay demarking property boundaries");
372 gSavedSettings.declareBOOL("ShowParcelOwners", FALSE, "", NO_PERSIST);
373 gSavedSettings.declareBOOL("ToolboxAutoMove", FALSE, "[NOT USED]");
374 gSavedSettings.declareBOOL("ToolboxShowMore", TRUE, "Whether to show additional build tool controls", TRUE);
375
376 gSavedSettings.declareRect("ToolboxRect", LLRect(0, 100, 100, 100), "Rectangle for tools window" ); // only care about position
377
378 // User interface button states
379 gSavedSettings.declareBOOL("FirstPersonBtnState", FALSE, "", NO_PERSIST);
380 gSavedSettings.declareBOOL("MouselookBtnState", FALSE, "", NO_PERSIST);
381 gSavedSettings.declareBOOL("ThirdPersonBtnState", TRUE, "", NO_PERSIST);
382 gSavedSettings.declareBOOL("BuildBtnState", FALSE, "", NO_PERSIST);
383
384 //gSavedSettings.declareBOOL("TalkBtnState", FALSE, "[NOT USED]");
385
386 gSavedSettings.declareBOOL("ShowPermissions", FALSE, "", NO_PERSIST);
387 gSavedSettings.declareBOOL("ShowTools", FALSE, "", NO_PERSIST);
388
389
390 gSavedSettings.declareString("NextLoginLocation", "", "Location to log into by default."); // if present in settings.ini, will force you to that sim/x/y/z on next login
391
392// gSavedSettings.declareBOOL("ShowBasicHelpOnLaunch", TRUE);
393 gSavedSettings.declareRect("BasicHelpRect", LLRect(0, 404, 467, 0), "Rectangle for help window" ); // Only width and height are used
394
395 gSavedSettings.declareS32("LastPrefTab", 0, "Last selected tab in preferences window");
396
397 gSavedSettings.declareString("LSLHelpURL", "https://wiki.secondlife.com/wiki/[LSL_STRING]", "URL that points to LSL help files, with [LSL_STRING] corresponding to the referenced LSL function or keyword");
398 // link for editable wiki (https doesn't seem to work right now with our embedded browser)
399 //gSavedSettings.declareString("LSLHelpURL", "https://wiki.secondlife.com/wiki/[LSL_STRING]", "URL that points to LSL help files, with [LSL_STRING] corresponding to the referenced LSL function or keyword");
400 // Wearable default images
401// const char* UI_IMG_BLACK_UUID = "e2244626-f22f-4839-8123-1e7baddeb659";
402 const char* UI_IMG_WHITE_UUID = "5748decc-f629-461c-9a36-a35a221fe21f";
403// const char* UI_IMG_DARKGRAY_UUID = "267e26d3-e0e1-41b8-91b1-3b337102928d";
404// const char* UI_IMG_LIGHTGRAY_UUID = "c520bf46-cc5d-412b-a60b-9f1bd245189f";
405
406 gSavedSettings.declareString("UIImgDefaultShirtUUID", UI_IMG_WHITE_UUID, "", NO_PERSIST);
407 gSavedSettings.declareString("UIImgDefaultPantsUUID", UI_IMG_WHITE_UUID, "", NO_PERSIST);
408 gSavedSettings.declareString("UIImgDefaultEyesUUID", "6522e74d-1660-4e7f-b601-6f48c1659a77", "", NO_PERSIST);
409 gSavedSettings.declareString("UIImgDefaultHairUUID", "7ca39b4c-bd19-4699-aff7-f93fd03d3e7b", "", NO_PERSIST);
410 gSavedSettings.declareString("UIImgDefaultShoesUUID", UI_IMG_WHITE_UUID, "", NO_PERSIST);
411 gSavedSettings.declareString("UIImgDefaultSocksUUID", UI_IMG_WHITE_UUID, "", NO_PERSIST);
412 gSavedSettings.declareString("UIImgDefaultGlovesUUID", UI_IMG_WHITE_UUID, "", NO_PERSIST);
413 gSavedSettings.declareString("UIImgDefaultJacketUUID", UI_IMG_WHITE_UUID, "", NO_PERSIST);
414 gSavedSettings.declareString("UIImgDefaultUnderwearUUID", UI_IMG_WHITE_UUID, "", NO_PERSIST);
415 gSavedSettings.declareString("UIImgDefaultSkirtUUID", UI_IMG_WHITE_UUID, "", NO_PERSIST);
416
417 // Utility color for texture defaults
418 gSavedSettings.declareString("UIImgWhiteUUID", UI_IMG_WHITE_UUID, "", NO_PERSIST);
419
420 // Movement widget controls
421 const S32 MOVE_BTN_COL1 = 20;
422 const S32 MOVE_BTN_COL2 = MOVE_BTN_COL1 + 25;
423 const S32 MOVE_BTN_COL3 = MOVE_BTN_COL2 + 21;
424 const S32 MOVE_BTN_COL4 = MOVE_BTN_COL3 + 25;
425 const S32 MOVE_BTN_COL5 = MOVE_BTN_COL4 + 25;
426// const S32 MOVE_BTN_COL6 = MOVE_BTN_COL5 + 20;
427 const S32 MOVE_BTN_ROW1 = 4;
428 const S32 MOVE_BTN_ROW2 = MOVE_BTN_ROW1 + 25;
429 const S32 MOVE_BTN_ROW3 = MOVE_BTN_ROW2 + 25;
430 const S32 MOVE_BTN_FLY_LEFT = MOVE_BTN_COL1+96;
431 const S32 MOVE_BTN_FLY_WIDTH = 40;
432 const S32 MOVE_BTN_FLY_RIGHT = MOVE_BTN_FLY_LEFT + MOVE_BTN_FLY_WIDTH;
433
434 //gSavedSettings.declareBOOL("CreateObjectsCentered", FALSE, "[NOT USED]");
435
436 //gSavedSettings.declareBOOL("ShowMoveArrows", TRUE, "[NOT USED]");
437
438 gSavedSettings.declareRect("SlideLeftBtnRect",
439 LLRect(MOVE_BTN_COL1, MOVE_BTN_ROW3, MOVE_BTN_COL2, MOVE_BTN_ROW2),
440 "", NO_PERSIST );
441 gSavedSettings.declareRect("TurnLeftBtnRect",
442 LLRect(MOVE_BTN_COL1, MOVE_BTN_ROW2, MOVE_BTN_COL2, MOVE_BTN_ROW1),
443 "", NO_PERSIST );
444 gSavedSettings.declareRect("ForwardBtnRect",
445 LLRect(MOVE_BTN_COL2, MOVE_BTN_ROW3, MOVE_BTN_COL3, MOVE_BTN_ROW2),
446 "", NO_PERSIST );
447 gSavedSettings.declareRect("BackwardBtnRect",
448 LLRect(MOVE_BTN_COL2, MOVE_BTN_ROW2, MOVE_BTN_COL3, MOVE_BTN_ROW1),
449 "", NO_PERSIST );
450 gSavedSettings.declareRect("SlideRightBtnRect",
451 LLRect(MOVE_BTN_COL3, MOVE_BTN_ROW3, MOVE_BTN_COL4, MOVE_BTN_ROW2),
452 "", NO_PERSIST );
453 gSavedSettings.declareRect("TurnRightBtnRect",
454 LLRect(MOVE_BTN_COL3, MOVE_BTN_ROW2, MOVE_BTN_COL4, MOVE_BTN_ROW1),
455 "", NO_PERSIST );
456 gSavedSettings.declareRect("MoveUpBtnRect",
457 LLRect(MOVE_BTN_COL4, MOVE_BTN_ROW3, MOVE_BTN_COL5, MOVE_BTN_ROW2),
458 "", NO_PERSIST );
459 gSavedSettings.declareRect("MoveDownBtnRect",
460 LLRect(MOVE_BTN_COL4, MOVE_BTN_ROW2, MOVE_BTN_COL5, MOVE_BTN_ROW1),
461 "", NO_PERSIST );
462 gSavedSettings.declareBOOL("FlyBtnState", FALSE, "", NO_PERSIST);
463 gSavedSettings.declareBOOL("SitBtnState", FALSE, "", NO_PERSIST);
464 gSavedSettings.declareRect("FlyBtnRect",
465 LLRect(MOVE_BTN_FLY_LEFT, 20, MOVE_BTN_FLY_RIGHT, 4), "", NO_PERSIST );
466 gSavedSettings.declareBOOL("RunBtnState", FALSE, "", NO_PERSIST);
467 gSavedSettings.declareRect("RunBtnRect",
468 LLRect(MOVE_BTN_FLY_LEFT, 40, MOVE_BTN_FLY_RIGHT, 24), "", NO_PERSIST );
469
470 const S32 MOVE_WIDTH = MOVE_BTN_FLY_RIGHT + 4;
471 const S32 MOVE_HEIGHT = MOVE_BTN_ROW3 + 4;
472 gSavedSettings.declareRect("FloaterMoveRect", LLRect(0, MOVE_HEIGHT, MOVE_WIDTH, 0), "Rectangle for avatar control window");
473
474 // 0 = never, 1 = fade, 2 = always
475 gSavedSettings.declareS32("RenderName", 2, "Controls display of names above avatars (0 = never, 1 = fade, 2 = always)");
476 gSavedSettings.declareF32("RenderNameShowTime", 10.f, "Fade avatar names after specified time (seconds)"); // seconds
477 gSavedSettings.declareF32("RenderNameFadeDuration", 1.f, "Time interval over which to fade avatar names (seconds)"); // seconds
478 gSavedSettings.declareBOOL("RenderNameHideSelf", FALSE, "Don't display own name above avatar");
479 gSavedSettings.declareBOOL("RenderHideGroupTitle", FALSE, "Don't show my group title in my name label");
480 gSavedSettings.declareBOOL("RenderGroupTitleAll", TRUE, "Show group titles in name labels");
481
482 // Camera widget controls
483 const S32 CAMERA_OFFSET = 64;
484 const S32 CAMERA_LEFT = MOVE_BTN_FLY_RIGHT + 10;
485 const S32 CAMERA_WIDTH = 16 + 64 + 16 + 64 + 16;
486 const S32 CAMERA_HEIGHT = 64;
487 gSavedSettings.declareRect("FloaterCameraRect",
488 LLRect(CAMERA_LEFT + CAMERA_OFFSET, CAMERA_HEIGHT + CAMERA_OFFSET, CAMERA_LEFT+CAMERA_WIDTH + CAMERA_OFFSET, 0 + CAMERA_OFFSET), "Rectangle for camera control window");
489
490 // Tool view
491 LLRect floater_tools_rect;
492 floater_tools_rect.setOriginAndSize(0, 300, TOOL_PANEL_WIDTH, 368);
493 //gSavedSettings.declareRect("FloaterToolsRect", floater_tools_rect, "[NOT USED]");
494 gSavedSettings.declareRect("ToolHelpRect", LLRect(8, TOOL_PANEL_HEIGHT-16, TOOL_PANEL_WIDTH -8, TOOL_PANEL_HEIGHT-16-16), "", NO_PERSIST); // relative to ToolPanelRect
495
496 gSavedSettings.declareRect("FloaterFriendsRect", LLRect(0, 400, 250, 0), "Rectangle for friends window");
497 gSavedSettings.declareRect("FloaterSnapshotRect", LLRect(0, 200, 200, 400), "Rectangle for snapshot window");
498
499 //gSavedSettings.declareRect("AccountHistoryRect", LLRect(100, 500, 500, 200), "[NOT USED]");
500
501 // Energy bar
502 //gSavedSettings.declareBOOL("ShowEnergyPanel", FALSE, "[NOT USED]");
503 gSavedSettings.declareS32("EnergyFromTop", 20, "", NO_PERSIST );
504 gSavedSettings.declareS32("EnergyWidth", 175, "", NO_PERSIST );
505 gSavedSettings.declareS32("EnergyHeight", 40, "", NO_PERSIST );
506
507 gSavedSettings.declareBOOL("UIFloaterTestBool", FALSE, "Example saved setting for the test floater");
508
509 //------------------------------------------------------------------------
510 // UI UUIDS
511 //------------------------------------------------------------------------
512 gSavedSettings.declareString("UIImgBtnCloseInactiveUUID", "779e4fa3-9b13-f74a-fba9-3886fe9c86ba", "", NO_PERSIST);
513 gSavedSettings.declareString("UIImgBtnCloseActiveUUID", "47a8c844-cd2a-4b1a-be01-df8b1612fe5d", "", NO_PERSIST);
514 gSavedSettings.declareString("UIImgBtnClosePressedUUID", "e5821134-23c0-4bd0-af06-7fa95b9fb01a", "", NO_PERSIST);
515
516 gSavedSettings.declareString("UIImgBtnMinimizeInactiveUUID","6e72abba-1378-437f-bf7a-f0c15f3e99a3", "", NO_PERSIST);
517 gSavedSettings.declareString("UIImgBtnMinimizeActiveUUID", "34c9398d-bb78-4643-9633-46a2fa3e9637", "", NO_PERSIST);
518 gSavedSettings.declareString("UIImgBtnMinimizePressedUUID", "39801651-26cb-4926-af57-7af9352c273c", "", NO_PERSIST);
519
520 gSavedSettings.declareString("UIImgBtnRestoreInactiveUUID", "0eafa471-70af-4882-b8c1-40a310929744", "", NO_PERSIST);
521 gSavedSettings.declareString("UIImgBtnRestoreActiveUUID", "111b39de-8928-4690-b7b2-e17d5c960277", "", NO_PERSIST);
522 gSavedSettings.declareString("UIImgBtnRestorePressedUUID", "90a0ed5c-2e7b-4845-9958-a64a1b30f312", "", NO_PERSIST);
523
524 gSavedSettings.declareString("UIImgBtnTearOffInactiveUUID", "74e1a96f-4833-a24d-a1bb-1bce1468b0e7", "", NO_PERSIST);
525 gSavedSettings.declareString("UIImgBtnTearOffActiveUUID", "74e1a96f-4833-a24d-a1bb-1bce1468b0e7", "", NO_PERSIST);
526 gSavedSettings.declareString("UIImgBtnTearOffPressedUUID", "d2524c13-4ba6-af7c-e305-8ac6cc18d86a", "", NO_PERSIST);
527
528 // Stay in IM after hitting return.
529 gSavedSettings.declareBOOL("PinTalkViewOpen", TRUE, "Stay in IM after hitting return");
530
531 // Close chat after hitting return.
532 gSavedSettings.declareBOOL("CloseChatOnReturn", FALSE, "Close chat after hitting return");
533
534 // Copy IM messages into chat history
535 gSavedSettings.declareBOOL("ContactsTornOff", FALSE, "Show contacts window separately from Communicate window.");
536 gSavedSettings.declareBOOL("ChatHistoryTornOff", FALSE, "Show chat history window separately from Communicate window.");
537 gSavedSettings.declareBOOL("IMInChatHistory", FALSE, "Copy IM into chat history");
538 gSavedSettings.declareBOOL("IMShowTimestamps", TRUE, "Show timestamps in IM");
539
540 // Has the user intentionally entered chatting mode, hence wanting the
541 // chat UI to be displayed, keyboard focus to go into chat, etc.
542 gSavedSettings.declareBOOL("ChatVisible", FALSE, "Chat bar is visible");
543
544 gSavedSettings.declareString("UIImgDirectionArrowUUID", "586383e8-4d9b-4fba-9196-2b5938e79c2c", "", NO_PERSIST);
545
546 gSavedSettings.declareString("UIImgResizeBottomRightUUID", "e3690e25-9690-4f6c-a745-e7dcd885285a", "", NO_PERSIST);
547
548 // Move buttons
549 gSavedSettings.declareString("UIImgBtnForwardOutUUID", "a0eb4021-1b20-4a53-892d-8faa9265a6f5", "", NO_PERSIST);
550 gSavedSettings.declareString("UIImgBtnForwardInUUID", "54197a61-f5d1-4c29-95d2-c071d08849cb", "", NO_PERSIST);
551 gSavedSettings.declareString("UIImgBtnSlideLeftOutUUID", "82476321-0374-4c26-9567-521535ab4cd7", "", NO_PERSIST);
552 gSavedSettings.declareString("UIImgBtnSlideLeftInUUID", "724996f5-b956-46f6-9844-4fcfce1d5e83", "", NO_PERSIST);
553 gSavedSettings.declareString("UIImgBtnLeftOutUUID", "13a93910-6b44-45eb-ad3a-4d1324c59bac", "", NO_PERSIST);
554 gSavedSettings.declareString("UIImgBtnLeftInUUID", "95463c78-aaa6-464d-892d-3a805b6bb7bf", "", NO_PERSIST);
555 gSavedSettings.declareString("UIImgBtnRightOutUUID", "5a44fd04-f52b-4c30-8b00-4a31e27614bd", "", NO_PERSIST);
556 gSavedSettings.declareString("UIImgBtnRightInUUID", "5e616d0d-4335-476f-9977-560bccd009da", "", NO_PERSIST);
557 gSavedSettings.declareString("UIImgBtnSlideRightOutUUID", "1fbe4e60-0607-44d1-a50a-032eff56ae75", "", NO_PERSIST);
558 gSavedSettings.declareString("UIImgBtnSlideRightInUUID", "7eeb57d2-3f37-454d-a729-8b217b8be443", "", NO_PERSIST);
559 gSavedSettings.declareString("UIImgBtnMoveUpInUUID", "49b4b357-e430-4b56-b9e0-05b8759c3c82", "", NO_PERSIST);
560 gSavedSettings.declareString("UIImgBtnMoveUpOutUUID", "f887146d-829f-4e39-9211-cf872b78f97c", "", NO_PERSIST);
561 gSavedSettings.declareString("UIImgBtnMoveDownInUUID", "b92a70b9-c841-4c94-b4b3-cee9eb460d48", "", NO_PERSIST);
562 gSavedSettings.declareString("UIImgBtnMoveDownOutUUID", "b5abc9fa-9e62-4e03-bc33-82c4c1b6b689", "", NO_PERSIST);
563
564// gSavedSettings.declareString("UIImgBtnPopupOutUUID", "f41ecdbf-e4b7-4eae-80fa-f0c842d85c1c");
565// gSavedSettings.declareString("UIImgBtnPopupInUUID", "432fd877-f2ad-45ce-8ae7-d1ced88462cb");
566
567 // Scrollbar
568 gSavedSettings.declareString("UIImgBtnScrollUpOutUUID", "dad084d7-9a46-452a-b0ff-4b9f1cefdde9", "", NO_PERSIST);
569 gSavedSettings.declareString("UIImgBtnScrollUpInUUID", "a93abdf3-27b5-4e22-a8fa-c48216cd2e3a", "", NO_PERSIST);
570 gSavedSettings.declareString("UIImgBtnScrollDownOutUUID", "b4ecdecf-5c8d-44e7-b882-17a77e88ed55", "", NO_PERSIST);
571 gSavedSettings.declareString("UIImgBtnScrollDownInUUID", "d2421bab-2eaf-4863-b8f6-5e4c52519247", "", NO_PERSIST);
572 gSavedSettings.declareString("UIImgBtnScrollLeftOutUUID", "43773e8d-49aa-48e0-80f3-a04715f4677a", "", NO_PERSIST);
573 gSavedSettings.declareString("UIImgBtnScrollLeftInUUID", "ea137a32-6718-4d05-9c22-7d570d27b2cd", "", NO_PERSIST);
574 gSavedSettings.declareString("UIImgBtnScrollRightOutUUID", "3d700d19-e708-465d-87f2-46c8c0ee7938", "", NO_PERSIST);
575 gSavedSettings.declareString("UIImgBtnScrollRightInUUID", "b749de64-e903-4c3c-ac0b-25fb6fa39cb5", "", NO_PERSIST);
576
577 gSavedSettings.declareString("UIImgBtnJumpLeftOutUUID", "3c18c87e-5f50-14e2-e744-f44734aa365f", "", NO_PERSIST);
578 gSavedSettings.declareString("UIImgBtnJumpLeftInUUID", "9cad3e6d-2d6d-107d-f8ab-5ba272b5bfe1", "", NO_PERSIST);
579 gSavedSettings.declareString("UIImgBtnJumpRightOutUUID", "ff9a71eb-7414-4cf8-866e-a701deb7c3cf", "", NO_PERSIST);
580 gSavedSettings.declareString("UIImgBtnJumpRightInUUID", "7dabc040-ec13-2309-ddf7-4f161f6de2f4", "", NO_PERSIST);
581
582 // Spin control
583 gSavedSettings.declareString("UIImgBtnSpinUpOutUUID", "56576e6e-6710-4e66-89f9-471b59122794", "", NO_PERSIST);
584 gSavedSettings.declareString("UIImgBtnSpinUpInUUID", "c8450082-96a0-4319-8090-d3ff900b4954", "", NO_PERSIST);
585 gSavedSettings.declareString("UIImgBtnSpinDownOutUUID", "b6d240dd-5602-426f-b606-bbb49a30726d", "", NO_PERSIST);
586 gSavedSettings.declareString("UIImgBtnSpinDownInUUID", "a985ac71-052f-48e6-9c33-d931c813ac92", "", NO_PERSIST);
587
588 // Radio button control
589 gSavedSettings.declareString("UIImgRadioActiveUUID", "7a1ba9b8-1047-4d1e-9cfc-bc478c80b63f", "", NO_PERSIST);
590 gSavedSettings.declareString("UIImgRadioActiveSelectedUUID", "52f09e07-5816-4052-953c-94c6c10479b7", "", NO_PERSIST);
591 gSavedSettings.declareString("UIImgRadioInactiveUUID", "90688481-67ff-4af0-be69-4aa084bcad1e", "", NO_PERSIST);
592 gSavedSettings.declareString("UIImgRadioInactiveSelectedUUID", "1975db39-aa29-4251-aea0-409ac09d414d", "", NO_PERSIST);
593
594 // Checkbox control
595 gSavedSettings.declareString("UIImgCheckboxActiveUUID", "05bb64ee-96fd-4243-b74e-f40a41bc53ba", "", NO_PERSIST);
596 gSavedSettings.declareString("UIImgCheckboxActiveSelectedUUID", "cf4a2ed7-1533-4686-9dde-df9a37ddca55", "", NO_PERSIST);
597 gSavedSettings.declareString("UIImgCheckboxInactiveUUID", "7d94cb59-32a2-49bf-a516-9e5a2045f9d9", "", NO_PERSIST);
598 gSavedSettings.declareString("UIImgCheckboxInactiveSelectedUUID", "c817c642-9abd-4236-9287-ae0513fe7d2b", "", NO_PERSIST);
599
600 // Tab panels
601 gSavedSettings.declareString("UIImgBtnTabTopPartialOutUUID", "932ad585-0e45-4a57-aa23-4cf81beeb7b0", "", NO_PERSIST);
602 gSavedSettings.declareString("UIImgBtnTabTopPartialInUUID", "7c6c6c26-0e25-4438-89bd-30d8b8e9d704", "", NO_PERSIST);
603 gSavedSettings.declareString("UIImgBtnTabBottomPartialOutUUID", "8dca716c-b29c-403a-9886-91c028357d6e", "", NO_PERSIST);
604 gSavedSettings.declareString("UIImgBtnTabBottomPartialInUUID", "eb0b0904-8c91-4f24-b500-1180b91140de", "", NO_PERSIST);
605 gSavedSettings.declareString("UIImgBtnTabTopOutUUID", "1ed83f57-41cf-4052-a3b4-2e8bb78d8191", "", NO_PERSIST);
606 gSavedSettings.declareString("UIImgBtnTabTopInUUID", "16d032e8-817b-4368-8a4e-b7b947ae3889", "", NO_PERSIST);
607 gSavedSettings.declareString("UIImgBtnTabBottomOutUUID", "bf0a8779-689b-48c3-bb9a-6af546366ef4", "", NO_PERSIST);
608 gSavedSettings.declareString("UIImgBtnTabBottomInUUID", "c001d8fd-a869-4b6f-86a1-fdcb106df9c7", "", NO_PERSIST);
609
610 // Tools
611 // TODO: Move to gViewerArt
612 gSavedSettings.declareString("UIImgGrabUUID", "c63f124c-6340-4fbf-b59e-0869a44adb64", "", NO_PERSIST);
613 gSavedSettings.declareString("UIImgGrabSelectedUUID", "c1e21504-f136-451d-b8e9-929037812f1d", "", NO_PERSIST);
614
615 gSavedSettings.declareString("UIImgMoveUUID", "2fa5dc06-bcdd-4e09-a426-f9f262d4fa65", "", NO_PERSIST);
616 gSavedSettings.declareString("UIImgMoveSelectedUUID", "46f17c7b-8381-48c3-b628-6a406e060dd6", "", NO_PERSIST);
617
618 gSavedSettings.declareString("UIImgRotateUUID", "c34b1eaa-aae3-4351-b082-e26c0b636779", "", NO_PERSIST);
619 gSavedSettings.declareString("UIImgRotateSelectedUUID", "cdfb7fde-0d13-418a-9d89-2bd91019fc95", "", NO_PERSIST);
620
621 gSavedSettings.declareString("UIImgScaleUUID", "88a90fef-b448-4883-9344-ecf378a60433", "", NO_PERSIST);
622 gSavedSettings.declareString("UIImgScaleSelectedUUID", "55aa57ef-508a-47f7-8867-85d21c5a810d", "", NO_PERSIST);
623
624 gSavedSettings.declareString("UIImgFaceUUID", "ce15fd63-b0b6-463c-a37d-ea6393208b3e", "", NO_PERSIST);
625 gSavedSettings.declareString("UIImgFaceSelectedUUID", "b4870163-6208-42a9-9801-93133bf9a6cd", "", NO_PERSIST);
626
627 gSavedSettings.declareString("UIImgFocusUUID", "57bc39d1-288c-4519-aea6-6d1786a5c274", "", NO_PERSIST);
628 gSavedSettings.declareString("UIImgFocusSelectedUUID", "ab6a730e-ddfd-4982-9a32-c6de3de6d31d", "", NO_PERSIST);
629
630 gSavedSettings.declareString("UIImgCreateUUID", "7a0b1bdb-b5d9-4df5-bac2-ba230da93b5b", "", NO_PERSIST);
631 gSavedSettings.declareString("UIImgCreateSelectedUUID", "0098b015-3daf-4cfe-a72f-915369ea97c2", "", NO_PERSIST);
632
633 // Gun Tool texures
634 gSavedSettings.declareBOOL("ShowCrosshairs", TRUE, "Display crosshairs when in mouselook mode");
635 gSavedSettings.declareString("UIImgCrosshairsUUID", "6e1a3980-bf2d-4274-8970-91e60d85fb52", "Image to use for crosshair display (UUID texture reference)");
636
637 gSavedSettings.declareString("Language", "default", "Language specifier (for XUI)" );
638 gSavedSettings.declareString("SystemLanguage", "en-us", "Language indicated by system settings (for XUI)" );
639
640 /////////////////////////////////////////////////
641 // Other booleans
642 gSavedSettings.declareBOOL("DebugPermissions", FALSE, "Log permissions for selected inventory items");
643
644 gSavedSettings.declareBOOL("ApplyColorImmediately", TRUE, "Preview selections in color picker immediately");
645 gSavedSettings.declareBOOL("ApplyTextureImmediately", TRUE, "Preview selections in texture picker immediately");
646
647 gSavedSettings.declareBOOL("CreateToolKeepSelected", FALSE, "After using create tool, keep the create tool active");
648 gSavedSettings.declareBOOL("CreateToolCopySelection", FALSE, "", NO_PERSIST);
649 gSavedSettings.declareBOOL("CreateToolCopyCenters", TRUE, "", NO_PERSIST);
650 gSavedSettings.declareBOOL("CreateToolCopyRotates", FALSE, "", NO_PERSIST);
651
652 gSavedSettings.declareBOOL("QuietSnapshotsToDisk", FALSE, "Take snapshots to disk without playing animation or sound");
653 gSavedSettings.declareBOOL("DisableCameraConstraints", FALSE, "Disable the normal bounds put on the camera by avatar position");
654
655 //gSavedSettings.declareBOOL("LogTimestamps", FALSE, "[NOT USED]");
656 //gSavedSettings.declareBOOL("AgentUpdateMouseQuery", FALSE, "[NOT USED]");
657 gSavedSettings.declareBOOL("AutoLogin", FALSE, "Login automatically using last username/password combination");
658 gSavedSettings.declareBOOL("LoginAsGod", FALSE, "Attempt to login with god powers (Linden accounts only)");
659 //gSavedSettings.declareBOOL("CameraFromPelvis", FALSE, "[NOT USED]");
660 gSavedSettings.declareBOOL("CameraOffset", FALSE, "Render with camera offset from view frustum (rendering debug)");
661 //gSavedSettings.declareBOOL("DynamicNearClip", TRUE, "[NOT USED]");
662 gSavedSettings.declareBOOL("AnimationDebug", FALSE, "Show active animations in a bubble above avatars head");
663 gSavedSettings.declareBOOL("DisplayAvatarAgentTarget", FALSE, "Show avatar positioning locators (animation debug)");
664 //gSavedSettings.declareBOOL("DisplaySkeletons", TRUE, "[NOT USED]");
665 gSavedSettings.declareBOOL("DisplayTimecode", FALSE, "Display timecode on screen");
666 //gSavedSettings.declareBOOL("Drone", FALSE, "[NOT USED]");
667 gSavedSettings.declareBOOL("DisableRendering", FALSE, "Disable GL rendering and GUI (load testing)");
668 //gSavedSettings.declareBOOL("DumpPolyMeshTable", FALSE, "[NOT USED]");
669 //gSavedSettings.declareBOOL("LimitAvatarToValidRegions", TRUE, "[NOT USED]");
670 gSavedSettings.declareBOOL("VerboseLogs", FALSE, "Display source file and line number for each log item for debugging purposes");
671 gSavedSettings.declareBOOL("FirstPersonAvatarVisible", FALSE, "Display avatar and attachments below neck while in mouselook");
672 gSavedSettings.declareBOOL("ShowNearClip", FALSE, "", NO_PERSIST);
673 gSavedSettings.declareBOOL("DebugWindowProc", FALSE, "Log windows messages");
674 gSavedSettings.declareBOOL("ShowTangentBasis", FALSE, "Render normal and binormal (debugging bump mapping)");
675 gSavedSettings.declareBOOL("AnimateTextures", TRUE, "Enable texture animation (debug)");
676
677 // Selection stuff
678 gSavedSettings.declareBOOL("LimitSelectDistance", TRUE, "Disallow selection of objects beyond max select distance");
679 gSavedSettings.declareF32( "MaxSelectDistance", 64.f, "Maximum allowed selection distance (meters from avatar)");
680 gSavedSettings.declareBOOL("LimitDragDistance", TRUE, "Limit translation of object via translate tool");
681 gSavedSettings.declareF32( "MaxDragDistance", 48.f, "Maximum allowed translation distance in a single operation of translate tool (meters from start point)");
682 gSavedSettings.declareBOOL( "SelectOwnedOnly", FALSE, "Select only objects you own" );
683 gSavedSettings.declareBOOL( "SelectMovableOnly", FALSE, "Select only objects you can move" );
684 gSavedSettings.declareBOOL( "RectangleSelectInclusive", TRUE, "Select objects that have at least one vertex inside selection rectangle" );
685 gSavedSettings.declareBOOL( "RenderHiddenSelections", TRUE, "Show selection lines on objects that are behind other objects" );
686 gSavedSettings.declareBOOL( "RenderLightRadius", FALSE, "Render the radius of selected lights" );
687
688 gSavedSettings.declareF32("SelectionHighlightThickness", 0.010f, "Thickness of selection highlight line (fraction of view distance)");
689 gSavedSettings.declareF32("SelectionHighlightUScale", 0.1f, "Scale of texture display on selection highlight line (fraction of texture size)");
690 gSavedSettings.declareF32("SelectionHighlightVScale", 1.f, "Scale of texture display on selection highlight line (fraction of texture size)");
691 gSavedSettings.declareF32("SelectionHighlightAlpha", 0.40f, "Opacity of selection highlight (0.0 = completely transparent, 1.0 = completely opaque)" );
692 gSavedSettings.declareF32("SelectionHighlightAlphaTest", 0.1f, "Alpha value below which pixels are displayed on selection highlight line (0.0 = show all pixels, 1.0 = show now pixels)");
693 gSavedSettings.declareF32("SelectionHighlightUAnim", 0.f, "Rate at which texture animates along U direction in selection highlight line (fraction of texture per second)");
694 gSavedSettings.declareF32("SelectionHighlightVAnim", 0.5f, "Rate at which texture animates along V direction in selection highlight line (fraction of texture per second)");
695
696 gSavedSettings.declareBOOL("LogMessages", FALSE, "Log network traffic");
697 gSavedSettings.declareBOOL("MouseSun", FALSE, "", NO_PERSIST);
698
699 gSavedSettings.declareBOOL("ShowAxes", FALSE, "Render coordinate frame at your position");
700
701 gSavedSettings.declareBOOL("ShowMiniMap", TRUE, "Display mini map on login");
702 gSavedSettings.declareBOOL("ShowWorldMap", FALSE, "Display world map on login");
703 gSavedSettings.declareBOOL("ShowToolBar", TRUE, "Show toolbar at bottom of screen");
704 gSavedSettings.declareBOOL("ShowCameraControls", FALSE, "Display camera controls on login");
705 gSavedSettings.declareBOOL("ShowMovementControls", FALSE, "Display movement controls on login");
706
707 gSavedSettings.declareBOOL("ShowLeaders", FALSE, "", NO_PERSIST);
708 gSavedSettings.declareBOOL("ShowDirectory", FALSE, "", NO_PERSIST);
709
710 gSavedSettings.declareBOOL("AutoLoadWebProfiles", FALSE, "Automatically load ALL profile webpages without asking first.");
711
712 gSavedSettings.declareBOOL("ShowCommunicate", FALSE, "", NO_PERSIST);
713 gSavedSettings.declareBOOL("ShowChatHistory", FALSE, "", NO_PERSIST);
714
715#ifdef LL_RELEASE_FOR_DOWNLOAD
716 gSavedSettings.declareBOOL("ShowConsoleWindow", FALSE, "Show log in separate OS window");
717#else
718 gSavedSettings.declareBOOL("ShowConsoleWindow", TRUE, "Show log in separate OS window");
719#endif
720
721 // These are ignorable warnings
722
723 gSavedSettings.addWarning("AboutDirectX9");
724 gSavedSettings.addWarning("AboutBadPCI");
725 gSavedSettings.addWarning("AboutOldGraphicsDriver");
726 gSavedSettings.addWarning("AboutPCIGraphics");
727 gSavedSettings.addWarning("ReturnToOwner");
728 gSavedSettings.addWarning("QuickTimeInstalled");
729 gSavedSettings.addWarning("BrowserLaunch");
730 gSavedSettings.addWarning("DeedObject");
731 gSavedSettings.addWarning("NewClassified");
732
733 // These are warnings that appear on the first experience of that condition.
734
735 LLFirstUse::addConfigVariable("FirstBalanceIncrease");
736 LLFirstUse::addConfigVariable("FirstBalanceDecrease");
737 LLFirstUse::addConfigVariable("FirstSit");
738 LLFirstUse::addConfigVariable("FirstMap");
739 LLFirstUse::addConfigVariable("FirstGoTo");
740 LLFirstUse::addConfigVariable("FirstBuild");
741 LLFirstUse::addConfigVariable("FirstLeftClickNoHit");
742 LLFirstUse::addConfigVariable("FirstTeleport");
743 LLFirstUse::addConfigVariable("FirstOverrideKeys");
744 LLFirstUse::addConfigVariable("FirstAttach");
745 LLFirstUse::addConfigVariable("FirstAppearance");
746 LLFirstUse::addConfigVariable("FirstInventory");
747 LLFirstUse::addConfigVariable("FirstSandbox");
748 LLFirstUse::addConfigVariable("FirstFlexible");
749 LLFirstUse::addConfigVariable("FirstDebugMenus");
750 LLFirstUse::addConfigVariable("FirstStreamingMusic");
751 LLFirstUse::addConfigVariable("FirstStreamingVideo");
752 LLFirstUse::addConfigVariable("FirstSculptedPrim");
753 LLFirstUse::addConfigVariable("FirstVoice");
754 LLFirstUse::addConfigVariable("FirstMedia");
755
756 gSavedSettings.declareBOOL("ShowDebugConsole", FALSE, "Show log in SL window");
757 gSavedSettings.declareBOOL("ShowDebugStats", FALSE, "Show performance stats display");
758 gSavedSettings.declareBOOL("OpenDebugStatBasic", TRUE, "Expand basic performance stats display");
759 gSavedSettings.declareBOOL("OpenDebugStatAdvanced", FALSE, "Expand advanced performance stats display");
760 gSavedSettings.declareBOOL("OpenDebugStatNet", TRUE, "Expand network stats display");
761 gSavedSettings.declareBOOL("OpenDebugStatRender", TRUE, "Expand render stats display");
762 gSavedSettings.declareBOOL("OpenDebugStatSim", TRUE, "Expand simulator performance stats display");
763 gSavedSettings.declareBOOL("ShowDepthBuffer", FALSE, "Show depth buffer contents");
764
765 gSavedSettings.declareBOOL("DebugShowTime", FALSE, "Show depth buffer contents");
766 gSavedSettings.declareBOOL("DebugShowRenderInfo", FALSE, "Show depth buffer contents");
767 gSavedSettings.declareBOOL("DebugShowColor", FALSE, "Show color under cursor");
768
769// gSavedSettings.declareBOOL("ShowHUD", TRUE);
770 //gSavedSettings.declareBOOL("ShowHUDText", TRUE, "[NOT USED]");
771 //gSavedSettings.declareBOOL("ShowHeadlight", FALSE, "[NOT USED]");
772 //gSavedSettings.declareBOOL("ShowLand", TRUE, "[NOT USED]");
773// gSavedSettings.declareBOOL("ShowMove", TRUE);
774 //gSavedSettings.declareBOOL("SurfaceDetail", TRUE, "[NOT USED]");
775 //gSavedSettings.declareBOOL("ShowObjectBounds", FALSE, "[NOT USED]");
776 //gSavedSettings.declareBOOL("ShowObjectEdit", FALSE, "[NOT USED]");
777 gSavedSettings.declareBOOL("ShowObjectUpdates", FALSE, "Show when update messages are received for individual objects");
778 //gSavedSettings.declareBOOL("ShowObjects", TRUE, "[NOT USED]");
779 //gSavedSettings.declareBOOL("ShowRegions", FALSE, "[NOT USED]");
780// gSavedSettings.declareBOOL("ShowTalk", TRUE);
781 //gSavedSettings.declareBOOL("ShowTimerBar", FALSE, "[NOT USED]");
782 //gSavedSettings.declareBOOL("ShowWater", FALSE, "[NOT USED]");
783 gSavedSettings.declareBOOL("SpeedTest", FALSE, "Performance testing mode, no network");
784 //gSavedSettings.declareBOOL("TempMouseLook", FALSE, "[NOT USED]");
785 gSavedSettings.declareBOOL("UseEnergy", TRUE, "", NO_PERSIST);
786// gSavedSettings.declareBOOL("UseFirstPersonDrag", FALSE);
787 //gSavedSettings.declareBOOL("UseLighting", TRUE, "[NOT USED]");
788 //gSavedSettings.declareBOOL("UseWireframe", FALSE, NO_PERSIST);
789 gSavedSettings.declareBOOL("VelocityInterpolate", TRUE, "Extrapolate object motion from last packet based on received velocity");
790 gSavedSettings.declareBOOL("PingInterpolate", FALSE, "Extrapolate object position along velocity vector based on ping delay");
791 gSavedSettings.declareBOOL("AvatarBacklight", TRUE, "Add rim lighting to avatar rendering to approximate shininess of skin");
792
793 // Startup stuff
794 gSavedSettings.declareF32("PrecachingDelay", 6.f, "Delay when logging in to load world before showing it (seconds)"); // seconds
795
796 // Rendering stuff
797 gSavedSettings.declareBOOL("RenderCubeMap", TRUE, "Whether we can render the cube map or not");
798 gSavedSettings.declareF32("RenderGamma", 0.f, "Sets gamma exponent for renderer");
799 gSavedSettings.declareBOOL("RenderWater", TRUE, "Display water" );
800 gSavedSettings.declareF32( "RenderFarClip", 256.f, "Distance of far clip plane from camera (meters)" );
801 gSavedSettings.declareBOOL( "RenderUseFarClip", TRUE, "If false, frustum culling will ignore far clip plane.");
802 gSavedSettings.declareF32( "RenderFogRatio", 4.0f, "Distance from camera where fog reaches maximum density (fraction or multiple of far clip distance)");
803 gSavedSettings.declareBOOL("RenderAnisotropic", FALSE, "Render textures using anisotropic filtering" );
804 gSavedSettings.declareBOOL("ShowXUINames", FALSE, "Display XUI Names as Tooltips" );
805 gSavedSettings.declareS32("RenderLightingDetail", 1, "Amount of detail for lighting objects/avatars/terrain (0=sun/moon only, 1=enable local lights)" );
806 gSavedSettings.declareS32("RenderTerrainDetail", 2, "Detail applied to terrain texturing (0 = none, 1 or 2 = full)" );
807 gSavedSettings.declareBOOL("RenderDynamicLOD", TRUE, "Dynamically adjust level of detail.");
808 gSavedSettings.declareF32( "RenderVolumeLODFactor", 1.f, "Controls level of detail of primitives (multiplier for current screen area when calculated level of detail)" );
809 gSavedSettings.declareF32( "RenderFlexTimeFactor", 1.f, "Controls level of detail of flexible objects (multiplier for amount of time spent processing flex objects)" );
810 gSavedSettings.declareF32( "RenderTreeLODFactor", 0.5f, "Controls level of detail of vegetation (multiplier for current screen area when calculated level of detail)" );
811 gSavedSettings.declareF32( "RenderAvatarLODFactor", 0.5f, "Controls level of detail of avatars (multiplier for current screen area when calculated level of detail)" );
812 gSavedSettings.declareF32( "RenderTerrainLODFactor", 1.0f, "Controls level of detail of terrain (multiplier for current screen area when calculated level of detail)" );
813 gSavedSettings.declareF32( "RenderBumpmapMinDistanceSquared", 100.f, "Maximum distance at which to render bumpmapped primitives (distance in meters, squared)" );
814 gSavedSettings.declareS32( "RenderMaxPartCount", 4096, "Maximum number of particles to display on screen");
815 gSavedSettings.declareBOOL("RenderVBOEnable", TRUE, "Use GL Vertex Buffer Objects" );
816 gSavedSettings.declareS32("RenderMaxVBOSize", 32, "Maximum size of a vertex buffer (in KB).");
817 gSavedSettings.declareS32("RenderReflectionRes", 64, "Reflection map resolution.");
818 //gSavedSettings.declareBOOL("RenderUseTriStrips", FALSE, "[NOT USED]");
819 //gSavedSettings.declareBOOL("RenderCullBySize", FALSE, "[NOT USED]" );
820 gSavedSettings.declareF32("RenderTerrainScale", 12.f, "Terrain detail texture scale");
821 gSavedSettings.declareBOOL("VertexShaderEnable", FALSE, "Enable/disable all GLSL shaders (debug)");
822 gSavedSettings.declareBOOL("RenderInitError", FALSE, "Error occured while initializing GL");
823
824 gSavedSettings.declareBOOL("RenderWaterMipNormal", TRUE, "Use mip maps for water normal map.");
825 gSavedSettings.declareBOOL("RenderDynamicReflections", FALSE, "Generate a dynamic cube map for reflections (objects reflect their environment, experimental).");
826 gSavedSettings.declareBOOL("RenderWaterReflections", FALSE, "Reflect the environment in the water.");
827 gSavedSettings.declareS32("RenderReflectionDetail", 2, "Detail of reflection render pass.");
828 gSavedSettings.declareBOOL("RenderGammaFull", TRUE, "Use fully controllable gamma correction, instead of faster, hard-coded gamma correction of 2.");
829
830 gSavedSettings.declareBOOL("RenderGlow", TRUE, "Render bloom post effect.");
831 gSavedSettings.declareF32("RenderGlowStrength", 0.35f, "Additive strength of glow");
832 gSavedSettings.declareF32("RenderGlowWidth", 1.3f, "Glow sample size (higher = wider and softer but eventually more pixelated");
833 gSavedSettings.declareS32("RenderGlowIterations", 2, "Number of times to iterate the glow (higher = wider and smoother but slower)");
834 gSavedSettings.declareS32("RenderGlowResolutionPow", 9, "Glow map resolution power of two.");
835 gSavedSettings.declareF32("RenderGlowMinLuminance", 1.0f, "Min luminance intensity necessary to consider an object bright enough to automatically glow. (Gets clamped to 0 - 1.0 range)");
836 gSavedSettings.declareF32("RenderGlowMaxExtractAlpha", 0.065f, "Max glow alpha value for brightness extraction to auto-glow.");
837
838 gSavedSettings.declareVec3("RenderGlowLumWeights", LLVector3(0.299f, 0.587f, 0.114f), "Weights for each color channel to be used in calculating luminance (should add up to 1.0)");
839
840 gSavedSettings.declareVec3("RenderGlowWarmthWeights", LLVector3(1.0f, 0.5f, 0.7f), "Weight of each color channel used before finding the max warmth");
841
842 gSavedSettings.declareF32("RenderGlowWarmthAmount", 0.f, "Amount of warmth extraction to use (versus luminance extraction). 0 = lum, 1.0 = warmth");
843
844 gSavedSettings.declareS32("RenderWaterRefResolution", 512, "Water planar reflection resolution.");
845 gSavedSettings.declareBOOL("RenderObjectBump", TRUE, "Show bumpmapping on primitives");
846 gSavedSettings.declareBOOL("RenderAvatarCloth", 1, "Controls if avatars use wavy cloth");
847 gSavedSettings.declareBOOL("RenderAvatarVP", TRUE, "Use vertex programs to perform hardware skinning of avatar");
848 gSavedSettings.declareS32("RenderAvatarMaxVisible", 35, "Maximum number of avatars to display at any one time");
849 //gSavedSettings.declareBOOL("RenderForceGetTexImage", FALSE, "[NOT USED]");
850 gSavedSettings.declareBOOL("RenderFastUI", FALSE, "[NOT USED]");
851 gSavedSettings.declareS32("DebugBeaconLineWidth", 1, "Size of lines for Debug Beacons");
852
853 gSavedSettings.declareBOOL("RenderCustomSettings", 0, "Do you want to set the graphics settings yourself");
854 gSavedSettings.declareU32("RenderQualityPerformance", 1, "Which graphics settings you've chosen");
855
856 gSavedSettings.declareBOOL("RenderUseShaderLOD", TRUE, "Whether we want to have different shaders for LOD" );
857 gSavedSettings.declareF32("RenderShaderLODThreshold", 1.0f, "Fraction of draw distance defining the switch to a different shader LOD");
858 gSavedSettings.declareBOOL("RenderUseShaderNearParticles", FALSE, "Whether we want to use shaders on near particles" );
859 gSavedSettings.declareF32("RenderShaderParticleThreshold", 0.25f, "Fraction of draw distance to not use shader on particles");
860 gSavedSettings.declareBOOL("RenderUseFBO", FALSE, "Whether we want to use GL_EXT_framebuffer_objects.");
861 gSavedSettings.declareBOOL("RenderUseImpostors", TRUE, "Whether we want to use impostors for far away avatars.");
862 gSavedSettings.declareBOOL("RenderAppleUseMultGL", FALSE, "Whether we want to use multi-threaded OpenGL on Apple hardware (requires restart of SL).");
863 gSavedSettings.declareF32("RenderSunDynamicRange", 1.0f, "Defines what percent brighter the sun is than local point lights (1.0 = 100% brighter. Value should not be less than 0. ).");
864 gSavedSettings.declareBOOL("RenderUseCleverUI", FALSE, "Turns on the \"clever\" UI rendering optimization. It's a known performace gain (and enabled by default) on apple.");
865
866 //debug render stuff
867 gSavedSettings.declareBOOL("RenderDebugTextureBind", FALSE, "Enable texture bind performance test.");
868
869 // Snapshot params
870 gSavedSettings.declareBOOL("RenderUIInSnapshot", FALSE, "Display user interface in snapshot" );
871 gSavedSettings.declareBOOL("RenderHUDInSnapshot", FALSE, "Display HUD attachments in snapshot" );
872 gSavedSettings.declareBOOL("HighResSnapshot", FALSE, "Double resolution of snapshot from current window resolution" );
873 gSavedSettings.declareBOOL("CompressSnapshotsToDisk", FALSE, "Compress snapshots saved to disk (Using JPEG 2000)" );
874 gSavedSettings.declareBOOL("FreezeTime", FALSE, "", FALSE );
875 gSavedSettings.declareBOOL("UseFreezeFrame", FALSE, "Freeze time when taking snapshots.");
876 gSavedSettings.declareBOOL("CloseSnapshotOnKeep", TRUE, "Close snapshot window after saving snapshot" );
877 gSavedSettings.declareBOOL("KeepAspectForSnapshot", TRUE, "Use full window when taking snapshot, regardless of requested image size" );
878 gSavedSettings.declareBOOL("AutoSnapshot", FALSE, "Update snapshot when camera stops moving, or any parameter changes" );
879 gSavedSettings.declareBOOL("AdvanceSnapshot", FALSE, "Display advanced parameter settings in snaphot interface" );
880 gSavedSettings.declareS32("LastSnapshotType", 0, "Select this as next type of snapshot to take (0 = postcard, 1 = texture, 2 = local image)" );
881 gSavedSettings.declareS32("LastSnapshotWidth", 1024, "The width of the last snapshot, in px" );
882 gSavedSettings.declareS32("LastSnapshotHeight", 768, "The height of the last snapshot, in px" );
883
884 gSavedSettings.declareS32("SnapshotPostcardLastResolution", 0, "Take next postcard snapshot at this resolution" );
885 gSavedSettings.declareS32("SnapshotTextureLastResolution", 0, "Take next texture snapshot at this resolution" );
886 gSavedSettings.declareS32("SnapshotLocalLastResolution", 0, "Take next local snapshot at this resolution" );
887 gSavedSettings.declareS32("SnapshotQuality", 75, "Quality setting of postcard JPEGs (0 = worst, 100 = best)" );
888
889 gSavedSettings.declareBOOL("DisableVerticalSync", TRUE, "Update frames as fast as possible (FALSE = update frames between display scans)" );
890
891 // Statistics stuff
892 gSavedSettings.declareBOOL("StatsAutoRun", FALSE, "Play back autopilot");
893 gSavedSettings.declareS32("StatsNumRuns", -1, "Loop autopilot playback this number of times");
894 //gSavedSettings.declareBOOL("StatsContinuousLoop", FALSE, "[NOT USED]");
895 gSavedSettings.declareBOOL("StatsQuitAfterRuns", FALSE, "Quit application after this number of autopilot playback runs");
896 gSavedSettings.declareBOOL("StatsSessionTrackFrameStats", FALSE, "Track rendering and network statistics");
897 gSavedSettings.declareString("StatsPilotFile", "pilot.txt", "Filename for stats logging autopilot path");
898 gSavedSettings.declareString("StatsSummaryFile", "fss.txt", "Filename for stats logging summary");
899 gSavedSettings.declareString("StatsFile", "fs.txt", "Filename for stats logging output");
900
901 // Image pipeline stuff
902 gSavedSettings.declareS32("TextureMemory", 0, "Amount of memory to use for textures in MB (0 = autodetect)"); // default to auto-detect
903 //gSavedSettings.declareS32("ImageRadioTexMem", 0, "Texture memory allocation (0 = <512 megabytes system RAM, 1 = >512 megabytes system RAM)");
904 //gSavedSettings.declareS32("ImageRadioVidCardMem", 1, "Video card onboard memory (0 = 16MB, 1 = 32MB, 2 = 64MB, 3 = 128MB, 4 = 256MB, 5 = 512MB)");
905 //gSavedSettings.declareU32("LastRAMDetected", 0, "[DO NOT MODIFY] Detected system memory (bytes)"); // used to detect RAM changes
906 gSavedSettings.declareBOOL("ImagePipelineUseHTTP", FALSE, "If TRUE use HTTP GET to fetch textures from the server");
907
908 // Image compression
909 gSavedSettings.declareBOOL("LosslessJ2CUpload", FALSE, "Use lossless compression for small image uploads");
910
911 // Threading
912 gSavedSettings.declareBOOL("RunMultipleThreads", FALSE, "If TRUE keep background threads active during render");
913
914 // Cooperative Multitasking
915 gSavedSettings.declareS32("BackgroundYieldTime", 40, "Amount of time to yield every frame to other applications when SL is not the foreground window (milliseconds)");
916
917 // Camera control
918 gSavedSettings.declareBOOL("AutoPilotLocksCamera", FALSE, "Keep camera position locked when avatar walks to selected position");
919 //gSavedSettings.declareBOOL("AvatarLooksAtCamera", TRUE, "[NOT USED]");
920 //gSavedSettings.declareF32("FlyHeightOffGround", 1.f, "[NOT USED]");
921 gSavedSettings.declareF32("DynamicCameraStrength", 2.f, "Amount camera lags behind avatar motion (0 = none, 30 = avatar velocity)");
922
923 gSavedSettings.declareVec3("CameraOffsetBuild", LLVector3(-6.0f, 0, 6.0f), "Default camera position relative to focus point when entering build mode");
924 gSavedSettings.declareVec3("CameraOffsetDefault", LLVector3(-3.0f, 0, 0.75f), "Default camera offset from avatar");
925 //gSavedSettings.declareVec3("CameraOffsetDefault", LLVector3(-3.0f, 0, 1.5f));
926
927 //gSavedSettings.declareVec3("FocusOffsetBuild", LLVector3(4, 0, 0), "[NOT USED]");
928 gSavedSettings.declareVec3("FocusOffsetDefault", LLVector3(1, 0, 1), "Default focus point offset relative to avatar (x-axis is forward)");
929 gSavedSettings.declareBOOL("TrackFocusObject", TRUE, "Camera tracks last object zoomed on");
930 gSavedSettings.declareBOOL("CameraMouseWheelZoom", TRUE, "Camera zooms in and out with mousewheel");
931
932 gSavedSettings.declareVec3d("FocusPosOnLogout", LLVector3d(0, 0, 0), "Camera focus point when last logged out (global coordinates)");
933 gSavedSettings.declareVec3d("CameraPosOnLogout", LLVector3d(0, 0, 0), "Camera position when last logged out (global coordinates)");
934
935 // Terrain coloring
936 // JC 8/28/2002 - Adjusted to make the beta farm look good, with
937 // 20 meter water height. Talk with me before changing these.
938 gSavedSettings.declareF32("TerrainColorStartHeight", 20.f, "Starting altitude for terrain texturing (meters)"); // -1 to 1
939 gSavedSettings.declareF32("TerrainColorHeightRange", 60.f, "Altitude range over which a given terrain texture has effect (meters)"); // max land height
940
941 // Avatar stuff
942 gSavedSettings.declareF32("PitchFromMousePosition", 90.f, "Vertical range over which avatar head tracks mouse position (degrees of head rotation from top of window to bottom)");
943 gSavedSettings.declareF32("YawFromMousePosition", 90.f, "Horizontal range over which avatar head tracks mouse position (degrees of head rotation from left of window to right)");
944 gSavedSettings.declareF32("ZoomTime", 0.4f, "Time of transition between different camera modes (seconds)");
945 gSavedSettings.declareS32("AvatarCompositeLimit", 5, "Maximum number of avatars to display appearance changes on the fly");
946
947 // Default throttle
948 // These must also be changed in llviewerthrottle.h
949 // Currently matches BW_PRESET_300
950 gSavedSettings.declareF32("ThrottleBandwidthKBPS", 500.f, "Maximum allowable downstream bandwidth (kilo bits per second)");
951
952 gSavedSettings.declareBOOL("ConnectionPortEnabled", FALSE, "Use the custom connection port?");
953 gSavedSettings.declareU32("ConnectionPort", 13000, "Custom connection port number");
954
955 // File xfer throttle
956 gSavedSettings.declareF32("XferThrottle", 150000.f, "Maximum allowable downstream bandwidth for asset transfers (bits per second)");
957
958 //gSavedSettings.declareS32("BWRadio", 0, "[NOT USED]");
959
960 gSavedSettings.declareRect("ChatterboxRect", LLRect(0, 400, 350, 0), "Rectangle for chatterbox window");
961 gSavedSettings.declareRect("FloaterActiveSpeakersRect", LLRect(0, 300, 250, 0), "Rectangle for active speakers window");
962
963 // Avatar customizing floaters
964 gSavedSettings.declareRect("FloaterCustomizeAppearanceRect", LLRect(0, 540, 494, 0), "Rectangle for avatar customization window");
965
966 // Build options floater
967 gSavedSettings.declareRect("FloaterBuildOptionsRect", LLRect(0,0,0,0), "Rectangle for build options window.");
968
969 gSavedSettings.declareRect("FloaterJoystickRect", LLRect(0,0,0,0), "Rectangle for joystick controls window.");
970
971 // Map floater
972 gSavedSettings.declareRect("FloaterMiniMapRect", LLRect(0, 225, 200, 0), "Rectangle for world map");
973
974 //Lag-o-Meter floater
975 gSavedSettings.declareRect("FloaterLagMeter", LLRect(0, 142, 350, 0), "Rectangle for lag meter");
976 gSavedSettings.declareBOOL("LagMeterShrunk", FALSE, "Last large/small state for lag meter");
977
978 gSavedSettings.declareF32("MapScale", 128.f, "World map zoom level (pixels per region)");
979
980 gSavedSettings.declareF32("MiniMapScale", 128.f, "Miniature world map zoom levle (pixels per region)");
981
982 gSavedSettings.declareBOOL("MiniMapRotate", TRUE, "Rotate miniature world map to avatar direction");
983
984 gSavedSettings.declareString("UIImgBtnPanUpOutUUID", "47a8c844-cd2a-4b1a-be01-df8b1612fe5d", "", NO_PERSIST);
985 gSavedSettings.declareString("UIImgBtnPanUpInUUID", "e5821134-23c0-4bd0-af06-7fa95b9fb01a", "", NO_PERSIST);
986 gSavedSettings.declareString("UIImgBtnPanDownOutUUID", "47a8c844-cd2a-4b1a-be01-df8b1612fe5d", "", NO_PERSIST);
987 gSavedSettings.declareString("UIImgBtnPanDownInUUID", "e5821134-23c0-4bd0-af06-7fa95b9fb01a", "", NO_PERSIST);
988 gSavedSettings.declareString("UIImgBtnPanLeftOutUUID", "47a8c844-cd2a-4b1a-be01-df8b1612fe5d", "", NO_PERSIST);
989 gSavedSettings.declareString("UIImgBtnPanLeftInUUID", "e5821134-23c0-4bd0-af06-7fa95b9fb01a", "", NO_PERSIST);
990 gSavedSettings.declareString("UIImgBtnPanRightOutUUID", "47a8c844-cd2a-4b1a-be01-df8b1612fe5d", "", NO_PERSIST);
991 gSavedSettings.declareString("UIImgBtnPanRightInUUID", "e5821134-23c0-4bd0-af06-7fa95b9fb01a", "", NO_PERSIST);
992
993 // Talk panel
994 gSavedSettings.declareRect("FloaterIMRect", LLRect(0, 10*16, 500, 0), "Rectangle for IM window");
995
996 // Chat floater
997 // Rectangle should almost fill the bottom of the screen on 800x600
998 // Note that the saved rect size is the size with history shown.
999 gSavedSettings.declareRect("FloaterChatRect", LLRect( 0, 10*16 + 12, 500, 0 ), "Rectangle for chat history");
1000 gSavedSettings.declareRect("FloaterContactsRect", LLRect( 0, 390, 395, 0 ), "Rectangle for chat history");
1001 gSavedSettings.declareRect("FloaterMuteRect3", LLRect( 0, 300, 300, 0), "Rectangle for mute window");
1002 gSavedPerAccountSettings.declareString("BusyModeResponse", "The Resident you messaged is in 'busy mode' which means they have requested not to be disturbed. Your message will still be shown in their IM panel for later viewing.", "Auto response to instant messages while in busy mode.");
1003 gSavedPerAccountSettings.declareString("InstantMessageLogPath", "", "Path to your log files.");
1004 gSavedPerAccountSettings.declareBOOL("LogInstantMessages", FALSE, "Log Instant Messages");
1005 gSavedPerAccountSettings.declareBOOL("LogChat", FALSE, "Log Chat");
1006 gSavedPerAccountSettings.declareBOOL("LogShowHistory", FALSE, "Log Show History");
1007 gSavedPerAccountSettings.declareBOOL("IMLogTimestamp", FALSE, "Log Timestamp of Instant Messages");
1008 gSavedPerAccountSettings.declareBOOL("LogChatTimestamp", FALSE, "Log Timestamp of Chat");
1009 gSavedPerAccountSettings.declareBOOL("LogChatIM", FALSE, "Log Incoming Instant Messages with Chat");
1010 gSavedPerAccountSettings.declareBOOL("LogTimestampDate", FALSE, "Include Date with Timestamp");
1011
1012 // Inventory
1013 gSavedSettings.declareRect("FloaterInventoryRect", LLRect(0, 400, 300, 0), "Rectangle for inventory window" );
1014
1015 // properties, only width and height is used.
1016 gSavedSettings.declareRect("PropertiesRect", LLRect(0, 320, 350, 0), "Rectangle for inventory item properties window");
1017
1018 // Previews - only width and height are used
1019 gSavedSettings.declareRect("PreviewTextureRect", LLRect(0, 400, 400, 0), "Rectangle for texture preview window" ); // Only width and height are used
1020 gSavedSettings.declareRect("PreviewScriptRect", LLRect(0, 550, 500, 0), "Rectangle for script preview window" ); // Only width and height are used
1021 gSavedSettings.declareRect("LSLHelpRect", LLRect(0, 400, 400, 0), "Rectangle for LSL help window" ); // Only width and height are used
1022 gSavedSettings.declareRect("PreviewLandmarkRect", LLRect(0, 90, 300, 0), "Rectangle for landmark preview window" ); // Only width and height are used
1023 gSavedSettings.declareRect("PreviewURLRect", LLRect(0, 90, 300, 0), "Rectangle for URL preview window" ); // Only width and height are used
1024 gSavedSettings.declareRect("PreviewEventRect", LLRect(0, 530, 420, 0), "Rectangle for Event preview window" ); // Only width and height are used
1025 gSavedSettings.declareRect("PreviewClassifiedRect", LLRect(0, 530, 420, 0), "Rectangle for URL preview window" ); // Only width and height are used
1026 gSavedSettings.declareRect("PreviewSoundRect", LLRect(0, 85, 300, 0), "Rectangle for sound preview window" ); // Only width and height are used
1027 gSavedSettings.declareRect("PreviewObjectRect", LLRect(0, 85, 300, 0), "Rectangle for object preview window" ); // Only width and height are used
1028 gSavedSettings.declareRect("PreviewWearableRect", LLRect(0, 85, 300, 0), "Rectangle for wearable preview window" ); // Only width and height are used
1029 gSavedSettings.declareRect("PreviewAnimRect", LLRect(0, 85, 300, 0), "Rectangle for animation preview window" ); // Only width and height are used
1030 // permissions manager
1031 gSavedSettings.declareRect("PermissionsManagerRect", LLRect(0, 85, 300, 0), "Rectangle for permissions manager window" ); // Only width and height are used
1032
1033 // Land floater - force to top left
1034 //gSavedSettings.declareRect("FloaterLandRect3", LLRect(0, 370, 340, 0));
1035 //gSavedSettings.declareRect("FloaterLandRect4", LLRect(0, 370, 400, 0), "Rectangle for About Land window"); // deprecated
1036 gSavedSettings.declareRect("FloaterLandRect5", LLRect(0, 370, 460, 0), "Rectangle for About Land window");
1037
1038 // Texture Picker
1039 gSavedSettings.declareRect("TexturePickerRect", LLRect(0, 290, 350, 0), "Rectangle for texture picker" ); // Only width and height are used
1040 gSavedSettings.declareBOOL("TexturePickerShowFolders", TRUE, "Show folders with no texures in texture picker");
1041
1042 gSavedSettings.declareRect("FloaterGestureRect", LLRect(0, 480, 320, 0), "Rectangle for gestures window");
1043 gSavedSettings.declareRect("FloaterClothingRect", LLRect(0, 480, 320, 0), "Rectangle for clothing window");
1044 gSavedSettings.declareBOOL("ClothingBtnState", FALSE, "", NO_PERSIST);
1045 gSavedSettings.declareRect("FloaterHTMLRect", LLRect(0, 500, 700, 0), "Rectangle for HTML window");
1046
1047 gSavedSettings.declareRect("FloaterRegionInfo", LLRect(0, 512, 480, 0), "Rectangle for region info window");
1048
1049 // Landmark Picker
1050 gSavedSettings.declareRect("FloaterLandmarkRect", LLRect(0, 290, 310, 0), "Rectangle for landmark picker" ); // Only width and height are used
1051
1052 // editors
1053 // Only width and height are used
1054 gSavedSettings.declareRect("NotecardEditorRect", LLRect(0, 400, 400, 0), "Rectangle for notecard editor");
1055
1056 // recompile everything dialog
1057 gSavedSettings.declareRect("CompileOutputRect", LLRect(0, 400, 300, 0), "Rectangle for script Recompile Everything output window");
1058
1059 // L$
1060 gSavedSettings.declareRect("FloaterPayRectB", LLRect(0, 150, 400, 0), "Rectangle for pay window");
1061
1062 // Buy
1063 gSavedSettings.declareRect("FloaterBuyRect", LLRect(0, 250, 300, 0), "Rectangle for buy window");
1064
1065 // Buy Contents
1066 gSavedSettings.declareRect("FloaterBuyContentsRect", LLRect(0, 250, 300, 0), "Rectangle for Buy Contents window");
1067
1068 // Open Contents
1069 gSavedSettings.declareRect("FloaterOpenObjectRect", LLRect(0, 350, 300, 0), "Rectangle for Open Object window");
1070
1071 // the about box
1072 gSavedSettings.declareRect("FloaterMediaRect", LLRect(16,650,600,128), "Rectangle for media browser window");
1073
1074 // the about box
1075 gSavedSettings.declareRect("FloaterAboutRect", LLRect(0, 440, 470, 0), "Rectangle for About window");
1076
1077 // the mean box
1078 gSavedSettings.declareRect("FloaterBumpRect", LLRect(0, 180, 400, 0), "Rectangle for Bumps/Hits window");
1079
1080 // the inspect box
1081 gSavedSettings.declareRect("FloaterInspectRect", LLRect(0, 400, 400, 0), "Rectangle for Object Inspect window");
1082
1083 // World map. If 0,0,0,0, will attempt to size to 80% of fullscreen.
1084 gSavedSettings.declareRect("FloaterWorldMapRect2",
1085 LLRect(0,0,0,0), "Rectangle for world map window");
1086
1087 // Find dialog.
1088 gSavedSettings.declareRect("FloaterFindRect2", LLRect(0, 570, 780, 0), "Rectangle for Find window");
1089
1090 // Talk To dialog, force to top of screen
1091 //gSavedSettings.declareRect("FloaterTalkToRect", LLRect(0, 130, 330, 0), "[NOT USED]");
1092 // Script error/debug dialog, force to top of screen
1093 gSavedSettings.declareRect("FloaterScriptDebugRect", LLRect(0, 130, 450, 0), "Rectangle for Script Error/Debug window");
1094
1095 // HUD Console
1096 gSavedSettings.declareS32("ConsoleBufferSize", 40, "Size of chat console history (lines of chat)");
1097
1098 //gSavedSettings.declareString("UIImgCompassTextureUUID", "79156764-de98-4815-9d50-b10a7646bcf4", "[NOT USED]");
1099
1100 // Script Panel
1101 //gSavedSettings.declareRect("ScriptPanelRect", LLRect(250, 175 + 400, 250 + 400, 175), "[NOT USED]");
1102
1103 // volume floater
1104 gSavedSettings.declareRect("FloaterAudioVolumeRect", LLRect(0, 440, 470, 0), "Rectangle for Audio Volume window");
1105
1106 // Radio button sets
1107 gSavedSettings.declareU32("AvatarSex", 0, "", NO_PERSIST);
1108
1109 // Radio button sets
1110 gSavedSettings.declareS32("RadioLandBrushAction", 0, "Last selected land modification operation (0 = flatten, 1 = raise, 2 = lower, 3 = smooth, 4 = roughen, 5 = revert)");
1111 gSavedSettings.declareS32("RadioLandBrushSize", 0, "Size of land modification brush (0 = small, 1 = medium, 2 = large)");
1112
1113 // Build Options Panel
1114 gSavedSettings.declareBOOL("SnapEnabled", TRUE, "Enable snapping to grid");
1115 gSavedSettings.declareBOOL("SnapToMouseCursor", FALSE, "When snapping to grid, center object on nearest grid point to mouse cursor");
1116 gSavedSettings.declareF32 ("GridResolution", 0.5f, "Size of single grid step (meters)");
1117 gSavedSettings.declareF32 ("GridDrawSize", 12.0f, "Visible extent of 2D snap grid (meters)");
1118 gSavedSettings.declareBOOL("GridSubUnit", FALSE, "Display fractional grid steps, relative to grid size");
1119 gSavedSettings.declareF32("GridOpacity", 0.7f, "Grid line opacity (0.0 = completely transparent, 1.0 = completely opaque)");
1120 gSavedSettings.declareBOOL("GridCrossSections", FALSE, "Highlight cross sections of prims with grid manipulation plane.");
1121
1122 gSavedSettings.declareS32("GridMode", 0, "Snap grid reference frame (0 = world, 1 = local, 2 = reference object)");
1123 //gSavedSettings.declareBOOL("GridIsLocal", FALSE, "[NOT USED]");
1124 gSavedSettings.declareS32("GridSubdivision", 32, "Maximum number of times to divide single snap grid unit when GridSubUnit is true");
1125 gSavedSettings.declareF32 ("RotationStep", 1.0f, "All rotations via rotation tool are constrained to multiples of this unit (degrees)");
1126
1127 // Saved state for window
1128 gSavedSettings.declareBOOL("WindowMaximized", TRUE, "SL viewer window maximized on login");
1129 gSavedSettings.declareS32("WindowHeight", WINDOW_HEIGHT, "SL viewer window height");
1130 gSavedSettings.declareS32("WindowWidth", WINDOW_WIDTH, "SL viewer window width");
1131 gSavedSettings.declareS32("WindowX", 10, "X coordinate of lower left corner of SL viewer window, relative to primary display (pixels)");
1132 gSavedSettings.declareS32("WindowY", 10, "Y coordinate of lower left corner of SL viewer window, relative to primary display (pixels)");
1133
1134 // Fullscreen menu options
1135 gSavedSettings.declareBOOL("FullScreen", FALSE, "Run SL in fullscreen mode");
1136//#if LL_DARWIN
1137// gSavedSettings.declareBOOL("FullScreen", FALSE);
1138//#else
1139// gSavedSettings.declareBOOL("FullScreen", TRUE);
1140//#endif
1141
1142 // Fullscreen actual settings
1143 gSavedSettings.declareS32("FullScreenWidth", 1024, "Fullscreen resolution in width");
1144 gSavedSettings.declareS32("FullScreenHeight", 768, "Fullscreen resolution in height");
1145 gSavedSettings.declareF32("FullScreenAspectRatio", 1.3333f, "Aspect ratio of fullscreen display (width / height)");
1146 gSavedSettings.declareBOOL("FullScreenAutoDetectAspectRatio", TRUE, "Automatically detect proper aspect ratio for fullscreen display");
1147
1148 //resolution divisor
1149 gSavedSettings.declareU32("RenderResolutionDivisor", 1, "Divisor for rendering 3D scene at reduced resolution.");
1150
1151 // UI general settigns
1152 gSavedSettings.declareBOOL("TabToTextFieldsOnly", FALSE, "TAB key takes you to next text entry field, instead of next widget");
1153 gSavedSettings.declareF32("UIScaleFactor", 1.f, "Size of UI relative to default layout on 1024x768 screen");
1154 gSavedSettings.declareBOOL("UIAutoScale", TRUE, "Keep UI scale consistent across different resolutions");
1155
1156 // Login
1157 gSavedSettings.declareString("FirstName", "", "Login first name");
1158 gSavedSettings.declareString("LastName", "", "Login last name");
1159 gSavedPerAccountSettings.declareU32("LastLogoff", 0, "Last logoff");
1160
1161 // Legacy password storage. Now stored in separate file.
1162 gSavedSettings.declareString("Marker", "", "[NOT USED]");
1163
1164 gSavedSettings.declareBOOL("RememberPassword", TRUE, "Keep password (in encrypted form) for next login");
1165 gSavedSettings.declareBOOL("LoginLastLocation", TRUE, "Login at same location you last logged out");
1166 gSavedSettings.declareBOOL("ShowStartLocation", FALSE, "Display starting location menu on login screen");
1167 gSavedSettings.declareBOOL("FlyingAtExit", FALSE, "Was flying when last logged out, so fly when logging in");
1168 gSavedSettings.declareBOOL("ForceShowGrid", FALSE, "Always show grid dropdown on login screen");
1169
1170// gSavedSettings.declareString("AvatarTexture", "be20de2d-7812-4e0e-80f2-33aadf185a9f");
1171 gSavedSettings.declareU32("RegionTextureSize", 256, "Terrain texture dimensions (power of 2)");
1172
1173 // Selection option
1174 gSavedSettings.declareBOOL("EditLinkedParts", FALSE, "Select individual parts of linked objects", NO_PERSIST);
1175
1176 // Selection beam
1177 gSavedSettings.declareBOOL("ShowSelectionBeam", TRUE, "Show selection particle beam when selecting or interacting with objects.");
1178
1179 // Scale manipulator
1180 gSavedSettings.declareBOOL("ScaleUniform", FALSE, "Scale selected objects evenly about center of selection");
1181 gSavedSettings.declareBOOL("ScaleShowAxes", FALSE, "Show indicator of selected scale axis when scaling");
1182 gSavedSettings.declareBOOL("ScaleStretchTextures", TRUE, "Stretch textures along with object when scaling");
1183
1184 //------------------------------------------------------------------------
1185 // Help viewer
1186 //------------------------------------------------------------------------
1187 gSavedSettings.declareString("HelpHomeURL", "help/index.html", "URL of initial help page");
1188 gSavedSettings.declareString("HelpLastVisitedURL", "help/index.html", "URL of last help page, will be shown next time help is accessed");
1189
1190 // HTML dialog (general purpose)
1191 gSavedSettings.declareRect("HtmlFloaterRect", LLRect(16,650,600,128), "Rectangle for HTML Floater window");
1192
1193 // HTML sim release message floater
1194 gSavedSettings.declareRect("HtmlReleaseMessage", LLRect(46,520,400,128), "Rectangle for HTML Release Message Floater window");
1195
1196
1197 // HTML help
1198 gSavedSettings.declareString("HtmlHelpLastPage", "", "Last URL visited via help system");
1199 gSavedSettings.declareRect("HtmlHelpRect", LLRect(16,650,600,128), "Rectangle for HTML help window");
1200 gSavedSettings.declareRect("HtmlFindRect", LLRect(16,650,600,128), "Rectangle for HTML find window");
1201
1202 // Audio
1203 gSavedSettings.declareBOOL("ShowVolumeSettingsPopup", FALSE, "Show individual volume slider for voice, sound effects, etc");
1204 gSavedSettings.declareF32("AudioLevelMaster", 1.0f, "Master audio level, or overall volume");
1205 gSavedSettings.declareF32("AudioLevelSFX", 1.0f, "Audio level of in-world sound effects");
1206 gSavedSettings.declareF32("AudioLevelAmbient",0.5f, "Audio level of environment sounds");
1207 gSavedSettings.declareF32("AudioLevelUI", 0.5f, "Audio level of UI sound effects");
1208 gSavedSettings.declareF32("AudioLevelMusic", 1.0f, "Audio level of streaming music");
1209 gSavedSettings.declareF32("AudioLevelVoice", 0.5f, "Audio level of voice chat");
1210 gSavedSettings.declareF32("AudioLevelMedia", 1.0f, "Audio level of Quicktime movies");
1211 gSavedSettings.declareF32("AudioLevelMic", 1.0f, "Audio level of microphone input");
1212
1213// gSavedSettings.declareF32("MediaAudioVolume", 1.0f, "Audio level of Quicktime movies"); // removed
1214
1215 gSavedSettings.declareF32("AudioLevelDistance", 1.0f, "Scale factor for audio engine (multiple of world scale, 2.0 = audio falls off twice as fast)");
1216 gSavedSettings.declareF32("AudioLevelDoppler", 1.0f, "Scale of doppler effect on moving audio sources (1.0 = normal, <1.0 = diminished doppler effect, >1.0 = enhanced doppler effect)");
1217 gSavedSettings.declareF32("AudioLevelRolloff", 1.0f, "Controls the distance-based dropoff of audio volume (fraction or multiple of default audio rolloff)");
1218
1219 gSavedSettings.declareBOOL("AudioStreamingMusic", FALSE, "Enable streaming audio");
1220 gSavedSettings.declareBOOL("AudioStreamingVideo", FALSE, "Enable streaming video");
1221 gSavedSettings.declareBOOL("AutoMimeDiscovery", FALSE, "Enable viewer mime type discovery of media URLs");
1222
1223 // Media
1224 gSavedSettings.declareBOOL("ParcelMediaAutoPlayEnable", FALSE, "Auto play parcel media when available");
1225
1226 //UI Sounds
1227
1228 gSavedSettings.declareBOOL("UISndDebugSpamToggle", FALSE, "Log UI sound effects as they are played");
1229
1230 gSavedSettings.declareF32("UISndHealthReductionThreshold", 10.f, "Amount of health reduction required to trigger \"pain\" sound");
1231 gSavedSettings.declareF32("UISndMoneyChangeThreshold", 50.f, "Amount of change in L$ balance required to trigger \"money\" sound");
1232
1233 gSavedSettings.declareString("UISndAlert", "ed124764-705d-d497-167a-182cd9fa2e6c", "Sound file for alerts (uuid for sound asset)");
1234 //gSavedSettings.declareString("UISndAppearanceAnimate", "6cf2be26-90cb-2669-a599-f5ab7698225f", "[NOT USED]");
1235 gSavedSettings.declareString("UISndBadKeystroke", "2ca849ba-2885-4bc3-90ef-d4987a5b983a", "Sound file for invalid keystroke (uuid for sound asset)");
1236 //gSavedSettings.declareString("UISndChatFromObject", "00000000-0000-0000-0000-000000000000", "[NOT USED]");
1237 gSavedSettings.declareString("UISndClick", "4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6", "Sound file for mouse click (uuid for sound asset)");
1238 gSavedSettings.declareString("UISndClickRelease", "4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6", "Sound file for mouse button release (uuid for sound asset)");
1239// gSavedSettings.declareString("UISndError", "cb58f920-5b52-8a49-b81c-e532adbbe6f1", "Sound file for UI error (uuid for sound asset)");
1240 gSavedSettings.declareString("UISndHealthReductionF", "219c5d93-6c09-31c5-fb3f-c5fe7495c115", "Sound file for female pain (uuid for sound asset)");
1241 gSavedSettings.declareString("UISndHealthReductionM", "e057c244-5768-1056-c37e-1537454eeb62", "Sound file for male pain (uuid for sound asset)");
1242 //gSavedSettings.declareString("UISndIncomingChat", "00000000-0000-0000-0000-000000000000", "[NOT USED]");
1243 //gSavedSettings.declareString("UISndIncomingIM", "00000000-0000-0000-0000-000000000000", "[NOT USED]");
1244 //gSavedSettings.declareString("UISndInvApplyToObject", "00000000-0000-0000-0000-000000000000", "[NOT USED]");
1245 gSavedSettings.declareString("UISndInvalidOp", "4174f859-0d3d-c517-c424-72923dc21f65", "Sound file for invalid operations (uuid for sound asset)");
1246 //gSavedSettings.declareString("UISndInventoryCopyToInv", "00000000-0000-0000-0000-000000000000", "[NOT USED]");
1247 gSavedSettings.declareString("UISndMoneyChangeDown", "104974e3-dfda-428b-99ee-b0d4e748d3a3", "Sound file for L$ balance increase (uuid for sound asset)");
1248 gSavedSettings.declareString("UISndMoneyChangeUp", "77a018af-098e-c037-51a6-178f05877c6f", "Sound file for L$ balance decrease(uuid for sound asset)");
1249 gSavedSettings.declareString("UISndNewIncomingIMSession", "67cc2844-00f3-2b3c-b991-6418d01e1bb7", "Sound file for new instant message session(uuid for sound asset)");
1250 //gSavedSettings.declareString("UISndObjectCopyToInv", "00000000-0000-0000-0000-000000000000", "[NOT USED]");
1251 gSavedSettings.declareString("UISndObjectCreate", "f4a0660f-5446-dea2-80b7-6482a082803c", "Sound file for object creation (uuid for sound asset)");
1252 gSavedSettings.declareString("UISndObjectDelete", "0cb7b00a-4c10-6948-84de-a93c09af2ba9", "Sound file for object deletion (uuid for sound asset)");
1253 gSavedSettings.declareString("UISndObjectRezIn", "3c8fc726-1fd6-862d-fa01-16c5b2568db6", "Sound file for rezzing objects (uuid for sound asset)");
1254 gSavedSettings.declareString("UISndObjectRezOut", "00000000-0000-0000-0000-000000000000", "Sound file for derezzing objects (uuid for sound asset)");
1255 gSavedSettings.declareString("UISndPieMenuAppear", "8eaed61f-92ff-6485-de83-4dcc938a478e", "Sound file for opening pie menu (uuid for sound asset)");
1256 gSavedSettings.declareString("UISndPieMenuHide", "00000000-0000-0000-0000-000000000000", "Sound file for closing pie menu (uuid for sound asset)");
1257 gSavedSettings.declareString("UISndPieMenuSliceHighlight0", "d9f73cf8-17b4-6f7a-1565-7951226c305d", "Sound file for selecting pie menu item 0 (uuid for sound asset)");
1258 gSavedSettings.declareString("UISndPieMenuSliceHighlight1", "f6ba9816-dcaf-f755-7b67-51b31b6233e5", "Sound file for selecting pie menu item 1 (uuid for sound asset)");
1259 gSavedSettings.declareString("UISndPieMenuSliceHighlight2", "7aff2265-d05b-8b72-63c7-dbf96dc2f21f", "Sound file for selecting pie menu item 2 (uuid for sound asset)");
1260 gSavedSettings.declareString("UISndPieMenuSliceHighlight3", "09b2184e-8601-44e2-afbb-ce37434b8ba1", "Sound file for selecting pie menu item 3 (uuid for sound asset)");
1261 gSavedSettings.declareString("UISndPieMenuSliceHighlight4", "bbe4c7fc-7044-b05e-7b89-36924a67593c", "Sound file for selecting pie menu item 4 (uuid for sound asset)");
1262 gSavedSettings.declareString("UISndPieMenuSliceHighlight5", "d166039b-b4f5-c2ec-4911-c85c727b016c", "Sound file for selecting pie menu item 5 (uuid for sound asset)");
1263 gSavedSettings.declareString("UISndPieMenuSliceHighlight6", "242af82b-43c2-9a3b-e108-3b0c7e384981", "Sound file for selecting pie menu item 6 (uuid for sound asset)");
1264 gSavedSettings.declareString("UISndPieMenuSliceHighlight7", "c1f334fb-a5be-8fe7-22b3-29631c21cf0b", "Sound file for selecting pie menu item 7 (uuid for sound asset)");
1265 gSavedSettings.declareString("UISndSnapshot", "3d09f582-3851-c0e0-f5ba-277ac5c73fb4", "Sound file for taking a snapshot (uuid for sound asset)");
1266 //gSavedSettings.declareString("UISndStartAutopilot", "00000000-0000-0000-0000-000000000000", "[NOT USED]");
1267 //gSavedSettings.declareString("UISndStartFollowpilot", "00000000-0000-0000-0000-000000000000", "[NOT USED]");
1268 gSavedSettings.declareString("UISndStartIM", "c825dfbc-9827-7e02-6507-3713d18916c1", "Sound file for starting a new IM session (uuid for sound asset)");
1269 //gSavedSettings.declareString("UISndStopAutopilot", "00000000-0000-0000-0000-000000000000", "[NOT USED]");
1270 gSavedSettings.declareString("UISndTeleportOut", "d7a9a565-a013-2a69-797d-5332baa1a947", "Sound file for teleporting (uuid for sound asset)");
1271 //gSavedSettings.declareString("UISndTextureApplyToObject", "00000000-0000-0000-0000-000000000000", "[NOT USED]");
1272 //gSavedSettings.declareString("UISndTextureCopyToInv", "00000000-0000-0000-0000-000000000000", "[NOT USED]");
1273 gSavedSettings.declareString("UISndTyping", "5e191c7b-8996-9ced-a177-b2ac32bfea06", "Sound file for starting to type a chat message (uuid for sound asset)");
1274// gSavedSettings.declareString("UISndWarning", "449bc80c-91b6-6365-8fd1-95bd91016624", "Sound file for alerts (uuid for sound asset)");
1275 gSavedSettings.declareString("UISndWindowClose", "2c346eda-b60c-ab33-1119-b8941916a499", "Sound file for closing a window (uuid for sound asset)");
1276 gSavedSettings.declareString("UISndWindowOpen", "c80260ba-41fd-8a46-768a-6bf236360e3a", "Sound file for opening a window (uuid for sound asset)");
1277
1278 // Sky params
1279 gSavedSettings.declareBOOL("SkyOverrideSimSunPosition", FALSE, "", NO_PERSIST);
1280 gSavedSettings.declareVec3("SkySunDefaultPosition", LLVector3(1.f, 0.f, 0.1f), "Default position of sun in sky (direction in world coordinates)");
1281 gSavedSettings.declareF32("SkyAmbientScale", 0.3f, "Controls strength of ambient, or non-directional light from the sun and moon (fraction or multiple of default ambient level)");
1282 gSavedSettings.declareColor3("SkyNightColorShift", LLColor3(0.7f, 0.7f, 1.0f), "Controls moonlight color (base color applied to moon as light source)");
1283 gSavedSettings.declareBOOL("FixedWeather", FALSE, "Weather effects do not change over time");
1284 gSavedSettings.declareU32("WLSkyDetail", 64, "Controls vertex detail on the WindLight sky. Lower numbers will give better performance and uglier skies.");
1285 gSavedSettings.declareBOOL("SkyUseClassicClouds", TRUE, "Whether to use the old Second Life particle clouds or not");
1286 gSavedSettings.declareBOOL("WindLightUseAtmosShaders", TRUE, "Whether to enable or disable WindLight atmospheric shaders.");
1287 gSavedSettings.declareBOOL("SkyEditPresets", FALSE, "Whether to be able to edit the sky defaults or not");
1288
1289 // Water params
1290 gSavedSettings.declareF32("WaterGLFogDepthFloor", 0.25f, "Controls how dark water gl fog can get");
1291 gSavedSettings.declareF32("WaterGLFogDepthScale", 50.0f, "Controls how quickly gl fog gets dark under water");
1292 gSavedSettings.declareF32("WaterGLFogDensityScale", 0.02f, "Maps shader water fog density to gl fog density");
1293 gSavedSettings.declareBOOL("EnableRippleWater", TRUE, "Whether to use ripple water shader or not");
1294 gSavedSettings.declareBOOL("WaterEditPresets", FALSE, "Whether to be able to edit the water defaults or not");
1295
1296 // Windlight window params
1297 gSavedSettings.declareRect("FloaterEnvRect", LLRect(50, 150, 650, 0), "Rectangle for Environment Editor" );
1298 gSavedSettings.declareRect("FloaterAdvancedSkyRect", LLRect(50, 220, 450, 0), "Rectangle for Advanced Sky Editor" );
1299 gSavedSettings.declareRect("FloaterDayCycleRect", LLRect(50, 450, 300, 0), "Rectangle for Day Cycle Editor" );
1300 gSavedSettings.declareRect("FloaterAdvancedWaterRect", LLRect(50, 220, 450, 0), "Rectangle for Advanced Water Editor" );
1301
1302 // Graphics compatibility and driver crash workaround params
1303 gSavedSettings.declareBOOL("UseStartScreen", TRUE, "Whether to load a start screen image or not.");
1304
1305 // Tweaked draw distance default settings
1306 gSavedSettings.declareBOOL("Disregard128DefaultDrawDistance", TRUE, "Whether to use the auto default to 128 draw distance");
1307 gSavedSettings.declareBOOL("Disregard96DefaultDrawDistance", TRUE, "Whether to use the auto default to 96 draw distance");
1308
1309 // Cache Stuff
1310 gSavedSettings.declareU32("VFSSalt", 1, "[DO NOT MODIFY] Controls local file caching behavior");
1311 gSavedSettings.declareU32("VFSOldSize", 0, "[DO NOT MODIFY] Controls resizing of local file cache");
1312// gSavedSettings.declareU32("VFSSize", 2, "Controls amount of hard drive space reserved for local file caching (0 = 50MB, 1 = 200MB, 2 = 500MB, 3 = 1000MB)");
1313 gSavedSettings.declareU32("CacheSize", 500, "Controls amount of hard drive space reserved for local file caching in MB");
1314 gSavedSettings.declareString("CacheLocation", "", "Controls the location of the local disk cache");
1315 gSavedSettings.declareString("NewCacheLocation", "", "Change the location of the local disk cache to this");
1316 gSavedSettings.declareU32("CacheValidateCounter", 0, "Used to distribute cache validation");
1317 // Delete all files in cache directory on startup
1318 gSavedSettings.declareBOOL("PurgeCacheOnStartup", FALSE, "Clear local file cache every time viewer is run");
1319 gSavedSettings.declareBOOL("PurgeCacheOnNextStartup", FALSE, "Clear local file cache next time viewer is run");
1320
1321 // Used for special titles such as "Second Life - Special E3 2003 Beta"
1322 gSavedSettings.declareBOOL("ShowOverlayTitle", FALSE, "Prints watermark text message on screen");
1323 gSavedSettings.declareString("OverlayTitle", "Set_via_OverlayTitle_in_settings.xml",
1324 "Controls watermark text message displayed on screen when \"ShowOverlayTitle\" is enabled (one word, underscores become spaces)"); // Must be one word, but underscores are replaced by spaces. Hah!
1325
1326 // Secret debug stuff.
1327 gSavedSettings.declareBOOL("UseDebugMenus", FALSE, "Turns on \"Debug\" menu");
1328 gSavedSettings.declareS32("ServerChoice", 0, "[DO NOT MODIFY] Controls which grid you connect to");
1329 gSavedSettings.declareString("CustomServer", "", "Specifies IP address or hostname of grid to which you connect");
1330 gSavedSettings.declareBOOL("UseDebugLogin", FALSE, "Provides extra control over which grid to connect to");
1331
1332 // First run is true on the first startup of a given installation.
1333 // It is not related to whether your ACCOUNT has been logged in before.
1334 // Set to false if you reach the login screen.
1335 gSavedSettings.declareBOOL("FirstRunThisInstall", TRUE, "Specifies that you have not run the viewer since you installed the latest update");
1336
1337 // Is this the first successful login for a given installation?
1338 // It is not related to whether your ACCOUNT has been logged in before.
1339 // Set to false if you successfully connect.
1340 gSavedSettings.declareBOOL("FirstLoginThisInstall", TRUE, "Specifies that you have not successfully logged in since you installed the latest update");
1341
1342 // The last version that was run with this prefs file. Default to a version that will never be current,
1343 // and update after the setting is used in the startup sequence.
1344 gSavedSettings.declareString("LastRunVersion", "0.0.0", "Version number of last instance of the viewer that you ran");
1345 // Local cache version (change if format changes)
1346 gSavedSettings.declareS32("LocalCacheVersion", 0, "Version number of cache");
1347
1348 // cached mean collision values
1349 gSavedSettings.declareBOOL("MeanCollisionBump", FALSE, "You have experienced an abuse of being bumped by an object or avatar" );
1350 gSavedSettings.declareBOOL("MeanCollisionPushObject", FALSE, "You have experienced an abuse of being pushed by a scripted object");
1351 gSavedSettings.declareBOOL("MeanCollisionSelected", FALSE, "You have experienced an abuse of being pushed via a selected object");
1352 gSavedSettings.declareBOOL("MeanCollisionScripted", FALSE, "You have experienced an abuse from a scripted object");
1353 gSavedSettings.declareBOOL("MeanCollisionPhysical", FALSE, "You have experienced an abuse from a physical object");
1354
1355 // Does left-click show menu, or only do grabbing?
1356 gSavedSettings.declareBOOL("LeftClickShowMenu", FALSE, "Left click opens pie menu (FALSE = left click touches or grabs object)");
1357
1358 gSavedSettings.declareF32("MouseSensitivity", 3.f, "Controls responsiveness of mouse when in mouselook mode (fraction or multiple of default mouse sensitivity)");
1359 gSavedSettings.declareBOOL("MouseSmooth", FALSE, "Smooths out motion of mouse when in mouselook mode.");
1360 gSavedSettings.declareBOOL("InvertMouse", FALSE, "When in mouselook, moving mouse up looks down and vice verse (FALSE = moving up looks up)");
1361
1362 gSavedSettings.declareBOOL("EditCameraMovement", FALSE, "When entering build mode, camera moves up above avatar");
1363 gSavedSettings.declareBOOL("AppearanceCameraMovement", TRUE, "When entering appearance editing mode, camera zooms in on currently selected portion of avatar");
1364
1365 //gSavedSettings.declareBOOL("AltShowsPhysical", FALSE, "When ALT key is held down, physical objects are rendered in red.");
1366 gSavedSettings.declareBOOL("BeaconAlwaysOn", FALSE, "Beacons / highlighting always on");
1367 gSavedSettings.declareBOOL("scriptsbeacon", FALSE, "Beacon / Highlight scripted objects");
1368 gSavedSettings.declareBOOL("physicalbeacon", TRUE, "Beacon / Highlight physical objects");
1369 gSavedSettings.declareBOOL("soundsbeacon", FALSE, "Beacon / Highlight sound generators");
1370 gSavedSettings.declareBOOL("particlesbeacon", FALSE, "Beacon / Highlight particle generators");
1371 gSavedSettings.declareBOOL("scripttouchbeacon", TRUE, "Beacon / Highlight scripted objects with touch function");
1372 gSavedSettings.declareBOOL("renderbeacons", FALSE, "Beacon / Highlight particle generators");
1373 gSavedSettings.declareBOOL("renderhighlights", TRUE, "Beacon / Highlight scripted objects with touch function");
1374
1375 gSavedSettings.declareBOOL("MuteAudio", FALSE, "All audio plays at 0 volume (streaming audio still takes up bandwidth, for example)");
1376 gSavedSettings.declareBOOL("MuteWhenMinimized", TRUE, "Mute audio when SL window is minimized");
1377
1378 gSavedSettings.declareBOOL("MuteMusic", FALSE, "Music plays at 0 volume (streaming audio still takes up bandwidth)");
1379 gSavedSettings.declareBOOL("MuteMedia", FALSE, "Media plays at 0 volume (streaming audio still takes up bandwidth)");
1380 gSavedSettings.declareBOOL("MuteVoice", FALSE, "Voice plays at 0 volume (streaming audio still takes up bandwidth)");
1381 gSavedSettings.declareBOOL("MuteSounds", FALSE, "Sound effects play at 0 volume");
1382 gSavedSettings.declareBOOL("MuteAmbient", FALSE, "Ambient sound effects, such as wind noise, play at 0 volume");
1383 gSavedSettings.declareBOOL("MuteUI", FALSE, "UI sound effects play at 0 volume");
1384
1385 gSavedSettings.declareS32("NotifyBoxWidth", 350, "Width of notification messages");
1386 gSavedSettings.declareS32("NotifyBoxHeight", 200, "Height of notification messages");
1387
1388 gSavedSettings.declareS32("GroupNotifyBoxWidth", 400, "Width of group notice messages");
1389 gSavedSettings.declareS32("GroupNotifyBoxHeight", 260, "Height of group notice messages");
1390
1391 // Time in seconds.
1392 gSavedSettings.declareF32("NotifyTipDuration", 4.f, "Length of time that notification tips stay on screen (seconds)");
1393
1394 gSavedSettings.declareBOOL("NotifyMoneyChange", TRUE, "Pop up notifications for all L$ transactions");
1395
1396 gSavedSettings.declareBOOL("ShowNewInventory", TRUE,
1397 "Automatically views new notecards/textures/landmarks");
1398 gSavedSettings.declareBOOL("AutoAcceptNewInventory", FALSE,
1399 "Automatically accept new notecards/textures/landmarks");
1400
1401 // Bitfield
1402 // 1 = by date
1403 // 2 = folders always by name
1404 // 4 = system folders to top
1405 // This where the default first time user gets his settings.
1406 gSavedSettings.declareU32("InventorySortOrder", 1 | 2 | 4, "Specifies sort key for inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)");
1407 gSavedSettings.declareU32("RecentItemsSortOrder", 1, "Specifies sort key for recent inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)");
1408 gSavedSettings.declareU32("TexturePickerSortOrder", 2, "Specifies sort key for textures in texture picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)");
1409 gSavedSettings.declareU32("AvatarPickerSortOrder", 2, "Specifies sort key for textures in avatar picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)");
1410
1411 // Pixels away from edge that windows snap.
1412 gSavedSettings.declareS32("SnapMargin", 10, "Controls maximum distance between windows before they auto-snap together (pixels)");
1413
1414 // Will be set on first run
1415 gSavedSettings.declareS32("FloaterViewBottom", -1, "[DO NOT MODIFY] Controls layout of floating windows within SL window");
1416
1417 // Automatically fly when up key held down, and automatically stop
1418 // flying when landing on something.
1419 gSavedSettings.declareBOOL("AutomaticFly", TRUE, "Fly by holding jump key or using \"Fly\" command (FALSE = fly by using \"Fly\" command only)");
1420
1421 // Index of the last find panel you opened.
1422 gSavedSettings.declareString("LastFindPanel", "find_all_panel", "Controls which find operation appears by default when clicking \"Find\" button ");
1423
1424 // grab keystrokes at last possible moment to minimize latency
1425 gSavedSettings.declareBOOL("AsyncKeyboard", TRUE, "Improves responsiveness to keyboard input when at low framerates");
1426
1427 // Numpad numbers move avatar even when numlock is off/you're using a Mac?
1428 gSavedSettings.declareS32("NumpadControl", 0, "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)");
1429
1430 // 1.2.9: For transition from 1.2.8 to 1.2.9, need to ask people
1431 // this question regardless of number of executions.
1432 // 1.6.10: We're just defaulting crash reporting to on
1433 // 1.7.x: We ask at crash time, but leave this so when you flip back and
1434 // forth between 1.6 and 1.7 it doesn't ask you every time.
1435 gSavedSettings.declareBOOL("AskedAboutCrashReports", FALSE, "Turns off dialog asking if you want to enable crash reporting");
1436
1437 // Default for the "Online" checkbox in Find -> People
1438 gSavedSettings.declareBOOL("FindPeopleOnline", TRUE, "Limits people search to only users who are logged on");
1439
1440 // Default for checkboxes in Find -> Land
1441 //gSavedSettings.declareBOOL("FindLandForSale", TRUE);
1442 //gSavedSettings.declareBOOL("FindLandAuction", TRUE);
1443
1444 // Default for Find -> Land combo box
1445 gSavedSettings.declareString("FindLandType", "All", "Controls which type of land you are searching for in Find Land interface (\"All\", \"Auction\", \"For Sale\")");
1446
1447 gSavedSettings.declareBOOL("FindLandPrice", TRUE, "Enables filtering of land search results by price");
1448 gSavedSettings.declareBOOL("FindLandArea", FALSE, "Enables filtering of land search results by area");
1449
1450 // Checkboxes in Find -> Popular
1451 // Should these all be the same? I imagine we might want a single "show mature." - bbc
1452 gSavedSettings.declareBOOL("ShowMatureFindAll",FALSE, "Display results of find all that are in mature sims");
1453 gSavedSettings.declareBOOL("ShowMatureSims", FALSE, "Display results of find places or find popular that are in mature sims");
1454 gSavedSettings.declareBOOL("ShowMatureEvents", FALSE, "Display results of find events that are flagged as mature");
1455 gSavedSettings.declareBOOL("ShowMatureClassifieds", FALSE, "Display results of find classifieds that are flagged as mature");
1456 gSavedSettings.declareBOOL("ShowMatureGroups", TRUE, "Display results of find groups that are in flagged as mature");
1457
1458 gSavedSettings.declareBOOL("FindPlacesPictures", TRUE, "Display only results of find places that have pictures");
1459
1460 gSavedSettings.declareBOOL("MapShowEvents", TRUE, "Show events on world map");
1461 //gSavedSettings.declareBOOL("MapShowPicks", TRUE, "[NOT USED]");
1462 gSavedSettings.declareBOOL("MapShowPopular", TRUE, "Show popular places on world map");
1463 gSavedSettings.declareBOOL("MapShowLandForSale", FALSE, "Show land for sale on world map");
1464 gSavedSettings.declareBOOL("MapShowTelehubs", TRUE, "Show telehubs on world map");
1465 gSavedSettings.declareBOOL("MapShowPeople", TRUE, "Show other users on world map");
1466 gSavedSettings.declareBOOL("MapShowInfohubs", TRUE, "Show infohubs on the world map");
1467 gSavedSettings.declareBOOL("MapShowClassifieds", TRUE, "Show locations associated with classified ads on world map");
1468
1469 // Search panel in directory uses this URL for queries
1470 gSavedSettings.declareString("SearchURLDefault",
1471 "http://secondlife.com/app/search/index.php?",
1472 "URL to load for empty searches");
1473 gSavedSettings.declareString("SearchURLQuery",
1474 "http://secondlife.com/app/search/search_proxy.php?q=[QUERY]&s=[COLLECTION]&",
1475 "URL to use for searches");
1476 // Version 2 added [SESSION], must invalidate old saved settings.
1477 gSavedSettings.declareString("SearchURLSuffix2",
1478 "lang=[LANG]&m=[MATURE]&t=[TEEN]&region=[REGION]&x=[X]&y=[Y]&z=[Z]&session=[SESSION]",
1479 "Parameters added to end of search queries");
1480
1481 // Hide/Show search bar
1482 gSavedSettings.declareBOOL("ShowSearchBar", TRUE, "Show the Search Bar in the Status Overlay");
1483
1484 // Arrow keys move avatar while in chat?
1485 gSavedSettings.declareBOOL("ArrowKeysMoveAvatar", TRUE, "While cursor is in chat entry box, arrow keys still control your avatar");
1486 gSavedSettings.declareBOOL("ChatBarStealsFocus", TRUE, "Whenever keyboard focus is removed from the UI, and the chat bar is visible, the chat bar takes focus");
1487
1488 // Show yellow selection fence in snapshots for auctions?
1489 gSavedSettings.declareBOOL("AuctionShowFence", TRUE, "When auctioning land, include parcel boundary marker in snapshot");
1490
1491 // Use DX9 to probe hardware on startup. Only do this once,
1492 // because it's slow.
1493 gSavedSettings.declareBOOL("ProbeHardwareOnStartup", TRUE, "Query current hardware configuration on application startup");
1494
1495 // have we told the user his hardware sucks? Let him know just once
1496 gSavedSettings.declareBOOL("AlertedUnsupportedHardware", FALSE, "Toggle that lets us tell the user he's on old hardware only once");
1497
1498 // enable/disable system color picker
1499 gSavedSettings.declareBOOL("UseDefaultColorPicker", FALSE, "Use color picker supplied by operating system");
1500 gSavedSettings.declareF32("PickerContextOpacity", 0.35f, "Controls overall opacity of context frustrum connecting color and texture pickers with their swatches");
1501
1502 gSavedSettings.declareF32("ColumnHeaderDropDownDelay", 0.3f, "Time in seconds of mouse click before column header shows sort options list");
1503 // support for avatar exporter
1504 //gSavedSettings.declareString("AvExportPath", "", "[NOT USED]");
1505 //gSavedSettings.declareString("AvExportBaseName", "", "[NOT USED]");
1506
1507 // Show in-world hover tips for objects
1508 gSavedSettings.declareBOOL("ShowHoverTips", TRUE, "Show descriptive tooltip when mouse hovers over items in world");
1509 gSavedSettings.declareBOOL("ShowLandHoverTip", FALSE, "Show descriptive tooltip when mouse hovers over land");
1510 gSavedSettings.declareBOOL("ShowAllObjectHoverTip", FALSE, "Show descriptive tooltip when mouse hovers over non-interactive and interactive objects.");
1511
1512 // Use an external web browser (Firefox, Internet Explorer)
1513 gSavedSettings.declareBOOL("UseExternalBrowser", FALSE, "Use default browser when opening web pages instead of in-world browser.");
1514 gSavedSettings.declareBOOL("CookiesEnabled", TRUE, "Accept cookies from Web sites?");
1515
1516 // browser home page
1517 gSavedSettings.declareString("BrowserHomePage", "http://www.secondlife.com", "[NOT USED]");
1518
1519 // browser proxy variables
1520 gSavedSettings.declareBOOL("BrowserProxyEnabled", FALSE, "Use Web Proxy");
1521 gSavedSettings.declareString("BrowserProxyAddress", "", "Address for the Web Proxy]");
1522 gSavedSettings.declareS32("BrowserProxyPort", 3128, "Port for Web Proxy");
1523 gSavedSettings.declareS32("BrowserProxySocks45", 5, "[NOT USED]");
1524 gSavedSettings.declareString("BrowserProxyExclusions", "", "[NOT USED]");
1525
1526 // Allow user to completely disable web pages on prims
1527 gSavedSettings.declareBOOL("UseWebPagesOnPrims", FALSE, "[NOT USED]");
1528
1529 // use object-object occlusion culling
1530 gSavedSettings.declareBOOL("UseOcclusion", TRUE, "Enable object culling based on occlusion (coverage) by other objects");
1531 gSavedSettings.declareBOOL("RenderFastAlpha", FALSE, "Use lossy alpha rendering optimization (opaque/nonexistent small alpha faces).");
1532
1533 gSavedSettings.declareBOOL("DoubleClickAutoPilot", FALSE, "Enable double-click auto pilot");
1534
1535 //cheesy beacon effects
1536 gSavedSettings.declareBOOL("CheesyBeacon", FALSE, "Enable cheesy beacon effects");
1537
1538 //flycam controls and joystick mapping
1539 gSavedSettings.declareS32("FlycamAxis0", 0, "Flycam hardware axis mapping for internal axis 0 ([0, 5]).");
1540 gSavedSettings.declareS32("FlycamAxis1", 1, "Flycam hardware axis mapping for internal axis 1 ([0, 5]).");
1541 gSavedSettings.declareS32("FlycamAxis2", 2, "Flycam hardware axis mapping for internal axis 2 ([0, 5]).");
1542 gSavedSettings.declareS32("FlycamAxis3", 3, "Flycam hardware axis mapping for internal axis 3 ([0, 5]).");
1543 gSavedSettings.declareS32("FlycamAxis4", 4, "Flycam hardware axis mapping for internal axis 4 ([0, 5]).");
1544 gSavedSettings.declareS32("FlycamAxis5", 5, "Flycam hardware axis mapping for internal axis 5 ([0, 5]).");
1545 gSavedSettings.declareS32("FlycamAxis6", -1, "Flycam hardware axis mapping for internal axis 6 ([0, 5]).");
1546
1547 gSavedSettings.declareF32("FlycamAxisScale0", 1, "Flycam axis 0 scaler.");
1548 gSavedSettings.declareF32("FlycamAxisScale1", 1, "Flycam axis 1 scaler.");
1549 gSavedSettings.declareF32("FlycamAxisScale2", 1, "Flycam axis 2 scaler.");
1550 gSavedSettings.declareF32("FlycamAxisScale3", 1, "Flycam axis 3 scaler.");
1551 gSavedSettings.declareF32("FlycamAxisScale4", 1, "Flycam axis 4 scaler.");
1552 gSavedSettings.declareF32("FlycamAxisScale5", 1, "Flycam axis 5 scaler.");
1553 gSavedSettings.declareF32("FlycamAxisScale6", 1, "Flycam axis 6 scaler.");
1554
1555 gSavedSettings.declareF32("FlycamAxisDeadZone0", 0.1f, "Flycam axis 0 dead zone.");
1556 gSavedSettings.declareF32("FlycamAxisDeadZone1", 0.1f, "Flycam axis 1 dead zone.");
1557 gSavedSettings.declareF32("FlycamAxisDeadZone2", 0.1f, "Flycam axis 2 dead zone.");
1558 gSavedSettings.declareF32("FlycamAxisDeadZone3", 0.1f, "Flycam axis 3 dead zone.");
1559 gSavedSettings.declareF32("FlycamAxisDeadZone4", 0.1f, "Flycam axis 4 dead zone.");
1560 gSavedSettings.declareF32("FlycamAxisDeadZone5", 0.1f, "Flycam axis 5 dead zone.");
1561 gSavedSettings.declareF32("FlycamAxisDeadZone6", 0.1f, "Flycam axis 6 dead zone.");
1562
1563 gSavedSettings.declareF32("FlycamFeathering", 16.f, "Flycam feathering (less is softer)");
1564 gSavedSettings.declareBOOL("FlycamAutoLeveling", TRUE, "Keep Flycam level.");
1565 gSavedSettings.declareBOOL("FlycamAbsolute", FALSE, "Treat Flycam values as absolute positions (not deltas).");
1566 gSavedSettings.declareBOOL("FlycamZoomDirect", FALSE, "Map flycam zoom axis directly to camera zoom.");
1567
1568 // logitech LCD settings
1569 gSavedSettings.declareS32("LCDDestination", 0, "Which LCD to use");
1570 gSavedSettings.declareBOOL("DisplayChat", TRUE, "Display Latest Chat message on LCD");
1571 gSavedSettings.declareBOOL("DisplayIM", TRUE, "Display Latest IM message on LCD");
1572 gSavedSettings.declareBOOL("DisplayRegion", TRUE, "Display Location information on LCD");
1573 gSavedSettings.declareBOOL("DisplayDebug", TRUE, "Display Network Information on LCD");
1574 gSavedSettings.declareBOOL("DisplayDebugConsole", TRUE, "Display Console Debug Information on LCD");
1575 gSavedSettings.declareBOOL("DisplayLinden", TRUE, "Display Account Information on LCD");
1576
1577 // Vector Processor & Math
1578 gSavedSettings.declareBOOL("VectorizePerfTest", TRUE, "Test SSE/vectorization performance and choose fastest version.");
1579 gSavedSettings.declareBOOL("VectorizeEnable", FALSE, "Enable general vector operations and data alignment.");
1580 gSavedSettings.declareBOOL("VectorizeSkin", TRUE, "Enable vector operations for avatar skinning.");
1581 gSavedSettings.declareU32( "VectorizeProcessor", 0, "0=Compiler Default, 1=SSE, 2=SSE2, autodetected", NO_PERSIST);
1582
1583 gSavedSettings.declareBOOL("SaveMinidump", TRUE, "Save minidump for developer debugging on crash");
1584
1585 //
1586 // crash_settings.xml
1587 //
1588
1589 // Setting name is shared with win_crash_logger
1590 gCrashSettings.declareS32(CRASH_BEHAVIOR_SETTING, CRASH_BEHAVIOR_ASK, "Controls behavior when viewer crashes "
1591 "(0 = ask before sending crash report, 1 = always send crash report, 2 = never send crash report)");
1592
1593}
1594
1595
1596void fixup_settings()
1597{
1598#if LL_RELEASE_FOR_DOWNLOAD
1599 // Force some settings on startup
1600 gSavedSettings.setBOOL("AnimateTextures", TRUE); // Force AnimateTextures to always be on
1601#endif
1602
1603 // Special code to tweak with defaults
1604 std::string last_major, last_minor, last_patch;
1605 S32 digit = gLastRunVersion.find_first_of("0123456789");
1606 S32 dot = gLastRunVersion.find_first_of('.', digit);
1607 if (dot != std::string::npos && digit != std::string::npos)
1608 {
1609 last_major = gLastRunVersion.substr(digit, dot-digit);
1610 digit = dot+1;
1611 dot = gLastRunVersion.find_first_of('.', digit);
1612 }
1613 if (dot != std::string::npos && digit != std::string::npos)
1614 {
1615 last_minor = gLastRunVersion.substr(digit, dot-digit);
1616 digit = dot+1;
1617 dot = gLastRunVersion.find_first_of('.', digit);
1618 }
1619 if (dot != std::string::npos && digit != std::string::npos)
1620 {
1621 last_patch = gLastRunVersion.substr(digit, dot-digit);
1622 }
1623 // 1.18.x -> 1.19.x
1624 if (last_major == "1" && last_minor == "18")
1625 {
1626 if (!gSavedSettings.hasLoaded("EnableVoiceChat"))
1627 {
1628 gSavedSettings.setBOOL("EnableVoiceChat", FALSE); // Default 1.18.x users to voice chat disabled
1629 }
1630 }
1631
1632 gSavedSettings.clearLoaded();
1633}
1634
1635////////////////////////////////////////////////////////////////////////////
1636// Listeners
1637
1638class LLAFKTimeoutListener: public LLSimpleListener
1639{
1640 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1641 {
1642 gAFKTimeout = (F32) event->getValue().asReal();
1643 return true;
1644 }
1645};
1646static LLAFKTimeoutListener afk_timeout_listener;
1647
1648class LLMouseSensitivityListener: public LLSimpleListener
1649{
1650 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1651 {
1652 gMouseSensitivity = (F32) event->getValue().asReal();
1653 return true;
1654 }
1655};
1656static LLMouseSensitivityListener mouse_sensitivity_listener;
1657
1658
1659class LLInvertMouseListener: public LLSimpleListener
1660{
1661 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1662 {
1663 gInvertMouse = event->getValue().asBoolean();
1664 return true;
1665 }
1666};
1667static LLInvertMouseListener invert_mouse_listener;
1668
1669class LLRenderAvatarMouselookListener: public LLSimpleListener
1670{
1671 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1672 {
1673 LLVOAvatar::sVisibleInFirstPerson = event->getValue().asBoolean();
1674 return true;
1675 }
1676};
1677static LLRenderAvatarMouselookListener render_avatar_mouselook_listener;
1678
1679class LLRenderFarClipListener: public LLSimpleListener
1680{
1681 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1682 {
1683 F32 draw_distance = (F32) event->getValue().asReal();
1684 gAgent.mDrawDistance = draw_distance;
1685 if (gWorldPointer)
1686 {
1687 gWorldPointer->setLandFarClip(draw_distance);
1688 }
1689 return true;
1690 }
1691};
1692static LLRenderFarClipListener render_far_clip_listener;
1693
1694class LLTerrainDetailListener: public LLSimpleListener
1695{
1696 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1697 {
1698 LLDrawPoolTerrain::sDetailMode = event->getValue().asInteger();
1699 return true;
1700 }
1701};
1702static LLTerrainDetailListener terrain_detail_listener;
1703
1704
1705class LLSetShaderListener: public LLSimpleListener
1706{
1707 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1708 {
1709 LLShaderMgr::setShaders();
1710 return true;
1711 }
1712};
1713static LLSetShaderListener set_shader_listener;
1714
1715class LLReleaseGLBufferListener: public LLSimpleListener
1716{
1717 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1718 {
1719 if (gPipeline.isInit())
1720 {
1721 gPipeline.releaseGLBuffers();
1722 gPipeline.createGLBuffers();
1723 }
1724 return true;
1725 }
1726};
1727static LLReleaseGLBufferListener release_gl_buffer_listener;
1728
1729class LLVolumeLODListener: public LLSimpleListener
1730{
1731 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1732 {
1733 LLVOVolume::sLODFactor = (F32) event->getValue().asReal();
1734 LLVOVolume::sDistanceFactor = 1.f-LLVOVolume::sLODFactor * 0.1f;
1735 return true;
1736 }
1737};
1738static LLVolumeLODListener volume_lod_listener;
1739
1740class LLAvatarLODListener: public LLSimpleListener
1741{
1742 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1743 {
1744 LLVOAvatar::sLODFactor = (F32) event->getValue().asReal();
1745 return true;
1746 }
1747};
1748static LLAvatarLODListener avatar_lod_listener;
1749
1750class LLTerrainLODListener: public LLSimpleListener
1751{
1752 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1753 {
1754 LLVOSurfacePatch::sLODFactor = (F32) event->getValue().asReal();
1755 //sqaure lod factor to get exponential range of [0,4] and keep
1756 //a value of 1 in the middle of the detail slider for consistency
1757 //with other detail sliders (see panel_preferences_graphics1.xml)
1758 LLVOSurfacePatch::sLODFactor *= LLVOSurfacePatch::sLODFactor;
1759 return true;
1760 }
1761};
1762static LLTerrainLODListener terrain_lod_listener;
1763
1764class LLTreeLODListener: public LLSimpleListener
1765{
1766 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1767 {
1768 LLVOTree::sTreeFactor = (F32) event->getValue().asReal();
1769 return true;
1770 }
1771};
1772static LLTreeLODListener tree_lod_listener;
1773
1774class LLFlexLODListener: public LLSimpleListener
1775{
1776 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1777 {
1778 LLVolumeImplFlexible::sUpdateFactor = (F32) event->getValue().asReal();
1779 return true;
1780 }
1781};
1782static LLFlexLODListener flex_lod_listener;
1783
1784class LLGammaListener: public LLSimpleListener
1785{
1786 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1787 {
1788 F32 gamma = (F32) event->getValue().asReal();
1789 if (gamma == 0.0f)
1790 {
1791 gamma = 1.0f; // restore normal gamma
1792 }
1793 if (gViewerWindow && gViewerWindow->getWindow() && gamma != gViewerWindow->getWindow()->getGamma())
1794 {
1795 // Only save it if it's changed
1796 if (!gViewerWindow->getWindow()->setGamma(gamma))
1797 {
1798 llwarns << "setGamma failed!" << llendl;
1799 }
1800 }
1801
1802 return true;
1803 }
1804};
1805static LLGammaListener gamma_listener;
1806
1807const F32 MAX_USER_FOG_RATIO = 10.f;
1808const F32 MIN_USER_FOG_RATIO = 0.5f;
1809
1810class LLFogRatioListener: public LLSimpleListener
1811{
1812 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1813 {
1814 F32 fog_ratio = llmax(MIN_USER_FOG_RATIO,
1815 llmin((F32) event->getValue().asReal(),
1816 MAX_USER_FOG_RATIO));
1817 gSky.setFogRatio(fog_ratio);
1818 return true;
1819 }
1820};
1821static LLFogRatioListener fog_ratio_listener;
1822
1823class LLMaxPartCountListener: public LLSimpleListener
1824{
1825 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1826 {
1827 LLViewerPartSim::setMaxPartCount(event->getValue().asInteger());
1828 return true;
1829 }
1830};
1831static LLMaxPartCountListener max_partCount_listener;
1832
1833const S32 MAX_USER_COMPOSITE_LIMIT = 100;
1834const S32 MIN_USER_COMPOSITE_LIMIT = 0;
1835
1836class LLCompositeLimitListener: public LLSimpleListener
1837{
1838 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1839 {
1840 S32 composite_limit = llmax(MIN_USER_COMPOSITE_LIMIT,
1841 llmin((S32)event->getValue().asInteger(),
1842 MAX_USER_COMPOSITE_LIMIT));
1843 LLVOAvatar::sMaxOtherAvatarsToComposite = composite_limit;
1844 return true;
1845 }
1846};
1847static LLCompositeLimitListener composite_limit_listener;
1848
1849class LLVideoMemoryListener: public LLSimpleListener
1850{
1851 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1852 {
1853 gImageList.updateMaxResidentTexMem(event->getValue().asInteger());
1854 return true;
1855 }
1856};
1857static LLVideoMemoryListener video_memory_listener;
1858
1859class LLBandwidthListener: public LLSimpleListener
1860{
1861 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1862 {
1863 gViewerThrottle.setMaxBandwidth((F32) event->getValue().asReal());
1864 return true;
1865 }
1866};
1867static LLBandwidthListener bandwidth_listener;
1868
1869class LLChatFontSizeListener: public LLSimpleListener
1870{
1871 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1872 {
1873 gConsole->setFontSize(event->getValue().asInteger());
1874 return true;
1875 }
1876};
1877static LLChatFontSizeListener chat_font_size_listener;
1878
1879class LLChatPersistTimeListener: public LLSimpleListener
1880{
1881 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1882 {
1883 gConsole->setLinePersistTime((F32) event->getValue().asReal());
1884 return true;
1885 }
1886};
1887static LLChatPersistTimeListener chat_persist_time_listener;
1888
1889class LLConsoleMaxLinesListener: public LLSimpleListener
1890{
1891 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1892 {
1893 gConsole->setMaxLines(event->getValue().asInteger());
1894 return true;
1895 }
1896};
1897static LLConsoleMaxLinesListener console_max_lines_listener;
1898
1899// Listener for all volume settings
1900class LLAudioListener: public LLSimpleListener
1901{
1902 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1903 {
1904 audio_update_volume(true);
1905 return true;
1906 }
1907};
1908static LLAudioListener audio_listener;
1909
1910class LLJoystickListener : public LLSimpleListener
1911{
1912 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1913 {
1914 LLViewerJoystick::updateCamera(TRUE);
1915 return true;
1916 }
1917};
1918static LLJoystickListener joystick_listener;
1919
1920
1921
1922class LLAudioStreamMusicListener: public LLSimpleListener
1923{
1924 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1925 {
1926 if (gAudiop)
1927 {
1928 if ( event->getValue().asBoolean() )
1929 {
1930 if (gParcelMgr
1931 && gParcelMgr->getAgentParcel()
1932 && !gParcelMgr->getAgentParcel()->getMusicURL().empty())
1933 {
1934 // if stream is already playing, don't call this
1935 // otherwise music will briefly stop
1936 if ( ! gAudiop->isInternetStreamPlaying() )
1937 {
1938 gAudiop->startInternetStream(gParcelMgr->getAgentParcel()->getMusicURL().c_str());
1939 }
1940 }
1941 }
1942 else
1943 {
1944 gAudiop->stopInternetStream();
1945 }
1946 }
1947 return true;
1948 }
1949};
1950
1951static LLAudioStreamMusicListener audio_stream_music_listener;
1952
1953
1954
1955class LLUseOcclusionListener: public LLSimpleListener
1956{
1957 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1958 {
1959 LLPipeline::sUseOcclusion = (event->getValue().asBoolean() && gGLManager.mHasOcclusionQuery
1960 && gFeatureManagerp->isFeatureAvailable("UseOcclusion") && !gUseWireframe) ? 2 : 0;
1961 return true;
1962 }
1963};
1964static LLUseOcclusionListener use_occlusion_listener;
1965
1966class LLNumpadControlListener: public LLSimpleListener
1967{
1968 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1969 {
1970 if (gKeyboard)
1971 {
1972 gKeyboard->setNumpadDistinct(static_cast<LLKeyboard::e_numpad_distinct>(event->getValue().asInteger()));
1973 }
1974 return true;
1975 }
1976};
1977
1978static LLNumpadControlListener numpad_control_listener;
1979
1980class LLRenderUseVBOListener: public LLSimpleListener
1981{
1982 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1983 {
1984 if (gPipeline.isInit())
1985 {
1986 gPipeline.setUseVBO(event->getValue().asBoolean());
1987 }
1988 return true;
1989 }
1990};
1991static LLRenderUseVBOListener render_use_vbo_listener;
1992
1993class LLWLSkyDetailListener: public LLSimpleListener
1994{
1995 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1996 {
1997 if (gSky.mVOWLSkyp.notNull())
1998 {
1999 gSky.mVOWLSkyp->updateGeometry(gSky.mVOWLSkyp->mDrawable);
2000 }
2001 return true;
2002 }
2003};
2004static LLWLSkyDetailListener wl_sky_detail_listener;
2005
2006class LLRenderLightingDetailListener: public LLSimpleListener
2007{
2008 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
2009 {
2010 if (gPipeline.isInit())
2011 {
2012 gPipeline.setLightingDetail(event->getValue().asInteger());
2013 }
2014 return true;
2015 }
2016};
2017static LLRenderLightingDetailListener render_lighting_detail_listener;
2018
2019class LLResetVertexBuffersListener: public LLSimpleListener
2020{
2021 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
2022 {
2023 if (gPipeline.isInit())
2024 {
2025 gPipeline.resetVertexBuffers();
2026 }
2027 return true;
2028 }
2029};
2030static LLResetVertexBuffersListener reset_vbo_listener;
2031
2032class LLRenderDynamicLODListener: public LLSimpleListener
2033{
2034 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
2035 {
2036 LLPipeline::sDynamicLOD = event->getValue().asBoolean();
2037 return true;
2038 }
2039};
2040static LLRenderDynamicLODListener render_dynamic_lod_listener;
2041
2042class LLRenderUseFBOListener: public LLSimpleListener
2043{
2044 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
2045 {
2046 LLRenderTarget::sUseFBO = event->getValue().asBoolean();
2047 if (gPipeline.isInit())
2048 {
2049 gPipeline.releaseGLBuffers();
2050 gPipeline.createGLBuffers();
2051 }
2052 return true;
2053 }
2054};
2055static LLRenderUseFBOListener render_use_fbo_listener;
2056
2057class LLRenderUseImpostorsListener : public LLSimpleListener
2058{
2059 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
2060 {
2061 LLVOAvatar::sUseImpostors = event->getValue().asBoolean();
2062 return true;
2063 }
2064};
2065static LLRenderUseImpostorsListener render_use_impostors_listener;
2066
2067class LLRenderUseCleverUIListener : public LLSimpleListener
2068{
2069 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
2070 {
2071 gGL.setClever(event->getValue().asBoolean());
2072 return true;
2073 }
2074};
2075static LLRenderUseCleverUIListener render_use_clever_ui_listener;
2076
2077class LLRenderResolutionDivisorListener : public LLSimpleListener
2078{
2079 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
2080 {
2081 gResizeScreenTexture = TRUE;
2082 return true;
2083 }
2084};
2085static LLRenderResolutionDivisorListener render_resolution_divisor_listener;
2086////////////////////////////////////////////////////////////////////////////
2087
2088void settings_setup_listeners()
2089{
2090 gSavedSettings.getControl("FirstPersonAvatarVisible")->addListener(&render_avatar_mouselook_listener);
2091 gSavedSettings.getControl("MouseSensitivity")->addListener(&mouse_sensitivity_listener);
2092 gSavedSettings.getControl("InvertMouse")->addListener(&invert_mouse_listener);
2093 gSavedSettings.getControl("AFKTimeout")->addListener(&afk_timeout_listener);
2094 gSavedSettings.getControl("RenderFarClip")->addListener(&render_far_clip_listener);
2095 gSavedSettings.getControl("RenderTerrainDetail")->addListener(&terrain_detail_listener);
2096 gSavedSettings.getControl("RenderAvatarVP")->addListener(&set_shader_listener);
2097 gSavedSettings.getControl("VertexShaderEnable")->addListener(&set_shader_listener);
2098 gSavedSettings.getControl("RenderDynamicReflections")->addListener(&set_shader_listener);
2099 gSavedSettings.getControl("RenderGlow")->addListener(&release_gl_buffer_listener);
2100 gSavedSettings.getControl("RenderGlow")->addListener(&set_shader_listener);
2101 gSavedSettings.getControl("EnableRippleWater")->addListener(&set_shader_listener);
2102 gSavedSettings.getControl("RenderGlowResolutionPow")->addListener(&release_gl_buffer_listener);
2103 gSavedSettings.getControl("RenderAvatarCloth")->addListener(&set_shader_listener);
2104 gSavedSettings.getControl("WindLightUseAtmosShaders")->addListener(&set_shader_listener);
2105 gSavedSettings.getControl("RenderGammaFull")->addListener(&set_shader_listener);
2106 gSavedSettings.getControl("RenderVolumeLODFactor")->addListener(&volume_lod_listener);
2107 gSavedSettings.getControl("RenderAvatarLODFactor")->addListener(&avatar_lod_listener);
2108 gSavedSettings.getControl("RenderTerrainLODFactor")->addListener(&terrain_lod_listener);
2109 gSavedSettings.getControl("RenderTreeLODFactor")->addListener(&tree_lod_listener);
2110 gSavedSettings.getControl("RenderFlexTimeFactor")->addListener(&flex_lod_listener);
2111 gSavedSettings.getControl("ThrottleBandwidthKBPS")->addListener(&bandwidth_listener);
2112 gSavedSettings.getControl("RenderGamma")->addListener(&gamma_listener);
2113 gSavedSettings.getControl("RenderFogRatio")->addListener(&fog_ratio_listener);
2114 gSavedSettings.getControl("RenderMaxPartCount")->addListener(&max_partCount_listener);
2115 gSavedSettings.getControl("RenderDynamicLOD")->addListener(&render_dynamic_lod_listener);
2116 gSavedSettings.getControl("RenderDebugTextureBind")->addListener(&reset_vbo_listener);
2117 gSavedSettings.getControl("RenderFastAlpha")->addListener(&reset_vbo_listener);
2118 gSavedSettings.getControl("RenderObjectBump")->addListener(&reset_vbo_listener);
2119 gSavedSettings.getControl("RenderMaxVBOSize")->addListener(&reset_vbo_listener);
2120 gSavedSettings.getControl("RenderUseFBO")->addListener(&render_use_fbo_listener);
2121 gSavedSettings.getControl("RenderUseImpostors")->addListener(&render_use_impostors_listener);
2122 gSavedSettings.getControl("RenderUseCleverUI")->addListener(&render_use_clever_ui_listener);
2123 gSavedSettings.getControl("RenderResolutionDivisor")->addListener(&render_resolution_divisor_listener);
2124 gSavedSettings.getControl("AvatarCompositeLimit")->addListener(&composite_limit_listener);
2125 gSavedSettings.getControl("TextureMemory")->addListener(&video_memory_listener);
2126 gSavedSettings.getControl("ChatFontSize")->addListener(&chat_font_size_listener);
2127 gSavedSettings.getControl("ChatPersistTime")->addListener(&chat_persist_time_listener);
2128 gSavedSettings.getControl("ConsoleMaxLines")->addListener(&console_max_lines_listener);
2129 gSavedSettings.getControl("UseOcclusion")->addListener(&use_occlusion_listener);
2130 gSavedSettings.getControl("AudioLevelMaster")->addListener(&audio_listener);
2131 gSavedSettings.getControl("AudioLevelSFX")->addListener(&audio_listener);
2132 gSavedSettings.getControl("AudioLevelUI")->addListener(&audio_listener);
2133 gSavedSettings.getControl("AudioLevelAmbient")->addListener(&audio_listener);
2134 gSavedSettings.getControl("AudioLevelMusic")->addListener(&audio_listener);
2135 gSavedSettings.getControl("AudioLevelMedia")->addListener(&audio_listener);
2136 gSavedSettings.getControl("AudioLevelVoice")->addListener(&audio_listener);
2137 gSavedSettings.getControl("AudioLevelDistance")->addListener(&audio_listener);
2138 gSavedSettings.getControl("AudioLevelDoppler")->addListener(&audio_listener);
2139 gSavedSettings.getControl("AudioLevelRolloff")->addListener(&audio_listener);
2140 gSavedSettings.getControl("AudioStreamingMusic")->addListener(&audio_stream_music_listener);
2141 // AudioStreamingVideo initialized in llviewermedia.cpp
2142 gSavedSettings.getControl("MuteAudio")->addListener(&audio_listener);
2143 gSavedSettings.getControl("MuteMusic")->addListener(&audio_listener);
2144 gSavedSettings.getControl("MuteMedia")->addListener(&audio_listener);
2145 gSavedSettings.getControl("MuteVoice")->addListener(&audio_listener);
2146 gSavedSettings.getControl("MuteAmbient")->addListener(&audio_listener);
2147 gSavedSettings.getControl("MuteUI")->addListener(&audio_listener);
2148 gSavedSettings.getControl("RenderVBOEnable")->addListener(&render_use_vbo_listener);
2149 gSavedSettings.getControl("WLSkyDetail")->addListener(&wl_sky_detail_listener);
2150 gSavedSettings.getControl("RenderLightingDetail")->addListener(&render_lighting_detail_listener);
2151 gSavedSettings.getControl("NumpadControl")->addListener(&numpad_control_listener);
2152 gSavedSettings.getControl("FlycamAxis0")->addListener(&joystick_listener);
2153 gSavedSettings.getControl("FlycamAxis1")->addListener(&joystick_listener);
2154 gSavedSettings.getControl("FlycamAxis2")->addListener(&joystick_listener);
2155 gSavedSettings.getControl("FlycamAxis3")->addListener(&joystick_listener);
2156 gSavedSettings.getControl("FlycamAxis4")->addListener(&joystick_listener);
2157 gSavedSettings.getControl("FlycamAxis5")->addListener(&joystick_listener);
2158 gSavedSettings.getControl("FlycamAxis6")->addListener(&joystick_listener);
2159}
diff --git a/linden/indra/newview/llcubemap.cpp b/linden/indra/newview/llcubemap.cpp
index baa33ac..e11f058 100644
--- a/linden/indra/newview/llcubemap.cpp
+++ b/linden/indra/newview/llcubemap.cpp
@@ -71,7 +71,7 @@ void LLCubeMap::initGL()
71 llassert(gGLManager.mInited); 71 llassert(gGLManager.mInited);
72 72
73 if (gGLManager.mHasCubeMap 73 if (gGLManager.mHasCubeMap
74 && gFeatureManagerp->isFeatureAvailable("RenderCubeMap")) 74 && LLFeatureManager::getInstance()->isFeatureAvailable("RenderCubeMap"))
75 { 75 {
76 mTargets[0] = GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB; 76 mTargets[0] = GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB;
77 mTargets[1] = GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB; 77 mTargets[1] = GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB;
@@ -181,7 +181,7 @@ GLuint LLCubeMap::getGLName()
181void LLCubeMap::bind() 181void LLCubeMap::bind()
182{ 182{
183 if (gGLManager.mHasCubeMap 183 if (gGLManager.mHasCubeMap
184 //&& gFeatureManagerp->isFeatureAvailable("RenderCubeMap") 184 //&& LLFeatureManager::getInstance()->isFeatureAvailable("RenderCubeMap")
185 ) 185 )
186 { 186 {
187 // We assume that if they have cube mapping, they have multitexturing. 187 // We assume that if they have cube mapping, they have multitexturing.
@@ -209,7 +209,7 @@ void LLCubeMap::enableTexture(S32 stage)
209 mTextureStage = stage; 209 mTextureStage = stage;
210 if (gGLManager.mHasCubeMap && 210 if (gGLManager.mHasCubeMap &&
211 stage >= 0 211 stage >= 0
212 //&& gFeatureManagerp->isFeatureAvailable("RenderCubeMap") 212 //&& LLFeatureManager::getInstance()->isFeatureAvailable("RenderCubeMap")
213 ) 213 )
214 { 214 {
215 glActiveTextureARB(GL_TEXTURE0_ARB + stage); // NOTE: leaves texture stage set 215 glActiveTextureARB(GL_TEXTURE0_ARB + stage); // NOTE: leaves texture stage set
@@ -246,7 +246,7 @@ void LLCubeMap::disable(void)
246void LLCubeMap::disableTexture(void) 246void LLCubeMap::disableTexture(void)
247{ 247{
248 if (gGLManager.mHasCubeMap && mTextureStage >= 0 248 if (gGLManager.mHasCubeMap && mTextureStage >= 0
249 //&& gFeatureManagerp->isFeatureAvailable("RenderCubeMap") 249 //&& LLFeatureManager::getInstance()->isFeatureAvailable("RenderCubeMap")
250 ) 250 )
251 { 251 {
252 glActiveTextureARB(GL_TEXTURE0_ARB + mTextureStage); 252 glActiveTextureARB(GL_TEXTURE0_ARB + mTextureStage);
diff --git a/linden/indra/newview/llcurrencyuimanager.cpp b/linden/indra/newview/llcurrencyuimanager.cpp
index 74ee8cc..8964054 100644
--- a/linden/indra/newview/llcurrencyuimanager.cpp
+++ b/linden/indra/newview/llcurrencyuimanager.cpp
@@ -349,7 +349,7 @@ void LLCurrencyUIManager::Impl::onCurrencyKey(
349 349
350void LLCurrencyUIManager::Impl::prepare() 350void LLCurrencyUIManager::Impl::prepare()
351{ 351{
352 LLLineEditor* lindenAmount = LLUICtrlFactory::getLineEditorByName(&mPanel,"currency_amt"); 352 LLLineEditor* lindenAmount = mPanel.getChild<LLLineEditor>("currency_amt");
353 if (lindenAmount) 353 if (lindenAmount)
354 { 354 {
355 lindenAmount->setPrevalidate(LLLineEditor::prevalidateNonNegativeS32); 355 lindenAmount->setPrevalidate(LLLineEditor::prevalidateNonNegativeS32);
@@ -370,7 +370,7 @@ void LLCurrencyUIManager::Impl::updateUI()
370 370
371 mPanel.childShow("currency_action"); 371 mPanel.childShow("currency_action");
372 372
373 LLLineEditor* lindenAmount = LLUICtrlFactory::getLineEditorByName(&mPanel,"currency_amt"); 373 LLLineEditor* lindenAmount = mPanel.getChild<LLLineEditor>("currency_amt");
374 if (lindenAmount) 374 if (lindenAmount)
375 { 375 {
376 lindenAmount->setVisible(true); 376 lindenAmount->setVisible(true);
diff --git a/linden/indra/newview/lldebugview.cpp b/linden/indra/newview/lldebugview.cpp
index a512d62..9e64a60 100644
--- a/linden/indra/newview/lldebugview.cpp
+++ b/linden/indra/newview/lldebugview.cpp
@@ -43,6 +43,7 @@
43#include "imageids.h" 43#include "imageids.h"
44#include "llvelocitybar.h" 44#include "llvelocitybar.h"
45#include "llviewerwindow.h" 45#include "llviewerwindow.h"
46#include "llfloaterstats.h"
46 47
47// 48//
48// Globals 49// Globals
@@ -100,16 +101,15 @@ LLDebugView::LLDebugView(const std::string& name, const LLRect &rect)
100 // Debug statistics 101 // Debug statistics
101 // 102 //
102 r.set(rect.getWidth() - 250, 103 r.set(rect.getWidth() - 250,
103 rect.getHeight(), 104 rect.getHeight() - 50,
104 rect.getWidth(), 105 rect.getWidth(),
105 rect.getHeight() - 400); 106 rect.getHeight() - 450);
106 mStatViewp = new LLContainerView("statistics", r); 107 mFloaterStatsp = new LLFloaterStats(r);
107 mStatViewp->setLabel("Statistics"); 108
108 mStatViewp->setFollowsTop(); 109 mFloaterStatsp->setFollowsTop();
109 mStatViewp->setFollowsRight(); 110 mFloaterStatsp->setFollowsRight();
110 // Default to off 111 // since this is a floater, it belongs to LLFloaterView
111 mStatViewp->setVisible(FALSE); 112 //addChild(mFloaterStatsp);
112 addChild(mStatViewp);
113 113
114 const S32 VELOCITY_LEFT = 10; // 370; 114 const S32 VELOCITY_LEFT = 10; // 370;
115 const S32 VELOCITY_WIDTH = 500; 115 const S32 VELOCITY_WIDTH = 500;
@@ -130,13 +130,3 @@ LLDebugView::~LLDebugView()
130 gTextureView = NULL; 130 gTextureView = NULL;
131} 131}
132 132
133EWidgetType LLDebugView::getWidgetType() const
134{
135 return WIDGET_TYPE_DEBUG_VIEW;
136}
137
138LLString LLDebugView::getWidgetTag() const
139{
140 return LL_DEBUG_VIEW_TAG;
141}
142
diff --git a/linden/indra/newview/lldebugview.h b/linden/indra/newview/lldebugview.h
index edaf253..aaa1f57 100644
--- a/linden/indra/newview/lldebugview.h
+++ b/linden/indra/newview/lldebugview.h
@@ -46,7 +46,7 @@ class LLFastTimerView;
46class LLMemoryView; 46class LLMemoryView;
47class LLConsole; 47class LLConsole;
48class LLTextureView; 48class LLTextureView;
49class LLContainerView; 49class LLFloaterStats;
50 50
51class LLDebugView : public LLView 51class LLDebugView : public LLView
52{ 52{
@@ -54,14 +54,11 @@ public:
54 LLDebugView(const std::string& name, const LLRect &rect); 54 LLDebugView(const std::string& name, const LLRect &rect);
55 ~LLDebugView(); 55 ~LLDebugView();
56 56
57 virtual EWidgetType getWidgetType() const;
58 virtual LLString getWidgetTag() const;
59
60 LLFrameStatView* mFrameStatView; 57 LLFrameStatView* mFrameStatView;
61 LLFastTimerView* mFastTimerView; 58 LLFastTimerView* mFastTimerView;
62 LLMemoryView* mMemoryView; 59 LLMemoryView* mMemoryView;
63 LLConsole* mDebugConsolep; 60 LLConsole* mDebugConsolep;
64 LLContainerView* mStatViewp; 61 LLFloaterStats* mFloaterStatsp;
65}; 62};
66 63
67extern LLDebugView* gDebugView; 64extern LLDebugView* gDebugView;
diff --git a/linden/indra/newview/lldelayedgestureerror.cpp b/linden/indra/newview/lldelayedgestureerror.cpp
new file mode 100644
index 0000000..0a1c9df
--- /dev/null
+++ b/linden/indra/newview/lldelayedgestureerror.cpp
@@ -0,0 +1,125 @@
1/**
2 * @file lldelayedgestureerror.cpp
3 * @brief Delayed gesture error message -- try to wait until name has been retrieved
4 * @author Dale Glass
5 *
6 * $LicenseInfo:firstyear=2004&license=viewergpl$
7 *
8 * Copyright (c) 2004-2008, Linden Research, Inc.
9 *
10 * Second Life Viewer Source Code
11 * The source code in this file ("Source Code") is provided by Linden Lab
12 * to you under the terms of the GNU General Public License, version 2.0
13 * ("GPL"), unless you have obtained a separate licensing agreement
14 * ("Other License"), formally executed by you and Linden Lab. Terms of
15 * the GPL can be found in doc/GPL-license.txt in this distribution, or
16 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
17 *
18 * There are special exceptions to the terms and conditions of the GPL as
19 * it is applied to this Source Code. View the full text of the exception
20 * in the file doc/FLOSS-exception.txt in this software distribution, or
21 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
22 *
23 * By copying, modifying or distributing this software, you acknowledge
24 * that you have read and understood your obligations described above,
25 * and agree to abide by those obligations.
26 *
27 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
28 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
29 * COMPLETENESS OR PERFORMANCE.
30 * $/LicenseInfo$
31 */
32
33#include "llviewerprecompiledheaders.h"
34#include "lldelayedgestureerror.h"
35#include <list>
36#include "llnotify.h"
37#include "llcallbacklist.h"
38#include "llinventory.h"
39#include "llviewerinventory.h"
40#include "llinventorymodel.h"
41
42const F32 MAX_NAME_WAIT_TIME = 5.0f;
43
44LLDelayedGestureError::ErrorQueue LLDelayedGestureError::sQueue;
45
46//static
47void LLDelayedGestureError::gestureMissing(const LLUUID &id)
48{
49 LLErrorEntry ent("GestureMissing", id);
50 if ( ! doDialog(ent) )
51 {
52 enqueue(ent);
53 }
54}
55
56//static
57void LLDelayedGestureError::gestureFailedToLoad(const LLUUID &id)
58{
59 LLErrorEntry ent("UnableToLoadGesture", id);
60
61 if ( ! doDialog(ent) )
62 {
63 enqueue(ent);
64 }
65}
66
67//static
68void LLDelayedGestureError::enqueue(const LLErrorEntry &ent)
69{
70 if ( sQueue.empty() )
71 {
72 gIdleCallbacks.addFunction(onIdle, NULL);
73 }
74
75 sQueue.push_back(ent);
76}
77
78//static
79void LLDelayedGestureError::onIdle(void *userdata)
80{
81 if ( ! sQueue.empty() )
82 {
83 LLErrorEntry ent = sQueue.front();
84 sQueue.pop_front();
85
86 if ( ! doDialog(ent, false ) )
87 {
88 enqueue(ent);
89 }
90 }
91 else
92 {
93 // Nothing to do anymore
94 gIdleCallbacks.deleteFunction(onIdle, NULL);
95 }
96}
97
98//static
99bool LLDelayedGestureError::doDialog(const LLErrorEntry &ent, bool uuid_ok)
100{
101 LLStringBase<char>::format_map_t args;
102 LLInventoryItem *item = gInventory.getItem( ent.mItemID );
103
104 if ( item )
105 {
106 args["[NAME]"] = item->getName();
107 }
108 else
109 {
110 if ( uuid_ok || ent.mTimer.getElapsedTimeF32() > MAX_NAME_WAIT_TIME )
111 {
112 args["[NAME]"] = LLString( ent.mItemID.asString() );
113 }
114 else
115 {
116 return false;
117 }
118 }
119
120
121 LLNotifyBox::showXml(ent.mNotifyName, args);
122
123 return true;
124}
125
diff --git a/linden/indra/newview/lldelayedgestureerror.h b/linden/indra/newview/lldelayedgestureerror.h
new file mode 100644
index 0000000..9f8e9e0
--- /dev/null
+++ b/linden/indra/newview/lldelayedgestureerror.h
@@ -0,0 +1,82 @@
1/**
2 * @file lldelayedgestureerror.h
3 * @brief Delayed gesture error message -- try to wait until name has been retrieved
4 * @author Dale Glass
5 *
6 * $LicenseInfo:firstyear=2004&license=viewergpl$
7 *
8 * Copyright (c) 2004-2008, Linden Research, Inc.
9 *
10 * Second Life Viewer Source Code
11 * The source code in this file ("Source Code") is provided by Linden Lab
12 * to you under the terms of the GNU General Public License, version 2.0
13 * ("GPL"), unless you have obtained a separate licensing agreement
14 * ("Other License"), formally executed by you and Linden Lab. Terms of
15 * the GPL can be found in doc/GPL-license.txt in this distribution, or
16 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
17 *
18 * There are special exceptions to the terms and conditions of the GPL as
19 * it is applied to this Source Code. View the full text of the exception
20 * in the file doc/FLOSS-exception.txt in this software distribution, or
21 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
22 *
23 * By copying, modifying or distributing this software, you acknowledge
24 * that you have read and understood your obligations described above,
25 * and agree to abide by those obligations.
26 *
27 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
28 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
29 * COMPLETENESS OR PERFORMANCE.
30 * $/LicenseInfo$
31 */
32
33
34#ifndef LL_DELAYEDGESTUREERROR_H
35#define LL_DELAYEDGESTUREERROR_H
36
37#include <list>
38#include "lltimer.h"
39
40// TODO: Refactor to be more generic - this may be useful for other delayed notifications in the future
41
42class LLDelayedGestureError
43{
44public:
45 /**
46 * @brief Generates a missing gesture error
47 * @param id UUID of missing gesture
48 * Delays message for up to 5 seconds if UUID can't be immediately converted to a text description
49 */
50 static void gestureMissing(const LLUUID &id);
51
52 /**
53 * @brief Generates a gesture failed to load error
54 * @param id UUID of missing gesture
55 * Delays message for up to 5 seconds if UUID can't be immediately converted to a text description
56 */
57 static void gestureFailedToLoad(const LLUUID &id);
58
59private:
60
61
62 struct LLErrorEntry
63 {
64 LLErrorEntry(const LLString& notify, const LLUUID &item) : mTimer(), mNotifyName(notify), mItemID(item) {}
65
66 LLTimer mTimer;
67 LLString mNotifyName;
68 LLUUID mItemID;
69 };
70
71
72 static bool doDialog(const LLErrorEntry &ent, bool uuid_ok = false);
73 static void enqueue(const LLErrorEntry &ent);
74 static void onIdle(void *userdata);
75
76 typedef std::list<LLErrorEntry> ErrorQueue;
77
78 static ErrorQueue sQueue;
79};
80
81
82#endif
diff --git a/linden/indra/newview/lldrawable.cpp b/linden/indra/newview/lldrawable.cpp
index 228049f..3a2841d 100644
--- a/linden/indra/newview/lldrawable.cpp
+++ b/linden/indra/newview/lldrawable.cpp
@@ -85,7 +85,7 @@ LLDynamicArrayPtr<LLPointer<LLDrawable> > LLDrawable::sDeadList;
85void LLDrawable::incrementVisible() 85void LLDrawable::incrementVisible()
86{ 86{
87 sCurVisible++; 87 sCurVisible++;
88 sCurPixelAngle = (F32) gViewerWindow->getWindowDisplayHeight()/gCamera->getView(); 88 sCurPixelAngle = (F32) gViewerWindow->getWindowDisplayHeight()/LLViewerCamera::getInstance()->getView();
89} 89}
90void LLDrawable::init() 90void LLDrawable::init()
91{ 91{
diff --git a/linden/indra/newview/lldrawpoolalpha.cpp b/linden/indra/newview/lldrawpoolalpha.cpp
index 1ad7132..cc2600e 100644
--- a/linden/indra/newview/lldrawpoolalpha.cpp
+++ b/linden/indra/newview/lldrawpoolalpha.cpp
@@ -208,7 +208,7 @@ void LLDrawPoolAlpha::renderGroupAlpha(LLSpatialGroup* group, U32 type, U32 mask
208 // and it's close 208 // and it's close
209 if(is_particle && !gSavedSettings.getBOOL("RenderUseShaderNearParticles")) 209 if(is_particle && !gSavedSettings.getBOOL("RenderUseShaderNearParticles"))
210 { 210 {
211 if((dist < gCamera->getFar() * gSavedSettings.getF32("RenderShaderParticleThreshold"))) 211 if((dist < LLViewerCamera::getInstance()->getFar() * gSavedSettings.getF32("RenderShaderParticleThreshold")))
212 { 212 {
213 use_shaders = FALSE; 213 use_shaders = FALSE;
214 } 214 }
diff --git a/linden/indra/newview/lldrawpoolavatar.cpp b/linden/indra/newview/lldrawpoolavatar.cpp
index 5518a93..b461757 100644
--- a/linden/indra/newview/lldrawpoolavatar.cpp
+++ b/linden/indra/newview/lldrawpoolavatar.cpp
@@ -463,7 +463,7 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
463 if ((sShaderLevel >= SHADER_LEVEL_CLOTH)) 463 if ((sShaderLevel >= SHADER_LEVEL_CLOTH))
464 { 464 {
465 LLMatrix4 rot_mat; 465 LLMatrix4 rot_mat;
466 gCamera->getMatrixToLocal(rot_mat); 466 LLViewerCamera::getInstance()->getMatrixToLocal(rot_mat);
467 LLMatrix4 cfr(OGL_TO_CFR_ROTATION); 467 LLMatrix4 cfr(OGL_TO_CFR_ROTATION);
468 rot_mat *= cfr; 468 rot_mat *= cfr;
469 469
diff --git a/linden/indra/newview/lldrawpoolbump.cpp b/linden/indra/newview/lldrawpoolbump.cpp
index 0bfb737..2345406 100644
--- a/linden/indra/newview/lldrawpoolbump.cpp
+++ b/linden/indra/newview/lldrawpoolbump.cpp
@@ -141,7 +141,12 @@ void LLStandardBumpmap::restoreGL()
141 141
142// llinfos << "Loading bumpmap: " << bump_file << " from viewerart" << llendl; 142// llinfos << "Loading bumpmap: " << bump_file << " from viewerart" << llendl;
143 gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mLabel = label; 143 gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mLabel = label;
144 gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage = gImageList.getImage( LLUUID(gViewerArt.getString(bump_file)) ); 144 gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage =
145 gImageList.getImageFromFile(bump_file,
146 TRUE,
147 FALSE,
148 0,
149 0);
145 LLStandardBumpmap::sStandardBumpmapCount++; 150 LLStandardBumpmap::sStandardBumpmapCount++;
146 } 151 }
147 152
diff --git a/linden/indra/newview/lldrawpoolground.cpp b/linden/indra/newview/lldrawpoolground.cpp
index dc5e397..a1c5a99 100644
--- a/linden/indra/newview/lldrawpoolground.cpp
+++ b/linden/indra/newview/lldrawpoolground.cpp
@@ -79,7 +79,7 @@ void LLDrawPoolGround::render(S32 pass)
79 79
80 F32 water_height = gAgent.getRegion()->getWaterHeight(); 80 F32 water_height = gAgent.getRegion()->getWaterHeight();
81 glPushMatrix(); 81 glPushMatrix();
82 LLVector3 origin = gCamera->getOrigin(); 82 LLVector3 origin = LLViewerCamera::getInstance()->getOrigin();
83 glTranslatef(origin.mV[0], origin.mV[1], llmax(origin.mV[2], water_height)); 83 glTranslatef(origin.mV[0], origin.mV[1], llmax(origin.mV[2], water_height));
84 84
85 LLFace *facep = mDrawFace[0]; 85 LLFace *facep = mDrawFace[0];
diff --git a/linden/indra/newview/lldrawpoolsky.cpp b/linden/indra/newview/lldrawpoolsky.cpp
index ef91b58..ac5c389 100644
--- a/linden/indra/newview/lldrawpoolsky.cpp
+++ b/linden/indra/newview/lldrawpoolsky.cpp
@@ -103,14 +103,14 @@ void LLDrawPoolSky::render(S32 pass)
103 103
104 LLGLClampToFarClip far_clip(glh_get_current_projection()); 104 LLGLClampToFarClip far_clip(glh_get_current_projection());
105 105
106 LLGLEnable fog_enable( (mVertexShaderLevel < 1 && gCamera->cameraUnderWater()) ? GL_FOG : 0); 106 LLGLEnable fog_enable( (mVertexShaderLevel < 1 && LLViewerCamera::getInstance()->cameraUnderWater()) ? GL_FOG : 0);
107 107
108 gPipeline.disableLights(); 108 gPipeline.disableLights();
109 109
110 LLGLDisable clip(GL_CLIP_PLANE0); 110 LLGLDisable clip(GL_CLIP_PLANE0);
111 111
112 glPushMatrix(); 112 glPushMatrix();
113 LLVector3 origin = gCamera->getOrigin(); 113 LLVector3 origin = LLViewerCamera::getInstance()->getOrigin();
114 glTranslatef(origin.mV[0], origin.mV[1], origin.mV[2]); 114 glTranslatef(origin.mV[0], origin.mV[1], origin.mV[2]);
115 115
116 glEnableClientState(GL_VERTEX_ARRAY); 116 glEnableClientState(GL_VERTEX_ARRAY);
diff --git a/linden/indra/newview/lldrawpoolterrain.cpp b/linden/indra/newview/lldrawpoolterrain.cpp
index 82fcd59..1d43698 100644
--- a/linden/indra/newview/lldrawpoolterrain.cpp
+++ b/linden/indra/newview/lldrawpoolterrain.cpp
@@ -68,13 +68,15 @@ LLDrawPoolTerrain::LLDrawPoolTerrain(LLViewerImage *texturep) :
68 // Hack! 68 // Hack!
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.getImageFromUUID(LLUUID(gViewerArt.getString("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 mAlphaRampImagep->bind(0); 74 mAlphaRampImagep->bind(0);
74 mAlphaRampImagep->setClamp(TRUE, TRUE); 75 mAlphaRampImagep->setClamp(TRUE, TRUE);
75 76
76 m2DAlphaRampImagep = gImageList.getImageFromUUID(LLUUID(gViewerArt.getString("alpha_gradient_2d.tga")), 77 m2DAlphaRampImagep = gImageList.getImageFromFile("alpha_gradient_2d.j2c",
77 TRUE, TRUE, GL_ALPHA8, GL_ALPHA); 78 TRUE, TRUE, GL_ALPHA8, GL_ALPHA,
79 LLUUID("38b86f85-2575-52a9-a531-23108d8da837"));
78 m2DAlphaRampImagep->bind(0); 80 m2DAlphaRampImagep->bind(0);
79 m2DAlphaRampImagep->setClamp(TRUE, TRUE); 81 m2DAlphaRampImagep->setClamp(TRUE, TRUE);
80 82
diff --git a/linden/indra/newview/lldrawpoolwater.cpp b/linden/indra/newview/lldrawpoolwater.cpp
index ed0077a..922a5d8 100644
--- a/linden/indra/newview/lldrawpoolwater.cpp
+++ b/linden/indra/newview/lldrawpoolwater.cpp
@@ -59,6 +59,7 @@ static float sTime;
59 59
60BOOL LLDrawPoolWater::sSkipScreenCopy = FALSE; 60BOOL LLDrawPoolWater::sSkipScreenCopy = FALSE;
61BOOL LLDrawPoolWater::sNeedsReflectionUpdate = TRUE; 61BOOL LLDrawPoolWater::sNeedsReflectionUpdate = TRUE;
62BOOL LLDrawPoolWater::sNeedsDistortionUpdate = TRUE;
62LLColor4 LLDrawPoolWater::sWaterFogColor = LLColor4(0.2f, 0.5f, 0.5f, 0.f); 63LLColor4 LLDrawPoolWater::sWaterFogColor = LLColor4(0.2f, 0.5f, 0.5f, 0.f);
63LLVector3 LLDrawPoolWater::sLightDir; 64LLVector3 LLDrawPoolWater::sLightDir;
64 65
@@ -74,8 +75,7 @@ LLDrawPoolWater::LLDrawPoolWater() :
74 mHBTex[1]->setClamp(TRUE, TRUE); 75 mHBTex[1]->setClamp(TRUE, TRUE);
75 76
76 mWaterImagep = gImageList.getImage(WATER_TEST); 77 mWaterImagep = gImageList.getImage(WATER_TEST);
77 //mWaterNormp = gImageList.getImage(LLUUID(gViewerArt.getString("water_normal.tga"))); 78 mWaterNormp = gImageList.getImage(DEFAULT_WATER_NORMAL);
78 mWaterNormp = gImageList.getImage(LLWaterParamManager::instance()->getNormalMapID());
79 79
80 restoreGL(); 80 restoreGL();
81} 81}
@@ -99,7 +99,7 @@ LLDrawPool *LLDrawPoolWater::instancePool()
99 99
100void LLDrawPoolWater::prerender() 100void LLDrawPoolWater::prerender()
101{ 101{
102 mVertexShaderLevel = (gGLManager.mHasCubeMap && gFeatureManagerp->isFeatureAvailable("RenderCubeMap")) ? 102 mVertexShaderLevel = (gGLManager.mHasCubeMap && LLFeatureManager::getInstance()->isFeatureAvailable("RenderCubeMap")) ?
103 LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_WATER) : 0; 103 LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_WATER) : 0;
104 104
105 // got rid of modulation by light color since it got a little too 105 // got rid of modulation by light color since it got a little too
@@ -111,7 +111,7 @@ void LLDrawPoolWater::prerender()
111 111
112S32 LLDrawPoolWater::getNumPasses() 112S32 LLDrawPoolWater::getNumPasses()
113{ 113{
114 if (gCamera->getOrigin().mV[2] < 1024.f) 114 if (LLViewerCamera::getInstance()->getOrigin().mV[2] < 1024.f)
115 { 115 {
116 return 1; 116 return 1;
117 } 117 }
@@ -176,11 +176,11 @@ void LLDrawPoolWater::render(S32 pass)
176 glDisableClientState(GL_TEXTURE_COORD_ARRAY); 176 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
177 glEnable(GL_TEXTURE_2D); // Texture unit 1 177 glEnable(GL_TEXTURE_2D); // Texture unit 1
178 178
179 LLVector3 camera_up = gCamera->getUpAxis(); 179 LLVector3 camera_up = LLViewerCamera::getInstance()->getUpAxis();
180 F32 up_dot = camera_up * LLVector3::z_axis; 180 F32 up_dot = camera_up * LLVector3::z_axis;
181 181
182 LLColor4 water_color; 182 LLColor4 water_color;
183 if (gCamera->cameraUnderWater()) 183 if (LLViewerCamera::getInstance()->cameraUnderWater())
184 { 184 {
185 water_color.setVec(1.f, 1.f, 1.f, 0.4f); 185 water_color.setVec(1.f, 1.f, 1.f, 0.4f);
186 } 186 }
@@ -260,7 +260,7 @@ void LLDrawPoolWater::render(S32 pass)
260 260
261 glMatrixMode(GL_TEXTURE); 261 glMatrixMode(GL_TEXTURE);
262 glLoadIdentity(); 262 glLoadIdentity();
263 LLMatrix4 camera_mat = gCamera->getModelview(); 263 LLMatrix4 camera_mat = LLViewerCamera::getInstance()->getModelview();
264 LLMatrix4 camera_rot(camera_mat.getMat3()); 264 LLMatrix4 camera_rot(camera_mat.getMat3());
265 camera_rot.invert(); 265 camera_rot.invert();
266 266
@@ -404,7 +404,7 @@ void LLDrawPoolWater::shade()
404 404
405 LLGLSLShader* shader; 405 LLGLSLShader* shader;
406 406
407 F32 eyedepth = gCamera->getOrigin().mV[2] - gAgent.getRegion()->getWaterHeight(); 407 F32 eyedepth = LLViewerCamera::getInstance()->getOrigin().mV[2] - gAgent.getRegion()->getWaterHeight();
408 408
409 if (eyedepth < 0.f && LLPipeline::sWaterReflections) 409 if (eyedepth < 0.f && LLPipeline::sWaterReflections)
410 { 410 {
@@ -487,7 +487,7 @@ void LLDrawPoolWater::shade()
487 //shader->uniformMatrix4fv("inverse_ref", 1, GL_FALSE, (GLfloat*) gGLObliqueProjectionInverse.mMatrix); 487 //shader->uniformMatrix4fv("inverse_ref", 1, GL_FALSE, (GLfloat*) gGLObliqueProjectionInverse.mMatrix);
488 shader->uniform1f(LLShaderMgr::WATER_WATERHEIGHT, eyedepth); 488 shader->uniform1f(LLShaderMgr::WATER_WATERHEIGHT, eyedepth);
489 shader->uniform1f(LLShaderMgr::WATER_TIME, sTime); 489 shader->uniform1f(LLShaderMgr::WATER_TIME, sTime);
490 shader->uniform3fv(LLShaderMgr::WATER_EYEVEC, 1, gCamera->getOrigin().mV); 490 shader->uniform3fv(LLShaderMgr::WATER_EYEVEC, 1, LLViewerCamera::getInstance()->getOrigin().mV);
491 shader->uniform3fv(LLShaderMgr::WATER_SPECULAR, 1, light_diffuse.mV); 491 shader->uniform3fv(LLShaderMgr::WATER_SPECULAR, 1, light_diffuse.mV);
492 shader->uniform1f(LLShaderMgr::WATER_SPECULAR_EXP, light_exp); 492 shader->uniform1f(LLShaderMgr::WATER_SPECULAR_EXP, light_exp);
493 shader->uniform2fv(LLShaderMgr::WATER_WAVE_DIR1, 1, param_mgr->getWave1Dir().mV); 493 shader->uniform2fv(LLShaderMgr::WATER_WAVE_DIR1, 1, param_mgr->getWave1Dir().mV);
@@ -507,9 +507,9 @@ void LLDrawPoolWater::shade()
507 shader->uniform1f("sunAngle2", 0.1f + 0.2f*sunAngle); 507 shader->uniform1f("sunAngle2", 0.1f + 0.2f*sunAngle);
508 508
509 LLColor4 water_color; 509 LLColor4 water_color;
510 LLVector3 camera_up = gCamera->getUpAxis(); 510 LLVector3 camera_up = LLViewerCamera::getInstance()->getUpAxis();
511 F32 up_dot = camera_up * LLVector3::z_axis; 511 F32 up_dot = camera_up * LLVector3::z_axis;
512 if (gCamera->cameraUnderWater()) 512 if (LLViewerCamera::getInstance()->cameraUnderWater())
513 { 513 {
514 water_color.setVec(1.f, 1.f, 1.f, 0.4f); 514 water_color.setVec(1.f, 1.f, 1.f, 0.4f);
515 shader->uniform1f(LLShaderMgr::WATER_REFSCALE, param_mgr->getScaleBelow()); 515 shader->uniform1f(LLShaderMgr::WATER_REFSCALE, param_mgr->getScaleBelow());
@@ -546,6 +546,7 @@ void LLDrawPoolWater::shade()
546 546
547 if (water->getUseTexture()) 547 if (water->getUseTexture())
548 { 548 {
549 sNeedsDistortionUpdate = TRUE;
549 face->renderIndexed(); 550 face->renderIndexed();
550 } 551 }
551 else 552 else
@@ -557,6 +558,7 @@ void LLDrawPoolWater::shade()
557 } 558 }
558 else 559 else
559 { 560 {
561 sNeedsDistortionUpdate = TRUE;
560 face->renderIndexed(); 562 face->renderIndexed();
561 } 563 }
562 } 564 }
diff --git a/linden/indra/newview/lldrawpoolwater.h b/linden/indra/newview/lldrawpoolwater.h
index 45cefac..b0ea542 100644
--- a/linden/indra/newview/lldrawpoolwater.h
+++ b/linden/indra/newview/lldrawpoolwater.h
@@ -50,6 +50,7 @@ protected:
50public: 50public:
51 static BOOL sSkipScreenCopy; 51 static BOOL sSkipScreenCopy;
52 static BOOL sNeedsReflectionUpdate; 52 static BOOL sNeedsReflectionUpdate;
53 static BOOL sNeedsDistortionUpdate;
53 static LLVector3 sLightDir; 54 static LLVector3 sLightDir;
54 55
55 static LLColor4 sWaterFogColor; 56 static LLColor4 sWaterFogColor;
diff --git a/linden/indra/newview/lldrawpoolwlsky.cpp b/linden/indra/newview/lldrawpoolwlsky.cpp
index 3e8d1b2..d18f0de 100644
--- a/linden/indra/newview/lldrawpoolwlsky.cpp
+++ b/linden/indra/newview/lldrawpoolwlsky.cpp
@@ -96,7 +96,7 @@ void LLDrawPoolWLSky::endRenderPass( S32 pass )
96 96
97void LLDrawPoolWLSky::renderDome(F32 camHeightLocal, LLGLSLShader * shader) const 97void LLDrawPoolWLSky::renderDome(F32 camHeightLocal, LLGLSLShader * shader) const
98{ 98{
99 LLVector3 const & origin = gCamera->getOrigin(); 99 LLVector3 const & origin = LLViewerCamera::getInstance()->getOrigin();
100 100
101 llassert_always(NULL != shader); 101 llassert_always(NULL != shader);
102 102
@@ -288,7 +288,7 @@ void LLDrawPoolWLSky::render(S32 pass)
288 288
289 renderSkyHaze(camHeightLocal); 289 renderSkyHaze(camHeightLocal);
290 290
291 LLVector3 const & origin = gCamera->getOrigin(); 291 LLVector3 const & origin = LLViewerCamera::getInstance()->getOrigin();
292 glPushMatrix(); 292 glPushMatrix();
293 293
294 glTranslatef(origin.mV[0], origin.mV[1], origin.mV[2]); 294 glTranslatef(origin.mV[0], origin.mV[1], origin.mV[2]);
diff --git a/linden/indra/newview/lldynamictexture.cpp b/linden/indra/newview/lldynamictexture.cpp
index 4a47855..14b80d6 100644
--- a/linden/indra/newview/lldynamictexture.cpp
+++ b/linden/indra/newview/lldynamictexture.cpp
@@ -148,11 +148,11 @@ void LLDynamicTexture::preRender(BOOL clear_depth)
148 LLImageGL::unbindTexture(0, GL_TEXTURE_2D); 148 LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
149 } 149 }
150 // Set up camera 150 // Set up camera
151 mCamera.setOrigin(*gCamera); 151 mCamera.setOrigin(*LLViewerCamera::getInstance());
152 mCamera.setAxes(*gCamera); 152 mCamera.setAxes(*LLViewerCamera::getInstance());
153 mCamera.setAspect(gCamera->getAspect()); 153 mCamera.setAspect(LLViewerCamera::getInstance()->getAspect());
154 mCamera.setView(gCamera->getView()); 154 mCamera.setView(LLViewerCamera::getInstance()->getView());
155 mCamera.setNear(gCamera->getNear()); 155 mCamera.setNear(LLViewerCamera::getInstance()->getNear());
156 156
157 glViewport(mOrigin.mX, mOrigin.mY, mWidth, mHeight); 157 glViewport(mOrigin.mX, mOrigin.mY, mWidth, mHeight);
158 if (clear_depth) 158 if (clear_depth)
@@ -177,11 +177,11 @@ void LLDynamicTexture::postRender(BOOL success)
177 gViewerWindow->setupViewport(); 177 gViewerWindow->setupViewport();
178 178
179 // restore camera 179 // restore camera
180 gCamera->setOrigin(mCamera); 180 LLViewerCamera::getInstance()->setOrigin(mCamera);
181 gCamera->setAxes(mCamera); 181 LLViewerCamera::getInstance()->setAxes(mCamera);
182 gCamera->setAspect(mCamera.getAspect()); 182 LLViewerCamera::getInstance()->setAspect(mCamera.getAspect());
183 gCamera->setView(mCamera.getView()); 183 LLViewerCamera::getInstance()->setView(mCamera.getView());
184 gCamera->setNear(mCamera.getNear()); 184 LLViewerCamera::getInstance()->setNear(mCamera.getNear());
185} 185}
186 186
187//----------------------------------------------------------------------------- 187//-----------------------------------------------------------------------------
diff --git a/linden/indra/newview/llface.cpp b/linden/indra/newview/llface.cpp
index 2be82f7..0c8de14 100644
--- a/linden/indra/newview/llface.cpp
+++ b/linden/indra/newview/llface.cpp
@@ -471,10 +471,8 @@ void LLFace::renderSelected(LLImageGL *imagep, const LLColor4& color, const S32
471void LLFace::renderSelectedUV(const S32 offset, const S32 count) 471void LLFace::renderSelectedUV(const S32 offset, const S32 count)
472{ 472{
473#if 0 473#if 0
474 LLUUID uv_img_red_blue_id(gViewerArt.getString("uv_test1.tga")); 474 LLViewerImage* red_blue_imagep = gImageList.getImageFromFile("uv_test1.j2c", TRUE, TRUE);
475 LLUUID uv_img_green_id(gViewerArt.getString("uv_test2.tga")); 475 LLViewerImage* green_imagep = gImageList.getImageFromFile("uv_test2.tga", TRUE, TRUE);
476 LLViewerImage* red_blue_imagep = gImageList.getImage(uv_img_red_blue_id, TRUE, TRUE);
477 LLViewerImage* green_imagep = gImageList.getImage(uv_img_green_id, TRUE, TRUE);
478 476
479 LLGLSObjectSelect object_select; 477 LLGLSObjectSelect object_select;
480 LLGLEnable blend(GL_BLEND); 478 LLGLEnable blend(GL_BLEND);
diff --git a/linden/indra/newview/llfasttimerview.cpp b/linden/indra/newview/llfasttimerview.cpp
index d2e04de..372d8fa 100644
--- a/linden/indra/newview/llfasttimerview.cpp
+++ b/linden/indra/newview/llfasttimerview.cpp
@@ -113,10 +113,6 @@ static struct ft_display_info ft_display_table[] =
113 { LLFastTimer::FTM_PIPELINE, " Pipeline", &LLColor4::magenta4, 0 }, 113 { LLFastTimer::FTM_PIPELINE, " Pipeline", &LLColor4::magenta4, 0 },
114 { LLFastTimer::FTM_CLEANUP, " Cleanup", &LLColor4::cyan3, 0 }, 114 { LLFastTimer::FTM_CLEANUP, " Cleanup", &LLColor4::cyan3, 0 },
115 { LLFastTimer::FTM_AUDIO_UPDATE, " Audio Update", &LLColor4::yellow3, 0 }, 115 { LLFastTimer::FTM_AUDIO_UPDATE, " Audio Update", &LLColor4::yellow3, 0 },
116 { LLFastTimer::FTM_IMAGE_UPDATE, " Image Update", &LLColor4::yellow4, 1 },
117 { LLFastTimer::FTM_IMAGE_CREATE, " Image CreateGL",&LLColor4::yellow5, 0 },
118 { LLFastTimer::FTM_IMAGE_DECODE, " Image Decode", &LLColor4::yellow6, 0 },
119 { LLFastTimer::FTM_IMAGE_MARK_DIRTY, " Dirty Textures",&LLColor4::red1, 0 },
120 { LLFastTimer::FTM_VFILE_WAIT, " VFile Wait", &LLColor4::cyan6, 0 }, 116 { LLFastTimer::FTM_VFILE_WAIT, " VFile Wait", &LLColor4::cyan6, 0 },
121// { LLFastTimer::FTM_IDLE_CB, " Callbacks", &LLColor4::pink1, 0 }, 117// { LLFastTimer::FTM_IDLE_CB, " Callbacks", &LLColor4::pink1, 0 },
122 { LLFastTimer::FTM_RENDER, " Render", &green0, 1 }, 118 { LLFastTimer::FTM_RENDER, " Render", &green0, 1 },
@@ -146,6 +142,10 @@ static struct ft_display_info ft_display_table[] =
146 { LLFastTimer::FTM_CULL_REBOUND, " Rebound", &LLColor4::blue3, 0 }, 142 { LLFastTimer::FTM_CULL_REBOUND, " Rebound", &LLColor4::blue3, 0 },
147 { LLFastTimer::FTM_FRUSTUM_CULL, " Frustum Cull", &LLColor4::blue4, 0 }, 143 { LLFastTimer::FTM_FRUSTUM_CULL, " Frustum Cull", &LLColor4::blue4, 0 },
148 { LLFastTimer::FTM_OCCLUSION_READBACK, " Occlusion Read", &LLColor4::red2, 0 }, 144 { LLFastTimer::FTM_OCCLUSION_READBACK, " Occlusion Read", &LLColor4::red2, 0 },
145 { LLFastTimer::FTM_IMAGE_UPDATE, " Image Update", &LLColor4::yellow4, 1 },
146 { LLFastTimer::FTM_IMAGE_CREATE, " Image CreateGL",&LLColor4::yellow5, 0 },
147 { LLFastTimer::FTM_IMAGE_DECODE, " Image Decode", &LLColor4::yellow6, 0 },
148 { LLFastTimer::FTM_IMAGE_MARK_DIRTY, " Dirty Textures",&LLColor4::red1, 0 },
149 { LLFastTimer::FTM_STATESORT, " State Sort", &LLColor4::orange1, 1 }, 149 { LLFastTimer::FTM_STATESORT, " State Sort", &LLColor4::orange1, 1 },
150 { LLFastTimer::FTM_STATESORT_DRAWABLE, " Drawable", &LLColor4::orange2, 0 }, 150 { LLFastTimer::FTM_STATESORT_DRAWABLE, " Drawable", &LLColor4::orange2, 0 },
151 { LLFastTimer::FTM_STATESORT_POSTSORT, " Post Sort", &LLColor4::orange3, 0 }, 151 { LLFastTimer::FTM_STATESORT_POSTSORT, " Post Sort", &LLColor4::orange3, 0 },
@@ -270,16 +270,6 @@ LLFastTimerView::~LLFastTimerView()
270 delete[] mBarEnd; 270 delete[] mBarEnd;
271} 271}
272 272
273EWidgetType LLFastTimerView::getWidgetType() const
274{
275 return WIDGET_TYPE_FAST_TIMER_VIEW;
276}
277
278LLString LLFastTimerView::getWidgetTag() const
279{
280 return LL_FAST_TIMER_VIEW_TAG;
281}
282
283BOOL LLFastTimerView::handleRightMouseDown(S32 x, S32 y, MASK mask) 273BOOL LLFastTimerView::handleRightMouseDown(S32 x, S32 y, MASK mask)
284{ 274{
285 if (mBarRect.pointInRect(x, y)) 275 if (mBarRect.pointInRect(x, y))
@@ -408,14 +398,10 @@ BOOL LLFastTimerView::handleHover(S32 x, S32 y, MASK mask)
408 398
409BOOL LLFastTimerView::handleScrollWheel(S32 x, S32 y, S32 clicks) 399BOOL LLFastTimerView::handleScrollWheel(S32 x, S32 y, S32 clicks)
410{ 400{
411 if (getVisible() && pointInView(x, y)) 401 LLFastTimer::sPauseHistory = TRUE;
412 { 402 mScrollIndex = llclamp(mScrollIndex - clicks,
413 LLFastTimer::sPauseHistory = TRUE; 403 0, llmin(LLFastTimer::sLastFrameIndex, (S32)LLFastTimer::FTM_HISTORY_NUM-MAX_VISIBLE_HISTORY));
414 mScrollIndex = llclamp(mScrollIndex - clicks, 404 return TRUE;
415 0, llmin(LLFastTimer::sLastFrameIndex, (S32)LLFastTimer::FTM_HISTORY_NUM-MAX_VISIBLE_HISTORY));
416 return TRUE;
417 }
418 return FALSE;
419} 405}
420 406
421void LLFastTimerView::draw() 407void LLFastTimerView::draw()
@@ -437,7 +423,7 @@ void LLFastTimerView::draw()
437 S32 left, top, right, bottom; 423 S32 left, top, right, bottom;
438 S32 x, y, barw, barh, dx, dy; 424 S32 x, y, barw, barh, dx, dy;
439 S32 texth, textw; 425 S32 texth, textw;
440 LLViewerImage* box_imagep = gImageList.getImage(LLUUID(gViewerArt.getString("rounded_square.tga")), MIPMAP_FALSE, TRUE); 426 LLPointer<LLUIImage> box_imagep = LLUI::getUIImage("rounded_square.tga");
441 427
442 // Make sure all timers are accounted for 428 // Make sure all timers are accounted for
443 // Set 'FTM_OTHER' to unaccounted ticks last frame 429 // Set 'FTM_OTHER' to unaccounted ticks last frame
@@ -806,7 +792,7 @@ void LLFastTimerView::draw()
806 792
807 // Draw bars for each history entry 793 // Draw bars for each history entry
808 // Special: -1 = show running average 794 // Special: -1 = show running average
809 LLViewerImage::bindTexture(box_imagep); 795 LLViewerImage::bindTexture(box_imagep->getImage());
810 for (S32 j=-1; j<histmax && y > LINE_GRAPH_HEIGHT; j++) 796 for (S32 j=-1; j<histmax && y > LINE_GRAPH_HEIGHT; j++)
811 { 797 {
812 int sublevel_dx[FTV_DISPLAY_NUM+1]; 798 int sublevel_dx[FTV_DISPLAY_NUM+1];
@@ -938,7 +924,7 @@ void LLFastTimerView::draw()
938 gGL.color4fv(color.mV); 924 gGL.color4fv(color.mV);
939 F32 start_fragment = llclamp((F32)(left - sublevel_left[level]) / (F32)sublevel_dx[level], 0.f, 1.f); 925 F32 start_fragment = llclamp((F32)(left - sublevel_left[level]) / (F32)sublevel_dx[level], 0.f, 1.f);
940 F32 end_fragment = llclamp((F32)(right - sublevel_left[level]) / (F32)sublevel_dx[level], 0.f, 1.f); 926 F32 end_fragment = llclamp((F32)(right - sublevel_left[level]) / (F32)sublevel_dx[level], 0.f, 1.f);
941 gl_segmented_rect_2d_fragment_tex(sublevel_left[level], top - level + scale_offset, sublevel_right[level], bottom + level - scale_offset, box_imagep->getWidth(), box_imagep->getHeight(), 16, start_fragment, end_fragment); 927 gl_segmented_rect_2d_fragment_tex(sublevel_left[level], top - level + scale_offset, sublevel_right[level], bottom + level - scale_offset, box_imagep->getTextureWidth(), box_imagep->getTextureHeight(), 16, start_fragment, end_fragment);
942 928
943 } 929 }
944 930
diff --git a/linden/indra/newview/llfasttimerview.h b/linden/indra/newview/llfasttimerview.h
index bd103e2..75eb165 100644
--- a/linden/indra/newview/llfasttimerview.h
+++ b/linden/indra/newview/llfasttimerview.h
@@ -41,9 +41,6 @@ public:
41 LLFastTimerView(const std::string& name, const LLRect& rect); 41 LLFastTimerView(const std::string& name, const LLRect& rect);
42 virtual ~LLFastTimerView(); 42 virtual ~LLFastTimerView();
43 43
44 virtual EWidgetType getWidgetType() const;
45 virtual LLString getWidgetTag() const;
46
47 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); 44 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
48 virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); 45 virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
49 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); 46 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
diff --git a/linden/indra/newview/llfeaturemanager.cpp b/linden/indra/newview/llfeaturemanager.cpp
index f96b2db..9f79c18 100644
--- a/linden/indra/newview/llfeaturemanager.cpp
+++ b/linden/indra/newview/llfeaturemanager.cpp
@@ -75,8 +75,6 @@ const char FEATURE_TABLE_FILENAME[] = "featuretable.txt";
75 75
76const char GPU_TABLE_FILENAME[] = "gpu_table.txt"; 76const char GPU_TABLE_FILENAME[] = "gpu_table.txt";
77 77
78LLFeatureManager *gFeatureManagerp = NULL;
79
80LLFeatureInfo::LLFeatureInfo(const char *name, const BOOL available, const F32 level) : mValid(TRUE) 78LLFeatureInfo::LLFeatureInfo(const char *name, const BOOL available, const F32 level) : mValid(TRUE)
81{ 79{
82 mName = name; 80 mName = name;
@@ -483,7 +481,7 @@ void LLFeatureManager::applyFeatures(bool skipFeatures)
483 } 481 }
484 482
485 // get the control setting 483 // get the control setting
486 LLControlBase* ctrl = gSavedSettings.getControl(mIt->first); 484 LLControlVariable* ctrl = gSavedSettings.getControl(mIt->first);
487 if(ctrl == NULL) 485 if(ctrl == NULL)
488 { 486 {
489 llwarns << "AHHH! Control setting " << mIt->first << " does not exist!" << llendl; 487 llwarns << "AHHH! Control setting " << mIt->first << " does not exist!" << llendl;
diff --git a/linden/indra/newview/llfeaturemanager.h b/linden/indra/newview/llfeaturemanager.h
index c98fb0d..b45046b 100644
--- a/linden/indra/newview/llfeaturemanager.h
+++ b/linden/indra/newview/llfeaturemanager.h
@@ -1,6 +1,6 @@
1/** 1/**
2 * @file llfeaturemanager.h 2 * @file llfeaturemanager.h
3 * @brief LLFeatureManager class definition 3 * @brief The feature manager is responsible for determining what features are turned on/off in the app.
4 * 4 *
5 * $LicenseInfo:firstyear=2003&license=viewergpl$ 5 * $LicenseInfo:firstyear=2003&license=viewergpl$
6 * 6 *
@@ -94,7 +94,7 @@ protected:
94}; 94};
95 95
96 96
97class LLFeatureManager : public LLFeatureList 97class LLFeatureManager : public LLFeatureList, public LLSingleton<LLFeatureManager>
98{ 98{
99public: 99public:
100 LLFeatureManager() : mInited(FALSE), mTableVersion(0), mSafe(FALSE), mGPUClass(GPU_CLASS_UNKNOWN) {} 100 LLFeatureManager() : mInited(FALSE), mTableVersion(0), mSafe(FALSE), mGPUClass(GPU_CLASS_UNKNOWN) {}
@@ -148,6 +148,5 @@ protected:
148 BOOL mGPUSupported; 148 BOOL mGPUSupported;
149}; 149};
150 150
151extern LLFeatureManager *gFeatureManagerp;
152 151
153#endif // LL_LLFEATUREMANAGER_H 152#endif // LL_LLFEATUREMANAGER_H
diff --git a/linden/indra/newview/llfirstuse.cpp b/linden/indra/newview/llfirstuse.cpp
index 4ea950f..e6dee2c 100644
--- a/linden/indra/newview/llfirstuse.cpp
+++ b/linden/indra/newview/llfirstuse.cpp
@@ -38,7 +38,6 @@
38 38
39// viewer includes 39// viewer includes
40#include "llnotify.h" 40#include "llnotify.h"
41#include "llfloatervoicewizard.h"
42#include "llviewercontrol.h" 41#include "llviewercontrol.h"
43#include "llui.h" 42#include "llui.h"
44#include "llappviewer.h" 43#include "llappviewer.h"
@@ -49,7 +48,8 @@ std::set<LLString> LLFirstUse::sConfigVariables;
49// static 48// static
50void LLFirstUse::addConfigVariable(const LLString& var) 49void LLFirstUse::addConfigVariable(const LLString& var)
51{ 50{
52 gSavedSettings.addWarning(var); 51 //Don't add the warning, now that we're storing the default in the settings_default.xml file
52 //gSavedSettings.addWarning(var);
53 sConfigVariables.insert(var); 53 sConfigVariables.insert(var);
54} 54}
55 55
@@ -254,18 +254,6 @@ void LLFirstUse::useSculptedPrim()
254} 254}
255 255
256// static 256// static
257void LLFirstUse::useVoice()
258{
259 if (gDisableVoice) return;
260 if (gSavedSettings.getWarning("FirstVoice"))
261 {
262 gSavedSettings.setWarning("FirstVoice", FALSE);
263
264 LLFloaterVoiceWizard::showInstance();
265 }
266}
267
268// static
269void LLFirstUse::useMedia() 257void LLFirstUse::useMedia()
270{ 258{
271 if (gSavedSettings.getWarning("FirstMedia")) 259 if (gSavedSettings.getWarning("FirstMedia"))
diff --git a/linden/indra/newview/llfirstuse.h b/linden/indra/newview/llfirstuse.h
index 413db4b..176ca2d 100644
--- a/linden/indra/newview/llfirstuse.h
+++ b/linden/indra/newview/llfirstuse.h
@@ -104,7 +104,6 @@ public:
104 static void useFlexible(); 104 static void useFlexible();
105 static void useDebugMenus(); 105 static void useDebugMenus();
106 static void useSculptedPrim(); 106 static void useSculptedPrim();
107 static void useVoice();
108 static void useMedia(); 107 static void useMedia();
109 108
110protected: 109protected:
diff --git a/linden/indra/newview/llflexibleobject.cpp b/linden/indra/newview/llflexibleobject.cpp
index e9c2332..fe7fafa 100644
--- a/linden/indra/newview/llflexibleobject.cpp
+++ b/linden/indra/newview/llflexibleobject.cpp
@@ -36,7 +36,7 @@
36#include "llface.h" 36#include "llface.h"
37#include "llflexibleobject.h" 37#include "llflexibleobject.h"
38#include "llglheaders.h" 38#include "llglheaders.h"
39#include "llsphere.h" 39#include "llrendersphere.h"
40#include "llviewerobject.h" 40#include "llviewerobject.h"
41#include "llimagegl.h" 41#include "llimagegl.h"
42#include "llagent.h" 42#include "llagent.h"
@@ -246,7 +246,6 @@ void LLVolumeImplFlexible::setAttributesOfAllSections()
246 246
247void LLVolumeImplFlexible::onSetVolume(const LLVolumeParams &volume_params, const S32 detail) 247void LLVolumeImplFlexible::onSetVolume(const LLVolumeParams &volume_params, const S32 detail)
248{ 248{
249
250} 249}
251 250
252//--------------------------------------------------------------------------------- 251//---------------------------------------------------------------------------------
@@ -280,7 +279,7 @@ BOOL LLVolumeImplFlexible::doIdleUpdate(LLAgent &agent, LLWorld &world, const F6
280 F32 app_angle = llround((F32) atan2( mVO->getScale().mV[2]*2.f, mVO->mDrawable->mDistanceWRTCamera) * RAD_TO_DEG, 0.01f); 279 F32 app_angle = llround((F32) atan2( mVO->getScale().mV[2]*2.f, mVO->mDrawable->mDistanceWRTCamera) * RAD_TO_DEG, 0.01f);
281 280
282 // Rendering sections increases with visible angle on the screen 281 // Rendering sections increases with visible angle on the screen
283 mRenderRes = (S32)(FLEXIBLE_OBJECT_MAX_SECTIONS*4*app_angle*DEG_TO_RAD/gCamera->getView()); 282 mRenderRes = (S32)(FLEXIBLE_OBJECT_MAX_SECTIONS*4*app_angle*DEG_TO_RAD/LLViewerCamera::getInstance()->getView());
284 if (mRenderRes > FLEXIBLE_OBJECT_MAX_SECTIONS) 283 if (mRenderRes > FLEXIBLE_OBJECT_MAX_SECTIONS)
285 { 284 {
286 mRenderRes = FLEXIBLE_OBJECT_MAX_SECTIONS; 285 mRenderRes = FLEXIBLE_OBJECT_MAX_SECTIONS;
@@ -330,7 +329,7 @@ BOOL LLVolumeImplFlexible::doIdleUpdate(LLAgent &agent, LLWorld &world, const F6
330 id = parent->getVolumeInterfaceID(); 329 id = parent->getVolumeInterfaceID();
331 } 330 }
332 331
333 U32 update_period = (U32) (gCamera->getScreenPixelArea()*0.01f/(pixel_area*(sUpdateFactor+1.f)))+1; 332 U32 update_period = (U32) (LLViewerCamera::getInstance()->getScreenPixelArea()*0.01f/(pixel_area*(sUpdateFactor+1.f)))+1;
334 333
335 if ((LLDrawable::getCurrentFrame()+id)%update_period == 0) 334 if ((LLDrawable::getCurrentFrame()+id)%update_period == 0)
336 { 335 {
@@ -359,7 +358,7 @@ void LLVolumeImplFlexible::doFlexibleUpdate()
359 if (mSimulateRes == 0) 358 if (mSimulateRes == 0)
360 { 359 {
361 mVO->markForUpdate(TRUE); 360 mVO->markForUpdate(TRUE);
362 if (!doIdleUpdate(gAgent, *gWorldp, 0.0)) 361 if (!doIdleUpdate(gAgent, *LLWorld::getInstance(), 0.0))
363 { 362 {
364 return; // we did not get updated or initialized, proceeding without can be dangerous 363 return; // we did not get updated or initialized, proceeding without can be dangerous
365 } 364 }
diff --git a/linden/indra/newview/llfloaterabout.cpp b/linden/indra/newview/llfloaterabout.cpp
index ddedef4..8e55cf8 100644
--- a/linden/indra/newview/llfloaterabout.cpp
+++ b/linden/indra/newview/llfloaterabout.cpp
@@ -46,7 +46,7 @@
46#include "llviewerregion.h" 46#include "llviewerregion.h"
47#include "llversionviewer.h" 47#include "llversionviewer.h"
48#include "llviewerbuild.h" 48#include "llviewerbuild.h"
49#include "llvieweruictrlfactory.h" 49#include "lluictrlfactory.h"
50#include "llappviewer.h" 50#include "llappviewer.h"
51#include "llglheaders.h" 51#include "llglheaders.h"
52#include "llmediamanager.h" 52#include "llmediamanager.h"
@@ -70,7 +70,7 @@ LLFloaterAbout* LLFloaterAbout::sInstance = NULL;
70LLFloaterAbout::LLFloaterAbout() 70LLFloaterAbout::LLFloaterAbout()
71: LLFloater("floater_about", "FloaterAboutRect", "") 71: LLFloater("floater_about", "FloaterAboutRect", "")
72{ 72{
73 gUICtrlFactory->buildFloater(this, "floater_about.xml"); 73 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_about.xml");
74 74
75 // Support for changing product name. 75 // Support for changing product name.
76 LLString title("About "); 76 LLString title("About ");
@@ -84,7 +84,7 @@ LLFloaterAbout::LLFloaterAbout()
84 + llformat(" %d.%d.%d (%d) %s %s (%s)", 84 + llformat(" %d.%d.%d (%d) %s %s (%s)",
85 LL_VERSION_MAJOR, LL_VERSION_MINOR, LL_VERSION_PATCH, LL_VIEWER_BUILD, 85 LL_VERSION_MAJOR, LL_VERSION_MINOR, LL_VERSION_PATCH, LL_VIEWER_BUILD,
86 __DATE__, __TIME__, 86 __DATE__, __TIME__,
87 gChannelName.c_str()); 87 gSavedSettings.getString("VersionChannelName").c_str());
88 support.append(version); 88 support.append(version);
89 support.append("\n\n"); 89 support.append("\n\n");
90 90
@@ -157,23 +157,16 @@ LLFloaterAbout::LLFloaterAbout()
157 } 157 }
158 } 158 }
159 159
160 if (gViewerStats 160 if (gPacketsIn > 0)
161 && gPacketsIn > 0)
162 { 161 {
163 LLString packet_loss = llformat("Packets Lost: %.0f/%.0f (%.1f%%)", 162 LLString packet_loss = llformat("Packets Lost: %.0f/%.0f (%.1f%%)",
164 gViewerStats->mPacketsLostStat.getCurrent(), 163 LLViewerStats::getInstance()->mPacketsLostStat.getCurrent(),
165 F32(gPacketsIn), 164 F32(gPacketsIn),
166 100.f*gViewerStats->mPacketsLostStat.getCurrent() / F32(gPacketsIn) ); 165 100.f*LLViewerStats::getInstance()->mPacketsLostStat.getCurrent() / F32(gPacketsIn) );
167 support.append(packet_loss); 166 support.append(packet_loss);
168 support.append("\n"); 167 support.append("\n");
169 } 168 }
170 169
171 // MD5 digest of executable
172 support.append("Viewer Digest: ");
173 char viewer_digest_string[UUID_STR_LENGTH]; /*Flawfinder: ignore*/
174 gViewerDigest.toString( viewer_digest_string );
175 support.append(viewer_digest_string);
176
177 // Fix views 170 // Fix views
178 childDisable("credits_editor"); 171 childDisable("credits_editor");
179 172
diff --git a/linden/indra/newview/llfloateractivespeakers.cpp b/linden/indra/newview/llfloateractivespeakers.cpp
index 7445ef0..ed2f9f8 100644
--- a/linden/indra/newview/llfloateractivespeakers.cpp
+++ b/linden/indra/newview/llfloateractivespeakers.cpp
@@ -36,7 +36,7 @@
36#include "llagent.h" 36#include "llagent.h"
37#include "llvoavatar.h" 37#include "llvoavatar.h"
38#include "llfloateravatarinfo.h" 38#include "llfloateravatarinfo.h"
39#include "llvieweruictrlfactory.h" 39#include "lluictrlfactory.h"
40#include "llviewercontrol.h" 40#include "llviewercontrol.h"
41#include "llscrolllistctrl.h" 41#include "llscrolllistctrl.h"
42#include "llbutton.h" 42#include "llbutton.h"
@@ -52,9 +52,6 @@ const LLColor4 INACTIVE_COLOR(0.3f, 0.3f, 0.3f, 0.5f);
52const LLColor4 ACTIVE_COLOR(0.5f, 0.5f, 0.5f, 1.f); 52const LLColor4 ACTIVE_COLOR(0.5f, 0.5f, 0.5f, 1.f);
53const F32 TYPING_ANIMATION_FPS = 2.5f; 53const F32 TYPING_ANIMATION_FPS = 2.5f;
54 54
55LLLocalSpeakerMgr* gLocalSpeakerMgr = NULL;
56LLActiveSpeakerMgr* gActiveChannelSpeakerMgr = NULL;
57
58LLSpeaker::LLSpeaker(const LLUUID& id, const LLString& name, const ESpeakerType type) : 55LLSpeaker::LLSpeaker(const LLUUID& id, const LLString& name, const ESpeakerType type) :
59 mStatus(LLSpeaker::STATUS_TEXT_ONLY), 56 mStatus(LLSpeaker::STATUS_TEXT_ONLY),
60 mLastSpokeTime(0.f), 57 mLastSpokeTime(0.f),
@@ -78,7 +75,7 @@ LLSpeaker::LLSpeaker(const LLUUID& id, const LLString& name, const ESpeakerType
78 mDisplayName = name; 75 mDisplayName = name;
79 } 76 }
80 77
81 gVoiceClient->setUserVolume(id, gMuteListp->getSavedResidentVolume(id)); 78 gVoiceClient->setUserVolume(id, LLMuteList::getInstance()->getSavedResidentVolume(id));
82 79
83 mActivityTimer.resetWithExpiry(SPEAKER_TIMEOUT); 80 mActivityTimer.resetWithExpiry(SPEAKER_TIMEOUT);
84} 81}
@@ -166,7 +163,7 @@ LLFloaterActiveSpeakers::LLFloaterActiveSpeakers(const LLSD& seed) : mPanel(NULL
166 mFactoryMap["active_speakers_panel"] = LLCallbackMap(createSpeakersPanel, NULL); 163 mFactoryMap["active_speakers_panel"] = LLCallbackMap(createSpeakersPanel, NULL);
167 // do not automatically open singleton floaters (as result of getInstance()) 164 // do not automatically open singleton floaters (as result of getInstance())
168 BOOL no_open = FALSE; 165 BOOL no_open = FALSE;
169 gUICtrlFactory->buildFloater(this, "floater_active_speakers.xml", &getFactoryMap(), no_open); 166 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_active_speakers.xml", &getFactoryMap(), no_open);
170 //RN: for now, we poll voice client every frame to get voice amplitude feedback 167 //RN: for now, we poll voice client every frame to get voice amplitude feedback
171 //gVoiceClient->addObserver(this); 168 //gVoiceClient->addObserver(this);
172 mPanel->refreshSpeakers(); 169 mPanel->refreshSpeakers();
@@ -176,8 +173,17 @@ LLFloaterActiveSpeakers::~LLFloaterActiveSpeakers()
176{ 173{
177} 174}
178 175
176void LLFloaterActiveSpeakers::onOpen()
177{
178 gSavedSettings.setBOOL("ShowActiveSpeakers", TRUE);
179}
180
179void LLFloaterActiveSpeakers::onClose(bool app_quitting) 181void LLFloaterActiveSpeakers::onClose(bool app_quitting)
180{ 182{
183 if (!app_quitting)
184 {
185 gSavedSettings.setBOOL("ShowActiveSpeakers", FALSE);
186 }
181 setVisible(FALSE); 187 setVisible(FALSE);
182} 188}
183 189
@@ -190,7 +196,7 @@ void LLFloaterActiveSpeakers::draw()
190 196
191BOOL LLFloaterActiveSpeakers::postBuild() 197BOOL LLFloaterActiveSpeakers::postBuild()
192{ 198{
193 mPanel = (LLPanelActiveSpeakers*)LLUICtrlFactory::getPanelByName(this, "active_speakers_panel"); 199 mPanel = getChild<LLPanelActiveSpeakers>("active_speakers_panel");
194 return TRUE; 200 return TRUE;
195} 201}
196 202
@@ -203,7 +209,7 @@ void LLFloaterActiveSpeakers::onChange()
203void* LLFloaterActiveSpeakers::createSpeakersPanel(void* data) 209void* LLFloaterActiveSpeakers::createSpeakersPanel(void* data)
204{ 210{
205 // don't show text only speakers 211 // don't show text only speakers
206 return new LLPanelActiveSpeakers(gActiveChannelSpeakerMgr, FALSE); 212 return new LLPanelActiveSpeakers(LLActiveSpeakerMgr::getInstance(), FALSE);
207} 213}
208 214
209// 215//
@@ -281,24 +287,29 @@ LLPanelActiveSpeakers::LLPanelActiveSpeakers(LLSpeakerMgr* data_source, BOOL sho
281 287
282BOOL LLPanelActiveSpeakers::postBuild() 288BOOL LLPanelActiveSpeakers::postBuild()
283{ 289{
284 mSpeakerList = LLUICtrlFactory::getScrollListByName(this, "speakers_list"); 290 std::string sort_column = gSavedSettings.getString(LLString("FloaterActiveSpeakersSortColumn"));
291 BOOL sort_ascending = gSavedSettings.getBOOL( LLString("FloaterActiveSpeakersSortAscending"));
292
293 mSpeakerList = getChild<LLScrollListCtrl>("speakers_list");
294 mSpeakerList->sortByColumn(sort_column, sort_ascending);
285 mSpeakerList->setDoubleClickCallback(onDoubleClickSpeaker); 295 mSpeakerList->setDoubleClickCallback(onDoubleClickSpeaker);
286 mSpeakerList->setCommitOnSelectionChange(TRUE); 296 mSpeakerList->setCommitOnSelectionChange(TRUE);
287 mSpeakerList->setCommitCallback(onSelectSpeaker); 297 mSpeakerList->setCommitCallback(onSelectSpeaker);
298 mSpeakerList->setSortChangedCallback(onSortChanged);
288 mSpeakerList->setCallbackUserData(this); 299 mSpeakerList->setCallbackUserData(this);
289 300
290 mMuteTextCtrl = getCtrlByNameAndType("mute_text_btn", WIDGET_TYPE_DONTCARE); 301 mMuteTextCtrl = getChild<LLUICtrl>("mute_text_btn");
291 childSetCommitCallback("mute_text_btn", onClickMuteTextCommit, this); 302 childSetCommitCallback("mute_text_btn", onClickMuteTextCommit, this);
292 303
293 mMuteVoiceCtrl = getCtrlByNameAndType("mute_btn", WIDGET_TYPE_DONTCARE); 304 mMuteVoiceCtrl = getChild<LLUICtrl>("mute_btn");
294 childSetCommitCallback("mute_btn", onClickMuteVoiceCommit, this); 305 childSetCommitCallback("mute_btn", onClickMuteVoiceCommit, this);
295 childSetAction("mute_btn", onClickMuteVoice, this); 306 childSetAction("mute_btn", onClickMuteVoice, this);
296 307
297 childSetCommitCallback("speaker_volume", onVolumeChange, this); 308 childSetCommitCallback("speaker_volume", onVolumeChange, this);
298 309
299 mNameText = LLUICtrlFactory::getTextBoxByName(this, "resident_name"); 310 mNameText = getChild<LLTextBox>("resident_name");
300 311
301 mProfileBtn = LLUICtrlFactory::getButtonByName(this, "profile_btn"); 312 mProfileBtn = getChild<LLButton>("profile_btn");
302 childSetAction("profile_btn", onClickProfile, this); 313 childSetAction("profile_btn", onClickProfile, this);
303 314
304 childSetCommitCallback("moderator_allow_voice", onModeratorMuteVoice, this); 315 childSetCommitCallback("moderator_allow_voice", onModeratorMuteVoice, this);
@@ -332,7 +343,7 @@ void LLPanelActiveSpeakers::addSpeaker(const LLUUID& speaker_id)
332 343
333 columns[0]["column"] = "icon_speaking_status"; 344 columns[0]["column"] = "icon_speaking_status";
334 columns[0]["type"] = "icon"; 345 columns[0]["type"] = "icon";
335 columns[0]["value"] = gViewerArt.getString("icn_active-speakers-dot-lvl0.tga"); 346 columns[0]["value"] = "icn_active-speakers-dot-lvl0.tga";
336 347
337 LLString speaker_name; 348 LLString speaker_name;
338 if (speakerp->mDisplayName.empty()) 349 if (speakerp->mDisplayName.empty())
@@ -388,14 +399,13 @@ void LLPanelActiveSpeakers::refreshSpeakers()
388 399
389 mSpeakerMgr->update(); 400 mSpeakerMgr->update();
390 401
391 const LLString icon_image_0 = gViewerArt.getString("icn_active-speakers-dot-lvl0.tga"); 402 const LLString icon_image_0 = "icn_active-speakers-dot-lvl0.tga";
392 const LLString icon_image_1 = gViewerArt.getString("icn_active-speakers-dot-lvl1.tga"); 403 const LLString icon_image_1 = "icn_active-speakers-dot-lvl1.tga";
393 const LLString icon_image_2 = gViewerArt.getString("icn_active-speakers-dot-lvl2.tga"); 404 const LLString icon_image_2 = "icn_active-speakers-dot-lvl2.tga";
394
395 405
396 std::vector<LLScrollListItem*> items = mSpeakerList->getAllData(); 406 std::vector<LLScrollListItem*> items = mSpeakerList->getAllData();
397 407
398 LLUUID mute_icon_image = LLUUID(gViewerArt.getString("mute_icon.tga")); 408 LLString mute_icon_image = "mute_icon.tga";
399 409
400 LLSpeakerMgr::speaker_list_t speaker_list; 410 LLSpeakerMgr::speaker_list_t speaker_list;
401 mSpeakerMgr->getSpeakerList(&speaker_list, mShowTextChatters); 411 mSpeakerMgr->getSpeakerList(&speaker_list, mShowTextChatters);
@@ -516,27 +526,23 @@ void LLPanelActiveSpeakers::refreshSpeakers()
516 mSpeakerList->setSorted(FALSE); 526 mSpeakerList->setSorted(FALSE);
517 527
518 LLPointer<LLSpeaker> selected_speakerp = mSpeakerMgr->findSpeaker(selected_id); 528 LLPointer<LLSpeaker> selected_speakerp = mSpeakerMgr->findSpeaker(selected_id);
519 529 // update UI for selected participant
520 if (gMuteListp) 530 if (mMuteVoiceCtrl)
521 { 531 {
522 // update UI for selected participant 532 mMuteVoiceCtrl->setValue(LLMuteList::getInstance()->isMuted(selected_id, LLMute::flagVoiceChat));
523 if (mMuteVoiceCtrl) 533 mMuteVoiceCtrl->setEnabled(LLVoiceClient::voiceEnabled()
524 { 534 && gVoiceClient->getVoiceEnabled(selected_id)
525 mMuteVoiceCtrl->setValue(gMuteListp->isMuted(selected_id, LLMute::flagVoiceChat)); 535 && selected_id.notNull()
526 mMuteVoiceCtrl->setEnabled(LLVoiceClient::voiceEnabled()
527 && gVoiceClient->getVoiceEnabled(selected_id)
528 && selected_id.notNull()
529 && selected_id != gAgent.getID()
530 && (selected_speakerp.notNull() && selected_speakerp->mType == LLSpeaker::SPEAKER_AGENT));
531 }
532 if (mMuteTextCtrl)
533 {
534 mMuteTextCtrl->setValue(gMuteListp->isMuted(selected_id, LLMute::flagTextChat));
535 mMuteTextCtrl->setEnabled(selected_id.notNull()
536 && selected_id != gAgent.getID() 536 && selected_id != gAgent.getID()
537 && selected_speakerp.notNull() 537 && (selected_speakerp.notNull() && selected_speakerp->mType == LLSpeaker::SPEAKER_AGENT));
538 && !gMuteListp->isLinden(selected_speakerp->mDisplayName)); 538 }
539 } 539 if (mMuteTextCtrl)
540 {
541 mMuteTextCtrl->setValue(LLMuteList::getInstance()->isMuted(selected_id, LLMute::flagTextChat));
542 mMuteTextCtrl->setEnabled(selected_id.notNull()
543 && selected_id != gAgent.getID()
544 && selected_speakerp.notNull()
545 && !LLMuteList::getInstance()->isLinden(selected_speakerp->mDisplayName));
540 } 546 }
541 childSetValue("speaker_volume", gVoiceClient->getUserVolume(selected_id)); 547 childSetValue("speaker_volume", gVoiceClient->getUserVolume(selected_id));
542 childSetEnabled("speaker_volume", LLVoiceClient::voiceEnabled() 548 childSetEnabled("speaker_volume", LLVoiceClient::voiceEnabled()
@@ -597,7 +603,7 @@ void LLPanelActiveSpeakers::setSpeaker(const LLUUID& id, const LLString& name, L
597void LLPanelActiveSpeakers::setVoiceModerationCtrlMode( 603void LLPanelActiveSpeakers::setVoiceModerationCtrlMode(
598 const BOOL& moderated_voice) 604 const BOOL& moderated_voice)
599{ 605{
600 LLUICtrl* voice_moderation_ctrl = getCtrlByNameAndType("moderation_mode", WIDGET_TYPE_DONTCARE); 606 LLUICtrl* voice_moderation_ctrl = getChild<LLUICtrl>("moderation_mode");
601 607
602 if ( voice_moderation_ctrl ) 608 if ( voice_moderation_ctrl )
603 { 609 {
@@ -613,7 +619,7 @@ void LLPanelActiveSpeakers::onClickMuteTextCommit(LLUICtrl* ctrl, void* user_dat
613{ 619{
614 LLPanelActiveSpeakers* panelp = (LLPanelActiveSpeakers*)user_data; 620 LLPanelActiveSpeakers* panelp = (LLPanelActiveSpeakers*)user_data;
615 LLUUID speaker_id = panelp->mSpeakerList->getValue().asUUID(); 621 LLUUID speaker_id = panelp->mSpeakerList->getValue().asUUID();
616 BOOL is_muted = gMuteListp->isMuted(speaker_id, LLMute::flagTextChat); 622 BOOL is_muted = LLMuteList::getInstance()->isMuted(speaker_id, LLMute::flagTextChat);
617 std::string name; 623 std::string name;
618 624
619 //fill in name using voice client's copy of name cache 625 //fill in name using voice client's copy of name cache
@@ -629,11 +635,11 @@ void LLPanelActiveSpeakers::onClickMuteTextCommit(LLUICtrl* ctrl, void* user_dat
629 635
630 if (!is_muted) 636 if (!is_muted)
631 { 637 {
632 gMuteListp->add(mute, LLMute::flagTextChat); 638 LLMuteList::getInstance()->add(mute, LLMute::flagTextChat);
633 } 639 }
634 else 640 else
635 { 641 {
636 gMuteListp->remove(mute, LLMute::flagTextChat); 642 LLMuteList::getInstance()->remove(mute, LLMute::flagTextChat);
637 } 643 }
638} 644}
639 645
@@ -648,7 +654,7 @@ void LLPanelActiveSpeakers::onClickMuteVoiceCommit(LLUICtrl* ctrl, void* user_da
648{ 654{
649 LLPanelActiveSpeakers* panelp = (LLPanelActiveSpeakers*)user_data; 655 LLPanelActiveSpeakers* panelp = (LLPanelActiveSpeakers*)user_data;
650 LLUUID speaker_id = panelp->mSpeakerList->getValue().asUUID(); 656 LLUUID speaker_id = panelp->mSpeakerList->getValue().asUUID();
651 BOOL is_muted = gMuteListp->isMuted(speaker_id, LLMute::flagVoiceChat); 657 BOOL is_muted = LLMuteList::getInstance()->isMuted(speaker_id, LLMute::flagVoiceChat);
652 std::string name; 658 std::string name;
653 659
654 LLPointer<LLSpeaker> speakerp = panelp->mSpeakerMgr->findSpeaker(speaker_id); 660 LLPointer<LLSpeaker> speakerp = panelp->mSpeakerMgr->findSpeaker(speaker_id);
@@ -664,11 +670,11 @@ void LLPanelActiveSpeakers::onClickMuteVoiceCommit(LLUICtrl* ctrl, void* user_da
664 670
665 if (!is_muted) 671 if (!is_muted)
666 { 672 {
667 gMuteListp->add(mute, LLMute::flagVoiceChat); 673 LLMuteList::getInstance()->add(mute, LLMute::flagVoiceChat);
668 } 674 }
669 else 675 else
670 { 676 {
671 gMuteListp->remove(mute, LLMute::flagVoiceChat); 677 LLMuteList::getInstance()->remove(mute, LLMute::flagVoiceChat);
672 } 678 }
673} 679}
674 680
@@ -683,7 +689,7 @@ void LLPanelActiveSpeakers::onVolumeChange(LLUICtrl* source, void* user_data)
683 gVoiceClient->setUserVolume(speaker_id, new_volume); 689 gVoiceClient->setUserVolume(speaker_id, new_volume);
684 690
685 // store this volume setting for future sessions 691 // store this volume setting for future sessions
686 gMuteListp->setSavedResidentVolume(speaker_id, new_volume); 692 LLMuteList::getInstance()->setSavedResidentVolume(speaker_id, new_volume);
687} 693}
688 694
689//static 695//static
@@ -716,11 +722,23 @@ void LLPanelActiveSpeakers::onSelectSpeaker(LLUICtrl* source, void* user_data)
716 panelp->handleSpeakerSelect(); 722 panelp->handleSpeakerSelect();
717} 723}
718 724
725
726//static
727void LLPanelActiveSpeakers::onSortChanged(void* user_data)
728{
729 LLPanelActiveSpeakers* panelp = (LLPanelActiveSpeakers*)user_data;
730 std::string sort_column = panelp->mSpeakerList->getSortColumnName();
731 BOOL sort_ascending = panelp->mSpeakerList->getSortAscending();
732 gSavedSettings.setString(LLString("FloaterActiveSpeakersSortColumn"), sort_column);
733 gSavedSettings.setBOOL( LLString("FloaterActiveSpeakersSortAscending"), sort_ascending);
734}
735
736
719//static 737//static
720void LLPanelActiveSpeakers::onModeratorMuteVoice(LLUICtrl* ctrl, void* user_data) 738void LLPanelActiveSpeakers::onModeratorMuteVoice(LLUICtrl* ctrl, void* user_data)
721{ 739{
722 LLPanelActiveSpeakers* self = (LLPanelActiveSpeakers*)user_data; 740 LLPanelActiveSpeakers* self = (LLPanelActiveSpeakers*)user_data;
723 LLUICtrl* speakers_list = self->getCtrlByNameAndType("speakers_list", WIDGET_TYPE_DONTCARE); 741 LLUICtrl* speakers_list = self->getChild<LLUICtrl>("speakers_list");
724 if (!speakers_list || !gAgent.getRegion()) return; 742 if (!speakers_list || !gAgent.getRegion()) return;
725 743
726 std::string url = gAgent.getRegion()->getCapability("ChatSessionRequest"); 744 std::string url = gAgent.getRegion()->getCapability("ChatSessionRequest");
@@ -785,7 +803,7 @@ void LLPanelActiveSpeakers::onModeratorMuteVoice(LLUICtrl* ctrl, void* user_data
785void LLPanelActiveSpeakers::onModeratorMuteText(LLUICtrl* ctrl, void* user_data) 803void LLPanelActiveSpeakers::onModeratorMuteText(LLUICtrl* ctrl, void* user_data)
786{ 804{
787 LLPanelActiveSpeakers* self = (LLPanelActiveSpeakers*)user_data; 805 LLPanelActiveSpeakers* self = (LLPanelActiveSpeakers*)user_data;
788 LLUICtrl* speakers_list = self->getCtrlByNameAndType("speakers_list", WIDGET_TYPE_DONTCARE); 806 LLUICtrl* speakers_list = self->getChild<LLUICtrl>("speakers_list");
789 if (!speakers_list || !gAgent.getRegion()) return; 807 if (!speakers_list || !gAgent.getRegion()) return;
790 808
791 std::string url = gAgent.getRegion()->getCapability("ChatSessionRequest"); 809 std::string url = gAgent.getRegion()->getCapability("ChatSessionRequest");
diff --git a/linden/indra/newview/llfloateractivespeakers.h b/linden/indra/newview/llfloateractivespeakers.h
index 55acbd7..0aa4de9 100644
--- a/linden/indra/newview/llfloateractivespeakers.h
+++ b/linden/indra/newview/llfloateractivespeakers.h
@@ -156,7 +156,7 @@ protected:
156 virtual void updateSpeakerList(); 156 virtual void updateSpeakerList();
157}; 157};
158 158
159class LLActiveSpeakerMgr : public LLSpeakerMgr 159class LLActiveSpeakerMgr : public LLSpeakerMgr, public LLSingleton<LLActiveSpeakerMgr>
160{ 160{
161public: 161public:
162 LLActiveSpeakerMgr(); 162 LLActiveSpeakerMgr();
@@ -164,7 +164,7 @@ protected:
164 virtual void updateSpeakerList(); 164 virtual void updateSpeakerList();
165}; 165};
166 166
167class LLLocalSpeakerMgr : public LLSpeakerMgr 167class LLLocalSpeakerMgr : public LLSpeakerMgr, public LLSingleton<LLLocalSpeakerMgr>
168{ 168{
169public: 169public:
170 LLLocalSpeakerMgr(); 170 LLLocalSpeakerMgr();
@@ -186,6 +186,7 @@ public:
186 virtual ~LLFloaterActiveSpeakers(); 186 virtual ~LLFloaterActiveSpeakers();
187 187
188 /*virtual*/ BOOL postBuild(); 188 /*virtual*/ BOOL postBuild();
189 /*virtual*/ void onOpen();
189 /*virtual*/ void onClose(bool app_quitting); 190 /*virtual*/ void onClose(bool app_quitting);
190 /*virtual*/ void draw(); 191 /*virtual*/ void draw();
191 192
@@ -223,6 +224,7 @@ public:
223 static void onClickProfile(void* user_data); 224 static void onClickProfile(void* user_data);
224 static void onDoubleClickSpeaker(void* user_data); 225 static void onDoubleClickSpeaker(void* user_data);
225 static void onSelectSpeaker(LLUICtrl* source, void* user_data); 226 static void onSelectSpeaker(LLUICtrl* source, void* user_data);
227 static void onSortChanged(void* user_data);
226 static void onModeratorMuteVoice(LLUICtrl* ctrl, void* user_data); 228 static void onModeratorMuteVoice(LLUICtrl* ctrl, void* user_data);
227 static void onModeratorMuteText(LLUICtrl* ctrl, void* user_data); 229 static void onModeratorMuteText(LLUICtrl* ctrl, void* user_data);
228 static void onChangeModerationMode(LLUICtrl* ctrl, void* user_data); 230 static void onChangeModerationMode(LLUICtrl* ctrl, void* user_data);
@@ -290,7 +292,5 @@ protected:
290 LLPointer<SpeakerClearListener> mSpeakerClearListener; 292 LLPointer<SpeakerClearListener> mSpeakerClearListener;
291}; 293};
292 294
293extern LLLocalSpeakerMgr* gLocalSpeakerMgr;
294extern LLActiveSpeakerMgr* gActiveChannelSpeakerMgr;
295 295
296#endif // LL_LLFLOATERACTIVESPEAKERS_H 296#endif // LL_LLFLOATERACTIVESPEAKERS_H
diff --git a/linden/indra/newview/llfloateranimpreview.cpp b/linden/indra/newview/llfloateranimpreview.cpp
index 0b486b3..6892b8d 100644
--- a/linden/indra/newview/llfloateranimpreview.cpp
+++ b/linden/indra/newview/llfloateranimpreview.cpp
@@ -61,7 +61,7 @@
61#include "llviewermenufile.h" // upload_new_resource() 61#include "llviewermenufile.h" // upload_new_resource()
62#include "llvoavatar.h" 62#include "llvoavatar.h"
63#include "pipeline.h" 63#include "pipeline.h"
64#include "llvieweruictrlfactory.h" 64#include "lluictrlfactory.h"
65 65
66S32 LLFloaterAnimPreview::sUploadAmount = 10; 66S32 LLFloaterAnimPreview::sUploadAmount = 10;
67 67
@@ -143,7 +143,7 @@ BOOL LLFloaterAnimPreview::postBuild()
143 S32 btn_left = PREVIEW_HPAD; 143 S32 btn_left = PREVIEW_HPAD;
144 144
145 r.set( btn_left, y, btn_left + 32, y - BTN_HEIGHT ); 145 r.set( btn_left, y, btn_left + 32, y - BTN_HEIGHT );
146 mPlayButton = LLViewerUICtrlFactory::getButtonByName(this, "play_btn"); 146 mPlayButton = getChild<LLButton>( "play_btn");
147 if (!mPlayButton) 147 if (!mPlayButton)
148 { 148 {
149 mPlayButton = new LLButton("play_btn", LLRect(0,0,0,0)); 149 mPlayButton = new LLButton("play_btn", LLRect(0,0,0,0));
@@ -157,7 +157,7 @@ BOOL LLFloaterAnimPreview::postBuild()
157 157
158 mPlayButton->setScaleImage(TRUE); 158 mPlayButton->setScaleImage(TRUE);
159 159
160 mStopButton = LLViewerUICtrlFactory::getButtonByName(this, "stop_btn"); 160 mStopButton = getChild<LLButton>( "stop_btn");
161 if (!mStopButton) 161 if (!mStopButton)
162 { 162 {
163 mStopButton = new LLButton("stop_btn", LLRect(0,0,0,0)); 163 mStopButton = new LLButton("stop_btn", LLRect(0,0,0,0));
@@ -265,7 +265,7 @@ BOOL LLFloaterAnimPreview::postBuild()
265 //temp.mV[VZ] = 0.f; 265 //temp.mV[VZ] = 0.f;
266 F32 pelvis_max_displacement = pelvis_offset + (temp.magVec() * 0.5f) + 1.f; 266 F32 pelvis_max_displacement = pelvis_offset + (temp.magVec() * 0.5f) + 1.f;
267 267
268 F32 camera_zoom = gCamera->getDefaultFOV() / (2.f * atan(pelvis_max_displacement / PREVIEW_CAMERA_DISTANCE)); 268 F32 camera_zoom = LLViewerCamera::getInstance()->getDefaultFOV() / (2.f * atan(pelvis_max_displacement / PREVIEW_CAMERA_DISTANCE));
269 269
270 mAnimPreview->setZoom(camera_zoom); 270 mAnimPreview->setZoom(camera_zoom);
271 271
@@ -1015,7 +1015,7 @@ LLPreviewAnimation::LLPreviewAnimation(S32 width, S32 height) : LLDynamicTexture
1015 mDummyAvatar->updateGeometry(mDummyAvatar->mDrawable); 1015 mDummyAvatar->updateGeometry(mDummyAvatar->mDrawable);
1016 mDummyAvatar->startMotion(ANIM_AGENT_STAND, 5.f); 1016 mDummyAvatar->startMotion(ANIM_AGENT_STAND, 5.f);
1017 mDummyAvatar->mSkirtLOD.setVisible(FALSE, TRUE); 1017 mDummyAvatar->mSkirtLOD.setVisible(FALSE, TRUE);
1018 gPipeline.markVisible(mDummyAvatar->mDrawable, *gCamera); 1018 gPipeline.markVisible(mDummyAvatar->mDrawable, *LLViewerCamera::getInstance());
1019 1019
1020 // stop extraneous animations 1020 // stop extraneous animations
1021 mDummyAvatar->stopMotion( ANIM_AGENT_HEAD_ROT, TRUE ); 1021 mDummyAvatar->stopMotion( ANIM_AGENT_HEAD_ROT, TRUE );
@@ -1069,15 +1069,15 @@ BOOL LLPreviewAnimation::render()
1069 LLQuaternion(mCameraYaw, LLVector3::z_axis); 1069 LLQuaternion(mCameraYaw, LLVector3::z_axis);
1070 1070
1071 LLQuaternion av_rot = avatarp->mRoot.getWorldRotation() * camera_rot; 1071 LLQuaternion av_rot = avatarp->mRoot.getWorldRotation() * camera_rot;
1072 gCamera->setOriginAndLookAt( 1072 LLViewerCamera::getInstance()->setOriginAndLookAt(
1073 target_pos + ((LLVector3(mCameraDistance, 0.f, 0.f) + mCameraOffset) * av_rot), // camera 1073 target_pos + ((LLVector3(mCameraDistance, 0.f, 0.f) + mCameraOffset) * av_rot), // camera
1074 LLVector3::z_axis, // up 1074 LLVector3::z_axis, // up
1075 target_pos + (mCameraOffset * av_rot) ); // point of interest 1075 target_pos + (mCameraOffset * av_rot) ); // point of interest
1076 1076
1077 gCamera->setView(gCamera->getDefaultFOV() / mCameraZoom); 1077 LLViewerCamera::getInstance()->setView(LLViewerCamera::getInstance()->getDefaultFOV() / mCameraZoom);
1078 gCamera->setPerspective(FALSE, mOrigin.mX, mOrigin.mY, mWidth, mHeight, FALSE); 1078 LLViewerCamera::getInstance()->setPerspective(FALSE, mOrigin.mX, mOrigin.mY, mWidth, mHeight, FALSE);
1079 1079
1080 mCameraRelPos = gCamera->getOrigin() - avatarp->mHeadp->getWorldPosition(); 1080 mCameraRelPos = LLViewerCamera::getInstance()->getOrigin() - avatarp->mHeadp->getWorldPosition();
1081 1081
1082 //avatarp->setAnimationData("LookAtPoint", (void *)&mCameraRelPos); 1082 //avatarp->setAnimationData("LookAtPoint", (void *)&mCameraRelPos);
1083 1083
diff --git a/linden/indra/newview/llfloaterauction.cpp b/linden/indra/newview/llfloaterauction.cpp
index f0086c4..6b1c3e0 100644
--- a/linden/indra/newview/llfloaterauction.cpp
+++ b/linden/indra/newview/llfloaterauction.cpp
@@ -48,7 +48,7 @@
48#include "llviewerimagelist.h" 48#include "llviewerimagelist.h"
49#include "llviewerparcelmgr.h" 49#include "llviewerparcelmgr.h"
50#include "llviewerregion.h" 50#include "llviewerregion.h"
51#include "llvieweruictrlfactory.h" 51#include "lluictrlfactory.h"
52#include "llviewerwindow.h" 52#include "llviewerwindow.h"
53#include "llviewerdisplay.h" 53#include "llviewerdisplay.h"
54#include "llviewercontrol.h" 54#include "llviewercontrol.h"
@@ -74,7 +74,7 @@ LLFloaterAuction::LLFloaterAuction() :
74 LLFloater("floater_auction"), 74 LLFloater("floater_auction"),
75 mParcelID(-1) 75 mParcelID(-1)
76{ 76{
77 gUICtrlFactory->buildFloater(this, "floater_auction.xml"); 77 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_auction.xml");
78 78
79 childSetValue("fence_check", 79 childSetValue("fence_check",
80 LLSD( gSavedSettings.getBOOL("AuctionShowFence") ) ); 80 LLSD( gSavedSettings.getBOOL("AuctionShowFence") ) );
@@ -106,8 +106,8 @@ void LLFloaterAuction::show()
106 106
107void LLFloaterAuction::initialize() 107void LLFloaterAuction::initialize()
108{ 108{
109 mParcelp = gParcelMgr->getParcelSelection(); 109 mParcelp = LLViewerParcelMgr::getInstance()->getParcelSelection();
110 LLViewerRegion* region = gParcelMgr->getSelectionRegion(); 110 LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
111 LLParcel* parcelp = mParcelp->getParcel(); 111 LLParcel* parcelp = mParcelp->getParcel();
112 if(parcelp && region && !parcelp->getForSale()) 112 if(parcelp && region && !parcelp->getForSale())
113 { 113 {
@@ -141,7 +141,7 @@ void LLFloaterAuction::draw()
141{ 141{
142 LLFloater::draw(); 142 LLFloater::draw();
143 143
144 if(getVisible() && !isMinimized() && mImage.notNull()) 144 if(!isMinimized() && mImage.notNull())
145 { 145 {
146 LLRect rect; 146 LLRect rect;
147 if (childGetRect("snapshot_icon", rect)) 147 if (childGetRect("snapshot_icon", rect))
diff --git a/linden/indra/newview/llfloateravatarinfo.cpp b/linden/indra/newview/llfloateravatarinfo.cpp
index a26299c..942a394 100644
--- a/linden/indra/newview/llfloateravatarinfo.cpp
+++ b/linden/indra/newview/llfloateravatarinfo.cpp
@@ -37,30 +37,9 @@
37 37
38// viewer project includes 38// viewer project includes
39#include "llagentdata.h" 39#include "llagentdata.h"
40//#include "llbutton.h"
41//#include "llcallingcard.h"
42//#include "llcheckboxctrl.h"
43//#include "llcommandhandler.h"
44//#include "llfloaterworldmap.h"
45//#include "llfloatermute.h"
46//#include "llinventoryview.h"
47//#include "lllineeditor.h"
48//#include "llmutelist.h"
49//#include "llscrolllistctrl.h"
50//#include "lltabcontainer.h"
51//#include "llimview.h"
52//#include "lluiconstants.h"
53//#include "llviewerobject.h"
54//#include "llviewerobjectlist.h"
55//#include "llviewerregion.h"
56//#include "llviewborder.h"
57//#include "llinventorymodel.h"
58//#include "lltextbox.h"
59//#include "lltexturectrl.h"
60//#include "llviewertexteditor.h"
61#include "llcommandhandler.h" 40#include "llcommandhandler.h"
62#include "llpanelavatar.h" 41#include "llpanelavatar.h"
63#include "llvieweruictrlfactory.h" 42#include "lluictrlfactory.h"
64 43
65// linden library includes 44// linden library includes
66#include "llinventory.h" 45#include "llinventory.h"
@@ -133,7 +112,7 @@ LLFloaterAvatarInfo::LLFloaterAvatarInfo(const std::string& name, const LLRect &
133 112
134 factory_map["Panel Avatar"] = LLCallbackMap(createPanelAvatar, this); 113 factory_map["Panel Avatar"] = LLCallbackMap(createPanelAvatar, this);
135 114
136 gUICtrlFactory->buildFloater(this, "floater_profile.xml", &factory_map); 115 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_profile.xml", &factory_map);
137 116
138 117
139 if(mPanelAvatarp) 118 if(mPanelAvatarp)
@@ -266,6 +245,7 @@ void LLFloaterAvatarInfo::showProfileCallback(S32 option, void *userdata)
266//// virtual 245//// virtual
267void LLFloaterAvatarInfo::draw() 246void LLFloaterAvatarInfo::draw()
268{ 247{
248 // skip LLPreview::draw()
269 LLFloater::draw(); 249 LLFloater::draw();
270} 250}
271 251
diff --git a/linden/indra/newview/llfloateravatarpicker.cpp b/linden/indra/newview/llfloateravatarpicker.cpp
index 4d01bab..f31626e 100644
--- a/linden/indra/newview/llfloateravatarpicker.cpp
+++ b/linden/indra/newview/llfloateravatarpicker.cpp
@@ -41,7 +41,7 @@
41#include "lllineeditor.h" 41#include "lllineeditor.h"
42#include "llscrolllistctrl.h" 42#include "llscrolllistctrl.h"
43#include "lltextbox.h" 43#include "lltextbox.h"
44#include "llvieweruictrlfactory.h" 44#include "lluictrlfactory.h"
45#include "llagent.h" 45#include "llagent.h"
46 46
47const S32 MIN_WIDTH = 200; 47const S32 MIN_WIDTH = 200;
@@ -88,7 +88,7 @@ LLFloaterAvatarPicker::LLFloaterAvatarPicker() :
88 mCallback(NULL), 88 mCallback(NULL),
89 mCallbackUserdata(NULL) 89 mCallbackUserdata(NULL)
90{ 90{
91 gUICtrlFactory->buildFloater(this, "floater_avatar_picker.xml", NULL); 91 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_avatar_picker.xml", NULL);
92} 92}
93 93
94BOOL LLFloaterAvatarPicker::postBuild() 94BOOL LLFloaterAvatarPicker::postBuild()
@@ -98,7 +98,7 @@ BOOL LLFloaterAvatarPicker::postBuild()
98 childSetAction("Find", onBtnFind, this); 98 childSetAction("Find", onBtnFind, this);
99 childDisable("Find"); 99 childDisable("Find");
100 100
101 mListNames = LLViewerUICtrlFactory::getScrollListByName(this, "Names"); 101 mListNames = getChild<LLScrollListCtrl>("Names");
102 childSetDoubleClickCallback("Names",onBtnAdd); 102 childSetDoubleClickCallback("Names",onBtnAdd);
103 childSetCommitCallback("Names", onList, this); 103 childSetCommitCallback("Names", onList, this);
104 childDisable("Names"); 104 childDisable("Names");
@@ -115,7 +115,7 @@ BOOL LLFloaterAvatarPicker::postBuild()
115 mListNames->addCommentText("No results"); 115 mListNames->addCommentText("No results");
116 } 116 }
117 117
118 mInventoryPanel = (LLInventoryPanel*)this->getCtrlByNameAndType("Inventory Panel", WIDGET_TYPE_INVENTORY_PANEL); 118 mInventoryPanel = getChild<LLInventoryPanel>("Inventory Panel");
119 if(mInventoryPanel) 119 if(mInventoryPanel)
120 { 120 {
121 mInventoryPanel->setFilterTypes(0x1 << LLInventoryType::IT_CALLINGCARD); 121 mInventoryPanel->setFilterTypes(0x1 << LLInventoryType::IT_CALLINGCARD);
@@ -388,7 +388,7 @@ void LLFloaterAvatarPicker::editKeystroke(LLLineEditor* caller, void* user_data)
388} 388}
389 389
390// virtual 390// virtual
391BOOL LLFloaterAvatarPicker::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent) 391BOOL LLFloaterAvatarPicker::handleKeyHere(KEY key, MASK mask)
392{ 392{
393 if (key == KEY_RETURN 393 if (key == KEY_RETURN
394 && mask == MASK_NONE) 394 && mask == MASK_NONE)
@@ -410,5 +410,5 @@ BOOL LLFloaterAvatarPicker::handleKeyHere(KEY key, MASK mask, BOOL called_from_p
410 return TRUE; 410 return TRUE;
411 } 411 }
412 412
413 return LLFloater::handleKeyHere(key, mask, called_from_parent); 413 return LLFloater::handleKeyHere(key, mask);
414} 414}
diff --git a/linden/indra/newview/llfloateravatarpicker.h b/linden/indra/newview/llfloateravatarpicker.h
index 6b8498c..7fcb5c0 100644
--- a/linden/indra/newview/llfloateravatarpicker.h
+++ b/linden/indra/newview/llfloateravatarpicker.h
@@ -74,7 +74,7 @@ protected:
74 void find(); 74 void find();
75 void setAllowMultiple(BOOL allow_multiple); 75 void setAllowMultiple(BOOL allow_multiple);
76 76
77 virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); 77 virtual BOOL handleKeyHere(KEY key, MASK mask);
78 78
79protected: 79protected:
80 LLScrollListCtrl* mListNames; 80 LLScrollListCtrl* mListNames;
diff --git a/linden/indra/newview/llfloateravatartextures.cpp b/linden/indra/newview/llfloateravatartextures.cpp
index d112ee2..0b529b7 100644
--- a/linden/indra/newview/llfloateravatartextures.cpp
+++ b/linden/indra/newview/llfloateravatartextures.cpp
@@ -35,7 +35,7 @@
35 35
36#include "lltexturectrl.h" 36#include "lltexturectrl.h"
37 37
38#include "llvieweruictrlfactory.h" 38#include "lluictrlfactory.h"
39#include "llviewerobjectlist.h" 39#include "llviewerobjectlist.h"
40#include "llvoavatar.h" 40#include "llvoavatar.h"
41 41
@@ -55,7 +55,7 @@ LLFloaterAvatarTextures* LLFloaterAvatarTextures::show(const LLUUID &id)
55 LLFloaterAvatarTextures* floaterp = new LLFloaterAvatarTextures(id); 55 LLFloaterAvatarTextures* floaterp = new LLFloaterAvatarTextures(id);
56 56
57 // Builds and adds to gFloaterView 57 // Builds and adds to gFloaterView
58 gUICtrlFactory->buildFloater(floaterp, "floater_avatar_textures.xml"); 58 LLUICtrlFactory::getInstance()->buildFloater(floaterp, "floater_avatar_textures.xml");
59 59
60 gFloaterView->addChild(floaterp); 60 gFloaterView->addChild(floaterp);
61 floaterp->open(); /*Flawfinder: ignore*/ 61 floaterp->open(); /*Flawfinder: ignore*/
diff --git a/linden/indra/newview/llfloaterbuildoptions.cpp b/linden/indra/newview/llfloaterbuildoptions.cpp
index fac5ea3..377dd75 100644
--- a/linden/indra/newview/llfloaterbuildoptions.cpp
+++ b/linden/indra/newview/llfloaterbuildoptions.cpp
@@ -37,7 +37,7 @@
37#include "llviewerprecompiledheaders.h" 37#include "llviewerprecompiledheaders.h"
38 38
39#include "llfloaterbuildoptions.h" 39#include "llfloaterbuildoptions.h"
40#include "llvieweruictrlfactory.h" 40#include "lluictrlfactory.h"
41 41
42// library includes 42// library includes
43#include "llfontgl.h" 43#include "llfontgl.h"
@@ -79,7 +79,7 @@ void LLFloaterBuildOptions::show(void*)
79 { 79 {
80 LLFloaterBuildOptions* floater = new LLFloaterBuildOptions(); 80 LLFloaterBuildOptions* floater = new LLFloaterBuildOptions();
81 81
82 gUICtrlFactory->buildFloater(floater, "floater_build_options.xml"); 82 LLUICtrlFactory::getInstance()->buildFloater(floater, "floater_build_options.xml");
83 floater->open(); /*Flawfinder: ignore*/ 83 floater->open(); /*Flawfinder: ignore*/
84 } 84 }
85} 85}
diff --git a/linden/indra/newview/llfloaterbump.cpp b/linden/indra/newview/llfloaterbump.cpp
index d340112..61d1b81 100644
--- a/linden/indra/newview/llfloaterbump.cpp
+++ b/linden/indra/newview/llfloaterbump.cpp
@@ -36,7 +36,7 @@
36 36
37#include "llscrolllistctrl.h" 37#include "llscrolllistctrl.h"
38 38
39#include "llvieweruictrlfactory.h" 39#include "lluictrlfactory.h"
40#include "llviewermessage.h" 40#include "llviewermessage.h"
41#include "llappviewer.h" // gPacificDaylightTime 41#include "llappviewer.h" // gPacificDaylightTime
42 42
@@ -55,7 +55,7 @@ LLFloaterBump::LLFloaterBump()
55{ 55{
56 sInstance = this; 56 sInstance = this;
57 57
58 gUICtrlFactory->buildFloater(this, "floater_bumps.xml"); 58 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_bumps.xml");
59} 59}
60 60
61 61
@@ -78,7 +78,7 @@ void LLFloaterBump::show(void *contents)
78 sInstance = new LLFloaterBump(); 78 sInstance = new LLFloaterBump();
79 } 79 }
80 80
81 LLScrollListCtrl* list = LLUICtrlFactory::getScrollListByName(sInstance, "bump_list"); 81 LLScrollListCtrl* list = sInstance->getChild<LLScrollListCtrl>("bump_list");
82 if (!list) return; 82 if (!list) return;
83 list->deleteAllItems(); 83 list->deleteAllItems();
84 84
diff --git a/linden/indra/newview/llfloaterbuy.cpp b/linden/indra/newview/llfloaterbuy.cpp
index 95a7b41..18d2913 100644
--- a/linden/indra/newview/llfloaterbuy.cpp
+++ b/linden/indra/newview/llfloaterbuy.cpp
@@ -46,7 +46,7 @@
46#include "llselectmgr.h" 46#include "llselectmgr.h"
47#include "llscrolllistctrl.h" 47#include "llscrolllistctrl.h"
48#include "llviewerobject.h" 48#include "llviewerobject.h"
49#include "llvieweruictrlfactory.h" 49#include "lluictrlfactory.h"
50#include "llviewerwindow.h" 50#include "llviewerwindow.h"
51 51
52LLFloaterBuy* LLFloaterBuy::sInstance = NULL; 52LLFloaterBuy* LLFloaterBuy::sInstance = NULL;
@@ -54,7 +54,7 @@ LLFloaterBuy* LLFloaterBuy::sInstance = NULL;
54LLFloaterBuy::LLFloaterBuy() 54LLFloaterBuy::LLFloaterBuy()
55: LLFloater("floater_buy_object", "FloaterBuyRect", "") 55: LLFloater("floater_buy_object", "FloaterBuyRect", "")
56{ 56{
57 gUICtrlFactory->buildFloater(this, "floater_buy_object.xml"); 57 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_buy_object.xml");
58 58
59 childDisable("object_list"); 59 childDisable("object_list");
60 childDisable("item_list"); 60 childDisable("item_list");
@@ -72,17 +72,17 @@ LLFloaterBuy::~LLFloaterBuy()
72 72
73void LLFloaterBuy::reset() 73void LLFloaterBuy::reset()
74{ 74{
75 LLScrollListCtrl* object_list = LLUICtrlFactory::getScrollListByName(this, "object_list"); 75 LLScrollListCtrl* object_list = getChild<LLScrollListCtrl>("object_list");
76 if (object_list) object_list->deleteAllItems(); 76 if (object_list) object_list->deleteAllItems();
77 77
78 LLScrollListCtrl* item_list = LLUICtrlFactory::getScrollListByName(this, "item_list"); 78 LLScrollListCtrl* item_list = getChild<LLScrollListCtrl>("item_list");
79 if (item_list) item_list->deleteAllItems(); 79 if (item_list) item_list->deleteAllItems();
80} 80}
81 81
82// static 82// static
83void LLFloaterBuy::show(const LLSaleInfo& sale_info) 83void LLFloaterBuy::show(const LLSaleInfo& sale_info)
84{ 84{
85 LLObjectSelectionHandle selection = gSelectMgr->getSelection(); 85 LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
86 86
87 if (selection->getRootObjectCount() != 1) 87 if (selection->getRootObjectCount() != 1)
88 { 88 {
@@ -104,7 +104,7 @@ void LLFloaterBuy::show(const LLSaleInfo& sale_info)
104 sInstance->open(); /*Flawfinder: ignore*/ 104 sInstance->open(); /*Flawfinder: ignore*/
105 sInstance->setFocus(TRUE); 105 sInstance->setFocus(TRUE);
106 sInstance->mSaleInfo = sale_info; 106 sInstance->mSaleInfo = sale_info;
107 sInstance->mObjectSelection = gSelectMgr->getEditSelection(); 107 sInstance->mObjectSelection = LLSelectMgr::getInstance()->getEditSelection();
108 108
109 // Always center the dialog. User can change the size, 109 // Always center the dialog. User can change the size,
110 // but purchases are important and should be center screen. 110 // but purchases are important and should be center screen.
@@ -133,7 +133,7 @@ void LLFloaterBuy::show(const LLSaleInfo& sale_info)
133 133
134 LLUUID owner_id; 134 LLUUID owner_id;
135 LLString owner_name; 135 LLString owner_name;
136 BOOL owners_identical = gSelectMgr->selectGetOwner(owner_id, owner_name); 136 BOOL owners_identical = LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name);
137 if (!owners_identical) 137 if (!owners_identical)
138 { 138 {
139 gViewerWindow->alertXml("BuyObjectOneOwner"); 139 gViewerWindow->alertXml("BuyObjectOneOwner");
@@ -151,13 +151,13 @@ void LLFloaterBuy::show(const LLSaleInfo& sale_info)
151 LLSD row; 151 LLSD row;
152 152
153 // Compute icon for this item 153 // Compute icon for this item
154 LLUUID icon_id = get_item_icon_uuid(LLAssetType::AT_OBJECT, 154 LLString icon_name = get_item_icon_name(LLAssetType::AT_OBJECT,
155 LLInventoryType::IT_OBJECT, 155 LLInventoryType::IT_OBJECT,
156 0x0, FALSE); 156 0x0, FALSE);
157 157
158 row["columns"][0]["column"] = "icon"; 158 row["columns"][0]["column"] = "icon";
159 row["columns"][0]["type"] = "icon"; 159 row["columns"][0]["type"] = "icon";
160 row["columns"][0]["value"] = icon_id; 160 row["columns"][0]["value"] = icon_name;
161 161
162 // Append the permissions that you will acquire (not the current 162 // Append the permissions that you will acquire (not the current
163 // permissions). 163 // permissions).
@@ -256,13 +256,13 @@ void LLFloaterBuy::inventoryChanged(LLViewerObject* obj,
256 item_is_multi = TRUE; 256 item_is_multi = TRUE;
257 } 257 }
258 258
259 LLUUID icon_id = get_item_icon_uuid(inv_item->getType(), 259 LLString icon_name = get_item_icon_name(inv_item->getType(),
260 inv_item->getInventoryType(), 260 inv_item->getInventoryType(),
261 inv_item->getFlags(), 261 inv_item->getFlags(),
262 item_is_multi); 262 item_is_multi);
263 row["columns"][0]["column"] = "icon"; 263 row["columns"][0]["column"] = "icon";
264 row["columns"][0]["type"] = "icon"; 264 row["columns"][0]["type"] = "icon";
265 row["columns"][0]["value"] = icon_id; 265 row["columns"][0]["value"] = icon_name;
266 266
267 // Append the permissions that you will acquire (not the current 267 // Append the permissions that you will acquire (not the current
268 // permissions). 268 // permissions).
@@ -307,7 +307,7 @@ void LLFloaterBuy::onClickBuy(void*)
307 // *NOTE: doesn't work for multiple object buy, which UI does not 307 // *NOTE: doesn't work for multiple object buy, which UI does not
308 // currently support sale info is used for verification only, if 308 // currently support sale info is used for verification only, if
309 // it doesn't match region info then sale is canceled. 309 // it doesn't match region info then sale is canceled.
310 gSelectMgr->sendBuy(gAgent.getID(), category_id, sInstance->mSaleInfo ); 310 LLSelectMgr::getInstance()->sendBuy(gAgent.getID(), category_id, sInstance->mSaleInfo );
311 311
312 sInstance->close(); 312 sInstance->close();
313} 313}
diff --git a/linden/indra/newview/llfloaterbuycontents.cpp b/linden/indra/newview/llfloaterbuycontents.cpp
index d32a631..8b2a031 100644
--- a/linden/indra/newview/llfloaterbuycontents.cpp
+++ b/linden/indra/newview/llfloaterbuycontents.cpp
@@ -50,7 +50,7 @@
50#include "llscrolllistctrl.h" 50#include "llscrolllistctrl.h"
51#include "llviewerobject.h" 51#include "llviewerobject.h"
52#include "llviewerregion.h" 52#include "llviewerregion.h"
53#include "llvieweruictrlfactory.h" 53#include "lluictrlfactory.h"
54#include "llviewerwindow.h" 54#include "llviewerwindow.h"
55 55
56LLFloaterBuyContents* LLFloaterBuyContents::sInstance = NULL; 56LLFloaterBuyContents* LLFloaterBuyContents::sInstance = NULL;
@@ -58,7 +58,7 @@ LLFloaterBuyContents* LLFloaterBuyContents::sInstance = NULL;
58LLFloaterBuyContents::LLFloaterBuyContents() 58LLFloaterBuyContents::LLFloaterBuyContents()
59: LLFloater("floater_buy_contents", "FloaterBuyContentsRect", "") 59: LLFloater("floater_buy_contents", "FloaterBuyContentsRect", "")
60{ 60{
61 gUICtrlFactory->buildFloater(this, "floater_buy_contents.xml"); 61 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_buy_contents.xml");
62 62
63 childSetAction("cancel_btn", onClickCancel, this); 63 childSetAction("cancel_btn", onClickCancel, this);
64 childSetAction("buy_btn", onClickBuy, this); 64 childSetAction("buy_btn", onClickBuy, this);
@@ -79,7 +79,7 @@ LLFloaterBuyContents::~LLFloaterBuyContents()
79// static 79// static
80void LLFloaterBuyContents::show(const LLSaleInfo& sale_info) 80void LLFloaterBuyContents::show(const LLSaleInfo& sale_info)
81{ 81{
82 LLObjectSelectionHandle selection = gSelectMgr->getSelection(); 82 LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
83 83
84 if (selection->getRootObjectCount() != 1) 84 if (selection->getRootObjectCount() != 1)
85 { 85 {
@@ -90,7 +90,7 @@ void LLFloaterBuyContents::show(const LLSaleInfo& sale_info)
90 // Create a new instance only if needed 90 // Create a new instance only if needed
91 if (sInstance) 91 if (sInstance)
92 { 92 {
93 LLScrollListCtrl* list = LLUICtrlFactory::getScrollListByName(sInstance, "item_list"); 93 LLScrollListCtrl* list = sInstance->getChild<LLScrollListCtrl>("item_list");
94 if (list) list->deleteAllItems(); 94 if (list) list->deleteAllItems();
95 } 95 }
96 else 96 else
@@ -100,7 +100,7 @@ void LLFloaterBuyContents::show(const LLSaleInfo& sale_info)
100 100
101 sInstance->open(); /*Flawfinder: ignore*/ 101 sInstance->open(); /*Flawfinder: ignore*/
102 sInstance->setFocus(TRUE); 102 sInstance->setFocus(TRUE);
103 sInstance->mObjectSelection = gSelectMgr->getEditSelection(); 103 sInstance->mObjectSelection = LLSelectMgr::getInstance()->getEditSelection();
104 104
105 // Always center the dialog. User can change the size, 105 // Always center the dialog. User can change the size,
106 // but purchases are important and should be center screen. 106 // but purchases are important and should be center screen.
@@ -110,7 +110,7 @@ void LLFloaterBuyContents::show(const LLSaleInfo& sale_info)
110 110
111 LLUUID owner_id; 111 LLUUID owner_id;
112 LLString owner_name; 112 LLString owner_name;
113 BOOL owners_identical = gSelectMgr->selectGetOwner(owner_id, owner_name); 113 BOOL owners_identical = LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name);
114 if (!owners_identical) 114 if (!owners_identical)
115 { 115 {
116 gViewerWindow->alertXml("BuyContentsOneOwner"); 116 gViewerWindow->alertXml("BuyContentsOneOwner");
@@ -223,13 +223,13 @@ void LLFloaterBuyContents::inventoryChanged(LLViewerObject* obj,
223 item_is_multi = TRUE; 223 item_is_multi = TRUE;
224 } 224 }
225 225
226 LLUUID icon_id = get_item_icon_uuid(inv_item->getType(), 226 LLString icon_name = get_item_icon_name(inv_item->getType(),
227 inv_item->getInventoryType(), 227 inv_item->getInventoryType(),
228 inv_item->getFlags(), 228 inv_item->getFlags(),
229 item_is_multi); 229 item_is_multi);
230 row["columns"][0]["column"] = "icon"; 230 row["columns"][0]["column"] = "icon";
231 row["columns"][0]["type"] = "icon"; 231 row["columns"][0]["type"] = "icon";
232 row["columns"][0]["value"] = icon_id; 232 row["columns"][0]["value"] = icon_name;
233 233
234 // Append the permissions that you will acquire (not the current 234 // Append the permissions that you will acquire (not the current
235 // permissions). 235 // permissions).
@@ -291,7 +291,7 @@ void LLFloaterBuyContents::onClickBuy(void*)
291 // *NOTE: doesn't work for multiple object buy, which UI does not 291 // *NOTE: doesn't work for multiple object buy, which UI does not
292 // currently support sale info is used for verification only, if 292 // currently support sale info is used for verification only, if
293 // it doesn't match region info then sale is canceled. 293 // it doesn't match region info then sale is canceled.
294 gSelectMgr->sendBuy(gAgent.getID(), category_id, sInstance->mSaleInfo); 294 LLSelectMgr::getInstance()->sendBuy(gAgent.getID(), category_id, sInstance->mSaleInfo);
295 295
296 sInstance->close(); 296 sInstance->close();
297} 297}
diff --git a/linden/indra/newview/llfloaterbuycurrency.cpp b/linden/indra/newview/llfloaterbuycurrency.cpp
index dd7732d..0381b8f 100644
--- a/linden/indra/newview/llfloaterbuycurrency.cpp
+++ b/linden/indra/newview/llfloaterbuycurrency.cpp
@@ -40,7 +40,7 @@
40#include "lltextbox.h" 40#include "lltextbox.h"
41#include "llviewchildren.h" 41#include "llviewchildren.h"
42#include "llviewerwindow.h" 42#include "llviewerwindow.h"
43#include "llvieweruictrlfactory.h" 43#include "lluictrlfactory.h"
44#include "llweb.h" 44#include "llweb.h"
45#include "llwindow.h" 45#include "llwindow.h"
46#include "llappviewer.h" 46#include "llappviewer.h"
@@ -97,7 +97,7 @@ LLFloaterBuyCurrencyUI* LLFloaterBuyCurrencyUI::soleInstance(bool createIfNeeded
97 { 97 {
98 sInstance = new LLFloaterBuyCurrencyUI(); 98 sInstance = new LLFloaterBuyCurrencyUI();
99 99
100 gUICtrlFactory->buildFloater(sInstance, "floater_buy_currency.xml"); 100 LLUICtrlFactory::getInstance()->buildFloater(sInstance, "floater_buy_currency.xml");
101 sInstance->center(); 101 sInstance->center();
102 } 102 }
103 103
@@ -221,7 +221,7 @@ void LLFloaterBuyCurrencyUI::updateUI()
221 { 221 {
222 mChildren.setBadge("step_error", LLViewChildren::BADGE_ERROR); 222 mChildren.setBadge("step_error", LLViewChildren::BADGE_ERROR);
223 223
224 LLTextBox* message = LLUICtrlFactory::getTextBoxByName(this, "error_message"); 224 LLTextBox* message = getChild<LLTextBox>("error_message");
225 if (message) 225 if (message)
226 { 226 {
227 message->setVisible(true); 227 message->setVisible(true);
diff --git a/linden/indra/newview/llfloaterbuyland.cpp b/linden/indra/newview/llfloaterbuyland.cpp
index 2786a34..ee78eaa 100644
--- a/linden/indra/newview/llfloaterbuyland.cpp
+++ b/linden/indra/newview/llfloaterbuyland.cpp
@@ -53,7 +53,7 @@
53#include "lltexturectrl.h" 53#include "lltexturectrl.h"
54#include "llviewchildren.h" 54#include "llviewchildren.h"
55#include "llviewercontrol.h" 55#include "llviewercontrol.h"
56#include "llvieweruictrlfactory.h" 56#include "lluictrlfactory.h"
57#include "llviewerparcelmgr.h" 57#include "llviewerparcelmgr.h"
58#include "llviewerregion.h" 58#include "llviewerregion.h"
59#include "llviewertexteditor.h" 59#include "llviewertexteditor.h"
@@ -187,6 +187,7 @@ public:
187 virtual void draw(); 187 virtual void draw();
188 virtual BOOL canClose(); 188 virtual BOOL canClose();
189 virtual void onClose(bool app_quitting); 189 virtual void onClose(bool app_quitting);
190 /*virtual*/ void setMinimized(BOOL b);
190 191
191private: 192private:
192 class SelectionObserver : public LLParcelObserver 193 class SelectionObserver : public LLParcelObserver
@@ -290,7 +291,7 @@ LLFloaterBuyLandUI* LLFloaterBuyLandUI::soleInstance(bool createIfNeeded)
290 { 291 {
291 sInstance = new LLFloaterBuyLandUI(); 292 sInstance = new LLFloaterBuyLandUI();
292 293
293 gUICtrlFactory->buildFloater(sInstance, "floater_buy_land.xml"); 294 LLUICtrlFactory::getInstance()->buildFloater(sInstance, "floater_buy_land.xml");
294 sInstance->center(); 295 sInstance->center();
295 296
296 static bool observingCacheName = false; 297 static bool observingCacheName = false;
@@ -304,7 +305,7 @@ LLFloaterBuyLandUI* LLFloaterBuyLandUI::soleInstance(bool createIfNeeded)
304 if (!parcelSelectionObserver) 305 if (!parcelSelectionObserver)
305 { 306 {
306 parcelSelectionObserver = new SelectionObserver; 307 parcelSelectionObserver = new SelectionObserver;
307 gParcelMgr->addObserver(parcelSelectionObserver); 308 LLViewerParcelMgr::getInstance()->addObserver(parcelSelectionObserver);
308 } 309 }
309 } 310 }
310 311
@@ -333,7 +334,7 @@ LLFloaterBuyLandUI::~LLFloaterBuyLandUI()
333{ 334{
334 delete mTransaction; 335 delete mTransaction;
335 336
336 gParcelMgr->deleteParcelBuy(mParcelBuyInfo); 337 LLViewerParcelMgr::getInstance()->deleteParcelBuy(mParcelBuyInfo);
337 338
338 if (sInstance == this) 339 if (sInstance == this)
339 { 340 {
@@ -346,14 +347,14 @@ void LLFloaterBuyLandUI::SelectionObserver::changed()
346 LLFloaterBuyLandUI* ui = LLFloaterBuyLandUI::soleInstance(false); 347 LLFloaterBuyLandUI* ui = LLFloaterBuyLandUI::soleInstance(false);
347 if (ui) 348 if (ui)
348 { 349 {
349 if (gParcelMgr->selectionEmpty()) 350 if (LLViewerParcelMgr::getInstance()->selectionEmpty())
350 { 351 {
351 ui->close(); 352 ui->close();
352 } 353 }
353 else { 354 else {
354 ui->setParcel( 355 ui->setParcel(
355 gParcelMgr->getSelectionRegion(), 356 LLViewerParcelMgr::getInstance()->getSelectionRegion(),
356 gParcelMgr->getParcelSelection()); 357 LLViewerParcelMgr::getInstance()->getParcelSelection());
357 } 358 }
358 } 359 }
359} 360}
@@ -430,7 +431,7 @@ void LLFloaterBuyLandUI::updateParcelInfo()
430 parcel->getMaxPrimCapacity() * parcel->getParcelPrimBonus()); 431 parcel->getMaxPrimCapacity() * parcel->getParcelPrimBonus());
431 // Can't have more than region max tasks, regardless of parcel 432 // Can't have more than region max tasks, regardless of parcel
432 // object bonus factor. 433 // object bonus factor.
433 LLViewerRegion* region = gParcelMgr->getSelectionRegion(); 434 LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
434 if(region) 435 if(region)
435 { 436 {
436 S32 max_tasks_per_region = (S32)region->getMaxTasks(); 437 S32 max_tasks_per_region = (S32)region->getMaxTasks();
@@ -518,7 +519,7 @@ void LLFloaterBuyLandUI::updateParcelInfo()
518 519
519void LLFloaterBuyLandUI::updateCovenantInfo() 520void LLFloaterBuyLandUI::updateCovenantInfo()
520{ 521{
521 LLViewerRegion* region = gParcelMgr->getSelectionRegion(); 522 LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
522 if(!region) return; 523 if(!region) return;
523 524
524 LLTextBox* region_name = getChild<LLTextBox>("region_name_text"); 525 LLTextBox* region_name = getChild<LLTextBox>("region_name_text");
@@ -728,7 +729,7 @@ void LLFloaterBuyLandUI::runWebSitePrep(const std::string& password)
728 } 729 }
729 730
730 BOOL remove_contribution = childGetValue("remove_contribution").asBoolean(); 731 BOOL remove_contribution = childGetValue("remove_contribution").asBoolean();
731 mParcelBuyInfo = gParcelMgr->setupParcelBuy(gAgent.getID(), gAgent.getSessionID(), 732 mParcelBuyInfo = LLViewerParcelMgr::getInstance()->setupParcelBuy(gAgent.getID(), gAgent.getSessionID(),
732 gAgent.getGroupID(), mIsForGroup, mIsClaim, remove_contribution); 733 gAgent.getGroupID(), mIsForGroup, mIsClaim, remove_contribution);
733 734
734 if (mParcelBuyInfo 735 if (mParcelBuyInfo
@@ -746,7 +747,7 @@ void LLFloaterBuyLandUI::runWebSitePrep(const std::string& password)
746 747
747 if (mSiteMembershipUpgrade) 748 if (mSiteMembershipUpgrade)
748 { 749 {
749 LLComboBox* levels = LLUICtrlFactory::getComboBoxByName(this, "account_level"); 750 LLComboBox* levels = getChild<LLComboBox>( "account_level");
750 if (levels) 751 if (levels)
751 { 752 {
752 mUserPlanChoice = levels->getCurrentIndex(); 753 mUserPlanChoice = levels->getCurrentIndex();
@@ -797,8 +798,8 @@ void LLFloaterBuyLandUI::sendBuyLand()
797{ 798{
798 if (mParcelBuyInfo) 799 if (mParcelBuyInfo)
799 { 800 {
800 gParcelMgr->sendParcelBuy(mParcelBuyInfo); 801 LLViewerParcelMgr::getInstance()->sendParcelBuy(mParcelBuyInfo);
801 gParcelMgr->deleteParcelBuy(mParcelBuyInfo); 802 LLViewerParcelMgr::getInstance()->deleteParcelBuy(mParcelBuyInfo);
802 mBought = true; 803 mBought = true;
803 } 804 }
804} 805}
@@ -968,9 +969,27 @@ void LLFloaterBuyLandUI::draw()
968 } 969 }
969} 970}
970 971
972// virtual
971BOOL LLFloaterBuyLandUI::canClose() 973BOOL LLFloaterBuyLandUI::canClose()
972{ 974{
973 return (mTransaction ? FALSE : TRUE) && mCurrency.canCancel(); 975 bool can_close = (mTransaction ? FALSE : TRUE) && mCurrency.canCancel();
976 if (!can_close)
977 {
978 // explain to user why they can't do this, see DEV-9605
979 gViewerWindow->alertXml("CannotCloseFloaterBuyLand");
980 }
981 return can_close;
982}
983
984// virtual
985void LLFloaterBuyLandUI::setMinimized(BOOL minimize)
986{
987 bool restored = (isMinimized() && !minimize);
988 LLFloater::setMinimized(minimize);
989 if (restored)
990 {
991 refreshUI();
992 }
974} 993}
975 994
976void LLFloaterBuyLandUI::onClose(bool app_quitting) 995void LLFloaterBuyLandUI::onClose(bool app_quitting)
@@ -984,7 +1003,7 @@ void LLFloaterBuyLandUI::refreshUI()
984{ 1003{
985 // section zero: title area 1004 // section zero: title area
986 { 1005 {
987 LLTextureCtrl* snapshot = LLViewerUICtrlFactory::getTexturePickerByName(this, "info_image"); 1006 LLTextureCtrl* snapshot = getChild<LLTextureCtrl>("info_image");
988 if (snapshot) 1007 if (snapshot)
989 { 1008 {
990 snapshot->setImageAssetID( 1009 snapshot->setImageAssetID(
@@ -1042,7 +1061,7 @@ void LLFloaterBuyLandUI::refreshUI()
1042 ? LLViewChildren::BADGE_ERROR 1061 ? LLViewChildren::BADGE_ERROR
1043 : LLViewChildren::BADGE_WARN); 1062 : LLViewChildren::BADGE_WARN);
1044 1063
1045 LLTextBox* message = LLUICtrlFactory::getTextBoxByName(this, "error_message"); 1064 LLTextBox* message = getChild<LLTextBox>("error_message");
1046 if (message) 1065 if (message)
1047 { 1066 {
1048 message->setVisible(true); 1067 message->setVisible(true);
@@ -1076,7 +1095,7 @@ void LLFloaterBuyLandUI::refreshUI()
1076 : getString("cant_own_land") 1095 : getString("cant_own_land")
1077 ); 1096 );
1078 1097
1079 LLComboBox* levels = LLUICtrlFactory::getComboBoxByName(this, "account_level"); 1098 LLComboBox* levels = getChild<LLComboBox>( "account_level");
1080 if (levels) 1099 if (levels)
1081 { 1100 {
1082 levels->setVisible(mSiteMembershipUpgrade); 1101 levels->setVisible(mSiteMembershipUpgrade);
@@ -1277,7 +1296,7 @@ void LLFloaterBuyLandUI::startBuyPreConfirm()
1277 action += mSiteMembershipAction; 1296 action += mSiteMembershipAction;
1278 action += "\n"; 1297 action += "\n";
1279 1298
1280 LLComboBox* levels = LLUICtrlFactory::getComboBoxByName(this, "account_level"); 1299 LLComboBox* levels = getChild<LLComboBox>( "account_level");
1281 if (levels) 1300 if (levels)
1282 { 1301 {
1283 action += " * "; 1302 action += " * ";
diff --git a/linden/indra/newview/llfloatercamera.cpp b/linden/indra/newview/llfloatercamera.cpp
new file mode 100644
index 0000000..b77b556
--- /dev/null
+++ b/linden/indra/newview/llfloatercamera.cpp
@@ -0,0 +1,119 @@
1/**
2 * @file llfloatercamera.cpp
3 * @brief Container for camera control buttons (zoom, pan, orbit)
4 *
5 * $LicenseInfo:firstyear=2001&license=viewergpl$
6 *
7 * Copyright (c) 2001-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 "llfloatercamera.h"
35
36// Library includes
37#include "lluictrlfactory.h"
38
39// Viewer includes
40#include "lljoystickbutton.h"
41#include "llviewercontrol.h"
42
43// Constants
44const F32 CAMERA_BUTTON_DELAY = 0.0f;
45
46//
47// Member functions
48//
49
50LLFloaterCamera::LLFloaterCamera(const LLSD& val)
51: LLFloater("camera floater") // uses "FloaterCameraRect3"
52{
53 setIsChrome(TRUE);
54
55 const BOOL DONT_OPEN = FALSE;
56 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_camera.xml", NULL, DONT_OPEN);
57
58 S32 top = getRect().getHeight();
59 S32 bottom = 0;
60 S32 left = 16;
61
62 const S32 ROTATE_WIDTH = 64;
63 mRotate = new LLJoystickCameraRotate("cam rotate stick",
64 LLRect( left, top, left + ROTATE_WIDTH, bottom ),
65 "cam_rotate_out.tga",
66 "cam_rotate_in.tga" );
67 mRotate->setFollows(FOLLOWS_TOP | FOLLOWS_LEFT);
68 mRotate->setHeldDownDelay(CAMERA_BUTTON_DELAY);
69 mRotate->setToolTip( getString("rotate_tooltip") );
70 mRotate->setSoundFlags(MOUSE_DOWN | MOUSE_UP);
71 addChild(mRotate);
72
73 left += ROTATE_WIDTH;
74
75 const S32 ZOOM_WIDTH = 16;
76 mZoom = new LLJoystickCameraZoom(
77 "zoom",
78 LLRect( left, top, left + ZOOM_WIDTH, bottom ),
79 "cam_zoom_out.tga",
80 "cam_zoom_plus_in.tga",
81 "cam_zoom_minus_in.tga");
82 mZoom->setFollows(FOLLOWS_TOP | FOLLOWS_LEFT);
83 mZoom->setHeldDownDelay(CAMERA_BUTTON_DELAY);
84 mZoom->setToolTip( getString("zoom_tooltip") );
85 mZoom->setSoundFlags(MOUSE_DOWN | MOUSE_UP);
86 addChild(mZoom);
87
88 left += ZOOM_WIDTH;
89
90 const S32 TRACK_WIDTH = 64;
91 mTrack = new LLJoystickCameraTrack("cam track stick",
92 LLRect( left, top, left + TRACK_WIDTH, bottom ),
93 "cam_tracking_out.tga",
94 "cam_tracking_in.tga");
95 mTrack->setFollows(FOLLOWS_TOP | FOLLOWS_LEFT);
96 mTrack->setHeldDownDelay(CAMERA_BUTTON_DELAY);
97 mTrack->setToolTip( getString("move_tooltip") );
98 mTrack->setSoundFlags(MOUSE_DOWN | MOUSE_UP);
99 addChild(mTrack);
100}
101
102// virtual
103void LLFloaterCamera::onOpen()
104{
105 LLFloater::onOpen();
106
107 gSavedSettings.setBOOL("ShowCameraControls", TRUE);
108}
109
110// virtual
111void LLFloaterCamera::onClose(bool app_quitting)
112{
113 LLFloater::onClose(app_quitting);
114
115 if (!app_quitting)
116 {
117 gSavedSettings.setBOOL("ShowCameraControls", FALSE);
118 }
119} \ No newline at end of file
diff --git a/linden/indra/newview/llcameraview.h b/linden/indra/newview/llfloatercamera.h
index ebe3cc6..df90e77 100644
--- a/linden/indra/newview/llcameraview.h
+++ b/linden/indra/newview/llfloatercamera.h
@@ -1,6 +1,6 @@
1/** 1/**
2 * @file llcameraview.h 2 * @file llfloatercamera.h
3 * @brief Container for buttons for walking, turning, flying 3 * @brief Container for camera control buttons (zoom, pan, orbit)
4 * 4 *
5 * $LicenseInfo:firstyear=2001&license=viewergpl$ 5 * $LicenseInfo:firstyear=2001&license=viewergpl$
6 * 6 *
@@ -29,64 +29,32 @@
29 * $/LicenseInfo$ 29 * $/LicenseInfo$
30 */ 30 */
31 31
32// llcameraview.h 32#ifndef LLFLOATERCAMERA_H
33// 33#define LLFLOATERCAMERA_H
34// Copyright 2001-2003, Linden Reserach, Inc.
35//
36 34
37#ifndef LL_LLCAMERAVIEW_H
38#define LL_LLCAMERAVIEW_H
39
40// Library includes
41#include "llfloater.h" 35#include "llfloater.h"
42#include "llstatview.h"
43 36
44class LLJoystickCameraRotate; 37class LLJoystickCameraRotate;
45class LLJoystickCameraZoom; 38class LLJoystickCameraZoom;
46class LLJoystickCameraTrack; 39class LLJoystickCameraTrack;
47 40
48//
49// Classes
50//
51class LLFloaterCamera 41class LLFloaterCamera
52: public LLFloater 42 : public LLFloater,
43 public LLFloaterSingleton<LLFloaterCamera>
53{ 44{
54public: 45 friend class LLUISingleton<LLFloaterCamera, VisibilityPolicy<LLFloater> >;
55 LLFloaterCamera(const std::string& name); 46
56 ~LLFloaterCamera(); 47private:
57 48 LLFloaterCamera(const LLSD& val);
49 ~LLFloaterCamera() {};
50
51 /*virtual*/ void onOpen();
58 /*virtual*/ void onClose(bool app_quitting); 52 /*virtual*/ void onClose(bool app_quitting);
59 53
60 static void show(void*);
61 static void toggle(void*);
62 static BOOL visible(void*);
63
64public: 54public:
65 LLJoystickCameraRotate* mRotate; 55 LLJoystickCameraRotate* mRotate;
66 LLJoystickCameraZoom* mZoom; 56 LLJoystickCameraZoom* mZoom;
67 LLJoystickCameraTrack* mTrack; 57 LLJoystickCameraTrack* mTrack;
68}; 58};
69 59
70class LLFloaterJoystick
71: public LLFloater
72{
73protected:
74 LLFloaterJoystick();
75 ~LLFloaterJoystick();
76
77public:
78 static void show(void*);
79 static LLFloaterJoystick* getInstance();
80 static BOOL visible(void*);
81 virtual void draw();
82
83protected:
84 static LLFloaterJoystick* sInstance;
85 LLStatView* mAxisStats;
86 LLStat* mAxis[8];
87 LLStatBar* mAxisBar[8];
88};
89
90extern LLFloaterCamera *gFloaterCamera;
91
92#endif 60#endif
diff --git a/linden/indra/newview/llfloaterchat.cpp b/linden/indra/newview/llfloaterchat.cpp
index f9063ce..0394cd1 100644
--- a/linden/indra/newview/llfloaterchat.cpp
+++ b/linden/indra/newview/llfloaterchat.cpp
@@ -66,7 +66,7 @@
66#include "llviewermessage.h" 66#include "llviewermessage.h"
67#include "llviewerwindow.h" 67#include "llviewerwindow.h"
68#include "llviewercontrol.h" 68#include "llviewercontrol.h"
69#include "llvieweruictrlfactory.h" 69#include "lluictrlfactory.h"
70#include "llchatbar.h" 70#include "llchatbar.h"
71#include "lllogchat.h" 71#include "lllogchat.h"
72#include "lltexteditor.h" 72#include "lltexteditor.h"
@@ -81,7 +81,6 @@ extern void AddNewChatToLCD(const LLString &newLine);
81// 81//
82const F32 INSTANT_MSG_SIZE = 8.0f; 82const F32 INSTANT_MSG_SIZE = 8.0f;
83const F32 CHAT_MSG_SIZE = 8.0f; 83const F32 CHAT_MSG_SIZE = 8.0f;
84const LLColor4 INSTANT_MSG_COLOR(1, 1, 1, 1);
85const LLColor4 MUTED_MSG_COLOR(0.5f, 0.5f, 0.5f, 1.f); 84const LLColor4 MUTED_MSG_COLOR(0.5f, 0.5f, 0.5f, 1.f);
86const S32 MAX_CHATTER_COUNT = 16; 85const S32 MAX_CHATTER_COUNT = 16;
87 86
@@ -102,7 +101,7 @@ LLFloaterChat::LLFloaterChat(const LLSD& seed)
102 mFactoryMap["active_speakers_panel"] = LLCallbackMap(createSpeakersPanel, NULL); 101 mFactoryMap["active_speakers_panel"] = LLCallbackMap(createSpeakersPanel, NULL);
103 // do not automatically open singleton floaters (as result of getInstance()) 102 // do not automatically open singleton floaters (as result of getInstance())
104 BOOL no_open = FALSE; 103 BOOL no_open = FALSE;
105 gUICtrlFactory->buildFloater(this,"floater_chat_history.xml",&getFactoryMap(),no_open); 104 LLUICtrlFactory::getInstance()->buildFloater(this,"floater_chat_history.xml",&getFactoryMap(),no_open);
106 105
107 childSetCommitCallback("show mutes",onClickToggleShowMute,this); //show mutes 106 childSetCommitCallback("show mutes",onClickToggleShowMute,this); //show mutes
108 childSetVisible("Chat History Editor with mute",FALSE); 107 childSetVisible("Chat History Editor with mute",FALSE);
@@ -140,12 +139,12 @@ void LLFloaterChat::draw()
140 139
141BOOL LLFloaterChat::postBuild() 140BOOL LLFloaterChat::postBuild()
142{ 141{
143 mPanel = (LLPanelActiveSpeakers*)LLUICtrlFactory::getPanelByName(this, "active_speakers_panel"); 142 mPanel = (LLPanelActiveSpeakers*)getChild<LLPanel>("active_speakers_panel");
144 143
145 LLChatBar* chat_barp = getChild<LLChatBar>("chat_panel", TRUE); 144 LLChatBar* chat_barp = getChild<LLChatBar>("chat_panel", TRUE);
146 if (chat_barp) 145 if (chat_barp)
147 { 146 {
148 chat_barp->setGestureCombo(LLUICtrlFactory::getComboBoxByName(this, "Gesture")); 147 chat_barp->setGestureCombo(getChild<LLComboBox>( "Gesture"));
149 } 148 }
150 return TRUE; 149 return TRUE;
151} 150}
@@ -163,7 +162,7 @@ void LLFloaterChat::onClose(bool app_quitting)
163void LLFloaterChat::onVisibilityChange(BOOL new_visibility) 162void LLFloaterChat::onVisibilityChange(BOOL new_visibility)
164{ 163{
165 // Hide the chat overlay when our history is visible. 164 // Hide the chat overlay when our history is visible.
166 gConsole->setVisible( !new_visibility ); 165 updateConsoleVisibility();
167 166
168 // stop chat history tab from flashing when it appears 167 // stop chat history tab from flashing when it appears
169 if (new_visibility) 168 if (new_visibility)
@@ -174,6 +173,21 @@ void LLFloaterChat::onVisibilityChange(BOOL new_visibility)
174 LLFloater::onVisibilityChange(new_visibility); 173 LLFloater::onVisibilityChange(new_visibility);
175} 174}
176 175
176void LLFloaterChat::setMinimized(BOOL minimized)
177{
178 LLFloater::setMinimized(minimized);
179 updateConsoleVisibility();
180}
181
182
183void LLFloaterChat::updateConsoleVisibility()
184{
185 // determine whether we should show console due to not being visible
186 gConsole->setVisible( !isInVisibleChain() // are we not in part of UI being drawn?
187 || isMinimized() // are we minimized?
188 || (getHost() && getHost()->isMinimized() )); // are we hosted in a minimized floater?
189}
190
177void add_timestamped_line(LLViewerTextEditor* edit, const LLString& line, const LLColor4& color) 191void add_timestamped_line(LLViewerTextEditor* edit, const LLString& line, const LLColor4& color)
178{ 192{
179 bool prepend_newline = true; 193 bool prepend_newline = true;
@@ -274,7 +288,7 @@ void LLFloaterChat::onClickMute(void *data)
274{ 288{
275 LLFloaterChat* self = (LLFloaterChat*)data; 289 LLFloaterChat* self = (LLFloaterChat*)data;
276 290
277 LLComboBox* chatter_combo = LLUICtrlFactory::getComboBoxByName(self,"chatter combobox"); 291 LLComboBox* chatter_combo = self->getChild<LLComboBox>("chatter combobox");
278 292
279 const LLString& name = chatter_combo->getSimple(); 293 const LLString& name = chatter_combo->getSimple();
280 LLUUID id = chatter_combo->getCurrentID(); 294 LLUUID id = chatter_combo->getCurrentID();
@@ -283,12 +297,9 @@ void LLFloaterChat::onClickMute(void *data)
283 297
284 LLMute mute(id); 298 LLMute mute(id);
285 mute.setFromDisplayName(name); 299 mute.setFromDisplayName(name);
286 gMuteListp->add(mute); 300 LLMuteList::getInstance()->add(mute);
287 301
288 if (gFloaterMute) 302 LLFloaterMute::showInstance();
289 {
290 LLFloaterMute::showInstance();
291 }
292} 303}
293 304
294//static 305//static
@@ -298,7 +309,7 @@ void LLFloaterChat::onClickToggleShowMute(LLUICtrl* caller, void *data)
298 309
299 310
300 //LLCheckBoxCtrl* 311 //LLCheckBoxCtrl*
301 BOOL show_mute = LLUICtrlFactory::getCheckBoxByName(floater,"show mutes")->get(); 312 BOOL show_mute = floater->getChild<LLCheckBoxCtrl>("show mutes")->get();
302 LLViewerTextEditor* history_editor = floater->getChild<LLViewerTextEditor>("Chat History Editor"); 313 LLViewerTextEditor* history_editor = floater->getChild<LLViewerTextEditor>("Chat History Editor");
303 LLViewerTextEditor* history_editor_with_mute = floater->getChild<LLViewerTextEditor>("Chat History Editor with mute"); 314 LLViewerTextEditor* history_editor_with_mute = floater->getChild<LLViewerTextEditor>("Chat History Editor with mute");
304 315
@@ -351,9 +362,13 @@ void LLFloaterChat::addChat(const LLChat& chat,
351 && !local_agent) 362 && !local_agent)
352 { 363 {
353 F32 size = CHAT_MSG_SIZE; 364 F32 size = CHAT_MSG_SIZE;
354 if(from_instant_message) 365 if (chat.mSourceType == CHAT_SOURCE_SYSTEM)
366 {
367 text_color = gSavedSettings.getColor("SystemChatColor");
368 }
369 else if(from_instant_message)
355 { 370 {
356 text_color = INSTANT_MSG_COLOR; 371 text_color = gSavedSettings.getColor("IMChatColor");
357 size = INSTANT_MSG_SIZE; 372 size = INSTANT_MSG_SIZE;
358 } 373 }
359 gConsole->addLine(chat.mText, size, text_color); 374 gConsole->addLine(chat.mText, size, text_color);
@@ -434,18 +449,31 @@ void LLFloaterChat::loadHistory()
434} 449}
435 450
436//static 451//static
437void LLFloaterChat::chatFromLogFile(LLString line, void* userdata) 452void LLFloaterChat::chatFromLogFile(LLLogChat::ELogLineType type , LLString line, void* userdata)
438{ 453{
439 LLChat chat; 454 switch (type)
440 455 {
441 chat.mText = line; 456 case LLLogChat::LOG_EMPTY:
442 addChatHistory(chat, FALSE); 457 case LLLogChat::LOG_END:
458 // *TODO: nice message from XML file here
459 break;
460 case LLLogChat::LOG_LINE:
461 {
462 LLChat chat;
463 chat.mText = line;
464 addChatHistory(chat, FALSE);
465 }
466 break;
467 default:
468 // nothing
469 break;
470 }
443} 471}
444 472
445//static 473//static
446void* LLFloaterChat::createSpeakersPanel(void* data) 474void* LLFloaterChat::createSpeakersPanel(void* data)
447{ 475{
448 return new LLPanelActiveSpeakers(gLocalSpeakerMgr, TRUE); 476 return new LLPanelActiveSpeakers(LLLocalSpeakerMgr::getInstance(), TRUE);
449} 477}
450 478
451//static 479//static
diff --git a/linden/indra/newview/llfloaterchat.h b/linden/indra/newview/llfloaterchat.h
index 04eb279..72147b8 100644
--- a/linden/indra/newview/llfloaterchat.h
+++ b/linden/indra/newview/llfloaterchat.h
@@ -38,7 +38,7 @@
38#define LL_LLFLOATERCHAT_H 38#define LL_LLFLOATERCHAT_H
39 39
40#include "llfloater.h" 40#include "llfloater.h"
41 41#include "lllogchat.h"
42class LLButton; 42class LLButton;
43class LLChat; 43class LLChat;
44class LLComboBox; 44class LLComboBox;
@@ -48,6 +48,7 @@ class LLMessageSystem;
48class LLUUID; 48class LLUUID;
49class LLCheckBoxCtrl; 49class LLCheckBoxCtrl;
50class LLPanelActiveSpeakers; 50class LLPanelActiveSpeakers;
51class LLLogChat;
51 52
52class LLFloaterChat 53class LLFloaterChat
53 : public LLFloater, public LLUISingleton<LLFloaterChat, LLFloaterChat> 54 : public LLFloater, public LLUISingleton<LLFloaterChat, LLFloaterChat>
@@ -61,6 +62,8 @@ public:
61 virtual BOOL postBuild(); 62 virtual BOOL postBuild();
62 virtual void onClose(bool app_quitting); 63 virtual void onClose(bool app_quitting);
63 virtual void onVisibilityChange(BOOL cur_visibility); 64 virtual void onVisibilityChange(BOOL cur_visibility);
65 virtual void setMinimized(BOOL);
66 void updateConsoleVisibility();
64 67
65 static void setHistoryCursorAndScrollToEnd(); 68 static void setHistoryCursorAndScrollToEnd();
66 69
@@ -74,7 +77,7 @@ public:
74 static void onClickMute(void *data); 77 static void onClickMute(void *data);
75 static void onClickToggleShowMute(LLUICtrl* caller, void *data); 78 static void onClickToggleShowMute(LLUICtrl* caller, void *data);
76 static void onClickToggleActiveSpeakers(void* userdata); 79 static void onClickToggleActiveSpeakers(void* userdata);
77 static void chatFromLogFile(LLString line, void* userdata); 80 static void chatFromLogFile(LLLogChat::ELogLineType type,LLString line, void* userdata);
78 static void loadHistory(); 81 static void loadHistory();
79 static void* createSpeakersPanel(void* data); 82 static void* createSpeakersPanel(void* data);
80 static void* createChatPanel(void* data); 83 static void* createChatPanel(void* data);
diff --git a/linden/indra/newview/llfloaterchatterbox.cpp b/linden/indra/newview/llfloaterchatterbox.cpp
index 88e0c5d..1114635 100644
--- a/linden/indra/newview/llfloaterchatterbox.cpp
+++ b/linden/indra/newview/llfloaterchatterbox.cpp
@@ -35,7 +35,7 @@
35#include "llviewerprecompiledheaders.h" 35#include "llviewerprecompiledheaders.h"
36 36
37#include "llfloaterchatterbox.h" 37#include "llfloaterchatterbox.h"
38#include "llvieweruictrlfactory.h" 38#include "lluictrlfactory.h"
39#include "llfloaterchat.h" 39#include "llfloaterchat.h"
40#include "llfloaterfriends.h" 40#include "llfloaterfriends.h"
41#include "llfloatergroups.h" 41#include "llfloatergroups.h"
@@ -53,7 +53,7 @@ LLFloaterMyFriends::LLFloaterMyFriends(const LLSD& seed)
53 mFactoryMap["groups_panel"] = LLCallbackMap(LLFloaterMyFriends::createGroupsPanel, NULL); 53 mFactoryMap["groups_panel"] = LLCallbackMap(LLFloaterMyFriends::createGroupsPanel, NULL);
54 // do not automatically open singleton floaters (as result of getInstance()) 54 // do not automatically open singleton floaters (as result of getInstance())
55 BOOL no_open = FALSE; 55 BOOL no_open = FALSE;
56 gUICtrlFactory->buildFloater(this, "floater_my_friends.xml", &getFactoryMap(), no_open); 56 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_my_friends.xml", &getFactoryMap(), no_open);
57} 57}
58 58
59LLFloaterMyFriends::~LLFloaterMyFriends() 59LLFloaterMyFriends::~LLFloaterMyFriends()
@@ -62,7 +62,7 @@ LLFloaterMyFriends::~LLFloaterMyFriends()
62 62
63BOOL LLFloaterMyFriends::postBuild() 63BOOL LLFloaterMyFriends::postBuild()
64{ 64{
65 mTabs = LLUICtrlFactory::getTabContainerByName(this, "friends_and_groups"); 65 mTabs = getChild<LLTabContainer>("friends_and_groups");
66 66
67 return TRUE; 67 return TRUE;
68} 68}
@@ -93,7 +93,7 @@ LLFloaterChatterBox::LLFloaterChatterBox(const LLSD& seed) :
93{ 93{
94 mAutoResize = FALSE; 94 mAutoResize = FALSE;
95 95
96 gUICtrlFactory->buildFloater(this, "floater_chatterbox.xml", NULL, FALSE); 96 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_chatterbox.xml", NULL, FALSE);
97 if (gSavedSettings.getBOOL("ContactsTornOff")) 97 if (gSavedSettings.getBOOL("ContactsTornOff"))
98 { 98 {
99 LLFloaterMyFriends* floater_contacts = LLFloaterMyFriends::getInstance(0); 99 LLFloaterMyFriends* floater_contacts = LLFloaterMyFriends::getInstance(0);
@@ -128,33 +128,29 @@ LLFloaterChatterBox::~LLFloaterChatterBox()
128{ 128{
129} 129}
130 130
131BOOL LLFloaterChatterBox::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent) 131BOOL LLFloaterChatterBox::handleKeyHere(KEY key, MASK mask)
132{ 132{
133 if (getEnabled() 133 if (key == 'W' && mask == MASK_CONTROL)
134 && mask == MASK_CONTROL)
135 { 134 {
136 if (key == 'W') 135 LLFloater* floater = getActiveFloater();
136 // is user closeable and is system closeable
137 if (floater && floater->canClose())
137 { 138 {
138 LLFloater* floater = getActiveFloater(); 139 if (floater->isCloseable())
139 // is user closeable and is system closeable
140 if (floater && floater->canClose())
141 { 140 {
142 if (floater->isCloseable()) 141 floater->close();
143 { 142 }
144 floater->close(); 143 else
145 } 144 {
146 else 145 // close chatterbox window if frontmost tab is reserved, non-closeable tab
147 { 146 // such as contacts or near me
148 // close chatterbox window if frontmost tab is reserved, non-closeable tab 147 close();
149 // such as contacts or near me
150 close();
151 }
152 } 148 }
153 return TRUE;
154 } 149 }
150 return TRUE;
155 } 151 }
156 152
157 return LLMultiFloater::handleKeyHere(key, mask, called_from_parent); 153 return LLMultiFloater::handleKeyHere(key, mask);
158} 154}
159 155
160void LLFloaterChatterBox::draw() 156void LLFloaterChatterBox::draw()
@@ -214,6 +210,13 @@ void LLFloaterChatterBox::onClose(bool app_quitting)
214 gSavedSettings.setBOOL("ShowCommunicate", FALSE); 210 gSavedSettings.setBOOL("ShowCommunicate", FALSE);
215} 211}
216 212
213void LLFloaterChatterBox::setMinimized(BOOL minimized)
214{
215 LLFloater::setMinimized(minimized);
216 // HACK: potentially need to toggle console
217 LLFloaterChat::getInstance()->updateConsoleVisibility();
218}
219
217void LLFloaterChatterBox::removeFloater(LLFloater* floaterp) 220void LLFloaterChatterBox::removeFloater(LLFloater* floaterp)
218{ 221{
219 if (floaterp->getName() == "chat floater") 222 if (floaterp->getName() == "chat floater")
@@ -247,7 +250,7 @@ void LLFloaterChatterBox::addFloater(LLFloater* floaterp,
247 { 250 {
248 mTabContainer->unlockTabs(); 251 mTabContainer->unlockTabs();
249 // add chat history as second tab if contact window is present, first tab otherwise 252 // add chat history as second tab if contact window is present, first tab otherwise
250 if (getChildByName("floater_my_friends", TRUE)) 253 if (getChildView("floater_my_friends"))
251 { 254 {
252 // assuming contacts window is first tab, select it 255 // assuming contacts window is first tab, select it
253 mTabContainer->selectFirstTab(); 256 mTabContainer->selectFirstTab();
diff --git a/linden/indra/newview/llfloaterchatterbox.h b/linden/indra/newview/llfloaterchatterbox.h
index 93601ea..ac494d1 100644
--- a/linden/indra/newview/llfloaterchatterbox.h
+++ b/linden/indra/newview/llfloaterchatterbox.h
@@ -47,10 +47,11 @@ public:
47 LLFloaterChatterBox(const LLSD& seed); 47 LLFloaterChatterBox(const LLSD& seed);
48 virtual ~LLFloaterChatterBox(); 48 virtual ~LLFloaterChatterBox();
49 49
50 /*virtual*/ BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); 50 /*virtual*/ BOOL handleKeyHere(KEY key, MASK mask);
51 /*virtual*/ void draw(); 51 /*virtual*/ void draw();
52 /*virtual*/ void onOpen(); 52 /*virtual*/ void onOpen();
53 /*virtual*/ void onClose(bool app_quitting); 53 /*virtual*/ void onClose(bool app_quitting);
54 /*virtual*/ void setMinimized(BOOL minimized);
54 55
55 /*virtual*/ void removeFloater(LLFloater* floaterp); 56 /*virtual*/ void removeFloater(LLFloater* floaterp);
56 /*virtual*/ void addFloater(LLFloater* floaterp, 57 /*virtual*/ void addFloater(LLFloater* floaterp,
diff --git a/linden/indra/newview/llfloaterclassified.cpp b/linden/indra/newview/llfloaterclassified.cpp
index 914b202..b374f43 100644
--- a/linden/indra/newview/llfloaterclassified.cpp
+++ b/linden/indra/newview/llfloaterclassified.cpp
@@ -37,10 +37,10 @@
37// viewer project includes 37// viewer project includes
38#include "llcommandhandler.h" 38#include "llcommandhandler.h"
39#include "llpanelclassified.h" 39#include "llpanelclassified.h"
40#include "llvieweruictrlfactory.h"
41 40
42// linden library includes 41// linden library includes
43#include "lluuid.h" 42#include "lluuid.h"
43#include "lluictrlfactory.h"
44 44
45//----------------------------------------------------------------------------- 45//-----------------------------------------------------------------------------
46// Globals 46// Globals
@@ -82,7 +82,7 @@ LLFloaterClassifiedInfo::LLFloaterClassifiedInfo(const std::string& name, const
82mClassifiedID( id ) 82mClassifiedID( id )
83{ 83{
84 mFactoryMap["classified_details_panel"] = LLCallbackMap(LLFloaterClassifiedInfo::createClassifiedDetail, this); 84 mFactoryMap["classified_details_panel"] = LLCallbackMap(LLFloaterClassifiedInfo::createClassifiedDetail, this);
85 gUICtrlFactory->buildFloater(this, "floater_preview_classified.xml", &getFactoryMap()); 85 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_preview_classified.xml", &getFactoryMap());
86 gClassifiedInfoInstances.addData(id, this); 86 gClassifiedInfoInstances.addData(id, this);
87} 87}
88 88
diff --git a/linden/indra/newview/llfloaterclothing.cpp b/linden/indra/newview/llfloaterclothing.cpp
index 30b5b34..fd54fcf 100644
--- a/linden/indra/newview/llfloaterclothing.cpp
+++ b/linden/indra/newview/llfloaterclothing.cpp
@@ -43,7 +43,7 @@
43#include "llkeyboard.h" 43#include "llkeyboard.h"
44#include "llscrollbar.h" 44#include "llscrollbar.h"
45#include "llscrolllistctrl.h" 45#include "llscrolllistctrl.h"
46#include "llvieweruictrlfactory.h" 46#include "lluictrlfactory.h"
47#include "llviewerinventory.h" 47#include "llviewerinventory.h"
48#include "llvoavatar.h" 48#include "llvoavatar.h"
49#include "llviewercontrol.h" 49#include "llviewercontrol.h"
@@ -74,7 +74,7 @@ LLFloaterClothing::LLFloaterClothing()
74 mSelectedID(), 74 mSelectedID(),
75 mAllowSelection(FALSE) 75 mAllowSelection(FALSE)
76{ 76{
77 gUICtrlFactory->buildFloater(this, "floater_clothing.xml"); 77 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_clothing.xml");
78 78
79 sInstance = this; 79 sInstance = this;
80 80
@@ -87,7 +87,7 @@ LLFloaterClothing::LLFloaterClothing()
87 childSetDoubleClickCallback("clothing_list", onClickWear); 87 childSetDoubleClickCallback("clothing_list", onClickWear);
88 childSetCommitCallback("clothing_list", onCommitList, this); 88 childSetCommitCallback("clothing_list", onCommitList, this);
89 89
90 LLScrollListCtrl* list = gUICtrlFactory->getScrollListByName(this, "clothing_list"); 90 LLScrollListCtrl* list = getChild<LLScrollListCtrl>("clothing_list");
91 if (list) 91 if (list)
92 { 92 {
93 list->addCommentText(LOADING_STRING); 93 list->addCommentText(LOADING_STRING);
@@ -244,8 +244,7 @@ void LLFloaterClothing::buildClothingList()
244{ 244{
245 //llinfos << "buildClothingList" << llendl; 245 //llinfos << "buildClothingList" << llendl;
246 246
247 LLScrollListCtrl* list = gUICtrlFactory->getScrollListByName(this, "clothing_list"); 247 LLScrollListCtrl* list = getChild<LLScrollListCtrl>("clothing_list");
248 if (!list) return;
249 248
250 list->operateOnAll(LLCtrlListInterface::OP_DELETE); 249 list->operateOnAll(LLCtrlListInterface::OP_DELETE);
251 250
@@ -273,12 +272,12 @@ void LLFloaterClothing::buildClothingList()
273 item_is_multi = TRUE; 272 item_is_multi = TRUE;
274 } 273 }
275 274
276 LLUUID image_id = get_item_icon_uuid(item->getType(), 275 LLString icon_name = get_item_icon_name(item->getType(),
277 item->getInventoryType(), 276 item->getInventoryType(),
278 item->getFlags(), item_is_multi); // flags = wearable type 277 item->getFlags(), item_is_multi); // flags = wearable type
279 row["columns"][0]["column"] = "icon"; 278 row["columns"][0]["column"] = "icon";
280 row["columns"][0]["type"] = "icon"; 279 row["columns"][0]["type"] = "icon";
281 row["columns"][0]["value"] = image_id; 280 row["columns"][0]["value"] = icon_name;
282 281
283 LLString text = item->getName(); 282 LLString text = item->getName();
284 LLString style = "NORMAL"; 283 LLString style = "NORMAL";
diff --git a/linden/indra/newview/llfloatercolorpicker.cpp b/linden/indra/newview/llfloatercolorpicker.cpp
index 260db21..1a56597 100644
--- a/linden/indra/newview/llfloatercolorpicker.cpp
+++ b/linden/indra/newview/llfloatercolorpicker.cpp
@@ -47,7 +47,7 @@
47#include "v4coloru.h" 47#include "v4coloru.h"
48#include "llbutton.h" 48#include "llbutton.h"
49#include "llviewercontrol.h" 49#include "llviewercontrol.h"
50#include "llvieweruictrlfactory.h" 50#include "lluictrlfactory.h"
51#include "llviewerwindow.h" 51#include "llviewerwindow.h"
52#include "llgl.h" 52#include "llgl.h"
53#include "llmemory.h" 53#include "llmemory.h"
@@ -138,7 +138,7 @@ LLFloaterColorPicker::
138createUI () 138createUI ()
139{ 139{
140 // build the majority of the gui using the factory builder 140 // build the majority of the gui using the factory builder
141 gUICtrlFactory->buildFloater ( this, "floater_color_picker.xml" ); 141 LLUICtrlFactory::getInstance()->buildFloater ( this, "floater_color_picker.xml" );
142 setVisible ( FALSE ); 142 setVisible ( FALSE );
143 143
144 // create RGB type area (not really RGB but it's got R,G & B in it.,.. 144 // create RGB type area (not really RGB but it's got R,G & B in it.,..
@@ -221,23 +221,23 @@ BOOL
221LLFloaterColorPicker:: 221LLFloaterColorPicker::
222postBuild() 222postBuild()
223{ 223{
224 mCancelBtn = LLViewerUICtrlFactory::getButtonByName( this, "cancel_btn" ); 224 mCancelBtn = getChild<LLButton>( "cancel_btn" );
225 mCancelBtn->setClickedCallback ( onClickCancel ); 225 mCancelBtn->setClickedCallback ( onClickCancel );
226 mCancelBtn->setCallbackUserData ( this ); 226 mCancelBtn->setCallbackUserData ( this );
227 227
228 mSelectBtn = LLViewerUICtrlFactory::getButtonByName( this, "select_btn"); 228 mSelectBtn = getChild<LLButton>( "select_btn");
229 mSelectBtn->setClickedCallback ( onClickSelect ); 229 mSelectBtn->setClickedCallback ( onClickSelect );
230 mSelectBtn->setCallbackUserData ( this ); 230 mSelectBtn->setCallbackUserData ( this );
231 mSelectBtn->setFocus ( TRUE ); 231 mSelectBtn->setFocus ( TRUE );
232 232
233 mPipetteBtn = LLViewerUICtrlFactory::getButtonByName ( this, "color_pipette" ); 233 mPipetteBtn = getChild<LLButton>("color_pipette" );
234 234
235 mPipetteBtn->setImages("eye_button_inactive.tga", "eye_button_active.tga"); 235 mPipetteBtn->setImages("eye_button_inactive.tga", "eye_button_active.tga");
236 236
237 mPipetteBtn->setClickedCallback( onClickPipette ); 237 mPipetteBtn->setClickedCallback( onClickPipette );
238 mPipetteBtn->setCallbackUserData ( this ); 238 mPipetteBtn->setCallbackUserData ( this );
239 239
240 mApplyImmediateCheck = LLViewerUICtrlFactory::getCheckBoxByName( this, "apply_immediate"); 240 mApplyImmediateCheck = getChild<LLCheckBoxCtrl>("apply_immediate");
241 mApplyImmediateCheck->set(gSavedSettings.getBOOL("ApplyColorImmediately")); 241 mApplyImmediateCheck->set(gSavedSettings.getBOOL("ApplyColorImmediately"));
242 mApplyImmediateCheck->setCommitCallback(onImmediateCheck); 242 mApplyImmediateCheck->setCommitCallback(onImmediateCheck);
243 mApplyImmediateCheck->setCallbackUserData(this); 243 mApplyImmediateCheck->setCallbackUserData(this);
@@ -468,18 +468,18 @@ void LLFloaterColorPicker::onClickPipette( void* data )
468{ 468{
469 LLFloaterColorPicker* self = ( LLFloaterColorPicker* )data; 469 LLFloaterColorPicker* self = ( LLFloaterColorPicker* )data;
470 470
471 if ( self && gToolMgr) 471 if ( self)
472 { 472 {
473 BOOL pipette_active = self->mPipetteBtn->getToggleState(); 473 BOOL pipette_active = self->mPipetteBtn->getToggleState();
474 pipette_active = !pipette_active; 474 pipette_active = !pipette_active;
475 if (pipette_active) 475 if (pipette_active)
476 { 476 {
477 gToolPipette->setSelectCallback(onColorSelect, self); 477 LLToolPipette::getInstance()->setSelectCallback(onColorSelect, self);
478 gToolMgr->setTransientTool(gToolPipette); 478 LLToolMgr::getInstance()->setTransientTool(LLToolPipette::getInstance());
479 } 479 }
480 else 480 else
481 { 481 {
482 gToolMgr->clearTransientTool(); 482 LLToolMgr::getInstance()->clearTransientTool();
483 } 483 }
484 } 484 }
485} 485}
@@ -587,8 +587,7 @@ void LLFloaterColorPicker::draw()
587 mContextConeOpacity = lerp(mContextConeOpacity, 0.f, LLCriticalDamp::getInterpolant(CONTEXT_FADE_TIME)); 587 mContextConeOpacity = lerp(mContextConeOpacity, 0.f, LLCriticalDamp::getInterpolant(CONTEXT_FADE_TIME));
588 } 588 }
589 589
590 mPipetteBtn->setEnabled(gToolMgr != NULL); 590 mPipetteBtn->setToggleState(LLToolMgr::getInstance()->getCurrentTool() == LLToolPipette::getInstance());
591 mPipetteBtn->setToggleState(gToolMgr && gToolMgr->getCurrentTool() == gToolPipette);
592 mApplyImmediateCheck->setEnabled(mActive && mCanApplyImmediately); 591 mApplyImmediateCheck->setEnabled(mActive && mCanApplyImmediately);
593 mSelectBtn->setEnabled(mActive); 592 mSelectBtn->setEnabled(mActive);
594 593
@@ -903,9 +902,7 @@ BOOL
903LLFloaterColorPicker:: 902LLFloaterColorPicker::
904handleMouseDown ( S32 x, S32 y, MASK mask ) 903handleMouseDown ( S32 x, S32 y, MASK mask )
905{ 904{
906 BOOL ret = LLFloater::handleMouseDown ( x, y, mask ); 905 // make it the frontmost
907
908 // make it the frontmost
909 gFloaterView->bringToFront(this); 906 gFloaterView->bringToFront(this);
910 907
911 // rect containing RGB area 908 // rect containing RGB area
@@ -999,7 +996,8 @@ handleMouseDown ( S32 x, S32 y, MASK mask )
999 } 996 }
1000 997
1001 // dispatch to base class for the rest of things 998 // dispatch to base class for the rest of things
1002 return ret; 999
1000 return LLFloater::handleMouseDown ( x, y, mask );
1003} 1001}
1004 1002
1005////////////////////////////////////////////////////////////////////////////// 1003//////////////////////////////////////////////////////////////////////////////
@@ -1227,8 +1225,8 @@ void LLFloaterColorPicker::setActive(BOOL active)
1227 1225
1228void LLFloaterColorPicker::stopUsingPipette() 1226void LLFloaterColorPicker::stopUsingPipette()
1229{ 1227{
1230 if (gToolMgr && gToolMgr->getCurrentTool() == gToolPipette) 1228 if (LLToolMgr::getInstance()->getCurrentTool() == LLToolPipette::getInstance())
1231 { 1229 {
1232 gToolMgr->clearTransientTool(); 1230 LLToolMgr::getInstance()->clearTransientTool();
1233 } 1231 }
1234} 1232}
diff --git a/linden/indra/newview/llfloatercustomize.cpp b/linden/indra/newview/llfloatercustomize.cpp
index f4baa9f..535ef52 100644
--- a/linden/indra/newview/llfloatercustomize.cpp
+++ b/linden/indra/newview/llfloatercustomize.cpp
@@ -73,7 +73,7 @@
73#include "llviewermessage.h" 73#include "llviewermessage.h"
74#include "llimagejpeg.h" 74#include "llimagejpeg.h"
75#include "llviewercontrol.h" 75#include "llviewercontrol.h"
76#include "llvieweruictrlfactory.h" 76#include "lluictrlfactory.h"
77 77
78#include "llfilepicker.h" 78#include "llfilepicker.h"
79 79
@@ -141,7 +141,7 @@ public:
141 mCommitCallback( commit_cb ), 141 mCommitCallback( commit_cb ),
142 mCallbackUserData( userdata ) 142 mCallbackUserData( userdata )
143 { 143 {
144 gUICtrlFactory->buildFloater(this, "floater_wearable_save_as.xml"); 144 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_wearable_save_as.xml");
145 145
146 childSetAction("Save", LLWearableSaveAsDialog::onSave, this ); 146 childSetAction("Save", LLWearableSaveAsDialog::onSave, this );
147 childSetAction("Cancel", LLWearableSaveAsDialog::onCancel, this ); 147 childSetAction("Cancel", LLWearableSaveAsDialog::onCancel, this );
@@ -151,7 +151,7 @@ public:
151 virtual void startModal() 151 virtual void startModal()
152 { 152 {
153 LLModalDialog::startModal(); 153 LLModalDialog::startModal();
154 LLLineEditor* edit = LLUICtrlFactory::getLineEditorByName(this, "name ed"); 154 LLLineEditor* edit = getChild<LLLineEditor>("name ed");
155 if (!edit) return; 155 if (!edit) return;
156 edit->setFocus(TRUE); 156 edit->setFocus(TRUE);
157 edit->selectAll(); 157 edit->selectAll();
@@ -209,7 +209,7 @@ public:
209 mCommitCallback( commit_cb ), 209 mCommitCallback( commit_cb ),
210 mCallbackUserData( userdata ) 210 mCallbackUserData( userdata )
211 { 211 {
212 gUICtrlFactory->buildFloater(this, "floater_new_outfit_dialog.xml"); 212 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_new_outfit_dialog.xml");
213 213
214 // Build list of check boxes 214 // Build list of check boxes
215 for( S32 i = 0; i < WT_COUNT; i++ ) 215 for( S32 i = 0; i < WT_COUNT; i++ )
@@ -453,10 +453,10 @@ LLPanelEditWearable::LLPanelEditWearable( EWearableType type )
453BOOL LLPanelEditWearable::postBuild() 453BOOL LLPanelEditWearable::postBuild()
454{ 454{
455 LLAssetType::EType asset_type = LLWearable::typeToAssetType( mType ); 455 LLAssetType::EType asset_type = LLWearable::typeToAssetType( mType );
456 LLUUID icon_id( gViewerArt.getString(asset_type == LLAssetType::AT_CLOTHING ? 456 LLString icon_name = (asset_type == LLAssetType::AT_CLOTHING ?
457 "inv_item_clothing.tga" : 457 "inv_item_clothing.tga" :
458 "inv_item_bodypart.tga" ) ); 458 "inv_item_skin.tga" );
459 childSetValue("icon", icon_id); 459 childSetValue("icon", icon_name);
460 460
461 childSetAction("Create New", LLPanelEditWearable::onBtnCreateNew, this ); 461 childSetAction("Create New", LLPanelEditWearable::onBtnCreateNew, this );
462 462
@@ -518,7 +518,7 @@ void LLPanelEditWearable::setSubpart( ESubpart subpart )
518 for (std::map<ESubpart, LLSubpart*>::iterator iter = mSubpartList.begin(); 518 for (std::map<ESubpart, LLSubpart*>::iterator iter = mSubpartList.begin();
519 iter != mSubpartList.end(); ++iter) 519 iter != mSubpartList.end(); ++iter)
520 { 520 {
521 LLButton* btn = LLUICtrlFactory::getButtonByName(this, iter->second->mButtonName); 521 LLButton* btn = getChild<LLButton>(iter->second->mButtonName);
522 if (btn) 522 if (btn)
523 { 523 {
524 btn->setToggleState( subpart == iter->first ); 524 btn->setToggleState( subpart == iter->first );
@@ -733,7 +733,7 @@ void LLPanelEditWearable::addTextureDropTarget( LLVOAvatar::ETextureIndex te, co
733 const LLUUID& default_image_id, BOOL allow_no_texture ) 733 const LLUUID& default_image_id, BOOL allow_no_texture )
734{ 734{
735 childSetCommitCallback(name, LLPanelEditWearable::onTextureCommit, this); 735 childSetCommitCallback(name, LLPanelEditWearable::onTextureCommit, this);
736 LLTextureCtrl* texture_ctrl = LLViewerUICtrlFactory::getTexturePickerByName(this, name); 736 LLTextureCtrl* texture_ctrl = getChild<LLTextureCtrl>(name);
737 if (texture_ctrl) 737 if (texture_ctrl)
738 { 738 {
739 texture_ctrl->setDefaultImageAssetID(default_image_id); 739 texture_ctrl->setDefaultImageAssetID(default_image_id);
@@ -812,170 +812,167 @@ void LLPanelEditWearable::draw()
812 return; 812 return;
813 } 813 }
814 814
815 if( getVisible() ) 815 if( gFloaterCustomize->isFrontmost() && !gFocusMgr.getKeyboardFocus() )
816 { 816 {
817 if( gFloaterCustomize->isFrontmost() && !gFocusMgr.getKeyboardFocus() ) 817 // Route menu to this class
818 { 818 gEditMenuHandler = this;
819 // Route menu to this class 819 }
820 gEditMenuHandler = this;
821 }
822 820
823 LLWearable* wearable = gAgent.getWearable( mType ); 821 LLWearable* wearable = gAgent.getWearable( mType );
824 BOOL has_wearable = (wearable != NULL ); 822 BOOL has_wearable = (wearable != NULL );
825 BOOL is_dirty = isDirty(); 823 BOOL is_dirty = isDirty();
826 BOOL is_modifiable = FALSE; 824 BOOL is_modifiable = FALSE;
827 BOOL is_copyable = FALSE; 825 BOOL is_copyable = FALSE;
828 BOOL is_complete = FALSE; 826 BOOL is_complete = FALSE;
829 LLViewerInventoryItem* item; 827 LLViewerInventoryItem* item;
830 item = (LLViewerInventoryItem*)gAgent.getWearableInventoryItem(mType); 828 item = (LLViewerInventoryItem*)gAgent.getWearableInventoryItem(mType);
831 if(item) 829 if(item)
832 { 830 {
833 const LLPermissions& perm = item->getPermissions(); 831 const LLPermissions& perm = item->getPermissions();
834 is_modifiable = perm.allowModifyBy(gAgent.getID(), gAgent.getGroupID()); 832 is_modifiable = perm.allowModifyBy(gAgent.getID(), gAgent.getGroupID());
835 is_copyable = perm.allowCopyBy(gAgent.getID(), gAgent.getGroupID()); 833 is_copyable = perm.allowCopyBy(gAgent.getID(), gAgent.getGroupID());
836 is_complete = item->isComplete(); 834 is_complete = item->isComplete();
837 } 835 }
838 836
839 childSetEnabled("Save", is_modifiable && is_complete && has_wearable && is_dirty); 837 childSetEnabled("Save", is_modifiable && is_complete && has_wearable && is_dirty);
840 childSetEnabled("Save As", is_copyable && is_complete && has_wearable); 838 childSetEnabled("Save As", is_copyable && is_complete && has_wearable);
841 childSetEnabled("Revert", has_wearable && is_dirty ); 839 childSetEnabled("Revert", has_wearable && is_dirty );
842 childSetEnabled("Take Off", has_wearable ); 840 childSetEnabled("Take Off", has_wearable );
843 childSetVisible("Take Off", mCanTakeOff ); 841 childSetVisible("Take Off", mCanTakeOff );
844 childSetVisible("Create New", !has_wearable ); 842 childSetVisible("Create New", !has_wearable );
845 843
846 childSetVisible("not worn instructions", !has_wearable ); 844 childSetVisible("not worn instructions", !has_wearable );
847 childSetVisible("no modify instructions", has_wearable && !is_modifiable); 845 childSetVisible("no modify instructions", has_wearable && !is_modifiable);
848 846
849 for (std::map<ESubpart, LLSubpart*>::iterator iter = mSubpartList.begin(); 847 for (std::map<ESubpart, LLSubpart*>::iterator iter = mSubpartList.begin();
850 iter != mSubpartList.end(); ++iter) 848 iter != mSubpartList.end(); ++iter)
849 {
850 if( has_wearable && is_complete && is_modifiable )
851 { 851 {
852 if( has_wearable && is_complete && is_modifiable ) 852 childSetEnabled(iter->second->mButtonName, iter->second->mSex & avatar->getSex() );
853 {
854 childSetEnabled(iter->second->mButtonName, iter->second->mSex & avatar->getSex() );
855 }
856 else
857 {
858 childSetEnabled(iter->second->mButtonName, FALSE );
859 }
860 } 853 }
854 else
855 {
856 childSetEnabled(iter->second->mButtonName, FALSE );
857 }
858 }
861 859
862 childSetVisible("square", !is_modifiable); 860 childSetVisible("square", !is_modifiable);
863 861
864 childSetVisible("title", FALSE); 862 childSetVisible("title", FALSE);
865 childSetVisible("title_no_modify", FALSE); 863 childSetVisible("title_no_modify", FALSE);
866 childSetVisible("title_not_worn", FALSE); 864 childSetVisible("title_not_worn", FALSE);
867 childSetVisible("title_loading", FALSE); 865 childSetVisible("title_loading", FALSE);
868 866
869 childSetVisible("path", FALSE); 867 childSetVisible("path", FALSE);
868
869 if(has_wearable && !is_modifiable)
870 {
871 // *TODO:Translate
872 childSetVisible("title_no_modify", TRUE);
873 childSetTextArg("title_no_modify", "[DESC]", LLString(LLWearable::typeToTypeLabel( mType )));
870 874
871 if(has_wearable && !is_modifiable) 875 for( std::map<LLString, S32>::iterator iter = mTextureList.begin();
876 iter != mTextureList.end(); ++iter )
872 { 877 {
873 // *TODO:Translate 878 childSetVisible(iter->first, FALSE );
874 childSetVisible("title_no_modify", TRUE);
875 childSetTextArg("title_no_modify", "[DESC]", LLString(LLWearable::typeToTypeLabel( mType )));
876
877 for( std::map<LLString, S32>::iterator iter = mTextureList.begin();
878 iter != mTextureList.end(); ++iter )
879 {
880 childSetVisible(iter->first, FALSE );
881 }
882 for( std::map<LLString, S32>::iterator iter = mColorList.begin();
883 iter != mColorList.end(); ++iter )
884 {
885 childSetVisible(iter->first, FALSE );
886 }
887 } 879 }
888 else if(has_wearable && !is_complete) 880 for( std::map<LLString, S32>::iterator iter = mColorList.begin();
881 iter != mColorList.end(); ++iter )
889 { 882 {
890 // *TODO:Translate 883 childSetVisible(iter->first, FALSE );
891 childSetVisible("title_loading", TRUE);
892 childSetTextArg("title_loading", "[DESC]", LLString(LLWearable::typeToTypeLabel( mType )));
893
894 LLString path;
895 const LLUUID& item_id = gAgent.getWearableItem( wearable->getType() );
896 gInventory.appendPath(item_id, path);
897 childSetVisible("path", TRUE);
898 childSetTextArg("path", "[PATH]", path);
899
900 for( std::map<LLString, S32>::iterator iter = mTextureList.begin();
901 iter != mTextureList.end(); ++iter )
902 {
903 childSetVisible(iter->first, FALSE );
904 }
905 for( std::map<LLString, S32>::iterator iter = mColorList.begin();
906 iter != mColorList.end(); ++iter )
907 {
908 childSetVisible(iter->first, FALSE );
909 }
910 } 884 }
911 else if(has_wearable && is_modifiable) 885 }
886 else if(has_wearable && !is_complete)
887 {
888 // *TODO:Translate
889 childSetVisible("title_loading", TRUE);
890 childSetTextArg("title_loading", "[DESC]", LLString(LLWearable::typeToTypeLabel( mType )));
891
892 LLString path;
893 const LLUUID& item_id = gAgent.getWearableItem( wearable->getType() );
894 gInventory.appendPath(item_id, path);
895 childSetVisible("path", TRUE);
896 childSetTextArg("path", "[PATH]", path);
897
898 for( std::map<LLString, S32>::iterator iter = mTextureList.begin();
899 iter != mTextureList.end(); ++iter )
912 { 900 {
913 childSetVisible("title", TRUE); 901 childSetVisible(iter->first, FALSE );
914 childSetTextArg("title", "[DESC]", wearable->getName() ); 902 }
903 for( std::map<LLString, S32>::iterator iter = mColorList.begin();
904 iter != mColorList.end(); ++iter )
905 {
906 childSetVisible(iter->first, FALSE );
907 }
908 }
909 else if(has_wearable && is_modifiable)
910 {
911 childSetVisible("title", TRUE);
912 childSetTextArg("title", "[DESC]", wearable->getName() );
915 913
916 LLString path; 914 LLString path;
917 const LLUUID& item_id = gAgent.getWearableItem( wearable->getType() ); 915 const LLUUID& item_id = gAgent.getWearableItem( wearable->getType() );
918 gInventory.appendPath(item_id, path); 916 gInventory.appendPath(item_id, path);
919 childSetVisible("path", TRUE); 917 childSetVisible("path", TRUE);
920 childSetTextArg("path", "[PATH]", path); 918 childSetTextArg("path", "[PATH]", path);
921 919
922 for( std::map<LLString, S32>::iterator iter = mTextureList.begin(); 920 for( std::map<LLString, S32>::iterator iter = mTextureList.begin();
923 iter != mTextureList.end(); ++iter ) 921 iter != mTextureList.end(); ++iter )
922 {
923 LLString name = iter->first;
924 LLTextureCtrl* texture_ctrl = getChild<LLTextureCtrl>(name);
925 S32 te_index = iter->second;
926 childSetVisible(name, is_copyable && is_modifiable && is_complete );
927 if (texture_ctrl)
924 { 928 {
925 LLString name = iter->first; 929 const LLTextureEntry* te = avatar->getTE(te_index);
926 LLTextureCtrl* texture_ctrl = LLViewerUICtrlFactory::getTexturePickerByName(this, name); 930 if( te && (te->getID() != IMG_DEFAULT_AVATAR) )
927 S32 te_index = iter->second;
928 childSetVisible(name, is_copyable && is_modifiable && is_complete );
929 if (texture_ctrl)
930 { 931 {
931 const LLTextureEntry* te = avatar->getTE(te_index); 932 texture_ctrl->setImageAssetID( te->getID() );
932 if( te && (te->getID() != IMG_DEFAULT_AVATAR) )
933 {
934 texture_ctrl->setImageAssetID( te->getID() );
935 }
936 else
937 {
938 texture_ctrl->setImageAssetID( LLUUID::null );
939 }
940 } 933 }
941 } 934 else
942
943 for( std::map<LLString, S32>::iterator iter = mColorList.begin();
944 iter != mColorList.end(); ++iter )
945 {
946 LLString name = iter->first;
947 S32 te_index = iter->second;
948 childSetVisible(name, is_modifiable && is_complete );
949 childSetEnabled(name, is_modifiable && is_complete );
950 LLColorSwatchCtrl* ctrl = LLViewerUICtrlFactory::getColorSwatchByName(this, name);
951 if (ctrl)
952 { 935 {
953 ctrl->set(avatar->getClothesColor( (LLVOAvatar::ETextureIndex)te_index ) ); 936 texture_ctrl->setImageAssetID( LLUUID::null );
954 } 937 }
955 } 938 }
956 } 939 }
957 else
958 {
959 // *TODO:Translate
960 childSetVisible("title_not_worn", TRUE);
961 childSetTextArg("title_not_worn", "[DESC]", LLString(LLWearable::typeToTypeLabel( mType )));
962 940
963 for( std::map<LLString, S32>::iterator iter = mTextureList.begin(); 941 for( std::map<LLString, S32>::iterator iter = mColorList.begin();
964 iter != mTextureList.end(); ++iter ) 942 iter != mColorList.end(); ++iter )
965 { 943 {
966 childSetVisible(iter->first, FALSE ); 944 LLString name = iter->first;
967 } 945 S32 te_index = iter->second;
968 for( std::map<LLString, S32>::iterator iter = mColorList.begin(); 946 childSetVisible(name, is_modifiable && is_complete );
969 iter != mColorList.end(); ++iter ) 947 childSetEnabled(name, is_modifiable && is_complete );
948 LLColorSwatchCtrl* ctrl = getChild<LLColorSwatchCtrl>(name);
949 if (ctrl)
970 { 950 {
971 childSetVisible(iter->first, FALSE ); 951 ctrl->set(avatar->getClothesColor( (LLVOAvatar::ETextureIndex)te_index ) );
972 } 952 }
973 } 953 }
974 954 }
975 childSetVisible("icon", has_wearable && is_modifiable); 955 else
956 {
957 // *TODO:Translate
958 childSetVisible("title_not_worn", TRUE);
959 childSetTextArg("title_not_worn", "[DESC]", LLString(LLWearable::typeToTypeLabel( mType )));
976 960
977 LLPanel::draw(); 961 for( std::map<LLString, S32>::iterator iter = mTextureList.begin();
962 iter != mTextureList.end(); ++iter )
963 {
964 childSetVisible(iter->first, FALSE );
965 }
966 for( std::map<LLString, S32>::iterator iter = mColorList.begin();
967 iter != mColorList.end(); ++iter )
968 {
969 childSetVisible(iter->first, FALSE );
970 }
978 } 971 }
972
973 childSetVisible("icon", has_wearable && is_modifiable);
974
975 LLPanel::draw();
979} 976}
980 977
981void LLPanelEditWearable::setWearable(LLWearable* wearable, U32 perm_mask, BOOL is_complete) 978void LLPanelEditWearable::setWearable(LLWearable* wearable, U32 perm_mask, BOOL is_complete)
@@ -1153,7 +1150,7 @@ LLScrollingPanelParam::LLScrollingPanelParam( const LLString& name,
1153 mParam(param), 1150 mParam(param),
1154 mAllowModify(allow_modify) 1151 mAllowModify(allow_modify)
1155{ 1152{
1156 gUICtrlFactory->buildPanel(this, "panel_scrolling_param.xml"); 1153 LLUICtrlFactory::getInstance()->buildPanel(this, "panel_scrolling_param.xml");
1157 1154
1158 S32 pos_x = 2 * LLPANEL_BORDER_WIDTH; 1155 S32 pos_x = 2 * LLPANEL_BORDER_WIDTH;
1159 S32 pos_y = 3 * LLPANEL_BORDER_WIDTH + SLIDERCTRL_HEIGHT; 1156 S32 pos_y = 3 * LLPANEL_BORDER_WIDTH + SLIDERCTRL_HEIGHT;
@@ -1177,7 +1174,7 @@ LLScrollingPanelParam::LLScrollingPanelParam( const LLString& name,
1177 childSetValue("min param text", min_name); 1174 childSetValue("min param text", min_name);
1178 childSetValue("max param text", max_name); 1175 childSetValue("max param text", max_name);
1179 1176
1180 LLButton* less = LLUICtrlFactory::getButtonByName(this, "less"); 1177 LLButton* less = getChild<LLButton>("less");
1181 if (less) 1178 if (less)
1182 { 1179 {
1183 less->setMouseDownCallback( LLScrollingPanelParam::onHintMinMouseDown ); 1180 less->setMouseDownCallback( LLScrollingPanelParam::onHintMinMouseDown );
@@ -1186,7 +1183,7 @@ LLScrollingPanelParam::LLScrollingPanelParam( const LLString& name,
1186 less->setHeldDownDelay( PARAM_STEP_TIME_THRESHOLD ); 1183 less->setHeldDownDelay( PARAM_STEP_TIME_THRESHOLD );
1187 } 1184 }
1188 1185
1189 LLButton* more = LLUICtrlFactory::getButtonByName(this, "more"); 1186 LLButton* more = getChild<LLButton>("more");
1190 if (more) 1187 if (more)
1191 { 1188 {
1192 more->setMouseDownCallback( LLScrollingPanelParam::onHintMaxMouseDown ); 1189 more->setMouseDownCallback( LLScrollingPanelParam::onHintMaxMouseDown );
@@ -1244,42 +1241,39 @@ void LLScrollingPanelParam::draw()
1244 childSetVisible("less", mHintMin->getVisible()); 1241 childSetVisible("less", mHintMin->getVisible());
1245 childSetVisible("more", mHintMax->getVisible()); 1242 childSetVisible("more", mHintMax->getVisible());
1246 1243
1247 if( getVisible() ) 1244 // Draw all the children except for the labels
1248 { 1245 childSetVisible( "min param text", FALSE );
1249 // Draw all the children except for the labels 1246 childSetVisible( "max param text", FALSE );
1250 childSetVisible( "min param text", FALSE ); 1247 LLPanel::draw();
1251 childSetVisible( "max param text", FALSE );
1252 LLPanel::draw();
1253 1248
1254 // Draw the hints over the "less" and "more" buttons. 1249 // Draw the hints over the "less" and "more" buttons.
1255 glPushMatrix(); 1250 glPushMatrix();
1256 { 1251 {
1257 const LLRect& r = mHintMin->getRect(); 1252 const LLRect& r = mHintMin->getRect();
1258 F32 left = (F32)(r.mLeft + BTN_BORDER); 1253 F32 left = (F32)(r.mLeft + BTN_BORDER);
1259 F32 bot = (F32)(r.mBottom + BTN_BORDER); 1254 F32 bot = (F32)(r.mBottom + BTN_BORDER);
1260 glTranslatef(left, bot, 0.f); 1255 glTranslatef(left, bot, 0.f);
1261 mHintMin->draw(); 1256 mHintMin->draw();
1262 } 1257 }
1263 glPopMatrix(); 1258 glPopMatrix();
1264 1259
1265 glPushMatrix(); 1260 glPushMatrix();
1266 { 1261 {
1267 const LLRect& r = mHintMax->getRect(); 1262 const LLRect& r = mHintMax->getRect();
1268 F32 left = (F32)(r.mLeft + BTN_BORDER); 1263 F32 left = (F32)(r.mLeft + BTN_BORDER);
1269 F32 bot = (F32)(r.mBottom + BTN_BORDER); 1264 F32 bot = (F32)(r.mBottom + BTN_BORDER);
1270 glTranslatef(left, bot, 0.f); 1265 glTranslatef(left, bot, 0.f);
1271 mHintMax->draw(); 1266 mHintMax->draw();
1272 } 1267 }
1273 glPopMatrix(); 1268 glPopMatrix();
1274 1269
1275 1270
1276 // Draw labels on top of the buttons 1271 // Draw labels on top of the buttons
1277 childSetVisible( "min param text", TRUE ); 1272 childSetVisible( "min param text", TRUE );
1278 drawChild(getChild<LLView>("min param text"), BTN_BORDER, BTN_BORDER); 1273 drawChild(getChild<LLView>("min param text"), BTN_BORDER, BTN_BORDER);
1279 1274
1280 childSetVisible( "max param text", TRUE ); 1275 childSetVisible( "max param text", TRUE );
1281 drawChild(getChild<LLView>("max param text"), BTN_BORDER, BTN_BORDER); 1276 drawChild(getChild<LLView>("max param text"), BTN_BORDER, BTN_BORDER);
1282 }
1283} 1277}
1284 1278
1285// static 1279// static
@@ -1403,7 +1397,7 @@ void LLScrollingPanelParam::onHintHeldDown( LLVisualParamHint* hint )
1403 // Make sure we're not taking the slider out of bounds 1397 // Make sure we're not taking the slider out of bounds
1404 // (this is where some simple UI limits are stored) 1398 // (this is where some simple UI limits are stored)
1405 F32 new_percent = weightToPercent(new_weight); 1399 F32 new_percent = weightToPercent(new_weight);
1406 LLSliderCtrl* slider = LLUICtrlFactory::getSliderByName(this, "param slider"); 1400 LLSliderCtrl* slider = getChild<LLSliderCtrl>("param slider");
1407 if (slider) 1401 if (slider)
1408 { 1402 {
1409 if (slider->getMinValue() < new_percent 1403 if (slider->getMinValue() < new_percent
@@ -1438,7 +1432,7 @@ void LLScrollingPanelParam::onHintMinMouseUp( void* userdata )
1438 // step a fraction in the negative directiona 1432 // step a fraction in the negative directiona
1439 F32 new_weight = current_weight - (range / 10.f); 1433 F32 new_weight = current_weight - (range / 10.f);
1440 F32 new_percent = self->weightToPercent(new_weight); 1434 F32 new_percent = self->weightToPercent(new_weight);
1441 LLSliderCtrl* slider = LLUICtrlFactory::getSliderByName(self, "param slider"); 1435 LLSliderCtrl* slider = self->getChild<LLSliderCtrl>("param slider");
1442 if (slider) 1436 if (slider)
1443 { 1437 {
1444 if (slider->getMinValue() < new_percent 1438 if (slider->getMinValue() < new_percent
@@ -1476,7 +1470,7 @@ void LLScrollingPanelParam::onHintMaxMouseUp( void* userdata )
1476 // step a fraction in the negative direction 1470 // step a fraction in the negative direction
1477 F32 new_weight = current_weight + (range / 10.f); 1471 F32 new_weight = current_weight + (range / 10.f);
1478 F32 new_percent = self->weightToPercent(new_weight); 1472 F32 new_percent = self->weightToPercent(new_weight);
1479 LLSliderCtrl* slider = LLUICtrlFactory::getSliderByName(self, "param slider"); 1473 LLSliderCtrl* slider = self->getChild<LLSliderCtrl>("param slider");
1480 if (slider) 1474 if (slider)
1481 { 1475 {
1482 if (slider->getMinValue() < new_percent 1476 if (slider->getMinValue() < new_percent
@@ -1559,7 +1553,7 @@ LLFloaterCustomize::LLFloaterCustomize()
1559 factory_map["Underpants"] = LLCallbackMap(createWearablePanel, (void*)(new WearablePanelData(this, WT_UNDERPANTS) ) ); 1553 factory_map["Underpants"] = LLCallbackMap(createWearablePanel, (void*)(new WearablePanelData(this, WT_UNDERPANTS) ) );
1560 factory_map["Skirt"] = LLCallbackMap(createWearablePanel, (void*)(new WearablePanelData(this, WT_SKIRT) ) ); 1554 factory_map["Skirt"] = LLCallbackMap(createWearablePanel, (void*)(new WearablePanelData(this, WT_SKIRT) ) );
1561 1555
1562 gUICtrlFactory->buildFloater(this, "floater_customize.xml", &factory_map); 1556 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_customize.xml", &factory_map);
1563 1557
1564} 1558}
1565 1559
@@ -1590,7 +1584,7 @@ BOOL LLFloaterCustomize::postBuild()
1590 // Remove underwear panels for teens 1584 // Remove underwear panels for teens
1591 if (gAgent.isTeen()) 1585 if (gAgent.isTeen())
1592 { 1586 {
1593 LLTabContainer* tab_container = LLUICtrlFactory::getTabContainerByName(this, "customize tab container"); 1587 LLTabContainer* tab_container = getChild<LLTabContainer>("customize tab container");
1594 if (tab_container) 1588 if (tab_container)
1595 { 1589 {
1596 LLPanel* panel; 1590 LLPanel* panel;
@@ -2123,18 +2117,15 @@ void LLFloaterCustomize::draw()
2123 2117
2124 // only do this if we are in the customize avatar mode 2118 // only do this if we are in the customize avatar mode
2125 // and not transitioning into or out of it 2119 // and not transitioning into or out of it
2126 if( getVisible() ) 2120 // *TODO: This is a sort of expensive call, which only needs
2127 { 2121 // to be called when the tabs change or an inventory item
2128 // *TODO: This is a sort of expensive call, which only needs 2122 // arrives. Figure out some way to avoid this if possible.
2129 // to be called when the tabs change or an inventory item 2123 updateInventoryUI();
2130 // arrives. Figure out some way to avoid this if possible.
2131 updateInventoryUI();
2132 2124
2133 LLScrollingPanelParam::sUpdateDelayFrames = 0; 2125 LLScrollingPanelParam::sUpdateDelayFrames = 0;
2134 2126
2135 childSetEnabled("Save All", isDirty() ); 2127 childSetEnabled("Save All", isDirty() );
2136 LLFloater::draw(); 2128 LLFloater::draw();
2137 }
2138} 2129}
2139 2130
2140BOOL LLFloaterCustomize::isDirty() const 2131BOOL LLFloaterCustomize::isDirty() const
@@ -2179,7 +2170,7 @@ const S32 HEADER_HEIGHT = 3 * (LINE_HEIGHT + LLFLOATER_VPAD) + (2 * LLPANEL_BORD
2179void LLFloaterCustomize::initScrollingPanelList() 2170void LLFloaterCustomize::initScrollingPanelList()
2180{ 2171{
2181 LLScrollableContainerView* scroll_container = 2172 LLScrollableContainerView* scroll_container =
2182 LLUICtrlFactory::getScrollableContainerByName(this, "panel_container"); 2173 getChild<LLScrollableContainerView>("panel_container");
2183 // LLScrollingPanelList's do not import correctly 2174 // LLScrollingPanelList's do not import correctly
2184// mScrollingPanelList = LLUICtrlFactory::getScrollingPanelList(this, "panel_list"); 2175// mScrollingPanelList = LLUICtrlFactory::getScrollingPanelList(this, "panel_list");
2185 mScrollingPanelList = new LLScrollingPanelList("panel_list", LLRect()); 2176 mScrollingPanelList = new LLScrollingPanelList("panel_list", LLRect());
diff --git a/linden/indra/newview/llfloaterdaycycle.cpp b/linden/indra/newview/llfloaterdaycycle.cpp
index 29e4c37..f517439 100644
--- a/linden/indra/newview/llfloaterdaycycle.cpp
+++ b/linden/indra/newview/llfloaterdaycycle.cpp
@@ -41,7 +41,7 @@
41#include "llmultisliderctrl.h" 41#include "llmultisliderctrl.h"
42#include "llspinctrl.h" 42#include "llspinctrl.h"
43#include "llcheckboxctrl.h" 43#include "llcheckboxctrl.h"
44#include "llvieweruictrlfactory.h" 44#include "lluictrlfactory.h"
45#include "llviewercamera.h" 45#include "llviewercamera.h"
46#include "llcombobox.h" 46#include "llcombobox.h"
47#include "lllineeditor.h" 47#include "lllineeditor.h"
@@ -64,10 +64,10 @@ const F32 LLFloaterDayCycle::sHoursPerDay = 24.0f;
64 64
65LLFloaterDayCycle::LLFloaterDayCycle() : LLFloater("Day Cycle Floater") 65LLFloaterDayCycle::LLFloaterDayCycle() : LLFloater("Day Cycle Floater")
66{ 66{
67 gUICtrlFactory->buildFloater(this, "floater_day_cycle_options.xml"); 67 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_day_cycle_options.xml");
68 68
69 // add the combo boxes 69 // add the combo boxes
70 LLComboBox* keyCombo = LLUICtrlFactory::getComboBoxByName(this, "WLKeyPresets"); 70 LLComboBox* keyCombo = getChild<LLComboBox>("WLKeyPresets");
71 71
72 if(keyCombo != NULL) 72 if(keyCombo != NULL)
73 { 73 {
@@ -83,8 +83,7 @@ LLFloaterDayCycle::LLFloaterDayCycle() : LLFloater("Day Cycle Floater")
83 } 83 }
84 84
85 // add the time slider 85 // add the time slider
86 LLMultiSliderCtrl* sldr = LLUICtrlFactory::getMultiSliderByName(this, 86 LLMultiSliderCtrl* sldr = getChild<LLMultiSliderCtrl>("WLTimeSlider");
87 "WLTimeSlider");
88 87
89 sldr->addSlider(); 88 sldr->addSlider();
90 89
@@ -148,16 +147,12 @@ void LLFloaterDayCycle::syncMenu()
148// std::map<std::string, LLVector4> & currentParams = LLWLParamManager::instance()->mCurParams.mParamValues; 147// std::map<std::string, LLVector4> & currentParams = LLWLParamManager::instance()->mCurParams.mParamValues;
149 148
150 // set time 149 // set time
151 LLMultiSliderCtrl* sldr = LLUICtrlFactory::getMultiSliderByName(LLFloaterDayCycle::sDayCycle, 150 LLMultiSliderCtrl* sldr = LLFloaterDayCycle::sDayCycle->getChild<LLMultiSliderCtrl>("WLTimeSlider");
152 "WLTimeSlider");
153 sldr->setCurSliderValue((F32)LLWLParamManager::instance()->mAnimator.getDayTime() * sHoursPerDay); 151 sldr->setCurSliderValue((F32)LLWLParamManager::instance()->mAnimator.getDayTime() * sHoursPerDay);
154 152
155 LLSpinCtrl* secSpin = LLUICtrlFactory::getSpinnerByName(sDayCycle, 153 LLSpinCtrl* secSpin = sDayCycle->getChild<LLSpinCtrl>("WLLengthOfDaySec");
156 "WLLengthOfDaySec"); 154 LLSpinCtrl* minSpin = sDayCycle->getChild<LLSpinCtrl>("WLLengthOfDayMin");
157 LLSpinCtrl* minSpin = LLUICtrlFactory::getSpinnerByName(sDayCycle, 155 LLSpinCtrl* hourSpin = sDayCycle->getChild<LLSpinCtrl>("WLLengthOfDayHour");
158 "WLLengthOfDayMin");
159 LLSpinCtrl* hourSpin = LLUICtrlFactory::getSpinnerByName(sDayCycle,
160 "WLLengthOfDayHour");
161 156
162 F32 curRate; 157 F32 curRate;
163 F32 hours, min, sec; 158 F32 hours, min, sec;
@@ -188,8 +183,7 @@ void LLFloaterDayCycle::syncMenu()
188void LLFloaterDayCycle::syncSliderTrack() 183void LLFloaterDayCycle::syncSliderTrack()
189{ 184{
190 // clear the slider 185 // clear the slider
191 LLMultiSliderCtrl* kSldr = LLUICtrlFactory::getMultiSliderByName(sDayCycle, 186 LLMultiSliderCtrl* kSldr = sDayCycle->getChild<LLMultiSliderCtrl>("WLDayCycleKeys");
192 "WLDayCycleKeys");
193 187
194 kSldr->clear(); 188 kSldr->clear();
195 sSliderToKey.clear(); 189 sSliderToKey.clear();
@@ -212,12 +206,12 @@ void LLFloaterDayCycle::syncTrack()
212 } 206 }
213 207
214 LLMultiSliderCtrl* sldr; 208 LLMultiSliderCtrl* sldr;
215 sldr = LLUICtrlFactory::getMultiSliderByName(sDayCycle, 209 sldr = sDayCycle->getChild<LLMultiSliderCtrl>(
216 "WLDayCycleKeys"); 210 "WLDayCycleKeys");
217 llassert_always(sSliderToKey.size() == sldr->getValue().size()); 211 llassert_always(sSliderToKey.size() == sldr->getValue().size());
218 212
219 LLMultiSliderCtrl* tSldr; 213 LLMultiSliderCtrl* tSldr;
220 tSldr = LLUICtrlFactory::getMultiSliderByName(sDayCycle, 214 tSldr = sDayCycle->getChild<LLMultiSliderCtrl>(
221 "WLTimeSlider"); 215 "WLTimeSlider");
222 216
223 // create a new animation track 217 // create a new animation track
@@ -267,7 +261,7 @@ void LLFloaterDayCycle::show()
267 syncSliderTrack(); 261 syncSliderTrack();
268 262
269 // comment in if you want the menu to rebuild each time 263 // comment in if you want the menu to rebuild each time
270 //gUICtrlFactory->buildFloater(dayCycle, "floater_day_cycle_options.xml"); 264 //LLUICtrlFactory::getInstance()->buildFloater(dayCycle, "floater_day_cycle_options.xml");
271 //dayCycle->initCallbacks(); 265 //dayCycle->initCallbacks();
272 266
273 dayCycle->open(); 267 dayCycle->open();
@@ -291,13 +285,11 @@ void LLFloaterDayCycle::onRunAnimSky(void* userData)
291 } 285 }
292 286
293 LLMultiSliderCtrl* sldr; 287 LLMultiSliderCtrl* sldr;
294 sldr = LLUICtrlFactory::getMultiSliderByName(sDayCycle, 288 sldr = sDayCycle->getChild<LLMultiSliderCtrl>("WLDayCycleKeys");
295 "WLDayCycleKeys");
296 llassert_always(sSliderToKey.size() == sldr->getValue().size()); 289 llassert_always(sSliderToKey.size() == sldr->getValue().size());
297 290
298 LLMultiSliderCtrl* tSldr; 291 LLMultiSliderCtrl* tSldr;
299 tSldr = LLUICtrlFactory::getMultiSliderByName(sDayCycle, 292 tSldr = sDayCycle->getChild<LLMultiSliderCtrl>("WLTimeSlider");
300 "WLTimeSlider");
301 293
302 // turn off linden time 294 // turn off linden time
303 LLWLParamManager::instance()->mAnimator.mUseLindenTime = false; 295 LLWLParamManager::instance()->mAnimator.mUseLindenTime = false;
@@ -324,7 +316,7 @@ void LLFloaterDayCycle::onStopAnimSky(void* userData)
324void LLFloaterDayCycle::onUseLindenTime(void* userData) 316void LLFloaterDayCycle::onUseLindenTime(void* userData)
325{ 317{
326 LLFloaterWindLight* wl = LLFloaterWindLight::instance(); 318 LLFloaterWindLight* wl = LLFloaterWindLight::instance();
327 LLComboBox* box = LLUICtrlFactory::getComboBoxByName(wl, "WLPresetsCombo"); 319 LLComboBox* box = wl->getChild<LLComboBox>("WLPresetsCombo");
328 box->selectByValue(""); 320 box->selectByValue("");
329 321
330 LLWLParamManager::instance()->mAnimator.mIsRunning = true; 322 LLWLParamManager::instance()->mAnimator.mIsRunning = true;
@@ -341,7 +333,7 @@ void LLFloaterDayCycle::onLoadDayCycle(void* userData)
341 333
342 // set the param manager's track to the new one 334 // set the param manager's track to the new one
343 LLMultiSliderCtrl* tSldr; 335 LLMultiSliderCtrl* tSldr;
344 tSldr = LLUICtrlFactory::getMultiSliderByName(sDayCycle, 336 tSldr = sDayCycle->getChild<LLMultiSliderCtrl>(
345 "WLTimeSlider"); 337 "WLTimeSlider");
346 LLWLParamManager::instance()->resetAnimator( 338 LLWLParamManager::instance()->resetAnimator(
347 tSldr->getCurSliderValue() / sHoursPerDay, false); 339 tSldr->getCurSliderValue() / sHoursPerDay, false);
@@ -359,7 +351,7 @@ void LLFloaterDayCycle::onSaveDayCycle(void* userData)
359 351
360void LLFloaterDayCycle::onTimeSliderMoved(LLUICtrl* ctrl, void* userData) 352void LLFloaterDayCycle::onTimeSliderMoved(LLUICtrl* ctrl, void* userData)
361{ 353{
362 LLMultiSliderCtrl* sldr = LLUICtrlFactory::getMultiSliderByName(sDayCycle, 354 LLMultiSliderCtrl* sldr = sDayCycle->getChild<LLMultiSliderCtrl>(
363 "WLTimeSlider"); 355 "WLTimeSlider");
364 356
365 /// get the slider value 357 /// get the slider value
@@ -377,14 +369,10 @@ void LLFloaterDayCycle::onTimeSliderMoved(LLUICtrl* ctrl, void* userData)
377 369
378void LLFloaterDayCycle::onKeyTimeMoved(LLUICtrl* ctrl, void* userData) 370void LLFloaterDayCycle::onKeyTimeMoved(LLUICtrl* ctrl, void* userData)
379{ 371{
380 LLComboBox* comboBox = LLUICtrlFactory::getComboBoxByName(sDayCycle, 372 LLComboBox* comboBox = sDayCycle->getChild<LLComboBox>("WLKeyPresets");
381 "WLKeyPresets"); 373 LLMultiSliderCtrl* sldr = sDayCycle->getChild<LLMultiSliderCtrl>("WLDayCycleKeys");
382 LLMultiSliderCtrl* sldr = LLUICtrlFactory::getMultiSliderByName(sDayCycle, 374 LLSpinCtrl* hourSpin = sDayCycle->getChild<LLSpinCtrl>("WLCurKeyHour");
383 "WLDayCycleKeys"); 375 LLSpinCtrl* minSpin = sDayCycle->getChild<LLSpinCtrl>("WLCurKeyMin");
384 LLSpinCtrl* hourSpin = LLUICtrlFactory::getSpinnerByName(sDayCycle,
385 "WLCurKeyHour");
386 LLSpinCtrl* minSpin = LLUICtrlFactory::getSpinnerByName(sDayCycle,
387 "WLCurKeyMin");
388 376
389 if(sldr->getValue().size() == 0) { 377 if(sldr->getValue().size() == 0) {
390 return; 378 return;
@@ -429,11 +417,11 @@ void LLFloaterDayCycle::onKeyTimeChanged(LLUICtrl* ctrl, void* userData)
429 return; 417 return;
430 } 418 }
431 419
432 LLMultiSliderCtrl* sldr = LLUICtrlFactory::getMultiSliderByName(sDayCycle, 420 LLMultiSliderCtrl* sldr = sDayCycle->getChild<LLMultiSliderCtrl>(
433 "WLDayCycleKeys"); 421 "WLDayCycleKeys");
434 LLSpinCtrl* hourSpin = LLUICtrlFactory::getSpinnerByName(sDayCycle, 422 LLSpinCtrl* hourSpin = sDayCycle->getChild<LLSpinCtrl>(
435 "WLCurKeyHour"); 423 "WLCurKeyHour");
436 LLSpinCtrl* minSpin = LLUICtrlFactory::getSpinnerByName(sDayCycle, 424 LLSpinCtrl* minSpin = sDayCycle->getChild<LLSpinCtrl>(
437 "WLCurKeyMin"); 425 "WLCurKeyMin");
438 426
439 F32 hour = hourSpin->get(); 427 F32 hour = hourSpin->get();
@@ -454,9 +442,9 @@ void LLFloaterDayCycle::onKeyTimeChanged(LLUICtrl* ctrl, void* userData)
454void LLFloaterDayCycle::onKeyPresetChanged(LLUICtrl* ctrl, void* userData) 442void LLFloaterDayCycle::onKeyPresetChanged(LLUICtrl* ctrl, void* userData)
455{ 443{
456 // get the time 444 // get the time
457 LLComboBox* comboBox = LLUICtrlFactory::getComboBoxByName(sDayCycle, 445 LLComboBox* comboBox = sDayCycle->getChild<LLComboBox>(
458 "WLKeyPresets"); 446 "WLKeyPresets");
459 LLMultiSliderCtrl* sldr = LLUICtrlFactory::getMultiSliderByName(sDayCycle, 447 LLMultiSliderCtrl* sldr = sDayCycle->getChild<LLMultiSliderCtrl>(
460 "WLDayCycleKeys"); 448 "WLDayCycleKeys");
461 449
462 // do nothing if no sliders 450 // do nothing if no sliders
@@ -481,13 +469,13 @@ void LLFloaterDayCycle::onKeyPresetChanged(LLUICtrl* ctrl, void* userData)
481void LLFloaterDayCycle::onTimeRateChanged(LLUICtrl* ctrl, void* userData) 469void LLFloaterDayCycle::onTimeRateChanged(LLUICtrl* ctrl, void* userData)
482{ 470{
483 // get the time 471 // get the time
484 LLSpinCtrl* secSpin = LLUICtrlFactory::getSpinnerByName(sDayCycle, 472 LLSpinCtrl* secSpin = sDayCycle->getChild<LLSpinCtrl>(
485 "WLLengthOfDaySec"); 473 "WLLengthOfDaySec");
486 474
487 LLSpinCtrl* minSpin = LLUICtrlFactory::getSpinnerByName(sDayCycle, 475 LLSpinCtrl* minSpin = sDayCycle->getChild<LLSpinCtrl>(
488 "WLLengthOfDayMin"); 476 "WLLengthOfDayMin");
489 477
490 LLSpinCtrl* hourSpin = LLUICtrlFactory::getSpinnerByName(sDayCycle, 478 LLSpinCtrl* hourSpin = sDayCycle->getChild<LLSpinCtrl>(
491 "WLLengthOfDayHour"); 479 "WLLengthOfDayHour");
492 480
493 F32 hour; 481 F32 hour;
@@ -508,11 +496,11 @@ void LLFloaterDayCycle::onTimeRateChanged(LLUICtrl* ctrl, void* userData)
508 496
509void LLFloaterDayCycle::onAddKey(void* userData) 497void LLFloaterDayCycle::onAddKey(void* userData)
510{ 498{
511 LLComboBox* comboBox = LLUICtrlFactory::getComboBoxByName(sDayCycle, 499 LLComboBox* comboBox = sDayCycle->getChild<LLComboBox>(
512 "WLKeyPresets"); 500 "WLKeyPresets");
513 LLMultiSliderCtrl* kSldr = LLUICtrlFactory::getMultiSliderByName(sDayCycle, 501 LLMultiSliderCtrl* kSldr = sDayCycle->getChild<LLMultiSliderCtrl>(
514 "WLDayCycleKeys"); 502 "WLDayCycleKeys");
515 LLMultiSliderCtrl* tSldr = LLUICtrlFactory::getMultiSliderByName(sDayCycle, 503 LLMultiSliderCtrl* tSldr = sDayCycle->getChild<LLMultiSliderCtrl>(
516 "WLTimeSlider"); 504 "WLTimeSlider");
517 505
518 llassert_always(sSliderToKey.size() == kSldr->getValue().size()); 506 llassert_always(sSliderToKey.size() == kSldr->getValue().size());
@@ -528,7 +516,7 @@ void LLFloaterDayCycle::onAddKey(void* userData)
528 516
529void LLFloaterDayCycle::addSliderKey(F32 time, const LLString & presetName) 517void LLFloaterDayCycle::addSliderKey(F32 time, const LLString & presetName)
530{ 518{
531 LLMultiSliderCtrl* kSldr = LLUICtrlFactory::getMultiSliderByName(sDayCycle, 519 LLMultiSliderCtrl* kSldr = sDayCycle->getChild<LLMultiSliderCtrl>(
532 "WLDayCycleKeys"); 520 "WLDayCycleKeys");
533 521
534 // make a slider 522 // make a slider
@@ -553,8 +541,7 @@ void LLFloaterDayCycle::addSliderKey(F32 time, const LLString & presetName)
553 541
554void LLFloaterDayCycle::deletePreset(LLString& presetName) 542void LLFloaterDayCycle::deletePreset(LLString& presetName)
555{ 543{
556 LLMultiSliderCtrl* sldr = LLUICtrlFactory::getMultiSliderByName( 544 LLMultiSliderCtrl* sldr = sDayCycle->getChild<LLMultiSliderCtrl>("WLDayCycleKeys");
557 sDayCycle, "WLDayCycleKeys");
558 545
559 /// delete any reference 546 /// delete any reference
560 std::map<LLString, LLWLSkyKey>::iterator curr_preset, next_preset; 547 std::map<LLString, LLWLSkyKey>::iterator curr_preset, next_preset;
@@ -576,10 +563,9 @@ void LLFloaterDayCycle::onDeleteKey(void* userData)
576 return; 563 return;
577 } 564 }
578 565
579 LLComboBox* comboBox = LLUICtrlFactory::getComboBoxByName(sDayCycle, 566 LLComboBox* comboBox = sDayCycle->getChild<LLComboBox>(
580 "WLKeyPresets"); 567 "WLKeyPresets");
581 LLMultiSliderCtrl* sldr = LLUICtrlFactory::getMultiSliderByName( 568 LLMultiSliderCtrl* sldr = sDayCycle->getChild<LLMultiSliderCtrl>("WLDayCycleKeys");
582 sDayCycle, "WLDayCycleKeys");
583 569
584 // delete from map 570 // delete from map
585 const LLString& sldrName = sldr->getCurSlider(); 571 const LLString& sldrName = sldr->getCurSlider();
@@ -596,10 +582,8 @@ void LLFloaterDayCycle::onDeleteKey(void* userData)
596 comboBox->selectByValue(sSliderToKey[name].presetName); 582 comboBox->selectByValue(sSliderToKey[name].presetName);
597 F32 time = sSliderToKey[name].time; 583 F32 time = sSliderToKey[name].time;
598 584
599 LLSpinCtrl* hourSpin = LLUICtrlFactory::getSpinnerByName(sDayCycle, 585 LLSpinCtrl* hourSpin = sDayCycle->getChild<LLSpinCtrl>("WLCurKeyHour");
600 "WLCurKeyHour"); 586 LLSpinCtrl* minSpin = sDayCycle->getChild<LLSpinCtrl>("WLCurKeyMin");
601 LLSpinCtrl* minSpin = LLUICtrlFactory::getSpinnerByName(sDayCycle,
602 "WLCurKeyMin");
603 587
604 // now set the spinners 588 // now set the spinners
605 F32 hour = (F32)((S32)time); 589 F32 hour = (F32)((S32)time);
diff --git a/linden/indra/newview/llfloaterdirectory.cpp b/linden/indra/newview/llfloaterdirectory.cpp
index 7ac491e..42a3bae 100644
--- a/linden/indra/newview/llfloaterdirectory.cpp
+++ b/linden/indra/newview/llfloaterdirectory.cpp
@@ -62,7 +62,7 @@
62#include "llpaneldirland.h" 62#include "llpaneldirland.h"
63#include "llfloateravatarinfo.h" 63#include "llfloateravatarinfo.h"
64#include "lldir.h" 64#include "lldir.h"
65#include "llvieweruictrlfactory.h" 65#include "lluictrlfactory.h"
66 66
67LLFloaterDirectory* LLFloaterDirectory::sInstance = NULL; 67LLFloaterDirectory* LLFloaterDirectory::sInstance = NULL;
68//static 68//static
@@ -112,7 +112,7 @@ LLFloaterDirectory::LLFloaterDirectory(const std::string& name)
112 112
113 factory_map["Panel Avatar"] = LLCallbackMap(createPanelAvatar, this); 113 factory_map["Panel Avatar"] = LLCallbackMap(createPanelAvatar, this);
114 114
115 gUICtrlFactory->buildFloater(this, "floater_directory.xml", &factory_map); 115 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_directory.xml", &factory_map);
116 moveResizeHandlesToFront(); 116 moveResizeHandlesToFront();
117 117
118 if(mPanelAvatarp) 118 if(mPanelAvatarp)
@@ -248,7 +248,7 @@ void* LLFloaterDirectory::createEventDetail(void* userdata)
248{ 248{
249 LLFloaterDirectory *self = (LLFloaterDirectory*)userdata; 249 LLFloaterDirectory *self = (LLFloaterDirectory*)userdata;
250 self->mPanelEventp = new LLPanelEvent(); 250 self->mPanelEventp = new LLPanelEvent();
251 gUICtrlFactory->buildPanel(self->mPanelEventp, "panel_event.xml"); 251 LLUICtrlFactory::getInstance()->buildPanel(self->mPanelEventp, "panel_event.xml");
252 self->mPanelEventp->setVisible(FALSE); 252 self->mPanelEventp->setVisible(FALSE);
253 return self->mPanelEventp; 253 return self->mPanelEventp;
254} 254}
@@ -279,7 +279,7 @@ void* LLFloaterDirectory::createPlaceDetail(void* userdata)
279{ 279{
280 LLFloaterDirectory *self = (LLFloaterDirectory*)userdata; 280 LLFloaterDirectory *self = (LLFloaterDirectory*)userdata;
281 self->mPanelPlacep = new LLPanelPlace(); 281 self->mPanelPlacep = new LLPanelPlace();
282 gUICtrlFactory->buildPanel(self->mPanelPlacep, "panel_place.xml"); 282 LLUICtrlFactory::getInstance()->buildPanel(self->mPanelPlacep, "panel_place.xml");
283 self->mPanelPlacep->setVisible(FALSE); 283 self->mPanelPlacep->setVisible(FALSE);
284 return self->mPanelPlacep; 284 return self->mPanelPlacep;
285} 285}
@@ -289,7 +289,7 @@ void* LLFloaterDirectory::createPlaceDetailSmall(void* userdata)
289{ 289{
290 LLFloaterDirectory *self = (LLFloaterDirectory*)userdata; 290 LLFloaterDirectory *self = (LLFloaterDirectory*)userdata;
291 self->mPanelPlaceSmallp = new LLPanelPlace(); 291 self->mPanelPlaceSmallp = new LLPanelPlace();
292 gUICtrlFactory->buildPanel(self->mPanelPlaceSmallp, "panel_place_small.xml"); 292 LLUICtrlFactory::getInstance()->buildPanel(self->mPanelPlaceSmallp, "panel_place_small.xml");
293 self->mPanelPlaceSmallp->setVisible(FALSE); 293 self->mPanelPlaceSmallp->setVisible(FALSE);
294 return self->mPanelPlaceSmallp; 294 return self->mPanelPlaceSmallp;
295} 295}
@@ -378,7 +378,7 @@ void LLFloaterDirectory::refreshGroup(const LLUUID& group_id)
378 378
379void LLFloaterDirectory::focusCurrentPanel() 379void LLFloaterDirectory::focusCurrentPanel()
380{ 380{
381 LLTabContainer* tabs = LLUICtrlFactory::getTabContainerByName(this, "Directory Tabs"); 381 LLTabContainer* tabs = getChild<LLTabContainer>("Directory Tabs");
382 if (!tabs) return; 382 if (!tabs) return;
383 383
384 LLPanel* panel = tabs->getCurrentPanel(); 384 LLPanel* panel = tabs->getCurrentPanel();
diff --git a/linden/indra/newview/llfloatereditui.cpp b/linden/indra/newview/llfloatereditui.cpp
index b68f696..83c69b5 100644
--- a/linden/indra/newview/llfloatereditui.cpp
+++ b/linden/indra/newview/llfloatereditui.cpp
@@ -273,32 +273,14 @@ void LLFloaterEditUI::refreshCore()
273 mWidthSpin->set(width); 273 mWidthSpin->set(width);
274 mHeightSpin->set(height); 274 mHeightSpin->set(height);
275 275
276 EWidgetType widget_type = view->getWidgetType(); 276 LLButton* buttonp = dynamic_cast<LLButton*>(view);
277 switch (widget_type) 277 if (buttonp)
278 { 278 {
279 default:
280 case WIDGET_TYPE_VIEW:
281 refreshView(view);
282 break;
283 case WIDGET_TYPE_BUTTON:
284 refreshButton(view); 279 refreshButton(view);
285 break; 280 }
286 case WIDGET_TYPE_CHECKBOX: 281 else
287 case WIDGET_TYPE_COLOR_SWATCH: 282 {
288 case WIDGET_TYPE_COMBO_BOX:
289 case WIDGET_TYPE_LINE_EDITOR:
290 case WIDGET_TYPE_SCROLL_LIST:
291 case WIDGET_TYPE_NAME_LIST:
292 case WIDGET_TYPE_SLIDER:
293 case WIDGET_TYPE_VOLUME_SLIDER:
294 case WIDGET_TYPE_SPINNER:
295 case WIDGET_TYPE_TEXT_EDITOR:
296 case WIDGET_TYPE_TEXTURE_PICKER:
297 case WIDGET_TYPE_TEXT_BOX:
298 case WIDGET_TYPE_RADIO_GROUP:
299 case WIDGET_TYPE_ICON:
300 refreshView(view); 283 refreshView(view);
301 break;
302 } 284 }
303} 285}
304 286
@@ -327,7 +309,7 @@ void LLFloaterEditUI::show(void*)
327} 309}
328 310
329// static 311// static
330BOOL LLFloaterEditUI::handleKeyEditUI(KEY key, MASK mask) 312BOOL LLFloaterEditUI::processKeystroke(KEY key, MASK mask)
331{ 313{
332 if (!LLView::sEditingUIView) return FALSE; 314 if (!LLView::sEditingUIView) return FALSE;
333 315
@@ -400,9 +382,9 @@ void LLFloaterEditUI::onCommitLabel(LLUICtrl* ctrl, void* data)
400 382
401 LLLineEditor* line = (LLLineEditor*)ctrl; 383 LLLineEditor* line = (LLLineEditor*)ctrl;
402 const LLString& text = line->getText(); 384 const LLString& text = line->getText();
403 if (view->getWidgetType() == WIDGET_TYPE_BUTTON) 385 LLButton* btn = dynamic_cast<LLButton*>(view);
386 if (btn)
404 { 387 {
405 LLButton* btn = (LLButton*)view;
406 btn->setLabelUnselected(text); 388 btn->setLabelUnselected(text);
407 btn->setLabelSelected(text); 389 btn->setLabelSelected(text);
408 } 390 }
diff --git a/linden/indra/newview/llfloatereditui.h b/linden/indra/newview/llfloatereditui.h
index 9012d23..610824d 100644
--- a/linden/indra/newview/llfloatereditui.h
+++ b/linden/indra/newview/llfloatereditui.h
@@ -53,7 +53,7 @@ public:
53 static void navigateHierarchyButtonPressed(void* data); 53 static void navigateHierarchyButtonPressed(void* data);
54 static void show(void* unused = NULL); 54 static void show(void* unused = NULL);
55 55
56 static BOOL handleKeyEditUI(KEY key, MASK mask); 56 static BOOL processKeystroke(KEY key, MASK mask);
57 57
58 static void onCommitLabel(LLUICtrl* ctrl, void* data); 58 static void onCommitLabel(LLUICtrl* ctrl, void* data);
59 static void onCommitHeight(LLUICtrl* ctrl, void* data); 59 static void onCommitHeight(LLUICtrl* ctrl, void* data);
diff --git a/linden/indra/newview/llfloaterenvsettings.cpp b/linden/indra/newview/llfloaterenvsettings.cpp
index 6a0400c..b16b48d 100644
--- a/linden/indra/newview/llfloaterenvsettings.cpp
+++ b/linden/indra/newview/llfloaterenvsettings.cpp
@@ -35,7 +35,7 @@
35 35
36#include "llfloaterwindlight.h" 36#include "llfloaterwindlight.h"
37#include "llfloaterwater.h" 37#include "llfloaterwater.h"
38#include "llvieweruictrlfactory.h" 38#include "lluictrlfactory.h"
39#include "llsliderctrl.h" 39#include "llsliderctrl.h"
40#include "llcombobox.h" 40#include "llcombobox.h"
41#include "llcolorswatch.h" 41#include "llcolorswatch.h"
@@ -55,7 +55,7 @@ LLFloaterEnvSettings* LLFloaterEnvSettings::sEnvSettings = NULL;
55 55
56LLFloaterEnvSettings::LLFloaterEnvSettings() : LLFloater("Environment Settings Floater") 56LLFloaterEnvSettings::LLFloaterEnvSettings() : LLFloater("Environment Settings Floater")
57{ 57{
58 gUICtrlFactory->buildFloater(this, "floater_env_settings.xml"); 58 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_env_settings.xml");
59 59
60 // load it up 60 // load it up
61 initCallbacks(); 61 initCallbacks();
@@ -106,24 +106,14 @@ void LLFloaterEnvSettings::initCallbacks(void)
106void LLFloaterEnvSettings::syncMenu() 106void LLFloaterEnvSettings::syncMenu()
107{ 107{
108 LLSliderCtrl* sldr; 108 LLSliderCtrl* sldr;
109 sldr = LLUICtrlFactory::getSliderByName(sEnvSettings, 109 sldr = sEnvSettings->getChild<LLSliderCtrl>("EnvTimeSlider");
110 "EnvTimeSlider");
111 if(NULL == sldr)
112 {
113 return;
114 }
115 110
116 // sync the clock 111 // sync the clock
117 F32 val = (F32)LLWLParamManager::instance()->mAnimator.getDayTime(); 112 F32 val = (F32)LLWLParamManager::instance()->mAnimator.getDayTime();
118 LLString timeStr = timeToString(val); 113 LLString timeStr = timeToString(val);
119 114
120 LLTextBox* textBox; 115 LLTextBox* textBox;
121 textBox = LLUICtrlFactory::getTextBoxByName(sEnvSettings, 116 textBox = sEnvSettings->getChild<LLTextBox>("EnvTimeText");
122 "EnvTimeText");
123 if(NULL == textBox)
124 {
125 return;
126 }
127 117
128 textBox->setValue(timeStr); 118 textBox->setValue(timeStr);
129 119
@@ -204,7 +194,7 @@ void LLFloaterEnvSettings::show()
204 envSettings->syncMenu(); 194 envSettings->syncMenu();
205 195
206 // comment in if you want the menu to rebuild each time 196 // comment in if you want the menu to rebuild each time
207 //gUICtrlFactory->buildFloater(envSettings, "floater_env_settings.xml"); 197 //LLUICtrlFactory::getInstance()->buildFloater(envSettings, "floater_env_settings.xml");
208 //envSettings->initCallbacks(); 198 //envSettings->initCallbacks();
209 199
210 envSettings->open(); 200 envSettings->open();
@@ -232,8 +222,7 @@ void LLFloaterEnvSettings::onClose(bool app_quitting)
232void LLFloaterEnvSettings::onChangeDayTime(LLUICtrl* ctrl, void* userData) 222void LLFloaterEnvSettings::onChangeDayTime(LLUICtrl* ctrl, void* userData)
233{ 223{
234 LLSliderCtrl* sldr; 224 LLSliderCtrl* sldr;
235 sldr = LLUICtrlFactory::getSliderByName(sEnvSettings, 225 sldr = sEnvSettings->getChild<LLSliderCtrl>("EnvTimeSlider");
236 "EnvTimeSlider");
237 226
238 // deactivate animator 227 // deactivate animator
239 LLWLParamManager::instance()->mAnimator.mIsRunning = false; 228 LLWLParamManager::instance()->mAnimator.mIsRunning = false;
@@ -253,8 +242,7 @@ void LLFloaterEnvSettings::onChangeDayTime(LLUICtrl* ctrl, void* userData)
253void LLFloaterEnvSettings::onChangeCloudCoverage(LLUICtrl* ctrl, void* userData) 242void LLFloaterEnvSettings::onChangeCloudCoverage(LLUICtrl* ctrl, void* userData)
254{ 243{
255 LLSliderCtrl* sldr; 244 LLSliderCtrl* sldr;
256 sldr = LLUICtrlFactory::getSliderByName(sEnvSettings, 245 sldr = sEnvSettings->getChild<LLSliderCtrl>("EnvCloudSlider");
257 "EnvCloudSlider");
258 246
259 // deactivate animator 247 // deactivate animator
260 //LLWLParamManager::instance()->mAnimator.mIsRunning = false; 248 //LLWLParamManager::instance()->mAnimator.mIsRunning = false;
@@ -267,10 +255,9 @@ void LLFloaterEnvSettings::onChangeCloudCoverage(LLUICtrl* ctrl, void* userData)
267void LLFloaterEnvSettings::onChangeWaterFogDensity(LLUICtrl* ctrl, void* userData) 255void LLFloaterEnvSettings::onChangeWaterFogDensity(LLUICtrl* ctrl, void* userData)
268{ 256{
269 LLSliderCtrl* sldr; 257 LLSliderCtrl* sldr;
270 sldr = LLUICtrlFactory::getSliderByName(sEnvSettings, 258 sldr = sEnvSettings->getChild<LLSliderCtrl>("EnvWaterFogSlider");
271 "EnvWaterFogSlider");
272 259
273 if(NULL == sldr || NULL == userData) 260 if(NULL == userData)
274 { 261 {
275 return; 262 return;
276 } 263 }
@@ -313,7 +300,7 @@ void LLFloaterEnvSettings::onUseEstateTime(void* userData)
313 { 300 {
314 // select the blank value in 301 // select the blank value in
315 LLFloaterWindLight* wl = LLFloaterWindLight::instance(); 302 LLFloaterWindLight* wl = LLFloaterWindLight::instance();
316 LLComboBox* box = LLUICtrlFactory::getComboBoxByName(wl, "WLPresetsCombo"); 303 LLComboBox* box = wl->getChild<LLComboBox>("WLPresetsCombo");
317 box->selectByValue(""); 304 box->selectByValue("");
318 } 305 }
319 306
diff --git a/linden/indra/newview/llfloaterevent.cpp b/linden/indra/newview/llfloaterevent.cpp
index 71767c6..778a3d5 100644
--- a/linden/indra/newview/llfloaterevent.cpp
+++ b/linden/indra/newview/llfloaterevent.cpp
@@ -37,10 +37,10 @@
37// viewer project includes 37// viewer project includes
38#include "llcommandhandler.h" 38#include "llcommandhandler.h"
39#include "llpanelevent.h" 39#include "llpanelevent.h"
40#include "llvieweruictrlfactory.h"
41 40
42// linden library includes 41// linden library includes
43#include "lluuid.h" 42#include "lluuid.h"
43#include "lluictrlfactory.h"
44 44
45//////////////////////////////////////////////////////////////////////////// 45////////////////////////////////////////////////////////////////////////////
46// LLFloaterEventInfo 46// LLFloaterEventInfo
@@ -79,7 +79,7 @@ LLFloaterEventInfo::LLFloaterEventInfo(const std::string& name, const U32 event_
79{ 79{
80 80
81 mFactoryMap["event_details_panel"] = LLCallbackMap(LLFloaterEventInfo::createEventDetail, this); 81 mFactoryMap["event_details_panel"] = LLCallbackMap(LLFloaterEventInfo::createEventDetail, this);
82 gUICtrlFactory->buildFloater(this, "floater_preview_event.xml", &getFactoryMap()); 82 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_preview_event.xml", &getFactoryMap());
83 gEventInfoInstances.addData(event_id, this); 83 gEventInfoInstances.addData(event_id, this);
84} 84}
85 85
@@ -100,7 +100,7 @@ void* LLFloaterEventInfo::createEventDetail(void* userdata)
100{ 100{
101 LLFloaterEventInfo *self = (LLFloaterEventInfo*)userdata; 101 LLFloaterEventInfo *self = (LLFloaterEventInfo*)userdata;
102 self->mPanelEventp = new LLPanelEvent(); 102 self->mPanelEventp = new LLPanelEvent();
103 gUICtrlFactory->buildPanel(self->mPanelEventp, "panel_event.xml"); 103 LLUICtrlFactory::getInstance()->buildPanel(self->mPanelEventp, "panel_event.xml");
104 104
105 return self->mPanelEventp; 105 return self->mPanelEventp;
106} 106}
diff --git a/linden/indra/newview/llfloaterfriends.cpp b/linden/indra/newview/llfloaterfriends.cpp
index 3d2e60a..97b7131 100644
--- a/linden/indra/newview/llfloaterfriends.cpp
+++ b/linden/indra/newview/llfloaterfriends.cpp
@@ -51,7 +51,7 @@
51#include "llnotify.h" 51#include "llnotify.h"
52#include "llresmgr.h" 52#include "llresmgr.h"
53#include "llimview.h" 53#include "llimview.h"
54#include "llvieweruictrlfactory.h" 54#include "lluictrlfactory.h"
55#include "llmenucommands.h" 55#include "llmenucommands.h"
56#include "llviewercontrol.h" 56#include "llviewercontrol.h"
57#include "llviewermessage.h" 57#include "llviewermessage.h"
@@ -178,7 +178,7 @@ void LLPanelFriends::updateFriends(U32 changed_mask)
178// virtual 178// virtual
179BOOL LLPanelFriends::postBuild() 179BOOL LLPanelFriends::postBuild()
180{ 180{
181 mFriendsList = LLUICtrlFactory::getScrollListByName(this, "friend_list"); 181 mFriendsList = getChild<LLScrollListCtrl>("friend_list");
182 mFriendsList->setMaxSelectable(MAX_FRIEND_SELECT); 182 mFriendsList->setMaxSelectable(MAX_FRIEND_SELECT);
183 mFriendsList->setMaximumSelectCallback(onMaximumSelect); 183 mFriendsList->setMaximumSelectCallback(onMaximumSelect);
184 mFriendsList->setCommitOnSelectionChange(TRUE); 184 mFriendsList->setCommitOnSelectionChange(TRUE);
@@ -201,7 +201,7 @@ BOOL LLPanelFriends::postBuild()
201 201
202 // primary sort = online status, secondary sort = name 202 // primary sort = online status, secondary sort = name
203 mFriendsList->sortByColumn("friend_name", TRUE); 203 mFriendsList->sortByColumn("friend_name", TRUE);
204 mFriendsList->sortByColumn("icon_online_status", TRUE); 204 mFriendsList->sortByColumn("icon_online_status", FALSE);
205 205
206 return TRUE; 206 return TRUE;
207} 207}
@@ -219,37 +219,46 @@ BOOL LLPanelFriends::addFriend(const LLUUID& agent_id)
219 219
220 LLSD element; 220 LLSD element;
221 element["id"] = agent_id; 221 element["id"] = agent_id;
222 element["columns"][LIST_FRIEND_NAME]["column"] = "friend_name"; 222 LLSD& friend_column = element["columns"][LIST_FRIEND_NAME];
223 element["columns"][LIST_FRIEND_NAME]["value"] = fullname; 223 friend_column["column"] = "friend_name";
224 element["columns"][LIST_FRIEND_NAME]["font"] = "SANSSERIF"; 224 friend_column["value"] = fullname;
225 element["columns"][LIST_FRIEND_NAME]["font-style"] = "NORMAL"; 225 friend_column["font"] = "SANSSERIF";
226 element["columns"][LIST_ONLINE_STATUS]["column"] = "icon_online_status"; 226 friend_column["font-style"] = "NORMAL";
227 element["columns"][LIST_ONLINE_STATUS]["type"] = "icon"; 227
228 LLSD& online_status_column = element["columns"][LIST_ONLINE_STATUS];
229 online_status_column["column"] = "icon_online_status";
230 online_status_column["type"] = "icon";
231
228 if (online) 232 if (online)
229 { 233 {
230 element["columns"][LIST_FRIEND_NAME]["font-style"] = "BOLD"; 234 friend_column["font-style"] = "BOLD";
231 element["columns"][LIST_ONLINE_STATUS]["value"] = gViewerArt.getString("icon_avatar_online.tga"); 235 online_status_column["value"] = "icon_avatar_online.tga";
232 } 236 }
233 237
234 element["columns"][LIST_VISIBLE_ONLINE]["column"] = "icon_visible_online"; 238 LLSD& online_column = element["columns"][LIST_VISIBLE_ONLINE];
235 element["columns"][LIST_VISIBLE_ONLINE]["type"] = "checkbox"; 239 online_column["column"] = "icon_visible_online";
236 element["columns"][LIST_VISIBLE_ONLINE]["value"] = relationInfo->isRightGrantedTo(LLRelationship::GRANT_ONLINE_STATUS); 240 online_column["type"] = "checkbox";
241 online_column["value"] = relationInfo->isRightGrantedTo(LLRelationship::GRANT_ONLINE_STATUS);
237 242
238 element["columns"][LIST_VISIBLE_MAP]["column"] = "icon_visible_map"; 243 LLSD& visible_map_column = element["columns"][LIST_VISIBLE_MAP];
239 element["columns"][LIST_VISIBLE_MAP]["type"] = "checkbox"; 244 visible_map_column["column"] = "icon_visible_map";
240 element["columns"][LIST_VISIBLE_MAP]["value"] = relationInfo->isRightGrantedTo(LLRelationship::GRANT_MAP_LOCATION); 245 visible_map_column["type"] = "checkbox";
246 visible_map_column["value"] = relationInfo->isRightGrantedTo(LLRelationship::GRANT_MAP_LOCATION);
241 247
242 element["columns"][LIST_EDIT_MINE]["column"] = "icon_edit_mine"; 248 LLSD& edit_my_object_column = element["columns"][LIST_EDIT_MINE];
243 element["columns"][LIST_EDIT_MINE]["type"] = "checkbox"; 249 edit_my_object_column["column"] = "icon_edit_mine";
244 element["columns"][LIST_EDIT_MINE]["value"] = relationInfo->isRightGrantedTo(LLRelationship::GRANT_MODIFY_OBJECTS); 250 edit_my_object_column["type"] = "checkbox";
251 edit_my_object_column["value"] = relationInfo->isRightGrantedTo(LLRelationship::GRANT_MODIFY_OBJECTS);
245 252
246 element["columns"][LIST_EDIT_THEIRS]["column"] = "icon_edit_theirs"; 253 LLSD& edit_their_object_column = element["columns"][LIST_EDIT_THEIRS];
247 element["columns"][LIST_EDIT_THEIRS]["type"] = "checkbox"; 254 edit_their_object_column["column"] = "icon_edit_theirs";
248 element["columns"][LIST_EDIT_THEIRS]["enabled"] = ""; 255 edit_their_object_column["type"] = "checkbox";
249 element["columns"][LIST_EDIT_THEIRS]["value"] = relationInfo->isRightGrantedFrom(LLRelationship::GRANT_MODIFY_OBJECTS); 256 edit_their_object_column["enabled"] = "";
257 edit_their_object_column["value"] = relationInfo->isRightGrantedFrom(LLRelationship::GRANT_MODIFY_OBJECTS);
250 258
251 element["columns"][LIST_FRIEND_UPDATE_GEN]["column"] = "friend_last_update_generation"; 259 LLSD& update_gen_column = element["columns"][LIST_FRIEND_UPDATE_GEN];
252 element["columns"][LIST_FRIEND_UPDATE_GEN]["value"] = have_name ? relationInfo->getChangeSerialNum() : -1; 260 update_gen_column["column"] = "friend_last_update_generation";
261 update_gen_column["value"] = have_name ? relationInfo->getChangeSerialNum() : -1;
253 262
254 mFriendsList->addElement(element, ADD_BOTTOM); 263 mFriendsList->addElement(element, ADD_BOTTOM);
255 return have_name; 264 return have_name;
@@ -265,7 +274,7 @@ BOOL LLPanelFriends::updateFriendItem(const LLUUID& agent_id, const LLRelationsh
265 std::string fullname; 274 std::string fullname;
266 BOOL have_name = gCacheName->getFullName(agent_id, fullname); 275 BOOL have_name = gCacheName->getFullName(agent_id, fullname);
267 276
268 itemp->getColumn(LIST_ONLINE_STATUS)->setValue(info->isOnline() ? gViewerArt.getString("icon_avatar_online.tga") : LLString()); 277 itemp->getColumn(LIST_ONLINE_STATUS)->setValue(info->isOnline() ? "icon_avatar_online.tga" : LLString::null);
269 itemp->getColumn(LIST_FRIEND_NAME)->setValue(fullname); 278 itemp->getColumn(LIST_FRIEND_NAME)->setValue(fullname);
270 // render name of online friends in bold text 279 // render name of online friends in bold text
271 ((LLScrollListText*)itemp->getColumn(LIST_FRIEND_NAME))->setFontStyle(info->isOnline() ? LLFontGL::BOLD : LLFontGL::NORMAL); 280 ((LLScrollListText*)itemp->getColumn(LIST_FRIEND_NAME))->setFontStyle(info->isOnline() ? LLFontGL::BOLD : LLFontGL::NORMAL);
@@ -292,7 +301,7 @@ void LLPanelFriends::refreshRightsChangeList()
292 bool can_offer_teleport = num_selected >= 1; 301 bool can_offer_teleport = num_selected >= 1;
293 bool selected_friends_online = true; 302 bool selected_friends_online = true;
294 303
295 LLTextBox* processing_label = LLUICtrlFactory::getTextBoxByName(this, "process_rights_label"); 304 LLTextBox* processing_label = getChild<LLTextBox>("process_rights_label");
296 305
297 if(!mAllowRightsChange) 306 if(!mAllowRightsChange)
298 { 307 {
diff --git a/linden/indra/newview/llfloatergesture.cpp b/linden/indra/newview/llfloatergesture.cpp
index addcf1d..e62a589 100644
--- a/linden/indra/newview/llfloatergesture.cpp
+++ b/linden/indra/newview/llfloatergesture.cpp
@@ -52,7 +52,7 @@
52#include "llscrollcontainer.h" 52#include "llscrollcontainer.h"
53#include "llscrolllistctrl.h" 53#include "llscrolllistctrl.h"
54#include "lltextbox.h" 54#include "lltextbox.h"
55#include "llvieweruictrlfactory.h" 55#include "lluictrlfactory.h"
56#include "llviewergesture.h" 56#include "llviewergesture.h"
57#include "llviewerimagelist.h" 57#include "llviewerimagelist.h"
58#include "llviewerinventory.h" 58#include "llviewerinventory.h"
@@ -99,7 +99,7 @@ LLFloaterGesture::~LLFloaterGesture()
99 99
100 // Custom saving rectangle, since load must be done 100 // Custom saving rectangle, since load must be done
101 // after postBuild. 101 // after postBuild.
102 gSavedSettings.setRect("FloaterGestureRect", getRect()); 102 gSavedSettings.setRect("FloaterGestureRect2", getRect());
103} 103}
104 104
105// virtual 105// virtual
@@ -144,10 +144,10 @@ void LLFloaterGesture::show()
144 LLFloaterGesture *self = new LLFloaterGesture(); 144 LLFloaterGesture *self = new LLFloaterGesture();
145 145
146 // Builds and adds to gFloaterView 146 // Builds and adds to gFloaterView
147 gUICtrlFactory->buildFloater(self, "floater_gesture.xml"); 147 LLUICtrlFactory::getInstance()->buildFloater(self, "floater_gesture.xml");
148 148
149 // Fix up rectangle 149 // Fix up rectangle
150 LLRect rect = gSavedSettings.getRect("FloaterGestureRect"); 150 LLRect rect = gSavedSettings.getRect("FloaterGestureRect2");
151 self->reshape(rect.getWidth(), rect.getHeight()); 151 self->reshape(rect.getWidth(), rect.getHeight());
152 self->setRect(rect); 152 self->setRect(rect);
153 153
@@ -156,7 +156,12 @@ void LLFloaterGesture::show()
156 self->childSetFocus("gesture_list"); 156 self->childSetFocus("gesture_list");
157 157
158 LLCtrlListInterface *list = self->childGetListInterface("gesture_list"); 158 LLCtrlListInterface *list = self->childGetListInterface("gesture_list");
159 if (list) list->selectFirstItem(); 159 if (list)
160 {
161 const BOOL ascending = TRUE;
162 list->sortByColumn("name", ascending);
163 list->selectFirstItem();
164 }
160 165
161 self->mSelectedID = LLUUID::null; 166 self->mSelectedID = LLUUID::null;
162 167
diff --git a/linden/indra/newview/llfloatergodtools.cpp b/linden/indra/newview/llfloatergodtools.cpp
index bdfa09c..3965c8b 100644
--- a/linden/indra/newview/llfloatergodtools.cpp
+++ b/linden/indra/newview/llfloatergodtools.cpp
@@ -71,7 +71,7 @@
71#include "llvlcomposition.h" 71#include "llvlcomposition.h"
72#include "llsurface.h" 72#include "llsurface.h"
73#include "llviewercontrol.h" 73#include "llviewercontrol.h"
74#include "llvieweruictrlfactory.h" 74#include "lluictrlfactory.h"
75 75
76#include "lltransfertargetfile.h" 76#include "lltransfertargetfile.h"
77#include "lltransfersourcefile.h" 77#include "lltransfersourcefile.h"
@@ -124,7 +124,7 @@ LLFloaterGodTools::LLFloaterGodTools()
124 factory_map["region"] = LLCallbackMap(createPanelRegion, this); 124 factory_map["region"] = LLCallbackMap(createPanelRegion, this);
125 factory_map["objects"] = LLCallbackMap(createPanelObjects, this); 125 factory_map["objects"] = LLCallbackMap(createPanelObjects, this);
126 factory_map["request"] = LLCallbackMap(createPanelRequest, this); 126 factory_map["request"] = LLCallbackMap(createPanelRequest, this);
127 gUICtrlFactory->buildFloater(this, "floater_god_tools.xml", &factory_map); 127 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_god_tools.xml", &factory_map);
128 128
129 childSetTabChangeCallback("GodTools Tabs", "grid", onTabChanged, this); 129 childSetTabChangeCallback("GodTools Tabs", "grid", onTabChanged, this);
130 childSetTabChangeCallback("GodTools Tabs", "region", onTabChanged, this); 130 childSetTabChangeCallback("GodTools Tabs", "region", onTabChanged, this);
@@ -853,18 +853,14 @@ void LLPanelRegionTools::onSelectRegion(void* userdata)
853{ 853{
854 llinfos << "LLPanelRegionTools::onSelectRegion" << llendl; 854 llinfos << "LLPanelRegionTools::onSelectRegion" << llendl;
855 855
856 if (!gWorldp) 856 LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromPosGlobal(gAgent.getPositionGlobal());
857 {
858 return;
859 }
860 LLViewerRegion *regionp = gWorldp->getRegionFromPosGlobal(gAgent.getPositionGlobal());
861 if (!regionp) 857 if (!regionp)
862 { 858 {
863 return; 859 return;
864 } 860 }
865 861
866 LLVector3d north_east(REGION_WIDTH_METERS, REGION_WIDTH_METERS, 0); 862 LLVector3d north_east(REGION_WIDTH_METERS, REGION_WIDTH_METERS, 0);
867 gParcelMgr->selectLand(regionp->getOriginGlobal(), 863 LLViewerParcelMgr::getInstance()->selectLand(regionp->getOriginGlobal(),
868 regionp->getOriginGlobal() + north_east, FALSE); 864 regionp->getOriginGlobal() + north_east, FALSE);
869 865
870} 866}
@@ -1261,12 +1257,12 @@ void LLPanelObjectTools::onClickSetBySelection(void* data)
1261 if (!panelp) return; 1257 if (!panelp) return;
1262 1258
1263 const BOOL non_root_ok = TRUE; 1259 const BOOL non_root_ok = TRUE;
1264 LLSelectNode* node = gSelectMgr->getSelection()->getFirstRootNode(NULL, non_root_ok); 1260 LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode(NULL, non_root_ok);
1265 if (!node) return; 1261 if (!node) return;
1266 1262
1267 LLString owner_name; 1263 LLString owner_name;
1268 LLUUID owner_id; 1264 LLUUID owner_id;
1269 gSelectMgr->selectGetOwner(owner_id, owner_name); 1265 LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name);
1270 1266
1271 panelp->mTargetAvatar = owner_id; 1267 panelp->mTargetAvatar = owner_id;
1272 LLString name = "Object " + node->mName + " owned by " + owner_name; 1268 LLString name = "Object " + node->mName + " owned by " + owner_name;
@@ -1348,8 +1344,8 @@ void LLPanelRequestTools::refresh()
1348 list->operateOnAll(LLCtrlListInterface::OP_DELETE); 1344 list->operateOnAll(LLCtrlListInterface::OP_DELETE);
1349 list->addSimpleElement(SELECTION); 1345 list->addSimpleElement(SELECTION);
1350 list->addSimpleElement(AGENT_REGION); 1346 list->addSimpleElement(AGENT_REGION);
1351 for (LLWorld::region_list_t::iterator iter = gWorldp->mActiveRegionList.begin(); 1347 for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->mActiveRegionList.begin();
1352 iter != gWorldp->mActiveRegionList.end(); ++iter) 1348 iter != LLWorld::getInstance()->mActiveRegionList.end(); ++iter)
1353 { 1349 {
1354 LLViewerRegion* regionp = *iter; 1350 LLViewerRegion* regionp = *iter;
1355 LLString name = regionp->getName(); 1351 LLString name = regionp->getName();
@@ -1400,7 +1396,7 @@ void LLPanelRequestTools::onClickRequest(void* data)
1400 std::string req = self->childGetValue("request"); 1396 std::string req = self->childGetValue("request");
1401 req = req.substr(0, req.find_first_of(" ")); 1397 req = req.substr(0, req.find_first_of(" "));
1402 std::string param = self->childGetValue("parameter"); 1398 std::string param = self->childGetValue("parameter");
1403 gSelectMgr->sendGodlikeRequest(req, param); 1399 LLSelectMgr::getInstance()->sendGodlikeRequest(req, param);
1404 } 1400 }
1405 else if(dest == AGENT_REGION) 1401 else if(dest == AGENT_REGION)
1406 { 1402 {
@@ -1409,8 +1405,8 @@ void LLPanelRequestTools::onClickRequest(void* data)
1409 else 1405 else
1410 { 1406 {
1411 // find region by name 1407 // find region by name
1412 for (LLWorld::region_list_t::iterator iter = gWorldp->mActiveRegionList.begin(); 1408 for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->mActiveRegionList.begin();
1413 iter != gWorldp->mActiveRegionList.end(); ++iter) 1409 iter != LLWorld::getInstance()->mActiveRegionList.end(); ++iter)
1414 { 1410 {
1415 LLViewerRegion* regionp = *iter; 1411 LLViewerRegion* regionp = *iter;
1416 if(dest == regionp->getName()) 1412 if(dest == regionp->getName())
diff --git a/linden/indra/newview/llfloatergroups.cpp b/linden/indra/newview/llfloatergroups.cpp
index 4a89fae..7f32b24 100644
--- a/linden/indra/newview/llfloatergroups.cpp
+++ b/linden/indra/newview/llfloatergroups.cpp
@@ -52,7 +52,7 @@
52#include "llselectmgr.h" 52#include "llselectmgr.h"
53#include "llscrolllistctrl.h" 53#include "llscrolllistctrl.h"
54#include "lltextbox.h" 54#include "lltextbox.h"
55#include "llvieweruictrlfactory.h" 55#include "lluictrlfactory.h"
56#include "llviewerwindow.h" 56#include "llviewerwindow.h"
57#include "llimview.h" 57#include "llimview.h"
58 58
@@ -81,7 +81,7 @@ LLFloaterGroupPicker* LLFloaterGroupPicker::findInstance(const LLSD& seed)
81LLFloaterGroupPicker* LLFloaterGroupPicker::createInstance(const LLSD &seed) 81LLFloaterGroupPicker* LLFloaterGroupPicker::createInstance(const LLSD &seed)
82{ 82{
83 LLFloaterGroupPicker* pickerp = new LLFloaterGroupPicker(seed); 83 LLFloaterGroupPicker* pickerp = new LLFloaterGroupPicker(seed);
84 gUICtrlFactory->buildFloater(pickerp, "floater_choose_group.xml"); 84 LLUICtrlFactory::getInstance()->buildFloater(pickerp, "floater_choose_group.xml");
85 return pickerp; 85 return pickerp;
86} 86}
87 87
@@ -115,7 +115,7 @@ void LLFloaterGroupPicker::setPowersMask(U64 powers_mask)
115 115
116BOOL LLFloaterGroupPicker::postBuild() 116BOOL LLFloaterGroupPicker::postBuild()
117{ 117{
118 init_group_list(LLUICtrlFactory::getScrollListByName(this, "group list"), gAgent.getGroupID(), mPowersMask); 118 init_group_list(getChild<LLScrollListCtrl>("group list"), gAgent.getGroupID(), mPowersMask);
119 119
120 childSetAction("OK", onBtnOK, this); 120 childSetAction("OK", onBtnOK, this);
121 121
@@ -173,8 +173,7 @@ bool LLPanelGroups::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
173 reset(); 173 reset();
174 return true; 174 return true;
175 } 175 }
176 176 return false;
177 return LLView::handleEvent(event, userdata);
178} 177}
179 178
180// Default constructor 179// Default constructor
@@ -200,7 +199,7 @@ void LLPanelGroups::reset()
200 childSetTextArg("groupcount", "[COUNT]", llformat("%d",gAgent.mGroups.count())); 199 childSetTextArg("groupcount", "[COUNT]", llformat("%d",gAgent.mGroups.count()));
201 childSetTextArg("groupcount", "[MAX]", llformat("%d",MAX_AGENT_GROUPS)); 200 childSetTextArg("groupcount", "[MAX]", llformat("%d",MAX_AGENT_GROUPS));
202 201
203 init_group_list(LLUICtrlFactory::getScrollListByName(this, "group list"), gAgent.getGroupID()); 202 init_group_list(getChild<LLScrollListCtrl>("group list"), gAgent.getGroupID());
204 enableButtons(); 203 enableButtons();
205} 204}
206 205
@@ -211,7 +210,7 @@ BOOL LLPanelGroups::postBuild()
211 childSetTextArg("groupcount", "[COUNT]", llformat("%d",gAgent.mGroups.count())); 210 childSetTextArg("groupcount", "[COUNT]", llformat("%d",gAgent.mGroups.count()));
212 childSetTextArg("groupcount", "[MAX]", llformat("%d",MAX_AGENT_GROUPS)); 211 childSetTextArg("groupcount", "[MAX]", llformat("%d",MAX_AGENT_GROUPS));
213 212
214 init_group_list(LLUICtrlFactory::getScrollListByName(this, "group list"), gAgent.getGroupID()); 213 init_group_list(getChild<LLScrollListCtrl>("group list"), gAgent.getGroupID());
215 214
216 childSetAction("Activate", onBtnActivate, this); 215 childSetAction("Activate", onBtnActivate, this);
217 216
diff --git a/linden/indra/newview/llfloatergroups.h b/linden/indra/newview/llfloatergroups.h
index 3ceb1bd..5eda8ba 100644
--- a/linden/indra/newview/llfloatergroups.h
+++ b/linden/indra/newview/llfloatergroups.h
@@ -83,7 +83,7 @@ protected:
83 static instance_map_t sInstances; 83 static instance_map_t sInstances;
84}; 84};
85 85
86class LLPanelGroups : public LLPanel 86class LLPanelGroups : public LLPanel, public LLSimpleListener
87{ 87{
88public: 88public:
89 LLPanelGroups(); 89 LLPanelGroups();
diff --git a/linden/indra/newview/llfloaterhardwaresettings.cpp b/linden/indra/newview/llfloaterhardwaresettings.cpp
index 0d92764..1f0a68f 100644
--- a/linden/indra/newview/llfloaterhardwaresettings.cpp
+++ b/linden/indra/newview/llfloaterhardwaresettings.cpp
@@ -40,7 +40,7 @@
40#include "llstartup.h" 40#include "llstartup.h"
41 41
42#include "llradiogroup.h" 42#include "llradiogroup.h"
43#include "llvieweruictrlfactory.h" 43#include "lluictrlfactory.h"
44 44
45#include "llimagegl.h" 45#include "llimagegl.h"
46#include "pipeline.h" 46#include "pipeline.h"
@@ -49,7 +49,7 @@ LLFloaterHardwareSettings* LLFloaterHardwareSettings::sHardwareSettings = NULL;
49 49
50LLFloaterHardwareSettings::LLFloaterHardwareSettings() : LLFloater("Hardware Settings Floater") 50LLFloaterHardwareSettings::LLFloaterHardwareSettings() : LLFloater("Hardware Settings Floater")
51{ 51{
52 gUICtrlFactory->buildFloater(this, "floater_hardware_settings.xml"); 52 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_hardware_settings.xml");
53 53
54 // load it up 54 // load it up
55 initCallbacks(); 55 initCallbacks();
@@ -77,11 +77,13 @@ void LLFloaterHardwareSettings::refresh()
77 77
78 mUseVBO = gSavedSettings.getBOOL("RenderVBOEnable"); 78 mUseVBO = gSavedSettings.getBOOL("RenderVBOEnable");
79 mUseAniso = gSavedSettings.getBOOL("RenderAnisotropic"); 79 mUseAniso = gSavedSettings.getBOOL("RenderAnisotropic");
80 mFSAASamples = gSavedSettings.getU32("RenderFSAASamples");
80 mGamma = gSavedSettings.getF32("RenderGamma"); 81 mGamma = gSavedSettings.getF32("RenderGamma");
81 mVideoCardMem = gSavedSettings.getS32("TextureMemory"); 82 mVideoCardMem = gSavedSettings.getS32("TextureMemory");
82 mFogRatio = gSavedSettings.getF32("RenderFogRatio"); 83 mFogRatio = gSavedSettings.getF32("RenderFogRatio");
83 mProbeHardwareOnStartup = gSavedSettings.getBOOL("ProbeHardwareOnStartup"); 84 mProbeHardwareOnStartup = gSavedSettings.getBOOL("ProbeHardwareOnStartup");
84 85
86 childSetValue("fsaa", (LLSD::Integer) mFSAASamples);
85 refreshEnabledState(); 87 refreshEnabledState();
86} 88}
87 89
@@ -92,7 +94,7 @@ void LLFloaterHardwareSettings::refreshEnabledState()
92 childSetMinValue("GrapicsCardTextureMemory", min_tex_mem); 94 childSetMinValue("GrapicsCardTextureMemory", min_tex_mem);
93 childSetMaxValue("GrapicsCardTextureMemory", max_tex_mem); 95 childSetMaxValue("GrapicsCardTextureMemory", max_tex_mem);
94 96
95 if (!gFeatureManagerp->isFeatureAvailable("RenderVBOEnable") || 97 if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderVBOEnable") ||
96 !gGLManager.mHasVertexBufferObject) 98 !gGLManager.mHasVertexBufferObject)
97 { 99 {
98 childSetEnabled("vbo", FALSE); 100 childSetEnabled("vbo", FALSE);
@@ -122,7 +124,7 @@ void LLFloaterHardwareSettings::show()
122 hardSettings->center(); 124 hardSettings->center();
123 125
124 // comment in if you want the menu to rebuild each time 126 // comment in if you want the menu to rebuild each time
125 //gUICtrlFactory->buildFloater(hardSettings, "floater_hardware_settings.xml"); 127 //LLUICtrlFactory::getInstance()->buildFloater(hardSettings, "floater_hardware_settings.xml");
126 //hardSettings->initCallbacks(); 128 //hardSettings->initCallbacks();
127 129
128 hardSettings->open(); 130 hardSettings->open();
@@ -151,17 +153,6 @@ void LLFloaterHardwareSettings::onClose(bool app_quitting)
151 153
152BOOL LLFloaterHardwareSettings::postBuild() 154BOOL LLFloaterHardwareSettings::postBuild()
153{ 155{
154 requires("ani", WIDGET_TYPE_CHECKBOX);
155 requires("gamma", WIDGET_TYPE_SPINNER);
156 requires("vbo", WIDGET_TYPE_CHECKBOX);
157 requires("GrapicsCardTextureMemory", WIDGET_TYPE_SLIDER);
158 requires("fog", WIDGET_TYPE_SPINNER);
159
160 if (!checkRequirements())
161 {
162 return FALSE;
163 }
164
165 childSetAction("OK", onBtnOK, this); 156 childSetAction("OK", onBtnOK, this);
166 157
167 refresh(); 158 refresh();
@@ -175,9 +166,25 @@ void LLFloaterHardwareSettings::apply()
175 // Anisotropic rendering 166 // Anisotropic rendering
176 BOOL old_anisotropic = LLImageGL::sGlobalUseAnisotropic; 167 BOOL old_anisotropic = LLImageGL::sGlobalUseAnisotropic;
177 LLImageGL::sGlobalUseAnisotropic = childGetValue("ani"); 168 LLImageGL::sGlobalUseAnisotropic = childGetValue("ani");
178 if (old_anisotropic != LLImageGL::sGlobalUseAnisotropic) 169
170 U32 fsaa = (U32) childGetValue("fsaa").asInteger();
171 U32 old_fsaa = gSavedSettings.getU32("RenderFSAASamples");
172
173 BOOL logged_in = (LLStartUp::getStartupState() >= STATE_STARTED);
174
175 if (old_fsaa != fsaa)
176 {
177 gSavedSettings.setU32("RenderFSAASamples", fsaa);
178 LLWindow* window = gViewerWindow->getWindow();
179 LLCoordScreen size;
180 window->getSize(&size);
181 gViewerWindow->changeDisplaySettings(window->getFullscreen(),
182 size,
183 gSavedSettings.getBOOL("DisableVerticalSync"),
184 logged_in);
185 }
186 else if (old_anisotropic != LLImageGL::sGlobalUseAnisotropic)
179 { 187 {
180 BOOL logged_in = (LLStartUp::getStartupState() >= STATE_STARTED);
181 gViewerWindow->restartDisplay(logged_in); 188 gViewerWindow->restartDisplay(logged_in);
182 } 189 }
183 190
@@ -189,6 +196,7 @@ void LLFloaterHardwareSettings::cancel()
189{ 196{
190 gSavedSettings.setBOOL("RenderVBOEnable", mUseVBO); 197 gSavedSettings.setBOOL("RenderVBOEnable", mUseVBO);
191 gSavedSettings.setBOOL("RenderAnisotropic", mUseAniso); 198 gSavedSettings.setBOOL("RenderAnisotropic", mUseAniso);
199 gSavedSettings.setU32("RenderFSAASamples", mFSAASamples);
192 gSavedSettings.setF32("RenderGamma", mGamma); 200 gSavedSettings.setF32("RenderGamma", mGamma);
193 gSavedSettings.setS32("TextureMemory", mVideoCardMem); 201 gSavedSettings.setS32("TextureMemory", mVideoCardMem);
194 gSavedSettings.setF32("RenderFogRatio", mFogRatio); 202 gSavedSettings.setF32("RenderFogRatio", mFogRatio);
diff --git a/linden/indra/newview/llfloaterhardwaresettings.h b/linden/indra/newview/llfloaterhardwaresettings.h
index 600c30b..be78d81 100644
--- a/linden/indra/newview/llfloaterhardwaresettings.h
+++ b/linden/indra/newview/llfloaterhardwaresettings.h
@@ -88,6 +88,7 @@ protected:
88 88
89 BOOL mUseVBO; 89 BOOL mUseVBO;
90 BOOL mUseAniso; 90 BOOL mUseAniso;
91 U32 mFSAASamples;
91 F32 mGamma; 92 F32 mGamma;
92 S32 mVideoCardMem; 93 S32 mVideoCardMem;
93 F32 mFogRatio; 94 F32 mFogRatio;
diff --git a/linden/indra/newview/llfloaterhtml.cpp b/linden/indra/newview/llfloaterhtml.cpp
index 596202a..2ad9307 100644
--- a/linden/indra/newview/llfloaterhtml.cpp
+++ b/linden/indra/newview/llfloaterhtml.cpp
@@ -34,7 +34,7 @@
34#include "llfloaterhtml.h" 34#include "llfloaterhtml.h"
35 35
36// viewer includes 36// viewer includes
37#include "llvieweruictrlfactory.h" 37#include "lluictrlfactory.h"
38#include "llviewercontrol.h" 38#include "llviewercontrol.h"
39#include "lllineeditor.h" 39#include "lllineeditor.h"
40#include "llviewerwindow.h" 40#include "llviewerwindow.h"
@@ -49,7 +49,7 @@ LLFloaterHtml* LLFloaterHtml::sInstance = 0;
49LLFloaterHtml* LLFloaterHtml::getInstance() 49LLFloaterHtml* LLFloaterHtml::getInstance()
50{ 50{
51 if ( ! sInstance ) 51 if ( ! sInstance )
52 sInstance = new LLFloaterHtml; 52 sInstance = new LLFloaterHtml();
53 53
54 return sInstance; 54 return sInstance;
55} 55}
@@ -62,8 +62,7 @@ LLFloaterHtml::LLFloaterHtml()
62 , 62 ,
63 mWebBrowser( 0 ) 63 mWebBrowser( 0 )
64{ 64{
65 // create floater from its XML definition 65 LLUICtrlFactory::getInstance()->buildFloater( this, "floater_html.xml" );
66 gUICtrlFactory->buildFloater( this, "floater_html.xml" );
67 66
68 childSetAction("back_btn", onClickBack, this); 67 childSetAction("back_btn", onClickBack, this);
69 childSetAction("home_btn", onClickHome, this); 68 childSetAction("home_btn", onClickHome, this);
@@ -73,11 +72,11 @@ LLFloaterHtml::LLFloaterHtml()
73 childSetAction("go_btn", onClickGo, this ); 72 childSetAction("go_btn", onClickGo, this );
74 73
75 // reposition floater from saved settings 74 // reposition floater from saved settings
76 LLRect rect = gSavedSettings.getRect( "HtmlFloaterRect" ); 75 LLRect rect = gSavedSettings.getRect( "FloaterHtmlRect" );
77 reshape( rect.getWidth(), rect.getHeight(), FALSE ); 76 reshape( rect.getWidth(), rect.getHeight(), FALSE );
78 setRect( rect ); 77 setRect( rect );
79 78
80 mWebBrowser = LLViewerUICtrlFactory::getWebBrowserByName(this, "html_floater_browser" ); 79 mWebBrowser = getChild<LLWebBrowserCtrl>("html_floater_browser" );
81 if ( mWebBrowser ) 80 if ( mWebBrowser )
82 { 81 {
83 // open links in internal browser 82 // open links in internal browser
@@ -90,7 +89,7 @@ LLFloaterHtml::LLFloaterHtml()
90LLFloaterHtml::~LLFloaterHtml() 89LLFloaterHtml::~LLFloaterHtml()
91{ 90{
92 // save position of floater 91 // save position of floater
93 gSavedSettings.setRect( "HtmlFloaterRect", getRect() ); 92 gSavedSettings.setRect( "FloaterHtmlRect", getRect() );
94 93
95 sInstance = 0; 94 sInstance = 0;
96} 95}
@@ -114,7 +113,7 @@ void LLFloaterHtml::draw()
114 113
115//////////////////////////////////////////////////////////////////////////////// 114////////////////////////////////////////////////////////////////////////////////
116// 115//
117void LLFloaterHtml::show( LLString content_id, bool open_app_slurls, bool open_link_external ) 116void LLFloaterHtml::show( LLString content_id, bool open_link_external, bool open_app_slurls )
118{ 117{
119 // calculate the XML labels we'll need (if only XML folders worked) 118 // calculate the XML labels we'll need (if only XML folders worked)
120 LLString title_str = content_id + "_title"; 119 LLString title_str = content_id + "_title";
@@ -122,12 +121,13 @@ void LLFloaterHtml::show( LLString content_id, bool open_app_slurls, bool open_l
122 121
123 std::string title = getString( title_str ); 122 std::string title = getString( title_str );
124 std::string url = getString( url_str ); 123 std::string url = getString( url_str );
125 show( url, title, open_app_slurls, open_link_external ); 124
125 show( url, title, open_link_external, open_app_slurls );
126} 126}
127 127
128//////////////////////////////////////////////////////////////////////////////// 128////////////////////////////////////////////////////////////////////////////////
129// 129//
130void LLFloaterHtml::show( std::string start_url, std::string title, bool open_app_slurls, bool open_link_external ) 130void LLFloaterHtml::show( std::string start_url, std::string title, bool open_link_external, bool open_app_slurls )
131{ 131{
132 // set the title 132 // set the title
133 setTitle( title ); 133 setTitle( title );
@@ -149,6 +149,8 @@ void LLFloaterHtml::show( std::string start_url, std::string title, bool open_ap
149void LLFloaterHtml::onClose( bool app_quitting ) 149void LLFloaterHtml::onClose( bool app_quitting )
150{ 150{
151 setVisible( false ); 151 setVisible( false );
152 // HACK for fast XML iteration replace with:
153 // destroy();
152} 154}
153 155
154//////////////////////////////////////////////////////////////////////////////// 156////////////////////////////////////////////////////////////////////////////////
@@ -156,8 +158,7 @@ void LLFloaterHtml::onClose( bool app_quitting )
156void LLFloaterHtml::onClickClose( void* data ) 158void LLFloaterHtml::onClickClose( void* data )
157{ 159{
158 LLFloaterHtml* self = ( LLFloaterHtml* )data; 160 LLFloaterHtml* self = ( LLFloaterHtml* )data;
159 161 self->close();
160 self->setVisible( false );
161} 162}
162 163
163//////////////////////////////////////////////////////////////////////////////// 164////////////////////////////////////////////////////////////////////////////////
@@ -243,4 +244,3 @@ void LLFloaterHtml::onClickGo( void* data )
243 } 244 }
244 } 245 }
245} 246}
246
diff --git a/linden/indra/newview/llfloaterhtml.h b/linden/indra/newview/llfloaterhtml.h
index ffefdf4..9826988 100644
--- a/linden/indra/newview/llfloaterhtml.h
+++ b/linden/indra/newview/llfloaterhtml.h
@@ -49,13 +49,13 @@ class LLFloaterHtml :
49 virtual void onClose( bool app_quitting ); 49 virtual void onClose( bool app_quitting );
50 50
51 // Pass string like "in-world_help" or "additional help" 51 // Pass string like "in-world_help" or "additional help"
52 void show( LLString content_id, bool open_app_slurls, bool open_link_external ); 52 void show( LLString content_id, bool open_link_external, bool open_app_slurls );
53 53
54 // Pass raw URL and window title 54 // Pass raw URL and window title
55 // Can be set to handle secondlife:///app/ URLs, but this should 55 // Can be set to handle secondlife:///app/ URLs, but this should
56 // usually be false. 56 // usually be false.
57 void show( std::string start_url, std::string title, bool open_app_slurls, bool open_link_external ); 57 void show( std::string start_url, std::string title, bool open_link_external, bool open_app_slurls );
58 58
59 static void onClickClose( void* data ); 59 static void onClickClose( void* data );
60 static void onClickBack( void* data ); 60 static void onClickBack( void* data );
61 static void onClickHome( void* data ); 61 static void onClickHome( void* data );
@@ -65,10 +65,10 @@ class LLFloaterHtml :
65 65
66 private: 66 private:
67 LLFloaterHtml(); 67 LLFloaterHtml();
68
68 LLWebBrowserCtrl* mWebBrowser; 69 LLWebBrowserCtrl* mWebBrowser;
69 static LLFloaterHtml* sInstance; 70 static LLFloaterHtml* sInstance;
70 LLButton* mCloseButton; 71 LLButton* mCloseButton;
71}; 72};
72 73
73
74#endif 74#endif
diff --git a/linden/indra/newview/llfloaterhtmlhelp.cpp b/linden/indra/newview/llfloaterhtmlhelp.cpp
index f2a8374..0968734 100644
--- a/linden/indra/newview/llfloaterhtmlhelp.cpp
+++ b/linden/indra/newview/llfloaterhtmlhelp.cpp
@@ -34,7 +34,7 @@
34#include "llfloaterhtmlhelp.h" 34#include "llfloaterhtmlhelp.h"
35 35
36#include "llparcel.h" 36#include "llparcel.h"
37#include "llvieweruictrlfactory.h" 37#include "lluictrlfactory.h"
38#include "llwebbrowserctrl.h" 38#include "llwebbrowserctrl.h"
39#include "llviewerwindow.h" 39#include "llviewerwindow.h"
40#include "llviewercontrol.h" 40#include "llviewercontrol.h"
@@ -52,30 +52,27 @@
52 52
53LLFloaterMediaBrowser::LLFloaterMediaBrowser(const LLSD& media_data) 53LLFloaterMediaBrowser::LLFloaterMediaBrowser(const LLSD& media_data)
54{ 54{
55 gUICtrlFactory->buildFloater(this, "floater_media_browser.xml"); 55 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_media_browser.xml");
56} 56}
57 57
58void LLFloaterMediaBrowser::draw() 58void LLFloaterMediaBrowser::draw()
59{ 59{
60 childSetEnabled("go", !mAddressCombo->getValue().asString().empty()); 60 childSetEnabled("go", !mAddressCombo->getValue().asString().empty());
61 if ( gParcelMgr ) // this code can be called at login screen where gParcelMgr is NULL 61 LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
62 if(parcel)
62 { 63 {
63 LLParcel* parcel = gParcelMgr->getAgentParcel(); 64 childSetVisible("parcel_owner_controls", LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_CHANGE_MEDIA));
64 if(parcel) 65 childSetEnabled("assign", !mAddressCombo->getValue().asString().empty());
65 { 66 }
66 childSetVisible("parcel_owner_controls", LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_CHANGE_MEDIA));
67 childSetEnabled("assign", !mAddressCombo->getValue().asString().empty());
68 }
69 };
70 LLFloater::draw(); 67 LLFloater::draw();
71} 68}
72 69
73BOOL LLFloaterMediaBrowser::postBuild() 70BOOL LLFloaterMediaBrowser::postBuild()
74{ 71{
75 mBrowser = LLViewerUICtrlFactory::getWebBrowserByName(this, "browser"); 72 mBrowser = getChild<LLWebBrowserCtrl>("browser");
76 mBrowser->addObserver(this); 73 mBrowser->addObserver(this);
77 74
78 mAddressCombo = LLUICtrlFactory::getComboBoxByName(this, "address"); 75 mAddressCombo = getChild<LLComboBox>("address");
79 mAddressCombo->setCommitCallback(onEnterAddress); 76 mAddressCombo->setCommitCallback(onEnterAddress);
80 mAddressCombo->setCallbackUserData(this); 77 mAddressCombo->setCallbackUserData(this);
81 78
@@ -221,7 +218,7 @@ void LLFloaterMediaBrowser::onClickAssign(void* user_data)
221{ 218{
222 LLFloaterMediaBrowser* self = (LLFloaterMediaBrowser*)user_data; 219 LLFloaterMediaBrowser* self = (LLFloaterMediaBrowser*)user_data;
223 220
224 LLParcel* parcel = gParcelMgr->getAgentParcel(); 221 LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
225 if (!parcel) 222 if (!parcel)
226 { 223 {
227 return; 224 return;
@@ -233,7 +230,7 @@ void LLFloaterMediaBrowser::onClickAssign(void* user_data)
233 parcel->setMediaType("text/html"); 230 parcel->setMediaType("text/html");
234 231
235 // Send current parcel data upstream to server 232 // Send current parcel data upstream to server
236 gParcelMgr->sendParcelPropertiesUpdate( parcel, true ); 233 LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel, true );
237 // now check for video 234 // now check for video
238 LLViewerParcelMedia::update( parcel ); 235 LLViewerParcelMedia::update( parcel );
239 236
@@ -300,7 +297,7 @@ LLFloaterHtmlHelp::LLFloaterHtmlHelp(std::string start_url, std::string title)
300 sInstance = this; 297 sInstance = this;
301 298
302 // create floater from its XML definition 299 // create floater from its XML definition
303 gUICtrlFactory->buildFloater( this, "floater_html_help.xml" ); 300 LLUICtrlFactory::getInstance()->buildFloater( this, "floater_html_help.xml" );
304 301
305 childSetAction("back_btn", onClickBack, this); 302 childSetAction("back_btn", onClickBack, this);
306 childSetAction("home_btn", onClickHome, this); 303 childSetAction("home_btn", onClickHome, this);
@@ -311,7 +308,7 @@ LLFloaterHtmlHelp::LLFloaterHtmlHelp(std::string start_url, std::string title)
311 setTitle(title); 308 setTitle(title);
312 } 309 }
313 310
314 mWebBrowser = LLViewerUICtrlFactory::getWebBrowserByName(this, "html_help_browser" ); 311 mWebBrowser = getChild<LLWebBrowserCtrl>("html_help_browser" );
315 if ( mWebBrowser ) 312 if ( mWebBrowser )
316 { 313 {
317 // observe browser control events 314 // observe browser control events
@@ -476,7 +473,7 @@ void LLFloaterHtmlHelp::onClickHome( void* data )
476 if ( self ) 473 if ( self )
477 { 474 {
478 // get the home page URL (which can differ from the start URL) from XML and go there 475 // get the home page URL (which can differ from the start URL) from XML and go there
479 LLWebBrowserCtrl* web_browser = LLViewerUICtrlFactory::getWebBrowserByName( self, "html_help_browser" ); 476 LLWebBrowserCtrl* web_browser = self->getChild<LLWebBrowserCtrl>("html_help_browser" );
480 if ( web_browser ) 477 if ( web_browser )
481 { 478 {
482 web_browser->navigateHome(); 479 web_browser->navigateHome();
@@ -527,14 +524,13 @@ LLViewerHtmlHelp::~LLViewerHtmlHelp()
527 LLUI::setHtmlHelp(NULL); 524 LLUI::setHtmlHelp(NULL);
528} 525}
529 526
530void LLViewerHtmlHelp::show(std::string url, std::string title) 527void LLViewerHtmlHelp::show()
531{ 528{
532 LLFloaterHtmlHelp::show(url, title); 529 LLFloaterHtmlHelp::show("", "");
533} 530}
534 531
535BOOL LLViewerHtmlHelp::getFloaterOpened() 532void LLViewerHtmlHelp::show(std::string url)
536{ 533{
537 return LLFloaterHtmlHelp::sFloaterOpened; 534 std::string title; // empty
535 LLFloaterHtmlHelp::show(url, title);
538} 536}
539
540
diff --git a/linden/indra/newview/llfloaterhtmlhelp.h b/linden/indra/newview/llfloaterhtmlhelp.h
index 65ec093..7257566 100644
--- a/linden/indra/newview/llfloaterhtmlhelp.h
+++ b/linden/indra/newview/llfloaterhtmlhelp.h
@@ -42,9 +42,8 @@ public:
42 LLViewerHtmlHelp(); 42 LLViewerHtmlHelp();
43 virtual ~LLViewerHtmlHelp(); 43 virtual ~LLViewerHtmlHelp();
44 44
45 /*virtual*/ void show(std::string start_url, std::string title); 45 /*virtual*/ void show();
46 void show() { show("", ""); } 46 /*virtual*/ void show(std::string start_url);
47 /*virtual*/ BOOL getFloaterOpened();
48}; 47};
49 48
50class LLComboBox; 49class LLComboBox;
diff --git a/linden/indra/newview/llfloaterhud.cpp b/linden/indra/newview/llfloaterhud.cpp
new file mode 100644
index 0000000..2f192f7
--- /dev/null
+++ b/linden/indra/newview/llfloaterhud.cpp
@@ -0,0 +1,140 @@
1/**
2 * @file llfloaterhud.cpp
3 * @brief Implementation of HUD floater
4 *
5 * $LicenseInfo:firstyear=2008&license=viewergpl$
6 *
7 * Copyright (c) 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 "llfloaterhud.h"
35#include "llviewercontrol.h"
36#include "lluictrlfactory.h"
37#include "llwebbrowserctrl.h"
38#include "llalertdialog.h"
39
40// statics
41LLFloaterHUD* LLFloaterHUD::sInstance = 0;
42std::string LLFloaterHUD::sTutorialUrl = "";
43
44///----------------------------------------------------------------------------
45/// Class LLFloaterHUD
46///----------------------------------------------------------------------------
47#define super LLFloater /* superclass */
48
49// Default constructor
50LLFloaterHUD::LLFloaterHUD()
51: LLFloater("floater_hud"),
52 mWebBrowser(0)
53{
54 // Don't grab the focus as it will impede performing in-world actions
55 // while using the HUD
56 setAutoFocus(FALSE);
57
58 // Opaque background since we never get the focus
59 setBackgroundOpaque(TRUE);
60
61 // Create floater from its XML definition
62 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_hud.xml");
63
64 // Position floater based on saved location
65 LLRect saved_position_rect = gSavedSettings.getRect("FloaterHUDRect");
66 reshape(saved_position_rect.getWidth(), saved_position_rect.getHeight(), FALSE);
67 setRect(saved_position_rect);
68
69 mWebBrowser = getChild<LLWebBrowserCtrl>("floater_hud_browser" );
70 if (mWebBrowser)
71 {
72 // Always refresh the browser
73 mWebBrowser->setAlwaysRefresh(true);
74
75 // Open links in internal browser
76 mWebBrowser->setOpenInExternalBrowser(false);
77
78 LLString language(gSavedSettings.getString("Language"));
79 if(language == "default")
80 {
81 language = gSavedSettings.getString("SystemLanguage");
82 }
83
84 std::string url = sTutorialUrl + language + "/";
85 mWebBrowser->navigateTo(url);
86 }
87
88 // Remember the one instance
89 sInstance = this;
90}
91
92// Get the instance
93LLFloaterHUD* LLFloaterHUD::getInstance()
94{
95 if (!sInstance)
96 {
97 new LLFloaterHUD();
98 }
99 return sInstance;
100}
101
102// Destructor
103LLFloaterHUD::~LLFloaterHUD()
104{
105 // Save floater position
106 gSavedSettings.setRect("FloaterHUDRect", getRect() );
107
108 // Clear out the one instance if it's ours
109 if (sInstance == this)
110 {
111 sInstance = NULL;
112 }
113}
114
115// Show the HUD
116void LLFloaterHUD::show()
117{
118 // do not build the floater if there the url is empty
119 if (sTutorialUrl == "")
120 {
121 LLAlertDialog::showXml("TutorialNotFound");
122 return;
123 }
124
125 // Create the instance if necessary
126 LLFloaterHUD* hud = getInstance();
127 hud->open();
128 hud->setFrontmost(FALSE);
129}
130
131void LLFloaterHUD::close()
132{
133 if (sInstance) sInstance->close();
134}
135
136void LLFloaterHUD::onFocusReceived()
137{
138 // Never get the focus
139 setFocus(FALSE);
140}
diff --git a/linden/indra/newview/fakevoicesoundsignal.h b/linden/indra/newview/llfloaterhud.h
index bca6306..bd60d7b 100644
--- a/linden/indra/newview/fakevoicesoundsignal.h
+++ b/linden/indra/newview/llfloaterhud.h
@@ -1,12 +1,10 @@
1/** 1/**
2 * @file fakevoicesoundsignal.h 2 * @file llfloaterhud.h
3 * @brief Fake Voice Sound Signal 3 * @brief The HUD floater
4 * author: JJ Ventrella
5 * THIS IS A TEMPORARY FILE FOR DEVELOPMENT PURPOSES ONLY
6 * 4 *
7 * $LicenseInfo:firstyear=2000&license=viewergpl$ 5 * $LicenseInfo:firstyear=2008&license=viewergpl$
8 * 6 *
9 * Copyright (c) 2000-2008, Linden Research, Inc. 7 * Copyright (c) 2008, Linden Research, Inc.
10 * 8 *
11 * Second Life Viewer Source Code 9 * Second Life Viewer Source Code
12 * 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
@@ -30,23 +28,39 @@
30 * COMPLETENESS OR PERFORMANCE. 28 * COMPLETENESS OR PERFORMANCE.
31 * $/LicenseInfo$ 29 * $/LicenseInfo$
32 */ 30 */
33#ifndef FAKE_VOICE_SOUND_SIGNAL_H
34#define FAKE_VOICE_SOUND_SIGNAL_H
35 31
36//---------------------------------------------------------------------------- 32#ifndef LL_LLFLOATERHUD_H
37// FakeVoiceSoundSignal 33#define LL_LLFLOATERHUD_H
38//---------------------------------------------------------------------------- 34
39class FakeVoiceSoundSignal 35#include "llfloater.h"
36
37class LLWebBrowserCtrl;
38
39//=============================================================================
40//
41// CLASS LLFloaterHUD
42
43class LLFloaterHUD : public LLFloater
44
45/*! @brief A floater showing the HUD tutorial
46*/
40{ 47{
41 public: 48public:
42 FakeVoiceSoundSignal(); 49 static LLFloaterHUD* getInstance(); ///< get instance creating if necessary
43 ~FakeVoiceSoundSignal(); 50 virtual ~LLFloaterHUD(); ///< virtual destructor
44 void update(); 51
45 F32 getAmplitude(); 52 static std::string sTutorialUrl;
46 bool getActive(); 53
47 54 static void show(); ///< show the HUD
48};//----------------------------------------------------------------- 55 static void close(); ///< close the HUD (destroys floater)
49 // end of class 56
50//------------------------------------------------------------------ 57protected:
51 58 LLWebBrowserCtrl* mWebBrowser; ///< the actual web browser control
52#endif //FAKE_VOICE_SOUND_SIGNAL_H 59
60 LLFloaterHUD(); ///< default constructor
61 virtual void onFocusReceived(); ///< called when we get the focus
62private:
63 static LLFloaterHUD* sInstance;
64};
65
66#endif // LL_LLFLOATERHUD_H
diff --git a/linden/indra/newview/llfloaterimagepreview.cpp b/linden/indra/newview/llfloaterimagepreview.cpp
index 926a117..7b1c8cc 100644
--- a/linden/indra/newview/llfloaterimagepreview.cpp
+++ b/linden/indra/newview/llfloaterimagepreview.cpp
@@ -52,7 +52,7 @@
52#include "llviewerwindow.h" 52#include "llviewerwindow.h"
53#include "llvoavatar.h" 53#include "llvoavatar.h"
54#include "pipeline.h" 54#include "pipeline.h"
55#include "llvieweruictrlfactory.h" 55#include "lluictrlfactory.h"
56#include "llviewerimagelist.h" 56#include "llviewerimagelist.h"
57 57
58//static 58//static
@@ -617,7 +617,7 @@ LLImagePreviewAvatar::LLImagePreviewAvatar(S32 width, S32 height) : LLDynamicTex
617 mDummyAvatar->slamPosition(); 617 mDummyAvatar->slamPosition();
618 mDummyAvatar->updateJointLODs(); 618 mDummyAvatar->updateJointLODs();
619 mDummyAvatar->updateGeometry(mDummyAvatar->mDrawable); 619 mDummyAvatar->updateGeometry(mDummyAvatar->mDrawable);
620 // gPipeline.markVisible(mDummyAvatar->mDrawable, *gCamera); 620 // gPipeline.markVisible(mDummyAvatar->mDrawable, *LLViewerCamera::getInstance());
621 621
622 mTextureName = 0; 622 mTextureName = 0;
623} 623}
@@ -697,16 +697,16 @@ BOOL LLImagePreviewAvatar::render()
697 LLQuaternion(mCameraYaw, LLVector3::z_axis); 697 LLQuaternion(mCameraYaw, LLVector3::z_axis);
698 698
699 LLQuaternion av_rot = avatarp->mPelvisp->getWorldRotation() * camera_rot; 699 LLQuaternion av_rot = avatarp->mPelvisp->getWorldRotation() * camera_rot;
700 gCamera->setOriginAndLookAt( 700 LLViewerCamera::getInstance()->setOriginAndLookAt(
701 target_pos + ((LLVector3(mCameraDistance, 0.f, 0.f) + mCameraOffset) * av_rot), // camera 701 target_pos + ((LLVector3(mCameraDistance, 0.f, 0.f) + mCameraOffset) * av_rot), // camera
702 LLVector3::z_axis, // up 702 LLVector3::z_axis, // up
703 target_pos + (mCameraOffset * av_rot) ); // point of interest 703 target_pos + (mCameraOffset * av_rot) ); // point of interest
704 704
705 stop_glerror(); 705 stop_glerror();
706 706
707 gCamera->setAspect((F32)mWidth / mHeight); 707 LLViewerCamera::getInstance()->setAspect((F32)mWidth / mHeight);
708 gCamera->setView(gCamera->getDefaultFOV() / mCameraZoom); 708 LLViewerCamera::getInstance()->setView(LLViewerCamera::getInstance()->getDefaultFOV() / mCameraZoom);
709 gCamera->setPerspective(FALSE, mOrigin.mX, mOrigin.mY, mWidth, mHeight, FALSE); 709 LLViewerCamera::getInstance()->setPerspective(FALSE, mOrigin.mX, mOrigin.mY, mWidth, mHeight, FALSE);
710 710
711 LLVertexBuffer::stopRender(); 711 LLVertexBuffer::stopRender();
712 avatarp->updateLOD(); 712 avatarp->updateLOD();
@@ -788,7 +788,7 @@ LLImagePreviewSculpted::LLImagePreviewSculpted(S32 width, S32 height) : LLDynami
788 mDummyAvatar->slamPosition(); 788 mDummyAvatar->slamPosition();
789 mDummyAvatar->updateJointLODs(); 789 mDummyAvatar->updateJointLODs();
790 mDummyAvatar->updateGeometry(mDummyAvatar->mDrawable); 790 mDummyAvatar->updateGeometry(mDummyAvatar->mDrawable);
791 gPipeline.markVisible(mDummyAvatar->mDrawable, *gCamera); 791 gPipeline.markVisible(mDummyAvatar->mDrawable, *LLViewerCamera::getInstance());
792 mTextureName = 0; 792 mTextureName = 0;
793 */ 793 */
794} 794}
@@ -857,16 +857,16 @@ BOOL LLImagePreviewSculpted::render()
857 LLQuaternion(mCameraYaw, LLVector3::z_axis); 857 LLQuaternion(mCameraYaw, LLVector3::z_axis);
858 858
859 LLQuaternion av_rot = camera_rot; 859 LLQuaternion av_rot = camera_rot;
860 gCamera->setOriginAndLookAt( 860 LLViewerCamera::getInstance()->setOriginAndLookAt(
861 target_pos + ((LLVector3(mCameraDistance, 0.f, 0.f) + mCameraOffset) * av_rot), // camera 861 target_pos + ((LLVector3(mCameraDistance, 0.f, 0.f) + mCameraOffset) * av_rot), // camera
862 LLVector3::z_axis, // up 862 LLVector3::z_axis, // up
863 target_pos + (mCameraOffset * av_rot) ); // point of interest 863 target_pos + (mCameraOffset * av_rot) ); // point of interest
864 864
865 stop_glerror(); 865 stop_glerror();
866 866
867 gCamera->setAspect((F32) mWidth / mHeight); 867 LLViewerCamera::getInstance()->setAspect((F32) mWidth / mHeight);
868 gCamera->setView(gCamera->getDefaultFOV() / mCameraZoom); 868 LLViewerCamera::getInstance()->setView(LLViewerCamera::getInstance()->getDefaultFOV() / mCameraZoom);
869 gCamera->setPerspective(FALSE, mOrigin.mX, mOrigin.mY, mWidth, mHeight, FALSE); 869 LLViewerCamera::getInstance()->setPerspective(FALSE, mOrigin.mX, mOrigin.mY, mWidth, mHeight, FALSE);
870 870
871 gPipeline.enableLightsAvatar(); 871 gPipeline.enableLightsAvatar();
872 872
@@ -907,7 +907,7 @@ BOOL LLImagePreviewSculpted::render()
907 gGL.color3f(0.4f, 0.4f, 0.4f); 907 gGL.color3f(0.4f, 0.4f, 0.4f);
908 glVertexPointer(3, GL_FLOAT, 0, (void *)vertices); 908 glVertexPointer(3, GL_FLOAT, 0, (void *)vertices);
909 glNormalPointer(GL_FLOAT, 0, (void *)normals); 909 glNormalPointer(GL_FLOAT, 0, (void *)normals);
910 glDrawRangeElements(GL_TRIANGLES, 0, num_indices-1, num_indices, GL_UNSIGNED_SHORT, (void *)indices); 910 glDrawRangeElements(GL_TRIANGLES, 0, num_vertices-1, num_indices, GL_UNSIGNED_SHORT, (void *)indices);
911 911
912 gGL.popMatrix(); 912 gGL.popMatrix();
913 glDisableClientState(GL_NORMAL_ARRAY); 913 glDisableClientState(GL_NORMAL_ARRAY);
diff --git a/linden/indra/newview/llfloaterinspect.cpp b/linden/indra/newview/llfloaterinspect.cpp
index cdca428..ff0a2ee 100644
--- a/linden/indra/newview/llfloaterinspect.cpp
+++ b/linden/indra/newview/llfloaterinspect.cpp
@@ -40,7 +40,7 @@
40#include "lltoolmgr.h" 40#include "lltoolmgr.h"
41#include "llviewercontrol.h" 41#include "llviewercontrol.h"
42#include "llviewerobject.h" 42#include "llviewerobject.h"
43#include "llvieweruictrlfactory.h" 43#include "lluictrlfactory.h"
44 44
45LLFloaterInspect* LLFloaterInspect::sInstance = NULL; 45LLFloaterInspect* LLFloaterInspect::sInstance = NULL;
46 46
@@ -49,19 +49,19 @@ LLFloaterInspect::LLFloaterInspect(void) :
49 mDirty(FALSE) 49 mDirty(FALSE)
50{ 50{
51 sInstance = this; 51 sInstance = this;
52 gUICtrlFactory->buildFloater(this, "floater_inspect.xml"); 52 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_inspect.xml");
53} 53}
54 54
55LLFloaterInspect::~LLFloaterInspect(void) 55LLFloaterInspect::~LLFloaterInspect(void)
56{ 56{
57 if(!gFloaterTools->getVisible()) 57 if(!gFloaterTools->getVisible())
58 { 58 {
59 if(gToolMgr->getBaseTool() == gToolInspect) 59 if(LLToolMgr::getInstance()->getBaseTool() == LLToolCompInspect::getInstance())
60 { 60 {
61 gToolMgr->clearTransientTool(); 61 LLToolMgr::getInstance()->clearTransientTool();
62 } 62 }
63 // Switch back to basic toolset 63 // Switch back to basic toolset
64 gToolMgr->setCurrentToolset(gBasicToolset); 64 LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
65 } 65 }
66 else 66 else
67 { 67 {
@@ -80,7 +80,7 @@ void LLFloaterInspect::show(void* ignored)
80 // setForceSelection ensures that the pie menu does not deselect things when it 80 // setForceSelection ensures that the pie menu does not deselect things when it
81 // looses the focus (this can happen with "select own objects only" enabled 81 // looses the focus (this can happen with "select own objects only" enabled
82 // VWR-1471 82 // VWR-1471
83 BOOL forcesel = gSelectMgr->setForceSelection(TRUE); 83 BOOL forcesel = LLSelectMgr::getInstance()->setForceSelection(TRUE);
84 84
85 if (!sInstance) // first use 85 if (!sInstance) // first use
86 { 86 {
@@ -88,10 +88,10 @@ void LLFloaterInspect::show(void* ignored)
88 } 88 }
89 89
90 sInstance->open(); 90 sInstance->open();
91 gToolMgr->setTransientTool(gToolInspect); 91 LLToolMgr::getInstance()->setTransientTool(LLToolCompInspect::getInstance());
92 gSelectMgr->setForceSelection(forcesel); // restore previouis value 92 LLSelectMgr::getInstance()->setForceSelection(forcesel); // restore previouis value
93 93
94 sInstance->mObjectSelection = gSelectMgr->getSelection(); 94 sInstance->mObjectSelection = LLSelectMgr::getInstance()->getSelection();
95 sInstance->refresh(); 95 sInstance->refresh();
96} 96}
97 97
@@ -152,7 +152,7 @@ void LLFloaterInspect::onClickOwnerProfile(void* ctrl)
152 152
153BOOL LLFloaterInspect::postBuild() 153BOOL LLFloaterInspect::postBuild()
154{ 154{
155 mObjectList = LLUICtrlFactory::getScrollListByName(this, "object_list"); 155 mObjectList = getChild<LLScrollListCtrl>("object_list");
156 childSetAction("button owner",onClickOwnerProfile, this); 156 childSetAction("button owner",onClickOwnerProfile, this);
157 childSetAction("button creator",onClickCreatorProfile, this); 157 childSetAction("button creator",onClickCreatorProfile, this);
158 childSetCommitCallback("object_list", onSelectObject); 158 childSetCommitCallback("object_list", onSelectObject);
@@ -256,7 +256,7 @@ void LLFloaterInspect::refresh()
256 256
257void LLFloaterInspect::onFocusReceived() 257void LLFloaterInspect::onFocusReceived()
258{ 258{
259 gToolMgr->setTransientTool(gToolInspect); 259 LLToolMgr::getInstance()->setTransientTool(LLToolCompInspect::getInstance());
260 LLFloater::onFocusReceived(); 260 LLFloater::onFocusReceived();
261} 261}
262 262
diff --git a/linden/indra/newview/llfloaterjoystick.cpp b/linden/indra/newview/llfloaterjoystick.cpp
new file mode 100644
index 0000000..5323b35
--- /dev/null
+++ b/linden/indra/newview/llfloaterjoystick.cpp
@@ -0,0 +1,272 @@
1/**
2 * @file llfloaterjoystick.cpp
3 * @brief Joystick preferences panel
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#include "llviewerprecompiledheaders.h"
33
34// file include
35#include "llfloaterjoystick.h"
36
37// linden library includes
38#include "llerror.h"
39#include "llrect.h"
40#include "llstring.h"
41
42// project includes
43#include "lluictrlfactory.h"
44#include "llviewercontrol.h"
45#include "llappviewer.h"
46#include "llviewerjoystick.h"
47
48LLFloaterJoystick::LLFloaterJoystick(const LLSD& data)
49 : LLFloater("floater_joystick")
50{
51 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_joystick.xml");
52 center();
53}
54
55void LLFloaterJoystick::draw()
56{
57 bool joystick_inited = LLViewerJoystick::getInstance()->isJoystickInitialized();
58 childSetEnabled("enable_joystick", joystick_inited);
59 childSetEnabled("joystick_type", joystick_inited);
60 std::string desc = LLViewerJoystick::getInstance()->getDescription();
61 if (desc.empty()) desc = getUIString("NoDevice");
62 childSetText("joystick_type", desc);
63
64 LLViewerJoystick* joystick(LLViewerJoystick::getInstance());
65 for (U32 i = 0; i < 6; i++)
66 {
67 F32 value = joystick->getJoystickAxis(i);
68 mAxisStats[i]->addValue(value * gFrameIntervalSeconds);
69
70 if (mAxisStatsBar[i]->mMinBar > value)
71 {
72 mAxisStatsBar[i]->mMinBar = value;
73 }
74 if (mAxisStatsBar[i]->mMaxBar < value)
75 {
76 mAxisStatsBar[i]->mMaxBar = value;
77 }
78 }
79
80 LLFloater::draw();
81}
82
83BOOL LLFloaterJoystick::postBuild()
84{
85 F32 range = gSavedSettings.getBOOL("Cursor3D") ? 1024.f : 2.f;
86 LLUIString axis = getUIString("Axis");
87 LLUIString joystick = getUIString("JoystickMonitor");
88
89 // use this child to get relative positioning info; we'll place the
90 // joystick monitor on its right, vertically aligned to it.
91 LLView* child = getChild<LLView>("FlycamAxisScale1");
92 LLRect rect;
93
94 if (child)
95 {
96 LLRect r = child->getRect();
97 LLRect f = getRect();
98 rect = LLRect(350, r.mTop, r.mRight + 200, 0);
99 }
100
101 mAxisStatsView = new LLStatView("axis values", joystick, "", rect);
102 mAxisStatsView->setDisplayChildren(TRUE);
103
104 for (U32 i = 0; i < 6; i++)
105 {
106 axis.setArg("[NUM]", llformat("%d", i));
107 mAxisStats[i] = new LLStat(4);
108 mAxisStatsBar[i] = mAxisStatsView->addStat(axis, mAxisStats[i]);
109 mAxisStatsBar[i]->mMinBar = -range;
110 mAxisStatsBar[i]->mMaxBar = range;
111 mAxisStatsBar[i]->mLabelSpacing = range * 0.5f;
112 mAxisStatsBar[i]->mTickSpacing = range * 0.25f;
113 }
114
115 addChild(mAxisStatsView);
116
117 childSetAction("SpaceNavigatorDefaults", onClickRestoreSNDefaults, this);
118 refresh();
119 return TRUE;
120}
121
122LLFloaterJoystick::~LLFloaterJoystick()
123{
124 // Children all cleaned up by default view destructor.
125}
126
127
128void LLFloaterJoystick::apply()
129{
130}
131
132void LLFloaterJoystick::refresh()
133{
134 LLFloater::refresh();
135
136 mJoystickAxis[0] = gSavedSettings.getS32("JoystickAxis0");
137 mJoystickAxis[1] = gSavedSettings.getS32("JoystickAxis1");
138 mJoystickAxis[2] = gSavedSettings.getS32("JoystickAxis2");
139 mJoystickAxis[3] = gSavedSettings.getS32("JoystickAxis3");
140 mJoystickAxis[4] = gSavedSettings.getS32("JoystickAxis4");
141 mJoystickAxis[5] = gSavedSettings.getS32("JoystickAxis5");
142 mJoystickAxis[6] = gSavedSettings.getS32("JoystickAxis6");
143
144 m3DCursor = gSavedSettings.getBOOL("Cursor3D");
145 mAutoLeveling = gSavedSettings.getBOOL("AutoLeveling");
146 mZoomDirect = gSavedSettings.getBOOL("ZoomDirect");
147
148 mAvatarAxisScale[0] = gSavedSettings.getF32("AvatarAxisScale0");
149 mAvatarAxisScale[1] = gSavedSettings.getF32("AvatarAxisScale1");
150 mAvatarAxisScale[2] = gSavedSettings.getF32("AvatarAxisScale2");
151 mAvatarAxisScale[3] = gSavedSettings.getF32("AvatarAxisScale3");
152 mAvatarAxisScale[4] = gSavedSettings.getF32("AvatarAxisScale4");
153 mAvatarAxisScale[5] = gSavedSettings.getF32("AvatarAxisScale5");
154
155 mBuildAxisScale[0] = gSavedSettings.getF32("BuildAxisScale0");
156 mBuildAxisScale[1] = gSavedSettings.getF32("BuildAxisScale1");
157 mBuildAxisScale[2] = gSavedSettings.getF32("BuildAxisScale2");
158 mBuildAxisScale[3] = gSavedSettings.getF32("BuildAxisScale3");
159 mBuildAxisScale[4] = gSavedSettings.getF32("BuildAxisScale4");
160 mBuildAxisScale[5] = gSavedSettings.getF32("BuildAxisScale5");
161
162 mFlycamAxisScale[0] = gSavedSettings.getF32("FlycamAxisScale0");
163 mFlycamAxisScale[1] = gSavedSettings.getF32("FlycamAxisScale1");
164 mFlycamAxisScale[2] = gSavedSettings.getF32("FlycamAxisScale2");
165 mFlycamAxisScale[3] = gSavedSettings.getF32("FlycamAxisScale3");
166 mFlycamAxisScale[4] = gSavedSettings.getF32("FlycamAxisScale4");
167 mFlycamAxisScale[5] = gSavedSettings.getF32("FlycamAxisScale5");
168 mFlycamAxisScale[6] = gSavedSettings.getF32("FlycamAxisScale6");
169
170 mAvatarAxisDeadZone[0] = gSavedSettings.getF32("AvatarAxisDeadZone0");
171 mAvatarAxisDeadZone[1] = gSavedSettings.getF32("AvatarAxisDeadZone1");
172 mAvatarAxisDeadZone[2] = gSavedSettings.getF32("AvatarAxisDeadZone2");
173 mAvatarAxisDeadZone[3] = gSavedSettings.getF32("AvatarAxisDeadZone3");
174 mAvatarAxisDeadZone[4] = gSavedSettings.getF32("AvatarAxisDeadZone4");
175 mAvatarAxisDeadZone[5] = gSavedSettings.getF32("AvatarAxisDeadZone5");
176
177 mBuildAxisDeadZone[0] = gSavedSettings.getF32("BuildAxisDeadZone0");
178 mBuildAxisDeadZone[1] = gSavedSettings.getF32("BuildAxisDeadZone1");
179 mBuildAxisDeadZone[2] = gSavedSettings.getF32("BuildAxisDeadZone2");
180 mBuildAxisDeadZone[3] = gSavedSettings.getF32("BuildAxisDeadZone3");
181 mBuildAxisDeadZone[4] = gSavedSettings.getF32("BuildAxisDeadZone4");
182 mBuildAxisDeadZone[5] = gSavedSettings.getF32("BuildAxisDeadZone5");
183
184 mFlycamAxisDeadZone[0] = gSavedSettings.getF32("FlycamAxisDeadZone0");
185 mFlycamAxisDeadZone[1] = gSavedSettings.getF32("FlycamAxisDeadZone1");
186 mFlycamAxisDeadZone[2] = gSavedSettings.getF32("FlycamAxisDeadZone2");
187 mFlycamAxisDeadZone[3] = gSavedSettings.getF32("FlycamAxisDeadZone3");
188 mFlycamAxisDeadZone[4] = gSavedSettings.getF32("FlycamAxisDeadZone4");
189 mFlycamAxisDeadZone[5] = gSavedSettings.getF32("FlycamAxisDeadZone5");
190 mFlycamAxisDeadZone[6] = gSavedSettings.getF32("FlycamAxisDeadZone6");
191
192 mAvatarFeathering = gSavedSettings.getF32("AvatarFeathering");
193 mBuildFeathering = gSavedSettings.getF32("BuildFeathering");
194 mFlycamFeathering = gSavedSettings.getF32("FlycamFeathering");
195}
196
197void LLFloaterJoystick::cancel()
198{
199 llinfos << "reading from gSavedSettings->Cursor3D="
200 << gSavedSettings.getBOOL("Cursor3D") << "; m3DCursor="
201 << m3DCursor << llendl;
202
203 gSavedSettings.setS32("JoystickAxis0", mJoystickAxis[0]);
204 gSavedSettings.setS32("JoystickAxis1", mJoystickAxis[1]);
205 gSavedSettings.setS32("JoystickAxis2", mJoystickAxis[2]);
206 gSavedSettings.setS32("JoystickAxis3", mJoystickAxis[3]);
207 gSavedSettings.setS32("JoystickAxis4", mJoystickAxis[4]);
208 gSavedSettings.setS32("JoystickAxis5", mJoystickAxis[5]);
209 gSavedSettings.setS32("JoystickAxis6", mJoystickAxis[6]);
210
211 gSavedSettings.setBOOL("Cursor3D", m3DCursor);
212 gSavedSettings.setBOOL("AutoLeveling", mAutoLeveling);
213 gSavedSettings.setBOOL("ZoomDirect", mZoomDirect );
214
215 gSavedSettings.setF32("AvatarAxisScale0", mAvatarAxisScale[0]);
216 gSavedSettings.setF32("AvatarAxisScale1", mAvatarAxisScale[1]);
217 gSavedSettings.setF32("AvatarAxisScale2", mAvatarAxisScale[2]);
218 gSavedSettings.setF32("AvatarAxisScale3", mAvatarAxisScale[3]);
219 gSavedSettings.setF32("AvatarAxisScale4", mAvatarAxisScale[4]);
220 gSavedSettings.setF32("AvatarAxisScale5", mAvatarAxisScale[5]);
221
222 gSavedSettings.setF32("BuildAxisScale0", mBuildAxisScale[0]);
223 gSavedSettings.setF32("BuildAxisScale1", mBuildAxisScale[1]);
224 gSavedSettings.setF32("BuildAxisScale2", mBuildAxisScale[2]);
225 gSavedSettings.setF32("BuildAxisScale3", mBuildAxisScale[3]);
226 gSavedSettings.setF32("BuildAxisScale4", mBuildAxisScale[4]);
227 gSavedSettings.setF32("BuildAxisScale5", mBuildAxisScale[5]);
228
229 gSavedSettings.setF32("FlycamAxisScale0", mFlycamAxisScale[0]);
230 gSavedSettings.setF32("FlycamAxisScale1", mFlycamAxisScale[1]);
231 gSavedSettings.setF32("FlycamAxisScale2", mFlycamAxisScale[2]);
232 gSavedSettings.setF32("FlycamAxisScale3", mFlycamAxisScale[3]);
233 gSavedSettings.setF32("FlycamAxisScale4", mFlycamAxisScale[4]);
234 gSavedSettings.setF32("FlycamAxisScale5", mFlycamAxisScale[5]);
235 gSavedSettings.setF32("FlycamAxisScale6", mFlycamAxisScale[6]);
236
237 gSavedSettings.setF32("AvatarAxisDeadZone0", mAvatarAxisDeadZone[0]);
238 gSavedSettings.setF32("AvatarAxisDeadZone1", mAvatarAxisDeadZone[1]);
239 gSavedSettings.setF32("AvatarAxisDeadZone2", mAvatarAxisDeadZone[2]);
240 gSavedSettings.setF32("AvatarAxisDeadZone3", mAvatarAxisDeadZone[3]);
241 gSavedSettings.setF32("AvatarAxisDeadZone4", mAvatarAxisDeadZone[4]);
242 gSavedSettings.setF32("AvatarAxisDeadZone5", mAvatarAxisDeadZone[5]);
243
244 gSavedSettings.setF32("BuildAxisDeadZone0", mBuildAxisDeadZone[0]);
245 gSavedSettings.setF32("BuildAxisDeadZone1", mBuildAxisDeadZone[1]);
246 gSavedSettings.setF32("BuildAxisDeadZone2", mBuildAxisDeadZone[2]);
247 gSavedSettings.setF32("BuildAxisDeadZone3", mBuildAxisDeadZone[3]);
248 gSavedSettings.setF32("BuildAxisDeadZone4", mBuildAxisDeadZone[4]);
249 gSavedSettings.setF32("BuildAxisDeadZone5", mBuildAxisDeadZone[5]);
250
251 gSavedSettings.setF32("FlycamAxisDeadZone0", mFlycamAxisDeadZone[0]);
252 gSavedSettings.setF32("FlycamAxisDeadZone1", mFlycamAxisDeadZone[1]);
253 gSavedSettings.setF32("FlycamAxisDeadZone2", mFlycamAxisDeadZone[2]);
254 gSavedSettings.setF32("FlycamAxisDeadZone3", mFlycamAxisDeadZone[3]);
255 gSavedSettings.setF32("FlycamAxisDeadZone4", mFlycamAxisDeadZone[4]);
256 gSavedSettings.setF32("FlycamAxisDeadZone5", mFlycamAxisDeadZone[5]);
257 gSavedSettings.setF32("FlycamAxisDeadZone6", mFlycamAxisDeadZone[6]);
258
259 gSavedSettings.setF32("AvatarFeathering", mAvatarFeathering);
260 gSavedSettings.setF32("BuildFeathering", mBuildFeathering);
261 gSavedSettings.setF32("FlycamFeathering", mFlycamFeathering);
262}
263
264void LLFloaterJoystick::onClickRestoreSNDefaults(void *joy_panel)
265{
266 setSNDefaults();
267}
268
269void LLFloaterJoystick::setSNDefaults()
270{
271 LLViewerJoystick::getInstance()->setSNDefaults();
272}
diff --git a/linden/indra/newview/llfloaterjoystick.h b/linden/indra/newview/llfloaterjoystick.h
new file mode 100644
index 0000000..b35b39f
--- /dev/null
+++ b/linden/indra/newview/llfloaterjoystick.h
@@ -0,0 +1,78 @@
1/**
2 * @file llfloaterjoystick.h
3 * @brief Joystick preferences panel
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_LLFLOATERJOYSTICK_H
33#define LL_LLFLOATERJOYSTICK_H
34
35#include "llfloater.h"
36#include "llstatview.h"
37
38class LLFloaterJoystick : public LLFloater, public LLFloaterSingleton<LLFloaterJoystick >
39{
40public:
41 LLFloaterJoystick(const LLSD& data);
42 virtual ~LLFloaterJoystick();
43
44 virtual BOOL postBuild();
45 virtual void refresh();
46 virtual void apply(); // Apply the changed values.
47 virtual void cancel(); // Cancel the changed values.
48 virtual void draw();
49 static void setSNDefaults();
50
51private:
52 static void onClickRestoreSNDefaults(void*);
53
54private:
55 // Device prefs
56 S32 mJoystickAxis[7];
57 bool m3DCursor;
58 bool mAutoLeveling;
59 bool mZoomDirect;
60
61 // Modes prefs
62 F32 mAvatarAxisScale[6];
63 F32 mBuildAxisScale[6];
64 F32 mFlycamAxisScale[7];
65 F32 mAvatarAxisDeadZone[6];
66 F32 mBuildAxisDeadZone[6];
67 F32 mFlycamAxisDeadZone[7];
68 F32 mAvatarFeathering;
69 F32 mBuildFeathering;
70 F32 mFlycamFeathering;
71
72 // stats view
73 LLStatView* mAxisStatsView;
74 LLStat* mAxisStats[6];
75 LLStatBar* mAxisStatsBar[6];
76};
77
78#endif
diff --git a/linden/indra/newview/llfloaterlagmeter.cpp b/linden/indra/newview/llfloaterlagmeter.cpp
index 4acc524..f43427c 100644
--- a/linden/indra/newview/llfloaterlagmeter.cpp
+++ b/linden/indra/newview/llfloaterlagmeter.cpp
@@ -33,7 +33,7 @@
33 33
34#include "llfloaterlagmeter.h" 34#include "llfloaterlagmeter.h"
35 35
36#include "llvieweruictrlfactory.h" 36#include "lluictrlfactory.h"
37#include "llviewerstats.h" 37#include "llviewerstats.h"
38#include "llviewerimage.h" 38#include "llviewerimage.h"
39#include "llviewercontrol.h" 39#include "llviewercontrol.h"
@@ -49,28 +49,26 @@ const LLString LAG_CRITICAL_IMAGE_NAME = "lag_status_critical.tga";
49const LLString LAG_WARNING_IMAGE_NAME = "lag_status_warning.tga"; 49const LLString LAG_WARNING_IMAGE_NAME = "lag_status_warning.tga";
50const LLString LAG_GOOD_IMAGE_NAME = "lag_status_good.tga"; 50const LLString LAG_GOOD_IMAGE_NAME = "lag_status_good.tga";
51 51
52LLFloaterLagMeter * LLFloaterLagMeter::sInstance = NULL; 52LLFloaterLagMeter::LLFloaterLagMeter(const LLSD& key)
53
54LLFloaterLagMeter::LLFloaterLagMeter()
55 : LLFloater("floater_lagmeter") 53 : LLFloater("floater_lagmeter")
56{ 54{
57 gUICtrlFactory->buildFloater(this, "floater_lagmeter.xml"); 55 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_lagmeter.xml");
58 56
59 // Don't let this window take keyboard focus -- it's confusing to 57 // Don't let this window take keyboard focus -- it's confusing to
60 // lose arrow-key driving when testing lag. 58 // lose arrow-key driving when testing lag.
61 setIsChrome(TRUE); 59 setIsChrome(TRUE);
62 60
63 mClientButton = LLUICtrlFactory::getButtonByName(this, "client_lagmeter"); 61 mClientButton = getChild<LLButton>("client_lagmeter");
64 mClientText = LLUICtrlFactory::getTextBoxByName(this, "client_text"); 62 mClientText = getChild<LLTextBox>("client_text");
65 mClientCause = LLUICtrlFactory::getTextBoxByName(this, "client_lag_cause"); 63 mClientCause = getChild<LLTextBox>("client_lag_cause");
66 64
67 mNetworkButton = LLUICtrlFactory::getButtonByName(this, "network_lagmeter"); 65 mNetworkButton = getChild<LLButton>("network_lagmeter");
68 mNetworkText = LLUICtrlFactory::getTextBoxByName(this, "network_text"); 66 mNetworkText = getChild<LLTextBox>("network_text");
69 mNetworkCause = LLUICtrlFactory::getTextBoxByName(this, "network_lag_cause"); 67 mNetworkCause = getChild<LLTextBox>("network_lag_cause");
70 68
71 mServerButton = LLUICtrlFactory::getButtonByName(this, "server_lagmeter"); 69 mServerButton = getChild<LLButton>("server_lagmeter");
72 mServerText = LLUICtrlFactory::getTextBoxByName(this, "server_text"); 70 mServerText = getChild<LLTextBox>("server_text");
73 mServerCause = LLUICtrlFactory::getTextBoxByName(this, "server_lag_cause"); 71 mServerCause = getChild<LLTextBox>("server_lag_cause");
74 72
75 LLString config_string = getString("client_frame_rate_critical_fps", mStringArgs); 73 LLString config_string = getString("client_frame_rate_critical_fps", mStringArgs);
76 mClientFrameTimeCritical = 1.0f / (float)atof( config_string.c_str() ); 74 mClientFrameTimeCritical = 1.0f / (float)atof( config_string.c_str() );
@@ -127,8 +125,6 @@ LLFloaterLagMeter::LLFloaterLagMeter()
127 125
128LLFloaterLagMeter::~LLFloaterLagMeter() 126LLFloaterLagMeter::~LLFloaterLagMeter()
129{ 127{
130 sInstance = NULL;
131
132 // save shrunk status for next time 128 // save shrunk status for next time
133 gSavedSettings.setBOOL("LagMeterShrunk", mShrunk); 129 gSavedSettings.setBOOL("LagMeterShrunk", mShrunk);
134 // expand so we save the large window rectangle 130 // expand so we save the large window rectangle
@@ -147,16 +143,9 @@ void LLFloaterLagMeter::draw()
147 LLFloater::draw(); 143 LLFloater::draw();
148} 144}
149 145
150//static
151void LLFloaterLagMeter::show(void *data)
152{
153 if(!sInstance) sInstance = new LLFloaterLagMeter();
154 sInstance->open();
155}
156
157void LLFloaterLagMeter::determineClient() 146void LLFloaterLagMeter::determineClient()
158{ 147{
159 F32 client_frame_time = gViewerStats->mFPSStat.getMeanDuration(); 148 F32 client_frame_time = LLViewerStats::getInstance()->mFPSStat.getMeanDuration();
160 bool find_cause = false; 149 bool find_cause = false;
161 150
162 if (!gFocusMgr.getAppHasFocus()) 151 if (!gFocusMgr.getAppHasFocus())
@@ -207,8 +196,8 @@ void LLFloaterLagMeter::determineClient()
207 196
208void LLFloaterLagMeter::determineNetwork() 197void LLFloaterLagMeter::determineNetwork()
209{ 198{
210 F32 packet_loss = gViewerStats->mPacketsLostPercentStat.getMean(); 199 F32 packet_loss = LLViewerStats::getInstance()->mPacketsLostPercentStat.getMean();
211 F32 ping_time = gViewerStats->mSimPingStat.getMean(); 200 F32 ping_time = LLViewerStats::getInstance()->mSimPingStat.getMean();
212 bool find_cause_loss = false; 201 bool find_cause_loss = false;
213 bool find_cause_ping = false; 202 bool find_cause_ping = false;
214 203
@@ -258,7 +247,7 @@ void LLFloaterLagMeter::determineNetwork()
258 247
259void LLFloaterLagMeter::determineServer() 248void LLFloaterLagMeter::determineServer()
260{ 249{
261 F32 sim_frame_time = gViewerStats->mSimFrameMsec.getCurrent(); 250 F32 sim_frame_time = LLViewerStats::getInstance()->mSimFrameMsec.getCurrent();
262 bool find_cause = false; 251 bool find_cause = false;
263 252
264 if(sim_frame_time >= mServerFrameTimeCritical) 253 if(sim_frame_time >= mServerFrameTimeCritical)
@@ -282,23 +271,23 @@ void LLFloaterLagMeter::determineServer()
282 271
283 if(find_cause) 272 if(find_cause)
284 { 273 {
285 if(gViewerStats->mSimSimPhysicsMsec.getCurrent() > mServerSingleProcessMaxTime) 274 if(LLViewerStats::getInstance()->mSimSimPhysicsMsec.getCurrent() > mServerSingleProcessMaxTime)
286 { 275 {
287 mServerCause->setText( getString("server_physics_cause_msg", mStringArgs) ); 276 mServerCause->setText( getString("server_physics_cause_msg", mStringArgs) );
288 } 277 }
289 else if(gViewerStats->mSimScriptMsec.getCurrent() > mServerSingleProcessMaxTime) 278 else if(LLViewerStats::getInstance()->mSimScriptMsec.getCurrent() > mServerSingleProcessMaxTime)
290 { 279 {
291 mServerCause->setText( getString("server_scripts_cause_msg", mStringArgs) ); 280 mServerCause->setText( getString("server_scripts_cause_msg", mStringArgs) );
292 } 281 }
293 else if(gViewerStats->mSimNetMsec.getCurrent() > mServerSingleProcessMaxTime) 282 else if(LLViewerStats::getInstance()->mSimNetMsec.getCurrent() > mServerSingleProcessMaxTime)
294 { 283 {
295 mServerCause->setText( getString("server_net_cause_msg", mStringArgs) ); 284 mServerCause->setText( getString("server_net_cause_msg", mStringArgs) );
296 } 285 }
297 else if(gViewerStats->mSimAgentMsec.getCurrent() > mServerSingleProcessMaxTime) 286 else if(LLViewerStats::getInstance()->mSimAgentMsec.getCurrent() > mServerSingleProcessMaxTime)
298 { 287 {
299 mServerCause->setText( getString("server_agent_cause_msg", mStringArgs) ); 288 mServerCause->setText( getString("server_agent_cause_msg", mStringArgs) );
300 } 289 }
301 else if(gViewerStats->mSimImagesMsec.getCurrent() > mServerSingleProcessMaxTime) 290 else if(LLViewerStats::getInstance()->mSimImagesMsec.getCurrent() > mServerSingleProcessMaxTime)
302 { 291 {
303 mServerCause->setText( getString("server_images_cause_msg", mStringArgs) ); 292 mServerCause->setText( getString("server_images_cause_msg", mStringArgs) );
304 } 293 }
diff --git a/linden/indra/newview/llfloaterlagmeter.h b/linden/indra/newview/llfloaterlagmeter.h
index ab29193..fe22bff 100644
--- a/linden/indra/newview/llfloaterlagmeter.h
+++ b/linden/indra/newview/llfloaterlagmeter.h
@@ -34,14 +34,15 @@
34 34
35#include "llfloater.h" 35#include "llfloater.h"
36 36
37class LLFloaterLagMeter : public LLFloater 37class LLFloaterLagMeter : public LLFloater, public LLFloaterSingleton<LLFloaterLagMeter>
38{ 38{
39 friend class LLUISingleton<LLFloaterLagMeter, VisibilityPolicy<LLFloater> >;
40
39public: 41public:
40 /*virtual*/ void draw(); 42 /*virtual*/ void draw();
41 static void show(void*);
42 43
43private: 44private:
44 LLFloaterLagMeter(); 45 LLFloaterLagMeter(const LLSD& key);
45 /*virtual*/ ~LLFloaterLagMeter(); 46 /*virtual*/ ~LLFloaterLagMeter();
46 47
47 void determineClient(); 48 void determineClient();
@@ -75,8 +76,6 @@ private:
75 LLTextBox * mServerCause; 76 LLTextBox * mServerCause;
76 77
77 LLString::format_map_t mStringArgs; 78 LLString::format_map_t mStringArgs;
78
79 static LLFloaterLagMeter * sInstance;
80}; 79};
81 80
82#endif 81#endif
diff --git a/linden/indra/newview/llfloaterland.cpp b/linden/indra/newview/llfloaterland.cpp
index c75917b..0150f44 100644
--- a/linden/indra/newview/llfloaterland.cpp
+++ b/linden/indra/newview/llfloaterland.cpp
@@ -60,7 +60,7 @@
60#include "lltextbox.h" 60#include "lltextbox.h"
61#include "lltexturectrl.h" 61#include "lltexturectrl.h"
62#include "lluiconstants.h" 62#include "lluiconstants.h"
63#include "llvieweruictrlfactory.h" 63#include "lluictrlfactory.h"
64#include "llviewermessage.h" 64#include "llviewermessage.h"
65#include "llviewerparcelmgr.h" 65#include "llviewerparcelmgr.h"
66#include "llviewerregion.h" 66#include "llviewerregion.h"
@@ -130,12 +130,12 @@ void send_parcel_select_objects(S32 parcel_local_id, S32 return_type,
130{ 130{
131 LLMessageSystem *msg = gMessageSystem; 131 LLMessageSystem *msg = gMessageSystem;
132 132
133 LLViewerRegion* region = gParcelMgr->getSelectionRegion(); 133 LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
134 if (!region) return; 134 if (!region) return;
135 135
136 // Since new highlight will be coming in, drop any highlights 136 // Since new highlight will be coming in, drop any highlights
137 // that exist right now. 137 // that exist right now.
138 gSelectMgr->unhighlightAll(); 138 LLSelectMgr::getInstance()->unhighlightAll();
139 139
140 msg->newMessageFast(_PREHASH_ParcelSelectObjects); 140 msg->newMessageFast(_PREHASH_ParcelSelectObjects);
141 msg->nextBlockFast(_PREHASH_AgentData); 141 msg->nextBlockFast(_PREHASH_AgentData);
@@ -191,9 +191,9 @@ void LLFloaterLand::onOpen()
191{ 191{
192 // Done automatically when the selected parcel's properties arrive 192 // Done automatically when the selected parcel's properties arrive
193 // (and hence we have the local id). 193 // (and hence we have the local id).
194 // gParcelMgr->sendParcelAccessListRequest(AL_ACCESS | AL_BAN | AL_RENTER); 194 // LLViewerParcelMgr::getInstance()->sendParcelAccessListRequest(AL_ACCESS | AL_BAN | AL_RENTER);
195 195
196 mParcel = gParcelMgr->getFloatingParcelSelection(); 196 mParcel = LLViewerParcelMgr::getInstance()->getFloatingParcelSelection();
197 197
198 // Refresh even if not over a region so we don't get an 198 // Refresh even if not over a region so we don't get an
199 // uninitialized dialog. The dialog is 0-region aware. 199 // uninitialized dialog. The dialog is 0-region aware.
@@ -204,12 +204,12 @@ void LLFloaterLand::onOpen()
204// virtual 204// virtual
205void LLFloaterLand::onClose(bool app_quitting) 205void LLFloaterLand::onClose(bool app_quitting)
206{ 206{
207 gParcelMgr->removeObserver( sObserver ); 207 LLViewerParcelMgr::getInstance()->removeObserver( sObserver );
208 delete sObserver; 208 delete sObserver;
209 sObserver = NULL; 209 sObserver = NULL;
210 210
211 // Might have been showing owned objects 211 // Might have been showing owned objects
212 gSelectMgr->unhighlightAll(); 212 LLSelectMgr::getInstance()->unhighlightAll();
213 213
214 // Save which panel we had open 214 // Save which panel we had open
215 sLastTab = mTabLand->getCurrentPanelIndex(); 215 sLastTab = mTabLand->getCurrentPanelIndex();
@@ -233,19 +233,18 @@ LLFloaterLand::LLFloaterLand(const LLSD& seed)
233 factory_map["land_media_panel"] = LLCallbackMap(createPanelLandMedia, this); 233 factory_map["land_media_panel"] = LLCallbackMap(createPanelLandMedia, this);
234 factory_map["land_access_panel"] = LLCallbackMap(createPanelLandAccess, this); 234 factory_map["land_access_panel"] = LLCallbackMap(createPanelLandAccess, this);
235 235
236 gUICtrlFactory->buildFloater(this, "floater_about_land.xml", &factory_map, false); 236 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_about_land.xml", &factory_map, false);
237 237
238 sObserver = new LLParcelSelectionObserver(); 238 sObserver = new LLParcelSelectionObserver();
239 gParcelMgr->addObserver( sObserver ); 239 LLViewerParcelMgr::getInstance()->addObserver( sObserver );
240} 240}
241 241
242BOOL LLFloaterLand::postBuild() 242BOOL LLFloaterLand::postBuild()
243{ 243{
244 LLTabContainer* tab = LLUICtrlFactory::getTabContainerByName(this, "landtab"); 244 LLTabContainer* tab = getChild<LLTabContainer>("landtab");
245 245
246 mTabLand = (LLTabContainer*) tab; 246 mTabLand = (LLTabContainer*) tab;
247 247
248
249 if (tab) 248 if (tab)
250 { 249 {
251 tab->selectTab(sLastTab); 250 tab->selectTab(sLastTab);
@@ -280,8 +279,6 @@ void* LLFloaterLand::createPanelLandGeneral(void* data)
280} 279}
281 280
282// static 281// static
283
284
285void* LLFloaterLand::createPanelLandCovenant(void* data) 282void* LLFloaterLand::createPanelLandCovenant(void* data)
286{ 283{
287 LLFloaterLand* self = (LLFloaterLand*)data; 284 LLFloaterLand* self = (LLFloaterLand*)data;
@@ -337,96 +334,96 @@ LLPanelLandGeneral::LLPanelLandGeneral(LLParcelSelectionHandle& parcel)
337BOOL LLPanelLandGeneral::postBuild() 334BOOL LLPanelLandGeneral::postBuild()
338{ 335{
339 336
340 mEditName = LLUICtrlFactory::getLineEditorByName(this, "Name"); 337 mEditName = getChild<LLLineEditor>("Name");
341 mEditName->setCommitCallback(onCommitAny); 338 mEditName->setCommitCallback(onCommitAny);
342 childSetPrevalidate("Name", LLLineEditor::prevalidatePrintableNotPipe); 339 childSetPrevalidate("Name", LLLineEditor::prevalidatePrintableNotPipe);
343 childSetUserData("Name", this); 340 childSetUserData("Name", this);
344 341
345 mEditDesc = LLUICtrlFactory::getTextEditorByName(this, "Description"); 342 mEditDesc = getChild<LLTextEditor>("Description");
346 mEditDesc->setCommitOnFocusLost(TRUE); 343 mEditDesc->setCommitOnFocusLost(TRUE);
347 mEditDesc->setCommitCallback(onCommitAny); 344 mEditDesc->setCommitCallback(onCommitAny);
348 childSetPrevalidate("Description", LLLineEditor::prevalidatePrintableNotPipe); 345 childSetPrevalidate("Description", LLLineEditor::prevalidatePrintableNotPipe);
349 childSetUserData("Description", this); 346 childSetUserData("Description", this);
350 347
351 348
352 mTextSalePending = LLUICtrlFactory::getTextBoxByName(this, "SalePending"); 349 mTextSalePending = getChild<LLTextBox>("SalePending");
353 mTextOwnerLabel = LLUICtrlFactory::getTextBoxByName(this, "Owner:"); 350 mTextOwnerLabel = getChild<LLTextBox>("Owner:");
354 mTextOwner = LLUICtrlFactory::getTextBoxByName(this, "OwnerText"); 351 mTextOwner = getChild<LLTextBox>("OwnerText");
355 352
356 353
357 mBtnProfile = LLUICtrlFactory::getButtonByName(this, "Profile..."); 354 mBtnProfile = getChild<LLButton>("Profile...");
358 mBtnProfile->setClickedCallback(onClickProfile, this); 355 mBtnProfile->setClickedCallback(onClickProfile, this);
359 356
360 357
361 mTextGroupLabel = LLUICtrlFactory::getTextBoxByName(this, "Group:"); 358 mTextGroupLabel = getChild<LLTextBox>("Group:");
362 mTextGroup = LLUICtrlFactory::getTextBoxByName(this, "GroupText"); 359 mTextGroup = getChild<LLTextBox>("GroupText");
363 360
364 361
365 mBtnSetGroup = LLUICtrlFactory::getButtonByName(this, "Set..."); 362 mBtnSetGroup = getChild<LLButton>("Set...");
366 mBtnSetGroup->setClickedCallback(onClickSetGroup, this); 363 mBtnSetGroup->setClickedCallback(onClickSetGroup, this);
367 364
368 365
369 366
370 mCheckDeedToGroup = LLUICtrlFactory::getCheckBoxByName(this, "check deed"); 367 mCheckDeedToGroup = getChild<LLCheckBoxCtrl>( "check deed");
371 childSetCommitCallback("check deed", onCommitAny, this); 368 childSetCommitCallback("check deed", onCommitAny, this);
372 369
373 370
374 mBtnDeedToGroup = LLUICtrlFactory::getButtonByName(this, "Deed..."); 371 mBtnDeedToGroup = getChild<LLButton>("Deed...");
375 mBtnDeedToGroup->setClickedCallback(onClickDeed, this); 372 mBtnDeedToGroup->setClickedCallback(onClickDeed, this);
376 373
377 374
378 mCheckContributeWithDeed = LLUICtrlFactory::getCheckBoxByName(this, "check contrib"); 375 mCheckContributeWithDeed = getChild<LLCheckBoxCtrl>( "check contrib");
379 childSetCommitCallback("check contrib", onCommitAny, this); 376 childSetCommitCallback("check contrib", onCommitAny, this);
380 377
381 378
382 379
383 mSaleInfoNotForSale = LLUICtrlFactory::getTextBoxByName(this, "Not for sale."); 380 mSaleInfoNotForSale = getChild<LLTextBox>("Not for sale.");
384 381
385 mSaleInfoForSale1 = LLUICtrlFactory::getTextBoxByName(this, "For Sale: Price L$[PRICE]."); 382 mSaleInfoForSale1 = getChild<LLTextBox>("For Sale: Price L$[PRICE].");
386 383
387 384
388 mBtnSellLand = LLUICtrlFactory::getButtonByName(this, "Sell Land..."); 385 mBtnSellLand = getChild<LLButton>("Sell Land...");
389 mBtnSellLand->setClickedCallback(onClickSellLand, this); 386 mBtnSellLand->setClickedCallback(onClickSellLand, this);
390 387
391 mSaleInfoForSale2 = LLUICtrlFactory::getTextBoxByName(this, "For sale to"); 388 mSaleInfoForSale2 = getChild<LLTextBox>("For sale to");
392 389
393 mSaleInfoForSaleObjects = LLUICtrlFactory::getTextBoxByName(this, "Sell with landowners objects in parcel."); 390 mSaleInfoForSaleObjects = getChild<LLTextBox>("Sell with landowners objects in parcel.");
394 391
395 mSaleInfoForSaleNoObjects = LLUICtrlFactory::getTextBoxByName(this, "Selling with no objects in parcel."); 392 mSaleInfoForSaleNoObjects = getChild<LLTextBox>("Selling with no objects in parcel.");
396 393
397 394
398 mBtnStopSellLand = LLUICtrlFactory::getButtonByName(this, "Cancel Land Sale"); 395 mBtnStopSellLand = getChild<LLButton>("Cancel Land Sale");
399 mBtnStopSellLand->setClickedCallback(onClickStopSellLand, this); 396 mBtnStopSellLand->setClickedCallback(onClickStopSellLand, this);
400 397
401 398
402 mTextClaimDateLabel = LLUICtrlFactory::getTextBoxByName(this, "Claimed:"); 399 mTextClaimDateLabel = getChild<LLTextBox>("Claimed:");
403 mTextClaimDate = LLUICtrlFactory::getTextBoxByName(this, "DateClaimText"); 400 mTextClaimDate = getChild<LLTextBox>("DateClaimText");
404 401
405 402
406 mTextPriceLabel = LLUICtrlFactory::getTextBoxByName(this, "PriceLabel"); 403 mTextPriceLabel = getChild<LLTextBox>("PriceLabel");
407 mTextPrice = LLUICtrlFactory::getTextBoxByName(this, "PriceText"); 404 mTextPrice = getChild<LLTextBox>("PriceText");
408 405
409 406
410 mTextDwell = LLUICtrlFactory::getTextBoxByName(this, "DwellText"); 407 mTextDwell = getChild<LLTextBox>("DwellText");
411 408
412 409
413 mBtnBuyLand = LLUICtrlFactory::getButtonByName(this, "Buy Land..."); 410 mBtnBuyLand = getChild<LLButton>("Buy Land...");
414 mBtnBuyLand->setClickedCallback(onClickBuyLand, (void*)&BUY_PERSONAL_LAND); 411 mBtnBuyLand->setClickedCallback(onClickBuyLand, (void*)&BUY_PERSONAL_LAND);
415 412
416 mBtnBuyGroupLand = LLUICtrlFactory::getButtonByName(this, "Buy For Group..."); 413 mBtnBuyGroupLand = getChild<LLButton>("Buy For Group...");
417 mBtnBuyGroupLand->setClickedCallback(onClickBuyLand, (void*)&BUY_GROUP_LAND); 414 mBtnBuyGroupLand->setClickedCallback(onClickBuyLand, (void*)&BUY_GROUP_LAND);
418 415
419 416
420 mBtnBuyPass = LLUICtrlFactory::getButtonByName(this, "Buy Pass..."); 417 mBtnBuyPass = getChild<LLButton>("Buy Pass...");
421 mBtnBuyPass->setClickedCallback(onClickBuyPass, this); 418 mBtnBuyPass->setClickedCallback(onClickBuyPass, this);
422 419
423 mBtnReleaseLand = LLUICtrlFactory::getButtonByName(this, "Abandon Land..."); 420 mBtnReleaseLand = getChild<LLButton>("Abandon Land...");
424 mBtnReleaseLand->setClickedCallback(onClickRelease, NULL); 421 mBtnReleaseLand->setClickedCallback(onClickRelease, NULL);
425 422
426 mBtnReclaimLand = LLUICtrlFactory::getButtonByName(this, "Reclaim Land..."); 423 mBtnReclaimLand = getChild<LLButton>("Reclaim Land...");
427 mBtnReclaimLand->setClickedCallback(onClickReclaim, NULL); 424 mBtnReclaimLand->setClickedCallback(onClickReclaim, NULL);
428 425
429 mBtnStartAuction = LLUICtrlFactory::getButtonByName(this, "Linden Sale..."); 426 mBtnStartAuction = getChild<LLButton>("Linden Sale...");
430 mBtnStartAuction->setClickedCallback(onClickStartAuction, NULL); 427 mBtnStartAuction->setClickedCallback(onClickStartAuction, NULL);
431 428
432 return TRUE; 429 return TRUE;
@@ -445,7 +442,7 @@ void LLPanelLandGeneral::refresh()
445 442
446 LLParcel *parcel = mParcel->getParcel(); 443 LLParcel *parcel = mParcel->getParcel();
447 bool region_owner = false; 444 bool region_owner = false;
448 LLViewerRegion* regionp = gParcelMgr->getSelectionRegion(); 445 LLViewerRegion* regionp = LLViewerParcelMgr::getInstance()->getSelectionRegion();
449 if(regionp && (regionp->getOwner() == gAgent.getID())) 446 if(regionp && (regionp->getOwner() == gAgent.getID()))
450 { 447 {
451 region_owner = true; 448 region_owner = true;
@@ -672,16 +669,16 @@ void LLPanelLandGeneral::refresh()
672 refreshNames(); 669 refreshNames();
673 670
674 mBtnBuyLand->setEnabled( 671 mBtnBuyLand->setEnabled(
675 gParcelMgr->canAgentBuyParcel(parcel, false)); 672 LLViewerParcelMgr::getInstance()->canAgentBuyParcel(parcel, false));
676 mBtnBuyGroupLand->setEnabled( 673 mBtnBuyGroupLand->setEnabled(
677 gParcelMgr->canAgentBuyParcel(parcel, true)); 674 LLViewerParcelMgr::getInstance()->canAgentBuyParcel(parcel, true));
678 675
679 // show pricing information 676 // show pricing information
680 S32 area; 677 S32 area;
681 S32 claim_price; 678 S32 claim_price;
682 S32 rent_price; 679 S32 rent_price;
683 F32 dwell; 680 F32 dwell;
684 gParcelMgr->getDisplayInfo(&area, 681 LLViewerParcelMgr::getInstance()->getDisplayInfo(&area,
685 &claim_price, 682 &claim_price,
686 &rent_price, 683 &rent_price,
687 &for_sale, 684 &for_sale,
@@ -710,7 +707,7 @@ void LLPanelLandGeneral::refresh()
710 mBtnReleaseLand->setEnabled( can_release ); 707 mBtnReleaseLand->setEnabled( can_release );
711 } 708 }
712 709
713 BOOL use_pass = parcel->getParcelFlag(PF_USE_PASS_LIST) && !gParcelMgr->isCollisionBanned();; 710 BOOL use_pass = parcel->getParcelFlag(PF_USE_PASS_LIST) && !LLViewerParcelMgr::getInstance()->isCollisionBanned();;
714 mBtnBuyPass->setEnabled(use_pass); 711 mBtnBuyPass->setEnabled(use_pass);
715 } 712 }
716} 713}
@@ -827,7 +824,7 @@ void LLPanelLandGeneral::setGroup(const LLUUID& group_id)
827 //mTextGroup->setText(group_name); 824 //mTextGroup->setText(group_name);
828 825
829 // Send update 826 // Send update
830 gParcelMgr->sendParcelPropertiesUpdate(parcel); 827 LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate(parcel);
831 828
832 // Update UI 829 // Update UI
833 refresh(); 830 refresh();
@@ -837,7 +834,7 @@ void LLPanelLandGeneral::setGroup(const LLUUID& group_id)
837void LLPanelLandGeneral::onClickBuyLand(void* data) 834void LLPanelLandGeneral::onClickBuyLand(void* data)
838{ 835{
839 BOOL* for_group = (BOOL*)data; 836 BOOL* for_group = (BOOL*)data;
840 gParcelMgr->startBuyLand(*for_group); 837 LLViewerParcelMgr::getInstance()->startBuyLand(*for_group);
841} 838}
842 839
843BOOL LLPanelLandGeneral::enableDeedToGroup(void* data) 840BOOL LLPanelLandGeneral::enableDeedToGroup(void* data)
@@ -853,29 +850,29 @@ void LLPanelLandGeneral::onClickDeed(void*)
853 //LLParcel* parcel = mParcel->getParcel(); 850 //LLParcel* parcel = mParcel->getParcel();
854 //if (parcel) 851 //if (parcel)
855 //{ 852 //{
856 gParcelMgr->startDeedLandToGroup(); 853 LLViewerParcelMgr::getInstance()->startDeedLandToGroup();
857 //} 854 //}
858} 855}
859 856
860// static 857// static
861void LLPanelLandGeneral::onClickRelease(void*) 858void LLPanelLandGeneral::onClickRelease(void*)
862{ 859{
863 gParcelMgr->startReleaseLand(); 860 LLViewerParcelMgr::getInstance()->startReleaseLand();
864} 861}
865 862
866// static 863// static
867void LLPanelLandGeneral::onClickReclaim(void*) 864void LLPanelLandGeneral::onClickReclaim(void*)
868{ 865{
869 lldebugs << "LLPanelLandGeneral::onClickReclaim()" << llendl; 866 lldebugs << "LLPanelLandGeneral::onClickReclaim()" << llendl;
870 gParcelMgr->reclaimParcel(); 867 LLViewerParcelMgr::getInstance()->reclaimParcel();
871} 868}
872 869
873// static 870// static
874BOOL LLPanelLandGeneral::enableBuyPass(void* data) 871BOOL LLPanelLandGeneral::enableBuyPass(void* data)
875{ 872{
876 LLPanelLandGeneral* panelp = (LLPanelLandGeneral*)data; 873 LLPanelLandGeneral* panelp = (LLPanelLandGeneral*)data;
877 LLParcel* parcel = panelp != NULL ? panelp->mParcel->getParcel() : gParcelMgr->getParcelSelection()->getParcel(); 874 LLParcel* parcel = panelp != NULL ? panelp->mParcel->getParcel() : LLViewerParcelMgr::getInstance()->getParcelSelection()->getParcel();
878 return (parcel != NULL) && (parcel->getParcelFlag(PF_USE_PASS_LIST) && !gParcelMgr->isCollisionBanned()); 875 return (parcel != NULL) && (parcel->getParcelFlag(PF_USE_PASS_LIST) && !LLViewerParcelMgr::getInstance()->isCollisionBanned());
879} 876}
880 877
881 878
@@ -883,7 +880,7 @@ BOOL LLPanelLandGeneral::enableBuyPass(void* data)
883void LLPanelLandGeneral::onClickBuyPass(void* data) 880void LLPanelLandGeneral::onClickBuyPass(void* data)
884{ 881{
885 LLPanelLandGeneral* panelp = (LLPanelLandGeneral*)data; 882 LLPanelLandGeneral* panelp = (LLPanelLandGeneral*)data;
886 LLParcel* parcel = panelp != NULL ? panelp->mParcel->getParcel() : gParcelMgr->getParcelSelection()->getParcel(); 883 LLParcel* parcel = panelp != NULL ? panelp->mParcel->getParcel() : LLViewerParcelMgr::getInstance()->getParcelSelection()->getParcel();
887 884
888 if (!parcel) return; 885 if (!parcel) return;
889 886
@@ -927,7 +924,7 @@ void LLPanelLandGeneral::cbBuyPass(S32 option, void* data)
927 if (0 == option) 924 if (0 == option)
928 { 925 {
929 // User clicked OK 926 // User clicked OK
930 gParcelMgr->buyPass(); 927 LLViewerParcelMgr::getInstance()->buyPass();
931 } 928 }
932} 929}
933 930
@@ -965,7 +962,7 @@ void LLPanelLandGeneral::onCommitAny(LLUICtrl *ctrl, void *userdata)
965 parcel->setContributeWithDeed(contribute_with_deed); 962 parcel->setContributeWithDeed(contribute_with_deed);
966 963
967 // Send update to server 964 // Send update to server
968 gParcelMgr->sendParcelPropertiesUpdate( parcel ); 965 LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel );
969 966
970 // Might have changed properties, so let's redraw! 967 // Might have changed properties, so let's redraw!
971 panelp->refresh(); 968 panelp->refresh();
@@ -974,7 +971,7 @@ void LLPanelLandGeneral::onCommitAny(LLUICtrl *ctrl, void *userdata)
974// static 971// static
975void LLPanelLandGeneral::onClickSellLand(void* data) 972void LLPanelLandGeneral::onClickSellLand(void* data)
976{ 973{
977 gParcelMgr->startSellLand(); 974 LLViewerParcelMgr::getInstance()->startSellLand();
978} 975}
979 976
980// static 977// static
@@ -987,7 +984,7 @@ void LLPanelLandGeneral::onClickStopSellLand(void* data)
987 parcel->setSalePrice(0); 984 parcel->setSalePrice(0);
988 parcel->setAuthorizedBuyerID(LLUUID::null); 985 parcel->setAuthorizedBuyerID(LLUUID::null);
989 986
990 gParcelMgr->sendParcelPropertiesUpdate(parcel); 987 LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate(parcel);
991} 988}
992 989
993//--------------------------------------------------------------------------- 990//---------------------------------------------------------------------------
@@ -1004,34 +1001,34 @@ BOOL LLPanelLandObjects::postBuild()
1004{ 1001{
1005 1002
1006 mFirstReply = TRUE; 1003 mFirstReply = TRUE;
1007 mParcelObjectBonus = LLUICtrlFactory::getTextBoxByName(this, "parcel_object_bonus"); 1004 mParcelObjectBonus = getChild<LLTextBox>("parcel_object_bonus");
1008 mSWTotalObjects = LLUICtrlFactory::getTextBoxByName(this, "objects_available"); 1005 mSWTotalObjects = getChild<LLTextBox>("objects_available");
1009 mObjectContribution = LLUICtrlFactory::getTextBoxByName(this, "object_contrib_text"); 1006 mObjectContribution = getChild<LLTextBox>("object_contrib_text");
1010 mTotalObjects = LLUICtrlFactory::getTextBoxByName(this, "total_objects_text"); 1007 mTotalObjects = getChild<LLTextBox>("total_objects_text");
1011 mOwnerObjects = LLUICtrlFactory::getTextBoxByName(this, "owner_objects_text"); 1008 mOwnerObjects = getChild<LLTextBox>("owner_objects_text");
1012 1009
1013 mBtnShowOwnerObjects = LLUICtrlFactory::getButtonByName(this, "ShowOwner"); 1010 mBtnShowOwnerObjects = getChild<LLButton>("ShowOwner");
1014 mBtnShowOwnerObjects->setClickedCallback(onClickShowOwnerObjects, this); 1011 mBtnShowOwnerObjects->setClickedCallback(onClickShowOwnerObjects, this);
1015 1012
1016 mBtnReturnOwnerObjects = LLUICtrlFactory::getButtonByName(this, "ReturnOwner..."); 1013 mBtnReturnOwnerObjects = getChild<LLButton>("ReturnOwner...");
1017 mBtnReturnOwnerObjects->setClickedCallback(onClickReturnOwnerObjects, this); 1014 mBtnReturnOwnerObjects->setClickedCallback(onClickReturnOwnerObjects, this);
1018 1015
1019 mGroupObjects = LLUICtrlFactory::getTextBoxByName(this, "group_objects_text"); 1016 mGroupObjects = getChild<LLTextBox>("group_objects_text");
1020 mBtnShowGroupObjects = LLUICtrlFactory::getButtonByName(this, "ShowGroup"); 1017 mBtnShowGroupObjects = getChild<LLButton>("ShowGroup");
1021 mBtnShowGroupObjects->setClickedCallback(onClickShowGroupObjects, this); 1018 mBtnShowGroupObjects->setClickedCallback(onClickShowGroupObjects, this);
1022 1019
1023 mBtnReturnGroupObjects = LLUICtrlFactory::getButtonByName(this, "ReturnGroup..."); 1020 mBtnReturnGroupObjects = getChild<LLButton>("ReturnGroup...");
1024 mBtnReturnGroupObjects->setClickedCallback(onClickReturnGroupObjects, this); 1021 mBtnReturnGroupObjects->setClickedCallback(onClickReturnGroupObjects, this);
1025 1022
1026 mOtherObjects = LLUICtrlFactory::getTextBoxByName(this, "other_objects_text"); 1023 mOtherObjects = getChild<LLTextBox>("other_objects_text");
1027 mBtnShowOtherObjects = LLUICtrlFactory::getButtonByName(this, "ShowOther"); 1024 mBtnShowOtherObjects = getChild<LLButton>("ShowOther");
1028 mBtnShowOtherObjects->setClickedCallback(onClickShowOtherObjects, this); 1025 mBtnShowOtherObjects->setClickedCallback(onClickShowOtherObjects, this);
1029 1026
1030 mBtnReturnOtherObjects = LLUICtrlFactory::getButtonByName(this, "ReturnOther..."); 1027 mBtnReturnOtherObjects = getChild<LLButton>("ReturnOther...");
1031 mBtnReturnOtherObjects->setClickedCallback(onClickReturnOtherObjects, this); 1028 mBtnReturnOtherObjects->setClickedCallback(onClickReturnOtherObjects, this);
1032 1029
1033 mSelectedObjects = LLUICtrlFactory::getTextBoxByName(this, "selected_objects_text"); 1030 mSelectedObjects = getChild<LLTextBox>("selected_objects_text");
1034 mCleanOtherObjectsTime = LLUICtrlFactory::getLineEditorByName(this, "clean other time"); 1031 mCleanOtherObjectsTime = getChild<LLLineEditor>("clean other time");
1035 1032
1036 mCleanOtherObjectsTime->setFocusLostCallback(onLostFocus, this); 1033 mCleanOtherObjectsTime->setFocusLostCallback(onLostFocus, this);
1037 mCleanOtherObjectsTime->setCommitCallback(onCommitClean); 1034 mCleanOtherObjectsTime->setCommitCallback(onCommitClean);
@@ -1039,22 +1036,15 @@ BOOL LLPanelLandObjects::postBuild()
1039 childSetPrevalidate("clean other time", LLLineEditor::prevalidateNonNegativeS32); 1036 childSetPrevalidate("clean other time", LLLineEditor::prevalidateNonNegativeS32);
1040 childSetUserData("clean other time", this); 1037 childSetUserData("clean other time", this);
1041 1038
1042 mBtnRefresh = LLUICtrlFactory::getButtonByName(this, "Refresh List"); 1039 mBtnRefresh = getChild<LLButton>("Refresh List");
1043 mBtnRefresh->setClickedCallback(onClickRefresh, this); 1040 mBtnRefresh->setClickedCallback(onClickRefresh, this);
1044 1041
1045 mBtnReturnOwnerList = LLUICtrlFactory::getButtonByName(this, "Return objects..."); 1042 mBtnReturnOwnerList = getChild<LLButton>("Return objects...");
1046 mBtnReturnOwnerList->setClickedCallback(onClickReturnOwnerList, this); 1043 mBtnReturnOwnerList->setClickedCallback(onClickReturnOwnerList, this);
1047 1044
1048 LLUUID image_id; 1045 mIconAvatarOnline = LLUIImageList::getInstance()->getUIImage("icon_avatar_online.tga");
1049 1046 mIconAvatarOffline = LLUIImageList::getInstance()->getUIImage("icon_avatar_offline.tga");
1050 image_id.set( gViewerArt.getString("icon_avatar_online.tga") ); 1047 mIconGroup = LLUIImageList::getInstance()->getUIImage("icon_group.tga");
1051 mIconAvatarOnline = gImageList.getImage(image_id, MIPMAP_FALSE, TRUE);
1052
1053 image_id.set( gViewerArt.getString("icon_avatar_offline.tga") );
1054 mIconAvatarOffline = gImageList.getImage(image_id, MIPMAP_FALSE, TRUE);
1055
1056 image_id.set( gViewerArt.getString("icon_group.tga") );
1057 mIconGroup = gImageList.getImage(image_id, MIPMAP_FALSE, TRUE);
1058 1048
1059 mOwnerList = getChild<LLNameListCtrl>("owner list"); 1049 mOwnerList = getChild<LLNameListCtrl>("owner list");
1060 mOwnerList->sortByColumn(3, FALSE); 1050 mOwnerList->sortByColumn(3, FALSE);
@@ -1146,7 +1136,7 @@ void LLPanelLandObjects::refresh()
1146 1136
1147 // Can't have more than region max tasks, regardless of parcel 1137 // Can't have more than region max tasks, regardless of parcel
1148 // object bonus factor. 1138 // object bonus factor.
1149 LLViewerRegion* region = gParcelMgr->getSelectionRegion(); 1139 LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
1150 if (region) 1140 if (region)
1151 { 1141 {
1152 S32 max_tasks_per_region = (S32)region->getMaxTasks(); 1142 S32 max_tasks_per_region = (S32)region->getMaxTasks();
@@ -1223,7 +1213,7 @@ void send_other_clean_time_message(S32 parcel_local_id, S32 other_clean_time)
1223{ 1213{
1224 LLMessageSystem *msg = gMessageSystem; 1214 LLMessageSystem *msg = gMessageSystem;
1225 1215
1226 LLViewerRegion* region = gParcelMgr->getSelectionRegion(); 1216 LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
1227 if (!region) return; 1217 if (!region) return;
1228 1218
1229 msg->newMessageFast(_PREHASH_ParcelSetOtherCleanTime); 1219 msg->newMessageFast(_PREHASH_ParcelSetOtherCleanTime);
@@ -1242,7 +1232,7 @@ void send_return_objects_message(S32 parcel_local_id, S32 return_type,
1242{ 1232{
1243 LLMessageSystem *msg = gMessageSystem; 1233 LLMessageSystem *msg = gMessageSystem;
1244 1234
1245 LLViewerRegion* region = gParcelMgr->getSelectionRegion(); 1235 LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
1246 if (!region) return; 1236 if (!region) return;
1247 1237
1248 msg->newMessageFast(_PREHASH_ParcelReturnObjects); 1238 msg->newMessageFast(_PREHASH_ParcelReturnObjects);
@@ -1306,8 +1296,8 @@ void LLPanelLandObjects::callbackReturnOwnerObjects(S32 option, void* userdata)
1306 } 1296 }
1307 } 1297 }
1308 1298
1309 gSelectMgr->unhighlightAll(); 1299 LLSelectMgr::getInstance()->unhighlightAll();
1310 gParcelMgr->sendParcelPropertiesUpdate( parcel ); 1300 LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel );
1311 lop->refresh(); 1301 lop->refresh();
1312} 1302}
1313 1303
@@ -1328,8 +1318,8 @@ void LLPanelLandObjects::callbackReturnGroupObjects(S32 option, void* userdata)
1328 send_return_objects_message(parcel->getLocalID(), RT_GROUP); 1318 send_return_objects_message(parcel->getLocalID(), RT_GROUP);
1329 } 1319 }
1330 } 1320 }
1331 gSelectMgr->unhighlightAll(); 1321 LLSelectMgr::getInstance()->unhighlightAll();
1332 gParcelMgr->sendParcelPropertiesUpdate( parcel ); 1322 LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel );
1333 lop->refresh(); 1323 lop->refresh();
1334} 1324}
1335 1325
@@ -1346,8 +1336,8 @@ void LLPanelLandObjects::callbackReturnOtherObjects(S32 option, void* userdata)
1346 send_return_objects_message(parcel->getLocalID(), RT_OTHER); 1336 send_return_objects_message(parcel->getLocalID(), RT_OTHER);
1347 } 1337 }
1348 } 1338 }
1349 gSelectMgr->unhighlightAll(); 1339 LLSelectMgr::getInstance()->unhighlightAll();
1350 gParcelMgr->sendParcelPropertiesUpdate( parcel ); 1340 LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel );
1351 lop->refresh(); 1341 lop->refresh();
1352} 1342}
1353 1343
@@ -1380,8 +1370,8 @@ void LLPanelLandObjects::callbackReturnOwnerList(S32 option, void* userdata)
1380 } 1370 }
1381 } 1371 }
1382 } 1372 }
1383 gSelectMgr->unhighlightAll(); 1373 LLSelectMgr::getInstance()->unhighlightAll();
1384 gParcelMgr->sendParcelPropertiesUpdate( parcel ); 1374 LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel );
1385 self->refresh(); 1375 self->refresh();
1386} 1376}
1387 1377
@@ -1428,7 +1418,7 @@ void LLPanelLandObjects::onClickRefresh(void* userdata)
1428 LLParcel* parcel = self->mParcel->getParcel(); 1418 LLParcel* parcel = self->mParcel->getParcel();
1429 if (!parcel) return; 1419 if (!parcel) return;
1430 1420
1431 LLViewerRegion* region = gParcelMgr->getSelectionRegion(); 1421 LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
1432 if (!region) return; 1422 if (!region) return;
1433 1423
1434 // ready the list for results 1424 // ready the list for results
@@ -1494,17 +1484,17 @@ void LLPanelLandObjects::processParcelObjectOwnersReply(LLMessageSystem *msg, vo
1494 LLScrollListItem *row = new LLScrollListItem( TRUE, NULL, owner_id); 1484 LLScrollListItem *row = new LLScrollListItem( TRUE, NULL, owner_id);
1495 if (is_group_owned) 1485 if (is_group_owned)
1496 { 1486 {
1497 row->addColumn(self->mIconGroup.notNull() ? self->mIconGroup->getID() : LLUUID::null); 1487 row->addColumn(self->mIconGroup);
1498 row->addColumn(OWNER_GROUP, FONT); 1488 row->addColumn(OWNER_GROUP, FONT);
1499 } 1489 }
1500 else if (is_online) 1490 else if (is_online)
1501 { 1491 {
1502 row->addColumn(self->mIconAvatarOnline.notNull() ? self->mIconAvatarOnline->getID() : LLUUID::null); 1492 row->addColumn(self->mIconAvatarOnline);
1503 row->addColumn(OWNER_ONLINE, FONT); 1493 row->addColumn(OWNER_ONLINE, FONT);
1504 } 1494 }
1505 else // offline 1495 else // offline
1506 { 1496 {
1507 row->addColumn(self->mIconAvatarOffline.notNull() ? self->mIconAvatarOffline->getID() : LLUUID::null); 1497 row->addColumn(self->mIconAvatarOffline);
1508 row->addColumn(OWNER_OFFLINE, FONT); 1498 row->addColumn(OWNER_OFFLINE, FONT);
1509 } 1499 }
1510 // Placeholder for name. 1500 // Placeholder for name.
@@ -1749,56 +1739,56 @@ BOOL LLPanelLandOptions::postBuild()
1749{ 1739{
1750 1740
1751 1741
1752 mCheckEditObjects = LLUICtrlFactory::getCheckBoxByName(this, "edit objects check"); 1742 mCheckEditObjects = getChild<LLCheckBoxCtrl>( "edit objects check");
1753 childSetCommitCallback("edit objects check", onCommitAny, this); 1743 childSetCommitCallback("edit objects check", onCommitAny, this);
1754 1744
1755 mCheckEditGroupObjects = LLUICtrlFactory::getCheckBoxByName(this, "edit group objects check"); 1745 mCheckEditGroupObjects = getChild<LLCheckBoxCtrl>( "edit group objects check");
1756 childSetCommitCallback("edit group objects check", onCommitAny, this); 1746 childSetCommitCallback("edit group objects check", onCommitAny, this);
1757 1747
1758 mCheckAllObjectEntry = LLUICtrlFactory::getCheckBoxByName(this, "all object entry check"); 1748 mCheckAllObjectEntry = getChild<LLCheckBoxCtrl>( "all object entry check");
1759 childSetCommitCallback("all object entry check", onCommitAny, this); 1749 childSetCommitCallback("all object entry check", onCommitAny, this);
1760 1750
1761 mCheckGroupObjectEntry = LLUICtrlFactory::getCheckBoxByName(this, "group object entry check"); 1751 mCheckGroupObjectEntry = getChild<LLCheckBoxCtrl>( "group object entry check");
1762 childSetCommitCallback("group object entry check", onCommitAny, this); 1752 childSetCommitCallback("group object entry check", onCommitAny, this);
1763 1753
1764 mCheckEditLand = LLUICtrlFactory::getCheckBoxByName(this, "edit land check"); 1754 mCheckEditLand = getChild<LLCheckBoxCtrl>( "edit land check");
1765 childSetCommitCallback("edit land check", onCommitAny, this); 1755 childSetCommitCallback("edit land check", onCommitAny, this);
1766 1756
1767 1757
1768 mCheckLandmark = LLUICtrlFactory::getCheckBoxByName(this, "check landmark"); 1758 mCheckLandmark = getChild<LLCheckBoxCtrl>( "check landmark");
1769 childSetCommitCallback("check landmark", onCommitAny, this); 1759 childSetCommitCallback("check landmark", onCommitAny, this);
1770 1760
1771 1761
1772 mCheckGroupScripts = LLUICtrlFactory::getCheckBoxByName(this, "check group scripts"); 1762 mCheckGroupScripts = getChild<LLCheckBoxCtrl>( "check group scripts");
1773 childSetCommitCallback("check group scripts", onCommitAny, this); 1763 childSetCommitCallback("check group scripts", onCommitAny, this);
1774 1764
1775 1765
1776 mCheckFly = LLUICtrlFactory::getCheckBoxByName(this, "check fly"); 1766 mCheckFly = getChild<LLCheckBoxCtrl>( "check fly");
1777 childSetCommitCallback("check fly", onCommitAny, this); 1767 childSetCommitCallback("check fly", onCommitAny, this);
1778 1768
1779 1769
1780 mCheckOtherScripts = LLUICtrlFactory::getCheckBoxByName(this, "check other scripts"); 1770 mCheckOtherScripts = getChild<LLCheckBoxCtrl>( "check other scripts");
1781 childSetCommitCallback("check other scripts", onCommitAny, this); 1771 childSetCommitCallback("check other scripts", onCommitAny, this);
1782 1772
1783 1773
1784 mCheckSafe = LLUICtrlFactory::getCheckBoxByName(this, "check safe"); 1774 mCheckSafe = getChild<LLCheckBoxCtrl>( "check safe");
1785 childSetCommitCallback("check safe", onCommitAny, this); 1775 childSetCommitCallback("check safe", onCommitAny, this);
1786 1776
1787 1777
1788 mPushRestrictionCtrl = LLUICtrlFactory::getCheckBoxByName(this, "PushRestrictCheck"); 1778 mPushRestrictionCtrl = getChild<LLCheckBoxCtrl>( "PushRestrictCheck");
1789 childSetCommitCallback("PushRestrictCheck", onCommitAny, this); 1779 childSetCommitCallback("PushRestrictCheck", onCommitAny, this);
1790 1780
1791 mCheckShowDirectory = LLUICtrlFactory::getCheckBoxByName(this, "ShowDirectoryCheck"); 1781 mCheckShowDirectory = getChild<LLCheckBoxCtrl>( "ShowDirectoryCheck");
1792 childSetCommitCallback("ShowDirectoryCheck", onCommitAny, this); 1782 childSetCommitCallback("ShowDirectoryCheck", onCommitAny, this);
1793 1783
1794 1784
1795 mCategoryCombo = LLUICtrlFactory::getComboBoxByName(this, "land category"); 1785 mCategoryCombo = getChild<LLComboBox>( "land category");
1796 childSetCommitCallback("land category", onCommitAny, this); 1786 childSetCommitCallback("land category", onCommitAny, this);
1797 1787
1798 mMatureCtrl = LLUICtrlFactory::getCheckBoxByName(this, "MatureCheck"); 1788 mMatureCtrl = getChild<LLCheckBoxCtrl>( "MatureCheck");
1799 childSetCommitCallback("MatureCheck", onCommitAny, this); 1789 childSetCommitCallback("MatureCheck", onCommitAny, this);
1800 1790
1801 mPublishHelpButton = LLUICtrlFactory::getButtonByName(this, "?"); 1791 mPublishHelpButton = getChild<LLButton>("?");
1802 mPublishHelpButton->setClickedCallback(onClickPublishHelp, this); 1792 mPublishHelpButton->setClickedCallback(onClickPublishHelp, this);
1803 1793
1804 1794
@@ -1847,17 +1837,17 @@ BOOL LLPanelLandOptions::postBuild()
1847 } 1837 }
1848 1838
1849 1839
1850 mLocationText = LLUICtrlFactory::getTextBoxByName(this, "landing_point"); 1840 mLocationText = getChild<LLTextBox>("landing_point");
1851 1841
1852 mSetBtn = LLUICtrlFactory::getButtonByName(this, "Set"); 1842 mSetBtn = getChild<LLButton>("Set");
1853 mSetBtn->setClickedCallback(onClickSet, this); 1843 mSetBtn->setClickedCallback(onClickSet, this);
1854 1844
1855 1845
1856 mClearBtn = LLUICtrlFactory::getButtonByName(this, "Clear"); 1846 mClearBtn = getChild<LLButton>("Clear");
1857 mClearBtn->setClickedCallback(onClickClear, this); 1847 mClearBtn->setClickedCallback(onClickClear, this);
1858 1848
1859 1849
1860 mLandingTypeCombo = LLUICtrlFactory::getComboBoxByName(this, "landing type"); 1850 mLandingTypeCombo = getChild<LLComboBox>( "landing type");
1861 childSetCommitCallback("landing type", onCommitAny, this); 1851 childSetCommitCallback("landing type", onCommitAny, this);
1862 1852
1863 return TRUE; 1853 return TRUE;
@@ -2031,12 +2021,12 @@ void LLPanelLandOptions::refresh()
2031// virtual 2021// virtual
2032void LLPanelLandOptions::draw() 2022void LLPanelLandOptions::draw()
2033{ 2023{
2034 LLParcel *parcel = gParcelMgr->getFloatingParcelSelection()->getParcel(); 2024 LLParcel *parcel = LLViewerParcelMgr::getInstance()->getFloatingParcelSelection()->getParcel();
2035 2025
2036 if(parcel) 2026 if(parcel)
2037 { 2027 {
2038 LLViewerRegion* region; 2028 LLViewerRegion* region;
2039 region = gParcelMgr->getSelectionRegion(); 2029 region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
2040 llassert(region); // Region should never be null. 2030 llassert(region); // Region should never be null.
2041 2031
2042 BOOL can_change_identity = region ? 2032 BOOL can_change_identity = region ?
@@ -2091,7 +2081,7 @@ void LLPanelLandOptions::onCommitAny(LLUICtrl *ctrl, void *userdata)
2091 S32 landing_type_index = self->mLandingTypeCombo->getCurrentIndex(); 2081 S32 landing_type_index = self->mLandingTypeCombo->getCurrentIndex();
2092 LLUUID snapshot_id = self->mSnapshotCtrl->getImageAssetID(); 2082 LLUUID snapshot_id = self->mSnapshotCtrl->getImageAssetID();
2093 LLViewerRegion* region; 2083 LLViewerRegion* region;
2094 region = gParcelMgr->getSelectionRegion(); 2084 region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
2095 2085
2096 if (!allow_other_scripts && region && region->getAllowDamage()) 2086 if (!allow_other_scripts && region && region->getAllowDamage())
2097 { 2087 {
@@ -2120,7 +2110,7 @@ void LLPanelLandOptions::onCommitAny(LLUICtrl *ctrl, void *userdata)
2120 parcel->setSnapshotID(snapshot_id); 2110 parcel->setSnapshotID(snapshot_id);
2121 2111
2122 // Send current parcel data upstream to server 2112 // Send current parcel data upstream to server
2123 gParcelMgr->sendParcelPropertiesUpdate( parcel ); 2113 LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel );
2124 2114
2125 // Might have changed properties, so let's redraw! 2115 // Might have changed properties, so let's redraw!
2126 self->refresh(); 2116 self->refresh();
@@ -2135,7 +2125,7 @@ void LLPanelLandOptions::onClickSet(void* userdata)
2135 LLParcel* selected_parcel = self->mParcel->getParcel(); 2125 LLParcel* selected_parcel = self->mParcel->getParcel();
2136 if (!selected_parcel) return; 2126 if (!selected_parcel) return;
2137 2127
2138 LLParcel* agent_parcel = gParcelMgr->getAgentParcel(); 2128 LLParcel* agent_parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
2139 if (!agent_parcel) return; 2129 if (!agent_parcel) return;
2140 2130
2141 if (agent_parcel->getLocalID() != selected_parcel->getLocalID()) 2131 if (agent_parcel->getLocalID() != selected_parcel->getLocalID())
@@ -2148,7 +2138,7 @@ void LLPanelLandOptions::onClickSet(void* userdata)
2148 selected_parcel->setUserLocation(pos_region); 2138 selected_parcel->setUserLocation(pos_region);
2149 selected_parcel->setUserLookAt(gAgent.getFrameAgent().getAtAxis()); 2139 selected_parcel->setUserLookAt(gAgent.getFrameAgent().getAtAxis());
2150 2140
2151 gParcelMgr->sendParcelPropertiesUpdate(selected_parcel); 2141 LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate(selected_parcel);
2152 2142
2153 self->refresh(); 2143 self->refresh();
2154} 2144}
@@ -2165,7 +2155,7 @@ void LLPanelLandOptions::onClickClear(void* userdata)
2165 selected_parcel->setUserLocation(zero_vec); 2155 selected_parcel->setUserLocation(zero_vec);
2166 selected_parcel->setUserLookAt(zero_vec); 2156 selected_parcel->setUserLookAt(zero_vec);
2167 2157
2168 gParcelMgr->sendParcelPropertiesUpdate(selected_parcel); 2158 LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate(selected_parcel);
2169 2159
2170 self->refresh(); 2160 self->refresh();
2171} 2161}
@@ -2173,8 +2163,8 @@ void LLPanelLandOptions::onClickClear(void* userdata)
2173// static 2163// static
2174void LLPanelLandOptions::onClickPublishHelp(void*) 2164void LLPanelLandOptions::onClickPublishHelp(void*)
2175{ 2165{
2176 LLViewerRegion* region = gParcelMgr->getSelectionRegion(); 2166 LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
2177 LLParcel *parcel = gParcelMgr->getFloatingParcelSelection()->getParcel(); 2167 LLParcel *parcel = LLViewerParcelMgr::getInstance()->getFloatingParcelSelection()->getParcel();
2178 llassert(region); // Region should never be null. 2168 llassert(region); // Region should never be null.
2179 2169
2180 bool can_change_identity = region && parcel ? 2170 bool can_change_identity = region && parcel ?
@@ -2585,7 +2575,7 @@ void LLPanelLandAccess::onCommitAny(LLUICtrl *ctrl, void *userdata)
2585 parcel->setPassHours( pass_hours ); 2575 parcel->setPassHours( pass_hours );
2586 2576
2587 // Send current parcel data upstream to server 2577 // Send current parcel data upstream to server
2588 gParcelMgr->sendParcelPropertiesUpdate( parcel ); 2578 LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel );
2589 2579
2590 // Might have changed properties, so let's redraw! 2580 // Might have changed properties, so let's redraw!
2591 self->refresh(); 2581 self->refresh();
@@ -2612,7 +2602,7 @@ void LLPanelLandAccess::callbackAvatarCBAccess(const std::vector<std::string>& n
2612 if (parcel) 2602 if (parcel)
2613 { 2603 {
2614 parcel->addToAccessList(id, 0); 2604 parcel->addToAccessList(id, 0);
2615 gParcelMgr->sendParcelAccessListUpdate(AL_ACCESS); 2605 LLViewerParcelMgr::getInstance()->sendParcelAccessListUpdate(AL_ACCESS);
2616 panelp->refresh(); 2606 panelp->refresh();
2617 } 2607 }
2618 } 2608 }
@@ -2635,7 +2625,7 @@ void LLPanelLandAccess::onClickRemoveAccess(void* data)
2635 const LLUUID& agent_id = item->getUUID(); 2625 const LLUUID& agent_id = item->getUUID();
2636 parcel->removeFromAccessList(agent_id); 2626 parcel->removeFromAccessList(agent_id);
2637 } 2627 }
2638 gParcelMgr->sendParcelAccessListUpdate(AL_ACCESS); 2628 LLViewerParcelMgr::getInstance()->sendParcelAccessListUpdate(AL_ACCESS);
2639 panelp->refresh(); 2629 panelp->refresh();
2640 } 2630 }
2641 } 2631 }
@@ -2659,7 +2649,7 @@ void LLPanelLandAccess::callbackAvatarCBBanned(const std::vector<std::string>& n
2659 if (parcel) 2649 if (parcel)
2660 { 2650 {
2661 parcel->addToBanList(id, 0); 2651 parcel->addToBanList(id, 0);
2662 gParcelMgr->sendParcelAccessListUpdate(AL_BAN); 2652 LLViewerParcelMgr::getInstance()->sendParcelAccessListUpdate(AL_BAN);
2663 panelp->refresh(); 2653 panelp->refresh();
2664 } 2654 }
2665 } 2655 }
@@ -2682,7 +2672,7 @@ void LLPanelLandAccess::onClickRemoveBanned(void* data)
2682 const LLUUID& agent_id = item->getUUID(); 2672 const LLUUID& agent_id = item->getUUID();
2683 parcel->removeFromBanList(agent_id); 2673 parcel->removeFromBanList(agent_id);
2684 } 2674 }
2685 gParcelMgr->sendParcelAccessListUpdate(AL_BAN); 2675 LLViewerParcelMgr::getInstance()->sendParcelAccessListUpdate(AL_BAN);
2686 panelp->refresh(); 2676 panelp->refresh();
2687 } 2677 }
2688 } 2678 }
@@ -2709,7 +2699,7 @@ BOOL LLPanelLandCovenant::postBuild()
2709// virtual 2699// virtual
2710void LLPanelLandCovenant::refresh() 2700void LLPanelLandCovenant::refresh()
2711{ 2701{
2712 LLViewerRegion* region = gParcelMgr->getSelectionRegion(); 2702 LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
2713 if(!region) return; 2703 if(!region) return;
2714 2704
2715 LLTextBox* region_name = getChild<LLTextBox>("region_name_text"); 2705 LLTextBox* region_name = getChild<LLTextBox>("region_name_text");
diff --git a/linden/indra/newview/llfloaterland.h b/linden/indra/newview/llfloaterland.h
index e9198cb..b0dcd04 100644
--- a/linden/indra/newview/llfloaterland.h
+++ b/linden/indra/newview/llfloaterland.h
@@ -68,7 +68,7 @@ class LLPanelLandRenters;
68class LLPanelLandCovenant; 68class LLPanelLandCovenant;
69 69
70class LLFloaterLand 70class LLFloaterLand
71: public LLFloater, public LLUISingleton<LLFloaterLand, VisibilityPolicy<LLFloater> > 71: public LLFloater, public LLFloaterSingleton<LLFloaterLand>
72{ 72{
73 friend class LLUISingleton<LLFloaterLand, VisibilityPolicy<LLFloater> >; 73 friend class LLUISingleton<LLFloaterLand, VisibilityPolicy<LLFloater> >;
74public: 74public:
@@ -281,9 +281,9 @@ protected:
281 LLButton *mBtnReturnOwnerList; 281 LLButton *mBtnReturnOwnerList;
282 LLNameListCtrl *mOwnerList; 282 LLNameListCtrl *mOwnerList;
283 283
284 LLPointer<LLViewerImage> mIconAvatarOnline; 284 LLUIImagePtr mIconAvatarOnline;
285 LLPointer<LLViewerImage> mIconAvatarOffline; 285 LLUIImagePtr mIconAvatarOffline;
286 LLPointer<LLViewerImage> mIconGroup; 286 LLUIImagePtr mIconGroup;
287 287
288 BOOL mFirstReply; 288 BOOL mFirstReply;
289 289
diff --git a/linden/indra/newview/llfloaterlandholdings.cpp b/linden/indra/newview/llfloaterlandholdings.cpp
index 32d077c..01bad70 100644
--- a/linden/indra/newview/llfloaterlandholdings.cpp
+++ b/linden/indra/newview/llfloaterlandholdings.cpp
@@ -49,7 +49,7 @@
49#include "llbutton.h" 49#include "llbutton.h"
50#include "lluiconstants.h" 50#include "lluiconstants.h"
51#include "llviewermessage.h" 51#include "llviewermessage.h"
52#include "llvieweruictrlfactory.h" 52#include "lluictrlfactory.h"
53 53
54// statics 54// statics
55LLFloaterLandHoldings* LLFloaterLandHoldings::sInstance = NULL; 55LLFloaterLandHoldings* LLFloaterLandHoldings::sInstance = NULL;
@@ -59,7 +59,7 @@ LLFloaterLandHoldings* LLFloaterLandHoldings::sInstance = NULL;
59void LLFloaterLandHoldings::show(void*) 59void LLFloaterLandHoldings::show(void*)
60{ 60{
61 LLFloaterLandHoldings* floater = new LLFloaterLandHoldings(); 61 LLFloaterLandHoldings* floater = new LLFloaterLandHoldings();
62 gUICtrlFactory->buildFloater(floater, "floater_land_holdings.xml"); 62 LLUICtrlFactory::getInstance()->buildFloater(floater, "floater_land_holdings.xml");
63 floater->center(); 63 floater->center();
64 64
65 // query_id null is known to be us 65 // query_id null is known to be us
@@ -250,7 +250,7 @@ void LLFloaterLandHoldings::processPlacesReply(LLMessageSystem* msg, void**)
250 250
251void LLFloaterLandHoldings::buttonCore(S32 which) 251void LLFloaterLandHoldings::buttonCore(S32 which)
252{ 252{
253 LLScrollListCtrl *list = LLUICtrlFactory::getScrollListByName(this, "parcel list"); 253 LLScrollListCtrl *list = getChild<LLScrollListCtrl>("parcel list");
254 if (!list) return; 254 if (!list) return;
255 255
256 S32 index = list->getFirstSelectedIndex(); 256 S32 index = list->getFirstSelectedIndex();
diff --git a/linden/indra/newview/llfloaterlandmark.cpp b/linden/indra/newview/llfloaterlandmark.cpp
index 0011daf..e10dec9 100644
--- a/linden/indra/newview/llfloaterlandmark.cpp
+++ b/linden/indra/newview/llfloaterlandmark.cpp
@@ -64,7 +64,7 @@
64#include "llviewerobject.h" 64#include "llviewerobject.h"
65#include "llviewercontrol.h" 65#include "llviewercontrol.h"
66#include "llglheaders.h" 66#include "llglheaders.h"
67#include "llvieweruictrlfactory.h" 67#include "lluictrlfactory.h"
68 68
69#include "roles_constants.h" 69#include "roles_constants.h"
70 70
@@ -111,20 +111,20 @@ LLFloaterLandmark::LLFloaterLandmark(const LLSD& data)
111 mSearchEdit(NULL), 111 mSearchEdit(NULL),
112 mContextConeOpacity(0.f) 112 mContextConeOpacity(0.f)
113{ 113{
114 gUICtrlFactory->buildFloater(this,"floater_landmark_ctrl.xml"); 114 LLUICtrlFactory::getInstance()->buildFloater(this,"floater_landmark_ctrl.xml");
115 115
116 mTentativeLabel = LLUICtrlFactory::getTextBoxByName(this,"Multiple"); 116 mTentativeLabel = getChild<LLTextBox>("Multiple");
117 117
118 mResolutionLabel = LLUICtrlFactory::getTextBoxByName(this,"unknown"); 118 mResolutionLabel = getChild<LLTextBox>("unknown");
119 119
120 120
121 childSetCommitCallback("show_folders_check", onShowFolders, this); 121 childSetCommitCallback("show_folders_check", onShowFolders, this);
122 childSetVisible("show_folders_check", FALSE); 122 childSetVisible("show_folders_check", FALSE);
123 123
124 mSearchEdit = (LLSearchEditor*)getCtrlByNameAndType("inventory search editor", WIDGET_TYPE_SEARCH_EDITOR); 124 mSearchEdit = getChild<LLSearchEditor>("inventory search editor");
125 mSearchEdit->setSearchCallback(onSearchEdit, this); 125 mSearchEdit->setSearchCallback(onSearchEdit, this);
126 126
127 mInventoryPanel = (LLInventoryPanel*)this->getCtrlByNameAndType("inventory panel", WIDGET_TYPE_INVENTORY_PANEL); 127 mInventoryPanel = getChild<LLInventoryPanel>("inventory panel");
128 128
129 if(mInventoryPanel) 129 if(mInventoryPanel)
130 { 130 {
@@ -221,13 +221,13 @@ BOOL LLFloaterLandmark::handleDragAndDrop(
221 return handled; 221 return handled;
222} 222}
223 223
224BOOL LLFloaterLandmark::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent) 224BOOL LLFloaterLandmark::handleKeyHere(KEY key, MASK mask)
225{ 225{
226 LLFolderView* root_folder = mInventoryPanel->getRootFolder(); 226 LLFolderView* root_folder = mInventoryPanel->getRootFolder();
227 227
228 if (root_folder && mSearchEdit) 228 if (root_folder && mSearchEdit)
229 { 229 {
230 if (!called_from_parent && mSearchEdit->hasFocus() && 230 if (mSearchEdit->hasFocus() &&
231 (key == KEY_RETURN || key == KEY_DOWN) && 231 (key == KEY_RETURN || key == KEY_DOWN) &&
232 mask == MASK_NONE) 232 mask == MASK_NONE)
233 { 233 {
@@ -253,7 +253,7 @@ BOOL LLFloaterLandmark::handleKeyHere(KEY key, MASK mask, BOOL called_from_paren
253 } 253 }
254 } 254 }
255 255
256 return LLFloater::handleKeyHere(key, mask, called_from_parent); 256 return LLFloater::handleKeyHere(key, mask);
257} 257}
258 258
259// virtual 259// virtual
@@ -329,7 +329,7 @@ void LLFloaterLandmark::onBtnNew(void* userdata)
329 llwarns << "No agent region" << llendl; 329 llwarns << "No agent region" << llendl;
330 return; 330 return;
331 } 331 }
332 LLParcel* agent_parcel = gParcelMgr->getAgentParcel(); 332 LLParcel* agent_parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
333 if (!agent_parcel) 333 if (!agent_parcel)
334 { 334 {
335 llwarns << "No agent parcel" << llendl; 335 llwarns << "No agent parcel" << llendl;
diff --git a/linden/indra/newview/llfloaterlandmark.h b/linden/indra/newview/llfloaterlandmark.h
index 027cf21..7b5dc80 100644
--- a/linden/indra/newview/llfloaterlandmark.h
+++ b/linden/indra/newview/llfloaterlandmark.h
@@ -67,7 +67,7 @@ public:
67 BOOL drop, EDragAndDropType cargo_type, void *cargo_data, 67 BOOL drop, EDragAndDropType cargo_type, void *cargo_data,
68 EAcceptance *accept, 68 EAcceptance *accept,
69 LLString& tooltip_msg); 69 LLString& tooltip_msg);
70 virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); 70 virtual BOOL handleKeyHere(KEY key, MASK mask);
71 71
72 // LLFloater overrides 72 // LLFloater overrides
73 virtual void onClose(bool app_quitting); 73 virtual void onClose(bool app_quitting);
diff --git a/linden/indra/newview/llfloatermap.cpp b/linden/indra/newview/llfloatermap.cpp
index 232055a..36a9ab0 100644
--- a/linden/indra/newview/llfloatermap.cpp
+++ b/linden/indra/newview/llfloatermap.cpp
@@ -184,23 +184,20 @@ BOOL LLFloaterMap::canClose()
184// virtual 184// virtual
185void LLFloaterMap::draw() 185void LLFloaterMap::draw()
186{ 186{
187 if( getVisible() ) 187 // Note: we can't just gAgent.check cameraMouselook() because the transition states are wrong.
188 if( gAgent.cameraMouselook())
188 { 189 {
189 // Note: we can't just gAgent.check cameraMouselook() because the transition states are wrong. 190 setMouseOpaque(FALSE);
190 if( gAgent.cameraMouselook()) 191 getDragHandle()->setMouseOpaque(FALSE);
191 {
192 setMouseOpaque(FALSE);
193 getDragHandle()->setMouseOpaque(FALSE);
194 192
195 drawChild(mMap); 193 drawChild(mMap);
196 } 194 }
197 else 195 else
198 { 196 {
199 setMouseOpaque(TRUE); 197 setMouseOpaque(TRUE);
200 getDragHandle()->setMouseOpaque(TRUE); 198 getDragHandle()->setMouseOpaque(TRUE);
201 199
202 LLFloater::draw(); 200 LLFloater::draw();
203 }
204 } 201 }
205} 202}
206 203
diff --git a/linden/indra/newview/llfloatermute.cpp b/linden/indra/newview/llfloatermute.cpp
index db88d46..d519791 100644
--- a/linden/indra/newview/llfloatermute.cpp
+++ b/linden/indra/newview/llfloatermute.cpp
@@ -50,7 +50,7 @@
50#include "lltextbox.h" 50#include "lltextbox.h"
51#include "llviewertexteditor.h" 51#include "llviewertexteditor.h"
52#include "llviewerwindow.h" 52#include "llviewerwindow.h"
53#include "llvieweruictrlfactory.h" 53#include "lluictrlfactory.h"
54#include "llfocusmgr.h" 54#include "llfocusmgr.h"
55 55
56// 56//
@@ -65,10 +65,6 @@ const S32 LINE = 16;
65const S32 LEFT = 2; 65const S32 LEFT = 2;
66const S32 VPAD = 4; 66const S32 VPAD = 4;
67const S32 HPAD = 4; 67const S32 HPAD = 4;
68//
69// Global statics
70//
71LLFloaterMute* gFloaterMute = NULL;
72 68
73//----------------------------------------------------------------------------- 69//-----------------------------------------------------------------------------
74// LLFloaterMuteObjectUI() 70// LLFloaterMuteObjectUI()
@@ -86,7 +82,7 @@ public:
86protected: 82protected:
87 LLFloaterMuteObjectUI(); 83 LLFloaterMuteObjectUI();
88 virtual ~LLFloaterMuteObjectUI(); 84 virtual ~LLFloaterMuteObjectUI();
89 virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); 85 virtual BOOL handleKeyHere(KEY key, MASK mask);
90 86
91private: 87private:
92 // UI Callbacks 88 // UI Callbacks
@@ -107,7 +103,7 @@ LLFloaterMuteObjectUI::LLFloaterMuteObjectUI()
107 mCallback(NULL), 103 mCallback(NULL),
108 mCallbackUserData(NULL) 104 mCallbackUserData(NULL)
109{ 105{
110 gUICtrlFactory->buildFloater(this, "floater_mute_object.xml", NULL); 106 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_mute_object.xml", NULL);
111} 107}
112 108
113// Destroys the object 109// Destroys the object
@@ -166,7 +162,7 @@ void LLFloaterMuteObjectUI::onBtnCancel(void* userdata)
166 self->close(); 162 self->close();
167} 163}
168 164
169BOOL LLFloaterMuteObjectUI::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent) 165BOOL LLFloaterMuteObjectUI::handleKeyHere(KEY key, MASK mask)
170{ 166{
171 if (key == KEY_RETURN && mask == MASK_NONE) 167 if (key == KEY_RETURN && mask == MASK_NONE)
172 { 168 {
@@ -179,7 +175,7 @@ BOOL LLFloaterMuteObjectUI::handleKeyHere(KEY key, MASK mask, BOOL called_from_p
179 return TRUE; 175 return TRUE;
180 } 176 }
181 177
182 return LLFloater::handleKeyHere(key, mask, called_from_parent); 178 return LLFloater::handleKeyHere(key, mask);
183} 179}
184 180
185// 181//
@@ -194,7 +190,13 @@ LLFloaterMute::LLFloaterMute(const LLSD& seed)
194 RESIZE_YES, 220, 140, DRAG_ON_TOP, MINIMIZE_YES, CLOSE_YES) 190 RESIZE_YES, 220, 140, DRAG_ON_TOP, MINIMIZE_YES, CLOSE_YES)
195{ 191{
196 192
197 gUICtrlFactory->buildFloater(this, "floater_mute.xml", NULL, FALSE); 193 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_mute.xml", NULL, FALSE);
194}
195
196// LLMuteListObserver callback interface implementation.
197/* virtual */ void LLFloaterMute::onChange()
198{
199 refreshMuteList();
198} 200}
199 201
200BOOL LLFloaterMute::postBuild() 202BOOL LLFloaterMute::postBuild()
@@ -204,8 +206,10 @@ BOOL LLFloaterMute::postBuild()
204 childSetAction("Mute object by name...", onClickMuteByName, this); 206 childSetAction("Mute object by name...", onClickMuteByName, this);
205 childSetAction("Unmute", onClickRemove, this); 207 childSetAction("Unmute", onClickRemove, this);
206 208
207 mMuteList = LLUICtrlFactory::getScrollListByName(this, "mutes"); 209 mMuteList = getChild<LLScrollListCtrl>("mutes");
208 mMuteList->setCommitOnSelectionChange(TRUE); 210 mMuteList->setCommitOnSelectionChange(TRUE);
211
212 LLMuteList::getInstance()->addObserver(this);
209 213
210 refreshMuteList(); 214 refreshMuteList();
211 215
@@ -226,15 +230,12 @@ void LLFloaterMute::refreshMuteList()
226{ 230{
227 mMuteList->deleteAllItems(); 231 mMuteList->deleteAllItems();
228 232
229 if (gMuteListp) 233 std::vector<LLMute> mutes = LLMuteList::getInstance()->getMutes();
234 std::vector<LLMute>::iterator it;
235 for (it = mutes.begin(); it != mutes.end(); ++it)
230 { 236 {
231 std::vector<LLMute> mutes = gMuteListp->getMutes(); 237 LLString display_name = it->getDisplayName();
232 std::vector<LLMute>::iterator it; 238 mMuteList->addStringUUIDItem(display_name, it->mID);
233 for (it = mutes.begin(); it != mutes.end(); ++it)
234 {
235 LLString display_name = it->getDisplayName();
236 mMuteList->addStringUUIDItem(display_name, it->mID);
237 }
238 } 239 }
239 240
240 updateButtons(); 241 updateButtons();
@@ -285,7 +286,7 @@ void LLFloaterMute::onClickRemove(void *data)
285 // now mute.mName has the suffix trimmed off 286 // now mute.mName has the suffix trimmed off
286 287
287 S32 last_selected = floater->mMuteList->getFirstSelectedIndex(); 288 S32 last_selected = floater->mMuteList->getFirstSelectedIndex();
288 if (gMuteListp->remove(mute)) 289 if (LLMuteList::getInstance()->remove(mute))
289 { 290 {
290 // Above removals may rebuild this dialog. 291 // Above removals may rebuild this dialog.
291 292
@@ -325,7 +326,7 @@ void LLFloaterMute::onPickUser(const std::vector<std::string>& names, const std:
325 if (names.empty() || ids.empty()) return; 326 if (names.empty() || ids.empty()) return;
326 327
327 LLMute mute(ids[0], names[0], LLMute::AGENT); 328 LLMute mute(ids[0], names[0], LLMute::AGENT);
328 gMuteListp->add(mute); 329 LLMuteList::getInstance()->add(mute);
329 floaterp->updateButtons(); 330 floaterp->updateButtons();
330} 331}
331 332
@@ -344,7 +345,7 @@ void LLFloaterMute::callbackMuteByName(const LLString& text, void* data)
344 if (text.empty()) return; 345 if (text.empty()) return;
345 346
346 LLMute mute(LLUUID::null, text, LLMute::BY_NAME); 347 LLMute mute(LLUUID::null, text, LLMute::BY_NAME);
347 BOOL success = gMuteListp->add(mute); 348 BOOL success = LLMuteList::getInstance()->add(mute);
348 if (!success) 349 if (!success)
349 { 350 {
350 gViewerWindow->alertXml("MuteByNameFailed"); 351 gViewerWindow->alertXml("MuteByNameFailed");
diff --git a/linden/indra/newview/llfloatermute.h b/linden/indra/newview/llfloatermute.h
index 801392e..9c7a6f8 100644
--- a/linden/indra/newview/llfloatermute.h
+++ b/linden/indra/newview/llfloatermute.h
@@ -33,6 +33,7 @@
33#define LL_LLFLOATERMUTE_H 33#define LL_LLFLOATERMUTE_H
34 34
35#include "llfloater.h" 35#include "llfloater.h"
36#include "llmutelist.h"
36#include <vector> 37#include <vector>
37 38
38class LLButton; 39class LLButton;
@@ -42,7 +43,7 @@ class LLUUID;
42class LLScrollListCtrl; 43class LLScrollListCtrl;
43 44
44class LLFloaterMute 45class LLFloaterMute
45 : public LLFloater, public LLFloaterSingleton<LLFloaterMute> 46 : public LLFloater, public LLMuteListObserver, public LLFloaterSingleton<LLFloaterMute>
46{ 47{
47public: 48public:
48 LLFloaterMute(const LLSD& seed); 49 LLFloaterMute(const LLSD& seed);
@@ -58,6 +59,9 @@ public:
58 59
59 void updateButtons(); 60 void updateButtons();
60 61
62 // LLMuteListObserver callback interface implementation.
63 /* virtual */ void onChange();
64
61private: 65private:
62 // UI callbacks 66 // UI callbacks
63 static void onClickRemove(void *data); 67 static void onClickRemove(void *data);
@@ -71,6 +75,5 @@ private:
71 LLScrollListCtrl* mMuteList; 75 LLScrollListCtrl* mMuteList;
72}; 76};
73 77
74extern LLFloaterMute* gFloaterMute;
75 78
76#endif 79#endif
diff --git a/linden/indra/newview/llfloaternamedesc.cpp b/linden/indra/newview/llfloaternamedesc.cpp
index f49c951..eddb4b3 100644
--- a/linden/indra/newview/llfloaternamedesc.cpp
+++ b/linden/indra/newview/llfloaternamedesc.cpp
@@ -45,7 +45,7 @@
45#include "lldir.h" 45#include "lldir.h"
46#include "llviewercontrol.h" 46#include "llviewercontrol.h"
47#include "llviewermenufile.h" // upload_new_resource() 47#include "llviewermenufile.h" // upload_new_resource()
48#include "llvieweruictrlfactory.h" 48#include "lluictrlfactory.h"
49 49
50// linden includes 50// linden includes
51#include "llassetstorage.h" 51#include "llassetstorage.h"
@@ -119,7 +119,7 @@ BOOL LLFloaterNameDesc::postBuild()
119 childSetCommitCallback("name_form", doCommit, this); 119 childSetCommitCallback("name_form", doCommit, this);
120 childSetValue("name_form", LLSD(asset_name)); 120 childSetValue("name_form", LLSD(asset_name));
121 121
122 LLLineEditor *NameEditor = LLViewerUICtrlFactory::getLineEditorByName(this, "name_form"); 122 LLLineEditor *NameEditor = getChild<LLLineEditor>("name_form");
123 if (NameEditor) 123 if (NameEditor)
124 { 124 {
125 NameEditor->setMaxTextLength(DB_INV_ITEM_NAME_STR_LEN); 125 NameEditor->setMaxTextLength(DB_INV_ITEM_NAME_STR_LEN);
@@ -131,7 +131,7 @@ BOOL LLFloaterNameDesc::postBuild()
131 131
132 r.setLeftTopAndSize( PREVIEW_HPAD, y, line_width, PREVIEW_LINE_HEIGHT ); 132 r.setLeftTopAndSize( PREVIEW_HPAD, y, line_width, PREVIEW_LINE_HEIGHT );
133 childSetCommitCallback("description_form", doCommit, this); 133 childSetCommitCallback("description_form", doCommit, this);
134 LLLineEditor *DescEditor = LLViewerUICtrlFactory::getLineEditorByName(this, "description_form"); 134 LLLineEditor *DescEditor = getChild<LLLineEditor>("description_form");
135 if (DescEditor) 135 if (DescEditor)
136 { 136 {
137 DescEditor->setMaxTextLength(DB_INV_ITEM_DESC_STR_LEN); 137 DescEditor->setMaxTextLength(DB_INV_ITEM_DESC_STR_LEN);
diff --git a/linden/indra/newview/llfloaternewim.cpp b/linden/indra/newview/llfloaternewim.cpp
index 6363b4e..dc9fabf 100644
--- a/linden/indra/newview/llfloaternewim.cpp
+++ b/linden/indra/newview/llfloaternewim.cpp
@@ -30,29 +30,13 @@
30 */ 30 */
31 31
32#include "llviewerprecompiledheaders.h" 32#include "llviewerprecompiledheaders.h"
33
34#include "llfloaternewim.h" 33#include "llfloaternewim.h"
35 34#include "lluictrlfactory.h"
36#include "llvieweruictrlfactory.h"
37#include "llinstantmessage.h"
38#include "sound_ids.h"
39#include "audioengine.h"
40#include "llfontgl.h"
41#include "llnamevalue.h"
42
43#include "llagent.h"
44#include "llbutton.h"
45#include "llfloater.h"
46#include "llfontgl.h"
47#include "llimpanel.h"
48#include "llkeyboard.h"
49#include "llnamelistctrl.h" 35#include "llnamelistctrl.h"
50#include "llresmgr.h" 36#include "llresmgr.h"
51#include "lltabcontainer.h" 37#include "lltabcontainer.h"
52#include "llimview.h" 38#include "llimview.h"
53#include "lltextbox.h"
54 39
55extern LLAudioEngine* gAudiop;
56S32 COL_1_WIDTH = 200; 40S32 COL_1_WIDTH = 200;
57 41
58static LLString sOnlineDescriptor = "*"; 42static LLString sOnlineDescriptor = "*";
@@ -60,20 +44,20 @@ static LLString sNameFormat = "[FIRST] [LAST]";
60 44
61LLFloaterNewIM::LLFloaterNewIM() 45LLFloaterNewIM::LLFloaterNewIM()
62{ 46{
63 gUICtrlFactory->buildFloater(this, "floater_new_im.xml"); 47 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_new_im.xml");
64} 48}
65 49
66BOOL LLFloaterNewIM::postBuild() 50BOOL LLFloaterNewIM::postBuild()
67{ 51{
68 requires("start_btn", WIDGET_TYPE_BUTTON); 52 requires<LLButton>("start_btn");
69 requires("close_btn", WIDGET_TYPE_BUTTON); 53 requires<LLButton>("close_btn");
70 requires("user_list", WIDGET_TYPE_NAME_LIST); 54 requires<LLNameListCtrl>("user_list");
71 55
72 if (checkRequirements()) 56 if (checkRequirements())
73 { 57 {
74 childSetAction("start_btn", &LLFloaterNewIM::onStart, this); 58 childSetAction("start_btn", &LLFloaterNewIM::onStart, this);
75 childSetAction("close_btn", &LLFloaterNewIM::onClickClose, this); 59 childSetAction("close_btn", &LLFloaterNewIM::onClickClose, this);
76 mSelectionList = LLViewerUICtrlFactory::getNameListByName(this, "user_list"); 60 mSelectionList = getChild<LLNameListCtrl>("user_list");
77 if (mSelectionList) 61 if (mSelectionList)
78 { 62 {
79 mSelectionList->setDoubleClickCallback(&LLFloaterNewIM::onStart); 63 mSelectionList->setDoubleClickCallback(&LLFloaterNewIM::onStart);
@@ -81,7 +65,7 @@ BOOL LLFloaterNewIM::postBuild()
81 } 65 }
82 else 66 else
83 { 67 {
84 llwarns << "LLViewerUICtrlFactory::getNameListByName() returned NULL for 'user_list'" << llendl; 68 llwarns << "LLUICtrlFactory::getNameListByName() returned NULL for 'user_list'" << llendl;
85 } 69 }
86 sOnlineDescriptor = getString("online_descriptor"); 70 sOnlineDescriptor = getString("online_descriptor");
87 sNameFormat = getString("name_format"); 71 sNameFormat = getString("name_format");
@@ -224,17 +208,14 @@ void LLFloaterNewIM::onClickClose(void *userdata)
224} 208}
225 209
226 210
227BOOL LLFloaterNewIM::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent) 211BOOL LLFloaterNewIM::handleKeyHere(KEY key, MASK mask)
228{ 212{
229 BOOL handled = LLFloater::handleKeyHere(key, mask, called_from_parent); 213 BOOL handled = LLFloater::handleKeyHere(key, mask);
230 if (getVisible() && getEnabled() && !called_from_parent) 214 if ( KEY_ESCAPE == key )
231 { 215 {
232 if ( KEY_ESCAPE == key ) 216 handled = TRUE;
233 { 217 // Close talk panel on escape
234 handled = TRUE; 218 gIMMgr->toggle(NULL);
235 // Close talk panel on escape
236 gIMMgr->toggle(NULL);
237 }
238 } 219 }
239 220
240 // Might need to call base class here if not handled 221 // Might need to call base class here if not handled
diff --git a/linden/indra/newview/llfloaternewim.h b/linden/indra/newview/llfloaternewim.h
index 8636e90..e4a7717 100644
--- a/linden/indra/newview/llfloaternewim.h
+++ b/linden/indra/newview/llfloaternewim.h
@@ -44,7 +44,7 @@ public:
44 44
45 /*virtual*/ BOOL postBuild(); 45 /*virtual*/ BOOL postBuild();
46 46
47 /*virtual*/ BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); 47 /*virtual*/ BOOL handleKeyHere(KEY key, MASK mask);
48 virtual BOOL canClose(); 48 virtual BOOL canClose();
49 virtual void close(bool app_quitting); 49 virtual void close(bool app_quitting);
50 50
diff --git a/linden/indra/newview/llfloateropenobject.cpp b/linden/indra/newview/llfloateropenobject.cpp
index bd7bca8..13230a9 100644
--- a/linden/indra/newview/llfloateropenobject.cpp
+++ b/linden/indra/newview/llfloateropenobject.cpp
@@ -50,7 +50,7 @@
50#include "llselectmgr.h" 50#include "llselectmgr.h"
51#include "lluiconstants.h" 51#include "lluiconstants.h"
52#include "llviewerobject.h" 52#include "llviewerobject.h"
53#include "llvieweruictrlfactory.h" 53#include "lluictrlfactory.h"
54#include "llviewerwindow.h" 54#include "llviewerwindow.h"
55 55
56 56
@@ -63,7 +63,7 @@ LLFloaterOpenObject::LLFloaterOpenObject()
63{ 63{
64 LLCallbackMap::map_t factory_map; 64 LLCallbackMap::map_t factory_map;
65 factory_map["object_contents"] = LLCallbackMap(createPanelInventory, this); 65 factory_map["object_contents"] = LLCallbackMap(createPanelInventory, this);
66 gUICtrlFactory->buildFloater(this,"floater_openobject.xml",&factory_map); 66 LLUICtrlFactory::getInstance()->buildFloater(this,"floater_openobject.xml",&factory_map);
67 67
68 childSetAction("copy_to_inventory_button", onClickMoveToInventory, this); 68 childSetAction("copy_to_inventory_button", onClickMoveToInventory, this);
69 childSetAction("copy_and_wear_button", onClickMoveAndWear, this); 69 childSetAction("copy_and_wear_button", onClickMoveAndWear, this);
@@ -106,7 +106,7 @@ void LLFloaterOpenObject::dirty()
106// static 106// static
107void LLFloaterOpenObject::show() 107void LLFloaterOpenObject::show()
108{ 108{
109 LLObjectSelectionHandle object_selection = gSelectMgr->getSelection(); 109 LLObjectSelectionHandle object_selection = LLSelectMgr::getInstance()->getSelection();
110 if (object_selection->getRootObjectCount() != 1) 110 if (object_selection->getRootObjectCount() != 1)
111 { 111 {
112 gViewerWindow->alertXml("UnableToViewContentsMoreThanOne"); 112 gViewerWindow->alertXml("UnableToViewContentsMoreThanOne");
@@ -123,7 +123,7 @@ void LLFloaterOpenObject::show()
123 sInstance->open(); /* Flawfinder: ignore */ 123 sInstance->open(); /* Flawfinder: ignore */
124 sInstance->setFocus(TRUE); 124 sInstance->setFocus(TRUE);
125 125
126 sInstance->mObjectSelection = gSelectMgr->getEditSelection(); 126 sInstance->mObjectSelection = LLSelectMgr::getInstance()->getEditSelection();
127} 127}
128 128
129 129
diff --git a/linden/indra/newview/llfloaterparcel.cpp b/linden/indra/newview/llfloaterparcel.cpp
index e3189a9..6288782 100644
--- a/linden/indra/newview/llfloaterparcel.cpp
+++ b/linden/indra/newview/llfloaterparcel.cpp
@@ -37,10 +37,10 @@
37// viewer project includes 37// viewer project includes
38#include "llcommandhandler.h" 38#include "llcommandhandler.h"
39#include "llpanelplace.h" 39#include "llpanelplace.h"
40#include "llvieweruictrlfactory.h"
41 40
42// linden library includes 41// linden library includes
43#include "lluuid.h" 42#include "lluuid.h"
43#include "lluictrlfactory.h"
44 44
45//----------------------------------------------------------------------------- 45//-----------------------------------------------------------------------------
46// Globals 46// Globals
@@ -84,7 +84,7 @@ void* LLFloaterParcelInfo::createPanelPlace(void* data)
84{ 84{
85 LLFloaterParcelInfo* self = (LLFloaterParcelInfo*)data; 85 LLFloaterParcelInfo* self = (LLFloaterParcelInfo*)data;
86 self->mPanelParcelp = new LLPanelPlace(); // allow edit self 86 self->mPanelParcelp = new LLPanelPlace(); // allow edit self
87 gUICtrlFactory->buildPanel(self->mPanelParcelp, "panel_place.xml"); 87 LLUICtrlFactory::getInstance()->buildPanel(self->mPanelParcelp, "panel_place.xml");
88 return self->mPanelParcelp; 88 return self->mPanelParcelp;
89} 89}
90 90
@@ -96,7 +96,7 @@ LLFloaterParcelInfo::LLFloaterParcelInfo(const std::string& name, const LLUUID &
96 mParcelID( parcel_id ) 96 mParcelID( parcel_id )
97{ 97{
98 mFactoryMap["place_details_panel"] = LLCallbackMap(LLFloaterParcelInfo::createPanelPlace, this); 98 mFactoryMap["place_details_panel"] = LLCallbackMap(LLFloaterParcelInfo::createPanelPlace, this);
99 gUICtrlFactory->buildFloater(this, "floater_preview_url.xml", &getFactoryMap()); 99 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_preview_url.xml", &getFactoryMap());
100 gPlaceInfoInstances.addData(parcel_id, this); 100 gPlaceInfoInstances.addData(parcel_id, this);
101} 101}
102 102
diff --git a/linden/indra/newview/llfloaterpermissionsmgr.cpp b/linden/indra/newview/llfloaterpermissionsmgr.cpp
index 9cc223e..cd9a1de 100644
--- a/linden/indra/newview/llfloaterpermissionsmgr.cpp
+++ b/linden/indra/newview/llfloaterpermissionsmgr.cpp
@@ -102,16 +102,6 @@ LLPermissionsView::LLPermissionsView(const LLRect &rect) : LLView("permissions_v
102{ 102{
103} 103}
104 104
105EWidgetType LLPermissionsView::getWidgetType() const
106{
107 return WIDGET_TYPE_PERMISSIONS_VIEW;
108}
109
110LLString LLPermissionsView::getWidgetTag() const
111{
112 return LL_PERMISSIONS_VIEW_TAG;
113}
114
115void LLPermissionsView::clearPermissionsData() 105void LLPermissionsView::clearPermissionsData()
116{ 106{
117 deleteAllChildren(); 107 deleteAllChildren();
diff --git a/linden/indra/newview/llfloaterpermissionsmgr.h b/linden/indra/newview/llfloaterpermissionsmgr.h
index acd4b5e..01e1ecc 100644
--- a/linden/indra/newview/llfloaterpermissionsmgr.h
+++ b/linden/indra/newview/llfloaterpermissionsmgr.h
@@ -78,9 +78,6 @@ public:
78 LLPermissionsView(const LLRect& rect); 78 LLPermissionsView(const LLRect& rect);
79 virtual ~LLPermissionsView() {}; 79 virtual ~LLPermissionsView() {};
80 80
81 virtual EWidgetType getWidgetType() const;
82 virtual LLString getWidgetTag() const;
83
84public: 81public:
85 void clearPermissionsData(); 82 void clearPermissionsData();
86 void addPermissionsData(const LLString& object_name, const LLUUID& object_id, U32 permissions_flags); 83 void addPermissionsData(const LLString& object_name, const LLUUID& object_id, U32 permissions_flags);
diff --git a/linden/indra/newview/llfloaterpostcard.cpp b/linden/indra/newview/llfloaterpostcard.cpp
index 47f59a6..b140b1c 100644
--- a/linden/indra/newview/llfloaterpostcard.cpp
+++ b/linden/indra/newview/llfloaterpostcard.cpp
@@ -46,7 +46,7 @@
46#include "llbutton.h" 46#include "llbutton.h"
47#include "llviewercontrol.h" 47#include "llviewercontrol.h"
48#include "llviewernetwork.h" 48#include "llviewernetwork.h"
49#include "llvieweruictrlfactory.h" 49#include "lluictrlfactory.h"
50#include "lluploaddialog.h" 50#include "lluploaddialog.h"
51#include "llviewerstats.h" 51#include "llviewerstats.h"
52#include "llviewerwindow.h" 52#include "llviewerwindow.h"
@@ -119,7 +119,7 @@ BOOL LLFloaterPostcard::postBuild()
119 gAgent.buildFullname(name_string); 119 gAgent.buildFullname(name_string);
120 childSetValue("name_form", LLSD(name_string)); 120 childSetValue("name_form", LLSD(name_string));
121 121
122 LLTextEditor* MsgField = LLUICtrlFactory::getTextEditorByName(this, "msg_form"); 122 LLTextEditor* MsgField = getChild<LLTextEditor>("msg_form");
123 if (MsgField) 123 if (MsgField)
124 { 124 {
125 MsgField->setWordWrap(TRUE); 125 MsgField->setWordWrap(TRUE);
@@ -142,7 +142,7 @@ LLFloaterPostcard* LLFloaterPostcard::showFromSnapshot(LLImageJPEG *jpeg, LLImag
142 // It's now our job to clean them up 142 // It's now our job to clean them up
143 LLFloaterPostcard *instance = new LLFloaterPostcard(jpeg, img, image_scale, pos_taken_global); 143 LLFloaterPostcard *instance = new LLFloaterPostcard(jpeg, img, image_scale, pos_taken_global);
144 144
145 gUICtrlFactory->buildFloater(instance, "floater_postcard.xml"); 145 LLUICtrlFactory::getInstance()->buildFloater(instance, "floater_postcard.xml");
146 146
147 S32 left, top; 147 S32 left, top;
148 gFloaterView->getNewFloaterPosition(&left, &top); 148 gFloaterView->getNewFloaterPosition(&left, &top);
@@ -158,7 +158,7 @@ void LLFloaterPostcard::draw()
158 LLGLSUIDefault gls_ui; 158 LLGLSUIDefault gls_ui;
159 LLFloater::draw(); 159 LLFloater::draw();
160 160
161 if(getVisible() && !isMinimized() && mViewerImage.notNull() && mJPEGImage.notNull()) 161 if(!isMinimized() && mViewerImage.notNull() && mJPEGImage.notNull())
162 { 162 {
163 LLRect rect(getRect()); 163 LLRect rect(getRect());
164 164
@@ -332,7 +332,7 @@ void LLFloaterPostcard::onMsgFormFocusRecieved(LLFocusableElement* receiver, voi
332 LLFloaterPostcard* self = (LLFloaterPostcard *)data; 332 LLFloaterPostcard* self = (LLFloaterPostcard *)data;
333 if(self) 333 if(self)
334 { 334 {
335 LLTextEditor* msgForm = LLUICtrlFactory::getTextEditorByName(self, "msg_form"); 335 LLTextEditor* msgForm = self->getChild<LLTextEditor>("msg_form");
336 if(msgForm && msgForm == receiver && msgForm->hasFocus() && !(self->mHasFirstMsgFocus)) 336 if(msgForm && msgForm == receiver && msgForm->hasFocus() && !(self->mHasFirstMsgFocus))
337 { 337 {
338 self->mHasFirstMsgFocus = true; 338 self->mHasFirstMsgFocus = true;
diff --git a/linden/indra/newview/llfloaterpostprocess.cpp b/linden/indra/newview/llfloaterpostprocess.cpp
index 999ad5d..40589fb 100644
--- a/linden/indra/newview/llfloaterpostprocess.cpp
+++ b/linden/indra/newview/llfloaterpostprocess.cpp
@@ -35,7 +35,7 @@
35 35
36#include "llsliderctrl.h" 36#include "llsliderctrl.h"
37#include "llcheckboxctrl.h" 37#include "llcheckboxctrl.h"
38#include "llvieweruictrlfactory.h" 38#include "lluictrlfactory.h"
39#include "llviewerdisplay.h" 39#include "llviewerdisplay.h"
40#include "llpostprocess.h" 40#include "llpostprocess.h"
41#include "llcombobox.h" 41#include "llcombobox.h"
@@ -48,7 +48,7 @@ LLFloaterPostProcess* LLFloaterPostProcess::sPostProcess = NULL;
48 48
49LLFloaterPostProcess::LLFloaterPostProcess() : LLFloater("Post-Process Floater") 49LLFloaterPostProcess::LLFloaterPostProcess() : LLFloater("Post-Process Floater")
50{ 50{
51 gUICtrlFactory->buildFloater(this, "floater_post_process.xml"); 51 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_post_process.xml");
52 52
53 /// Color Filter Callbacks 53 /// Color Filter Callbacks
54 childSetCommitCallback("ColorFilterToggle", &LLFloaterPostProcess::onBoolToggle, (char*)"enable_color_filter"); 54 childSetCommitCallback("ColorFilterToggle", &LLFloaterPostProcess::onBoolToggle, (char*)"enable_color_filter");
@@ -75,11 +75,11 @@ LLFloaterPostProcess::LLFloaterPostProcess() : LLFloater("Post-Process Floater")
75 childSetCommitCallback("BloomStrength", &LLFloaterPostProcess::onFloatControlMoved, (char*)"bloom_strength"); 75 childSetCommitCallback("BloomStrength", &LLFloaterPostProcess::onFloatControlMoved, (char*)"bloom_strength");
76 76
77 // Effect loading and saving. 77 // Effect loading and saving.
78 LLComboBox* comboBox = LLUICtrlFactory::getComboBoxByName(this, "PPEffectsCombo"); 78 LLComboBox* comboBox = getChild<LLComboBox>("PPEffectsCombo");
79 childSetAction("PPLoadEffect", &LLFloaterPostProcess::onLoadEffect, comboBox); 79 childSetAction("PPLoadEffect", &LLFloaterPostProcess::onLoadEffect, comboBox);
80 comboBox->setCommitCallback(onChangeEffectName); 80 comboBox->setCommitCallback(onChangeEffectName);
81 81
82 LLLineEditor* editBox = LLUICtrlFactory::getLineEditorByName(this, "PPEffectNameEditor"); 82 LLLineEditor* editBox = getChild<LLLineEditor>("PPEffectNameEditor");
83 childSetAction("PPSaveEffect", &LLFloaterPostProcess::onSaveEffect, editBox); 83 childSetAction("PPSaveEffect", &LLFloaterPostProcess::onSaveEffect, editBox);
84 84
85 syncMenu(); 85 syncMenu();
@@ -186,8 +186,7 @@ void LLFloaterPostProcess::onChangeEffectName(LLUICtrl* ctrl, void * userData)
186{ 186{
187 // get the combo box and name 187 // get the combo box and name
188 LLComboBox * comboBox = static_cast<LLComboBox*>(ctrl); 188 LLComboBox * comboBox = static_cast<LLComboBox*>(ctrl);
189 LLLineEditor* editBox = LLUICtrlFactory::getLineEditorByName(sPostProcess, 189 LLLineEditor* editBox = sPostProcess->getChild<LLLineEditor>("PPEffectNameEditor");
190 "PPEffectNameEditor");
191 190
192 // set the parameter's new name 191 // set the parameter's new name
193 editBox->setValue(comboBox->getSelectedValue()); 192 editBox->setValue(comboBox->getSelectedValue());
@@ -231,23 +230,21 @@ void LLFloaterPostProcess::onClose(bool app_quitting)
231void LLFloaterPostProcess::syncMenu() 230void LLFloaterPostProcess::syncMenu()
232{ 231{
233 // add the combo boxe contents 232 // add the combo boxe contents
234 LLComboBox* comboBox = LLUICtrlFactory::getComboBoxByName(this, "PPEffectsCombo"); 233 LLComboBox* comboBox = getChild<LLComboBox>("PPEffectsCombo");
235 234
236 if(comboBox != NULL) { 235 comboBox->removeall();
237 comboBox->removeall(); 236
238 237 LLSD::map_const_iterator currEffect;
239 LLSD::map_const_iterator currEffect; 238 for(currEffect = gPostProcess->mAllEffects.beginMap();
240 for(currEffect = gPostProcess->mAllEffects.beginMap(); 239 currEffect != gPostProcess->mAllEffects.endMap();
241 currEffect != gPostProcess->mAllEffects.endMap(); 240 ++currEffect)
242 ++currEffect) 241 {
243 { 242 comboBox->add(currEffect->first);
244 comboBox->add(currEffect->first);
245 }
246
247 // set the current effect as selected.
248 comboBox->selectByValue(gPostProcess->getSelectedEffect());
249 } 243 }
250 244
245 // set the current effect as selected.
246 comboBox->selectByValue(gPostProcess->getSelectedEffect());
247
251 /// Sync Color Filter Menu 248 /// Sync Color Filter Menu
252 childSetValue("ColorFilterToggle", gPostProcess->tweaks.useColorFilter()); 249 childSetValue("ColorFilterToggle", gPostProcess->tweaks.useColorFilter());
253 //childSetValue("ColorFilterGamma", gPostProcess->tweaks.gamma()); 250 //childSetValue("ColorFilterGamma", gPostProcess->tweaks.gamma());
diff --git a/linden/indra/newview/llfloaterpreference.cpp b/linden/indra/newview/llfloaterpreference.cpp
index ff57b5c..f267a2d 100644
--- a/linden/indra/newview/llfloaterpreference.cpp
+++ b/linden/indra/newview/llfloaterpreference.cpp
@@ -69,7 +69,7 @@
69#include "llagent.h" 69#include "llagent.h"
70#include "llviewercontrol.h" 70#include "llviewercontrol.h"
71#include "llviewernetwork.h" 71#include "llviewernetwork.h"
72#include "llvieweruictrlfactory.h" 72#include "lluictrlfactory.h"
73#include "llviewerwindow.h" 73#include "llviewerwindow.h"
74#include "llkeyboard.h" 74#include "llkeyboard.h"
75#include "llscrollcontainer.h" 75#include "llscrollcontainer.h"
@@ -192,7 +192,10 @@ LLPreferenceCore::LLPreferenceCore(LLTabContainer* tab_container, LLButton * def
192 mTabContainer->addTabPanel(mMsgPanel, mMsgPanel->getLabel(), FALSE, onTabChanged, mTabContainer); 192 mTabContainer->addTabPanel(mMsgPanel, mMsgPanel->getLabel(), FALSE, onTabChanged, mTabContainer);
193 mMsgPanel->setDefaultBtn(default_btn); 193 mMsgPanel->setDefaultBtn(default_btn);
194 194
195 mTabContainer->selectTab(gSavedSettings.getS32("LastPrefTab")); 195 if (!mTabContainer->selectTab(gSavedSettings.getS32("LastPrefTab")))
196 {
197 mTabContainer->selectFirstTab();
198 }
196} 199}
197 200
198LLPreferenceCore::~LLPreferenceCore() 201LLPreferenceCore::~LLPreferenceCore()
@@ -326,36 +329,36 @@ void LLPreferenceCore::refreshEnabledGraphics()
326 329
327LLFloaterPreference::LLFloaterPreference() 330LLFloaterPreference::LLFloaterPreference()
328{ 331{
329 gUICtrlFactory->buildFloater(this, "floater_preferences.xml"); 332 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_preferences.xml");
330} 333}
331 334
332BOOL LLFloaterPreference::postBuild() 335BOOL LLFloaterPreference::postBuild()
333{ 336{
334 requires("About...", WIDGET_TYPE_BUTTON); 337 requires<LLButton>("About...");
335 requires("OK", WIDGET_TYPE_BUTTON); 338 requires<LLButton>("OK");
336 requires("Cancel", WIDGET_TYPE_BUTTON); 339 requires<LLButton>("Cancel");
337 requires("Apply", WIDGET_TYPE_BUTTON); 340 requires<LLButton>("Apply");
338 requires("pref core", WIDGET_TYPE_TAB_CONTAINER); 341 requires<LLTabContainer>("pref core");
339 342
340 if (!checkRequirements()) 343 if (!checkRequirements())
341 { 344 {
342 return FALSE; 345 return FALSE;
343 } 346 }
344 347
345 mAboutBtn = LLUICtrlFactory::getButtonByName(this, "About..."); 348 mAboutBtn = getChild<LLButton>("About...");
346 mAboutBtn->setClickedCallback(onClickAbout, this); 349 mAboutBtn->setClickedCallback(onClickAbout, this);
347 350
348 mApplyBtn = LLUICtrlFactory::getButtonByName(this, "Apply"); 351 mApplyBtn = getChild<LLButton>("Apply");
349 mApplyBtn->setClickedCallback(onBtnApply, this); 352 mApplyBtn->setClickedCallback(onBtnApply, this);
350 353
351 mCancelBtn = LLUICtrlFactory::getButtonByName(this, "Cancel"); 354 mCancelBtn = getChild<LLButton>("Cancel");
352 mCancelBtn->setClickedCallback(onBtnCancel, this); 355 mCancelBtn->setClickedCallback(onBtnCancel, this);
353 356
354 mOKBtn = LLUICtrlFactory::getButtonByName(this, "OK"); 357 mOKBtn = getChild<LLButton>("OK");
355 mOKBtn->setClickedCallback(onBtnOK, this); 358 mOKBtn->setClickedCallback(onBtnOK, this);
356 359
357 mPreferenceCore = new LLPreferenceCore( 360 mPreferenceCore = new LLPreferenceCore(
358 LLUICtrlFactory::getTabContainerByName(this, "pref core"), 361 getChild<LLTabContainer>("pref core"),
359 getChild<LLButton>("OK") 362 getChild<LLButton>("OK")
360 ); 363 );
361 364
@@ -371,16 +374,6 @@ LLFloaterPreference::~LLFloaterPreference()
371 delete mPreferenceCore; 374 delete mPreferenceCore;
372} 375}
373 376
374
375void LLFloaterPreference::draw()
376{
377 if( getVisible() )
378 {
379 LLFloater::draw();
380 }
381}
382
383
384void LLFloaterPreference::apply() 377void LLFloaterPreference::apply()
385{ 378{
386 this->mPreferenceCore->apply(); 379 this->mPreferenceCore->apply();
@@ -446,7 +439,7 @@ void LLFloaterPreference::onBtnOK( void* userdata )
446 fp->apply(); 439 fp->apply();
447 fp->close(false); 440 fp->close(false);
448 441
449 gSavedSettings.saveToFile( gSettingsFileName, TRUE ); 442 gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile"), TRUE );
450 443
451 std::string crash_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE); 444 std::string crash_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
452 // save all settings, even if equals defaults 445 // save all settings, even if equals defaults
diff --git a/linden/indra/newview/llfloaterpreference.h b/linden/indra/newview/llfloaterpreference.h
index ad4b3b8..4db42a7 100644
--- a/linden/indra/newview/llfloaterpreference.h
+++ b/linden/indra/newview/llfloaterpreference.h
@@ -118,7 +118,6 @@ public:
118protected: 118protected:
119 LLPreferenceCore *mPreferenceCore; 119 LLPreferenceCore *mPreferenceCore;
120 120
121 /*virtual*/ void draw();
122 /*virtual*/ void onClose(bool app_quitting); 121 /*virtual*/ void onClose(bool app_quitting);
123 122
124 LLButton* mAboutBtn; 123 LLButton* mAboutBtn;
diff --git a/linden/indra/newview/llfloaterproperties.cpp b/linden/indra/newview/llfloaterproperties.cpp
index 3519520..0d2cd5f 100644
--- a/linden/indra/newview/llfloaterproperties.cpp
+++ b/linden/indra/newview/llfloaterproperties.cpp
@@ -56,7 +56,7 @@
56#include "llviewerregion.h" 56#include "llviewerregion.h"
57#include "llviewercontrol.h" 57#include "llviewercontrol.h"
58 58
59#include "llvieweruictrlfactory.h" 59#include "lluictrlfactory.h"
60 60
61 61
62//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 62//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -65,7 +65,7 @@
65// helper class to watch the inventory. 65// helper class to watch the inventory.
66//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 66//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67 67
68class LLPropertiesObserver : public LLInventoryObserver 68class LLPropertiesObserver : public LLInventoryObserver, public LLSingleton<LLPropertiesObserver>
69{ 69{
70public: 70public:
71 LLPropertiesObserver() {} 71 LLPropertiesObserver() {}
@@ -73,7 +73,6 @@ public:
73 virtual void changed(U32 mask); 73 virtual void changed(U32 mask);
74}; 74};
75 75
76LLPropertiesObserver* gPropertiesObserver = NULL;
77void LLPropertiesObserver::changed(U32 mask) 76void LLPropertiesObserver::changed(U32 mask)
78{ 77{
79 // if there's a change we're interested in. 78 // if there's a change we're interested in.
@@ -144,13 +143,13 @@ LLFloaterProperties::LLFloaterProperties(const std::string& name, const LLRect&
144 mObjectID(object_id), 143 mObjectID(object_id),
145 mDirty(TRUE) 144 mDirty(TRUE)
146{ 145{
147 gUICtrlFactory->buildFloater(this,"floater_inventory_item_properties.xml"); 146 LLUICtrlFactory::getInstance()->buildFloater(this,"floater_inventory_item_properties.xml");
148 147
149 // hack to make sure these floaters are observing the inventory. 148 // hack to make sure these floaters are observing the inventory.
150 if(!gPropertiesObserver) 149 if(!gInventory.containsObserver(LLPropertiesObserver::getInstance()))
151 { 150 {
152 gPropertiesObserver = new LLPropertiesObserver; 151 // Note: this is where gPropertiesObserver used to be constructed.
153 gInventory.addObserver(gPropertiesObserver); 152 gInventory.addObserver(LLPropertiesObserver::getInstance());
154 } 153 }
155 // add the object to the static structure 154 // add the object to the static structure
156 LLUUID key = mItemID ^ mObjectID; 155 LLUUID key = mItemID ^ mObjectID;
@@ -473,7 +472,7 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
473 { 472 {
474 childSetValue("CheckShareWithGroup",LLSD((BOOL)TRUE)); 473 childSetValue("CheckShareWithGroup",LLSD((BOOL)TRUE));
475 474
476 LLCheckBoxCtrl* ctl = LLUICtrlFactory::getCheckBoxByName(this,"CheckShareWithGroup"); 475 LLCheckBoxCtrl* ctl = getChild<LLCheckBoxCtrl>("CheckShareWithGroup");
477 if(ctl) 476 if(ctl)
478 { 477 {
479 ctl->setTentative(FALSE); 478 ctl->setTentative(FALSE);
@@ -482,7 +481,7 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
482 else if (!is_group_copy && !is_group_modify && !is_group_move) 481 else if (!is_group_copy && !is_group_modify && !is_group_move)
483 { 482 {
484 childSetValue("CheckShareWithGroup",LLSD((BOOL)FALSE)); 483 childSetValue("CheckShareWithGroup",LLSD((BOOL)FALSE));
485 LLCheckBoxCtrl* ctl = LLUICtrlFactory::getCheckBoxByName(this,"CheckShareWithGroup"); 484 LLCheckBoxCtrl* ctl = getChild<LLCheckBoxCtrl>("CheckShareWithGroup");
486 if(ctl) 485 if(ctl)
487 { 486 {
488 ctl->setTentative(FALSE); 487 ctl->setTentative(FALSE);
@@ -490,7 +489,7 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
490 } 489 }
491 else 490 else
492 { 491 {
493 LLCheckBoxCtrl* ctl = LLUICtrlFactory::getCheckBoxByName(this,"CheckShareWithGroup"); 492 LLCheckBoxCtrl* ctl = getChild<LLCheckBoxCtrl>("CheckShareWithGroup");
494 if(ctl) 493 if(ctl)
495 { 494 {
496 ctl->setTentative(TRUE); 495 ctl->setTentative(TRUE);
@@ -543,7 +542,7 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
543 childSetValue("CheckNextOwnerCopy",LLSD(BOOL(next_owner_mask & PERM_COPY))); 542 childSetValue("CheckNextOwnerCopy",LLSD(BOOL(next_owner_mask & PERM_COPY)));
544 childSetValue("CheckNextOwnerTransfer",LLSD(BOOL(next_owner_mask & PERM_TRANSFER))); 543 childSetValue("CheckNextOwnerTransfer",LLSD(BOOL(next_owner_mask & PERM_TRANSFER)));
545 544
546 LLRadioGroup* radioSaleType = LLUICtrlFactory::getRadioGroupByName(this,"RadioSaleType"); 545 LLRadioGroup* radioSaleType = getChild<LLRadioGroup>("RadioSaleType");
547 if (is_for_sale) 546 if (is_for_sale)
548 { 547 {
549 radioSaleType->setSelectedIndex((S32)sale_info.getSaleType() - 1); 548 radioSaleType->setSelectedIndex((S32)sale_info.getSaleType() - 1);
@@ -605,7 +604,7 @@ void LLFloaterProperties::onCommitName(LLUICtrl* ctrl, void* data)
605 { 604 {
606 return; 605 return;
607 } 606 }
608 LLLineEditor* labelItemName = LLUICtrlFactory::getLineEditorByName(self,"LabelItemName"); 607 LLLineEditor* labelItemName = self->getChild<LLLineEditor>("LabelItemName");
609 608
610 if(labelItemName&& 609 if(labelItemName&&
611 (item->getName() != labelItemName->getText()) && 610 (item->getName() != labelItemName->getText()) &&
@@ -642,7 +641,7 @@ void LLFloaterProperties::onCommitDescription(LLUICtrl* ctrl, void* data)
642 LLViewerInventoryItem* item = (LLViewerInventoryItem*)self->findItem(); 641 LLViewerInventoryItem* item = (LLViewerInventoryItem*)self->findItem();
643 if(!item) return; 642 if(!item) return;
644 643
645 LLLineEditor* labelItemDesc = LLUICtrlFactory::getLineEditorByName(self,"LabelItemDesc"); 644 LLLineEditor* labelItemDesc = self->getChild<LLLineEditor>("LabelItemDesc");
646 if(!labelItemDesc) 645 if(!labelItemDesc)
647 { 646 {
648 return; 647 return;
@@ -684,7 +683,7 @@ void LLFloaterProperties::onCommitPermissions(LLUICtrl* ctrl, void* data)
684 LLPermissions perm(item->getPermissions()); 683 LLPermissions perm(item->getPermissions());
685 684
686 685
687 LLCheckBoxCtrl* CheckShareWithGroup = LLUICtrlFactory::getCheckBoxByName(self,"CheckShareWithGroup"); 686 LLCheckBoxCtrl* CheckShareWithGroup = self->getChild<LLCheckBoxCtrl>("CheckShareWithGroup");
688 687
689 if(CheckShareWithGroup) 688 if(CheckShareWithGroup)
690 { 689 {
@@ -692,26 +691,26 @@ void LLFloaterProperties::onCommitPermissions(LLUICtrl* ctrl, void* data)
692 CheckShareWithGroup->get(), 691 CheckShareWithGroup->get(),
693 PERM_MODIFY | PERM_MOVE | PERM_COPY); 692 PERM_MODIFY | PERM_MOVE | PERM_COPY);
694 } 693 }
695 LLCheckBoxCtrl* CheckEveryoneCopy = LLUICtrlFactory::getCheckBoxByName(self,"CheckEveryoneCopy"); 694 LLCheckBoxCtrl* CheckEveryoneCopy = self->getChild<LLCheckBoxCtrl>("CheckEveryoneCopy");
696 if(CheckEveryoneCopy) 695 if(CheckEveryoneCopy)
697 { 696 {
698 perm.setEveryoneBits(gAgent.getID(), gAgent.getGroupID(), 697 perm.setEveryoneBits(gAgent.getID(), gAgent.getGroupID(),
699 CheckEveryoneCopy->get(), PERM_COPY); 698 CheckEveryoneCopy->get(), PERM_COPY);
700 } 699 }
701 700
702 LLCheckBoxCtrl* CheckNextOwnerModify = LLUICtrlFactory::getCheckBoxByName(self,"CheckNextOwnerModify"); 701 LLCheckBoxCtrl* CheckNextOwnerModify = self->getChild<LLCheckBoxCtrl>("CheckNextOwnerModify");
703 if(CheckNextOwnerModify) 702 if(CheckNextOwnerModify)
704 { 703 {
705 perm.setNextOwnerBits(gAgent.getID(), gAgent.getGroupID(), 704 perm.setNextOwnerBits(gAgent.getID(), gAgent.getGroupID(),
706 CheckNextOwnerModify->get(), PERM_MODIFY); 705 CheckNextOwnerModify->get(), PERM_MODIFY);
707 } 706 }
708 LLCheckBoxCtrl* CheckNextOwnerCopy = LLUICtrlFactory::getCheckBoxByName(self,"CheckNextOwnerCopy"); 707 LLCheckBoxCtrl* CheckNextOwnerCopy = self->getChild<LLCheckBoxCtrl>("CheckNextOwnerCopy");
709 if(CheckNextOwnerCopy) 708 if(CheckNextOwnerCopy)
710 { 709 {
711 perm.setNextOwnerBits(gAgent.getID(), gAgent.getGroupID(), 710 perm.setNextOwnerBits(gAgent.getID(), gAgent.getGroupID(),
712 CheckNextOwnerCopy->get(), PERM_COPY); 711 CheckNextOwnerCopy->get(), PERM_COPY);
713 } 712 }
714 LLCheckBoxCtrl* CheckNextOwnerTransfer = LLUICtrlFactory::getCheckBoxByName(self,"CheckNextOwnerTransfer"); 713 LLCheckBoxCtrl* CheckNextOwnerTransfer = self->getChild<LLCheckBoxCtrl>("CheckNextOwnerTransfer");
715 if(CheckNextOwnerTransfer) 714 if(CheckNextOwnerTransfer)
716 { 715 {
717 perm.setNextOwnerBits(gAgent.getID(), gAgent.getGroupID(), 716 perm.setNextOwnerBits(gAgent.getID(), gAgent.getGroupID(),
@@ -805,7 +804,7 @@ void LLFloaterProperties::updateSaleInfo()
805 // turn on sale info 804 // turn on sale info
806 LLSaleInfo::EForSale sale_type = LLSaleInfo::FS_COPY; 805 LLSaleInfo::EForSale sale_type = LLSaleInfo::FS_COPY;
807 806
808 LLRadioGroup* RadioSaleType = LLUICtrlFactory::getRadioGroupByName(this,"RadioSaleType"); 807 LLRadioGroup* RadioSaleType = getChild<LLRadioGroup>("RadioSaleType");
809 if(RadioSaleType) 808 if(RadioSaleType)
810 { 809 {
811 switch (RadioSaleType->getSelectedIndex()) 810 switch (RadioSaleType->getSelectedIndex())
@@ -832,7 +831,7 @@ void LLFloaterProperties::updateSaleInfo()
832 sale_type = LLSaleInfo::FS_ORIGINAL; 831 sale_type = LLSaleInfo::FS_ORIGINAL;
833 } 832 }
834 833
835 LLLineEditor* EditPrice = LLUICtrlFactory::getLineEditorByName(this,"EditPrice"); 834 LLLineEditor* EditPrice = getChild<LLLineEditor>("EditPrice");
836 835
837 S32 price = -1; 836 S32 price = -1;
838 if(EditPrice) 837 if(EditPrice)
diff --git a/linden/indra/newview/llfloaterregioninfo.cpp b/linden/indra/newview/llfloaterregioninfo.cpp
index 8043fe0..12834b3 100644
--- a/linden/indra/newview/llfloaterregioninfo.cpp
+++ b/linden/indra/newview/llfloaterregioninfo.cpp
@@ -68,7 +68,7 @@
68#include "llinventory.h" 68#include "llinventory.h"
69#include "lltexturectrl.h" 69#include "lltexturectrl.h"
70#include "llviewercontrol.h" 70#include "llviewercontrol.h"
71#include "llvieweruictrlfactory.h" 71#include "lluictrlfactory.h"
72#include "llviewerimage.h" 72#include "llviewerimage.h"
73#include "llviewerimagelist.h" 73#include "llviewerimagelist.h"
74#include "llviewerregion.h" 74#include "llviewerregion.h"
@@ -85,20 +85,6 @@ const S32 CORNER_COUNT = 4;
85/// Local class declaration 85/// Local class declaration
86///---------------------------------------------------------------------------- 86///----------------------------------------------------------------------------
87 87
88/*
89class LLDispatchSetEstateOwner : public LLDispatchHandler
90{
91public:
92 LLDispatchSetEstateOwner() {}
93 virtual ~LLDispatchSetEstateOwner() {}
94 virtual bool operator()(
95 const LLDispatcher* dispatcher,
96 const std::string& key,
97 const sparam_t& strings,
98 const iparam_t& integers);
99};
100*/
101
102class LLDispatchEstateUpdateInfo : public LLDispatchHandler 88class LLDispatchEstateUpdateInfo : public LLDispatchHandler
103{ 89{
104public: 90public:
@@ -168,43 +154,43 @@ LLUUID LLFloaterRegionInfo::sRequestInvoice;
168 154
169LLFloaterRegionInfo::LLFloaterRegionInfo(const LLSD& seed) 155LLFloaterRegionInfo::LLFloaterRegionInfo(const LLSD& seed)
170{ 156{
171 gUICtrlFactory->buildFloater(this, "floater_region_info.xml", NULL, FALSE); 157 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_region_info.xml", NULL, FALSE);
172} 158}
173 159
174BOOL LLFloaterRegionInfo::postBuild() 160BOOL LLFloaterRegionInfo::postBuild()
175{ 161{
176 mTab = gUICtrlFactory->getTabContainerByName(this, "region_panels"); 162 mTab = getChild<LLTabContainer>("region_panels");
177 163
178 // contruct the panels 164 // contruct the panels
179 LLPanelRegionInfo* panel; 165 LLPanelRegionInfo* panel;
180 panel = new LLPanelRegionGeneralInfo; 166 panel = new LLPanelRegionGeneralInfo;
181 mInfoPanels.push_back(panel); 167 mInfoPanels.push_back(panel);
182 gUICtrlFactory->buildPanel(panel, "panel_region_general.xml"); 168 LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_general.xml");
183 mTab->addTabPanel(panel, panel->getLabel(), TRUE); 169 mTab->addTabPanel(panel, panel->getLabel(), TRUE);
184 170
185 panel = new LLPanelRegionDebugInfo; 171 panel = new LLPanelRegionDebugInfo;
186 mInfoPanels.push_back(panel); 172 mInfoPanels.push_back(panel);
187 gUICtrlFactory->buildPanel(panel, "panel_region_debug.xml"); 173 LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_debug.xml");
188 mTab->addTabPanel(panel, panel->getLabel(), FALSE); 174 mTab->addTabPanel(panel, panel->getLabel(), FALSE);
189 175
190 panel = new LLPanelRegionTextureInfo; 176 panel = new LLPanelRegionTextureInfo;
191 mInfoPanels.push_back(panel); 177 mInfoPanels.push_back(panel);
192 gUICtrlFactory->buildPanel(panel, "panel_region_texture.xml"); 178 LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_texture.xml");
193 mTab->addTabPanel(panel, panel->getLabel(), FALSE); 179 mTab->addTabPanel(panel, panel->getLabel(), FALSE);
194 180
195 panel = new LLPanelRegionTerrainInfo; 181 panel = new LLPanelRegionTerrainInfo;
196 mInfoPanels.push_back(panel); 182 mInfoPanels.push_back(panel);
197 gUICtrlFactory->buildPanel(panel, "panel_region_terrain.xml"); 183 LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_terrain.xml");
198 mTab->addTabPanel(panel, panel->getLabel(), FALSE); 184 mTab->addTabPanel(panel, panel->getLabel(), FALSE);
199 185
200 panel = new LLPanelEstateInfo; 186 panel = new LLPanelEstateInfo;
201 mInfoPanels.push_back(panel); 187 mInfoPanels.push_back(panel);
202 gUICtrlFactory->buildPanel(panel, "panel_region_estate.xml"); 188 LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_estate.xml");
203 mTab->addTabPanel(panel, panel->getLabel(), FALSE); 189 mTab->addTabPanel(panel, panel->getLabel(), FALSE);
204 190
205 panel = new LLPanelEstateCovenant; 191 panel = new LLPanelEstateCovenant;
206 mInfoPanels.push_back(panel); 192 mInfoPanels.push_back(panel);
207 gUICtrlFactory->buildPanel(panel, "panel_region_covenant.xml"); 193 LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_covenant.xml");
208 mTab->addTabPanel(panel, panel->getLabel(), FALSE); 194 mTab->addTabPanel(panel, panel->getLabel(), FALSE);
209 195
210 gMessageSystem->setHandlerFunc( 196 gMessageSystem->setHandlerFunc(
@@ -225,14 +211,21 @@ void LLFloaterRegionInfo::onOpen()
225 gFloaterView->getNewFloaterPosition(&left, &top); 211 gFloaterView->getNewFloaterPosition(&left, &top);
226 rect.translate(left,top); 212 rect.translate(left,top);
227 213
228 requestRegionInfo();
229 refreshFromRegion(gAgent.getRegion()); 214 refreshFromRegion(gAgent.getRegion());
215 requestRegionInfo();
230 LLFloater::onOpen(); 216 LLFloater::onOpen();
231} 217}
232 218
233// static 219// static
234void LLFloaterRegionInfo::requestRegionInfo() 220void LLFloaterRegionInfo::requestRegionInfo()
235{ 221{
222 LLTabContainer* tab = findInstance()->getChild<LLTabContainer>("region_panels");
223
224 tab->getChild<LLPanel>("General")->setCtrlsEnabled(FALSE);
225 tab->getChild<LLPanel>("Debug")->setCtrlsEnabled(FALSE);
226 tab->getChild<LLPanel>("Terrain")->setCtrlsEnabled(FALSE);
227 tab->getChild<LLPanel>("Estate")->setCtrlsEnabled(FALSE);
228
236 // Must allow anyone to request the RegionInfo data 229 // Must allow anyone to request the RegionInfo data
237 // so non-owners/non-gods can see the values. 230 // so non-owners/non-gods can see the values.
238 // Therefore can't use an EstateOwnerMessage JC 231 // Therefore can't use an EstateOwnerMessage JC
@@ -242,7 +235,6 @@ void LLFloaterRegionInfo::requestRegionInfo()
242 msg->addUUID("AgentID", gAgent.getID()); 235 msg->addUUID("AgentID", gAgent.getID());
243 msg->addUUID("SessionID", gAgent.getSessionID()); 236 msg->addUUID("SessionID", gAgent.getSessionID());
244 gAgent.sendReliableMessage(); 237 gAgent.sendReliableMessage();
245
246} 238}
247 239
248// static 240// static
@@ -259,11 +251,8 @@ void LLFloaterRegionInfo::processEstateOwnerRequest(LLMessageSystem* msg,void**)
259 LLPanelEstateInfo::initDispatch(dispatch); 251 LLPanelEstateInfo::initDispatch(dispatch);
260 } 252 }
261 253
262 LLTabContainer* tab = LLUICtrlFactory::getTabContainerByName(findInstance(), "region_panels"); 254 LLTabContainer* tab = findInstance()->getChild<LLTabContainer>("region_panels");
263 if (!tab) return; 255 LLPanelEstateInfo* panel = (LLPanelEstateInfo*)tab->getChild<LLPanel>("Estate");
264
265 LLPanelEstateInfo* panel = (LLPanelEstateInfo*)LLUICtrlFactory::getPanelByName(tab, "Estate");
266 if (!panel) return;
267 256
268 // unpack the message 257 // unpack the message
269 std::string request; 258 std::string request;
@@ -278,6 +267,11 @@ void LLFloaterRegionInfo::processEstateOwnerRequest(LLMessageSystem* msg,void**)
278 267
279 //dispatch the message 268 //dispatch the message
280 dispatch.dispatch(request, invoice, strings); 269 dispatch.dispatch(request, invoice, strings);
270
271 LLViewerRegion* region = gAgent.getRegion();
272 BOOL allow_modify = gAgent.isGodlike() || (region && region->canManageEstate());
273 panel->setCtrlsEnabled(allow_modify);
274
281} 275}
282 276
283 277
@@ -292,8 +286,10 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg)
292 return; 286 return;
293 } 287 }
294 288
295 LLTabContainer* tab = LLUICtrlFactory::getTabContainerByName(findInstance(), "region_panels"); 289 LLTabContainer* tab = findInstance()->getChild<LLTabContainer>("region_panels");
296 if(!tab) return; 290
291 LLViewerRegion* region = gAgent.getRegion();
292 BOOL allow_modify = gAgent.isGodlike() || (region && region->canManageEstate());
297 293
298 // extract message 294 // extract message
299 char sim_name[MAX_STRING]; /* Flawfinder: ignore*/ 295 char sim_name[MAX_STRING]; /* Flawfinder: ignore*/
@@ -319,8 +315,7 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg)
319 msg->getF32("RegionInfo", "SunHour", sun_hour); 315 msg->getF32("RegionInfo", "SunHour", sun_hour);
320 316
321 // GENERAL PANEL 317 // GENERAL PANEL
322 panel = LLUICtrlFactory::getPanelByName(tab, "General"); 318 panel = tab->getChild<LLPanel>("General");
323 if(!panel) return;
324 panel->childSetValue("region_text", LLSD(sim_name)); 319 panel->childSetValue("region_text", LLSD(sim_name));
325 320
326 panel->childSetValue("block_terraform_check", (region_flags & REGION_FLAGS_BLOCK_TERRAFORM) ? TRUE : FALSE ); 321 panel->childSetValue("block_terraform_check", (region_flags & REGION_FLAGS_BLOCK_TERRAFORM) ? TRUE : FALSE );
@@ -335,27 +330,26 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg)
335 panel->childSetValue("access_combo", LLSD(LLViewerRegion::accessToString(sim_access)) ); 330 panel->childSetValue("access_combo", LLSD(LLViewerRegion::accessToString(sim_access)) );
336 331
337 332
338 // detect teen grid for maturity 333 // detect teen grid for maturity
339 LLViewerRegion* region = gAgent.getRegion();
340 334
341 U32 parent_estate_id; 335 U32 parent_estate_id;
342 msg->getU32("RegionInfo", "ParentEstateID", parent_estate_id); 336 msg->getU32("RegionInfo", "ParentEstateID", parent_estate_id);
343 BOOL teen_grid = (parent_estate_id == 5); // *TODO add field to estate table and test that 337 BOOL teen_grid = (parent_estate_id == 5); // *TODO add field to estate table and test that
344 panel->childSetEnabled("access_combo", gAgent.isGodlike() || (region && region->canManageEstate() && !teen_grid)); 338 panel->childSetEnabled("access_combo", gAgent.isGodlike() || (region && region->canManageEstate() && !teen_grid));
339 panel->setCtrlsEnabled(allow_modify);
345 340
346 341
347 // DEBUG PANEL 342 // DEBUG PANEL
348 panel = LLUICtrlFactory::getPanelByName(tab, "Debug"); 343 panel = tab->getChild<LLPanel>("Debug");
349 if(!panel) return;
350 344
351 panel->childSetValue("region_text", LLSD(sim_name) ); 345 panel->childSetValue("region_text", LLSD(sim_name) );
352 panel->childSetValue("disable_scripts_check", LLSD((BOOL)(region_flags & REGION_FLAGS_SKIP_SCRIPTS)) ); 346 panel->childSetValue("disable_scripts_check", LLSD((BOOL)(region_flags & REGION_FLAGS_SKIP_SCRIPTS)) );
353 panel->childSetValue("disable_collisions_check", LLSD((BOOL)(region_flags & REGION_FLAGS_SKIP_COLLISIONS)) ); 347 panel->childSetValue("disable_collisions_check", LLSD((BOOL)(region_flags & REGION_FLAGS_SKIP_COLLISIONS)) );
354 panel->childSetValue("disable_physics_check", LLSD((BOOL)(region_flags & REGION_FLAGS_SKIP_PHYSICS)) ); 348 panel->childSetValue("disable_physics_check", LLSD((BOOL)(region_flags & REGION_FLAGS_SKIP_PHYSICS)) );
349 panel->setCtrlsEnabled(allow_modify);
355 350
356 // TERRAIN PANEL 351 // TERRAIN PANEL
357 panel = LLUICtrlFactory::getPanelByName(tab, "Terrain"); 352 panel = tab->getChild<LLPanel>("Terrain");
358 if(!panel) return;
359 353
360 panel->childSetValue("region_text", LLSD(sim_name)); 354 panel->childSetValue("region_text", LLSD(sim_name));
361 panel->childSetValue("water_height_spin", LLSD(water_height)); 355 panel->childSetValue("water_height_spin", LLSD(water_height));
@@ -363,11 +357,11 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg)
363 panel->childSetValue("terrain_lower_spin", LLSD(terrain_lower_limit)); 357 panel->childSetValue("terrain_lower_spin", LLSD(terrain_lower_limit));
364 panel->childSetValue("use_estate_sun_check", LLSD(use_estate_sun)); 358 panel->childSetValue("use_estate_sun_check", LLSD(use_estate_sun));
365 359
366 BOOL allow_modify = gAgent.isGodlike() || (region && region->canManageEstate());
367 panel->childSetValue("fixed_sun_check", LLSD((BOOL)(region_flags & REGION_FLAGS_SUN_FIXED))); 360 panel->childSetValue("fixed_sun_check", LLSD((BOOL)(region_flags & REGION_FLAGS_SUN_FIXED)));
368 panel->childSetEnabled("fixed_sun_check", allow_modify && !use_estate_sun); 361 panel->childSetEnabled("fixed_sun_check", allow_modify && !use_estate_sun);
369 panel->childSetValue("sun_hour_slider", LLSD(sun_hour)); 362 panel->childSetValue("sun_hour_slider", LLSD(sun_hour));
370 panel->childSetEnabled("sun_hour_slider", allow_modify && !use_estate_sun); 363 panel->childSetEnabled("sun_hour_slider", allow_modify && !use_estate_sun);
364 panel->setCtrlsEnabled(allow_modify);
371 365
372 getInstance()->refreshFromRegion( gAgent.getRegion() ); 366 getInstance()->refreshFromRegion( gAgent.getRegion() );
373} 367}
@@ -377,9 +371,8 @@ LLPanelEstateInfo* LLFloaterRegionInfo::getPanelEstate()
377{ 371{
378 LLFloaterRegionInfo* floater = LLFloaterRegionInfo::getInstance(); 372 LLFloaterRegionInfo* floater = LLFloaterRegionInfo::getInstance();
379 if (!floater) return NULL; 373 if (!floater) return NULL;
380 LLTabContainer* tab = LLUICtrlFactory::getTabContainerByName(floater, "region_panels"); 374 LLTabContainer* tab = floater->getChild<LLTabContainer>("region_panels");
381 if (!tab) return NULL; 375 LLPanelEstateInfo* panel = (LLPanelEstateInfo*)tab->getChild<LLPanel>("Estate");
382 LLPanelEstateInfo* panel = (LLPanelEstateInfo*)LLUICtrlFactory::getPanelByName(tab,"Estate");
383 return panel; 376 return panel;
384} 377}
385 378
@@ -388,9 +381,8 @@ LLPanelEstateCovenant* LLFloaterRegionInfo::getPanelCovenant()
388{ 381{
389 LLFloaterRegionInfo* floater = LLFloaterRegionInfo::getInstance(); 382 LLFloaterRegionInfo* floater = LLFloaterRegionInfo::getInstance();
390 if (!floater) return NULL; 383 if (!floater) return NULL;
391 LLTabContainer* tab = LLUICtrlFactory::getTabContainerByName(floater, "region_panels"); 384 LLTabContainer* tab = floater->getChild<LLTabContainer>("region_panels");
392 if (!tab) return NULL; 385 LLPanelEstateCovenant* panel = (LLPanelEstateCovenant*)tab->getChild<LLPanel>("Covenant");
393 LLPanelEstateCovenant* panel = (LLPanelEstateCovenant*)LLUICtrlFactory::getPanelByName(tab, "Covenant");
394 return panel; 386 return panel;
395} 387}
396 388
@@ -584,7 +576,7 @@ BOOL LLPanelRegionGeneralInfo::postBuild()
584 initCtrl("block_terraform_check"); 576 initCtrl("block_terraform_check");
585 initCtrl("block_fly_check"); 577 initCtrl("block_fly_check");
586 initCtrl("allow_damage_check"); 578 initCtrl("allow_damage_check");
587 initCtrl("allow_land_resell_check"); 579 initCtrl("allow_land_resell_check");
588 initCtrl("allow_parcel_changes_check"); 580 initCtrl("allow_parcel_changes_check");
589 initCtrl("agent_limit_spin"); 581 initCtrl("agent_limit_spin");
590 initCtrl("object_bonus_spin"); 582 initCtrl("object_bonus_spin");
@@ -1027,7 +1019,7 @@ bool LLPanelRegionTextureInfo::refreshFromRegion(LLViewerRegion* region)
1027 for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i) 1019 for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i)
1028 { 1020 {
1029 snprintf(buffer, MAX_STRING, "texture_detail_%d", i); /* Flawfinder: ignore */ 1021 snprintf(buffer, MAX_STRING, "texture_detail_%d", i); /* Flawfinder: ignore */
1030 texture_ctrl = LLViewerUICtrlFactory::getTexturePickerByName(this, buffer); 1022 texture_ctrl = getChild<LLTextureCtrl>(buffer);
1031 if(texture_ctrl) 1023 if(texture_ctrl)
1032 { 1024 {
1033 lldebugs << "Detail Texture " << i << ": " 1025 lldebugs << "Detail Texture " << i << ": "
@@ -1075,14 +1067,6 @@ BOOL LLPanelRegionTextureInfo::postBuild()
1075 return LLPanelRegionInfo::postBuild(); 1067 return LLPanelRegionInfo::postBuild();
1076} 1068}
1077 1069
1078void LLPanelRegionTextureInfo::draw()
1079{
1080 if(getVisible())
1081 {
1082 LLPanel::draw();
1083 }
1084}
1085
1086BOOL LLPanelRegionTextureInfo::sendUpdate() 1070BOOL LLPanelRegionTextureInfo::sendUpdate()
1087{ 1071{
1088 llinfos << "LLPanelRegionTextureInfo::sendUpdate()" << llendl; 1072 llinfos << "LLPanelRegionTextureInfo::sendUpdate()" << llendl;
@@ -1105,7 +1089,7 @@ BOOL LLPanelRegionTextureInfo::sendUpdate()
1105 for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i) 1089 for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i)
1106 { 1090 {
1107 snprintf(buffer, MAX_STRING, "texture_detail_%d", i); /* Flawfinder: ignore */ 1091 snprintf(buffer, MAX_STRING, "texture_detail_%d", i); /* Flawfinder: ignore */
1108 texture_ctrl = LLViewerUICtrlFactory::getTexturePickerByName(this, buffer); 1092 texture_ctrl = getChild<LLTextureCtrl>(buffer);
1109 if(texture_ctrl) 1093 if(texture_ctrl)
1110 { 1094 {
1111 LLUUID tmp_id(texture_ctrl->getImageAssetID()); 1095 LLUUID tmp_id(texture_ctrl->getImageAssetID());
@@ -1135,7 +1119,7 @@ BOOL LLPanelRegionTextureInfo::validateTextureSizes()
1135 { 1119 {
1136 char buffer[MAX_STRING]; /* Flawfinder: ignore */ 1120 char buffer[MAX_STRING]; /* Flawfinder: ignore */
1137 snprintf(buffer, MAX_STRING, "texture_detail_%d", i); /* Flawfinder: ignore */ 1121 snprintf(buffer, MAX_STRING, "texture_detail_%d", i); /* Flawfinder: ignore */
1138 LLTextureCtrl* texture_ctrl = LLViewerUICtrlFactory::getTexturePickerByName(this, buffer); 1122 LLTextureCtrl* texture_ctrl = getChild<LLTextureCtrl>(buffer);
1139 if (!texture_ctrl) continue; 1123 if (!texture_ctrl) continue;
1140 1124
1141 LLUUID image_asset_id = texture_ctrl->getImageAssetID(); 1125 LLUUID image_asset_id = texture_ctrl->getImageAssetID();
@@ -1257,10 +1241,10 @@ BOOL LLPanelRegionTerrainInfo::sendUpdate()
1257 LLFloaterRegionInfo* floater = LLFloaterRegionInfo::getInstance(); 1241 LLFloaterRegionInfo* floater = LLFloaterRegionInfo::getInstance();
1258 if (!floater) return true; 1242 if (!floater) return true;
1259 1243
1260 LLTabContainer* tab = LLUICtrlFactory::getTabContainerByName(floater, "region_panels"); 1244 LLTabContainer* tab = floater->getChild<LLTabContainer>("region_panels");
1261 if (!tab) return true; 1245 if (!tab) return true;
1262 1246
1263 LLPanelEstateInfo* panel = (LLPanelEstateInfo*)LLUICtrlFactory::getPanelByName(tab, "Estate"); 1247 LLPanelEstateInfo* panel = (LLPanelEstateInfo*)tab->getChild<LLPanel>("Estate");
1264 if (!panel) return true; 1248 if (!panel) return true;
1265 1249
1266 BOOL estate_global_time = panel->getGlobalTime(); 1250 BOOL estate_global_time = panel->getGlobalTime();
@@ -1690,11 +1674,12 @@ bool LLPanelEstateInfo::isLindenEstate()
1690 return (estate_id <= ESTATE_LAST_LINDEN); 1674 return (estate_id <= ESTATE_LAST_LINDEN);
1691} 1675}
1692 1676
1677typedef std::vector<LLUUID> AgentOrGroupIDsVector;
1693struct LLEstateAccessChangeInfo 1678struct LLEstateAccessChangeInfo
1694{ 1679{
1695 U32 mOperationFlag; // ESTATE_ACCESS_BANNED_AGENT_ADD, _REMOVE, etc. 1680 U32 mOperationFlag; // ESTATE_ACCESS_BANNED_AGENT_ADD, _REMOVE, etc.
1696 LLString mDialogName; 1681 LLString mDialogName;
1697 LLUUID mAgentOrGroupID; 1682 AgentOrGroupIDsVector mAgentOrGroupIDs; // List of agent IDs to apply to this change
1698}; 1683};
1699 1684
1700// Special case callback for groups, since it has different callback format than names 1685// Special case callback for groups, since it has different callback format than names
@@ -1704,7 +1689,7 @@ void LLPanelEstateInfo::addAllowedGroup2(LLUUID id, void* user_data)
1704 LLEstateAccessChangeInfo* change_info = new LLEstateAccessChangeInfo; 1689 LLEstateAccessChangeInfo* change_info = new LLEstateAccessChangeInfo;
1705 change_info->mOperationFlag = ESTATE_ACCESS_ALLOWED_GROUP_ADD; 1690 change_info->mOperationFlag = ESTATE_ACCESS_ALLOWED_GROUP_ADD;
1706 change_info->mDialogName = "EstateAllowedGroupAdd"; 1691 change_info->mDialogName = "EstateAllowedGroupAdd";
1707 change_info->mAgentOrGroupID = id; 1692 change_info->mAgentOrGroupIDs.push_back(id);
1708 1693
1709 if (isLindenEstate()) 1694 if (isLindenEstate())
1710 { 1695 {
@@ -1749,8 +1734,8 @@ void LLPanelEstateInfo::accessAddCore2(S32 option, void* data)
1749 return; 1734 return;
1750 } 1735 }
1751 1736
1752 // avatar picker no multi-select, yes close-on-select 1737 // avatar picker yes multi-select, yes close-on-select
1753 LLFloaterAvatarPicker::show(accessAddCore3, (void*)change_info, FALSE, TRUE); 1738 LLFloaterAvatarPicker::show(accessAddCore3, (void*)change_info, TRUE, TRUE);
1754} 1739}
1755 1740
1756// static 1741// static
@@ -1766,21 +1751,44 @@ void LLPanelEstateInfo::accessAddCore3(const std::vector<std::string>& names, co
1766 return; 1751 return;
1767 } 1752 }
1768 // User did select a name. 1753 // User did select a name.
1769 change_info->mAgentOrGroupID = ids[0]; 1754 change_info->mAgentOrGroupIDs = ids;
1770
1771 // Can't put estate owner on ban list 1755 // Can't put estate owner on ban list
1772 LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate(); 1756 LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate();
1773 if (!panel) return; 1757 if (!panel) return;
1774 LLViewerRegion* region = gAgent.getRegion(); 1758 LLViewerRegion* region = gAgent.getRegion();
1775 if (!region) return; 1759 if (!region) return;
1776 1760
1777 if ((change_info->mOperationFlag & ESTATE_ACCESS_BANNED_AGENT_ADD) 1761 if (change_info->mOperationFlag & ESTATE_ACCESS_ALLOWED_AGENT_ADD)
1778 && (region->getOwner() == change_info->mAgentOrGroupID))
1779 { 1762 {
1780 gViewerWindow->alertXml("OwnerCanNotBeDenied"); 1763 LLCtrlListInterface *list = panel->childGetListInterface("allowed_avatar_name_list");
1781 delete change_info; 1764 int currentCount = (list ? list->getItemCount() : 0);
1782 change_info = NULL; 1765 if (ids.size() + currentCount > ESTATE_MAX_ACCESS_IDS)
1783 return; 1766 {
1767 LLString::format_map_t args;
1768 args["[NUM_ADDED]"] = llformat("%d",ids.size());
1769 args["[MAX_AGENTS]"] = llformat("%d",ESTATE_MAX_ACCESS_IDS);
1770 args["[LIST_TYPE]"] = "Allowed Residents";
1771 args["[NUM_EXCESS]"] = llformat("%d",(ids.size()+currentCount)-ESTATE_MAX_ACCESS_IDS);
1772 gViewerWindow->alertXml("MaxAgentOnRegionBatch", args);
1773 delete change_info;
1774 return;
1775 }
1776 }
1777 if (change_info->mOperationFlag & ESTATE_ACCESS_BANNED_AGENT_ADD)
1778 {
1779 LLCtrlListInterface *list = panel->childGetListInterface("banned_avatar_name_list");
1780 int currentCount = (list ? list->getItemCount() : 0);
1781 if (ids.size() + currentCount > ESTATE_MAX_ACCESS_IDS)
1782 {
1783 LLString::format_map_t args;
1784 args["[NUM_ADDED]"] = llformat("%d",ids.size());
1785 args["[MAX_AGENTS]"] = llformat("%d",ESTATE_MAX_ACCESS_IDS);
1786 args["[LIST_TYPE]"] = "Banned Residents";
1787 args["[NUM_EXCESS]"] = llformat("%d",(ids.size()+currentCount)-ESTATE_MAX_ACCESS_IDS);
1788 gViewerWindow->alertXml("MaxAgentOnRegionBatch", args);
1789 delete change_info;
1790 return;
1791 }
1784 } 1792 }
1785 1793
1786 if (isLindenEstate()) 1794 if (isLindenEstate())
@@ -1802,23 +1810,31 @@ void LLPanelEstateInfo::accessRemoveCore(U32 operation_flag, const char* dialog_
1802{ 1810{
1803 LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate(); 1811 LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate();
1804 if (!panel) return; 1812 if (!panel) return;
1805 LLNameListCtrl* name_list = LLViewerUICtrlFactory::getNameListByName(panel, list_ctrl_name); 1813 LLNameListCtrl* name_list = panel->getChild<LLNameListCtrl>(list_ctrl_name);
1806 if (!name_list) return; 1814 if (!name_list) return;
1807 LLScrollListItem* item = name_list->getFirstSelected(); 1815
1808 if (!item) return; 1816 std::vector<LLScrollListItem*> list_vector = name_list->getAllSelected();
1809 LLUUID agent_id = item->getUUID(); 1817 if (list_vector.size() == 0)
1818 return;
1810 1819
1811 LLEstateAccessChangeInfo* change_info = new LLEstateAccessChangeInfo; 1820 LLEstateAccessChangeInfo* change_info = new LLEstateAccessChangeInfo;
1812 change_info->mAgentOrGroupID = agent_id;
1813 change_info->mOperationFlag = operation_flag; 1821 change_info->mOperationFlag = operation_flag;
1814 change_info->mDialogName = dialog_name; 1822 change_info->mDialogName = dialog_name;
1815 1823
1824 for (std::vector<LLScrollListItem*>::const_iterator iter = list_vector.begin();
1825 iter != list_vector.end();
1826 iter++)
1827 {
1828 LLScrollListItem *item = (*iter);
1829 change_info->mAgentOrGroupIDs.push_back(item->getUUID());
1830 }
1831
1816 if (isLindenEstate()) 1832 if (isLindenEstate())
1817 { 1833 {
1818 // warn on change linden estate 1834 // warn on change linden estate
1819 gViewerWindow->alertXml("ChangeLindenAccess", 1835 gViewerWindow->alertXml("ChangeLindenAccess",
1820 accessRemoveCore2, 1836 accessRemoveCore2,
1821 (void*)change_info); 1837 (void*)change_info);
1822 } 1838 }
1823 else 1839 else
1824 { 1840 {
@@ -1850,9 +1866,9 @@ void LLPanelEstateInfo::accessRemoveCore2(S32 option, void* data)
1850 LLString::format_map_t args; 1866 LLString::format_map_t args;
1851 args["[ALL_ESTATES]"] = all_estates_text(); 1867 args["[ALL_ESTATES]"] = all_estates_text();
1852 gViewerWindow->alertXml(change_info->mDialogName, 1868 gViewerWindow->alertXml(change_info->mDialogName,
1853 args, 1869 args,
1854 accessCoreConfirm, 1870 accessCoreConfirm,
1855 (void*)change_info); 1871 (void*)change_info);
1856 } 1872 }
1857} 1873}
1858 1874
@@ -1862,35 +1878,54 @@ void LLPanelEstateInfo::accessRemoveCore2(S32 option, void* data)
1862void LLPanelEstateInfo::accessCoreConfirm(S32 option, void* data) 1878void LLPanelEstateInfo::accessCoreConfirm(S32 option, void* data)
1863{ 1879{
1864 LLEstateAccessChangeInfo* change_info = (LLEstateAccessChangeInfo*)data; 1880 LLEstateAccessChangeInfo* change_info = (LLEstateAccessChangeInfo*)data;
1865 U32 flags = change_info->mOperationFlag; 1881 const U32 originalFlags = change_info->mOperationFlag;
1866 switch(option) 1882 AgentOrGroupIDsVector& ids = change_info->mAgentOrGroupIDs;
1883
1884 LLViewerRegion* region = gAgent.getRegion();
1885
1886 for (AgentOrGroupIDsVector::const_iterator iter = ids.begin();
1887 iter != ids.end();
1888 iter++)
1867 { 1889 {
1868 case 0: 1890 U32 flags = originalFlags;
1869 // This estate 1891 if (iter + 1 != ids.end())
1870 sendEstateAccessDelta(flags, change_info->mAgentOrGroupID); 1892 flags |= ESTATE_ACCESS_NO_REPLY;
1871 break; 1893
1872 case 1: 1894 const LLUUID id = (*iter);
1895 if ((change_info->mOperationFlag & ESTATE_ACCESS_BANNED_AGENT_ADD)
1896 && region && (region->getOwner() == id))
1873 { 1897 {
1874 // All estates, either than I own or manage for this owner. 1898 gViewerWindow->alertXml("OwnerCanNotBeDenied");
1875 // This will be verified on simulator. JC 1899 break;
1876 LLViewerRegion* region = gAgent.getRegion(); 1900 }
1877 if (!region) break; 1901 switch(option)
1878 if (region->getOwner() == gAgent.getID() 1902 {
1879 || gAgent.isGodlike()) 1903 case 0:
1880 { 1904 // This estate
1881 flags |= ESTATE_ACCESS_APPLY_TO_ALL_ESTATES; 1905 sendEstateAccessDelta(flags, id);
1882 sendEstateAccessDelta(flags, change_info->mAgentOrGroupID); 1906 break;
1883 } 1907 case 1:
1884 else if (region->isEstateManager())
1885 { 1908 {
1886 flags |= ESTATE_ACCESS_APPLY_TO_MANAGED_ESTATES; 1909 // All estates, either than I own or manage for this owner.
1887 sendEstateAccessDelta(flags, change_info->mAgentOrGroupID); 1910 // This will be verified on simulator. JC
1911 if (!region) break;
1912 if (region->getOwner() == gAgent.getID()
1913 || gAgent.isGodlike())
1914 {
1915 flags |= ESTATE_ACCESS_APPLY_TO_ALL_ESTATES;
1916 sendEstateAccessDelta(flags, id);
1917 }
1918 else if (region->isEstateManager())
1919 {
1920 flags |= ESTATE_ACCESS_APPLY_TO_MANAGED_ESTATES;
1921 sendEstateAccessDelta(flags, id);
1922 }
1923 break;
1888 } 1924 }
1889 break; 1925 case 2:
1926 default:
1927 break;
1890 } 1928 }
1891 case 2:
1892 default:
1893 break;
1894 } 1929 }
1895 delete change_info; 1930 delete change_info;
1896 change_info = NULL; 1931 change_info = NULL;
@@ -2041,7 +2076,7 @@ BOOL LLPanelEstateInfo::postBuild()
2041 childSetCommitCallback("sun_hour_slider", onChangeChildCtrl, this); 2076 childSetCommitCallback("sun_hour_slider", onChangeChildCtrl, this);
2042 2077
2043 childSetCommitCallback("allowed_avatar_name_list", onChangeChildCtrl, this); 2078 childSetCommitCallback("allowed_avatar_name_list", onChangeChildCtrl, this);
2044 LLNameListCtrl *avatar_name_list = LLViewerUICtrlFactory::getNameListByName(this, "allowed_avatar_name_list"); 2079 LLNameListCtrl *avatar_name_list = getChild<LLNameListCtrl>("allowed_avatar_name_list");
2045 if (avatar_name_list) 2080 if (avatar_name_list)
2046 { 2081 {
2047 avatar_name_list->setCommitOnSelectionChange(TRUE); 2082 avatar_name_list->setCommitOnSelectionChange(TRUE);
@@ -2052,7 +2087,7 @@ BOOL LLPanelEstateInfo::postBuild()
2052 childSetAction("remove_allowed_avatar_btn", onClickRemoveAllowedAgent, this); 2087 childSetAction("remove_allowed_avatar_btn", onClickRemoveAllowedAgent, this);
2053 2088
2054 childSetCommitCallback("allowed_group_name_list", onChangeChildCtrl, this); 2089 childSetCommitCallback("allowed_group_name_list", onChangeChildCtrl, this);
2055 LLNameListCtrl* group_name_list = LLViewerUICtrlFactory::getNameListByName(this, "allowed_group_name_list"); 2090 LLNameListCtrl* group_name_list = getChild<LLNameListCtrl>("allowed_group_name_list");
2056 if (group_name_list) 2091 if (group_name_list)
2057 { 2092 {
2058 group_name_list->setCommitOnSelectionChange(TRUE); 2093 group_name_list->setCommitOnSelectionChange(TRUE);
@@ -2063,7 +2098,7 @@ BOOL LLPanelEstateInfo::postBuild()
2063 childSetAction("remove_allowed_group_btn", onClickRemoveAllowedGroup, this); 2098 childSetAction("remove_allowed_group_btn", onClickRemoveAllowedGroup, this);
2064 2099
2065 childSetCommitCallback("banned_avatar_name_list", onChangeChildCtrl, this); 2100 childSetCommitCallback("banned_avatar_name_list", onChangeChildCtrl, this);
2066 LLNameListCtrl* banned_name_list = LLViewerUICtrlFactory::getNameListByName(this, "banned_avatar_name_list"); 2101 LLNameListCtrl* banned_name_list = getChild<LLNameListCtrl>("banned_avatar_name_list");
2067 if (banned_name_list) 2102 if (banned_name_list)
2068 { 2103 {
2069 banned_name_list->setCommitOnSelectionChange(TRUE); 2104 banned_name_list->setCommitOnSelectionChange(TRUE);
@@ -2074,7 +2109,7 @@ BOOL LLPanelEstateInfo::postBuild()
2074 childSetAction("remove_banned_avatar_btn", onClickRemoveBannedAgent, this); 2109 childSetAction("remove_banned_avatar_btn", onClickRemoveBannedAgent, this);
2075 2110
2076 childSetCommitCallback("estate_manager_name_list", onChangeChildCtrl, this); 2111 childSetCommitCallback("estate_manager_name_list", onChangeChildCtrl, this);
2077 LLNameListCtrl* manager_name_list = LLViewerUICtrlFactory::getNameListByName(this, "estate_manager_name_list"); 2112 LLNameListCtrl* manager_name_list = getChild<LLNameListCtrl>("estate_manager_name_list");
2078 if (manager_name_list) 2113 if (manager_name_list)
2079 { 2114 {
2080 manager_name_list->setCommitOnSelectionChange(TRUE); 2115 manager_name_list->setCommitOnSelectionChange(TRUE);
@@ -2477,13 +2512,13 @@ void LLPanelEstateInfo::callbackCacheName(
2477 2512
2478void LLPanelEstateInfo::clearAccessLists() 2513void LLPanelEstateInfo::clearAccessLists()
2479{ 2514{
2480 LLNameListCtrl* name_list = LLViewerUICtrlFactory::getNameListByName(this, "allowed_avatar_name_list"); 2515 LLNameListCtrl* name_list = getChild<LLNameListCtrl>("allowed_avatar_name_list");
2481 if (name_list) 2516 if (name_list)
2482 { 2517 {
2483 name_list->deleteAllItems(); 2518 name_list->deleteAllItems();
2484 } 2519 }
2485 2520
2486 name_list = LLViewerUICtrlFactory::getNameListByName(this, "banned_avatar_name_list"); 2521 name_list = getChild<LLNameListCtrl>("banned_avatar_name_list");
2487 if (name_list) 2522 if (name_list)
2488 { 2523 {
2489 name_list->deleteAllItems(); 2524 name_list->deleteAllItems();
@@ -2517,7 +2552,7 @@ BOOL LLPanelEstateInfo::checkRemovalButton(std::string name)
2517 } 2552 }
2518 2553
2519 // enable the remove button if something is selected 2554 // enable the remove button if something is selected
2520 LLNameListCtrl* name_list = LLViewerUICtrlFactory::getNameListByName(this, name); 2555 LLNameListCtrl* name_list = getChild<LLNameListCtrl>(name);
2521 childSetEnabled(btn_name.c_str(), name_list && name_list->getFirstSelected() ? TRUE : FALSE); 2556 childSetEnabled(btn_name.c_str(), name_list && name_list->getFirstSelected() ? TRUE : FALSE);
2522 2557
2523 return (btn_name != ""); 2558 return (btn_name != "");
@@ -2790,10 +2825,7 @@ void LLPanelEstateCovenant::onLoadComplete(LLVFS *vfs,
2790 } 2825 }
2791 else 2826 else
2792 { 2827 {
2793 if( gViewerStats ) 2828 LLViewerStats::getInstance()->incStat( LLViewerStats::ST_DOWNLOAD_FAILED );
2794 {
2795 gViewerStats->incStat( LLViewerStats::ST_DOWNLOAD_FAILED );
2796 }
2797 2829
2798 if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status || 2830 if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status ||
2799 LL_ERR_FILE_EMPTY == status) 2831 LL_ERR_FILE_EMPTY == status)
@@ -2914,33 +2946,6 @@ void LLPanelEstateCovenant::setCovenantTextEditor(const std::string& text)
2914 mEditor->setText(text); 2946 mEditor->setText(text);
2915} 2947}
2916 2948
2917/*
2918// AgentData = agent_id
2919// RequestData = "setowner"
2920// StringData[0] = compressed owner id
2921// IntegerData[0] = serial
2922bool LLDispatchSetEstateOwner::operator()(
2923 const LLDispatcher* dispatcher,
2924 const std::string& key,
2925 const sparam_t& strings,
2926 const iparam_t& integers)
2927{
2928 LLFloaterRegionInfo* floater = LLFloaterRegionInfo::getInstance();
2929 if (!floater) return true;
2930
2931 LLTabContainer* tab = (LLTabContainer*)(floater->getChildByName("region_panels"));
2932 if (!tab) return true;
2933
2934 LLPanelEstateInfo* panel = (LLPanelEstateInfo*)(tab->getChildByName("Estate"));
2935 if (!panel) return true;
2936
2937 // TODO -- check owner, and disable floater if owner
2938 // does not match
2939
2940 return true;
2941}
2942*/
2943
2944// key = "estateupdateinfo" 2949// key = "estateupdateinfo"
2945// strings[0] = estate name 2950// strings[0] = estate name
2946// strings[1] = str(owner_id) 2951// strings[1] = str(owner_id)
@@ -3073,7 +3078,7 @@ bool LLDispatchSetEstateAccess::operator()(
3073 if (access_flags & ESTATE_ACCESS_ALLOWED_AGENTS) 3078 if (access_flags & ESTATE_ACCESS_ALLOWED_AGENTS)
3074 { 3079 {
3075 LLNameListCtrl* allowed_agent_name_list; 3080 LLNameListCtrl* allowed_agent_name_list;
3076 allowed_agent_name_list = LLViewerUICtrlFactory::getNameListByName(panel, "allowed_avatar_name_list"); 3081 allowed_agent_name_list = panel->getChild<LLNameListCtrl>("allowed_avatar_name_list");
3077 3082
3078 int totalAllowedAgents = num_allowed_agents; 3083 int totalAllowedAgents = num_allowed_agents;
3079 3084
@@ -3104,7 +3109,7 @@ bool LLDispatchSetEstateAccess::operator()(
3104 if (access_flags & ESTATE_ACCESS_ALLOWED_GROUPS) 3109 if (access_flags & ESTATE_ACCESS_ALLOWED_GROUPS)
3105 { 3110 {
3106 LLNameListCtrl* allowed_group_name_list; 3111 LLNameListCtrl* allowed_group_name_list;
3107 allowed_group_name_list = LLViewerUICtrlFactory::getNameListByName(panel, "allowed_group_name_list"); 3112 allowed_group_name_list = panel->getChild<LLNameListCtrl>("allowed_group_name_list");
3108 3113
3109 std::string msg = llformat("Allowed groups: (%d, max %d)", 3114 std::string msg = llformat("Allowed groups: (%d, max %d)",
3110 num_allowed_groups, 3115 num_allowed_groups,
@@ -3128,7 +3133,7 @@ bool LLDispatchSetEstateAccess::operator()(
3128 if (access_flags & ESTATE_ACCESS_BANNED_AGENTS) 3133 if (access_flags & ESTATE_ACCESS_BANNED_AGENTS)
3129 { 3134 {
3130 LLNameListCtrl* banned_agent_name_list; 3135 LLNameListCtrl* banned_agent_name_list;
3131 banned_agent_name_list = LLViewerUICtrlFactory::getNameListByName(panel, "banned_avatar_name_list"); 3136 banned_agent_name_list = panel->getChild<LLNameListCtrl>("banned_avatar_name_list");
3132 3137
3133 int totalBannedAgents = num_banned_agents; 3138 int totalBannedAgents = num_banned_agents;
3134 3139
@@ -3165,7 +3170,7 @@ bool LLDispatchSetEstateAccess::operator()(
3165 panel->childSetValue("estate_manager_label", LLSD(msg)); 3170 panel->childSetValue("estate_manager_label", LLSD(msg));
3166 3171
3167 LLNameListCtrl* estate_manager_name_list = 3172 LLNameListCtrl* estate_manager_name_list =
3168 LLViewerUICtrlFactory::getNameListByName(panel, "estate_manager_name_list"); 3173 panel->getChild<LLNameListCtrl>("estate_manager_name_list");
3169 if (estate_manager_name_list) 3174 if (estate_manager_name_list)
3170 { 3175 {
3171 estate_manager_name_list->deleteAllItems(); // Clear existing entries 3176 estate_manager_name_list->deleteAllItems(); // Clear existing entries
diff --git a/linden/indra/newview/llfloaterregioninfo.h b/linden/indra/newview/llfloaterregioninfo.h
index 096c78b..5e8ca1e 100644
--- a/linden/indra/newview/llfloaterregioninfo.h
+++ b/linden/indra/newview/llfloaterregioninfo.h
@@ -212,7 +212,6 @@ public:
212 212
213 // LLPanel && LLView 213 // LLPanel && LLView
214 virtual BOOL postBuild(); 214 virtual BOOL postBuild();
215 virtual void draw();
216 215
217protected: 216protected:
218 virtual BOOL sendUpdate(); 217 virtual BOOL sendUpdate();
diff --git a/linden/indra/newview/llfloaterreleasemsg.cpp b/linden/indra/newview/llfloaterreleasemsg.cpp
index 4f122f5..fc35e5c 100644
--- a/linden/indra/newview/llfloaterreleasemsg.cpp
+++ b/linden/indra/newview/llfloaterreleasemsg.cpp
@@ -31,7 +31,7 @@
31 31
32#include "llviewerprecompiledheaders.h" 32#include "llviewerprecompiledheaders.h"
33 33
34#include "llvieweruictrlfactory.h" 34#include "lluictrlfactory.h"
35#include "llviewerwindow.h" 35#include "llviewerwindow.h"
36#include "llviewercontrol.h" 36#include "llviewercontrol.h"
37#include "llfloaterreleasemsg.h" 37#include "llfloaterreleasemsg.h"
@@ -64,7 +64,7 @@ LLFloaterReleaseMsg::LLFloaterReleaseMsg()
64 mWebBrowser( 0 ) 64 mWebBrowser( 0 )
65{ 65{
66 // create floater from its XML definition 66 // create floater from its XML definition
67 gUICtrlFactory->buildFloater( this, "floater_sim_release_message.xml" ); 67 LLUICtrlFactory::getInstance()->buildFloater( this, "floater_sim_release_message.xml" );
68 68
69 mTitleBase = getTitle(); 69 mTitleBase = getTitle();
70 70
@@ -73,7 +73,7 @@ LLFloaterReleaseMsg::LLFloaterReleaseMsg()
73 reshape( rect.getWidth(), rect.getHeight(), FALSE ); 73 reshape( rect.getWidth(), rect.getHeight(), FALSE );
74 setRect( rect ); 74 setRect( rect );
75 75
76 mWebBrowser = LLViewerUICtrlFactory::getWebBrowserByName(this, "release_message_floater_browser" ); 76 mWebBrowser = getChild<LLWebBrowserCtrl>("release_message_floater_browser" );
77 if ( mWebBrowser ) 77 if ( mWebBrowser )
78 { 78 {
79 // observe browser events 79 // observe browser events
diff --git a/linden/indra/newview/llfloaterreporter.cpp b/linden/indra/newview/llfloaterreporter.cpp
index 5c076f0..0c1b9ee 100644
--- a/linden/indra/newview/llfloaterreporter.cpp
+++ b/linden/indra/newview/llfloaterreporter.cpp
@@ -80,7 +80,7 @@
80#include "lldir.h" 80#include "lldir.h"
81#include "llselectmgr.h" 81#include "llselectmgr.h"
82#include "llviewerbuild.h" 82#include "llviewerbuild.h"
83#include "llvieweruictrlfactory.h" 83#include "lluictrlfactory.h"
84#include "llappviewer.h" 84#include "llappviewer.h"
85 85
86#include "llassetuploadresponders.h" 86#include "llassetuploadresponders.h"
@@ -124,16 +124,16 @@ LLFloaterReporter::LLFloaterReporter(
124{ 124{
125 if (report_type == BUG_REPORT) 125 if (report_type == BUG_REPORT)
126 { 126 {
127 gUICtrlFactory->buildFloater(this, "floater_report_bug.xml"); 127 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_report_bug.xml");
128 } 128 }
129 else 129 else
130 { 130 {
131 gUICtrlFactory->buildFloater(this, "floater_report_abuse.xml"); 131 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_report_abuse.xml");
132 } 132 }
133 133
134 childSetText("abuse_location_edit", gAgent.getSLURL() ); 134 childSetText("abuse_location_edit", gAgent.getSLURL() );
135 135
136 LLButton* pick_btn = LLUICtrlFactory::getButtonByName(this, "pick_btn"); 136 LLButton* pick_btn = getChild<LLButton>("pick_btn");
137 if (pick_btn) 137 if (pick_btn)
138 { 138 {
139 // XUI: Why aren't these in viewerart.ini? 139 // XUI: Why aren't these in viewerart.ini?
@@ -145,7 +145,7 @@ LLFloaterReporter::LLFloaterReporter(
145 if (report_type != BUG_REPORT) 145 if (report_type != BUG_REPORT)
146 { 146 {
147 // abuser name is selected from a list 147 // abuser name is selected from a list
148 LLLineEditor* le = (LLLineEditor*)getCtrlByNameAndType("abuser_name_edit", WIDGET_TYPE_LINE_EDITOR); 148 LLLineEditor* le = getChild<LLLineEditor>("abuser_name_edit");
149 le->setEnabled( FALSE ); 149 le->setEnabled( FALSE );
150 } 150 }
151 151
@@ -454,12 +454,12 @@ void LLFloaterReporter::onClickCancel(void *userdata)
454void LLFloaterReporter::onClickObjPicker(void *userdata) 454void LLFloaterReporter::onClickObjPicker(void *userdata)
455{ 455{
456 LLFloaterReporter *self = (LLFloaterReporter *)userdata; 456 LLFloaterReporter *self = (LLFloaterReporter *)userdata;
457 gToolObjPicker->setExitCallback(LLFloaterReporter::closePickTool, self); 457 LLToolObjPicker::getInstance()->setExitCallback(LLFloaterReporter::closePickTool, self);
458 gToolMgr->setTransientTool(gToolObjPicker); 458 LLToolMgr::getInstance()->setTransientTool(LLToolObjPicker::getInstance());
459 self->mPicking = TRUE; 459 self->mPicking = TRUE;
460 self->childSetText("object_name", LLString::null); 460 self->childSetText("object_name", LLString::null);
461 self->childSetText("owner_name", LLString::null); 461 self->childSetText("owner_name", LLString::null);
462 LLButton* pick_btn = LLUICtrlFactory::getButtonByName(self, "pick_btn"); 462 LLButton* pick_btn = self->getChild<LLButton>("pick_btn");
463 if (pick_btn) pick_btn->setToggleState(TRUE); 463 if (pick_btn) pick_btn->setToggleState(TRUE);
464} 464}
465 465
@@ -469,12 +469,12 @@ void LLFloaterReporter::closePickTool(void *userdata)
469{ 469{
470 LLFloaterReporter *self = (LLFloaterReporter *)userdata; 470 LLFloaterReporter *self = (LLFloaterReporter *)userdata;
471 471
472 LLUUID object_id = gToolObjPicker->getObjectID(); 472 LLUUID object_id = LLToolObjPicker::getInstance()->getObjectID();
473 self->getObjectInfo(object_id); 473 self->getObjectInfo(object_id);
474 474
475 gToolMgr->clearTransientTool(); 475 LLToolMgr::getInstance()->clearTransientTool();
476 self->mPicking = FALSE; 476 self->mPicking = FALSE;
477 LLButton* pick_btn = LLUICtrlFactory::getButtonByName(self, "pick_btn"); 477 LLButton* pick_btn = self->getChild<LLButton>("pick_btn");
478 if (pick_btn) pick_btn->setToggleState(FALSE); 478 if (pick_btn) pick_btn->setToggleState(FALSE);
479} 479}
480 480
@@ -662,7 +662,7 @@ LLSD LLFloaterReporter::gatherReport()
662 } 662 }
663 663
664 LLString category_name; 664 LLString category_name;
665 LLComboBox* combo = LLUICtrlFactory::getComboBoxByName(this, "category_combo"); 665 LLComboBox* combo = getChild<LLComboBox>( "category_combo");
666 if (combo) 666 if (combo)
667 { 667 {
668 category_name = combo->getSelectedItemLabel(); // want label, not value 668 category_name = combo->getSelectedItemLabel(); // want label, not value
@@ -1003,7 +1003,7 @@ void LLFloaterReporter::addDescription(const LLString& description, LLMeanCollis
1003 LLFloaterReporter *self = gReporterInstances[COMPLAINT_REPORT]; 1003 LLFloaterReporter *self = gReporterInstances[COMPLAINT_REPORT];
1004 if (self) 1004 if (self)
1005 { 1005 {
1006 LLTextEditor* text = LLUICtrlFactory::getTextEditorByName(self, "details_edit"); 1006 LLTextEditor* text = self->getChild<LLTextEditor>("details_edit");
1007 if (text) 1007 if (text)
1008 { 1008 {
1009 text->insertText(description); 1009 text->insertText(description);
diff --git a/linden/indra/newview/llfloaterscriptdebug.cpp b/linden/indra/newview/llfloaterscriptdebug.cpp
index e25468b..3115b69 100644
--- a/linden/indra/newview/llfloaterscriptdebug.cpp
+++ b/linden/indra/newview/llfloaterscriptdebug.cpp
@@ -31,7 +31,7 @@
31 31
32#include "llviewerprecompiledheaders.h" 32#include "llviewerprecompiledheaders.h"
33 33
34#include "llvieweruictrlfactory.h" 34#include "lluictrlfactory.h"
35#include "llfloaterscriptdebug.h" 35#include "llfloaterscriptdebug.h"
36 36
37#include "llfontgl.h" 37#include "llfontgl.h"
@@ -84,7 +84,7 @@ BOOL LLFloaterScriptDebug::postBuild()
84 if (mTabContainer) 84 if (mTabContainer)
85 { 85 {
86 // *FIX: apparantly fails for tab containers? 86 // *FIX: apparantly fails for tab containers?
87// mTabContainer->requires("all_scripts", WIDGET_TYPE_FLOATER); 87// mTabContainer->requires<LLFloater>("all_scripts");
88// mTabContainer->checkRequirements(); 88// mTabContainer->checkRequirements();
89 return TRUE; 89 return TRUE;
90 } 90 }
@@ -104,7 +104,7 @@ LLFloater* LLFloaterScriptDebug::addOutputWindow(const LLUUID &object_id)
104 sInstance = new LLFloaterScriptDebug(); 104 sInstance = new LLFloaterScriptDebug();
105 LLCallbackMap::map_t factory_map; 105 LLCallbackMap::map_t factory_map;
106 factory_map["all_scripts"] = LLCallbackMap(getOutputWindow, NULL); 106 factory_map["all_scripts"] = LLCallbackMap(getOutputWindow, NULL);
107 gUICtrlFactory->buildFloater(sInstance, "floater_script_debug.xml", &factory_map); 107 LLUICtrlFactory::getInstance()->buildFloater(sInstance, "floater_script_debug.xml", &factory_map);
108 sInstance->setVisible(FALSE); 108 sInstance->setVisible(FALSE);
109 } 109 }
110 110
@@ -128,7 +128,7 @@ void LLFloaterScriptDebug::addScriptLine(const std::string &utf8mesg, const std:
128 128
129 if (objectp) 129 if (objectp)
130 { 130 {
131 objectp->setIcon(gImageList.getImage(LLUUID(gViewerArt.getString("script_error.tga")))); 131 objectp->setIcon(gImageList.getImageFromFile("script_error.j2c", TRUE, TRUE));
132 floater_label = llformat("%s(%.2f, %.2f)", user_name.c_str(), objectp->getPositionRegion().mV[VX], objectp->getPositionRegion().mV[VY]); 132 floater_label = llformat("%s(%.2f, %.2f)", user_name.c_str(), objectp->getPositionRegion().mV[VX], objectp->getPositionRegion().mV[VY]);
133 } 133 }
134 else 134 else
diff --git a/linden/indra/newview/llfloatersellland.cpp b/linden/indra/newview/llfloatersellland.cpp
index 0be9246..90e4dd3 100644
--- a/linden/indra/newview/llfloatersellland.cpp
+++ b/linden/indra/newview/llfloatersellland.cpp
@@ -42,7 +42,7 @@
42#include "lltexturectrl.h" 42#include "lltexturectrl.h"
43#include "llviewercontrol.h" 43#include "llviewercontrol.h"
44#include "llviewerparcelmgr.h" 44#include "llviewerparcelmgr.h"
45#include "llvieweruictrlfactory.h" 45#include "lluictrlfactory.h"
46#include "llviewerwindow.h" 46#include "llviewerwindow.h"
47 47
48// defined in llfloaterland.cpp 48// defined in llfloaterland.cpp
@@ -122,7 +122,7 @@ LLFloaterSellLandUI* LLFloaterSellLandUI::soleInstance(bool createIfNeeded)
122 { 122 {
123 sInstance = new LLFloaterSellLandUI(); 123 sInstance = new LLFloaterSellLandUI();
124 124
125 gUICtrlFactory->buildFloater(sInstance, "floater_sell_land.xml"); 125 LLUICtrlFactory::getInstance()->buildFloater(sInstance, "floater_sell_land.xml");
126 sInstance->center(); 126 sInstance->center();
127 } 127 }
128 128
@@ -131,7 +131,7 @@ LLFloaterSellLandUI* LLFloaterSellLandUI::soleInstance(bool createIfNeeded)
131 if (!parcelSelectionObserver) 131 if (!parcelSelectionObserver)
132 { 132 {
133 parcelSelectionObserver = new SelectionObserver; 133 parcelSelectionObserver = new SelectionObserver;
134 gParcelMgr->addObserver(parcelSelectionObserver); 134 LLViewerParcelMgr::getInstance()->addObserver(parcelSelectionObserver);
135 } 135 }
136 136
137 return sInstance; 137 return sInstance;
@@ -156,14 +156,14 @@ void LLFloaterSellLandUI::SelectionObserver::changed()
156 LLFloaterSellLandUI* ui = LLFloaterSellLandUI::soleInstance(false); 156 LLFloaterSellLandUI* ui = LLFloaterSellLandUI::soleInstance(false);
157 if (ui) 157 if (ui)
158 { 158 {
159 if (gParcelMgr->selectionEmpty()) 159 if (LLViewerParcelMgr::getInstance()->selectionEmpty())
160 { 160 {
161 ui->close(); 161 ui->close();
162 } 162 }
163 else { 163 else {
164 ui->setParcel( 164 ui->setParcel(
165 gParcelMgr->getSelectionRegion(), 165 LLViewerParcelMgr::getInstance()->getSelectionRegion(),
166 gParcelMgr->getParcelSelection()); 166 LLViewerParcelMgr::getInstance()->getParcelSelection());
167 } 167 }
168 } 168 }
169} 169}
@@ -251,22 +251,22 @@ void LLFloaterSellLandUI::updateParcelInfo()
251 251
252void LLFloaterSellLandUI::setBadge(const char* id, Badge badge) 252void LLFloaterSellLandUI::setBadge(const char* id, Badge badge)
253{ 253{
254 static LLUUID badgeOK(gViewerArt.getString("badge_ok.tga")); 254 static LLString badgeOK("badge_ok.j2c");
255 static LLUUID badgeNote(gViewerArt.getString("badge_note.tga")); 255 static LLString badgeNote("badge_note.j2c");
256 static LLUUID badgeWarn(gViewerArt.getString("badge_warn.tga")); 256 static LLString badgeWarn("badge_warn.j2c");
257 static LLUUID badgeError(gViewerArt.getString("badge_error.tga")); 257 static LLString badgeError("badge_error.j2c");
258 258
259 LLUUID badgeUUID; 259 LLString badgeName;
260 switch (badge) 260 switch (badge)
261 { 261 {
262 default: 262 default:
263 case BADGE_OK: badgeUUID = badgeOK; break; 263 case BADGE_OK: badgeName = badgeOK; break;
264 case BADGE_NOTE: badgeUUID = badgeNote; break; 264 case BADGE_NOTE: badgeName = badgeNote; break;
265 case BADGE_WARN: badgeUUID = badgeWarn; break; 265 case BADGE_WARN: badgeName = badgeWarn; break;
266 case BADGE_ERROR: badgeUUID = badgeError; break; 266 case BADGE_ERROR: badgeName = badgeError; break;
267 } 267 }
268 268
269 childSetValue(id, badgeUUID); 269 childSetValue(id, badgeName);
270} 270}
271 271
272void LLFloaterSellLandUI::refreshUI() 272void LLFloaterSellLandUI::refreshUI()
@@ -274,7 +274,7 @@ void LLFloaterSellLandUI::refreshUI()
274 LLParcel* parcelp = mParcelSelection->getParcel(); 274 LLParcel* parcelp = mParcelSelection->getParcel();
275 if (!parcelp) return; 275 if (!parcelp) return;
276 276
277 LLTextureCtrl* snapshot = LLViewerUICtrlFactory::getTexturePickerByName(this, "info_image"); 277 LLTextureCtrl* snapshot = getChild<LLTextureCtrl>("info_image");
278 if (snapshot) 278 if (snapshot)
279 { 279 {
280 snapshot->setImageAssetID(mParcelSnapshot); 280 snapshot->setImageAssetID(mParcelSnapshot);
@@ -451,7 +451,7 @@ void LLFloaterSellLandUI::doShowObjects(void *userdata)
451// static 451// static
452void LLFloaterSellLandUI::callbackHighlightTransferable(S32 option, void* userdata) 452void LLFloaterSellLandUI::callbackHighlightTransferable(S32 option, void* userdata)
453{ 453{
454 gSelectMgr->unhighlightAll(); 454 LLSelectMgr::getInstance()->unhighlightAll();
455} 455}
456 456
457// static 457// static
@@ -546,7 +546,7 @@ void LLFloaterSellLandUI::onConfirmSale(S32 option, void *userdata)
546 } 546 }
547 547
548 // Send update to server 548 // Send update to server
549 gParcelMgr->sendParcelPropertiesUpdate( parcel ); 549 LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel );
550 550
551 self->close(); 551 self->close();
552} 552}
diff --git a/linden/indra/newview/llfloatersettingsdebug.cpp b/linden/indra/newview/llfloatersettingsdebug.cpp
new file mode 100644
index 0000000..2e14aac
--- /dev/null
+++ b/linden/indra/newview/llfloatersettingsdebug.cpp
@@ -0,0 +1,492 @@
1/**
2 * @file llfloatersettingsdebug.cpp
3 * @brief floater for debugging internal viewer settings
4 *
5 * $LicenseInfo:firstyear=2001&license=viewergpl$
6 *
7 * Copyright (c) 2001-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#include "llfloatersettingsdebug.h"
34#include "llfloater.h"
35#include "lluictrlfactory.h"
36#include "llfirstuse.h"
37#include "llcombobox.h"
38#include "llspinctrl.h"
39#include "llcolorswatch.h"
40#include "llviewercontrol.h"
41
42LLFloaterSettingsDebug* LLFloaterSettingsDebug::sInstance = NULL;
43
44LLFloaterSettingsDebug::LLFloaterSettingsDebug() : LLFloater("Configuration Editor")
45{
46}
47
48LLFloaterSettingsDebug::~LLFloaterSettingsDebug()
49{
50 sInstance = NULL;
51}
52
53BOOL LLFloaterSettingsDebug::postBuild()
54{
55 LLComboBox* settings_combo = getChild<LLComboBox>("settings_combo");
56
57 struct f : public LLControlGroup::ApplyFunctor
58 {
59 LLComboBox* combo;
60 f(LLComboBox* c) : combo(c) {}
61 virtual void apply(const LLString& name, LLControlVariable* control)
62 {
63 combo->add(name, (void*)control);
64 }
65 } func(settings_combo);
66
67 gSavedSettings.applyToAll(&func);
68 gSavedPerAccountSettings.applyToAll(&func);
69 gColors.applyToAll(&func);
70
71 settings_combo->sortByName();
72 settings_combo->setCommitCallback(onSettingSelect);
73 settings_combo->setCallbackUserData(this);
74 settings_combo->updateSelection();
75
76 childSetCommitCallback("val_spinner_1", onCommitSettings);
77 childSetUserData("val_spinner_1", this);
78 childSetCommitCallback("val_spinner_2", onCommitSettings);
79 childSetUserData("val_spinner_2", this);
80 childSetCommitCallback("val_spinner_3", onCommitSettings);
81 childSetUserData("val_spinner_3", this);
82 childSetCommitCallback("val_spinner_4", onCommitSettings);
83 childSetUserData("val_spinner_4", this);
84 childSetCommitCallback("val_text", onCommitSettings);
85 childSetUserData("val_text", this);
86 childSetCommitCallback("boolean_combo", onCommitSettings);
87 childSetUserData("boolean_combo", this);
88 childSetCommitCallback("color_swatch", onCommitSettings);
89 childSetUserData("color_swatch", this);
90 childSetAction("default_btn", onClickDefault, this);
91 mComment = getChild<LLTextEditor>("comment_text");
92 return TRUE;
93}
94
95void LLFloaterSettingsDebug::draw()
96{
97 LLComboBox* settings_combo = getChild<LLComboBox>("settings_combo");
98 LLControlVariable* controlp = (LLControlVariable*)settings_combo->getCurrentUserdata();
99 updateControl(controlp);
100
101 LLFloater::draw();
102}
103
104//static
105void LLFloaterSettingsDebug::show(void*)
106{
107 if (sInstance == NULL)
108 {
109 sInstance = new LLFloaterSettingsDebug();
110
111 LLUICtrlFactory::getInstance()->buildFloater(sInstance, "floater_settings_debug.xml");
112 }
113
114 sInstance->open(); /* Flawfinder: ignore */
115}
116
117//static
118void LLFloaterSettingsDebug::onSettingSelect(LLUICtrl* ctrl, void* user_data)
119{
120 LLFloaterSettingsDebug* floaterp = (LLFloaterSettingsDebug*)user_data;
121 LLComboBox* combo_box = (LLComboBox*)ctrl;
122 LLControlVariable* controlp = (LLControlVariable*)combo_box->getCurrentUserdata();
123
124 floaterp->updateControl(controlp);
125}
126
127//static
128void LLFloaterSettingsDebug::onCommitSettings(LLUICtrl* ctrl, void* user_data)
129{
130 LLFloaterSettingsDebug* floaterp = (LLFloaterSettingsDebug*)user_data;
131
132 LLComboBox* settings_combo = floaterp->getChild<LLComboBox>("settings_combo");
133 LLControlVariable* controlp = (LLControlVariable*)settings_combo->getCurrentUserdata();
134
135 LLVector3 vector;
136 LLVector3d vectord;
137 LLRect rect;
138 LLColor4 col4;
139 LLColor3 col3;
140 LLColor4U col4U;
141 LLColor4 color_with_alpha;
142
143 switch(controlp->type())
144 {
145 case TYPE_U32:
146 controlp->set(floaterp->childGetValue("val_spinner_1"));
147 break;
148 case TYPE_S32:
149 controlp->set(floaterp->childGetValue("val_spinner_1"));
150 break;
151 case TYPE_F32:
152 controlp->set(LLSD(floaterp->childGetValue("val_spinner_1").asReal()));
153 break;
154 case TYPE_BOOLEAN:
155 controlp->set(floaterp->childGetValue("boolean_combo"));
156 break;
157 case TYPE_STRING:
158 controlp->set(LLSD(floaterp->childGetValue("val_text").asString()));
159 break;
160 case TYPE_VEC3:
161 vector.mV[VX] = (F32)floaterp->childGetValue("val_spinner_1").asReal();
162 vector.mV[VY] = (F32)floaterp->childGetValue("val_spinner_2").asReal();
163 vector.mV[VZ] = (F32)floaterp->childGetValue("val_spinner_3").asReal();
164 controlp->set(vector.getValue());
165 break;
166 case TYPE_VEC3D:
167 vectord.mdV[VX] = floaterp->childGetValue("val_spinner_1").asReal();
168 vectord.mdV[VY] = floaterp->childGetValue("val_spinner_2").asReal();
169 vectord.mdV[VZ] = floaterp->childGetValue("val_spinner_3").asReal();
170 controlp->set(vectord.getValue());
171 break;
172 case TYPE_RECT:
173 rect.mLeft = floaterp->childGetValue("val_spinner_1").asInteger();
174 rect.mRight = floaterp->childGetValue("val_spinner_2").asInteger();
175 rect.mBottom = floaterp->childGetValue("val_spinner_3").asInteger();
176 rect.mTop = floaterp->childGetValue("val_spinner_4").asInteger();
177 controlp->set(rect.getValue());
178 break;
179 case TYPE_COL4:
180 col3.setValue(floaterp->childGetValue("color_swatch"));
181 col4 = LLColor4(col3, (F32)floaterp->childGetValue("val_spinner_4").asReal());
182 controlp->set(col4.getValue());
183 break;
184 case TYPE_COL3:
185 controlp->set(floaterp->childGetValue("color_swatch"));
186 //col3.mV[VRED] = (F32)floaterp->childGetValue("val_spinner_1").asC();
187 //col3.mV[VGREEN] = (F32)floaterp->childGetValue("val_spinner_2").asReal();
188 //col3.mV[VBLUE] = (F32)floaterp->childGetValue("val_spinner_3").asReal();
189 //controlp->set(col3.getValue());
190 break;
191 case TYPE_COL4U:
192 col3.setValue(floaterp->childGetValue("color_swatch"));
193 col4U.setVecScaleClamp(col3);
194 col4U.mV[VALPHA] = floaterp->childGetValue("val_spinner_4").asInteger();
195 controlp->set(col4U.getValue());
196 break;
197 default:
198 break;
199 }
200}
201
202// static
203void LLFloaterSettingsDebug::onClickDefault(void* user_data)
204{
205 LLFloaterSettingsDebug* floaterp = (LLFloaterSettingsDebug*)user_data;
206 LLComboBox* settings_combo = floaterp->getChild<LLComboBox>("settings_combo");
207 LLControlVariable* controlp = (LLControlVariable*)settings_combo->getCurrentUserdata();
208
209 if (controlp)
210 {
211 controlp->resetToDefault();
212 floaterp->updateControl(controlp);
213 }
214}
215
216// we've switched controls, or doing per-frame update, so update spinners, etc.
217void LLFloaterSettingsDebug::updateControl(LLControlVariable* controlp)
218{
219 LLSpinCtrl* spinner1 = getChild<LLSpinCtrl>("val_spinner_1");
220 LLSpinCtrl* spinner2 = getChild<LLSpinCtrl>("val_spinner_2");
221 LLSpinCtrl* spinner3 = getChild<LLSpinCtrl>("val_spinner_3");
222 LLSpinCtrl* spinner4 = getChild<LLSpinCtrl>("val_spinner_4");
223 LLColorSwatchCtrl* color_swatch = getChild<LLColorSwatchCtrl>("color_swatch");
224
225 if (!spinner1 || !spinner2 || !spinner3 || !spinner4 || !color_swatch)
226 {
227 llwarns << "Could not find all desired controls by name"
228 << llendl;
229 return;
230 }
231
232 spinner1->setVisible(FALSE);
233 spinner2->setVisible(FALSE);
234 spinner3->setVisible(FALSE);
235 spinner4->setVisible(FALSE);
236 color_swatch->setVisible(FALSE);
237 childSetVisible("val_text", FALSE);
238 mComment->setText(LLString::null);
239
240 if (controlp)
241 {
242 eControlType type = controlp->type();
243
244 //hide combo box only for non booleans, otherwise this will result in the combo box closing every frame
245 childSetVisible("boolean_combo", type == TYPE_BOOLEAN);
246
247
248 mComment->setText(controlp->getComment());
249 spinner1->setMaxValue(F32_MAX);
250 spinner2->setMaxValue(F32_MAX);
251 spinner3->setMaxValue(F32_MAX);
252 spinner4->setMaxValue(F32_MAX);
253 spinner1->setMinValue(-F32_MAX);
254 spinner2->setMinValue(-F32_MAX);
255 spinner3->setMinValue(-F32_MAX);
256 spinner4->setMinValue(-F32_MAX);
257 if (!spinner1->hasFocus())
258 {
259 spinner1->setIncrement(0.1f);
260 }
261 if (!spinner2->hasFocus())
262 {
263 spinner2->setIncrement(0.1f);
264 }
265 if (!spinner3->hasFocus())
266 {
267 spinner3->setIncrement(0.1f);
268 }
269 if (!spinner4->hasFocus())
270 {
271 spinner4->setIncrement(0.1f);
272 }
273
274 LLSD sd = controlp->get();
275 switch(type)
276 {
277 case TYPE_U32:
278 spinner1->setVisible(TRUE);
279 spinner1->setLabel(LLString("value")); // Debug, don't translate
280 if (!spinner1->hasFocus())
281 {
282 spinner1->setValue(sd);
283 spinner1->setMinValue((F32)U32_MIN);
284 spinner1->setMaxValue((F32)U32_MAX);
285 spinner1->setIncrement(1.f);
286 spinner1->setPrecision(0);
287 }
288 break;
289 case TYPE_S32:
290 spinner1->setVisible(TRUE);
291 spinner1->setLabel(LLString("value")); // Debug, don't translate
292 if (!spinner1->hasFocus())
293 {
294 spinner1->setValue(sd);
295 spinner1->setMinValue((F32)S32_MIN);
296 spinner1->setMaxValue((F32)S32_MAX);
297 spinner1->setIncrement(1.f);
298 spinner1->setPrecision(0);
299 }
300 break;
301 case TYPE_F32:
302 spinner1->setVisible(TRUE);
303 spinner1->setLabel(LLString("value")); // Debug, don't translate
304 if (!spinner1->hasFocus())
305 {
306 spinner1->setPrecision(3);
307 spinner1->setValue(sd);
308 }
309 break;
310 case TYPE_BOOLEAN:
311 if (!childHasFocus("boolean_combo"))
312 {
313 if (sd.asBoolean())
314 {
315 childSetValue("boolean_combo", LLSD("true"));
316 }
317 else
318 {
319 childSetValue("boolean_combo", LLSD(""));
320 }
321 }
322 break;
323 case TYPE_STRING:
324 childSetVisible("val_text", TRUE);
325 if (!childHasFocus("val_text"))
326 {
327 childSetValue("val_text", sd);
328 }
329 break;
330 case TYPE_VEC3:
331 {
332 LLVector3 v;
333 v.setValue(sd);
334 spinner1->setVisible(TRUE);
335 spinner1->setLabel(LLString("X"));
336 spinner2->setVisible(TRUE);
337 spinner2->setLabel(LLString("Y"));
338 spinner3->setVisible(TRUE);
339 spinner3->setLabel(LLString("Z"));
340 if (!spinner1->hasFocus())
341 {
342 spinner1->setPrecision(3);
343 spinner1->setValue(v[VX]);
344 }
345 if (!spinner2->hasFocus())
346 {
347 spinner2->setPrecision(3);
348 spinner2->setValue(v[VY]);
349 }
350 if (!spinner3->hasFocus())
351 {
352 spinner3->setPrecision(3);
353 spinner3->setValue(v[VZ]);
354 }
355 break;
356 }
357 case TYPE_VEC3D:
358 {
359 LLVector3d v;
360 v.setValue(sd);
361 spinner1->setVisible(TRUE);
362 spinner1->setLabel(LLString("X"));
363 spinner2->setVisible(TRUE);
364 spinner2->setLabel(LLString("Y"));
365 spinner3->setVisible(TRUE);
366 spinner3->setLabel(LLString("Z"));
367 if (!spinner1->hasFocus())
368 {
369 spinner1->setPrecision(3);
370 spinner1->setValue(v[VX]);
371 }
372 if (!spinner2->hasFocus())
373 {
374 spinner2->setPrecision(3);
375 spinner2->setValue(v[VY]);
376 }
377 if (!spinner3->hasFocus())
378 {
379 spinner3->setPrecision(3);
380 spinner3->setValue(v[VZ]);
381 }
382 break;
383 }
384 case TYPE_RECT:
385 {
386 LLRect r;
387 r.setValue(sd);
388 spinner1->setVisible(TRUE);
389 spinner1->setLabel(LLString("Left"));
390 spinner2->setVisible(TRUE);
391 spinner2->setLabel(LLString("Right"));
392 spinner3->setVisible(TRUE);
393 spinner3->setLabel(LLString("Bottom"));
394 spinner4->setVisible(TRUE);
395 spinner4->setLabel(LLString("Top"));
396 if (!spinner1->hasFocus())
397 {
398 spinner1->setPrecision(0);
399 spinner1->setValue(r.mLeft);
400 }
401 if (!spinner2->hasFocus())
402 {
403 spinner2->setPrecision(0);
404 spinner2->setValue(r.mRight);
405 }
406 if (!spinner3->hasFocus())
407 {
408 spinner3->setPrecision(0);
409 spinner3->setValue(r.mBottom);
410 }
411 if (!spinner4->hasFocus())
412 {
413 spinner4->setPrecision(0);
414 spinner4->setValue(r.mTop);
415 }
416
417 spinner1->setMinValue((F32)S32_MIN);
418 spinner1->setMaxValue((F32)S32_MAX);
419 spinner1->setIncrement(1.f);
420
421 spinner2->setMinValue((F32)S32_MIN);
422 spinner2->setMaxValue((F32)S32_MAX);
423 spinner2->setIncrement(1.f);
424
425 spinner3->setMinValue((F32)S32_MIN);
426 spinner3->setMaxValue((F32)S32_MAX);
427 spinner3->setIncrement(1.f);
428
429 spinner4->setMinValue((F32)S32_MIN);
430 spinner4->setMaxValue((F32)S32_MAX);
431 spinner4->setIncrement(1.f);
432 break;
433 }
434 case TYPE_COL4:
435 {
436 LLColor4 clr;
437 clr.setValue(sd);
438 color_swatch->setVisible(TRUE);
439 // only set if changed so color picker doesn't update
440 if(clr != LLColor4(color_swatch->getValue()))
441 {
442 color_swatch->set(LLColor4(sd), TRUE, FALSE);
443 }
444 spinner4->setVisible(TRUE);
445 spinner4->setLabel(LLString("Alpha"));
446 if (!spinner4->hasFocus())
447 {
448 spinner4->setPrecision(3);
449 spinner4->setMinValue(0.0);
450 spinner4->setMaxValue(1.f);
451 spinner4->setValue(clr.mV[VALPHA]);
452 }
453 break;
454 }
455 case TYPE_COL3:
456 {
457 LLColor3 clr;
458 clr.setValue(sd);
459 color_swatch->setVisible(TRUE);
460 color_swatch->setValue(sd);
461 break;
462 }
463 case TYPE_COL4U:
464 {
465 LLColor4U clr;
466 clr.setValue(sd);
467 color_swatch->setVisible(TRUE);
468 if(LLColor4(clr) != LLColor4(color_swatch->getValue()))
469 {
470 color_swatch->set(LLColor4(clr), TRUE, FALSE);
471 }
472 spinner4->setVisible(TRUE);
473 spinner4->setLabel(LLString("Alpha"));
474 if(!spinner4->hasFocus())
475 {
476 spinner4->setPrecision(0);
477 spinner4->setValue(clr.mV[VALPHA]);
478 }
479
480 spinner4->setMinValue(0);
481 spinner4->setMaxValue(255);
482 spinner4->setIncrement(1.f);
483
484 break;
485 }
486 default:
487 mComment->setText(LLString("unknown"));
488 break;
489 }
490 }
491
492}
diff --git a/linden/indra/newview/head.h b/linden/indra/newview/llfloatersettingsdebug.h
index 7bb8fd1..7aba482 100644
--- a/linden/indra/newview/head.h
+++ b/linden/indra/newview/llfloatersettingsdebug.h
@@ -1,10 +1,10 @@
1/** 1/**
2 * @file head.h 2 * @file llfloatersettingsdebug.h
3 * @brief Head class definition 3 * @brief floater for debugging internal viewer settings
4 * 4 *
5 * $LicenseInfo:firstyear=2000&license=viewergpl$ 5 * $LicenseInfo:firstyear=2001&license=viewergpl$
6 * 6 *
7 * Copyright (c) 2000-2008, Linden Research, Inc. 7 * Copyright (c) 2001-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,35 +29,33 @@
29 * $/LicenseInfo$ 29 * $/LicenseInfo$
30 */ 30 */
31 31
32// description of a class that models the motion of a human head. 32#ifndef LLFLOATERDEBUGSETTINGS_H
33// The physics isn't quite right, but it will suffice for right now. 33#define LLFLOATERDEBUGSETTINGS_H
34 34
35#ifndef LL_HEAD_H 35#include "llcontrol.h"
36#define LL_HEAD_H 36#include "llfloater.h"
37#include "lltexteditor.h"
37 38
38class Head { 39class LLFloaterSettingsDebug : public LLFloater
39 public: 40{
41public:
42 LLFloaterSettingsDebug();
43 virtual ~LLFloaterSettingsDebug();
40 44
41 Head(); 45 virtual BOOL postBuild();
42 Head(F32 m, F32 r); 46 virtual void draw();
43 47
44 F32 setMass(F32 m); 48 void updateControl(LLControlVariable* control);
45 F32 setRadius(F32 r);
46 49
47 F32 getMass(); 50 static void show(void*);
48 F32 getRadius(); 51 static void onSettingSelect(LLUICtrl* ctrl, void* user_data);
49 F32 getInertia(); 52 static void onCommitSettings(LLUICtrl* ctrl, void* user_data);
53 static void onClickDefault(void* user_data);
50 54
51 void propagate(F32 horizontal_force, F32 vertical_force, F32 dt); 55protected:
52 56 static LLFloaterSettingsDebug* sInstance;
53 F32 phi, theta; // azimuth and elevation 57 LLTextEditor* mComment;
54 //struct timeval t;
55 //struct timezone tz;
56
57 private:
58 F32 mass, radius, inertia;
59}; 58};
60 59
61#endif 60#endif //LLFLOATERDEBUGSETTINGS_H
62
63 61
diff --git a/linden/indra/newview/llfloatersnapshot.cpp b/linden/indra/newview/llfloatersnapshot.cpp
index 88e9235..20b4510 100644
--- a/linden/indra/newview/llfloatersnapshot.cpp
+++ b/linden/indra/newview/llfloatersnapshot.cpp
@@ -53,7 +53,7 @@
53#include "llsliderctrl.h" 53#include "llsliderctrl.h"
54#include "llspinctrl.h" 54#include "llspinctrl.h"
55#include "llviewercontrol.h" 55#include "llviewercontrol.h"
56#include "llvieweruictrlfactory.h" 56#include "lluictrlfactory.h"
57#include "llviewerstats.h" 57#include "llviewerstats.h"
58#include "llviewercamera.h" 58#include "llviewercamera.h"
59#include "llviewerwindow.h" 59#include "llviewerwindow.h"
@@ -75,10 +75,14 @@
75///---------------------------------------------------------------------------- 75///----------------------------------------------------------------------------
76/// Local function declarations, constants, enums, and typedefs 76/// Local function declarations, constants, enums, and typedefs
77///---------------------------------------------------------------------------- 77///----------------------------------------------------------------------------
78S32 LLFloaterSnapshot::sUIWinHeightLong = 526 ;
79S32 LLFloaterSnapshot::sUIWinHeightShort = LLFloaterSnapshot::sUIWinHeightLong - 230 ;
80S32 LLFloaterSnapshot::sUIWinWidth = 215 ;
78 81
79LLSnapshotFloaterView* gSnapshotFloaterView = NULL; 82LLSnapshotFloaterView* gSnapshotFloaterView = NULL;
80 83
81LLFloaterSnapshot* LLFloaterSnapshot::sInstance = NULL; 84LLFloaterSnapshot* LLFloaterSnapshot::sInstance = NULL;
85
82const F32 SNAPSHOT_TIME_DELAY = 1.f; 86const F32 SNAPSHOT_TIME_DELAY = 1.f;
83 87
84F32 SHINE_TIME = 0.5f; 88F32 SHINE_TIME = 0.5f;
@@ -88,7 +92,7 @@ F32 FALL_TIME = 0.6f;
88S32 BORDER_WIDTH = 6; 92S32 BORDER_WIDTH = 6;
89 93
90const S32 MAX_POSTCARD_DATASIZE = 1024 * 1024; // one megabyte 94const S32 MAX_POSTCARD_DATASIZE = 1024 * 1024; // one megabyte
91#define MAX_TEXTURE_SIZE 512 //max upload texture size 512 * 512 95const S32 MAX_TEXTURE_SIZE = 512 ; //max upload texture size 512 * 512
92///---------------------------------------------------------------------------- 96///----------------------------------------------------------------------------
93/// Class LLSnapshotLivePreview 97/// Class LLSnapshotLivePreview
94///---------------------------------------------------------------------------- 98///----------------------------------------------------------------------------
@@ -105,9 +109,6 @@ public:
105 LLSnapshotLivePreview(const LLRect& rect); 109 LLSnapshotLivePreview(const LLRect& rect);
106 ~LLSnapshotLivePreview(); 110 ~LLSnapshotLivePreview();
107 111
108 virtual EWidgetType getWidgetType() const;
109 virtual LLString getWidgetTag() const;
110
111 /*virtual*/ void draw(); 112 /*virtual*/ void draw();
112 /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent); 113 /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent);
113 114
@@ -120,19 +121,30 @@ public:
120 ESnapshotType getSnapshotType() const { return mSnapshotType; } 121 ESnapshotType getSnapshotType() const { return mSnapshotType; }
121 BOOL getSnapshotUpToDate() const { return mSnapshotUpToDate; } 122 BOOL getSnapshotUpToDate() const { return mSnapshotUpToDate; }
122 BOOL isSnapshotActive() { return mSnapshotActive; } 123 BOOL isSnapshotActive() { return mSnapshotActive; }
124 LLImageGL* getThumbnailImage() const { return mThumbnailImage ; }
125 S32 getThumbnailWidth() const { return mThumbnailWidth ; }
126 S32 getThumbnailHeight() const { return mThumbnailHeight ; }
127 BOOL getThumbnailLock() const { return mThumbnailUpdateLock ; }
128 BOOL getThumbnailUpToDate() const { return mThumbnailUpToDate ;}
123 LLImageGL* getCurrentImage(); 129 LLImageGL* getCurrentImage();
124 F32 getImageAspect(); 130 F32 getImageAspect();
131 F32 getAspect() ;
125 LLRect getImageRect(); 132 LLRect getImageRect();
126 BOOL isImageScaled(); 133 BOOL isImageScaled();
127 134
128 void setSnapshotType(ESnapshotType type) { mSnapshotType = type; } 135 void setSnapshotType(ESnapshotType type) { mSnapshotType = type; }
129 void setSnapshotQuality(S32 quality); 136 void setSnapshotQuality(S32 quality);
130 void setSnapshotBufferType(LLViewerWindow::ESnapshotType type) { mSnapshotBufferType = type; } 137 void setSnapshotBufferType(LLViewerWindow::ESnapshotType type) { mSnapshotBufferType = type; }
131 void updateSnapshot(BOOL new_snapshot); 138 void updateSnapshot(BOOL new_snapshot, BOOL new_thumbnail = FALSE);
132 LLFloaterPostcard* savePostcard(); 139 LLFloaterPostcard* savePostcard();
133 void saveTexture(); 140 void saveTexture();
134 BOOL saveLocal(); 141 BOOL saveLocal();
135 142
143 BOOL setThumbnailImageSize() ;
144 void generateThumbnailImage(BOOL force_update = FALSE) ;
145 void resetThumbnailImage() { mThumbnailImage = NULL ; }
146 void drawPreviewRect(S32 offset_x, S32 offset_y) ;
147
136 static void onIdle( void* snapshot_preview ); 148 static void onIdle( void* snapshot_preview );
137 149
138protected: 150protected:
@@ -144,6 +156,14 @@ protected:
144 BOOL mImageScaled[2]; 156 BOOL mImageScaled[2];
145 S32 mMaxImageSize ; 157 S32 mMaxImageSize ;
146 158
159 //thumbnail image
160 LLPointer<LLImageGL> mThumbnailImage ;
161 S32 mThumbnailWidth ;
162 S32 mThumbnailHeight ;
163 LLRect mPreviewRect ;
164 BOOL mThumbnailUpdateLock ;
165 BOOL mThumbnailUpToDate ;
166
147 S32 mCurImageIndex; 167 S32 mCurImageIndex;
148 LLPointer<LLImageRaw> mRawImage; 168 LLPointer<LLImageRaw> mRawImage;
149 LLPointer<LLImageRaw> mRawImageEncoded; 169 LLPointer<LLImageRaw> mRawImageEncoded;
@@ -170,12 +190,12 @@ public:
170}; 190};
171 191
172std::set<LLSnapshotLivePreview*> LLSnapshotLivePreview::sList; 192std::set<LLSnapshotLivePreview*> LLSnapshotLivePreview::sList;
173
174LLSnapshotLivePreview::LLSnapshotLivePreview (const LLRect& rect) : 193LLSnapshotLivePreview::LLSnapshotLivePreview (const LLRect& rect) :
175 LLView("snapshot_live_preview", rect, FALSE), 194 LLView("snapshot_live_preview", rect, FALSE),
176 mColor(1.f, 0.f, 0.f, 0.5f), 195 mColor(1.f, 0.f, 0.f, 0.5f),
177 mCurImageIndex(0), 196 mCurImageIndex(0),
178 mRawImage(NULL), 197 mRawImage(NULL),
198 mThumbnailImage(NULL) ,
179 mRawImageEncoded(NULL), 199 mRawImageEncoded(NULL),
180 mJPEGImage(NULL), 200 mJPEGImage(NULL),
181 mShineCountdown(0), 201 mShineCountdown(0),
@@ -185,8 +205,8 @@ LLSnapshotLivePreview::LLSnapshotLivePreview (const LLRect& rect) :
185 mDataSize(0), 205 mDataSize(0),
186 mSnapshotType(SNAPSHOT_POSTCARD), 206 mSnapshotType(SNAPSHOT_POSTCARD),
187 mSnapshotUpToDate(FALSE), 207 mSnapshotUpToDate(FALSE),
188 mCameraPos(gCamera->getOrigin()), 208 mCameraPos(LLViewerCamera::getInstance()->getOrigin()),
189 mCameraRot(gCamera->getQuaternion()), 209 mCameraRot(LLViewerCamera::getInstance()->getQuaternion()),
190 mSnapshotActive(FALSE), 210 mSnapshotActive(FALSE),
191 mSnapshotBufferType(LLViewerWindow::SNAPSHOT_TYPE_COLOR) 211 mSnapshotBufferType(LLViewerWindow::SNAPSHOT_TYPE_COLOR)
192{ 212{
@@ -204,6 +224,8 @@ LLSnapshotLivePreview::LLSnapshotLivePreview (const LLRect& rect) :
204 224
205 mMaxImageSize = MAX_IMAGE_SIZE ; 225 mMaxImageSize = MAX_IMAGE_SIZE ;
206 mKeepAspectRatio = gSavedSettings.getBOOL("KeepAspectForSnapshot") ; 226 mKeepAspectRatio = gSavedSettings.getBOOL("KeepAspectForSnapshot") ;
227 mThumbnailUpdateLock = FALSE ;
228 mThumbnailUpToDate = FALSE ;
207} 229}
208 230
209LLSnapshotLivePreview::~LLSnapshotLivePreview() 231LLSnapshotLivePreview::~LLSnapshotLivePreview()
@@ -234,13 +256,8 @@ LLImageGL* LLSnapshotLivePreview::getCurrentImage()
234 return mViewerImage[mCurImageIndex]; 256 return mViewerImage[mCurImageIndex];
235} 257}
236 258
237F32 LLSnapshotLivePreview::getImageAspect() 259F32 LLSnapshotLivePreview::getAspect()
238{ 260{
239 if (!mViewerImage[mCurImageIndex])
240 {
241 return 0.f;
242 }
243
244 F32 image_aspect_ratio = ((F32)mWidth[mCurImageIndex]) / ((F32)mHeight[mCurImageIndex]); 261 F32 image_aspect_ratio = ((F32)mWidth[mCurImageIndex]) / ((F32)mHeight[mCurImageIndex]);
245 F32 window_aspect_ratio = ((F32)getRect().getWidth()) / ((F32)getRect().getHeight()); 262 F32 window_aspect_ratio = ((F32)getRect().getWidth()) / ((F32)getRect().getHeight());
246 263
@@ -254,6 +271,16 @@ F32 LLSnapshotLivePreview::getImageAspect()
254 } 271 }
255} 272}
256 273
274F32 LLSnapshotLivePreview::getImageAspect()
275{
276 if (!mViewerImage[mCurImageIndex])
277 {
278 return 0.f;
279 }
280
281 return getAspect() ;
282}
283
257LLRect LLSnapshotLivePreview::getImageRect() 284LLRect LLSnapshotLivePreview::getImageRect()
258{ 285{
259 return mImageRect[mCurImageIndex]; 286 return mImageRect[mCurImageIndex];
@@ -264,7 +291,7 @@ BOOL LLSnapshotLivePreview::isImageScaled()
264 return mImageScaled[mCurImageIndex]; 291 return mImageScaled[mCurImageIndex];
265} 292}
266 293
267void LLSnapshotLivePreview::updateSnapshot(BOOL new_snapshot) 294void LLSnapshotLivePreview::updateSnapshot(BOOL new_snapshot, BOOL new_thumbnail)
268{ 295{
269 if (mSnapshotUpToDate) 296 if (mSnapshotUpToDate)
270 { 297 {
@@ -272,15 +299,9 @@ void LLSnapshotLivePreview::updateSnapshot(BOOL new_snapshot)
272 mCurImageIndex = (mCurImageIndex + 1) % 2; 299 mCurImageIndex = (mCurImageIndex + 1) % 2;
273 mWidth[mCurImageIndex] = mWidth[old_image_index]; 300 mWidth[mCurImageIndex] = mWidth[old_image_index];
274 mHeight[mCurImageIndex] = mHeight[old_image_index]; 301 mHeight[mCurImageIndex] = mHeight[old_image_index];
275 mFallAnimTimer.start(); 302 mFallAnimTimer.start();
276 }
277 mSnapshotUpToDate = FALSE;
278 mShineAnimTimer.stop();
279 if (new_snapshot)
280 {
281 mSnapshotDelayTimer.start();
282 mSnapshotDelayTimer.setTimerExpirySec(SNAPSHOT_TIME_DELAY);
283 } 303 }
304 mSnapshotUpToDate = FALSE;
284 305
285 LLRect& rect = mImageRect[mCurImageIndex]; 306 LLRect& rect = mImageRect[mCurImageIndex];
286 rect.set(0, getRect().getHeight(), getRect().getWidth(), 0); 307 rect.set(0, getRect().getHeight(), getRect().getWidth(), 0);
@@ -305,6 +326,21 @@ void LLSnapshotLivePreview::updateSnapshot(BOOL new_snapshot)
305 rect.mRight -= (getRect().getWidth() - new_width) / 2; 326 rect.mRight -= (getRect().getWidth() - new_width) / 2;
306 } 327 }
307 } 328 }
329
330 mShineAnimTimer.stop();
331 if (new_snapshot)
332 {
333 mSnapshotDelayTimer.start();
334 mSnapshotDelayTimer.setTimerExpirySec(SNAPSHOT_TIME_DELAY);
335 }
336 else if(new_thumbnail)
337 {
338 mThumbnailUpToDate = FALSE ;
339 }
340 else
341 {
342 setThumbnailImageSize() ;
343 }
308} 344}
309 345
310void LLSnapshotLivePreview::setSnapshotQuality(S32 quality) 346void LLSnapshotLivePreview::setSnapshotQuality(S32 quality)
@@ -316,198 +352,224 @@ void LLSnapshotLivePreview::setSnapshotQuality(S32 quality)
316 } 352 }
317} 353}
318 354
319EWidgetType LLSnapshotLivePreview::getWidgetType() const 355void LLSnapshotLivePreview::drawPreviewRect(S32 offset_x, S32 offset_y)
320{ 356{
321 return WIDGET_TYPE_SNAPSHOT_LIVE_PREVIEW; 357 F32 line_width ;
322} 358 glGetFloatv(GL_LINE_WIDTH, &line_width) ;
359 glLineWidth(2.0f * line_width) ;
360 LLColor4 color(0.0f, 0.0f, 0.0f, 1.0f) ;
361 gl_rect_2d( mPreviewRect.mLeft + offset_x, mPreviewRect.mTop + offset_y,
362 mPreviewRect.mRight + offset_x, mPreviewRect.mBottom + offset_y, color, FALSE ) ;
363 glLineWidth(line_width) ;
364
365 //draw four alpha rectangles to cover areas outside of the snapshot image
366 if(!mKeepAspectRatio)
367 {
368 LLColor4 alpha_color(0.5f, 0.5f, 0.5f, 0.8f) ;
369 S32 dwl = 0, dwr = 0 ;
370 if(mThumbnailWidth > mPreviewRect.getWidth())
371 {
372 dwl = (mThumbnailWidth - mPreviewRect.getWidth()) >> 1 ;
373 dwr = mThumbnailWidth - mPreviewRect.getWidth() - dwl ;
323 374
324LLString LLSnapshotLivePreview::getWidgetTag() const 375 gl_rect_2d(mPreviewRect.mLeft + offset_x - dwl, mPreviewRect.mTop + offset_y,
325{ 376 mPreviewRect.mLeft + offset_x, mPreviewRect.mBottom + offset_y, alpha_color, TRUE ) ;
326 return LL_SNAPSHOT_LIVE_PREVIEW_TAG; 377 gl_rect_2d( mPreviewRect.mRight + offset_x, mPreviewRect.mTop + offset_y,
378 mPreviewRect.mRight + offset_x + dwr, mPreviewRect.mBottom + offset_y, alpha_color, TRUE ) ;
379 }
380
381 if(mThumbnailHeight > mPreviewRect.getHeight())
382 {
383 S32 dh = (mThumbnailHeight - mPreviewRect.getHeight()) >> 1 ;
384 gl_rect_2d(mPreviewRect.mLeft + offset_x - dwl, mPreviewRect.mBottom + offset_y ,
385 mPreviewRect.mRight + offset_x + dwr, mPreviewRect.mBottom + offset_y - dh, alpha_color, TRUE ) ;
386
387 dh = mThumbnailHeight - mPreviewRect.getHeight() - dh ;
388 gl_rect_2d( mPreviewRect.mLeft + offset_x - dwl, mPreviewRect.mTop + offset_y + dh,
389 mPreviewRect.mRight + offset_x + dwr, mPreviewRect.mTop + offset_y, alpha_color, TRUE ) ;
390 }
391 }
327} 392}
328 393
329void LLSnapshotLivePreview::draw() 394void LLSnapshotLivePreview::draw()
330{ 395{
331 if(getVisible()) 396 if (mViewerImage[mCurImageIndex].notNull() &&
332 { 397 mRawImageEncoded.notNull() &&
333 if (mViewerImage[mCurImageIndex].notNull() && 398 mSnapshotUpToDate)
334 mRawImageEncoded.notNull() && 399 {
335 mSnapshotUpToDate) 400 LLColor4 bg_color(0.f, 0.f, 0.3f, 0.4f);
401 gl_rect_2d(getRect(), bg_color);
402 LLRect &rect = mImageRect[mCurImageIndex];
403 LLRect shadow_rect = mImageRect[mCurImageIndex];
404 shadow_rect.stretch(BORDER_WIDTH);
405 gl_drop_shadow(shadow_rect.mLeft, shadow_rect.mTop, shadow_rect.mRight, shadow_rect.mBottom, LLColor4(0.f, 0.f, 0.f, mNeedsFlash ? 0.f :0.5f), 10);
406
407 LLColor4 image_color(1.f, 1.f, 1.f, 1.f);
408 gGL.color4fv(image_color.mV);
409 LLViewerImage::bindTexture(mViewerImage[mCurImageIndex]);
410 // calculate UV scale
411 F32 uv_width = mImageScaled[mCurImageIndex] ? 1.f : llmin((F32)mWidth[mCurImageIndex] / (F32)mViewerImage[mCurImageIndex]->getWidth(), 1.f);
412 F32 uv_height = mImageScaled[mCurImageIndex] ? 1.f : llmin((F32)mHeight[mCurImageIndex] / (F32)mViewerImage[mCurImageIndex]->getHeight(), 1.f);
413 glPushMatrix();
336 { 414 {
337 LLColor4 bg_color(0.f, 0.f, 0.3f, 0.4f); 415 glTranslatef((F32)rect.mLeft, (F32)rect.mBottom, 0.f);
338 gl_rect_2d(getRect(), bg_color); 416 gGL.begin(GL_QUADS);
339 LLRect &rect = mImageRect[mCurImageIndex];
340 LLRect shadow_rect = mImageRect[mCurImageIndex];
341 shadow_rect.stretch(BORDER_WIDTH);
342 gl_drop_shadow(shadow_rect.mLeft, shadow_rect.mTop, shadow_rect.mRight, shadow_rect.mBottom, LLColor4(0.f, 0.f, 0.f, mNeedsFlash ? 0.f :0.5f), 10);
343
344 LLColor4 image_color(1.f, 1.f, 1.f, 1.f);
345 gGL.color4fv(image_color.mV);
346 LLViewerImage::bindTexture(mViewerImage[mCurImageIndex]);
347 // calculate UV scale
348 F32 uv_width = mImageScaled[mCurImageIndex] ? 1.f : llmin((F32)mWidth[mCurImageIndex] / (F32)mViewerImage[mCurImageIndex]->getWidth(), 1.f);
349 F32 uv_height = mImageScaled[mCurImageIndex] ? 1.f : llmin((F32)mHeight[mCurImageIndex] / (F32)mViewerImage[mCurImageIndex]->getHeight(), 1.f);
350 glPushMatrix();
351 { 417 {
352 glTranslatef((F32)rect.mLeft, (F32)rect.mBottom, 0.f); 418 gGL.texCoord2f(uv_width, uv_height);
353 gGL.begin(GL_QUADS); 419 gGL.vertex2i(rect.getWidth(), rect.getHeight() );
354 {
355 gGL.texCoord2f(uv_width, uv_height);
356 gGL.vertex2i(rect.getWidth(), rect.getHeight() );
357 420
358 gGL.texCoord2f(0.f, uv_height); 421 gGL.texCoord2f(0.f, uv_height);
359 gGL.vertex2i(0, rect.getHeight() ); 422 gGL.vertex2i(0, rect.getHeight() );
360 423
361 gGL.texCoord2f(0.f, 0.f); 424 gGL.texCoord2f(0.f, 0.f);
362 gGL.vertex2i(0, 0); 425 gGL.vertex2i(0, 0);
363 426
364 gGL.texCoord2f(uv_width, 0.f); 427 gGL.texCoord2f(uv_width, 0.f);
365 gGL.vertex2i(rect.getWidth(), 0); 428 gGL.vertex2i(rect.getWidth(), 0);
366 }
367 gGL.end();
368 } 429 }
369 glPopMatrix(); 430 gGL.end();
431 }
432 glPopMatrix();
370 433
371 gGL.color4f(1.f, 1.f, 1.f, mFlashAlpha); 434 gGL.color4f(1.f, 1.f, 1.f, mFlashAlpha);
372 gl_rect_2d(getRect()); 435 gl_rect_2d(getRect());
373 if (mNeedsFlash) 436 if (mNeedsFlash)
437 {
438 if (mFlashAlpha < 1.f)
374 { 439 {
375 if (mFlashAlpha < 1.f) 440 mFlashAlpha = lerp(mFlashAlpha, 1.f, LLCriticalDamp::getInterpolant(0.02f));
376 {
377 mFlashAlpha = lerp(mFlashAlpha, 1.f, LLCriticalDamp::getInterpolant(0.02f));
378 }
379 else
380 {
381 mNeedsFlash = FALSE;
382 }
383 } 441 }
384 else 442 else
385 { 443 {
386 mFlashAlpha = lerp(mFlashAlpha, 0.f, LLCriticalDamp::getInterpolant(0.15f)); 444 mNeedsFlash = FALSE;
387 } 445 }
446 }
447 else
448 {
449 mFlashAlpha = lerp(mFlashAlpha, 0.f, LLCriticalDamp::getInterpolant(0.15f));
450 }
388 451
389 if (mShineCountdown > 0) 452 if (mShineCountdown > 0)
453 {
454 mShineCountdown--;
455 if (mShineCountdown == 0)
390 { 456 {
391 mShineCountdown--; 457 mShineAnimTimer.start();
392 if (mShineCountdown == 0)
393 {
394 mShineAnimTimer.start();
395 }
396 } 458 }
397 else if (mShineAnimTimer.getStarted()) 459 }
460 else if (mShineAnimTimer.getStarted())
461 {
462 //LLDebugVarMessageBox::show("Shine time", &SHINE_TIME, 10.f, 0.1f);
463 //LLDebugVarMessageBox::show("Shine width", &SHINE_WIDTH, 2.f, 0.05f);
464 //LLDebugVarMessageBox::show("Shine opacity", &SHINE_OPACITY, 1.f, 0.05f);
465
466 F32 shine_interp = llmin(1.f, mShineAnimTimer.getElapsedTimeF32() / SHINE_TIME);
467
468 // draw "shine" effect
469 LLLocalClipRect clip(getLocalRect());
398 { 470 {
399 //LLDebugVarMessageBox::show("Shine time", &SHINE_TIME, 10.f, 0.1f); 471 // draw diagonal stripe with gradient that passes over screen
400 //LLDebugVarMessageBox::show("Shine width", &SHINE_WIDTH, 2.f, 0.05f); 472 S32 x1 = gViewerWindow->getWindowWidth() * llround((clamp_rescale(shine_interp, 0.f, 1.f, -1.f - SHINE_WIDTH, 1.f)));
401 //LLDebugVarMessageBox::show("Shine opacity", &SHINE_OPACITY, 1.f, 0.05f); 473 S32 x2 = x1 + llround(gViewerWindow->getWindowWidth() * SHINE_WIDTH);
402 474 S32 x3 = x2 + llround(gViewerWindow->getWindowWidth() * SHINE_WIDTH);
403 F32 shine_interp = llmin(1.f, mShineAnimTimer.getElapsedTimeF32() / SHINE_TIME); 475 S32 y1 = 0;
404 476 S32 y2 = gViewerWindow->getWindowHeight();
405 // draw "shine" effect 477
406 LLLocalClipRect clip(getLocalRect()); 478 LLGLSNoTexture no_texture;
479 gGL.begin(GL_QUADS);
407 { 480 {
408 // draw diagonal stripe with gradient that passes over screen 481 gGL.color4f(1.f, 1.f, 1.f, 0.f);
409 S32 x1 = gViewerWindow->getWindowWidth() * llround((clamp_rescale(shine_interp, 0.f, 1.f, -1.f - SHINE_WIDTH, 1.f))); 482 gGL.vertex2i(x1, y1);
410 S32 x2 = x1 + llround(gViewerWindow->getWindowWidth() * SHINE_WIDTH); 483 gGL.vertex2i(x1 + gViewerWindow->getWindowWidth(), y2);
411 S32 x3 = x2 + llround(gViewerWindow->getWindowWidth() * SHINE_WIDTH); 484 gGL.color4f(1.f, 1.f, 1.f, SHINE_OPACITY);
412 S32 y1 = 0; 485 gGL.vertex2i(x2 + gViewerWindow->getWindowWidth(), y2);
413 S32 y2 = gViewerWindow->getWindowHeight(); 486 gGL.vertex2i(x2, y1);
414 487
415 LLGLSNoTexture no_texture; 488 gGL.color4f(1.f, 1.f, 1.f, SHINE_OPACITY);
416 gGL.begin(GL_QUADS); 489 gGL.vertex2i(x2, y1);
417 { 490 gGL.vertex2i(x2 + gViewerWindow->getWindowWidth(), y2);
418 gGL.color4f(1.f, 1.f, 1.f, 0.f); 491 gGL.color4f(1.f, 1.f, 1.f, 0.f);
419 gGL.vertex2i(x1, y1); 492 gGL.vertex2i(x3 + gViewerWindow->getWindowWidth(), y2);
420 gGL.vertex2i(x1 + gViewerWindow->getWindowWidth(), y2); 493 gGL.vertex2i(x3, y1);
421 gGL.color4f(1.f, 1.f, 1.f, SHINE_OPACITY);
422 gGL.vertex2i(x2 + gViewerWindow->getWindowWidth(), y2);
423 gGL.vertex2i(x2, y1);
424
425 gGL.color4f(1.f, 1.f, 1.f, SHINE_OPACITY);
426 gGL.vertex2i(x2, y1);
427 gGL.vertex2i(x2 + gViewerWindow->getWindowWidth(), y2);
428 gGL.color4f(1.f, 1.f, 1.f, 0.f);
429 gGL.vertex2i(x3 + gViewerWindow->getWindowWidth(), y2);
430 gGL.vertex2i(x3, y1);
431 }
432 gGL.end();
433 } 494 }
495 gGL.end();
496 }
434 497
435 if (mShineAnimTimer.getElapsedTimeF32() > SHINE_TIME) 498 if (mShineAnimTimer.getElapsedTimeF32() > SHINE_TIME)
436 { 499 {
437 mShineAnimTimer.stop(); 500 mShineAnimTimer.stop();
438 }
439 } 501 }
440 } 502 }
503 }
441 504
442 // draw framing rectangle 505 // draw framing rectangle
506 {
507 LLGLSNoTexture no_texture;
508 gGL.color4f(1.f, 1.f, 1.f, 1.f);
509 LLRect outline_rect = mImageRect[mCurImageIndex];
510 gGL.begin(GL_QUADS);
443 { 511 {
444 LLGLSNoTexture no_texture; 512 gGL.vertex2i(outline_rect.mLeft - BORDER_WIDTH, outline_rect.mTop + BORDER_WIDTH);
445 gGL.color4f(1.f, 1.f, 1.f, 1.f); 513 gGL.vertex2i(outline_rect.mRight + BORDER_WIDTH, outline_rect.mTop + BORDER_WIDTH);
446 LLRect outline_rect = mImageRect[mCurImageIndex]; 514 gGL.vertex2i(outline_rect.mRight, outline_rect.mTop);
447 gGL.begin(GL_QUADS); 515 gGL.vertex2i(outline_rect.mLeft, outline_rect.mTop);
448 { 516
449 gGL.vertex2i(outline_rect.mLeft - BORDER_WIDTH, outline_rect.mTop + BORDER_WIDTH); 517 gGL.vertex2i(outline_rect.mLeft, outline_rect.mBottom);
450 gGL.vertex2i(outline_rect.mRight + BORDER_WIDTH, outline_rect.mTop + BORDER_WIDTH); 518 gGL.vertex2i(outline_rect.mRight, outline_rect.mBottom);
451 gGL.vertex2i(outline_rect.mRight, outline_rect.mTop); 519 gGL.vertex2i(outline_rect.mRight + BORDER_WIDTH, outline_rect.mBottom - BORDER_WIDTH);
452 gGL.vertex2i(outline_rect.mLeft, outline_rect.mTop); 520 gGL.vertex2i(outline_rect.mLeft - BORDER_WIDTH, outline_rect.mBottom - BORDER_WIDTH);
453 521
454 gGL.vertex2i(outline_rect.mLeft, outline_rect.mBottom); 522 gGL.vertex2i(outline_rect.mLeft, outline_rect.mTop);
455 gGL.vertex2i(outline_rect.mRight, outline_rect.mBottom); 523 gGL.vertex2i(outline_rect.mLeft, outline_rect.mBottom);
456 gGL.vertex2i(outline_rect.mRight + BORDER_WIDTH, outline_rect.mBottom - BORDER_WIDTH); 524 gGL.vertex2i(outline_rect.mLeft - BORDER_WIDTH, outline_rect.mBottom - BORDER_WIDTH);
457 gGL.vertex2i(outline_rect.mLeft - BORDER_WIDTH, outline_rect.mBottom - BORDER_WIDTH); 525 gGL.vertex2i(outline_rect.mLeft - BORDER_WIDTH, outline_rect.mTop + BORDER_WIDTH);
458 526
459 gGL.vertex2i(outline_rect.mLeft, outline_rect.mTop); 527 gGL.vertex2i(outline_rect.mRight, outline_rect.mBottom);
460 gGL.vertex2i(outline_rect.mLeft, outline_rect.mBottom); 528 gGL.vertex2i(outline_rect.mRight, outline_rect.mTop);
461 gGL.vertex2i(outline_rect.mLeft - BORDER_WIDTH, outline_rect.mBottom - BORDER_WIDTH); 529 gGL.vertex2i(outline_rect.mRight + BORDER_WIDTH, outline_rect.mTop + BORDER_WIDTH);
462 gGL.vertex2i(outline_rect.mLeft - BORDER_WIDTH, outline_rect.mTop + BORDER_WIDTH); 530 gGL.vertex2i(outline_rect.mRight + BORDER_WIDTH, outline_rect.mBottom - BORDER_WIDTH);
463
464 gGL.vertex2i(outline_rect.mRight, outline_rect.mBottom);
465 gGL.vertex2i(outline_rect.mRight, outline_rect.mTop);
466 gGL.vertex2i(outline_rect.mRight + BORDER_WIDTH, outline_rect.mTop + BORDER_WIDTH);
467 gGL.vertex2i(outline_rect.mRight + BORDER_WIDTH, outline_rect.mBottom - BORDER_WIDTH);
468 }
469 gGL.end();
470 } 531 }
532 gGL.end();
533 }
471 534
472 // draw old image dropping away 535 // draw old image dropping away
473 if (mFallAnimTimer.getStarted()) 536 if (mFallAnimTimer.getStarted())
537 {
538 S32 old_image_index = (mCurImageIndex + 1) % 2;
539 if (mViewerImage[old_image_index].notNull() && mFallAnimTimer.getElapsedTimeF32() < FALL_TIME)
474 { 540 {
475 S32 old_image_index = (mCurImageIndex + 1) % 2; 541 F32 fall_interp = mFallAnimTimer.getElapsedTimeF32() / FALL_TIME;
476 if (mViewerImage[old_image_index].notNull() && mFallAnimTimer.getElapsedTimeF32() < FALL_TIME) 542 F32 alpha = clamp_rescale(fall_interp, 0.f, 1.f, 0.8f, 0.4f);
543 LLColor4 image_color(1.f, 1.f, 1.f, alpha);
544 gGL.color4fv(image_color.mV);
545 LLViewerImage::bindTexture(mViewerImage[old_image_index]);
546 // calculate UV scale
547 // *FIX get this to work with old image
548 BOOL rescale = !mImageScaled[old_image_index] && mViewerImage[mCurImageIndex].notNull();
549 F32 uv_width = rescale ? llmin((F32)mWidth[old_image_index] / (F32)mViewerImage[mCurImageIndex]->getWidth(), 1.f) : 1.f;
550 F32 uv_height = rescale ? llmin((F32)mHeight[old_image_index] / (F32)mViewerImage[mCurImageIndex]->getHeight(), 1.f) : 1.f;
551 glPushMatrix();
477 { 552 {
478 F32 fall_interp = mFallAnimTimer.getElapsedTimeF32() / FALL_TIME; 553 LLRect& rect = mImageRect[old_image_index];
479 F32 alpha = clamp_rescale(fall_interp, 0.f, 1.f, 0.8f, 0.4f); 554 glTranslatef((F32)rect.mLeft, (F32)rect.mBottom - llround(getRect().getHeight() * 2.f * (fall_interp * fall_interp)), 0.f);
480 LLColor4 image_color(1.f, 1.f, 1.f, alpha); 555 glRotatef(-45.f * fall_interp, 0.f, 0.f, 1.f);
481 gGL.color4fv(image_color.mV); 556 gGL.begin(GL_QUADS);
482 LLViewerImage::bindTexture(mViewerImage[old_image_index]);
483 // calculate UV scale
484 // *FIX get this to work with old image
485 BOOL rescale = !mImageScaled[old_image_index] && mViewerImage[mCurImageIndex].notNull();
486 F32 uv_width = rescale ? llmin((F32)mWidth[old_image_index] / (F32)mViewerImage[mCurImageIndex]->getWidth(), 1.f) : 1.f;
487 F32 uv_height = rescale ? llmin((F32)mHeight[old_image_index] / (F32)mViewerImage[mCurImageIndex]->getHeight(), 1.f) : 1.f;
488 glPushMatrix();
489 { 557 {
490 LLRect& rect = mImageRect[old_image_index]; 558 gGL.texCoord2f(uv_width, uv_height);
491 glTranslatef((F32)rect.mLeft, (F32)rect.mBottom - llround(getRect().getHeight() * 2.f * (fall_interp * fall_interp)), 0.f); 559 gGL.vertex2i(rect.getWidth(), rect.getHeight() );
492 glRotatef(-45.f * fall_interp, 0.f, 0.f, 1.f); 560
493 gGL.begin(GL_QUADS); 561 gGL.texCoord2f(0.f, uv_height);
494 { 562 gGL.vertex2i(0, rect.getHeight() );
495 gGL.texCoord2f(uv_width, uv_height); 563
496 gGL.vertex2i(rect.getWidth(), rect.getHeight() ); 564 gGL.texCoord2f(0.f, 0.f);
497 565 gGL.vertex2i(0, 0);
498 gGL.texCoord2f(0.f, uv_height); 566
499 gGL.vertex2i(0, rect.getHeight() ); 567 gGL.texCoord2f(uv_width, 0.f);
500 568 gGL.vertex2i(rect.getWidth(), 0);
501 gGL.texCoord2f(0.f, 0.f);
502 gGL.vertex2i(0, 0);
503
504 gGL.texCoord2f(uv_width, 0.f);
505 gGL.vertex2i(rect.getWidth(), 0);
506 }
507 gGL.end();
508 } 569 }
509 glPopMatrix(); 570 gGL.end();
510 } 571 }
572 glPopMatrix();
511 } 573 }
512 } 574 }
513} 575}
@@ -519,17 +581,140 @@ void LLSnapshotLivePreview::reshape(S32 width, S32 height, BOOL called_from_pare
519 LLView::reshape(width, height, called_from_parent); 581 LLView::reshape(width, height, called_from_parent);
520 if (old_rect.getWidth() != width || old_rect.getHeight() != height) 582 if (old_rect.getWidth() != width || old_rect.getHeight() != height)
521 { 583 {
522 updateSnapshot(getSnapshotUpToDate()); 584 updateSnapshot(FALSE, TRUE);
523 } 585 }
524} 586}
525 587
588BOOL LLSnapshotLivePreview::setThumbnailImageSize()
589{
590 if(mWidth[mCurImageIndex] < 10 || mHeight[mCurImageIndex] < 10)
591 {
592 return FALSE ;
593 }
594 S32 window_width = gViewerWindow->getWindowDisplayWidth() ;
595 S32 window_height = gViewerWindow->getWindowDisplayHeight() ;
596
597 F32 window_aspect_ratio = ((F32)window_width) / ((F32)window_height);
598
599 // UI size for thumbnail
600 S32 max_width = LLFloaterSnapshot::getUIWinWidth() - 20;
601 S32 max_height = 90;
602
603 if (window_aspect_ratio > (F32)max_width / max_height)
604 {
605 // image too wide, shrink to width
606 mThumbnailWidth = max_width;
607 mThumbnailHeight = llround((F32)max_width / window_aspect_ratio);
608 }
609 else
610 {
611 // image too tall, shrink to height
612 mThumbnailHeight = max_height;
613 mThumbnailWidth = llround((F32)max_height * window_aspect_ratio);
614 }
615
616 if(mThumbnailWidth > window_width || mThumbnailHeight > window_height)
617 {
618 return FALSE ;//if the window is too small, ignore thumbnail updating.
619 }
620
621 S32 left = 0 , top = mThumbnailHeight, right = mThumbnailWidth, bottom = 0 ;
622 if(!mKeepAspectRatio)
623 {
624 F32 ratio_x = (F32)mWidth[mCurImageIndex] / window_width ;
625 F32 ratio_y = (F32)mHeight[mCurImageIndex] / window_height ;
626
627 //if(mWidth[mCurImageIndex] > window_width ||
628 // mHeight[mCurImageIndex] > window_height )
629 {
630 if(ratio_x > ratio_y)
631 {
632 top = (S32)(top * ratio_y / ratio_x) ;
633 }
634 else
635 {
636 right = (S32)(right * ratio_x / ratio_y) ;
637 }
638 }
639 //else
640 //{
641 // right = (S32)(right * ratio_x) ;
642 // top = (S32)(top * ratio_y) ;
643 //}
644 left = (S32)((mThumbnailWidth - right) * 0.5f) ;
645 bottom = (S32)((mThumbnailHeight - top) * 0.5f) ;
646 top += bottom ;
647 right += left ;
648 }
649 mPreviewRect.set(left - 1, top + 1, right + 1, bottom - 1) ;
650
651 return TRUE ;
652}
653
654void LLSnapshotLivePreview::generateThumbnailImage(BOOL force_update)
655{
656 if(mThumbnailUpdateLock) //in the process of updating
657 {
658 return ;
659 }
660 if(mThumbnailUpToDate && !force_update)//already updated
661 {
662 return ;
663 }
664 if(mWidth[mCurImageIndex] < 10 || mHeight[mCurImageIndex] < 10)
665 {
666 return ;
667 }
668
669 ////lock updating
670 mThumbnailUpdateLock = TRUE ;
671
672 if(!setThumbnailImageSize())
673 {
674 mThumbnailUpdateLock = FALSE ;
675 mThumbnailUpToDate = TRUE ;
676 return ;
677 }
678
679 if(mThumbnailImage)
680 {
681 resetThumbnailImage() ;
682 }
683
684 LLPointer<LLImageRaw> raw = NULL ;
685 S32 w , h ;
686 w = get_nearest_power_two(mThumbnailWidth, 512) * 2 ;
687 h = get_nearest_power_two(mThumbnailHeight, 512) * 2 ;
688
689 {
690 raw = new LLImageRaw ;
691 if(!gViewerWindow->thumbnailSnapshot(raw,
692 w, h,
693 gSavedSettings.getBOOL("RenderUIInSnapshot"),
694 FALSE,
695 mSnapshotBufferType) )
696 {
697 raw = NULL ;
698 }
699 }
700
701 if(raw)
702 {
703 mThumbnailImage = new LLImageGL(raw, FALSE);
704 mThumbnailUpToDate = TRUE ;
705 }
706
707 //unlock updating
708 mThumbnailUpdateLock = FALSE ;
709}
710
526//static 711//static
527void LLSnapshotLivePreview::onIdle( void* snapshot_preview ) 712void LLSnapshotLivePreview::onIdle( void* snapshot_preview )
528{ 713{
529 LLSnapshotLivePreview* previewp = (LLSnapshotLivePreview*)snapshot_preview; 714 LLSnapshotLivePreview* previewp = (LLSnapshotLivePreview*)snapshot_preview;
530 715
531 LLVector3 new_camera_pos = gCamera->getOrigin(); 716 LLVector3 new_camera_pos = LLViewerCamera::getInstance()->getOrigin();
532 LLQuaternion new_camera_rot = gCamera->getQuaternion(); 717 LLQuaternion new_camera_rot = LLViewerCamera::getInstance()->getQuaternion();
533 if (gSavedSettings.getBOOL("FreezeTime") && 718 if (gSavedSettings.getBOOL("FreezeTime") &&
534 (new_camera_pos != previewp->mCameraPos || dot(new_camera_rot, previewp->mCameraRot) < 0.995f)) 719 (new_camera_pos != previewp->mCameraPos || dot(new_camera_rot, previewp->mCameraRot) < 0.995f))
535 { 720 {
@@ -543,7 +728,7 @@ void LLSnapshotLivePreview::onIdle( void* snapshot_preview )
543 previewp->mSnapshotDelayTimer.hasExpired()); 728 previewp->mSnapshotDelayTimer.hasExpired());
544 729
545 // don't take snapshots while ALT-zoom active 730 // don't take snapshots while ALT-zoom active
546 if (gToolCamera->hasMouseCapture()) 731 if (LLToolCamera::getInstance()->hasMouseCapture())
547 { 732 {
548 previewp->mSnapshotActive = FALSE; 733 previewp->mSnapshotActive = FALSE;
549 } 734 }
@@ -637,6 +822,7 @@ void LLSnapshotLivePreview::onIdle( void* snapshot_preview )
637 previewp->mViewerImage[previewp->mCurImageIndex]->setClamp(TRUE, TRUE); 822 previewp->mViewerImage[previewp->mCurImageIndex]->setClamp(TRUE, TRUE);
638 823
639 previewp->mSnapshotUpToDate = TRUE; 824 previewp->mSnapshotUpToDate = TRUE;
825 previewp->generateThumbnailImage(TRUE) ;
640 826
641 previewp->mPosTakenGlobal = gAgent.getCameraPositionGlobal(); 827 previewp->mPosTakenGlobal = gAgent.getCameraPositionGlobal();
642 previewp->mShineCountdown = 4; // wait a few frames to avoid animation glitch due to readback this frame 828 previewp->mShineCountdown = 4; // wait a few frames to avoid animation glitch due to readback this frame
@@ -647,6 +833,10 @@ void LLSnapshotLivePreview::onIdle( void* snapshot_preview )
647 previewp->mSnapshotDelayTimer.stop(); 833 previewp->mSnapshotDelayTimer.stop();
648 previewp->mSnapshotActive = FALSE; 834 previewp->mSnapshotActive = FALSE;
649 } 835 }
836 if(!previewp->getThumbnailUpToDate())
837 {
838 previewp->generateThumbnailImage() ;
839 }
650} 840}
651 841
652void LLSnapshotLivePreview::setSize(S32 w, S32 h) 842void LLSnapshotLivePreview::setSize(S32 w, S32 h)
@@ -718,7 +908,7 @@ void LLSnapshotLivePreview::saveTexture()
718 llwarns << "Error encoding snapshot" << llendl; 908 llwarns << "Error encoding snapshot" << llendl;
719 } 909 }
720 910
721 gViewerStats->incStat(LLViewerStats::ST_SNAPSHOT_COUNT ); 911 LLViewerStats::getInstance()->incStat(LLViewerStats::ST_SNAPSHOT_COUNT );
722} 912}
723 913
724BOOL LLSnapshotLivePreview::saveLocal() 914BOOL LLSnapshotLivePreview::saveLocal()
@@ -759,7 +949,8 @@ public:
759 static void onCommitLayerTypes(LLUICtrl* ctrl, void*data); 949 static void onCommitLayerTypes(LLUICtrl* ctrl, void*data);
760 static void onCommitSnapshotType(LLUICtrl* ctrl, void* data); 950 static void onCommitSnapshotType(LLUICtrl* ctrl, void* data);
761 static void onCommitCustomResolution(LLUICtrl *ctrl, void* data); 951 static void onCommitCustomResolution(LLUICtrl *ctrl, void* data);
762 static void checkImageSize(LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL isWidthChanged, S32 max_value); 952 static void resetSnapshotSizeOnUI(LLFloaterSnapshot *view, S32 width, S32 height) ;
953 static BOOL checkImageSize(LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL isWidthChanged, S32 max_value);
763 954
764 static LLSnapshotLivePreview* getPreviewView(LLFloaterSnapshot *floater); 955 static LLSnapshotLivePreview* getPreviewView(LLFloaterSnapshot *floater);
765 static void setResolution(LLFloaterSnapshot* floater, const std::string& comboname); 956 static void setResolution(LLFloaterSnapshot* floater, const std::string& comboname);
@@ -773,7 +964,7 @@ private:
773 static LLSnapshotLivePreview::ESnapshotType getTypeIndex(LLFloaterSnapshot* floater); 964 static LLSnapshotLivePreview::ESnapshotType getTypeIndex(LLFloaterSnapshot* floater);
774 static LLViewerWindow::ESnapshotType getLayerType(LLFloaterSnapshot* floater); 965 static LLViewerWindow::ESnapshotType getLayerType(LLFloaterSnapshot* floater);
775 static void comboSetCustom(LLFloaterSnapshot *floater, const std::string& comboname); 966 static void comboSetCustom(LLFloaterSnapshot *floater, const std::string& comboname);
776 static void checkAutoSnapshot(LLSnapshotLivePreview* floater); 967 static void checkAutoSnapshot(LLSnapshotLivePreview* floater, BOOL update_thumbnail = FALSE);
777 static void checkAspectRatio(LLFloaterSnapshot *view, S32 index) ; 968 static void checkAspectRatio(LLFloaterSnapshot *view, S32 index) ;
778 969
779public: 970public:
@@ -827,7 +1018,7 @@ LLViewerWindow::ESnapshotType LLFloaterSnapshot::Impl::getLayerType(LLFloaterSna
827// static 1018// static
828void LLFloaterSnapshot::Impl::setResolution(LLFloaterSnapshot* floater, const std::string& comboname) 1019void LLFloaterSnapshot::Impl::setResolution(LLFloaterSnapshot* floater, const std::string& comboname)
829{ 1020{
830 LLComboBox* combo = LLUICtrlFactory::getComboBoxByName(floater, comboname); 1021 LLComboBox* combo = floater->getChild<LLComboBox>(comboname);
831 if (combo) 1022 if (combo)
832 { 1023 {
833 combo->setVisible(TRUE); 1024 combo->setVisible(TRUE);
@@ -840,22 +1031,22 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp)
840{ 1031{
841 LLSnapshotLivePreview* previewp = getPreviewView(floaterp); 1032 LLSnapshotLivePreview* previewp = getPreviewView(floaterp);
842 1033
843 S32 delta_height = gSavedSettings.getBOOL("AdvanceSnapshot") ? 0 : -230 ; 1034 S32 delta_height = gSavedSettings.getBOOL("AdvanceSnapshot") ? 0 : floaterp->getUIWinHeightShort() - floaterp->getUIWinHeightLong() ;
844 1035
845 LLComboBox* combo; 1036 LLComboBox* combo;
846 if(!gSavedSettings.getBOOL("AdvanceSnapshot")) //set to original window resolution 1037 if(!gSavedSettings.getBOOL("AdvanceSnapshot")) //set to original window resolution
847 { 1038 {
848 previewp->mKeepAspectRatio = TRUE ; 1039 previewp->mKeepAspectRatio = TRUE ;
849 1040
850 combo = LLUICtrlFactory::getComboBoxByName(floaterp, "postcard_size_combo"); 1041 combo = floaterp->getChild<LLComboBox>("postcard_size_combo");
851 combo->setCurrentByIndex(0) ; 1042 combo->setCurrentByIndex(0) ;
852 gSavedSettings.setS32("SnapshotPostcardLastResolution", 0) ; 1043 gSavedSettings.setS32("SnapshotPostcardLastResolution", 0) ;
853 1044
854 combo = LLUICtrlFactory::getComboBoxByName(floaterp, "texture_size_combo"); 1045 combo = floaterp->getChild<LLComboBox>("texture_size_combo");
855 combo->setCurrentByIndex(0) ; 1046 combo->setCurrentByIndex(0) ;
856 gSavedSettings.setS32("SnapshotTextureLastResolution", 0) ; 1047 gSavedSettings.setS32("SnapshotTextureLastResolution", 0) ;
857 1048
858 combo = LLUICtrlFactory::getComboBoxByName(floaterp, "local_size_combo"); 1049 combo = floaterp->getChild<LLComboBox>("local_size_combo");
859 combo->setCurrentByIndex(0) ; 1050 combo->setCurrentByIndex(0) ;
860 gSavedSettings.setS32("SnapshotLocalLastResolution", 0) ; 1051 gSavedSettings.setS32("SnapshotLocalLastResolution", 0) ;
861 1052
@@ -869,7 +1060,7 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp)
869 floaterp->getParent()->setMouseOpaque(TRUE); 1060 floaterp->getParent()->setMouseOpaque(TRUE);
870 1061
871 // shrink to smaller layout 1062 // shrink to smaller layout
872 floaterp->reshape(floaterp->getRect().getWidth(), 526 + delta_height); 1063 floaterp->reshape(floaterp->getRect().getWidth(), floaterp->getUIWinHeightLong() + delta_height);
873 1064
874 // can see and interact with fullscreen preview now 1065 // can see and interact with fullscreen preview now
875 if (previewp) 1066 if (previewp)
@@ -890,19 +1081,16 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp)
890 // freeze everything else 1081 // freeze everything else
891 gSavedSettings.setBOOL("FreezeTime", TRUE); 1082 gSavedSettings.setBOOL("FreezeTime", TRUE);
892 1083
893 if (gToolMgr->getCurrentToolset() != gCameraToolset) 1084 if (LLToolMgr::getInstance()->getCurrentToolset() != gCameraToolset)
894 { 1085 {
895 sInstance->impl.mLastToolset = gToolMgr->getCurrentToolset(); 1086 sInstance->impl.mLastToolset = LLToolMgr::getInstance()->getCurrentToolset();
896 if (gToolMgr) 1087 LLToolMgr::getInstance()->setCurrentToolset(gCameraToolset);
897 {
898 gToolMgr->setCurrentToolset(gCameraToolset);
899 }
900 } 1088 }
901 } 1089 }
902 else // turning off freeze frame mode 1090 else // turning off freeze frame mode
903 { 1091 {
904 floaterp->getParent()->setMouseOpaque(FALSE); 1092 floaterp->getParent()->setMouseOpaque(FALSE);
905 floaterp->reshape(floaterp->getRect().getWidth(), 526 + delta_height); 1093 floaterp->reshape(floaterp->getRect().getWidth(), floaterp->getUIWinHeightLong() + delta_height);
906 if (previewp) 1094 if (previewp)
907 { 1095 {
908 previewp->setVisible(FALSE); 1096 previewp->setVisible(FALSE);
@@ -918,10 +1106,7 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp)
918 // restore last tool (e.g. pie menu, etc) 1106 // restore last tool (e.g. pie menu, etc)
919 if (sInstance->impl.mLastToolset) 1107 if (sInstance->impl.mLastToolset)
920 { 1108 {
921 if (gToolMgr) 1109 LLToolMgr::getInstance()->setCurrentToolset(sInstance->impl.mLastToolset);
922 {
923 gToolMgr->setCurrentToolset(sInstance->impl.mLastToolset);
924 }
925 } 1110 }
926 } 1111 }
927} 1112}
@@ -931,8 +1116,7 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp)
931void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater) 1116void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)
932{ 1117{
933 BOOL is_advance = gSavedSettings.getBOOL("AdvanceSnapshot") ; 1118 BOOL is_advance = gSavedSettings.getBOOL("AdvanceSnapshot") ;
934 1119 LLRadioGroup* snapshot_type_radio = floater->getChild<LLRadioGroup>("snapshot_type_radio");
935 LLRadioGroup* snapshot_type_radio = LLUICtrlFactory::getRadioGroupByName(floater, "snapshot_type_radio");
936 snapshot_type_radio->setSelectedIndex(gSavedSettings.getS32("LastSnapshotType")); 1120 snapshot_type_radio->setSelectedIndex(gSavedSettings.getS32("LastSnapshotType"));
937 LLSnapshotLivePreview::ESnapshotType shot_type = getTypeIndex(floater); 1121 LLSnapshotLivePreview::ESnapshotType shot_type = getTypeIndex(floater);
938 LLViewerWindow::ESnapshotType layer_type = getLayerType(floater); 1122 LLViewerWindow::ESnapshotType layer_type = getLayerType(floater);
@@ -942,11 +1126,11 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)
942 floater->childSetVisible("local_size_combo", FALSE); 1126 floater->childSetVisible("local_size_combo", FALSE);
943 1127
944 LLComboBox* combo; 1128 LLComboBox* combo;
945 combo = LLUICtrlFactory::getComboBoxByName(floater, "postcard_size_combo"); 1129 combo = floater->getChild<LLComboBox>("postcard_size_combo");
946 if (combo) combo->selectNthItem(gSavedSettings.getS32("SnapshotPostcardLastResolution")); 1130 if (combo) combo->selectNthItem(gSavedSettings.getS32("SnapshotPostcardLastResolution"));
947 combo = LLUICtrlFactory::getComboBoxByName(floater, "texture_size_combo"); 1131 combo = floater->getChild<LLComboBox>("texture_size_combo");
948 if (combo) combo->selectNthItem(gSavedSettings.getS32("SnapshotTextureLastResolution")); 1132 if (combo) combo->selectNthItem(gSavedSettings.getS32("SnapshotTextureLastResolution"));
949 combo = LLUICtrlFactory::getComboBoxByName(floater, "local_size_combo"); 1133 combo = floater->getChild<LLComboBox>("local_size_combo");
950 if (combo) combo->selectNthItem(gSavedSettings.getS32("SnapshotLocalLastResolution")); 1134 if (combo) combo->selectNthItem(gSavedSettings.getS32("SnapshotLocalLastResolution"));
951 1135
952 floater->childSetVisible("upload_btn", FALSE); 1136 floater->childSetVisible("upload_btn", FALSE);
@@ -1051,11 +1235,11 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)
1051} 1235}
1052 1236
1053// static 1237// static
1054void LLFloaterSnapshot::Impl::checkAutoSnapshot(LLSnapshotLivePreview* previewp) 1238void LLFloaterSnapshot::Impl::checkAutoSnapshot(LLSnapshotLivePreview* previewp, BOOL update_thumbnail)
1055{ 1239{
1056 if (previewp) 1240 if (previewp)
1057 { 1241 {
1058 previewp->updateSnapshot(gSavedSettings.getBOOL("AutoSnapshot")); 1242 previewp->updateSnapshot(gSavedSettings.getBOOL("AutoSnapshot"), update_thumbnail);
1059 } 1243 }
1060} 1244}
1061 1245
@@ -1143,16 +1327,13 @@ void LLFloaterSnapshot::Impl::onClickAutoSnap(LLUICtrl *ctrl, void* data)
1143 1327
1144void LLFloaterSnapshot::Impl::onClickMore(void* data) 1328void LLFloaterSnapshot::Impl::onClickMore(void* data)
1145{ 1329{
1146 //floater->childSetVisible("more_btn", FALSE);
1147 //floater->childSetVisible("less_btn", TRUE);
1148
1149 gSavedSettings.setBOOL( "AdvanceSnapshot", TRUE ); 1330 gSavedSettings.setBOOL( "AdvanceSnapshot", TRUE );
1150 1331
1151 LLFloaterSnapshot *view = (LLFloaterSnapshot *)data; 1332 LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;
1152 if (view) 1333 if (view)
1153 { 1334 {
1154 view->translate( 0, -230 ); 1335 view->translate( 0, view->getUIWinHeightShort() - view->getUIWinHeightLong() );
1155 view->reshape(view->getRect().getWidth(), 526); 1336 view->reshape(view->getRect().getWidth(), view->getUIWinHeightLong());
1156 1337
1157 updateControls(view) ; 1338 updateControls(view) ;
1158 updateLayout(view) ; 1339 updateLayout(view) ;
@@ -1160,40 +1341,24 @@ void LLFloaterSnapshot::Impl::onClickMore(void* data)
1160} 1341}
1161void LLFloaterSnapshot::Impl::onClickLess(void* data) 1342void LLFloaterSnapshot::Impl::onClickLess(void* data)
1162{ 1343{
1163 //floater->childSetVisible("less_btn", FALSE);
1164 //floater->childSetVisible("more_btn", TRUE);
1165
1166 gSavedSettings.setBOOL( "AdvanceSnapshot", FALSE ); 1344 gSavedSettings.setBOOL( "AdvanceSnapshot", FALSE );
1167 1345
1168 LLFloaterSnapshot *view = (LLFloaterSnapshot *)data; 1346 LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;
1169 if (view) 1347 if (view)
1170 { 1348 {
1171 view->translate( 0, 230 ); 1349 view->translate( 0, view->getUIWinHeightLong() - view->getUIWinHeightShort() );
1172 view->reshape(view->getRect().getWidth(), 294); 1350 view->reshape(view->getRect().getWidth(), view->getUIWinHeightShort());
1173 1351
1174 updateControls(view) ; 1352 updateControls(view) ;
1175 updateLayout(view) ; 1353 updateLayout(view) ;
1354
1355 if(getPreviewView(view))
1356 {
1357 getPreviewView(view)->setThumbnailImageSize() ;
1358 }
1176 } 1359 }
1177} 1360}
1178 1361
1179//void LLFloaterSnapshot::Impl::onClickAdvanceSnap(LLUICtrl *ctrl, void* data)
1180//{
1181// LLCheckBoxCtrl *check = (LLCheckBoxCtrl *)ctrl;
1182// gSavedSettings.setBOOL( "AdvanceSnapshot", check->get() );
1183//
1184// LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;
1185// if (view)
1186// {
1187// S32 delta_height = gSavedSettings.getBOOL("AdvanceSnapshot") ? 0 : -230 ;
1188//
1189// view->translate( 0, delta_height ? 230 : -230 );
1190// view->reshape(view->getRect().getWidth(), 526 + delta_height);
1191//
1192// updateControls(view) ;
1193// updateLayout(view) ;
1194// }
1195//}
1196
1197// static 1362// static
1198void LLFloaterSnapshot::Impl::onClickUICheck(LLUICtrl *ctrl, void* data) 1363void LLFloaterSnapshot::Impl::onClickUICheck(LLUICtrl *ctrl, void* data)
1199{ 1364{
@@ -1203,7 +1368,7 @@ void LLFloaterSnapshot::Impl::onClickUICheck(LLUICtrl *ctrl, void* data)
1203 LLFloaterSnapshot *view = (LLFloaterSnapshot *)data; 1368 LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;
1204 if (view) 1369 if (view)
1205 { 1370 {
1206 checkAutoSnapshot(getPreviewView(view)); 1371 checkAutoSnapshot(getPreviewView(view), TRUE);
1207 } 1372 }
1208} 1373}
1209 1374
@@ -1216,7 +1381,7 @@ void LLFloaterSnapshot::Impl::onClickHUDCheck(LLUICtrl *ctrl, void* data)
1216 LLFloaterSnapshot *view = (LLFloaterSnapshot *)data; 1381 LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;
1217 if (view) 1382 if (view)
1218 { 1383 {
1219 checkAutoSnapshot(getPreviewView(view)); 1384 checkAutoSnapshot(getPreviewView(view), TRUE);
1220 } 1385 }
1221} 1386}
1222 1387
@@ -1244,23 +1409,13 @@ void LLFloaterSnapshot::Impl::onClickKeepAspectCheck(LLUICtrl* ctrl, void* data)
1244 1409
1245 S32 w, h ; 1410 S32 w, h ;
1246 previewp->getSize(w, h) ; 1411 previewp->getSize(w, h) ;
1247 checkImageSize(previewp, w, h, TRUE, previewp->getMaxImageSize()) ; 1412 if(checkImageSize(previewp, w, h, TRUE, previewp->getMaxImageSize()))
1248 previewp->setSize(w, h) ;
1249
1250 //update textbox
1251 LLSpinCtrl *sctrl = LLViewerUICtrlFactory::getSpinnerByName(view, "snapshot_width") ;
1252 if(sctrl)
1253 { 1413 {
1254 sctrl->setValue(w) ; 1414 resetSnapshotSizeOnUI(view, w, h) ;
1255 } 1415 }
1256 1416
1257 sctrl = LLViewerUICtrlFactory::getSpinnerByName(view, "snapshot_height") ; 1417 previewp->setSize(w, h) ;
1258 if(sctrl) 1418 checkAutoSnapshot(previewp, TRUE);
1259 {
1260 sctrl->setValue(h) ;
1261 }
1262
1263 checkAutoSnapshot(previewp);
1264 } 1419 }
1265 } 1420 }
1266} 1421}
@@ -1276,7 +1431,7 @@ void LLFloaterSnapshot::Impl::onCommitQuality(LLUICtrl* ctrl, void* data)
1276 { 1431 {
1277 previewp->setSnapshotQuality(quality_val); 1432 previewp->setSnapshotQuality(quality_val);
1278 } 1433 }
1279 checkAutoSnapshot(previewp); 1434 checkAutoSnapshot(previewp, TRUE);
1280} 1435}
1281 1436
1282// static 1437// static
@@ -1300,6 +1455,12 @@ void LLFloaterSnapshot::Impl::checkAspectRatio(LLFloaterSnapshot *view, S32 inde
1300{ 1455{
1301 LLSnapshotLivePreview *previewp = getPreviewView(view) ; 1456 LLSnapshotLivePreview *previewp = getPreviewView(view) ;
1302 1457
1458 if(LLSnapshotLivePreview::SNAPSHOT_TEXTURE == getTypeIndex(view))
1459 {
1460 previewp->mKeepAspectRatio = FALSE ;
1461 return ;
1462 }
1463
1303 if(!index) //current window size 1464 if(!index) //current window size
1304 { 1465 {
1305 sAspectRatioCheckOff = TRUE ; 1466 sAspectRatioCheckOff = TRUE ;
@@ -1350,11 +1511,11 @@ void LLFloaterSnapshot::Impl::onCommitResolution(LLUICtrl* ctrl, void* data)
1350 1511
1351 // save off all selected resolution values 1512 // save off all selected resolution values
1352 LLComboBox* combo; 1513 LLComboBox* combo;
1353 combo = LLUICtrlFactory::getComboBoxByName(view, "postcard_size_combo"); 1514 combo = view->getChild<LLComboBox>("postcard_size_combo");
1354 gSavedSettings.setS32("SnapshotPostcardLastResolution", combo->getCurrentIndex()); 1515 gSavedSettings.setS32("SnapshotPostcardLastResolution", combo->getCurrentIndex());
1355 combo = LLUICtrlFactory::getComboBoxByName(view, "texture_size_combo"); 1516 combo = view->getChild<LLComboBox>("texture_size_combo");
1356 gSavedSettings.setS32("SnapshotTextureLastResolution", combo->getCurrentIndex()); 1517 gSavedSettings.setS32("SnapshotTextureLastResolution", combo->getCurrentIndex());
1357 combo = LLUICtrlFactory::getComboBoxByName(view, "local_size_combo"); 1518 combo = view->getChild<LLComboBox>("local_size_combo");
1358 gSavedSettings.setS32("SnapshotLocalLastResolution", combo->getCurrentIndex()); 1519 gSavedSettings.setS32("SnapshotLocalLastResolution", combo->getCurrentIndex());
1359 1520
1360 std::string sdstring = combobox->getSelectedValue(); 1521 std::string sdstring = combobox->getSelectedValue();
@@ -1385,13 +1546,17 @@ void LLFloaterSnapshot::Impl::onCommitResolution(LLUICtrl* ctrl, void* data)
1385 checkAspectRatio(view, width) ; 1546 checkAspectRatio(view, width) ;
1386 1547
1387 previewp->getSize(width, height); 1548 previewp->getSize(width, height);
1388 checkImageSize(previewp, width, height, TRUE, previewp->getMaxImageSize()) ; 1549
1550 if(checkImageSize(previewp, width, height, TRUE, previewp->getMaxImageSize()))
1551 {
1552 resetSnapshotSizeOnUI(view, width, height) ;
1553 }
1389 previewp->setSize(width, height); 1554 previewp->setSize(width, height);
1390 1555
1391 view->childSetValue("snapshot_width", width); 1556 view->childSetValue("snapshot_width", width);
1392 view->childSetValue("snapshot_height", height); 1557 view->childSetValue("snapshot_height", height);
1393 // hide old preview as the aspect ratio could be wrong 1558 // hide old preview as the aspect ratio could be wrong
1394 checkAutoSnapshot(previewp); 1559 checkAutoSnapshot(previewp, FALSE);
1395 } 1560 }
1396} 1561}
1397 1562
@@ -1409,7 +1574,7 @@ void LLFloaterSnapshot::Impl::onCommitLayerTypes(LLUICtrl* ctrl, void*data)
1409 { 1574 {
1410 previewp->setSnapshotBufferType((LLViewerWindow::ESnapshotType)combobox->getCurrentIndex()); 1575 previewp->setSnapshotBufferType((LLViewerWindow::ESnapshotType)combobox->getCurrentIndex());
1411 } 1576 }
1412 checkAutoSnapshot(previewp); 1577 checkAutoSnapshot(previewp, TRUE);
1413 } 1578 }
1414} 1579}
1415 1580
@@ -1428,7 +1593,7 @@ void LLFloaterSnapshot::Impl::onCommitSnapshotType(LLUICtrl* ctrl, void* data)
1428// static 1593// static
1429void LLFloaterSnapshot::Impl::comboSetCustom(LLFloaterSnapshot* floater, const std::string& comboname) 1594void LLFloaterSnapshot::Impl::comboSetCustom(LLFloaterSnapshot* floater, const std::string& comboname)
1430{ 1595{
1431 LLComboBox* combo = LLUICtrlFactory::getComboBoxByName(floater, comboname); 1596 LLComboBox* combo = floater->getChild<LLComboBox>(comboname);
1432 if (combo) 1597 if (combo)
1433 { 1598 {
1434 combo->setCurrentByIndex(combo->getItemCount() - 1); 1599 combo->setCurrentByIndex(combo->getItemCount() - 1);
@@ -1440,8 +1605,11 @@ void LLFloaterSnapshot::Impl::comboSetCustom(LLFloaterSnapshot* floater, const s
1440 1605
1441 1606
1442//static 1607//static
1443void LLFloaterSnapshot::Impl::checkImageSize(LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL isWidthChanged, S32 max_value) 1608BOOL LLFloaterSnapshot::Impl::checkImageSize(LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL isWidthChanged, S32 max_value)
1444{ 1609{
1610 S32 w = width ;
1611 S32 h = height ;
1612
1445 //if texture, ignore aspect ratio setting, round image size to power of 2. 1613 //if texture, ignore aspect ratio setting, round image size to power of 2.
1446 if(LLSnapshotLivePreview::SNAPSHOT_TEXTURE == gSavedSettings.getS32("LastSnapshotType")) 1614 if(LLSnapshotLivePreview::SNAPSHOT_TEXTURE == gSavedSettings.getS32("LastSnapshotType"))
1447 { 1615 {
@@ -1457,15 +1625,12 @@ void LLFloaterSnapshot::Impl::checkImageSize(LLSnapshotLivePreview* previewp, S3
1457 //round to nearest power of 2 1625 //round to nearest power of 2
1458 width = get_nearest_power_two(width, MAX_TEXTURE_SIZE) ; 1626 width = get_nearest_power_two(width, MAX_TEXTURE_SIZE) ;
1459 height = get_nearest_power_two(height, MAX_TEXTURE_SIZE) ; 1627 height = get_nearest_power_two(height, MAX_TEXTURE_SIZE) ;
1460
1461 return ;
1462 } 1628 }
1463 1629 else if(previewp && previewp->mKeepAspectRatio)
1464 if(previewp && previewp->mKeepAspectRatio)
1465 { 1630 {
1466 if(gViewerWindow->getWindowDisplayWidth() < 1 || gViewerWindow->getWindowDisplayHeight() < 1) 1631 if(gViewerWindow->getWindowDisplayWidth() < 1 || gViewerWindow->getWindowDisplayHeight() < 1)
1467 { 1632 {
1468 return ; 1633 return FALSE ;
1469 } 1634 }
1470 1635
1471 //aspect ratio of the current window 1636 //aspect ratio of the current window
@@ -1499,7 +1664,27 @@ void LLFloaterSnapshot::Impl::checkImageSize(LLSnapshotLivePreview* previewp, S3
1499 else 1664 else
1500 { 1665 {
1501 } 1666 }
1502 return ; 1667
1668 return (w != width || h != height) ;
1669}
1670
1671//static
1672void LLFloaterSnapshot::Impl::resetSnapshotSizeOnUI(LLFloaterSnapshot *view, S32 width, S32 height)
1673{
1674 LLSpinCtrl *sctrl = view->getChild<LLSpinCtrl>("snapshot_width") ;
1675 if(sctrl)
1676 {
1677 sctrl->setValue(width) ;
1678 }
1679
1680 sctrl = view->getChild<LLSpinCtrl>("snapshot_height") ;
1681 if(sctrl)
1682 {
1683 sctrl->setValue(height) ;
1684 }
1685
1686 gSavedSettings.setS32("LastSnapshotWidth", width);
1687 gSavedSettings.setS32("LastSnapshotHeight", height);
1503} 1688}
1504 1689
1505//static 1690//static
@@ -1522,35 +1707,14 @@ void LLFloaterSnapshot::Impl::onCommitCustomResolution(LLUICtrl *ctrl, void* dat
1522 1707
1523 if (w != curw || h != curh) 1708 if (w != curw || h != curh)
1524 { 1709 {
1525 S32 width = w ;
1526 S32 height = h ;
1527
1528 previewp->setMaxImageSize((S32)((LLSpinCtrl *)ctrl)->getMaxValue()) ; 1710 previewp->setMaxImageSize((S32)((LLSpinCtrl *)ctrl)->getMaxValue()) ;
1529 checkImageSize(previewp, width, height, width != curw, previewp->getMaxImageSize()) ; 1711 if(checkImageSize(previewp, w, h, w != curw, previewp->getMaxImageSize()))
1530
1531 if(width != w || height != h)
1532 { 1712 {
1533 LLSpinCtrl *sctrl = LLViewerUICtrlFactory::getSpinnerByName(view, "snapshot_width") ; 1713 resetSnapshotSizeOnUI(view, w, h) ;
1534 if(sctrl)
1535 {
1536 sctrl->setValue(width) ;
1537 }
1538
1539 sctrl = LLViewerUICtrlFactory::getSpinnerByName(view, "snapshot_height") ;
1540 if(sctrl)
1541 {
1542 sctrl->setValue(height) ;
1543 }
1544
1545 w = width ;
1546 h = height ;
1547
1548 gSavedSettings.setS32("LastSnapshotWidth", w);
1549 gSavedSettings.setS32("LastSnapshotHeight", h);
1550 } 1714 }
1551 1715
1552 previewp->setSize(w,h); 1716 previewp->setSize(w,h);
1553 checkAutoSnapshot(previewp); 1717 checkAutoSnapshot(previewp, FALSE);
1554 comboSetCustom(view, "postcard_size_combo"); 1718 comboSetCustom(view, "postcard_size_combo");
1555 comboSetCustom(view, "texture_size_combo"); 1719 comboSetCustom(view, "texture_size_combo");
1556 comboSetCustom(view, "local_size_combo"); 1720 comboSetCustom(view, "local_size_combo");
@@ -1585,10 +1749,7 @@ LLFloaterSnapshot::~LLFloaterSnapshot()
1585 1749
1586 if (impl.mLastToolset) 1750 if (impl.mLastToolset)
1587 { 1751 {
1588 if (gToolMgr) 1752 LLToolMgr::getInstance()->setCurrentToolset(impl.mLastToolset);
1589 {
1590 gToolMgr->setCurrentToolset(impl.mLastToolset);
1591 }
1592 } 1753 }
1593 1754
1594 delete &impl; 1755 delete &impl;
@@ -1664,13 +1825,13 @@ void LLFloaterSnapshot::draw()
1664{ 1825{
1665 LLSnapshotLivePreview* previewp = impl.getPreviewView(this); 1826 LLSnapshotLivePreview* previewp = impl.getPreviewView(this);
1666 1827
1667 if (previewp && previewp->isSnapshotActive()) 1828 if (previewp && (previewp->isSnapshotActive() || previewp->getThumbnailLock()))
1668 { 1829 {
1669 // don't render snapshot window in snapshot, even if "show ui" is turned on 1830 // don't render snapshot window in snapshot, even if "show ui" is turned on
1670 return; 1831 return;
1671 } 1832 }
1672 1833
1673 if(getVisible() && !isMinimized()) 1834 if(!isMinimized())
1674 { 1835 {
1675 if (previewp && previewp->getDataSize() > 0) 1836 if (previewp && previewp->getDataSize() > 0)
1676 { 1837 {
@@ -1692,7 +1853,7 @@ void LLFloaterSnapshot::draw()
1692 if (previewp->getSnapshotUpToDate()) 1853 if (previewp->getSnapshotUpToDate())
1693 { 1854 {
1694 LLString bytes_string; 1855 LLString bytes_string;
1695 gResMgr->getIntegerString(bytes_string, (previewp->getDataSize()) >> 10 ); 1856 LLResMgr::getInstance()->getIntegerString(bytes_string, (previewp->getDataSize()) >> 10 );
1696 childSetTextArg("file_size_label", "[SIZE]", bytes_string); 1857 childSetTextArg("file_size_label", "[SIZE]", bytes_string);
1697 } 1858 }
1698 else 1859 else
@@ -1720,7 +1881,7 @@ void LLFloaterSnapshot::draw()
1720 LLFloater::draw(); 1881 LLFloater::draw();
1721 1882
1722 // draw snapshot thumbnail if not in fullscreen preview mode 1883 // draw snapshot thumbnail if not in fullscreen preview mode
1723 if (/*!gSavedSettings.getBOOL("UseFreezeFrame") &&*/ previewp && previewp->getCurrentImage() && previewp->getSnapshotUpToDate()) 1884 /*if (previewp && previewp->getCurrentImage() && previewp->getSnapshotUpToDate())
1724 { 1885 {
1725 F32 aspect = previewp->getImageAspect(); 1886 F32 aspect = previewp->getImageAspect();
1726 // UI size for thumbnail 1887 // UI size for thumbnail
@@ -1757,6 +1918,21 @@ void LLFloaterSnapshot::draw()
1757 glMatrixMode(GL_TEXTURE); 1918 glMatrixMode(GL_TEXTURE);
1758 glPopMatrix(); 1919 glPopMatrix();
1759 glMatrixMode(GL_MODELVIEW); 1920 glMatrixMode(GL_MODELVIEW);
1921 }*/
1922 if (previewp)
1923 {
1924 if(previewp->getThumbnailImage())
1925 {
1926 S32 offset_x = (getRect().getWidth() - previewp->getThumbnailWidth()) / 2 ;
1927 S32 offset_y = getRect().getHeight() - 205 + (90 - previewp->getThumbnailHeight()) / 2 ;
1928
1929 glMatrixMode(GL_MODELVIEW);
1930 gl_draw_scaled_image(offset_x, offset_y,
1931 previewp->getThumbnailWidth(), previewp->getThumbnailHeight(),
1932 previewp->getThumbnailImage(), LLColor4::white);
1933
1934 previewp->drawPreviewRect(offset_x, offset_y) ;
1935 }
1760 } 1936 }
1761} 1937}
1762 1938
@@ -1773,7 +1949,7 @@ void LLFloaterSnapshot::show(void*)
1773 { 1949 {
1774 sInstance = new LLFloaterSnapshot(); 1950 sInstance = new LLFloaterSnapshot();
1775 1951
1776 gUICtrlFactory->buildFloater(sInstance, "floater_snapshot.xml", NULL, FALSE); 1952 LLUICtrlFactory::getInstance()->buildFloater(sInstance, "floater_snapshot.xml", NULL, FALSE);
1777 //move snapshot floater to special purpose snapshotfloaterview 1953 //move snapshot floater to special purpose snapshotfloaterview
1778 gFloaterView->removeChild(sInstance); 1954 gFloaterView->removeChild(sInstance);
1779 gSnapshotFloaterView->addChild(sInstance); 1955 gSnapshotFloaterView->addChild(sInstance);
@@ -1825,24 +2001,17 @@ BOOL LLSnapshotFloaterView::handleKey(KEY key, MASK mask, BOOL called_from_paren
1825 return LLFloaterView::handleKey(key, mask, called_from_parent); 2001 return LLFloaterView::handleKey(key, mask, called_from_parent);
1826 } 2002 }
1827 2003
1828 if (!getEnabled()) 2004 if (called_from_parent)
1829 { 2005 {
1830 return FALSE; 2006 // pass all keystrokes down
2007 LLFloaterView::handleKey(key, mask, called_from_parent);
1831 } 2008 }
1832 else 2009 else
1833 { 2010 {
1834 if (called_from_parent) 2011 // bounce keystrokes back down
1835 { 2012 LLFloaterView::handleKey(key, mask, TRUE);
1836 // pass all keystrokes down
1837 LLFloaterView::handleKey(key, mask, called_from_parent);
1838 }
1839 else
1840 {
1841 // bounce keystrokes back down
1842 LLFloaterView::handleKey(key, mask, TRUE);
1843 }
1844 return TRUE;
1845 } 2013 }
2014 return TRUE;
1846} 2015}
1847 2016
1848BOOL LLSnapshotFloaterView::handleMouseDown(S32 x, S32 y, MASK mask) 2017BOOL LLSnapshotFloaterView::handleMouseDown(S32 x, S32 y, MASK mask)
@@ -1855,7 +2024,7 @@ BOOL LLSnapshotFloaterView::handleMouseDown(S32 x, S32 y, MASK mask)
1855 // give floater a change to handle mouse, else camera tool 2024 // give floater a change to handle mouse, else camera tool
1856 if (childrenHandleMouseDown(x, y, mask) == NULL) 2025 if (childrenHandleMouseDown(x, y, mask) == NULL)
1857 { 2026 {
1858 gToolMgr->getCurrentTool()->handleMouseDown( x, y, mask ); 2027 LLToolMgr::getInstance()->getCurrentTool()->handleMouseDown( x, y, mask );
1859 } 2028 }
1860 return TRUE; 2029 return TRUE;
1861} 2030}
@@ -1870,7 +2039,7 @@ BOOL LLSnapshotFloaterView::handleMouseUp(S32 x, S32 y, MASK mask)
1870 // give floater a change to handle mouse, else camera tool 2039 // give floater a change to handle mouse, else camera tool
1871 if (childrenHandleMouseUp(x, y, mask) == NULL) 2040 if (childrenHandleMouseUp(x, y, mask) == NULL)
1872 { 2041 {
1873 gToolMgr->getCurrentTool()->handleMouseUp( x, y, mask ); 2042 LLToolMgr::getInstance()->getCurrentTool()->handleMouseUp( x, y, mask );
1874 } 2043 }
1875 return TRUE; 2044 return TRUE;
1876} 2045}
@@ -1885,7 +2054,7 @@ BOOL LLSnapshotFloaterView::handleHover(S32 x, S32 y, MASK mask)
1885 // give floater a change to handle mouse, else camera tool 2054 // give floater a change to handle mouse, else camera tool
1886 if (childrenHandleHover(x, y, mask) == NULL) 2055 if (childrenHandleHover(x, y, mask) == NULL)
1887 { 2056 {
1888 gToolMgr->getCurrentTool()->handleHover( x, y, mask ); 2057 LLToolMgr::getInstance()->getCurrentTool()->handleHover( x, y, mask );
1889 } 2058 }
1890 return TRUE; 2059 return TRUE;
1891} 2060}
diff --git a/linden/indra/newview/llfloatersnapshot.h b/linden/indra/newview/llfloatersnapshot.h
index 973cebf..3948a0f 100644
--- a/linden/indra/newview/llfloatersnapshot.h
+++ b/linden/indra/newview/llfloatersnapshot.h
@@ -50,14 +50,20 @@ public:
50 50
51 static void show(void*); 51 static void show(void*);
52 static void hide(void*); 52 static void hide(void*);
53
54 static void update(); 53 static void update();
55 54
55 static S32 getUIWinHeightLong() {return sUIWinHeightLong ;}
56 static S32 getUIWinHeightShort() {return sUIWinHeightShort ;}
57 static S32 getUIWinWidth() {return sUIWinWidth ;}
58
56private: 59private:
57 class Impl; 60 class Impl;
58 Impl& impl; 61 Impl& impl;
59 62
60 static LLFloaterSnapshot* sInstance; 63 static LLFloaterSnapshot* sInstance;
64 static S32 sUIWinHeightLong ;
65 static S32 sUIWinHeightShort ;
66 static S32 sUIWinWidth ;
61}; 67};
62 68
63class LLSnapshotFloaterView : public LLFloaterView 69class LLSnapshotFloaterView : public LLFloaterView
diff --git a/linden/indra/newview/llfloaterstats.cpp b/linden/indra/newview/llfloaterstats.cpp
new file mode 100644
index 0000000..7b2acd4
--- /dev/null
+++ b/linden/indra/newview/llfloaterstats.cpp
@@ -0,0 +1,87 @@
1/**
2 * @file llfloaterstats.cpp
3 * @brief Container for statistics view
4 *
5 * $LicenseInfo:firstyear=2001&license=viewergpl$
6 *
7 * Copyright (c) 2001-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
34#include "llviewerprecompiledheaders.h"
35
36#include "llfloaterstats.h"
37#include "llcontainerview.h"
38#include "llfloater.h"
39#include "llstatview.h"
40#include "llscrollcontainer.h"
41
42const S32 LL_SCROLL_BORDER = 1;
43
44LLFloaterStats::LLFloaterStats(const LLRect& rect)
45 : LLFloater("floater_stats", rect, "Statistics", TRUE, rect.getWidth())
46
47{
48 LLRect stats_rect(0, rect.getHeight() - LLFLOATER_HEADER_SIZE,
49 rect.getWidth() - LLFLOATER_CLOSE_BOX_SIZE, 0);
50 mStatsContainer = new LLContainerView("statistics_view", stats_rect);
51 mStatsContainer->showLabel(FALSE);
52
53 LLRect scroll_rect(LL_SCROLL_BORDER, rect.getHeight() - LLFLOATER_HEADER_SIZE - LL_SCROLL_BORDER,
54 rect.getWidth() - LL_SCROLL_BORDER, LL_SCROLL_BORDER);
55 mScrollContainer = new LLScrollableContainerView("statistics_scroll", scroll_rect, mStatsContainer);
56 mScrollContainer->setFollowsAll();
57 mScrollContainer->setReserveScrollCorner(TRUE);
58
59 mStatsContainer->setScrollContainer(mScrollContainer);
60
61 addChild(mScrollContainer);
62}
63
64
65LLFloaterStats::~LLFloaterStats()
66{
67}
68
69void LLFloaterStats::reshape(S32 width, S32 height)
70{
71 LLRect rect = mStatsContainer->getRect();
72
73 mStatsContainer->reshape(rect.getWidth() - 2, rect.getHeight(), TRUE);
74
75 LLFloater::reshape(width, height);
76}
77
78
79void LLFloaterStats::addStatView(LLStatView* stat)
80{
81 mStatsContainer->addChildAtEnd(stat);
82}
83
84void LLFloaterStats::onClose(bool app_quitting)
85{
86 setVisible(FALSE);
87}
diff --git a/linden/indra/newview/audiosettings.h b/linden/indra/newview/llfloaterstats.h
index 1d2ccc5..0b6feb0 100644
--- a/linden/indra/newview/audiosettings.h
+++ b/linden/indra/newview/llfloaterstats.h
@@ -1,10 +1,10 @@
1/** 1/**
2 * @file audiosettings.h 2 * @file llfloaterstats.h
3 * @brief AudioSettings definitions 3 * @brief Container for statistics view
4 * 4 *
5 * $LicenseInfo:firstyear=2000&license=viewergpl$ 5 * $LicenseInfo:firstyear=2002&license=viewergpl$
6 * 6 *
7 * Copyright (c) 2000-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,13 +29,28 @@
29 * $/LicenseInfo$ 29 * $/LicenseInfo$
30 */ 30 */
31 31
32#ifndef LL_AUDIOSETTINGS_H 32#ifndef LL_LLFLOATERSTATS_H
33#define LL_AUDIOSETTINGS_H 33#define LL_LLFLOATERSTATS_H
34 34
35// comment out to turn off wind 35
36#define kAUDIO_ENABLE_WIND 36#include "llfloater.h"
37//#define kAUDIO_ENABLE_WATER 1 // comment out to turn off water 37
38#define kAUDIO_NUM_BUFFERS 30 38class LLContainerView;
39#define kAUDIO_NUM_SOURCES 30 39class LLStatView;
40class LLScrollableContainerView;
41
42class LLFloaterStats : public LLFloater
43{
44 public:
45 LLFloaterStats(const LLRect& rect);
46 virtual ~LLFloaterStats();
47 void addStatView(LLStatView* stat);
48 void reshape(S32 width, S32 height);
49 void onClose(bool app_quitting);
50
51 private:
52 LLContainerView* mStatsContainer;
53 LLScrollableContainerView* mScrollContainer;
54};
40 55
41#endif 56#endif
diff --git a/linden/indra/newview/llfloatertelehub.cpp b/linden/indra/newview/llfloatertelehub.cpp
index f36fd0f..3ea9c80 100644
--- a/linden/indra/newview/llfloatertelehub.cpp
+++ b/linden/indra/newview/llfloatertelehub.cpp
@@ -45,7 +45,7 @@
45#include "lltoolmgr.h" 45#include "lltoolmgr.h"
46#include "llviewerobject.h" 46#include "llviewerobject.h"
47#include "llviewerobjectlist.h" 47#include "llviewerobjectlist.h"
48#include "llvieweruictrlfactory.h" 48#include "lluictrlfactory.h"
49 49
50LLFloaterTelehub* LLFloaterTelehub::sInstance = NULL; 50LLFloaterTelehub* LLFloaterTelehub::sInstance = NULL;
51 51
@@ -62,8 +62,8 @@ void LLFloaterTelehub::show()
62 sInstance = new LLFloaterTelehub(); 62 sInstance = new LLFloaterTelehub();
63 63
64 // Show tools floater by selecting translate (select) tool 64 // Show tools floater by selecting translate (select) tool
65 gToolMgr->setCurrentToolset(gBasicToolset); 65 LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
66 gToolMgr->getCurrentToolset()->selectTool( gToolTranslate ); 66 LLToolMgr::getInstance()->getCurrentToolset()->selectTool( LLToolCompTranslate::getInstance() );
67 67
68 // Find tools floater, glue to bottom 68 // Find tools floater, glue to bottom
69 if (gFloaterTools) 69 if (gFloaterTools)
@@ -92,21 +92,21 @@ LLFloaterTelehub::LLFloaterTelehub()
92 92
93 gMessageSystem->setHandlerFunc("TelehubInfo", processTelehubInfo); 93 gMessageSystem->setHandlerFunc("TelehubInfo", processTelehubInfo);
94 94
95 gUICtrlFactory->buildFloater(sInstance, "floater_telehub.xml"); 95 LLUICtrlFactory::getInstance()->buildFloater(sInstance, "floater_telehub.xml");
96 96
97 childSetAction("connect_btn", onClickConnect, this); 97 childSetAction("connect_btn", onClickConnect, this);
98 childSetAction("disconnect_btn", onClickDisconnect, this); 98 childSetAction("disconnect_btn", onClickDisconnect, this);
99 childSetAction("add_spawn_point_btn", onClickAddSpawnPoint, this); 99 childSetAction("add_spawn_point_btn", onClickAddSpawnPoint, this);
100 childSetAction("remove_spawn_point_btn", onClickRemoveSpawnPoint, this); 100 childSetAction("remove_spawn_point_btn", onClickRemoveSpawnPoint, this);
101 101
102 LLScrollListCtrl* list = LLUICtrlFactory::getScrollListByName(this, "spawn_points_list"); 102 LLScrollListCtrl* list = getChild<LLScrollListCtrl>("spawn_points_list");
103 if (list) 103 if (list)
104 { 104 {
105 // otherwise you can't walk with arrow keys while floater is up 105 // otherwise you can't walk with arrow keys while floater is up
106 list->setAllowKeyboardMovement(FALSE); 106 list->setAllowKeyboardMovement(FALSE);
107 } 107 }
108 108
109 mObjectSelection = gSelectMgr->getEditSelection(); 109 mObjectSelection = LLSelectMgr::getInstance()->getEditSelection();
110} 110}
111 111
112LLFloaterTelehub::~LLFloaterTelehub() 112LLFloaterTelehub::~LLFloaterTelehub()
@@ -119,7 +119,7 @@ LLFloaterTelehub::~LLFloaterTelehub()
119 119
120void LLFloaterTelehub::draw() 120void LLFloaterTelehub::draw()
121{ 121{
122 if (getVisible() && !isMinimized()) 122 if (!isMinimized())
123 { 123 {
124 refresh(); 124 refresh();
125 } 125 }
@@ -133,7 +133,7 @@ void LLFloaterTelehub::refresh()
133 LLViewerObject* object = mObjectSelection->getFirstRootObject(children_ok); 133 LLViewerObject* object = mObjectSelection->getFirstRootObject(children_ok);
134 134
135 BOOL have_selection = (object != NULL); 135 BOOL have_selection = (object != NULL);
136 BOOL all_volume = gSelectMgr->selectionAllPCode( LL_PCODE_VOLUME ); 136 BOOL all_volume = LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME );
137 childSetEnabled("connect_btn", have_selection && all_volume); 137 childSetEnabled("connect_btn", have_selection && all_volume);
138 138
139 BOOL have_telehub = mTelehubObjectID.notNull(); 139 BOOL have_telehub = mTelehubObjectID.notNull();
@@ -142,7 +142,7 @@ void LLFloaterTelehub::refresh()
142 BOOL space_avail = (mNumSpawn < MAX_SPAWNPOINTS_PER_TELEHUB); 142 BOOL space_avail = (mNumSpawn < MAX_SPAWNPOINTS_PER_TELEHUB);
143 childSetEnabled("add_spawn_point_btn", have_selection && all_volume && space_avail); 143 childSetEnabled("add_spawn_point_btn", have_selection && all_volume && space_avail);
144 144
145 LLScrollListCtrl* list = LLUICtrlFactory::getScrollListByName(this, "spawn_points_list"); 145 LLScrollListCtrl* list = getChild<LLScrollListCtrl>("spawn_points_list");
146 if (list) 146 if (list)
147 { 147 {
148 BOOL enable_remove = (list->getFirstSelected() != NULL); 148 BOOL enable_remove = (list->getFirstSelected() != NULL);
@@ -175,7 +175,7 @@ void LLFloaterTelehub::addBeacons()
175 // Draw nice thick 3-pixel lines. 175 // Draw nice thick 3-pixel lines.
176 gObjectList.addDebugBeacon(hub_pos_region, "", LLColor4::yellow, LLColor4::white, 4); 176 gObjectList.addDebugBeacon(hub_pos_region, "", LLColor4::yellow, LLColor4::white, 4);
177 177
178 LLScrollListCtrl* list = LLUICtrlFactory::getScrollListByName(sInstance, "spawn_points_list"); 178 LLScrollListCtrl* list = sInstance->getChild<LLScrollListCtrl>("spawn_points_list");
179 if (list) 179 if (list)
180 { 180 {
181 S32 spawn_index = list->getFirstSelectedIndex(); 181 S32 spawn_index = list->getFirstSelectedIndex();
@@ -189,26 +189,26 @@ void LLFloaterTelehub::addBeacons()
189 189
190void LLFloaterTelehub::sendTelehubInfoRequest() 190void LLFloaterTelehub::sendTelehubInfoRequest()
191{ 191{
192 gSelectMgr->sendGodlikeRequest("telehub", "info ui"); 192 LLSelectMgr::getInstance()->sendGodlikeRequest("telehub", "info ui");
193} 193}
194 194
195// static 195// static
196void LLFloaterTelehub::onClickConnect(void* data) 196void LLFloaterTelehub::onClickConnect(void* data)
197{ 197{
198 gSelectMgr->sendGodlikeRequest("telehub", "connect"); 198 LLSelectMgr::getInstance()->sendGodlikeRequest("telehub", "connect");
199} 199}
200 200
201// static 201// static
202void LLFloaterTelehub::onClickDisconnect(void* data) 202void LLFloaterTelehub::onClickDisconnect(void* data)
203{ 203{
204 gSelectMgr->sendGodlikeRequest("telehub", "delete"); 204 LLSelectMgr::getInstance()->sendGodlikeRequest("telehub", "delete");
205} 205}
206 206
207// static 207// static
208void LLFloaterTelehub::onClickAddSpawnPoint(void* data) 208void LLFloaterTelehub::onClickAddSpawnPoint(void* data)
209{ 209{
210 gSelectMgr->sendGodlikeRequest("telehub", "spawnpoint add"); 210 LLSelectMgr::getInstance()->sendGodlikeRequest("telehub", "spawnpoint add");
211 gSelectMgr->deselectAll(); 211 LLSelectMgr::getInstance()->deselectAll();
212} 212}
213 213
214// static 214// static
@@ -216,7 +216,7 @@ void LLFloaterTelehub::onClickRemoveSpawnPoint(void* data)
216{ 216{
217 if (!sInstance) return; 217 if (!sInstance) return;
218 218
219 LLScrollListCtrl* list = LLUICtrlFactory::getScrollListByName(sInstance, "spawn_points_list"); 219 LLScrollListCtrl* list = sInstance->getChild<LLScrollListCtrl>("spawn_points_list");
220 if (!list) return; 220 if (!list) return;
221 221
222 S32 spawn_index = list->getFirstSelectedIndex(); 222 S32 spawn_index = list->getFirstSelectedIndex();
@@ -295,7 +295,7 @@ void LLFloaterTelehub::unpackTelehubInfo(LLMessageSystem* msg)
295 childSetVisible("help_text_not_connected", false); 295 childSetVisible("help_text_not_connected", false);
296 } 296 }
297 297
298 LLScrollListCtrl* list = LLUICtrlFactory::getScrollListByName(this, "spawn_points_list"); 298 LLScrollListCtrl* list = getChild<LLScrollListCtrl>("spawn_points_list");
299 if (list) 299 if (list)
300 { 300 {
301 list->deleteAllItems(); 301 list->deleteAllItems();
diff --git a/linden/indra/newview/llfloatertest.cpp b/linden/indra/newview/llfloatertest.cpp
index 2346e3e..b18dabb 100644
--- a/linden/indra/newview/llfloatertest.cpp
+++ b/linden/indra/newview/llfloatertest.cpp
@@ -52,7 +52,7 @@
52#include "llviewborder.h" 52#include "llviewborder.h"
53 53
54#include "llnamelistctrl.h" 54#include "llnamelistctrl.h"
55#include "llvieweruictrlfactory.h" 55#include "lluictrlfactory.h"
56#include "llviewercontrol.h" 56#include "llviewercontrol.h"
57 57
58class LLFloaterTestImpl : public LLFloater 58class LLFloaterTestImpl : public LLFloater
@@ -254,11 +254,7 @@ LLFloaterTestImpl::LLFloaterTestImpl()
254 onCommitLine, 254 onCommitLine,
255 onKeyLine, 255 onKeyLine,
256 onFocusLostLine, 256 onFocusLostLine,
257 this, 257 this);
258 NULL, // prevalidate func
259 LLViewBorder::BEVEL_IN,
260 LLViewBorder::STYLE_LINE,
261 1); // border thickness
262 line->setHandleEditKeysDirectly(true); 258 line->setHandleEditKeysDirectly(true);
263 panel->addChild(line); 259 panel->addChild(line);
264 260
@@ -386,5 +382,5 @@ LLFloaterTest::~LLFloaterTest()
386 382
387LLFloaterSimple::LLFloaterSimple(const std::string& xml_filename) 383LLFloaterSimple::LLFloaterSimple(const std::string& xml_filename)
388{ 384{
389 gUICtrlFactory->buildFloater(this, xml_filename); 385 LLUICtrlFactory::getInstance()->buildFloater(this, xml_filename);
390} 386}
diff --git a/linden/indra/newview/llfloatertools.cpp b/linden/indra/newview/llfloatertools.cpp
index ba4ff50..ec0d46a 100644
--- a/linden/indra/newview/llfloatertools.cpp
+++ b/linden/indra/newview/llfloatertools.cpp
@@ -69,15 +69,14 @@
69#include "lltoolpie.h" 69#include "lltoolpie.h"
70#include "lltoolpipette.h" 70#include "lltoolpipette.h"
71#include "lltoolplacer.h" 71#include "lltoolplacer.h"
72#include "lltoolselect.h"
73#include "lltoolselectland.h" 72#include "lltoolselectland.h"
74#include "llui.h" 73#include "llui.h"
75#include "llviewermenu.h" 74#include "llviewermenu.h"
76#include "llviewerparcelmgr.h" 75#include "llviewerparcelmgr.h"
77#include "llviewerwindow.h" 76#include "llviewerwindow.h"
78#include "llviewercontrol.h" 77#include "llviewercontrol.h"
79 78#include "llviewerjoystick.h"
80#include "llvieweruictrlfactory.h" 79#include "lluictrlfactory.h"
81 80
82// Globals 81// Globals
83LLFloaterTools *gFloaterTools = NULL; 82LLFloaterTools *gFloaterTools = NULL;
@@ -184,50 +183,50 @@ BOOL LLFloaterTools::postBuild()
184 getDragHandle()->setEnabled( !gSavedSettings.getBOOL("ToolboxAutoMove") ); 183 getDragHandle()->setEnabled( !gSavedSettings.getBOOL("ToolboxAutoMove") );
185 184
186 LLRect rect; 185 LLRect rect;
187 mBtnFocus = LLUICtrlFactory::getButtonByName(this,"button focus");//btn; 186 mBtnFocus = getChild<LLButton>("button focus");//btn;
188 childSetAction("button focus",LLFloaterTools::setEditTool, (void*)gToolCamera); 187 childSetAction("button focus",LLFloaterTools::setEditTool, (void*)LLToolCamera::getInstance());
189 mBtnMove = LLUICtrlFactory::getButtonByName(this,"button move"); 188 mBtnMove = getChild<LLButton>("button move");
190 childSetAction("button move",LLFloaterTools::setEditTool, (void*)gToolGrab); 189 childSetAction("button move",LLFloaterTools::setEditTool, (void*)LLToolGrab::getInstance());
191 mBtnEdit = LLUICtrlFactory::getButtonByName(this,"button edit"); 190 mBtnEdit = getChild<LLButton>("button edit");
192 childSetAction("button edit",LLFloaterTools::setEditTool, (void*)gToolTranslate); 191 childSetAction("button edit",LLFloaterTools::setEditTool, (void*)LLToolCompTranslate::getInstance());
193 mBtnCreate = LLUICtrlFactory::getButtonByName(this,"button create"); 192 mBtnCreate = getChild<LLButton>("button create");
194 childSetAction("button create",LLFloaterTools::setEditTool, (void*)gToolCreate); 193 childSetAction("button create",LLFloaterTools::setEditTool, (void*)LLToolCompCreate::getInstance());
195 mBtnLand = LLUICtrlFactory::getButtonByName(this, "button land" ); 194 mBtnLand = getChild<LLButton>("button land" );
196 childSetAction("button land",LLFloaterTools::setEditTool, (void*)gToolParcel); 195 childSetAction("button land",LLFloaterTools::setEditTool, (void*)LLToolSelectLand::getInstance());
197 mTextStatus = LLUICtrlFactory::getTextBoxByName(this,"text status"); 196 mTextStatus = getChild<LLTextBox>("text status");
198 mRadioZoom = LLUICtrlFactory::getCheckBoxByName(this,"radio zoom"); 197 mRadioZoom = getChild<LLCheckBoxCtrl>("radio zoom");
199 childSetCommitCallback("slider zoom",commit_slider_zoom,this); 198 childSetCommitCallback("slider zoom",commit_slider_zoom,this);
200 mRadioOrbit = LLUICtrlFactory::getCheckBoxByName(this,"radio orbit"); 199 mRadioOrbit = getChild<LLCheckBoxCtrl>("radio orbit");
201 childSetCommitCallback("radio orbit",commit_radio_orbit,this); 200 childSetCommitCallback("radio orbit",commit_radio_orbit,this);
202 mRadioPan = LLUICtrlFactory::getCheckBoxByName(this,"radio pan"); 201 mRadioPan = getChild<LLCheckBoxCtrl>("radio pan");
203 childSetCommitCallback("radio pan",commit_radio_pan,this); 202 childSetCommitCallback("radio pan",commit_radio_pan,this);
204 mRadioMove = LLUICtrlFactory::getCheckBoxByName(this,"radio move"); 203 mRadioMove = getChild<LLCheckBoxCtrl>("radio move");
205 childSetCommitCallback("radio move",click_popup_grab_drag,this); 204 childSetCommitCallback("radio move",click_popup_grab_drag,this);
206 mRadioLift = LLUICtrlFactory::getCheckBoxByName(this,"radio lift"); 205 mRadioLift = getChild<LLCheckBoxCtrl>("radio lift");
207 childSetCommitCallback("radio lift",click_popup_grab_lift,this); 206 childSetCommitCallback("radio lift",click_popup_grab_lift,this);
208 mRadioSpin = LLUICtrlFactory::getCheckBoxByName(this,"radio spin"); 207 mRadioSpin = getChild<LLCheckBoxCtrl>("radio spin");
209 childSetCommitCallback("radio spin",click_popup_grab_spin,NULL); 208 childSetCommitCallback("radio spin",click_popup_grab_spin,NULL);
210 mRadioPosition = LLUICtrlFactory::getCheckBoxByName(this,"radio position"); 209 mRadioPosition = getChild<LLCheckBoxCtrl>("radio position");
211 childSetCommitCallback("radio position",commit_select_tool,gToolTranslate); 210 childSetCommitCallback("radio position",commit_select_tool,LLToolCompTranslate::getInstance());
212 mRadioRotate = LLUICtrlFactory::getCheckBoxByName(this,"radio rotate"); 211 mRadioRotate = getChild<LLCheckBoxCtrl>("radio rotate");
213 childSetCommitCallback("radio rotate",commit_select_tool,gToolRotate); 212 childSetCommitCallback("radio rotate",commit_select_tool,LLToolCompRotate::getInstance());
214 mRadioStretch = LLUICtrlFactory::getCheckBoxByName(this,"radio stretch"); 213 mRadioStretch = getChild<LLCheckBoxCtrl>("radio stretch");
215 childSetCommitCallback("radio stretch",commit_select_tool,gToolStretch); 214 childSetCommitCallback("radio stretch",commit_select_tool,LLToolCompScale::getInstance());
216 mRadioSelectFace = LLUICtrlFactory::getCheckBoxByName(this,"radio select face"); 215 mRadioSelectFace = getChild<LLCheckBoxCtrl>("radio select face");
217 childSetCommitCallback("radio select face",commit_select_tool,gToolFace); 216 childSetCommitCallback("radio select face",commit_select_tool,LLToolFace::getInstance());
218 mCheckSelectIndividual = LLUICtrlFactory::getCheckBoxByName(this,"checkbox edit linked parts"); 217 mCheckSelectIndividual = getChild<LLCheckBoxCtrl>("checkbox edit linked parts");
219 childSetValue("checkbox edit linked parts",(BOOL)gSavedSettings.getBOOL("EditLinkedParts")); 218 childSetValue("checkbox edit linked parts",(BOOL)gSavedSettings.getBOOL("EditLinkedParts"));
220 childSetCommitCallback("checkbox edit linked parts",commit_select_component,this); 219 childSetCommitCallback("checkbox edit linked parts",commit_select_component,this);
221 mCheckSnapToGrid = LLUICtrlFactory::getCheckBoxByName(this,"checkbox snap to grid"); 220 mCheckSnapToGrid = getChild<LLCheckBoxCtrl>("checkbox snap to grid");
222 childSetValue("checkbox snap to grid",(BOOL)gSavedSettings.getBOOL("SnapEnabled")); 221 childSetValue("checkbox snap to grid",(BOOL)gSavedSettings.getBOOL("SnapEnabled"));
223 mBtnGridOptions = LLUICtrlFactory::getButtonByName(this,"Options..."); 222 mBtnGridOptions = getChild<LLButton>("Options...");
224 childSetAction("Options...",onClickGridOptions, this); 223 childSetAction("Options...",onClickGridOptions, this);
225 mCheckStretchUniform = LLUICtrlFactory::getCheckBoxByName(this,"checkbox uniform"); 224 mCheckStretchUniform = getChild<LLCheckBoxCtrl>("checkbox uniform");
226 childSetValue("checkbox uniform",(BOOL)gSavedSettings.getBOOL("ScaleUniform")); 225 childSetValue("checkbox uniform",(BOOL)gSavedSettings.getBOOL("ScaleUniform"));
227 mCheckStretchTexture = LLUICtrlFactory::getCheckBoxByName(this,"checkbox stretch textures"); 226 mCheckStretchTexture = getChild<LLCheckBoxCtrl>("checkbox stretch textures");
228 childSetValue("checkbox stretch textures",(BOOL)gSavedSettings.getBOOL("ScaleStretchTextures")); 227 childSetValue("checkbox stretch textures",(BOOL)gSavedSettings.getBOOL("ScaleStretchTextures"));
229 mTextGridMode = LLUICtrlFactory::getTextBoxByName(this,"text ruler mode"); 228 mTextGridMode = getChild<LLTextBox>("text ruler mode");
230 mComboGridMode = LLUICtrlFactory::getComboBoxByName(this,"combobox grid mode"); 229 mComboGridMode = getChild<LLComboBox>("combobox grid mode");
231 childSetCommitCallback("combobox grid mode",commit_grid_mode, this); 230 childSetCommitCallback("combobox grid mode",commit_grid_mode, this);
232 // 231 //
233 // Create Buttons 232 // Create Buttons
@@ -267,7 +266,7 @@ BOOL LLFloaterTools::postBuild()
267 &LLToolPlacerPanel::sGrass}; 266 &LLToolPlacerPanel::sGrass};
268 for(size_t t=0; t<sizeof(toolNames)/sizeof(toolNames[0]); ++t) 267 for(size_t t=0; t<sizeof(toolNames)/sizeof(toolNames[0]); ++t)
269 { 268 {
270 LLButton *found = LLViewerUICtrlFactory::getButtonByName(this,toolNames[t]); 269 LLButton *found = getChild<LLButton>(toolNames[t]);
271 if(found) 270 if(found)
272 { 271 {
273 found->setClickedCallback(setObjectType,toolData[t]); 272 found->setClickedCallback(setObjectType,toolData[t]);
@@ -276,38 +275,38 @@ BOOL LLFloaterTools::postBuild()
276 llwarns << "Tool button not found! DOA Pending." << llendl; 275 llwarns << "Tool button not found! DOA Pending." << llendl;
277 } 276 }
278 } 277 }
279 mCheckCopySelection = LLUICtrlFactory::getCheckBoxByName(this,"checkbox copy selection"); 278 mCheckCopySelection = getChild<LLCheckBoxCtrl>("checkbox copy selection");
280 childSetValue("checkbox copy selection",(BOOL)gSavedSettings.getBOOL("CreateToolCopySelection")); 279 childSetValue("checkbox copy selection",(BOOL)gSavedSettings.getBOOL("CreateToolCopySelection"));
281 mCheckSticky = LLUICtrlFactory::getCheckBoxByName(this,"checkbox sticky"); 280 mCheckSticky = getChild<LLCheckBoxCtrl>("checkbox sticky");
282 childSetValue("checkbox sticky",(BOOL)gSavedSettings.getBOOL("CreateToolKeepSelected")); 281 childSetValue("checkbox sticky",(BOOL)gSavedSettings.getBOOL("CreateToolKeepSelected"));
283 mCheckCopyCenters = LLUICtrlFactory::getCheckBoxByName(this,"checkbox copy centers"); 282 mCheckCopyCenters = getChild<LLCheckBoxCtrl>("checkbox copy centers");
284 childSetValue("checkbox copy centers",(BOOL)gSavedSettings.getBOOL("CreateToolCopyCenters")); 283 childSetValue("checkbox copy centers",(BOOL)gSavedSettings.getBOOL("CreateToolCopyCenters"));
285 mCheckCopyRotates = LLUICtrlFactory::getCheckBoxByName(this,"checkbox copy rotates"); 284 mCheckCopyRotates = getChild<LLCheckBoxCtrl>("checkbox copy rotates");
286 childSetValue("checkbox copy rotates",(BOOL)gSavedSettings.getBOOL("CreateToolCopyRotates")); 285 childSetValue("checkbox copy rotates",(BOOL)gSavedSettings.getBOOL("CreateToolCopyRotates"));
287 mRadioSelectLand = LLUICtrlFactory::getCheckBoxByName(this,"radio select land"); 286 mRadioSelectLand = getChild<LLCheckBoxCtrl>("radio select land");
288 childSetCommitCallback("radio select land",commit_select_tool, gToolParcel); 287 childSetCommitCallback("radio select land",commit_select_tool, LLToolSelectLand::getInstance());
289 mRadioDozerFlatten = LLUICtrlFactory::getCheckBoxByName(this,"radio flatten"); 288 mRadioDozerFlatten = getChild<LLCheckBoxCtrl>("radio flatten");
290 childSetCommitCallback("radio flatten",click_popup_dozer_mode, (void*)0); 289 childSetCommitCallback("radio flatten",click_popup_dozer_mode, (void*)0);
291 mRadioDozerRaise = LLUICtrlFactory::getCheckBoxByName(this,"radio raise"); 290 mRadioDozerRaise = getChild<LLCheckBoxCtrl>("radio raise");
292 childSetCommitCallback("radio raise",click_popup_dozer_mode, (void*)1); 291 childSetCommitCallback("radio raise",click_popup_dozer_mode, (void*)1);
293 mRadioDozerLower = LLUICtrlFactory::getCheckBoxByName(this,"radio lower"); 292 mRadioDozerLower = getChild<LLCheckBoxCtrl>("radio lower");
294 childSetCommitCallback("radio lower",click_popup_dozer_mode, (void*)2); 293 childSetCommitCallback("radio lower",click_popup_dozer_mode, (void*)2);
295 mRadioDozerSmooth = LLUICtrlFactory::getCheckBoxByName(this,"radio smooth"); 294 mRadioDozerSmooth = getChild<LLCheckBoxCtrl>("radio smooth");
296 childSetCommitCallback("radio smooth",click_popup_dozer_mode, (void*)3); 295 childSetCommitCallback("radio smooth",click_popup_dozer_mode, (void*)3);
297 mRadioDozerNoise = LLUICtrlFactory::getCheckBoxByName(this,"radio noise"); 296 mRadioDozerNoise = getChild<LLCheckBoxCtrl>("radio noise");
298 childSetCommitCallback("radio noise",click_popup_dozer_mode, (void*)4); 297 childSetCommitCallback("radio noise",click_popup_dozer_mode, (void*)4);
299 mRadioDozerRevert = LLUICtrlFactory::getCheckBoxByName(this,"radio revert"); 298 mRadioDozerRevert = getChild<LLCheckBoxCtrl>("radio revert");
300 childSetCommitCallback("radio revert",click_popup_dozer_mode, (void*)5); 299 childSetCommitCallback("radio revert",click_popup_dozer_mode, (void*)5);
301 mComboDozerSize = LLUICtrlFactory::getComboBoxByName(this,"combobox brush size"); 300 mComboDozerSize = getChild<LLComboBox>("combobox brush size");
302 childSetCommitCallback("combobox brush size",click_dozer_size, (void*)0); 301 childSetCommitCallback("combobox brush size",click_dozer_size, (void*)0);
303 if(mComboDozerSize) mComboDozerSize->setCurrentByIndex(0); 302 if(mComboDozerSize) mComboDozerSize->setCurrentByIndex(0);
304 mBtnApplyToSelection = LLUICtrlFactory::getButtonByName(this,"button apply to selection"); 303 mBtnApplyToSelection = getChild<LLButton>("button apply to selection");
305 childSetAction("button apply to selection",click_apply_to_selection, (void*)0); 304 childSetAction("button apply to selection",click_apply_to_selection, (void*)0);
306 mCheckShowOwners = LLUICtrlFactory::getCheckBoxByName(this,"checkbox show owners"); 305 mCheckShowOwners = getChild<LLCheckBoxCtrl>("checkbox show owners");
307 childSetValue("checkbox show owners",gSavedSettings.getBOOL("ShowParcelOwners")); 306 childSetValue("checkbox show owners",gSavedSettings.getBOOL("ShowParcelOwners"));
308 childSetAction("button more", click_show_more, this); 307 childSetAction("button more", click_show_more, this);
309 childSetAction("button less", click_show_more, this); 308 childSetAction("button less", click_show_more, this);
310 mTab = LLUICtrlFactory::getTabContainerByName(this,"Object Info Tabs"); 309 mTab = getChild<LLTabContainer>("Object Info Tabs");
311 if(mTab) 310 if(mTab)
312 { 311 {
313 mTab->setVisible( gSavedSettings.getBOOL("ToolboxShowMore") ); 312 mTab->setVisible( gSavedSettings.getBOOL("ToolboxShowMore") );
@@ -406,7 +405,7 @@ LLFloaterTools::LLFloaterTools()
406 factory_map["ContentsInventory"] = LLCallbackMap(createPanelContentsInventory, this);//LLPanelContents 405 factory_map["ContentsInventory"] = LLCallbackMap(createPanelContentsInventory, this);//LLPanelContents
407 factory_map["land info panel"] = LLCallbackMap(createPanelLandInfo, this);//LLPanelLandInfo 406 factory_map["land info panel"] = LLCallbackMap(createPanelLandInfo, this);//LLPanelLandInfo
408 407
409 gUICtrlFactory->buildFloater(this,"floater_tools.xml",&factory_map,FALSE); 408 LLUICtrlFactory::getInstance()->buildFloater(this,"floater_tools.xml",&factory_map,FALSE);
410 409
411 mLargeHeight = getRect().getHeight(); 410 mLargeHeight = getRect().getHeight();
412 mSmallHeight = mLargeHeight; 411 mSmallHeight = mLargeHeight;
@@ -445,7 +444,7 @@ void LLFloaterTools::refresh()
445 const S32 INFO_WIDTH = getRect().getWidth(); 444 const S32 INFO_WIDTH = getRect().getWidth();
446 const S32 INFO_HEIGHT = 384; 445 const S32 INFO_HEIGHT = 384;
447 LLRect object_info_rect(0, 0, INFO_WIDTH, -INFO_HEIGHT); 446 LLRect object_info_rect(0, 0, INFO_WIDTH, -INFO_HEIGHT);
448 BOOL all_volume = gSelectMgr->selectionAllPCode( LL_PCODE_VOLUME ); 447 BOOL all_volume = LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME );
449 448
450 S32 idx_features = mTab->getPanelIndexByTitle(PANEL_NAMES[PANEL_FEATURES]); 449 S32 idx_features = mTab->getPanelIndexByTitle(PANEL_NAMES[PANEL_FEATURES]);
451 S32 idx_face = mTab->getPanelIndexByTitle(PANEL_NAMES[PANEL_FACE]); 450 S32 idx_face = mTab->getPanelIndexByTitle(PANEL_NAMES[PANEL_FACE]);
@@ -502,7 +501,7 @@ void LLFloaterTools::resetToolState()
502 501
503void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask) 502void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
504{ 503{
505 LLTool *tool = gToolMgr->getCurrentTool(); 504 LLTool *tool = LLToolMgr::getInstance()->getCurrentTool();
506 505
507 // HACK to allow seeing the buttons when you have the app in a window. 506 // HACK to allow seeing the buttons when you have the app in a window.
508 // Keep the visibility the same as it 507 // Keep the visibility the same as it
@@ -517,7 +516,7 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
517 } 516 }
518 517
519 // Focus buttons 518 // Focus buttons
520 BOOL focus_visible = ( tool == gToolCamera ); 519 BOOL focus_visible = ( tool == LLToolCamera::getInstance() );
521 520
522 mBtnFocus ->setToggleState( focus_visible ); 521 mBtnFocus ->setToggleState( focus_visible );
523 522
@@ -545,7 +544,7 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
545 childSetValue( "slider zoom", gAgent.getCameraZoomFraction() * 0.5f); 544 childSetValue( "slider zoom", gAgent.getCameraZoomFraction() * 0.5f);
546 545
547 // Move buttons 546 // Move buttons
548 BOOL move_visible = (tool == gToolGrab); 547 BOOL move_visible = (tool == LLToolGrab::getInstance());
549 548
550 if (mBtnMove) mBtnMove ->setToggleState( move_visible ); 549 if (mBtnMove) mBtnMove ->setToggleState( move_visible );
551 550
@@ -574,12 +573,12 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
574 } 573 }
575 574
576 // Edit buttons 575 // Edit buttons
577 BOOL edit_visible = tool == gToolTranslate || 576 BOOL edit_visible = tool == LLToolCompTranslate::getInstance() ||
578 tool == gToolRotate || 577 tool == LLToolCompRotate::getInstance() ||
579 tool == gToolStretch || 578 tool == LLToolCompScale::getInstance() ||
580 tool == gToolFace || 579 tool == LLToolFace::getInstance() ||
581 tool == gToolIndividual || 580 tool == LLToolIndividual::getInstance() ||
582 tool == gToolPipette; 581 tool == LLToolPipette::getInstance();
583 582
584 mBtnEdit ->setToggleState( edit_visible ); 583 mBtnEdit ->setToggleState( edit_visible );
585 584
@@ -589,7 +588,7 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
589 if (mRadioSelectFace) 588 if (mRadioSelectFace)
590 { 589 {
591 mRadioSelectFace->setVisible( edit_visible ); 590 mRadioSelectFace->setVisible( edit_visible );
592 mRadioSelectFace->set( tool == gToolFace ); 591 mRadioSelectFace->set( tool == LLToolFace::getInstance() );
593 } 592 }
594 593
595 if (mCheckSelectIndividual) 594 if (mCheckSelectIndividual)
@@ -598,9 +597,9 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
598 //mCheckSelectIndividual->set(gSavedSettings.getBOOL("EditLinkedParts")); 597 //mCheckSelectIndividual->set(gSavedSettings.getBOOL("EditLinkedParts"));
599 } 598 }
600 599
601 mRadioPosition ->set( tool == gToolTranslate ); 600 mRadioPosition ->set( tool == LLToolCompTranslate::getInstance() );
602 mRadioRotate ->set( tool == gToolRotate ); 601 mRadioRotate ->set( tool == LLToolCompRotate::getInstance() );
603 mRadioStretch ->set( tool == gToolStretch ); 602 mRadioStretch ->set( tool == LLToolCompScale::getInstance() );
604 603
605 if (mComboGridMode) 604 if (mComboGridMode)
606 { 605 {
@@ -632,17 +631,17 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
632 if (mTextGridMode) mTextGridMode->setVisible( edit_visible ); 631 if (mTextGridMode) mTextGridMode->setVisible( edit_visible );
633 632
634 // Snap to grid disabled for grab tool - very confusing 633 // Snap to grid disabled for grab tool - very confusing
635 if (mCheckSnapToGrid) mCheckSnapToGrid->setVisible( edit_visible /* || tool == gToolGrab */ ); 634 if (mCheckSnapToGrid) mCheckSnapToGrid->setVisible( edit_visible /* || tool == LLToolGrab::getInstance() */ );
636 if (mBtnGridOptions) mBtnGridOptions->setVisible( edit_visible /* || tool == gToolGrab */ ); 635 if (mBtnGridOptions) mBtnGridOptions->setVisible( edit_visible /* || tool == LLToolGrab::getInstance() */ );
637 636
638 //mCheckSelectLinked ->setVisible( edit_visible ); 637 //mCheckSelectLinked ->setVisible( edit_visible );
639 if (mCheckStretchUniform) mCheckStretchUniform->setVisible( edit_visible ); 638 if (mCheckStretchUniform) mCheckStretchUniform->setVisible( edit_visible );
640 if (mCheckStretchTexture) mCheckStretchTexture->setVisible( edit_visible ); 639 if (mCheckStretchTexture) mCheckStretchTexture->setVisible( edit_visible );
641 640
642 // Create buttons 641 // Create buttons
643 BOOL create_visible = (tool == gToolCreate); 642 BOOL create_visible = (tool == LLToolCompCreate::getInstance());
644 643
645 mBtnCreate ->setToggleState( tool == gToolCreate ); 644 mBtnCreate ->setToggleState( tool == LLToolCompCreate::getInstance() );
646 645
647 if (mCheckCopySelection 646 if (mCheckCopySelection
648 && mCheckCopySelection->get()) 647 && mCheckCopySelection->get())
@@ -678,12 +677,12 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
678 if (mCheckCopyRotates) mCheckCopyRotates->setEnabled( mCheckCopySelection->get() ); 677 if (mCheckCopyRotates) mCheckCopyRotates->setEnabled( mCheckCopySelection->get() );
679 678
680 // Land buttons 679 // Land buttons
681 BOOL land_visible = (tool == gToolLand || tool == gToolParcel ); 680 BOOL land_visible = (tool == LLToolBrushLand::getInstance() || tool == LLToolSelectLand::getInstance() );
682 681
683 if (mBtnLand) mBtnLand ->setToggleState( land_visible ); 682 if (mBtnLand) mBtnLand ->setToggleState( land_visible );
684 683
685 // mRadioEditLand ->set( tool == gToolLand ); 684 // mRadioEditLand ->set( tool == LLToolBrushLand::getInstance() );
686 if (mRadioSelectLand) mRadioSelectLand->set( tool == gToolParcel ); 685 if (mRadioSelectLand) mRadioSelectLand->set( tool == LLToolSelectLand::getInstance() );
687 686
688 // mRadioEditLand ->setVisible( land_visible ); 687 // mRadioEditLand ->setVisible( land_visible );
689 if (mRadioSelectLand) mRadioSelectLand->setVisible( land_visible ); 688 if (mRadioSelectLand) mRadioSelectLand->setVisible( land_visible );
@@ -693,44 +692,44 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
693 692
694 if (mRadioDozerFlatten) 693 if (mRadioDozerFlatten)
695 { 694 {
696 mRadioDozerFlatten ->set( tool == gToolLand && dozer_mode == 0); 695 mRadioDozerFlatten ->set( tool == LLToolBrushLand::getInstance() && dozer_mode == 0);
697 mRadioDozerFlatten ->setVisible( land_visible ); 696 mRadioDozerFlatten ->setVisible( land_visible );
698 } 697 }
699 if (mRadioDozerRaise) 698 if (mRadioDozerRaise)
700 { 699 {
701 mRadioDozerRaise ->set( tool == gToolLand && dozer_mode == 1); 700 mRadioDozerRaise ->set( tool == LLToolBrushLand::getInstance() && dozer_mode == 1);
702 mRadioDozerRaise ->setVisible( land_visible ); 701 mRadioDozerRaise ->setVisible( land_visible );
703 } 702 }
704 if (mRadioDozerLower) 703 if (mRadioDozerLower)
705 { 704 {
706 mRadioDozerLower ->set( tool == gToolLand && dozer_mode == 2); 705 mRadioDozerLower ->set( tool == LLToolBrushLand::getInstance() && dozer_mode == 2);
707 mRadioDozerLower ->setVisible( land_visible ); 706 mRadioDozerLower ->setVisible( land_visible );
708 } 707 }
709 if (mRadioDozerSmooth) 708 if (mRadioDozerSmooth)
710 { 709 {
711 mRadioDozerSmooth ->set( tool == gToolLand && dozer_mode == 3); 710 mRadioDozerSmooth ->set( tool == LLToolBrushLand::getInstance() && dozer_mode == 3);
712 mRadioDozerSmooth ->setVisible( land_visible ); 711 mRadioDozerSmooth ->setVisible( land_visible );
713 } 712 }
714 if (mRadioDozerNoise) 713 if (mRadioDozerNoise)
715 { 714 {
716 mRadioDozerNoise ->set( tool == gToolLand && dozer_mode == 4); 715 mRadioDozerNoise ->set( tool == LLToolBrushLand::getInstance() && dozer_mode == 4);
717 mRadioDozerNoise ->setVisible( land_visible ); 716 mRadioDozerNoise ->setVisible( land_visible );
718 } 717 }
719 if (mRadioDozerRevert) 718 if (mRadioDozerRevert)
720 { 719 {
721 mRadioDozerRevert ->set( tool == gToolLand && dozer_mode == 5); 720 mRadioDozerRevert ->set( tool == LLToolBrushLand::getInstance() && dozer_mode == 5);
722 mRadioDozerRevert ->setVisible( land_visible ); 721 mRadioDozerRevert ->setVisible( land_visible );
723 } 722 }
724 if (mComboDozerSize) 723 if (mComboDozerSize)
725 { 724 {
726 mComboDozerSize ->setCurrentByIndex(dozer_size); 725 mComboDozerSize ->setCurrentByIndex(dozer_size);
727 mComboDozerSize ->setVisible( land_visible ); 726 mComboDozerSize ->setVisible( land_visible );
728 mComboDozerSize ->setEnabled( tool == gToolLand ); 727 mComboDozerSize ->setEnabled( tool == LLToolBrushLand::getInstance() );
729 } 728 }
730 if (mBtnApplyToSelection) 729 if (mBtnApplyToSelection)
731 { 730 {
732 mBtnApplyToSelection->setVisible( land_visible ); 731 mBtnApplyToSelection->setVisible( land_visible );
733 mBtnApplyToSelection->setEnabled( land_visible && !gParcelMgr->selectionEmpty() && tool != gToolParcel); 732 mBtnApplyToSelection->setEnabled( land_visible && !LLViewerParcelMgr::getInstance()->selectionEmpty() && tool != LLToolSelectLand::getInstance());
734 } 733 }
735 if (mCheckShowOwners) 734 if (mCheckShowOwners)
736 { 735 {
@@ -742,8 +741,8 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
742 // 741 //
743 BOOL show_more = gSavedSettings.getBOOL("ToolboxShowMore"); 742 BOOL show_more = gSavedSettings.getBOOL("ToolboxShowMore");
744 743
745 mTab->setVisible(show_more && tool != gToolLand && tool != gToolParcel); 744 mTab->setVisible(show_more && tool != LLToolBrushLand::getInstance() && tool != LLToolSelectLand::getInstance());
746 mPanelLandInfo->setVisible(show_more && (tool == gToolLand || tool == gToolParcel)); 745 mPanelLandInfo->setVisible(show_more && (tool == LLToolBrushLand::getInstance() || tool == LLToolSelectLand::getInstance()));
747} 746}
748 747
749 748
@@ -757,8 +756,11 @@ BOOL LLFloaterTools::canClose()
757// virtual 756// virtual
758void LLFloaterTools::onOpen() 757void LLFloaterTools::onOpen()
759{ 758{
760 mParcelSelection = gParcelMgr->getFloatingParcelSelection(); 759 mParcelSelection = LLViewerParcelMgr::getInstance()->getFloatingParcelSelection();
761 mObjectSelection = gSelectMgr->getEditSelection(); 760 mObjectSelection = LLSelectMgr::getInstance()->getEditSelection();
761
762 gMenuBarView->setItemVisible("Tools", TRUE);
763 gMenuBarView->arrange();
762} 764}
763 765
764// virtual 766// virtual
@@ -768,12 +770,14 @@ void LLFloaterTools::onClose(bool app_quitting)
768 setVisible(FALSE); 770 setVisible(FALSE);
769 mTab->setVisible(FALSE); 771 mTab->setVisible(FALSE);
770 772
773 LLViewerJoystick::getInstance()->moveAvatar(true);
774
771 // Different from handle_reset_view in that it doesn't actually 775 // Different from handle_reset_view in that it doesn't actually
772 // move the camera if EditCameraMovement is not set. 776 // move the camera if EditCameraMovement is not set.
773 gAgent.resetView(gSavedSettings.getBOOL("EditCameraMovement")); 777 gAgent.resetView(gSavedSettings.getBOOL("EditCameraMovement"));
774 778
775 // exit component selection mode 779 // exit component selection mode
776 gSelectMgr->promoteSelectionToRoot(); 780 LLSelectMgr::getInstance()->promoteSelectionToRoot();
777 gSavedSettings.setBOOL("EditLinkedParts", FALSE); 781 gSavedSettings.setBOOL("EditLinkedParts", FALSE);
778 782
779 gViewerWindow->showCursor(); 783 gViewerWindow->showCursor();
@@ -784,10 +788,13 @@ void LLFloaterTools::onClose(bool app_quitting)
784 mObjectSelection = NULL; 788 mObjectSelection = NULL;
785 789
786 // Switch back to basic toolset 790 // Switch back to basic toolset
787 gToolMgr->setCurrentToolset(gBasicToolset); 791 LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
788 // we were already in basic toolset, using build tools 792 // we were already in basic toolset, using build tools
789 // so manually reset tool to default (pie menu tool) 793 // so manually reset tool to default (pie menu tool)
790 gToolMgr->getCurrentToolset()->selectFirstTool(); 794 LLToolMgr::getInstance()->getCurrentToolset()->selectFirstTool();
795
796 gMenuBarView->setItemVisible("Tools", FALSE);
797 gMenuBarView->arrange();
791} 798}
792 799
793void LLFloaterTools::showMore(BOOL show_more) 800void LLFloaterTools::showMore(BOOL show_more)
@@ -885,19 +892,19 @@ void commit_slider_zoom(LLUICtrl *ctrl, void*)
885 892
886void click_popup_rotate_left(void*) 893void click_popup_rotate_left(void*)
887{ 894{
888 gSelectMgr->selectionRotateAroundZ( 45.f ); 895 LLSelectMgr::getInstance()->selectionRotateAroundZ( 45.f );
889 dialog_refresh_all(); 896 dialog_refresh_all();
890} 897}
891 898
892void click_popup_rotate_reset(void*) 899void click_popup_rotate_reset(void*)
893{ 900{
894 gSelectMgr->selectionResetRotation(); 901 LLSelectMgr::getInstance()->selectionResetRotation();
895 dialog_refresh_all(); 902 dialog_refresh_all();
896} 903}
897 904
898void click_popup_rotate_right(void*) 905void click_popup_rotate_right(void*)
899{ 906{
900 gSelectMgr->selectionRotateAroundZ( -45.f ); 907 LLSelectMgr::getInstance()->selectionRotateAroundZ( -45.f );
901 dialog_refresh_all(); 908 dialog_refresh_all();
902} 909}
903 910
@@ -906,7 +913,7 @@ void click_popup_dozer_mode(LLUICtrl *, void *user)
906{ 913{
907 S32 show_owners = gSavedSettings.getBOOL("ShowParcelOwners"); 914 S32 show_owners = gSavedSettings.getBOOL("ShowParcelOwners");
908 S32 mode = (S32)(intptr_t) user; 915 S32 mode = (S32)(intptr_t) user;
909 gFloaterTools->setEditTool( gToolLand ); 916 gFloaterTools->setEditTool( LLToolBrushLand::getInstance() );
910 gSavedSettings.setS32("RadioLandBrushAction", mode); 917 gSavedSettings.setS32("RadioLandBrushAction", mode);
911 gSavedSettings.setBOOL("ShowParcelOwners", show_owners); 918 gSavedSettings.setBOOL("ShowParcelOwners", show_owners);
912} 919}
@@ -925,7 +932,7 @@ void click_dozer_size(LLUICtrl *ctrl, void *user)
925 932
926void click_apply_to_selection(void* user) 933void click_apply_to_selection(void* user)
927{ 934{
928 gToolLand->modifyLandInSelectionGlobal(); 935 LLToolBrushLand::getInstance()->modifyLandInSelectionGlobal();
929} 936}
930 937
931void commit_select_tool(LLUICtrl *ctrl, void *data) 938void commit_select_tool(LLUICtrl *ctrl, void *data)
@@ -951,11 +958,11 @@ void commit_select_component(LLUICtrl *ctrl, void *data)
951 958
952 if (select_individuals) 959 if (select_individuals)
953 { 960 {
954 gSelectMgr->demoteSelectionToIndividuals(); 961 LLSelectMgr::getInstance()->demoteSelectionToIndividuals();
955 } 962 }
956 else 963 else
957 { 964 {
958 gSelectMgr->promoteSelectionToRoot(); 965 LLSelectMgr::getInstance()->promoteSelectionToRoot();
959 } 966 }
960} 967}
961 968
@@ -963,7 +970,7 @@ void commit_grid_mode(LLUICtrl *ctrl, void *data)
963{ 970{
964 LLComboBox* combo = (LLComboBox*)ctrl; 971 LLComboBox* combo = (LLComboBox*)ctrl;
965 972
966 gSelectMgr->setGridMode((EGridMode)combo->getCurrentIndex()); 973 LLSelectMgr::getInstance()->setGridMode((EGridMode)combo->getCurrentIndex());
967} 974}
968 975
969// static 976// static
@@ -991,6 +998,6 @@ void LLFloaterTools::setEditTool(void* tool_pointer)
991 998
992void LLFloaterTools::onFocusReceived() 999void LLFloaterTools::onFocusReceived()
993{ 1000{
994 gToolMgr->setCurrentToolset(gBasicToolset); 1001 LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
995 LLFloater::onFocusReceived(); 1002 LLFloater::onFocusReceived();
996} 1003}
diff --git a/linden/indra/newview/llfloatertopobjects.cpp b/linden/indra/newview/llfloatertopobjects.cpp
index 04f00bd..a6efb06 100644
--- a/linden/indra/newview/llfloatertopobjects.cpp
+++ b/linden/indra/newview/llfloatertopobjects.cpp
@@ -46,7 +46,7 @@
46#include "lltracker.h" 46#include "lltracker.h"
47#include "llviewerparcelmgr.h" 47#include "llviewerparcelmgr.h"
48#include "llviewerregion.h" 48#include "llviewerregion.h"
49#include "llvieweruictrlfactory.h" 49#include "lluictrlfactory.h"
50#include "llviewerwindow.h" 50#include "llviewerwindow.h"
51 51
52LLFloaterTopObjects* LLFloaterTopObjects::sInstance = NULL; 52LLFloaterTopObjects* LLFloaterTopObjects::sInstance = NULL;
@@ -62,7 +62,7 @@ void LLFloaterTopObjects::show()
62 } 62 }
63 63
64 sInstance = new LLFloaterTopObjects(); 64 sInstance = new LLFloaterTopObjects();
65 gUICtrlFactory->buildFloater(sInstance, "floater_top_objects.xml"); 65 LLUICtrlFactory::getInstance()->buildFloater(sInstance, "floater_top_objects.xml");
66 sInstance->center(); 66 sInstance->center();
67} 67}
68 68
@@ -85,7 +85,7 @@ BOOL LLFloaterTopObjects::postBuild()
85 childSetCommitCallback("objects_list", onCommitObjectsList, this); 85 childSetCommitCallback("objects_list", onCommitObjectsList, this);
86 childSetDoubleClickCallback("objects_list", onDoubleClickObjectsList); 86 childSetDoubleClickCallback("objects_list", onDoubleClickObjectsList);
87 childSetFocus("objects_list"); 87 childSetFocus("objects_list");
88 LLScrollListCtrl *objects_list = LLUICtrlFactory::getScrollListByName(this, "objects_list"); 88 LLScrollListCtrl *objects_list = getChild<LLScrollListCtrl>("objects_list");
89 if (objects_list) 89 if (objects_list)
90 { 90 {
91 objects_list->setCommitOnSelectionChange(TRUE); 91 objects_list->setCommitOnSelectionChange(TRUE);
@@ -106,7 +106,7 @@ BOOL LLFloaterTopObjects::postBuild()
106 106
107 107
108 /* 108 /*
109 LLLineEditor* line_editor = LLUICtrlFactory::getLineEditorByName(this, "owner_name_editor"); 109 LLLineEditor* line_editor = getChild<LLLineEditor>("owner_name_editor");
110 if (line_editor) 110 if (line_editor)
111 { 111 {
112 line_editor->setCommitOnFocusLost(FALSE); 112 line_editor->setCommitOnFocusLost(FALSE);
@@ -114,7 +114,7 @@ BOOL LLFloaterTopObjects::postBuild()
114 line_editor->setCallbackUserData(this); 114 line_editor->setCallbackUserData(this);
115 } 115 }
116 116
117 line_editor = LLUICtrlFactory::getLineEditorByName(this, "object_name_editor"); 117 line_editor = getChild<LLLineEditor>("object_name_editor");
118 if (line_editor) 118 if (line_editor)
119 { 119 {
120 line_editor->setCommitOnFocusLost(FALSE); 120 line_editor->setCommitOnFocusLost(FALSE);
@@ -247,7 +247,7 @@ void LLFloaterTopObjects::onCommitObjectsList(LLUICtrl* ctrl, void* data)
247 247
248void LLFloaterTopObjects::updateSelectionInfo() 248void LLFloaterTopObjects::updateSelectionInfo()
249{ 249{
250 LLScrollListCtrl* list = LLUICtrlFactory::getScrollListByName(this, "objects_list"); 250 LLScrollListCtrl* list = getChild<LLScrollListCtrl>("objects_list");
251 251
252 if (!list) return; 252 if (!list) return;
253 253
@@ -445,7 +445,7 @@ void LLFloaterTopObjects::onGetByOwnerName(LLUICtrl* ctrl, void* data)
445 445
446void LLFloaterTopObjects::showBeacon() 446void LLFloaterTopObjects::showBeacon()
447{ 447{
448 LLScrollListCtrl* list = LLUICtrlFactory::getScrollListByName(this, "objects_list"); 448 LLScrollListCtrl* list = getChild<LLScrollListCtrl>("objects_list");
449 if (!list) return; 449 if (!list) return;
450 450
451 LLScrollListItem* first_selected = list->getFirstSelected(); 451 LLScrollListItem* first_selected = list->getFirstSelected();
diff --git a/linden/indra/newview/llfloatertos.cpp b/linden/indra/newview/llfloatertos.cpp
index c64173e..920ef4c 100644
--- a/linden/indra/newview/llfloatertos.cpp
+++ b/linden/indra/newview/llfloatertos.cpp
@@ -42,7 +42,7 @@
42#include "llstartup.h" 42#include "llstartup.h"
43#include "message.h" 43#include "message.h"
44#include "llagent.h" 44#include "llagent.h"
45#include "llvieweruictrlfactory.h" 45#include "lluictrlfactory.h"
46#include "llviewerwindow.h" 46#include "llviewerwindow.h"
47#include "llviewerstats.h" 47#include "llviewerstats.h"
48#include "llui.h" 48#include "llui.h"
@@ -62,11 +62,11 @@ LLFloaterTOS* LLFloaterTOS::show(ETOSType type, const std::string & message)
62 62
63 if (type == TOS_TOS) 63 if (type == TOS_TOS)
64 { 64 {
65 gUICtrlFactory->buildFloater(LLFloaterTOS::sInstance, "floater_tos.xml"); 65 LLUICtrlFactory::getInstance()->buildFloater(LLFloaterTOS::sInstance, "floater_tos.xml");
66 } 66 }
67 else 67 else
68 { 68 {
69 gUICtrlFactory->buildFloater(LLFloaterTOS::sInstance, "floater_critical.xml"); 69 LLUICtrlFactory::getInstance()->buildFloater(LLFloaterTOS::sInstance, "floater_critical.xml");
70 } 70 }
71 71
72 return LLFloaterTOS::sInstance; 72 return LLFloaterTOS::sInstance;
@@ -132,7 +132,7 @@ BOOL LLFloaterTOS::postBuild()
132 if ( mType != TOS_TOS ) 132 if ( mType != TOS_TOS )
133 { 133 {
134 // this displays the critical message 134 // this displays the critical message
135 LLTextEditor *Editor = LLUICtrlFactory::getTextEditorByName(this, "tos_text"); 135 LLTextEditor *Editor = getChild<LLTextEditor>("tos_text");
136 if (Editor) 136 if (Editor)
137 { 137 {
138 Editor->setHandleEditKeysDirectly( TRUE ); 138 Editor->setHandleEditKeysDirectly( TRUE );
@@ -146,14 +146,14 @@ BOOL LLFloaterTOS::postBuild()
146 } 146 }
147 147
148 // disable Agree to TOS radio button until the page has fully loaded 148 // disable Agree to TOS radio button until the page has fully loaded
149 LLRadioGroup* tos_agreement = LLUICtrlFactory::getRadioGroupByName(this, "tos_agreement"); 149 LLRadioGroup* tos_agreement = getChild<LLRadioGroup>("tos_agreement");
150 if ( tos_agreement ) 150 if ( tos_agreement )
151 { 151 {
152 tos_agreement->setEnabled( false ); 152 tos_agreement->setEnabled( false );
153 }; 153 };
154 154
155 // hide the SL text widget if we're displaying TOS with using a browser widget. 155 // hide the SL text widget if we're displaying TOS with using a browser widget.
156 LLTextEditor *editor = LLUICtrlFactory::getTextEditorByName(this, "tos_text"); 156 LLTextEditor *editor = getChild<LLTextEditor>("tos_text");
157 if ( editor ) 157 if ( editor )
158 { 158 {
159 editor->setVisible( FALSE ); 159 editor->setVisible( FALSE );
@@ -194,7 +194,7 @@ void LLFloaterTOS::setSiteIsAlive( bool alive )
194 { 194 {
195 // normally this is set when navigation to TOS page navigation completes (so you can't accept before TOS loads) 195 // normally this is set when navigation to TOS page navigation completes (so you can't accept before TOS loads)
196 // but if the page is unavailable, we need to do this now 196 // but if the page is unavailable, we need to do this now
197 LLRadioGroup* tos_agreement = LLUICtrlFactory::getRadioGroupByName(this, "tos_agreement"); 197 LLRadioGroup* tos_agreement = getChild<LLRadioGroup>("tos_agreement");
198 if ( tos_agreement ) 198 if ( tos_agreement )
199 { 199 {
200 tos_agreement->setEnabled( true ); 200 tos_agreement->setEnabled( true );
@@ -286,7 +286,7 @@ void LLFloaterTOS::onNavigateComplete( const EventType& eventIn )
286 { 286 {
287 llinfos << "NAVIGATE COMPLETE" << llendl; 287 llinfos << "NAVIGATE COMPLETE" << llendl;
288 // enable Agree to TOS radio button now that page has loaded 288 // enable Agree to TOS radio button now that page has loaded
289 LLRadioGroup* tos_agreement = LLUICtrlFactory::getRadioGroupByName(this, "tos_agreement"); 289 LLRadioGroup* tos_agreement = getChild<LLRadioGroup>("tos_agreement");
290 if ( tos_agreement ) 290 if ( tos_agreement )
291 { 291 {
292 tos_agreement->setEnabled( true ); 292 tos_agreement->setEnabled( true );
diff --git a/linden/indra/newview/llfloaterurldisplay.cpp b/linden/indra/newview/llfloaterurldisplay.cpp
index 8d12729..563eaf6 100644
--- a/linden/indra/newview/llfloaterurldisplay.cpp
+++ b/linden/indra/newview/llfloaterurldisplay.cpp
@@ -35,7 +35,7 @@
35#include "llfloaterurldisplay.h" 35#include "llfloaterurldisplay.h"
36 36
37#include "llpanelplace.h" 37#include "llpanelplace.h"
38#include "llvieweruictrlfactory.h" 38#include "lluictrlfactory.h"
39 39
40#include "v3dmath.h" 40#include "v3dmath.h"
41 41
@@ -46,7 +46,7 @@
46LLFloaterURLDisplay::LLFloaterURLDisplay(const LLSD& sd) 46LLFloaterURLDisplay::LLFloaterURLDisplay(const LLSD& sd)
47{ 47{
48 mFactoryMap["place_details_panel"] = LLCallbackMap(LLFloaterURLDisplay::createPlaceDetail, this); 48 mFactoryMap["place_details_panel"] = LLCallbackMap(LLFloaterURLDisplay::createPlaceDetail, this);
49 gUICtrlFactory->buildFloater(this, "floater_preview_url.xml", &getFactoryMap()); 49 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_preview_url.xml", &getFactoryMap());
50 this->setVisible(false); 50 this->setVisible(false);
51 51
52 // If positioned at 0,0 the teleport button is behind the toolbar. 52 // If positioned at 0,0 the teleport button is behind the toolbar.
@@ -101,7 +101,7 @@ void* LLFloaterURLDisplay::createPlaceDetail(void* userdata)
101{ 101{
102 LLFloaterURLDisplay *self = (LLFloaterURLDisplay*)userdata; 102 LLFloaterURLDisplay *self = (LLFloaterURLDisplay*)userdata;
103 self->mPlacePanel = new LLPanelPlace(); 103 self->mPlacePanel = new LLPanelPlace();
104 gUICtrlFactory->buildPanel(self->mPlacePanel, "panel_place.xml"); 104 LLUICtrlFactory::getInstance()->buildPanel(self->mPlacePanel, "panel_place.xml");
105 105
106 return self->mPlacePanel; 106 return self->mPlacePanel;
107} 107}
diff --git a/linden/indra/newview/llfloaterurlentry.cpp b/linden/indra/newview/llfloaterurlentry.cpp
index b2cc37f..e9c828b 100644
--- a/linden/indra/newview/llfloaterurlentry.cpp
+++ b/linden/indra/newview/llfloaterurlentry.cpp
@@ -38,7 +38,7 @@
38// project includes 38// project includes
39#include "llcombobox.h" 39#include "llcombobox.h"
40#include "llurlhistory.h" 40#include "llurlhistory.h"
41#include "llvieweruictrlfactory.h" 41#include "lluictrlfactory.h"
42#include "llwindow.h" 42#include "llwindow.h"
43#include "llviewerwindow.h" 43#include "llviewerwindow.h"
44 44
@@ -89,9 +89,9 @@ LLFloaterURLEntry::LLFloaterURLEntry(LLHandle<LLPanel> parent)
89 LLFloater(), 89 LLFloater(),
90 mPanelLandMediaHandle(parent) 90 mPanelLandMediaHandle(parent)
91{ 91{
92 gUICtrlFactory->buildFloater(this, "floater_url_entry.xml"); 92 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_url_entry.xml");
93 93
94 mMediaURLEdit = LLUICtrlFactory::getComboBoxByName(this, "media_entry"); 94 mMediaURLEdit = getChild<LLComboBox>("media_entry");
95 95
96 // Cancel button 96 // Cancel button
97 childSetAction("cancel_btn", onBtnCancel, this); 97 childSetAction("cancel_btn", onBtnCancel, this);
diff --git a/linden/indra/newview/llfloatervoicewizard.cpp b/linden/indra/newview/llfloatervoicedevicesettings.cpp
index 94063a0..c7b9562 100644
--- a/linden/indra/newview/llfloatervoicewizard.cpp
+++ b/linden/indra/newview/llfloatervoicedevicesettings.cpp
@@ -1,7 +1,7 @@
1/** 1/**
2 * @file llfloatervoicewizard.cpp 2 * @file llfloatervoicedevicesettings.cpp
3 * @author Richard Nelson 3 * @author Richard Nelson
4 * @brief Voice communication set-up wizard 4 * @brief Voice communication set-up
5 * 5 *
6 * $LicenseInfo:firstyear=2007&license=viewergpl$ 6 * $LicenseInfo:firstyear=2007&license=viewergpl$
7 * 7 *
@@ -32,8 +32,9 @@
32 32
33#include "llviewerprecompiledheaders.h" 33#include "llviewerprecompiledheaders.h"
34 34
35#include "llfloatervoicewizard.h" 35#include "llfloatervoicedevicesettings.h"
36 36
37// Viewer includes
37#include "llagent.h" 38#include "llagent.h"
38#include "llbutton.h" 39#include "llbutton.h"
39#include "llcombobox.h" 40#include "llcombobox.h"
@@ -42,184 +43,14 @@
42#include "llprefsvoice.h" 43#include "llprefsvoice.h"
43#include "llsliderctrl.h" 44#include "llsliderctrl.h"
44#include "llviewercontrol.h" 45#include "llviewercontrol.h"
45#include "llvieweruictrlfactory.h"
46#include "llvoiceclient.h" 46#include "llvoiceclient.h"
47#include "llimpanel.h" 47#include "llimpanel.h"
48 48
49LLFloaterVoiceWizard::LLFloaterVoiceWizard(const LLSD& seed) : LLFloater("floater_voice_wizard"), mDevicePanel(NULL) 49// Library includes (after viewer)
50{ 50#include "lluictrlfactory.h"
51 mFactoryMap["device_settings"] = LLCallbackMap(createPanelDeviceSettings, this);
52 // do not automatically open singleton floaters (as result of getInstance())
53 BOOL no_open = FALSE;
54 gUICtrlFactory->buildFloater(this, "floater_voice_wizard.xml", &mFactoryMap, no_open);
55
56 mLogic = new LLPrefsVoiceLogic(this);
57 center();
58}
59
60LLFloaterVoiceWizard::~LLFloaterVoiceWizard()
61{
62 delete mLogic;
63 mLogic = NULL;
64}
65
66BOOL LLFloaterVoiceWizard::postBuild()
67{
68 childSetAction("next_btn", onClickNext, this);
69 childSetAction("back_btn", onClickBack, this);
70 childSetAction("ok_btn", onClickOK, this);
71 childSetAction("cancel_btn", onClickCancel, this);
72
73 childSetCommitCallback("voice_enable", onCommitVoiceEnable, this);
74
75 return TRUE;
76}
77
78void LLFloaterVoiceWizard::draw()
79{
80 mLogic->refresh();
81 if (mDevicePanel)
82 {
83 mDevicePanel->refresh();
84 }
85
86 LLTabContainer* tabs = LLUICtrlFactory::getTabContainerByName(this, "wizard_tabs");
87
88 if (tabs)
89 {
90 // if on first tab, disable back button, etc
91 if (tabs->getCurrentPanelIndex() == 0)
92 {
93 if (gSavedSettings.getBOOL("EnableVoiceChat"))
94 {
95 childSetEnabled("next_btn", TRUE);
96 setDefaultBtn(gUICtrlFactory->getButtonByName(this, "next_btn"));
97 }
98 else
99 {
100 childSetEnabled("next_btn", FALSE);
101 setDefaultBtn(gUICtrlFactory->getButtonByName(this, "ok_btn"));
102 }
103 childSetEnabled("back_btn", FALSE);
104 }
105 else
106 {
107 // if on any tab but the last, enable the next button
108 if (tabs->getCurrentPanelIndex() < tabs->getTabCount() - 1)
109 {
110 childSetEnabled("next_btn", TRUE);
111 setDefaultBtn(gUICtrlFactory->getButtonByName(this, "next_btn"));
112 }
113 else
114 {
115 childSetEnabled("next_btn", FALSE);
116 setDefaultBtn(gUICtrlFactory->getButtonByName(this, "ok_btn"));
117 }
118 childSetEnabled("back_btn", TRUE);
119 }
120 }
121
122 // because we can simultaneously change voice settings from the preferences UI
123 // we need to stay in sync
124 childSetValue("voice_enable", gSavedSettings.getBOOL("EnableVoiceChat") ? "1" : "0");
125
126 // show appropriate text on first tab
127 childSetVisible("voice_intro_text3", !gSavedSettings.getBOOL("EnableVoiceChat"));
128 childSetVisible("voice_intro_text4", gSavedSettings.getBOOL("EnableVoiceChat"));
129 51
130 LLFloater::draw();
131}
132 52
133void LLFloaterVoiceWizard::onOpen() 53LLPanelVoiceDeviceSettings::LLPanelVoiceDeviceSettings()
134{
135 LLFloaterDeviceSettings::hideInstance();
136
137 if(mDevicePanel)
138 {
139 mDevicePanel->onOpen();
140 }
141
142 LLFloater::onOpen();
143}
144
145void LLFloaterVoiceWizard::onClose(bool app_quitting)
146{
147 if(mDevicePanel)
148 {
149 mDevicePanel->onClose(app_quitting);
150 }
151
152 LLFloater::onClose(app_quitting);
153}
154
155
156// static
157void LLFloaterVoiceWizard::onClickNext(void *user_data)
158{
159 LLTabContainer* tabs = LLUICtrlFactory::getTabContainerByName((LLFloater*)user_data, "wizard_tabs");
160 if (tabs)
161 {
162 tabs->selectNextTab();
163 }
164}
165
166// static
167void LLFloaterVoiceWizard::onClickBack(void *user_data)
168{
169 LLTabContainer* tabs = LLUICtrlFactory::getTabContainerByName((LLFloater*)user_data, "wizard_tabs");
170 if (tabs)
171 {
172 tabs->selectPrevTab();
173 }
174}
175
176// static
177void LLFloaterVoiceWizard::onClickOK(void *user_data)
178{
179 LLFloaterVoiceWizard* self = (LLFloaterVoiceWizard*)user_data;
180
181 // propagate tuning mic volume to actual mic volume
182 self->mLogic->apply();
183 if (self->mDevicePanel)
184 {
185 self->mDevicePanel->apply();
186 }
187 self->close();
188}
189
190// static
191void LLFloaterVoiceWizard::onClickCancel(void *user_data)
192{
193 LLFloaterVoiceWizard* self = (LLFloaterVoiceWizard*)user_data;
194
195 self->mLogic->cancel();
196 if (self->mDevicePanel)
197 {
198 self->mDevicePanel->cancel();
199 }
200 self->close();
201}
202
203// static
204void LLFloaterVoiceWizard::onCommitVoiceEnable(LLUICtrl* ctrl, void* user_data)
205{
206 gSavedSettings.setBOOL("EnableVoiceChat", ctrl->getValue().asInteger());
207}
208
209// static
210void* LLFloaterVoiceWizard::createPanelDeviceSettings(void* user_data)
211{
212 LLFloaterVoiceWizard* floaterp = (LLFloaterVoiceWizard*)user_data;
213 floaterp->mDevicePanel = new LLPanelDeviceSettings();
214 return floaterp->mDevicePanel;
215}
216
217
218//
219// LLPanelDeviceSettings
220//
221
222LLPanelDeviceSettings::LLPanelDeviceSettings()
223{ 54{
224 mCtrlInputDevices = NULL; 55 mCtrlInputDevices = NULL;
225 mCtrlOutputDevices = NULL; 56 mCtrlOutputDevices = NULL;
@@ -235,18 +66,15 @@ LLPanelDeviceSettings::LLPanelDeviceSettings()
235 //gVoiceClient->refreshDeviceLists(); 66 //gVoiceClient->refreshDeviceLists();
236} 67}
237 68
238LLPanelDeviceSettings::~LLPanelDeviceSettings() 69LLPanelVoiceDeviceSettings::~LLPanelVoiceDeviceSettings()
239{ 70{
240} 71}
241 72
242BOOL LLPanelDeviceSettings::postBuild() 73BOOL LLPanelVoiceDeviceSettings::postBuild()
243{ 74{
244 LLSlider* volume_slider = gUICtrlFactory->getSliderBarByName(this, "mic_volume_slider"); 75 LLSlider* volume_slider = getChild<LLSlider>("mic_volume_slider");
245 if (volume_slider) 76 // set mic volume tuning slider based on last mic volume setting
246 { 77 volume_slider->setValue(mMicVolume);
247 // set mic volume tuning slider based on last mic volume setting
248 volume_slider->setValue(mMicVolume);
249 }
250 78
251 childSetCommitCallback("voice_input_device", onCommitInputDevice, this); 79 childSetCommitCallback("voice_input_device", onCommitInputDevice, this);
252 childSetCommitCallback("voice_output_device", onCommitOutputDevice, this); 80 childSetCommitCallback("voice_output_device", onCommitOutputDevice, this);
@@ -254,7 +82,7 @@ BOOL LLPanelDeviceSettings::postBuild()
254 return TRUE; 82 return TRUE;
255} 83}
256 84
257void LLPanelDeviceSettings::draw() 85void LLPanelVoiceDeviceSettings::draw()
258{ 86{
259 // let user know that volume indicator is not yet available 87 // let user know that volume indicator is not yet available
260 childSetVisible("wait_text", !gVoiceClient->inTuningMode()); 88 childSetVisible("wait_text", !gVoiceClient->inTuningMode());
@@ -278,7 +106,7 @@ void LLPanelDeviceSettings::draw()
278 for(S32 power_bar_idx = 0; power_bar_idx < 5; power_bar_idx++) 106 for(S32 power_bar_idx = 0; power_bar_idx < 5; power_bar_idx++)
279 { 107 {
280 LLString view_name = llformat("%s%d", "bar", power_bar_idx); 108 LLString view_name = llformat("%s%d", "bar", power_bar_idx);
281 LLView* bar_view = getChildByName(view_name, TRUE); 109 LLView* bar_view = getChild<LLView>(view_name);
282 if (bar_view) 110 if (bar_view)
283 { 111 {
284 if (power_bar_idx < discrete_power) 112 if (power_bar_idx < discrete_power)
@@ -292,7 +120,7 @@ void LLPanelDeviceSettings::draw()
292 } 120 }
293} 121}
294 122
295void LLPanelDeviceSettings::apply() 123void LLPanelVoiceDeviceSettings::apply()
296{ 124{
297 std::string s; 125 std::string s;
298 if(mCtrlInputDevices) 126 if(mCtrlInputDevices)
@@ -311,7 +139,7 @@ void LLPanelDeviceSettings::apply()
311 gSavedSettings.setF32("AudioLevelMic", mMicVolume); 139 gSavedSettings.setF32("AudioLevelMic", mMicVolume);
312} 140}
313 141
314void LLPanelDeviceSettings::cancel() 142void LLPanelVoiceDeviceSettings::cancel()
315{ 143{
316 gSavedSettings.setString("VoiceInputAudioDevice", mInputDevice); 144 gSavedSettings.setString("VoiceInputAudioDevice", mInputDevice);
317 gSavedSettings.setString("VoiceOutputAudioDevice", mOutputDevice); 145 gSavedSettings.setString("VoiceOutputAudioDevice", mOutputDevice);
@@ -323,20 +151,17 @@ void LLPanelDeviceSettings::cancel()
323 mCtrlOutputDevices->setSimple(mOutputDevice); 151 mCtrlOutputDevices->setSimple(mOutputDevice);
324} 152}
325 153
326void LLPanelDeviceSettings::refresh() 154void LLPanelVoiceDeviceSettings::refresh()
327{ 155{
328 //grab current volume 156 //grab current volume
329 LLSlider* volume_slider = gUICtrlFactory->getSliderBarByName(this, "mic_volume_slider"); 157 LLSlider* volume_slider = getChild<LLSlider>("mic_volume_slider");
330 if (volume_slider) 158 // set mic volume tuning slider based on last mic volume setting
331 { 159 mMicVolume = (F32)volume_slider->getValue().asReal();
332 // set mic volume tuning slider based on last mic volume setting 160 gVoiceClient->tuningSetMicVolume(mMicVolume);
333 mMicVolume = (F32)volume_slider->getValue().asReal();
334 gVoiceClient->tuningSetMicVolume(mMicVolume);
335 }
336 161
337 // Fill in popup menus 162 // Fill in popup menus
338 mCtrlInputDevices = LLUICtrlFactory::getComboBoxByName(this, "voice_input_device"); 163 mCtrlInputDevices = getChild<LLComboBox>("voice_input_device");
339 mCtrlOutputDevices = LLUICtrlFactory::getComboBoxByName(this, "voice_output_device"); 164 mCtrlOutputDevices = getChild<LLComboBox>("voice_output_device");
340 165
341 if(!gVoiceClient->deviceSettingsAvailable()) 166 if(!gVoiceClient->deviceSettingsAvailable())
342 { 167 {
@@ -398,7 +223,7 @@ void LLPanelDeviceSettings::refresh()
398 } 223 }
399} 224}
400 225
401void LLPanelDeviceSettings::onOpen() 226void LLPanelVoiceDeviceSettings::onOpen()
402{ 227{
403 mInputDevice = gSavedSettings.getString("VoiceInputAudioDevice"); 228 mInputDevice = gSavedSettings.getString("VoiceInputAudioDevice");
404 mOutputDevice = gSavedSettings.getString("VoiceOutputAudioDevice"); 229 mOutputDevice = gSavedSettings.getString("VoiceOutputAudioDevice");
@@ -413,40 +238,39 @@ void LLPanelDeviceSettings::onOpen()
413 LLVoiceChannel::suspend(); 238 LLVoiceChannel::suspend();
414} 239}
415 240
416void LLPanelDeviceSettings::onClose(bool app_quitting) 241void LLPanelVoiceDeviceSettings::onClose(bool app_quitting)
417{ 242{
418 gVoiceClient->tuningStop(); 243 gVoiceClient->tuningStop();
419 LLVoiceChannel::resume(); 244 LLVoiceChannel::resume();
420} 245}
421 246
422// static 247// static
423void LLPanelDeviceSettings::onCommitInputDevice(LLUICtrl* ctrl, void* user_data) 248void LLPanelVoiceDeviceSettings::onCommitInputDevice(LLUICtrl* ctrl, void* user_data)
424{ 249{
425 gSavedSettings.setString("VoiceInputAudioDevice", ctrl->getValue().asString()); 250 gSavedSettings.setString("VoiceInputAudioDevice", ctrl->getValue().asString());
426} 251}
427 252
428// static 253// static
429void LLPanelDeviceSettings::onCommitOutputDevice(LLUICtrl* ctrl, void* user_data) 254void LLPanelVoiceDeviceSettings::onCommitOutputDevice(LLUICtrl* ctrl, void* user_data)
430{ 255{
431 gSavedSettings.setString("VoiceOutputAudioDevice", ctrl->getValue().asString()); 256 gSavedSettings.setString("VoiceOutputAudioDevice", ctrl->getValue().asString());
432} 257}
433 258
434// 259//
435// LLFloaterDeviceSettings 260// LLFloaterVoiceDeviceSettings
436// 261//
437 262
438LLFloaterDeviceSettings::LLFloaterDeviceSettings(const LLSD& seed) : LLFloater("floater_device_settings"), mDevicePanel(NULL) 263LLFloaterVoiceDeviceSettings::LLFloaterVoiceDeviceSettings(const LLSD& seed) : LLFloater("floater_device_settings"), mDevicePanel(NULL)
439{ 264{
440 mFactoryMap["device_settings"] = LLCallbackMap(createPanelDeviceSettings, this); 265 mFactoryMap["device_settings"] = LLCallbackMap(createPanelVoiceDeviceSettings, this);
441 // do not automatically open singleton floaters (as result of getInstance()) 266 // do not automatically open singleton floaters (as result of getInstance())
442 BOOL no_open = FALSE; 267 BOOL no_open = FALSE;
443 gUICtrlFactory->buildFloater(this, "floater_device_settings.xml", &mFactoryMap, no_open); 268 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_device_settings.xml", &mFactoryMap, no_open);
444 center(); 269 center();
445} 270}
446 271
447void LLFloaterDeviceSettings::onOpen() 272void LLFloaterVoiceDeviceSettings::onOpen()
448{ 273{
449 LLFloaterVoiceWizard::hideInstance();
450 if(mDevicePanel) 274 if(mDevicePanel)
451 { 275 {
452 mDevicePanel->onOpen(); 276 mDevicePanel->onOpen();
@@ -455,7 +279,7 @@ void LLFloaterDeviceSettings::onOpen()
455 LLFloater::onOpen(); 279 LLFloater::onOpen();
456} 280}
457 281
458void LLFloaterDeviceSettings::onClose(bool app_quitting) 282void LLFloaterVoiceDeviceSettings::onClose(bool app_quitting)
459{ 283{
460 if(mDevicePanel) 284 if(mDevicePanel)
461 { 285 {
@@ -465,7 +289,7 @@ void LLFloaterDeviceSettings::onClose(bool app_quitting)
465 setVisible(FALSE); 289 setVisible(FALSE);
466} 290}
467 291
468void LLFloaterDeviceSettings::apply() 292void LLFloaterVoiceDeviceSettings::apply()
469{ 293{
470 if (mDevicePanel) 294 if (mDevicePanel)
471 { 295 {
@@ -473,7 +297,7 @@ void LLFloaterDeviceSettings::apply()
473 } 297 }
474} 298}
475 299
476void LLFloaterDeviceSettings::cancel() 300void LLFloaterVoiceDeviceSettings::cancel()
477{ 301{
478 if (mDevicePanel) 302 if (mDevicePanel)
479 { 303 {
@@ -481,7 +305,7 @@ void LLFloaterDeviceSettings::cancel()
481 } 305 }
482} 306}
483 307
484void LLFloaterDeviceSettings::draw() 308void LLFloaterVoiceDeviceSettings::draw()
485{ 309{
486 if (mDevicePanel) 310 if (mDevicePanel)
487 { 311 {
@@ -491,9 +315,9 @@ void LLFloaterDeviceSettings::draw()
491} 315}
492 316
493// static 317// static
494void* LLFloaterDeviceSettings::createPanelDeviceSettings(void* user_data) 318void* LLFloaterVoiceDeviceSettings::createPanelVoiceDeviceSettings(void* user_data)
495{ 319{
496 LLFloaterDeviceSettings* floaterp = (LLFloaterDeviceSettings*)user_data; 320 LLFloaterVoiceDeviceSettings* floaterp = (LLFloaterVoiceDeviceSettings*)user_data;
497 floaterp->mDevicePanel = new LLPanelDeviceSettings(); 321 floaterp->mDevicePanel = new LLPanelVoiceDeviceSettings();
498 return floaterp->mDevicePanel; 322 return floaterp->mDevicePanel;
499} 323}
diff --git a/linden/indra/newview/llfloatervoicewizard.h b/linden/indra/newview/llfloatervoicedevicesettings.h
index a70677d..eba5c3c 100644
--- a/linden/indra/newview/llfloatervoicewizard.h
+++ b/linden/indra/newview/llfloatervoicedevicesettings.h
@@ -1,5 +1,5 @@
1/** 1/**
2 * @file llfloatervoicewizard.h 2 * @file llpanelvoicedevicesettings.h
3 * @author Richard Nelson 3 * @author Richard Nelson
4 * @brief Voice communication set-up wizard 4 * @brief Voice communication set-up wizard
5 * 5 *
@@ -30,44 +30,18 @@
30 * $/LicenseInfo$ 30 * $/LicenseInfo$
31 */ 31 */
32 32
33#ifndef LL_LLFLOATERVOICEWIZARD_H 33#ifndef LL_LLFLOATERVOICEDEVICESETTINGS_H
34#define LL_LLFLOATERVOICEWIZARD_H 34#define LL_LLFLOATERVOICEDEVICESETTINGS_H
35 35
36#include "llfloater.h" 36#include "llfloater.h"
37 37
38class LLPrefsVoiceLogic; 38class LLPrefsVoiceLogic;
39class LLPanelDeviceSettings;
40 39
41class LLFloaterVoiceWizard 40class LLPanelVoiceDeviceSettings : public LLPanel
42 : public LLFloater, public LLFloaterSingleton<LLFloaterVoiceWizard>
43{ 41{
44public: 42public:
45 LLFloaterVoiceWizard(const LLSD& seed); 43 LLPanelVoiceDeviceSettings();
46 virtual ~LLFloaterVoiceWizard(); 44 ~LLPanelVoiceDeviceSettings();
47
48 /*virtual*/ BOOL postBuild();
49 /*virtual*/ void draw();
50 /*virtual*/ void onOpen();
51 /*virtual*/ void onClose(bool app_quitting);
52
53protected:
54 static void onClickNext(void *user_data);
55 static void onClickBack(void *user_data);
56 static void onClickOK(void *user_data);
57 static void onClickCancel(void *user_data);
58 static void onCommitVoiceEnable(LLUICtrl* ctrl, void* user_data);
59 static void* createPanelDeviceSettings(void* user_data);
60
61protected:
62 LLPrefsVoiceLogic* mLogic;
63 LLPanelDeviceSettings* mDevicePanel;
64};
65
66class LLPanelDeviceSettings : public LLPanel
67{
68public:
69 LLPanelDeviceSettings();
70 ~LLPanelDeviceSettings();
71 45
72 /*virtual*/ void draw(); 46 /*virtual*/ void draw();
73 /*virtual*/ BOOL postBuild(); 47 /*virtual*/ BOOL postBuild();
@@ -89,10 +63,10 @@ protected:
89 BOOL mDevicesUpdated; 63 BOOL mDevicesUpdated;
90}; 64};
91 65
92class LLFloaterDeviceSettings : public LLFloater, public LLFloaterSingleton<LLFloaterDeviceSettings> 66class LLFloaterVoiceDeviceSettings : public LLFloater, public LLFloaterSingleton<LLFloaterVoiceDeviceSettings>
93{ 67{
94public: 68public:
95 LLFloaterDeviceSettings(const LLSD& seed); 69 LLFloaterVoiceDeviceSettings(const LLSD& seed);
96 /*virtual*/ void onOpen(); 70 /*virtual*/ void onOpen();
97 /*virtual*/ void onClose(bool app_quitting); 71 /*virtual*/ void onClose(bool app_quitting);
98 /*virtual*/ void draw(); 72 /*virtual*/ void draw();
@@ -100,9 +74,9 @@ public:
100 void cancel(); 74 void cancel();
101 75
102protected: 76protected:
103 static void* createPanelDeviceSettings(void* user_data); 77 static void* createPanelVoiceDeviceSettings(void* user_data);
104 78
105 LLPanelDeviceSettings* mDevicePanel; 79 LLPanelVoiceDeviceSettings* mDevicePanel;
106}; 80};
107 81
108#endif // LL_LLFLOATERVOICEWIZARD_H 82#endif // LL_LLFLOATERVOICEDEVICESETTINGS_H
diff --git a/linden/indra/newview/llfloaterwater.cpp b/linden/indra/newview/llfloaterwater.cpp
index c842a87..98b449b 100644
--- a/linden/indra/newview/llfloaterwater.cpp
+++ b/linden/indra/newview/llfloaterwater.cpp
@@ -41,12 +41,13 @@
41#include "llcolorswatch.h" 41#include "llcolorswatch.h"
42#include "llcheckboxctrl.h" 42#include "llcheckboxctrl.h"
43#include "lltexturectrl.h" 43#include "lltexturectrl.h"
44#include "llvieweruictrlfactory.h" 44#include "lluictrlfactory.h"
45#include "llviewercamera.h" 45#include "llviewercamera.h"
46#include "llcombobox.h" 46#include "llcombobox.h"
47#include "lllineeditor.h" 47#include "lllineeditor.h"
48#include "llfloaterdaycycle.h" 48#include "llfloaterdaycycle.h"
49#include "llboost.h" 49#include "llboost.h"
50#include "llmultisliderctrl.h"
50 51
51#include "v4math.h" 52#include "v4math.h"
52#include "llviewerdisplay.h" 53#include "llviewerdisplay.h"
@@ -66,10 +67,10 @@ std::set<std::string> LLFloaterWater::sDefaultPresets;
66 67
67LLFloaterWater::LLFloaterWater() : LLFloater("water floater") 68LLFloaterWater::LLFloaterWater() : LLFloater("water floater")
68{ 69{
69 gUICtrlFactory->buildFloater(this, "floater_water.xml"); 70 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_water.xml");
70 71
71 // add the combo boxes 72 // add the combo boxes
72 LLComboBox* comboBox = LLUICtrlFactory::getComboBoxByName(this, "WaterPresetsCombo"); 73 LLComboBox* comboBox = getChild<LLComboBox>("WaterPresetsCombo");
73 74
74 if(comboBox != NULL) { 75 if(comboBox != NULL) {
75 76
@@ -150,7 +151,7 @@ void LLFloaterWater::initCallbacks(void) {
150 childSetCommitCallback("WaterBlurMult", onFloatControlMoved, &param_mgr->mBlurMultiplier); 151 childSetCommitCallback("WaterBlurMult", onFloatControlMoved, &param_mgr->mBlurMultiplier);
151 152
152 // Load/save 153 // Load/save
153 LLComboBox* comboBox = LLUICtrlFactory::getComboBoxByName(this, "WaterPresetsCombo"); 154 LLComboBox* comboBox = getChild<LLComboBox>("WaterPresetsCombo");
154 155
155 //childSetAction("WaterLoadPreset", onLoadPreset, comboBox); 156 //childSetAction("WaterLoadPreset", onLoadPreset, comboBox);
156 childSetAction("WaterNewPreset", onNewPreset, comboBox); 157 childSetAction("WaterNewPreset", onNewPreset, comboBox);
@@ -166,7 +167,7 @@ void LLFloaterWater::initCallbacks(void) {
166 comboBox->setCommitCallback(onChangePresetName); 167 comboBox->setCommitCallback(onChangePresetName);
167 168
168 LLTextureCtrl* textCtrl = getChild<LLTextureCtrl>("WaterNormalMap"); 169 LLTextureCtrl* textCtrl = getChild<LLTextureCtrl>("WaterNormalMap");
169 textCtrl->setDefaultImageAssetID(LLUUID(gViewerArt.getString("water_normal.tga"))); 170 textCtrl->setDefaultImageAssetID(DEFAULT_WATER_NORMAL);
170 childSetCommitCallback("WaterNormalMap", onNormalMapPicked, NULL); 171 childSetCommitCallback("WaterNormalMap", onNormalMapPicked, NULL);
171} 172}
172 173
@@ -199,8 +200,7 @@ void LLFloaterWater::newPromptCallback(S32 option, const LLString& text, void* u
199 } 200 }
200 201
201 if(option == 0) { 202 if(option == 0) {
202 LLComboBox* comboBox = LLUICtrlFactory::getComboBoxByName(sWaterMenu, 203 LLComboBox* comboBox = sWaterMenu->getChild<LLComboBox>( "WaterPresetsCombo");
203 "WaterPresetsCombo");
204 204
205 LLWaterParamManager * param_mgr = LLWaterParamManager::instance(); 205 LLWaterParamManager * param_mgr = LLWaterParamManager::instance();
206 206
@@ -311,7 +311,7 @@ void LLFloaterWater::show()
311 water->syncMenu(); 311 water->syncMenu();
312 312
313 // comment in if you want the menu to rebuild each time 313 // comment in if you want the menu to rebuild each time
314 //gUICtrlFactory->buildFloater(water, "floater_water.xml"); 314 //LLUICtrlFactory::getInstance()->buildFloater(water, "floater_water.xml");
315 //water->initCallbacks(); 315 //water->initCallbacks();
316 316
317 water->open(); 317 water->open();
@@ -604,8 +604,7 @@ void LLFloaterWater::onNewPreset(void* userData)
604void LLFloaterWater::onSavePreset(void* userData) 604void LLFloaterWater::onSavePreset(void* userData)
605{ 605{
606 // get the name 606 // get the name
607 LLComboBox* comboBox = LLUICtrlFactory::getComboBoxByName(sWaterMenu, 607 LLComboBox* comboBox = sWaterMenu->getChild<LLComboBox>("WaterPresetsCombo");
608 "WaterPresetsCombo");
609 608
610 // don't save the empty name 609 // don't save the empty name
611 if(comboBox->getSelectedItemLabel() == "") 610 if(comboBox->getSelectedItemLabel() == "")
@@ -647,8 +646,7 @@ void LLFloaterWater::saveAlertCallback(S32 option, void* userdata)
647 646
648void LLFloaterWater::onDeletePreset(void* userData) 647void LLFloaterWater::onDeletePreset(void* userData)
649{ 648{
650 LLComboBox* combo_box = LLUICtrlFactory::getComboBoxByName(sWaterMenu, 649 LLComboBox* combo_box = sWaterMenu->getChild<LLComboBox>("WaterPresetsCombo");
651 "WaterPresetsCombo");
652 650
653 if(combo_box->getSelectedValue().asString() == "") 651 if(combo_box->getSelectedValue().asString() == "")
654 { 652 {
@@ -665,8 +663,7 @@ void LLFloaterWater::deleteAlertCallback(S32 option, void* userdata)
665 // if they choose delete, do it. Otherwise, don't do anything 663 // if they choose delete, do it. Otherwise, don't do anything
666 if(option == 0) 664 if(option == 0)
667 { 665 {
668 LLComboBox* combo_box = LLUICtrlFactory::getComboBoxByName(sWaterMenu, 666 LLComboBox* combo_box = sWaterMenu->getChild<LLComboBox>("WaterPresetsCombo");
669 "WaterPresetsCombo");
670 LLFloaterDayCycle* day_cycle = NULL; 667 LLFloaterDayCycle* day_cycle = NULL;
671 LLComboBox* key_combo = NULL; 668 LLComboBox* key_combo = NULL;
672 LLMultiSliderCtrl* mult_sldr = NULL; 669 LLMultiSliderCtrl* mult_sldr = NULL;
@@ -674,10 +671,8 @@ void LLFloaterWater::deleteAlertCallback(S32 option, void* userdata)
674 if(LLFloaterDayCycle::isOpen()) 671 if(LLFloaterDayCycle::isOpen())
675 { 672 {
676 day_cycle = LLFloaterDayCycle::instance(); 673 day_cycle = LLFloaterDayCycle::instance();
677 key_combo = LLUICtrlFactory::getComboBoxByName(day_cycle, 674 key_combo = day_cycle->getChild<LLComboBox>("WaterKeyPresets");
678 "WaterKeyPresets"); 675 mult_sldr = day_cycle->getChild<LLMultiSliderCtrl>("WaterDayCycleKeys");
679 mult_sldr = LLUICtrlFactory::getMultiSliderByName(day_cycle,
680 "WaterDayCycleKeys");
681 } 676 }
682 677
683 LLString name = combo_box->getSelectedValue().asString(); 678 LLString name = combo_box->getSelectedValue().asString();
diff --git a/linden/indra/newview/llfloaterwindlight.cpp b/linden/indra/newview/llfloaterwindlight.cpp
index 2321f5d..26e2184 100644
--- a/linden/indra/newview/llfloaterwindlight.cpp
+++ b/linden/indra/newview/llfloaterwindlight.cpp
@@ -41,7 +41,7 @@
41#include "llmultisliderctrl.h" 41#include "llmultisliderctrl.h"
42#include "llspinctrl.h" 42#include "llspinctrl.h"
43#include "llcheckboxctrl.h" 43#include "llcheckboxctrl.h"
44#include "llvieweruictrlfactory.h" 44#include "lluictrlfactory.h"
45#include "llviewercamera.h" 45#include "llviewercamera.h"
46#include "llcombobox.h" 46#include "llcombobox.h"
47#include "lllineeditor.h" 47#include "lllineeditor.h"
@@ -68,10 +68,10 @@ static const F32 WL_SUN_AMBIENT_SLIDER_SCALE = 3.0f;
68 68
69LLFloaterWindLight::LLFloaterWindLight() : LLFloater("windlight floater") 69LLFloaterWindLight::LLFloaterWindLight() : LLFloater("windlight floater")
70{ 70{
71 gUICtrlFactory->buildFloater(this, "floater_windlight_options.xml"); 71 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_windlight_options.xml");
72 72
73 // add the combo boxes 73 // add the combo boxes
74 LLComboBox* comboBox = LLUICtrlFactory::getComboBoxByName(this, "WLPresetsCombo"); 74 LLComboBox* comboBox = getChild<LLComboBox>("WLPresetsCombo");
75 75
76 if(comboBox != NULL) { 76 if(comboBox != NULL) {
77 77
@@ -214,7 +214,7 @@ void LLFloaterWindLight::initCallbacks(void) {
214 // WL Top 214 // WL Top
215 childSetAction("WLDayCycleMenuButton", onOpenDayCycle, NULL); 215 childSetAction("WLDayCycleMenuButton", onOpenDayCycle, NULL);
216 // Load/save 216 // Load/save
217 LLComboBox* comboBox = LLUICtrlFactory::getComboBoxByName(this, "WLPresetsCombo"); 217 LLComboBox* comboBox = getChild<LLComboBox>("WLPresetsCombo");
218 218
219 //childSetAction("WLLoadPreset", onLoadPreset, comboBox); 219 //childSetAction("WLLoadPreset", onLoadPreset, comboBox);
220 childSetAction("WLNewPreset", onNewPreset, comboBox); 220 childSetAction("WLNewPreset", onNewPreset, comboBox);
@@ -259,7 +259,7 @@ void LLFloaterWindLight::newPromptCallback(S32 option, const LLString& text, voi
259 } 259 }
260 260
261 if(option == 0) { 261 if(option == 0) {
262 LLComboBox* comboBox = LLUICtrlFactory::getComboBoxByName(sWindLight, 262 LLComboBox* comboBox = sWindLight->getChild<LLComboBox>(
263 "WLPresetsCombo"); 263 "WLPresetsCombo");
264 264
265 LLFloaterDayCycle* sDayCycle = NULL; 265 LLFloaterDayCycle* sDayCycle = NULL;
@@ -267,7 +267,7 @@ void LLFloaterWindLight::newPromptCallback(S32 option, const LLString& text, voi
267 if(LLFloaterDayCycle::isOpen()) 267 if(LLFloaterDayCycle::isOpen())
268 { 268 {
269 sDayCycle = LLFloaterDayCycle::instance(); 269 sDayCycle = LLFloaterDayCycle::instance();
270 keyCombo = LLUICtrlFactory::getComboBoxByName(sDayCycle, 270 keyCombo = sDayCycle->getChild<LLComboBox>(
271 "WLKeyPresets"); 271 "WLKeyPresets");
272 } 272 }
273 273
@@ -459,7 +459,7 @@ void LLFloaterWindLight::show()
459 windLight->syncMenu(); 459 windLight->syncMenu();
460 460
461 // comment in if you want the menu to rebuild each time 461 // comment in if you want the menu to rebuild each time
462 //gUICtrlFactory->buildFloater(windLight, "floater_windlight_options.xml"); 462 //LLUICtrlFactory::getInstance()->buildFloater(windLight, "floater_windlight_options.xml");
463 //windLight->initCallbacks(); 463 //windLight->initCallbacks();
464 464
465 windLight->open(); 465 windLight->open();
@@ -740,10 +740,8 @@ void LLFloaterWindLight::onSunMoved(LLUICtrl* ctrl, void* userData)
740{ 740{
741 deactivateAnimator(); 741 deactivateAnimator();
742 742
743 LLSliderCtrl* sunSldr = LLUICtrlFactory::getSliderByName(sWindLight, 743 LLSliderCtrl* sunSldr = sWindLight->getChild<LLSliderCtrl>("WLSunAngle");
744 "WLSunAngle"); 744 LLSliderCtrl* eastSldr = sWindLight->getChild<LLSliderCtrl>("WLEastAngle");
745 LLSliderCtrl* eastSldr = LLUICtrlFactory::getSliderByName(sWindLight,
746 "WLEastAngle");
747 745
748 WLColorControl * colorControl = static_cast<WLColorControl *>(userData); 746 WLColorControl * colorControl = static_cast<WLColorControl *>(userData);
749 747
@@ -794,7 +792,7 @@ void LLFloaterWindLight::onNewPreset(void* userData)
794void LLFloaterWindLight::onSavePreset(void* userData) 792void LLFloaterWindLight::onSavePreset(void* userData)
795{ 793{
796 // get the name 794 // get the name
797 LLComboBox* comboBox = LLUICtrlFactory::getComboBoxByName(sWindLight, 795 LLComboBox* comboBox = sWindLight->getChild<LLComboBox>(
798 "WLPresetsCombo"); 796 "WLPresetsCombo");
799 797
800 // don't save the empty name 798 // don't save the empty name
@@ -835,7 +833,7 @@ void LLFloaterWindLight::saveAlertCallback(S32 option, void* userdata)
835 833
836void LLFloaterWindLight::onDeletePreset(void* userData) 834void LLFloaterWindLight::onDeletePreset(void* userData)
837{ 835{
838 LLComboBox* combo_box = LLUICtrlFactory::getComboBoxByName(sWindLight, 836 LLComboBox* combo_box = sWindLight->getChild<LLComboBox>(
839 "WLPresetsCombo"); 837 "WLPresetsCombo");
840 838
841 if(combo_box->getSelectedValue().asString() == "") 839 if(combo_box->getSelectedValue().asString() == "")
@@ -853,7 +851,7 @@ void LLFloaterWindLight::deleteAlertCallback(S32 option, void* userdata)
853 // if they choose delete, do it. Otherwise, don't do anything 851 // if they choose delete, do it. Otherwise, don't do anything
854 if(option == 0) 852 if(option == 0)
855 { 853 {
856 LLComboBox* combo_box = LLUICtrlFactory::getComboBoxByName(sWindLight, 854 LLComboBox* combo_box = sWindLight->getChild<LLComboBox>(
857 "WLPresetsCombo"); 855 "WLPresetsCombo");
858 LLFloaterDayCycle* day_cycle = NULL; 856 LLFloaterDayCycle* day_cycle = NULL;
859 LLComboBox* key_combo = NULL; 857 LLComboBox* key_combo = NULL;
@@ -862,10 +860,9 @@ void LLFloaterWindLight::deleteAlertCallback(S32 option, void* userdata)
862 if(LLFloaterDayCycle::isOpen()) 860 if(LLFloaterDayCycle::isOpen())
863 { 861 {
864 day_cycle = LLFloaterDayCycle::instance(); 862 day_cycle = LLFloaterDayCycle::instance();
865 key_combo = LLUICtrlFactory::getComboBoxByName(day_cycle, 863 key_combo = day_cycle->getChild<LLComboBox>(
866 "WLKeyPresets"); 864 "WLKeyPresets");
867 mult_sldr = LLUICtrlFactory::getMultiSliderByName(day_cycle, 865 mult_sldr = day_cycle->getChild<LLMultiSliderCtrl>("WLDayCycleKeys");
868 "WLDayCycleKeys");
869 } 866 }
870 867
871 LLString name(combo_box->getSelectedValue().asString()); 868 LLString name(combo_box->getSelectedValue().asString());
@@ -956,7 +953,7 @@ void LLFloaterWindLight::onCloudScrollXToggled(LLUICtrl* ctrl, void* userData)
956 bool lock = cbCtrl->get(); 953 bool lock = cbCtrl->get();
957 LLWLParamManager::instance()->mCurParams.setEnableCloudScrollX(!lock); 954 LLWLParamManager::instance()->mCurParams.setEnableCloudScrollX(!lock);
958 955
959 LLSliderCtrl* sldr = LLUICtrlFactory::getSliderByName(sWindLight, 956 LLSliderCtrl* sldr = sWindLight->getChild<LLSliderCtrl>(
960 "WLCloudScrollX"); 957 "WLCloudScrollX");
961 958
962 if(cbCtrl->get()) 959 if(cbCtrl->get())
@@ -978,7 +975,7 @@ void LLFloaterWindLight::onCloudScrollYToggled(LLUICtrl* ctrl, void* userData)
978 bool lock = cbCtrl->get(); 975 bool lock = cbCtrl->get();
979 LLWLParamManager::instance()->mCurParams.setEnableCloudScrollY(!lock); 976 LLWLParamManager::instance()->mCurParams.setEnableCloudScrollY(!lock);
980 977
981 LLSliderCtrl* sldr = LLUICtrlFactory::getSliderByName(sWindLight, 978 LLSliderCtrl* sldr = sWindLight->getChild<LLSliderCtrl>(
982 "WLCloudScrollY"); 979 "WLCloudScrollY");
983 980
984 if(cbCtrl->get()) 981 if(cbCtrl->get())
diff --git a/linden/indra/newview/llfloaterworldmap.cpp b/linden/indra/newview/llfloaterworldmap.cpp
index 9ac3133..75fbff2 100644
--- a/linden/indra/newview/llfloaterworldmap.cpp
+++ b/linden/indra/newview/llfloaterworldmap.cpp
@@ -64,7 +64,7 @@
64#include "llviewerstats.h" 64#include "llviewerstats.h"
65#include "llworldmap.h" 65#include "llworldmap.h"
66#include "llworldmapview.h" 66#include "llworldmapview.h"
67#include "llvieweruictrlfactory.h" 67#include "lluictrlfactory.h"
68#include "llappviewer.h" 68#include "llappviewer.h"
69#include "llmapimagetype.h" 69#include "llmapimagetype.h"
70#include "llweb.h" 70#include "llweb.h"
@@ -165,7 +165,7 @@ LLFloaterWorldMap::LLFloaterWorldMap()
165 LLCallbackMap::map_t factory_map; 165 LLCallbackMap::map_t factory_map;
166 factory_map["objects_mapview"] = LLCallbackMap(createWorldMapView, NULL); 166 factory_map["objects_mapview"] = LLCallbackMap(createWorldMapView, NULL);
167 factory_map["terrain_mapview"] = LLCallbackMap(createWorldMapView, NULL); 167 factory_map["terrain_mapview"] = LLCallbackMap(createWorldMapView, NULL);
168 gUICtrlFactory->buildFloater(this, "floater_world_map.xml", &factory_map); 168 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_world_map.xml", &factory_map);
169} 169}
170 170
171// static 171// static
@@ -176,29 +176,34 @@ void* LLFloaterWorldMap::createWorldMapView(void* data)
176 176
177BOOL LLFloaterWorldMap::postBuild() 177BOOL LLFloaterWorldMap::postBuild()
178{ 178{
179 mTabs = LLUICtrlFactory::getTabContainerByName(this, "maptab"); 179 mTabs = getChild<LLTabContainer>("maptab");
180 if (!mTabs) return FALSE; 180 if (!mTabs) return FALSE;
181 181
182 LLPanel *panel; 182 LLPanel *panel;
183 183
184 panel = LLUICtrlFactory::getPanelByName(mTabs, "objects_mapview"); 184 panel = mTabs->getChild<LLPanel>("objects_mapview");
185 if (panel) 185 if (panel)
186 { 186 {
187 mTabs->setTabChangeCallback(panel, onCommitBackground); 187 mTabs->setTabChangeCallback(panel, onCommitBackground);
188 mTabs->setTabUserData(panel, this); 188 mTabs->setTabUserData(panel, this);
189 } 189 }
190 panel = LLUICtrlFactory::getPanelByName(mTabs, "terrain_mapview"); 190 panel = mTabs->getChild<LLPanel>("terrain_mapview");
191 if (panel) 191 if (panel)
192 { 192 {
193 mTabs->setTabChangeCallback(panel, onCommitBackground); 193 mTabs->setTabChangeCallback(panel, onCommitBackground);
194 mTabs->setTabUserData(panel, this); 194 mTabs->setTabUserData(panel, this);
195 } 195 }
196 196
197 onCommitBackground((void*)this, false); 197 // The following callback syncs the worlmap tabs with the images.
198 // Commented out since it was crashing when LLWorldMap became a singleton.
199 // We should be fine without it but override the onOpen method and put it
200 // there if it turns out to be needed. -MG
201 //
202 //onCommitBackground((void*)this, false);
198 203
199 childSetCommitCallback("friend combo", onAvatarComboCommit, this); 204 childSetCommitCallback("friend combo", onAvatarComboCommit, this);
200 205
201 LLComboBox *avatar_combo = LLUICtrlFactory::getComboBoxByName(this, "friend combo"); 206 LLComboBox *avatar_combo = getChild<LLComboBox>("friend combo");
202 if (avatar_combo) 207 if (avatar_combo)
203 { 208 {
204 avatar_combo->selectFirstItem(); 209 avatar_combo->selectFirstItem();
@@ -210,7 +215,7 @@ BOOL LLFloaterWorldMap::postBuild()
210 215
211 childSetFocusChangedCallback("location", onLocationFocusChanged, this); 216 childSetFocusChangedCallback("location", onLocationFocusChanged, this);
212 217
213 LLLineEditor *location_editor = LLUICtrlFactory::getLineEditorByName(this, "location"); 218 LLLineEditor *location_editor = getChild<LLLineEditor>("location");
214 if (location_editor) 219 if (location_editor)
215 { 220 {
216 location_editor->setKeystrokeCallback( onSearchTextEntry ); 221 location_editor->setKeystrokeCallback( onSearchTextEntry );
@@ -224,7 +229,7 @@ BOOL LLFloaterWorldMap::postBuild()
224 229
225 childSetCommitCallback("landmark combo", onLandmarkComboCommit, this); 230 childSetCommitCallback("landmark combo", onLandmarkComboCommit, this);
226 231
227 LLComboBox *landmark_combo = LLUICtrlFactory::getComboBoxByName(this, "landmark combo"); 232 LLComboBox *landmark_combo = getChild<LLComboBox>( "landmark combo");
228 if (landmark_combo) 233 if (landmark_combo)
229 { 234 {
230 landmark_combo->selectFirstItem(); 235 landmark_combo->selectFirstItem();
@@ -294,14 +299,14 @@ void LLFloaterWorldMap::show(void*, BOOL center_on_target)
294 map_panel->updateVisibleBlocks(); 299 map_panel->updateVisibleBlocks();
295 300
296 // Reload the agent positions when we show the window 301 // Reload the agent positions when we show the window
297 gWorldMap->eraseItems(); 302 LLWorldMap::getInstance()->eraseItems();
298 303
299 // Reload any maps that may have changed 304 // Reload any maps that may have changed
300 gWorldMap->clearSimFlags(); 305 LLWorldMap::getInstance()->clearSimFlags();
301 306
302 const S32 panel_num = gFloaterWorldMap->mTabs->getCurrentPanelIndex(); 307 const S32 panel_num = gFloaterWorldMap->mTabs->getCurrentPanelIndex();
303 const bool request_from_sim = true; 308 const bool request_from_sim = true;
304 gWorldMap->setCurrentLayer(panel_num, request_from_sim); 309 LLWorldMap::getInstance()->setCurrentLayer(panel_num, request_from_sim);
305 310
306 // We may already have a bounding box for the regions of the world, 311 // We may already have a bounding box for the regions of the world,
307 // so use that to adjust the view. 312 // so use that to adjust the view.
@@ -335,9 +340,9 @@ void LLFloaterWorldMap::show(void*, BOOL center_on_target)
335// static 340// static
336void LLFloaterWorldMap::reloadIcons(void*) 341void LLFloaterWorldMap::reloadIcons(void*)
337{ 342{
338 gWorldMap->eraseItems(); 343 LLWorldMap::getInstance()->eraseItems();
339 344
340 gWorldMap->sendMapLayerRequest(); 345 LLWorldMap::getInstance()->sendMapLayerRequest();
341} 346}
342 347
343 348
@@ -376,10 +381,7 @@ void LLFloaterWorldMap::setVisible( BOOL visible )
376 if( !visible ) 381 if( !visible )
377 { 382 {
378 // While we're not visible, discard the overlay images we're using 383 // While we're not visible, discard the overlay images we're using
379 if (gWorldMap) 384 LLWorldMap::getInstance()->clearImageRefs();
380 {
381 gWorldMap->clearImageRefs();
382 }
383 } 385 }
384} 386}
385 387
@@ -394,7 +396,7 @@ BOOL LLFloaterWorldMap::handleHover(S32 x, S32 y, MASK mask)
394 396
395BOOL LLFloaterWorldMap::handleScrollWheel(S32 x, S32 y, S32 clicks) 397BOOL LLFloaterWorldMap::handleScrollWheel(S32 x, S32 y, S32 clicks)
396{ 398{
397 if (getVisible() && !isMinimized() && isFrontmost()) 399 if (!isMinimized() && isFrontmost())
398 { 400 {
399 F32 slider_value = (F32)childGetValue("zoom slider").asReal(); 401 F32 slider_value = (F32)childGetValue("zoom slider").asReal();
400 slider_value += ((F32)clicks * -0.3333f); 402 slider_value += ((F32)clicks * -0.3333f);
@@ -421,11 +423,6 @@ void LLFloaterWorldMap::reshape( S32 width, S32 height, BOOL called_from_parent
421// virtual 423// virtual
422void LLFloaterWorldMap::draw() 424void LLFloaterWorldMap::draw()
423{ 425{
424 if( !getVisible() )
425 {
426 return;
427 }
428
429 // Hide/Show Mature Events controls 426 // Hide/Show Mature Events controls
430 childSetVisible("events_mature_icon", !gAgent.isTeen()); 427 childSetVisible("events_mature_icon", !gAgent.isTeen());
431 childSetVisible("events_mature_label", !gAgent.isTeen()); 428 childSetVisible("events_mature_label", !gAgent.isTeen());
@@ -488,7 +485,7 @@ void LLFloaterWorldMap::draw()
488 485
489 childSetEnabled("Teleport", (BOOL)tracking_status); 486 childSetEnabled("Teleport", (BOOL)tracking_status);
490// childSetEnabled("Clear", (BOOL)tracking_status); 487// childSetEnabled("Clear", (BOOL)tracking_status);
491 childSetEnabled("Show Destination", (BOOL)tracking_status || gWorldMap->mIsTrackingUnknownLocation); 488 childSetEnabled("Show Destination", (BOOL)tracking_status || LLWorldMap::getInstance()->mIsTrackingUnknownLocation);
492 childSetEnabled("copy_slurl", (mSLURL.size() > 0) ); 489 childSetEnabled("copy_slurl", (mSLURL.size() > 0) );
493 490
494 setMouseOpaque(TRUE); 491 setMouseOpaque(TRUE);
@@ -569,7 +566,7 @@ void LLFloaterWorldMap::trackLandmark( const LLUUID& landmark_item_id )
569 { 566 {
570 LLUUID asset_id = mLandmarkAssetIDList.get( idx ); 567 LLUUID asset_id = mLandmarkAssetIDList.get( idx );
571 LLString name; 568 LLString name;
572 LLComboBox* combo = LLUICtrlFactory::getComboBoxByName(this, "landmark combo"); 569 LLComboBox* combo = getChild<LLComboBox>( "landmark combo");
573 if (combo) name = combo->getSimple(); 570 if (combo) name = combo->getSimple();
574 mTrackedStatus = LLTracker::TRACKING_LANDMARK; 571 mTrackedStatus = LLTracker::TRACKING_LANDMARK;
575 LLTracker::trackLandmark(mLandmarkAssetIDList.get( idx ), // assetID 572 LLTracker::trackLandmark(mLandmarkAssetIDList.get( idx ), // assetID
@@ -609,32 +606,32 @@ void LLFloaterWorldMap::trackGenericItem(const LLItemInfo &item)
609 606
610void LLFloaterWorldMap::trackLocation(const LLVector3d& pos_global) 607void LLFloaterWorldMap::trackLocation(const LLVector3d& pos_global)
611{ 608{
612 LLSimInfo* sim_info = gWorldMap->simInfoFromPosGlobal(pos_global); 609 LLSimInfo* sim_info = LLWorldMap::getInstance()->simInfoFromPosGlobal(pos_global);
613 if (!sim_info) 610 if (!sim_info)
614 { 611 {
615 gWorldMap->mIsTrackingUnknownLocation = TRUE; 612 LLWorldMap::getInstance()->mIsTrackingUnknownLocation = TRUE;
616 gWorldMap->mInvalidLocation = FALSE; 613 LLWorldMap::getInstance()->mInvalidLocation = FALSE;
617 gWorldMap->mUnknownLocation = pos_global; 614 LLWorldMap::getInstance()->mUnknownLocation = pos_global;
618 LLTracker::stopTracking(NULL); 615 LLTracker::stopTracking(NULL);
619 S32 world_x = S32(pos_global.mdV[0] / 256); 616 S32 world_x = S32(pos_global.mdV[0] / 256);
620 S32 world_y = S32(pos_global.mdV[1] / 256); 617 S32 world_y = S32(pos_global.mdV[1] / 256);
621 gWorldMap->sendMapBlockRequest(world_x, world_y, world_x, world_y, true); 618 LLWorldMap::getInstance()->sendMapBlockRequest(world_x, world_y, world_x, world_y, true);
622 setDefaultBtn(""); 619 setDefaultBtn("");
623 return; 620 return;
624 } 621 }
625 if (sim_info->mAccess == SIM_ACCESS_DOWN) 622 if (sim_info->mAccess == SIM_ACCESS_DOWN)
626 { 623 {
627 // Down sim. Show the blue circle of death! 624 // Down sim. Show the blue circle of death!
628 gWorldMap->mIsTrackingUnknownLocation = TRUE; 625 LLWorldMap::getInstance()->mIsTrackingUnknownLocation = TRUE;
629 gWorldMap->mUnknownLocation = pos_global; 626 LLWorldMap::getInstance()->mUnknownLocation = pos_global;
630 gWorldMap->mInvalidLocation = TRUE; 627 LLWorldMap::getInstance()->mInvalidLocation = TRUE;
631 LLTracker::stopTracking(NULL); 628 LLTracker::stopTracking(NULL);
632 setDefaultBtn(""); 629 setDefaultBtn("");
633 return; 630 return;
634 } 631 }
635 632
636 LLString sim_name; 633 LLString sim_name;
637 gWorldMap->simNameFromPosGlobal( pos_global, sim_name ); 634 LLWorldMap::getInstance()->simNameFromPosGlobal( pos_global, sim_name );
638 F32 region_x = (F32)fmod( pos_global.mdV[VX], (F64)REGION_WIDTH_METERS ); 635 F32 region_x = (F32)fmod( pos_global.mdV[VX], (F64)REGION_WIDTH_METERS );
639 F32 region_y = (F32)fmod( pos_global.mdV[VY], (F64)REGION_WIDTH_METERS ); 636 F32 region_y = (F32)fmod( pos_global.mdV[VY], (F64)REGION_WIDTH_METERS );
640 LLString full_name = llformat("%s (%d, %d, %d)", 637 LLString full_name = llformat("%s (%d, %d, %d)",
@@ -646,9 +643,9 @@ void LLFloaterWorldMap::trackLocation(const LLVector3d& pos_global)
646 LLString tooltip(""); 643 LLString tooltip("");
647 mTrackedStatus = LLTracker::TRACKING_LOCATION; 644 mTrackedStatus = LLTracker::TRACKING_LOCATION;
648 LLTracker::trackLocation(pos_global, full_name, tooltip); 645 LLTracker::trackLocation(pos_global, full_name, tooltip);
649 gWorldMap->mIsTrackingUnknownLocation = FALSE; 646 LLWorldMap::getInstance()->mIsTrackingUnknownLocation = FALSE;
650 gWorldMap->mIsTrackingDoubleClick = FALSE; 647 LLWorldMap::getInstance()->mIsTrackingDoubleClick = FALSE;
651 gWorldMap->mIsTrackingCommit = FALSE; 648 LLWorldMap::getInstance()->mIsTrackingCommit = FALSE;
652 649
653 setDefaultBtn("Teleport"); 650 setDefaultBtn("Teleport");
654} 651}
@@ -671,7 +668,7 @@ void LLFloaterWorldMap::updateLocation()
671 { 668 {
672 // Make sure we know where we are before setting the current user position 669 // Make sure we know where we are before setting the current user position
673 LLString agent_sim_name; 670 LLString agent_sim_name;
674 gotSimName = gWorldMap->simNameFromPosGlobal( agentPos, agent_sim_name ); 671 gotSimName = LLWorldMap::getInstance()->simNameFromPosGlobal( agentPos, agent_sim_name );
675 if ( gotSimName ) 672 if ( gotSimName )
676 { 673 {
677 mSetToUserPosition = FALSE; 674 mSetToUserPosition = FALSE;
@@ -698,7 +695,7 @@ void LLFloaterWorldMap::updateLocation()
698 return; // invalid location 695 return; // invalid location
699 } 696 }
700 LLString sim_name; 697 LLString sim_name;
701 gotSimName = gWorldMap->simNameFromPosGlobal( pos_global, sim_name ); 698 gotSimName = LLWorldMap::getInstance()->simNameFromPosGlobal( pos_global, sim_name );
702 if ((status != LLTracker::TRACKING_NOTHING) && 699 if ((status != LLTracker::TRACKING_NOTHING) &&
703 (status != mTrackedStatus || pos_global != mTrackedLocation || sim_name != mTrackedSimName)) 700 (status != mTrackedStatus || pos_global != mTrackedLocation || sim_name != mTrackedSimName))
704 { 701 {
@@ -739,7 +736,7 @@ void LLFloaterWorldMap::updateLocation()
739 736
740void LLFloaterWorldMap::trackURL(const LLString& region_name, S32 x_coord, S32 y_coord, S32 z_coord) 737void LLFloaterWorldMap::trackURL(const LLString& region_name, S32 x_coord, S32 y_coord, S32 z_coord)
741{ 738{
742 LLSimInfo* sim_info = gWorldMap->simInfoFromName(region_name); 739 LLSimInfo* sim_info = LLWorldMap::getInstance()->simInfoFromName(region_name);
743 z_coord = llclamp(z_coord, 0, 1000); 740 z_coord = llclamp(z_coord, 0, 1000);
744 if (sim_info) 741 if (sim_info)
745 { 742 {
@@ -761,9 +758,9 @@ void LLFloaterWorldMap::trackURL(const LLString& region_name, S32 x_coord, S32 y
761 758
762 // pass sim name to combo box 759 // pass sim name to combo box
763 gFloaterWorldMap->mCompletingRegionName = region_name; 760 gFloaterWorldMap->mCompletingRegionName = region_name;
764 gWorldMap->sendNamedRegionRequest(region_name); 761 LLWorldMap::getInstance()->sendNamedRegionRequest(region_name);
765 LLString::toLower(gFloaterWorldMap->mCompletingRegionName); 762 LLString::toLower(gFloaterWorldMap->mCompletingRegionName);
766 gWorldMap->mIsTrackingCommit = TRUE; 763 LLWorldMap::getInstance()->mIsTrackingCommit = TRUE;
767 } 764 }
768} 765}
769 766
@@ -826,17 +823,15 @@ void LLFloaterWorldMap::friendsChanged()
826void LLFloaterWorldMap::buildAvatarIDList() 823void LLFloaterWorldMap::buildAvatarIDList()
827{ 824{
828 LLCtrlListInterface *list = childGetListInterface("friend combo"); 825 LLCtrlListInterface *list = childGetListInterface("friend combo");
829 if (!list) 826 if (!list) return;
830 { 827
831 return;
832 }
833
834 // Delete all but the "None" entry 828 // Delete all but the "None" entry
835 S32 list_size = list->getItemCount(); 829 S32 list_size = list->getItemCount();
836 if (list_size > 1) 830 while (list_size > 1)
837 { 831 {
838 list->selectItemRange(1, -1); 832 list->selectNthItem(1);
839 list->operateOnSelection(LLCtrlListInterface::OP_DELETE); 833 list->operateOnSelection(LLCtrlListInterface::OP_DELETE);
834 --list_size;
840 } 835 }
841 836
842 LLSD default_column; 837 LLSD default_column;
@@ -848,9 +843,11 @@ void LLFloaterWorldMap::buildAvatarIDList()
848 // Get all of the calling cards for avatar that are currently online 843 // Get all of the calling cards for avatar that are currently online
849 LLCollectMappableBuddies collector; 844 LLCollectMappableBuddies collector;
850 LLAvatarTracker::instance().applyFunctor(collector); 845 LLAvatarTracker::instance().applyFunctor(collector);
851 846 LLCollectMappableBuddies::buddy_map_t::iterator it;
852 for (LLCollectMappableBuddies::buddy_map_t::iterator it = collector.mMappable.begin(); 847 LLCollectMappableBuddies::buddy_map_t::iterator end;
853 it != collector.mMappable.end(); ++it) 848 it = collector.mMappable.begin();
849 end = collector.mMappable.end();
850 for( ; it != end; ++it)
854 { 851 {
855 list->addSimpleElement((*it).first, ADD_BOTTOM, (*it).second); 852 list->addSimpleElement((*it).first, ADD_BOTTOM, (*it).second);
856 } 853 }
@@ -945,7 +942,7 @@ void LLFloaterWorldMap::clearLocationSelection(BOOL clear_ui)
945 { 942 {
946 childSetValue("spin z", 0); 943 childSetValue("spin z", 0);
947 } 944 }
948 gWorldMap->mIsTrackingCommit = FALSE; 945 LLWorldMap::getInstance()->mIsTrackingCommit = FALSE;
949 mCompletingRegionName = ""; 946 mCompletingRegionName = "";
950 mExactMatch = FALSE; 947 mExactMatch = FALSE;
951} 948}
@@ -983,8 +980,8 @@ void LLFloaterWorldMap::clearAvatarSelection(BOOL clear_ui)
983void LLFloaterWorldMap::adjustZoomSliderBounds() 980void LLFloaterWorldMap::adjustZoomSliderBounds()
984{ 981{
985 // World size in regions 982 // World size in regions
986 S32 world_width_regions = gWorldMap->getWorldWidth() / REGION_WIDTH_UNITS; 983 S32 world_width_regions = LLWorldMap::getInstance()->getWorldWidth() / REGION_WIDTH_UNITS;
987 S32 world_height_regions = gWorldMap->getWorldHeight() / REGION_WIDTH_UNITS; 984 S32 world_height_regions = LLWorldMap::getInstance()->getWorldHeight() / REGION_WIDTH_UNITS;
988 985
989 // Pad the world size a little bit, so we have a nice border on 986 // Pad the world size a little bit, so we have a nice border on
990 // the edge 987 // the edge
@@ -1186,7 +1183,7 @@ void LLFloaterWorldMap::onAvatarComboCommit( LLUICtrl* ctrl, void* userdata )
1186 if (new_avatar_id.notNull()) 1183 if (new_avatar_id.notNull())
1187 { 1184 {
1188 LLString name; 1185 LLString name;
1189 LLComboBox* combo = LLUICtrlFactory::getComboBoxByName(gFloaterWorldMap, "friend combo"); 1186 LLComboBox* combo = gFloaterWorldMap->getChild<LLComboBox>("friend combo");
1190 if (combo) name = combo->getSimple(); 1187 if (combo) name = combo->getSimple();
1191 self->trackAvatar(new_avatar_id, name); 1188 self->trackAvatar(new_avatar_id, name);
1192 onShowTargetBtn(self); 1189 onShowTargetBtn(self);
@@ -1243,16 +1240,16 @@ void LLFloaterWorldMap::onLocationCommit( void* userdata )
1243 1240
1244 LLString::toLower(str); 1241 LLString::toLower(str);
1245 gFloaterWorldMap->mCompletingRegionName = str; 1242 gFloaterWorldMap->mCompletingRegionName = str;
1246 gWorldMap->mIsTrackingCommit = TRUE; 1243 LLWorldMap::getInstance()->mIsTrackingCommit = TRUE;
1247 self->mExactMatch = FALSE; 1244 self->mExactMatch = FALSE;
1248 if (str.length() >= 3) 1245 if (str.length() >= 3)
1249 { 1246 {
1250 gWorldMap->sendNamedRegionRequest(str); 1247 LLWorldMap::getInstance()->sendNamedRegionRequest(str);
1251 } 1248 }
1252 else 1249 else
1253 { 1250 {
1254 str += "#"; 1251 str += "#";
1255 gWorldMap->sendNamedRegionRequest(str); 1252 LLWorldMap::getInstance()->sendNamedRegionRequest(str);
1256 } 1253 }
1257} 1254}
1258 1255
@@ -1263,7 +1260,7 @@ void LLFloaterWorldMap::onClearBtn(void* data)
1263 LLFloaterWorldMap* self = (LLFloaterWorldMap*)data; 1260 LLFloaterWorldMap* self = (LLFloaterWorldMap*)data;
1264 self->mTrackedStatus = LLTracker::TRACKING_NOTHING; 1261 self->mTrackedStatus = LLTracker::TRACKING_NOTHING;
1265 LLTracker::stopTracking((void *)(intptr_t)TRUE); 1262 LLTracker::stopTracking((void *)(intptr_t)TRUE);
1266 gWorldMap->mIsTrackingUnknownLocation = FALSE; 1263 LLWorldMap::getInstance()->mIsTrackingUnknownLocation = FALSE;
1267 self->mSLURL = ""; // Clear the SLURL since it's invalid 1264 self->mSLURL = ""; // Clear the SLURL since it's invalid
1268 self->mSetToUserPosition = TRUE; // Revert back to the current user position 1265 self->mSetToUserPosition = TRUE; // Revert back to the current user position
1269} 1266}
@@ -1337,9 +1334,9 @@ void LLFloaterWorldMap::centerOnTarget(BOOL animate)
1337 pos_global = LLTracker::getTrackedPositionGlobal() - gAgent.getCameraPositionGlobal(); 1334 pos_global = LLTracker::getTrackedPositionGlobal() - gAgent.getCameraPositionGlobal();
1338 } 1335 }
1339 } 1336 }
1340 else if(gWorldMap->mIsTrackingUnknownLocation) 1337 else if(LLWorldMap::getInstance()->mIsTrackingUnknownLocation)
1341 { 1338 {
1342 pos_global = gWorldMap->mUnknownLocation - gAgent.getCameraPositionGlobal();; 1339 pos_global = LLWorldMap::getInstance()->mUnknownLocation - gAgent.getCameraPositionGlobal();;
1343 } 1340 }
1344 else 1341 else
1345 { 1342 {
@@ -1532,10 +1529,7 @@ void LLFloaterWorldMap::onCommitBackground(void* userdata, bool from_click)
1532 // Find my index 1529 // Find my index
1533 S32 index = self->mTabs->getCurrentPanelIndex(); 1530 S32 index = self->mTabs->getCurrentPanelIndex();
1534 1531
1535 if (gWorldMap) 1532 LLWorldMap::getInstance()->setCurrentLayer(index);
1536 {
1537 gWorldMap->setCurrentLayer(index);
1538 }
1539} 1533}
1540 1534
1541void LLFloaterWorldMap::updateSims(bool found_null_sim) 1535void LLFloaterWorldMap::updateSims(bool found_null_sim)
@@ -1545,8 +1539,7 @@ void LLFloaterWorldMap::updateSims(bool found_null_sim)
1545 return; 1539 return;
1546 } 1540 }
1547 1541
1548 LLScrollListCtrl *list = gUICtrlFactory->getScrollListByName(this, "search_results"); 1542 LLScrollListCtrl *list = getChild<LLScrollListCtrl>("search_results");
1549 if (!list) return;
1550 list->operateOnAll(LLCtrlListInterface::OP_DELETE); 1543 list->operateOnAll(LLCtrlListInterface::OP_DELETE);
1551 1544
1552 LLSD selected_value = list->getSelectedValue(); 1545 LLSD selected_value = list->getSelectedValue();
@@ -1556,7 +1549,7 @@ void LLFloaterWorldMap::updateSims(bool found_null_sim)
1556 BOOL match_found = FALSE; 1549 BOOL match_found = FALSE;
1557 S32 num_results = 0; 1550 S32 num_results = 0;
1558 std::map<U64, LLSimInfo*>::const_iterator it; 1551 std::map<U64, LLSimInfo*>::const_iterator it;
1559 for (it = gWorldMap->mSimInfoMap.begin(); it != gWorldMap->mSimInfoMap.end(); ++it) 1552 for (it = LLWorldMap::getInstance()->mSimInfoMap.begin(); it != LLWorldMap::getInstance()->mSimInfoMap.end(); ++it)
1560 { 1553 {
1561 LLSimInfo* info = (*it).second; 1554 LLSimInfo* info = (*it).second;
1562 LLString sim_name = info->mName; 1555 LLString sim_name = info->mName;
@@ -1565,7 +1558,7 @@ void LLFloaterWorldMap::updateSims(bool found_null_sim)
1565 1558
1566 if (sim_name_lower.substr(0, name_length) == mCompletingRegionName) 1559 if (sim_name_lower.substr(0, name_length) == mCompletingRegionName)
1567 { 1560 {
1568 if (gWorldMap->mIsTrackingCommit) 1561 if (LLWorldMap::getInstance()->mIsTrackingCommit)
1569 { 1562 {
1570 if (sim_name_lower == mCompletingRegionName) 1563 if (sim_name_lower == mCompletingRegionName)
1571 { 1564 {
@@ -1644,7 +1637,7 @@ void LLFloaterWorldMap::onCommitSearchResult(LLUICtrl*, void* userdata)
1644 LLString::toLower(sim_name); 1637 LLString::toLower(sim_name);
1645 1638
1646 std::map<U64, LLSimInfo*>::const_iterator it; 1639 std::map<U64, LLSimInfo*>::const_iterator it;
1647 for (it = gWorldMap->mSimInfoMap.begin(); it != gWorldMap->mSimInfoMap.end(); ++it) 1640 for (it = LLWorldMap::getInstance()->mSimInfoMap.begin(); it != LLWorldMap::getInstance()->mSimInfoMap.end(); ++it)
1648 { 1641 {
1649 LLSimInfo* info = (*it).second; 1642 LLSimInfo* info = (*it).second;
1650 LLString info_sim_name = info->mName; 1643 LLString info_sim_name = info->mName;
diff --git a/linden/indra/newview/llfolderview.cpp b/linden/indra/newview/llfolderview.cpp
index 9c59c7b..49ca5e4 100644
--- a/linden/indra/newview/llfolderview.cpp
+++ b/linden/indra/newview/llfolderview.cpp
@@ -58,7 +58,7 @@
58#include "llviewerimagelist.h" 58#include "llviewerimagelist.h"
59#include "llviewerjointattachment.h" 59#include "llviewerjointattachment.h"
60#include "llviewermenu.h" 60#include "llviewermenu.h"
61#include "llvieweruictrlfactory.h" 61#include "lluictrlfactory.h"
62#include "llviewerwindow.h" 62#include "llviewerwindow.h"
63#include "llvoavatar.h" 63#include "llvoavatar.h"
64#include "llfloaterproperties.h" 64#include "llfloaterproperties.h"
@@ -114,10 +114,11 @@ LLColor4 LLFolderViewItem::sHighlightBgColor;
114LLColor4 LLFolderViewItem::sHighlightFgColor; 114LLColor4 LLFolderViewItem::sHighlightFgColor;
115LLColor4 LLFolderViewItem::sFilterBGColor; 115LLColor4 LLFolderViewItem::sFilterBGColor;
116LLColor4 LLFolderViewItem::sFilterTextColor; 116LLColor4 LLFolderViewItem::sFilterTextColor;
117LLColor4 LLFolderViewItem::sLoadingMessageTextColor; 117LLColor4 LLFolderViewItem::sSuffixColor;
118LLColor4 LLFolderViewItem::sSearchStatusColor;
118 119
119// Default constructor 120// Default constructor
120LLFolderViewItem::LLFolderViewItem( const LLString& name, LLViewerImage* icon, 121LLFolderViewItem::LLFolderViewItem( const LLString& name, LLUIImagePtr icon,
121 S32 creation_date, 122 S32 creation_date,
122 LLFolderView* root, 123 LLFolderView* root,
123 LLFolderViewEventListener* listener ) : 124 LLFolderViewEventListener* listener ) :
@@ -145,12 +146,12 @@ LLFolderViewItem::LLFolderViewItem( const LLString& name, LLViewerImage* icon,
145 setIcon(icon); 146 setIcon(icon);
146 if( !LLFolderViewItem::sFont ) 147 if( !LLFolderViewItem::sFont )
147 { 148 {
148 LLFolderViewItem::sFont = gResMgr->getRes( LLFONT_SANSSERIF_SMALL ); 149 LLFolderViewItem::sFont = LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF_SMALL );
149 } 150 }
150 151
151 if (!LLFolderViewItem::sSmallFont) 152 if (!LLFolderViewItem::sSmallFont)
152 { 153 {
153 LLFolderViewItem::sSmallFont = gResMgr->getRes( LLFONT_SMALL ); 154 LLFolderViewItem::sSmallFont = LLResMgr::getInstance()->getRes( LLFONT_SMALL );
154 } 155 }
155 156
156 // HACK: Can't be set above because gSavedSettings might not be constructed. 157 // HACK: Can't be set above because gSavedSettings might not be constructed.
@@ -159,10 +160,12 @@ LLFolderViewItem::LLFolderViewItem( const LLString& name, LLViewerImage* icon,
159 LLFolderViewItem::sHighlightFgColor = gColors.getColor( "MenuItemHighlightFgColor" ); 160 LLFolderViewItem::sHighlightFgColor = gColors.getColor( "MenuItemHighlightFgColor" );
160 LLFolderViewItem::sFilterBGColor = gColors.getColor( "FilterBackgroundColor" ); 161 LLFolderViewItem::sFilterBGColor = gColors.getColor( "FilterBackgroundColor" );
161 LLFolderViewItem::sFilterTextColor = gColors.getColor( "FilterTextColor" ); 162 LLFolderViewItem::sFilterTextColor = gColors.getColor( "FilterTextColor" );
162 LLFolderViewItem::sLoadingMessageTextColor = gColors.getColor( "FolderViewLoadingMessageTextColor" ); 163 LLFolderViewItem::sSuffixColor = gColors.getColor( "InventoryItemSuffixColor" );
164 LLFolderViewItem::sSearchStatusColor = gColors.getColor( "InventorySearchStatusColor" );
163 165
164 mArrowImage = gImageList.getImage(LLUUID(gViewerArt.getString("folder_arrow.tga")), MIPMAP_FALSE, TRUE); 166
165 mBoxImage = gImageList.getImage(LLUUID(gViewerArt.getString("rounded_square.tga")), MIPMAP_FALSE, TRUE); 167 mArrowImage = LLUI::getUIImage("folder_arrow.tga");
168 mBoxImage = LLUI::getUIImage("rounded_square.tga");
166 169
167 refresh(); 170 refresh();
168 setTabStop(FALSE); 171 setTabStop(FALSE);
@@ -267,13 +270,9 @@ void LLFolderViewItem::setFiltered(BOOL filtered, S32 filter_generation)
267 mLastFilterGeneration = filter_generation; 270 mLastFilterGeneration = filter_generation;
268} 271}
269 272
270void LLFolderViewItem::setIcon(LLViewerImage* icon) 273void LLFolderViewItem::setIcon(LLUIImagePtr icon)
271{ 274{
272 mIcon = icon; 275 mIcon = icon;
273 if (mIcon)
274 {
275 mIcon->setBoostLevel(LLViewerImage::BOOST_UI);
276 }
277} 276}
278 277
279// refresh information from the listener 278// refresh information from the listener
@@ -369,16 +368,6 @@ void LLFolderViewItem::extendSelectionFromRoot(LLFolderViewItem* selection)
369 getRoot()->extendSelection(selection, NULL, selected_items); 368 getRoot()->extendSelection(selection, NULL, selected_items);
370} 369}
371 370
372EWidgetType LLFolderViewItem::getWidgetType() const
373{
374 return WIDGET_TYPE_FOLDER_ITEM;
375}
376
377LLString LLFolderViewItem::getWidgetTag() const
378{
379 return LL_FOLDER_VIEW_ITEM_TAG;
380}
381
382EInventorySortGroup LLFolderViewItem::getSortGroup() 371EInventorySortGroup LLFolderViewItem::getSortGroup()
383{ 372{
384 return SG_ITEM; 373 return SG_ITEM;
@@ -649,7 +638,7 @@ BOOL LLFolderViewItem::handleMouseDown( S32 x, S32 y, MASK mask )
649 S32 screen_x; 638 S32 screen_x;
650 S32 screen_y; 639 S32 screen_y;
651 localPointToScreen(x, y, &screen_x, &screen_y ); 640 localPointToScreen(x, y, &screen_x, &screen_y );
652 gToolDragAndDrop->setDragStart( screen_x, screen_y ); 641 LLToolDragAndDrop::getInstance()->setDragStart( screen_x, screen_y );
653 } 642 }
654 return TRUE; 643 return TRUE;
655} 644}
@@ -662,7 +651,7 @@ BOOL LLFolderViewItem::handleHover( S32 x, S32 y, MASK mask )
662 S32 screen_y; 651 S32 screen_y;
663 localPointToScreen(x, y, &screen_x, &screen_y ); 652 localPointToScreen(x, y, &screen_x, &screen_y );
664 BOOL can_drag = TRUE; 653 BOOL can_drag = TRUE;
665 if( gToolDragAndDrop->isOverThreshold( screen_x, screen_y ) ) 654 if( LLToolDragAndDrop::getInstance()->isOverThreshold( screen_x, screen_y ) )
666 { 655 {
667 LLFolderView* root = getRoot(); 656 LLFolderView* root = getRoot();
668 657
@@ -694,7 +683,7 @@ BOOL LLFolderViewItem::handleHover( S32 x, S32 y, MASK mask )
694 // item. 683 // item.
695 gViewerWindow->setKeyboardFocus(NULL); 684 gViewerWindow->setKeyboardFocus(NULL);
696 685
697 return gToolDragAndDrop->handleHover( x, y, mask ); 686 return LLToolDragAndDrop::getInstance()->handleHover( x, y, mask );
698 } 687 }
699 } 688 }
700 } 689 }
@@ -813,7 +802,7 @@ void LLFolderViewItem::draw()
813 if (mArrowImage) 802 if (mArrowImage)
814 { 803 {
815 gl_draw_scaled_rotated_image(mIndentation, getRect().getHeight() - ARROW_SIZE - TEXT_PAD, 804 gl_draw_scaled_rotated_image(mIndentation, getRect().getHeight() - ARROW_SIZE - TEXT_PAD,
816 ARROW_SIZE, ARROW_SIZE, mControlLabelRotation, mArrowImage, sFgColor); 805 ARROW_SIZE, ARROW_SIZE, mControlLabelRotation, mArrowImage->getImage(), sFgColor);
817 } 806 }
818 } 807 }
819 808
@@ -905,8 +894,7 @@ void LLFolderViewItem::draw()
905 894
906 if(mIcon) 895 if(mIcon)
907 { 896 {
908 gl_draw_image(mIndentation + ARROW_SIZE + TEXT_PAD, getRect().getHeight() - mIcon->getHeight(), mIcon); 897 mIcon->draw(mIndentation + ARROW_SIZE + TEXT_PAD, getRect().getHeight() - mIcon->getHeight());
909 mIcon->addTextureStats( (F32)(mIcon->getWidth() * mIcon->getHeight()));
910 } 898 }
911 899
912 if (!mLabel.empty()) 900 if (!mLabel.empty())
@@ -934,7 +922,7 @@ void LLFolderViewItem::draw()
934 922
935 if ( mIsLoading && mTimeSinceRequestStart.getElapsedTimeF32() >= gSavedSettings.getF32("FolderLoadingMessageWaitTime") ) 923 if ( mIsLoading && mTimeSinceRequestStart.getElapsedTimeF32() >= gSavedSettings.getF32("FolderLoadingMessageWaitTime") )
936 { 924 {
937 sFont->renderUTF8( "Loading... ", 0, text_left, y, sLoadingMessageTextColor, 925 sFont->renderUTF8( "Loading... ", 0, text_left, y, sSearchStatusColor,
938 LLFontGL::LEFT, LLFontGL::BOTTOM, mLabelStyle, S32_MAX, S32_MAX, &right_x, FALSE); 926 LLFontGL::LEFT, LLFontGL::BOTTOM, mLabelStyle, S32_MAX, S32_MAX, &right_x, FALSE);
939 text_left = right_x; 927 text_left = right_x;
940 } 928 }
@@ -944,7 +932,7 @@ void LLFolderViewItem::draw()
944 S32_MAX, S32_MAX, &right_x, FALSE ); 932 S32_MAX, S32_MAX, &right_x, FALSE );
945 if (!mLabelSuffix.empty()) 933 if (!mLabelSuffix.empty())
946 { 934 {
947 sFont->renderUTF8( mLabelSuffix, 0, right_x, y, LLColor4(0.75f, 0.85f, 0.85f, 1.f), 935 sFont->renderUTF8( mLabelSuffix, 0, right_x, y, sSuffixColor,
948 LLFontGL::LEFT, LLFontGL::BOTTOM, mLabelStyle, 936 LLFontGL::LEFT, LLFontGL::BOTTOM, mLabelStyle,
949 S32_MAX, S32_MAX, &right_x, FALSE ); 937 S32_MAX, S32_MAX, &right_x, FALSE );
950 } 938 }
@@ -961,9 +949,8 @@ void LLFolderViewItem::draw()
961 S32 bottom = llfloor(getRect().getHeight() - sFont->getLineHeight() - 3); 949 S32 bottom = llfloor(getRect().getHeight() - sFont->getLineHeight() - 3);
962 S32 top = getRect().getHeight(); 950 S32 top = getRect().getHeight();
963 951
964 LLViewerImage::bindTexture(mBoxImage); 952 LLRect box_rect(left, top, right, bottom);
965 gGL.color4fv(sFilterBGColor.mV); 953 mBoxImage->draw(box_rect, sFilterBGColor);
966 gl_segmented_rect_2d_tex(left, top, right, bottom, mBoxImage->getWidth(), mBoxImage->getHeight(), 16);
967 F32 match_string_left = text_left + sFont->getWidthF32(combined_string, 0, mStringMatchOffset); 954 F32 match_string_left = text_left + sFont->getWidthF32(combined_string, 0, mStringMatchOffset);
968 F32 y = (F32)getRect().getHeight() - sFont->getLineHeight() - (F32)TEXT_PAD; 955 F32 y = (F32)getRect().getHeight() - sFont->getLineHeight() - (F32)TEXT_PAD;
969 sFont->renderUTF8( combined_string, mStringMatchOffset, match_string_left, y, 956 sFont->renderUTF8( combined_string, mStringMatchOffset, match_string_left, y,
@@ -985,7 +972,7 @@ void LLFolderViewItem::draw()
985///---------------------------------------------------------------------------- 972///----------------------------------------------------------------------------
986 973
987// Default constructor 974// Default constructor
988LLFolderViewFolder::LLFolderViewFolder( const LLString& name, LLViewerImage* icon, 975LLFolderViewFolder::LLFolderViewFolder( const LLString& name, LLUIImagePtr icon,
989 LLFolderView* root, 976 LLFolderView* root,
990 LLFolderViewEventListener* listener ): 977 LLFolderViewEventListener* listener ):
991 LLFolderViewItem( name, icon, 0, root, listener ), // 0 = no create time 978 LLFolderViewItem( name, icon, 0, root, listener ), // 0 = no create time
@@ -1019,16 +1006,6 @@ LLFolderViewFolder::~LLFolderViewFolder( void )
1019 //mFolders.removeAllNodes(); 1006 //mFolders.removeAllNodes();
1020} 1007}
1021 1008
1022EWidgetType LLFolderViewFolder::getWidgetType() const
1023{
1024 return WIDGET_TYPE_FOLDER;
1025}
1026
1027LLString LLFolderViewFolder::getWidgetTag() const
1028{
1029 return LL_FOLDER_VIEW_FOLDER_TAG;
1030}
1031
1032// addToFolder() returns TRUE if it succeeds. FALSE otherwise 1009// addToFolder() returns TRUE if it succeeds. FALSE otherwise
1033BOOL LLFolderViewFolder::addToFolder(LLFolderViewFolder* folder, LLFolderView* root) 1010BOOL LLFolderViewFolder::addToFolder(LLFolderViewFolder* folder, LLFolderView* root)
1034{ 1011{
@@ -2098,20 +2075,17 @@ BOOL LLFolderViewFolder::handleDragAndDrop(S32 x, S32 y, MASK mask,
2098BOOL LLFolderViewFolder::handleRightMouseDown( S32 x, S32 y, MASK mask ) 2075BOOL LLFolderViewFolder::handleRightMouseDown( S32 x, S32 y, MASK mask )
2099{ 2076{
2100 BOOL handled = FALSE; 2077 BOOL handled = FALSE;
2101 if( getVisible() ) 2078 // fetch contents of this folder, as context menu can depend on contents
2079 // still, user would have to open context menu again to see the changes
2080 gInventory.fetchDescendentsOf(mListener->getUUID());
2081
2082 if( mIsOpen )
2102 { 2083 {
2103 // fetch contents of this folder, as context menu can depend on contents 2084 handled = childrenHandleRightMouseDown( x, y, mask ) != NULL;
2104 // still, user would have to open context menu again to see the changes 2085 }
2105 gInventory.fetchDescendentsOf(mListener->getUUID()); 2086 if (!handled)
2106 2087 {
2107 if( mIsOpen ) 2088 handled = LLFolderViewItem::handleRightMouseDown( x, y, mask );
2108 {
2109 handled = childrenHandleRightMouseDown( x, y, mask ) != NULL;
2110 }
2111 if (!handled)
2112 {
2113 handled = LLFolderViewItem::handleRightMouseDown( x, y, mask );
2114 }
2115 } 2089 }
2116 return handled; 2090 return handled;
2117} 2091}
@@ -2162,16 +2136,12 @@ BOOL LLFolderViewFolder::handleMouseDown( S32 x, S32 y, MASK mask )
2162 2136
2163BOOL LLFolderViewFolder::handleDoubleClick( S32 x, S32 y, MASK mask ) 2137BOOL LLFolderViewFolder::handleDoubleClick( S32 x, S32 y, MASK mask )
2164{ 2138{
2165 if (!getVisible()) 2139 BOOL handled = FALSE;
2166 {
2167 return FALSE;
2168 }
2169 BOOL rv = false;
2170 if( mIsOpen ) 2140 if( mIsOpen )
2171 { 2141 {
2172 rv = childrenHandleDoubleClick( x, y, mask ) != NULL; 2142 handled = childrenHandleDoubleClick( x, y, mask ) != NULL;
2173 } 2143 }
2174 if( !rv ) 2144 if( !handled )
2175 { 2145 {
2176 if(x < LEFT_INDENTATION + mIndentation && x > mIndentation - LEFT_PAD) 2146 if(x < LEFT_INDENTATION + mIndentation && x > mIndentation - LEFT_PAD)
2177 { 2147 {
@@ -2184,9 +2154,9 @@ BOOL LLFolderViewFolder::handleDoubleClick( S32 x, S32 y, MASK mask )
2184 setSelectionFromRoot(this, FALSE); 2154 setSelectionFromRoot(this, FALSE);
2185 toggleOpen(); 2155 toggleOpen();
2186 } 2156 }
2187 return TRUE; 2157 handled = TRUE;
2188 } 2158 }
2189 return rv; 2159 return handled;
2190} 2160}
2191 2161
2192void LLFolderViewFolder::draw() 2162void LLFolderViewFolder::draw()
@@ -2529,7 +2499,7 @@ void LLCloseAllFoldersFunctor::doItem(LLFolderViewItem* item)
2529///---------------------------------------------------------------------------- 2499///----------------------------------------------------------------------------
2530 2500
2531// Default constructor 2501// Default constructor
2532LLFolderView::LLFolderView( const LLString& name, LLViewerImage* root_folder_icon, 2502LLFolderView::LLFolderView( const LLString& name, LLUIImagePtr root_folder_icon,
2533 const LLRect& rect, const LLUUID& source_id, LLView *parent_view ) : 2503 const LLRect& rect, const LLUUID& source_id, LLView *parent_view ) :
2534#if LL_WINDOWS 2504#if LL_WINDOWS
2535#pragma warning( push ) 2505#pragma warning( push )
@@ -2584,18 +2554,15 @@ LLFolderView::LLFolderView( const LLString& name, LLViewerImage* root_folder_ico
2584 NULL, 2554 NULL,
2585 NULL, 2555 NULL,
2586 this, 2556 this,
2587 &LLLineEditor::prevalidatePrintableNotPipe, 2557 &LLLineEditor::prevalidatePrintableNotPipe);
2588 LLViewBorder::BEVEL_NONE, 2558 //mRenamer->setWriteableBgColor(LLColor4::white);
2589 LLViewBorder::STYLE_LINE,
2590 2);
2591 mRenamer->setWriteableBgColor(LLColor4::white);
2592 // Escape is handled by reverting the rename, not commiting it (default behavior) 2559 // Escape is handled by reverting the rename, not commiting it (default behavior)
2593 mRenamer->setCommitOnFocusLost(TRUE); 2560 mRenamer->setCommitOnFocusLost(TRUE);
2594 mRenamer->setVisible(FALSE); 2561 mRenamer->setVisible(FALSE);
2595 addChild(mRenamer); 2562 addChild(mRenamer);
2596 2563
2597 // make the popup menu available 2564 // make the popup menu available
2598 LLMenuGL* menu = gUICtrlFactory->buildMenu("menu_inventory.xml", parent_view); 2565 LLMenuGL* menu = LLUICtrlFactory::getInstance()->buildMenu("menu_inventory.xml", parent_view);
2599 if (!menu) 2566 if (!menu)
2600 { 2567 {
2601 menu = new LLMenuGL(""); 2568 menu = new LLMenuGL("");
@@ -2643,16 +2610,6 @@ LLFolderView::~LLFolderView( void )
2643 mItemMap.clear(); 2610 mItemMap.clear();
2644} 2611}
2645 2612
2646EWidgetType LLFolderView::getWidgetType() const
2647{
2648 return WIDGET_TYPE_FOLDER_VIEW;
2649}
2650
2651LLString LLFolderView::getWidgetTag() const
2652{
2653 return LL_FOLDER_VIEW_TAG;
2654}
2655
2656BOOL LLFolderView::canFocusChildren() const 2613BOOL LLFolderView::canFocusChildren() const
2657{ 2614{
2658 return FALSE; 2615 return FALSE;
@@ -3156,7 +3113,7 @@ BOOL LLFolderView::startDrag(LLToolDragAndDrop::ESource source)
3156 cargo_ids.push_back(id); 3113 cargo_ids.push_back(id);
3157 } 3114 }
3158 3115
3159 gToolDragAndDrop->beginMultiDrag(types, cargo_ids, source, mSourceID); 3116 LLToolDragAndDrop::getInstance()->beginMultiDrag(types, cargo_ids, source, mSourceID);
3160 } 3117 }
3161 return can_drag; 3118 return can_drag;
3162} 3119}
@@ -3187,15 +3144,11 @@ void LLFolderView::draw()
3187 { 3144 {
3188 closeAutoOpenedFolders(); 3145 closeAutoOpenedFolders();
3189 } 3146 }
3190 if(gViewerWindow->hasKeyboardFocus(this) && !getVisible())
3191 {
3192 gViewerWindow->setKeyboardFocus( NULL );
3193 }
3194 3147
3195 // while dragging, update selection rendering to reflect single/multi drag status 3148 // while dragging, update selection rendering to reflect single/multi drag status
3196 if (gToolDragAndDrop->hasMouseCapture()) 3149 if (LLToolDragAndDrop::getInstance()->hasMouseCapture())
3197 { 3150 {
3198 EAcceptance last_accept = gToolDragAndDrop->getLastAccept(); 3151 EAcceptance last_accept = LLToolDragAndDrop::getInstance()->getLastAccept();
3199 if (last_accept == ACCEPT_YES_SINGLE || last_accept == ACCEPT_YES_COPY_SINGLE) 3152 if (last_accept == ACCEPT_YES_SINGLE || last_accept == ACCEPT_YES_COPY_SINGLE)
3200 { 3153 {
3201 setShowSingleSelection(TRUE); 3154 setShowSingleSelection(TRUE);
@@ -3225,12 +3178,12 @@ void LLFolderView::draw()
3225 if (gInventory.backgroundFetchActive() || mCompletedFilterGeneration < mFilter.getMinRequiredGeneration()) 3178 if (gInventory.backgroundFetchActive() || mCompletedFilterGeneration < mFilter.getMinRequiredGeneration())
3226 { 3179 {
3227 mStatusText = "Searching..."; // *TODO:translate 3180 mStatusText = "Searching..."; // *TODO:translate
3228 sFont->renderUTF8(mStatusText, 0, 2, 1, LLColor4::white, LLFontGL::LEFT, LLFontGL::TOP, LLFontGL::NORMAL, S32_MAX, S32_MAX, NULL, FALSE ); 3181 sFont->renderUTF8(mStatusText, 0, 2, 1, sSearchStatusColor, LLFontGL::LEFT, LLFontGL::TOP, LLFontGL::NORMAL, S32_MAX, S32_MAX, NULL, FALSE );
3229 } 3182 }
3230 else 3183 else
3231 { 3184 {
3232 mStatusText = "No matching items found in inventory."; // *TODO:translate 3185 mStatusText = "No matching items found in inventory."; // *TODO:translate
3233 sFont->renderUTF8(mStatusText, 0, 2, 1, LLColor4::white, LLFontGL::LEFT, LLFontGL::TOP, LLFontGL::NORMAL, S32_MAX, S32_MAX, NULL, FALSE ); 3186 sFont->renderUTF8(mStatusText, 0, 2, 1, sSearchStatusColor, LLFontGL::LEFT, LLFontGL::TOP, LLFontGL::NORMAL, S32_MAX, S32_MAX, NULL, FALSE );
3234 } 3187 }
3235 } 3188 }
3236 3189
@@ -3698,7 +3651,7 @@ void LLFolderView::setFocus(BOOL focus)
3698 LLFolderViewFolder::setFocus(focus); 3651 LLFolderViewFolder::setFocus(focus);
3699} 3652}
3700 3653
3701BOOL LLFolderView::handleKeyHere( KEY key, MASK mask, BOOL called_from_parent ) 3654BOOL LLFolderView::handleKeyHere( KEY key, MASK mask )
3702{ 3655{
3703 BOOL handled = FALSE; 3656 BOOL handled = FALSE;
3704 3657
@@ -3716,202 +3669,199 @@ BOOL LLFolderView::handleKeyHere( KEY key, MASK mask, BOOL called_from_parent )
3716 item = *(getChildList()->begin()); 3669 item = *(getChildList()->begin());
3717 } 3670 }
3718 3671
3719 if( getVisible() && getEnabled() && !called_from_parent ) 3672 switch( key )
3720 { 3673 {
3721 switch( key ) 3674 case KEY_F2:
3722 { 3675 mSearchString.clear();
3723 case KEY_F2: 3676 startRenamingSelectedItem();
3724 mSearchString.clear(); 3677 handled = TRUE;
3725 startRenamingSelectedItem(); 3678 break;
3726 handled = TRUE;
3727 break;
3728
3729 case KEY_RETURN:
3730 if (mask == MASK_NONE)
3731 {
3732 if( mRenameItem && mRenamer->getVisible() )
3733 {
3734 finishRenamingItem();
3735 mSearchString.clear();
3736 handled = TRUE;
3737 }
3738 else
3739 {
3740 LLFolderView::openSelectedItems();
3741 handled = TRUE;
3742 }
3743 }
3744 break;
3745 3679
3746 case KEY_ESCAPE: 3680 case KEY_RETURN:
3747 // mark flag don't commit 3681 if (mask == MASK_NONE)
3682 {
3748 if( mRenameItem && mRenamer->getVisible() ) 3683 if( mRenameItem && mRenamer->getVisible() )
3749 { 3684 {
3750 revertRenamingItem(); 3685 finishRenamingItem();
3686 mSearchString.clear();
3751 handled = TRUE; 3687 handled = TRUE;
3752 } 3688 }
3753 else 3689 else
3754 { 3690 {
3755 if( gViewerWindow->childHasKeyboardFocus( this ) ) 3691 LLFolderView::openSelectedItems();
3756 { 3692 handled = TRUE;
3757 gViewerWindow->setKeyboardFocus( NULL );
3758 }
3759 } 3693 }
3760 mSearchString.clear(); 3694 }
3761 break; 3695 break;
3762 3696
3763 case KEY_PAGE_UP: 3697 case KEY_ESCAPE:
3764 mSearchString.clear(); 3698 // mark flag don't commit
3765 mScrollContainer->pageUp(30); 3699 if( mRenameItem && mRenamer->getVisible() )
3700 {
3701 revertRenamingItem();
3766 handled = TRUE; 3702 handled = TRUE;
3767 break; 3703 }
3704 else
3705 {
3706 if( gViewerWindow->childHasKeyboardFocus( this ) )
3707 {
3708 gViewerWindow->setKeyboardFocus( NULL );
3709 }
3710 }
3711 mSearchString.clear();
3712 break;
3768 3713
3769 case KEY_PAGE_DOWN: 3714 case KEY_PAGE_UP:
3770 mSearchString.clear(); 3715 mSearchString.clear();
3771 mScrollContainer->pageDown(30); 3716 mScrollContainer->pageUp(30);
3772 handled = TRUE; 3717 handled = TRUE;
3773 break; 3718 break;
3774 3719
3775 case KEY_HOME: 3720 case KEY_PAGE_DOWN:
3776 mSearchString.clear(); 3721 mSearchString.clear();
3777 mScrollContainer->goToTop(); 3722 mScrollContainer->pageDown(30);
3778 handled = TRUE; 3723 handled = TRUE;
3779 break; 3724 break;
3780 3725
3781 case KEY_END: 3726 case KEY_HOME:
3782 mSearchString.clear(); 3727 mSearchString.clear();
3783 mScrollContainer->goToBottom(); 3728 mScrollContainer->goToTop();
3784 break; 3729 handled = TRUE;
3730 break;
3785 3731
3786 case KEY_DOWN: 3732 case KEY_END:
3787 if((mSelectedItems.size() > 0) && mScrollContainer) 3733 mSearchString.clear();
3788 { 3734 mScrollContainer->goToBottom();
3789 LLFolderViewItem* last_selected = getCurSelectedItem(); 3735 break;
3790 3736
3791 if (!mKeyboardSelection) 3737 case KEY_DOWN:
3792 { 3738 if((mSelectedItems.size() > 0) && mScrollContainer)
3793 setSelection(last_selected, FALSE, TRUE); 3739 {
3794 mKeyboardSelection = TRUE; 3740 LLFolderViewItem* last_selected = getCurSelectedItem();
3795 }
3796 3741
3797 LLFolderViewItem* next = NULL; 3742 if (!mKeyboardSelection)
3798 if (mask & MASK_SHIFT) 3743 {
3744 setSelection(last_selected, FALSE, TRUE);
3745 mKeyboardSelection = TRUE;
3746 }
3747
3748 LLFolderViewItem* next = NULL;
3749 if (mask & MASK_SHIFT)
3750 {
3751 // don't shift select down to children of folders (they are implicitly selected through parent)
3752 next = last_selected->getNextOpenNode(FALSE);
3753 if (next)
3799 { 3754 {
3800 // don't shift select down to children of folders (they are implicitly selected through parent) 3755 if (next->isSelected())
3801 next = last_selected->getNextOpenNode(FALSE);
3802 if (next)
3803 { 3756 {
3804 if (next->isSelected()) 3757 // shrink selection
3805 { 3758 changeSelectionFromRoot(last_selected, FALSE);
3806 // shrink selection 3759 }
3807 changeSelectionFromRoot(last_selected, FALSE); 3760 else if (last_selected->getParentFolder() == next->getParentFolder())
3808 } 3761 {
3809 else if (last_selected->getParentFolder() == next->getParentFolder()) 3762 // grow selection
3810 { 3763 changeSelectionFromRoot(next, TRUE);
3811 // grow selection
3812 changeSelectionFromRoot(next, TRUE);
3813 }
3814 } 3764 }
3815 } 3765 }
3816 else 3766 }
3767 else
3768 {
3769 next = last_selected->getNextOpenNode();
3770 if( next )
3817 { 3771 {
3818 next = last_selected->getNextOpenNode(); 3772 if (next == last_selected)
3819 if( next )
3820 { 3773 {
3821 if (next == last_selected) 3774 return FALSE;
3822 {
3823 return FALSE;
3824 }
3825 setSelection( next, FALSE, TRUE );
3826 } 3775 }
3776 setSelection( next, FALSE, TRUE );
3827 } 3777 }
3828 scrollToShowSelection();
3829 mSearchString.clear();
3830 handled = TRUE;
3831 } 3778 }
3832 break; 3779 scrollToShowSelection();
3780 mSearchString.clear();
3781 handled = TRUE;
3782 }
3783 break;
3833 3784
3834 case KEY_UP: 3785 case KEY_UP:
3835 if((mSelectedItems.size() > 0) && mScrollContainer) 3786 if((mSelectedItems.size() > 0) && mScrollContainer)
3836 { 3787 {
3837 LLFolderViewItem* last_selected = mSelectedItems.back(); 3788 LLFolderViewItem* last_selected = mSelectedItems.back();
3838 3789
3839 if (!mKeyboardSelection) 3790 if (!mKeyboardSelection)
3840 { 3791 {
3841 setSelection(last_selected, FALSE, TRUE); 3792 setSelection(last_selected, FALSE, TRUE);
3842 mKeyboardSelection = TRUE; 3793 mKeyboardSelection = TRUE;
3843 } 3794 }
3844 3795
3845 LLFolderViewItem* prev = NULL; 3796 LLFolderViewItem* prev = NULL;
3846 if (mask & MASK_SHIFT) 3797 if (mask & MASK_SHIFT)
3798 {
3799 // don't shift select down to children of folders (they are implicitly selected through parent)
3800 prev = last_selected->getPreviousOpenNode(FALSE);
3801 if (prev)
3847 { 3802 {
3848 // don't shift select down to children of folders (they are implicitly selected through parent) 3803 if (prev->isSelected())
3849 prev = last_selected->getPreviousOpenNode(FALSE);
3850 if (prev)
3851 { 3804 {
3852 if (prev->isSelected()) 3805 // shrink selection
3853 { 3806 changeSelectionFromRoot(last_selected, FALSE);
3854 // shrink selection 3807 }
3855 changeSelectionFromRoot(last_selected, FALSE); 3808 else if (last_selected->getParentFolder() == prev->getParentFolder())
3856 } 3809 {
3857 else if (last_selected->getParentFolder() == prev->getParentFolder()) 3810 // grow selection
3858 { 3811 changeSelectionFromRoot(prev, TRUE);
3859 // grow selection
3860 changeSelectionFromRoot(prev, TRUE);
3861 }
3862 } 3812 }
3863 } 3813 }
3864 else 3814 }
3815 else
3816 {
3817 prev = last_selected->getPreviousOpenNode();
3818 if( prev )
3865 { 3819 {
3866 prev = last_selected->getPreviousOpenNode(); 3820 if (prev == this)
3867 if( prev )
3868 { 3821 {
3869 if (prev == this) 3822 return FALSE;
3870 {
3871 return FALSE;
3872 }
3873 setSelection( prev, FALSE, TRUE );
3874 } 3823 }
3824 setSelection( prev, FALSE, TRUE );
3875 } 3825 }
3876 scrollToShowSelection();
3877 mSearchString.clear();
3878
3879 handled = TRUE;
3880 } 3826 }
3881 break; 3827 scrollToShowSelection();
3828 mSearchString.clear();
3829
3830 handled = TRUE;
3831 }
3832 break;
3833
3834 case KEY_RIGHT:
3835 if(mSelectedItems.size())
3836 {
3837 LLFolderViewItem* last_selected = getCurSelectedItem();
3838 last_selected->setOpen( TRUE );
3839 mSearchString.clear();
3840 handled = TRUE;
3841 }
3842 break;
3882 3843
3883 case KEY_RIGHT: 3844 case KEY_LEFT:
3884 if(mSelectedItems.size()) 3845 if(mSelectedItems.size())
3846 {
3847 LLFolderViewItem* last_selected = getCurSelectedItem();
3848 LLFolderViewItem* parent_folder = last_selected->getParentFolder();
3849 if (!last_selected->isOpen() && parent_folder && parent_folder->getParentFolder())
3885 { 3850 {
3886 LLFolderViewItem* last_selected = getCurSelectedItem(); 3851 setSelection(parent_folder, FALSE, TRUE);
3887 last_selected->setOpen( TRUE );
3888 mSearchString.clear();
3889 handled = TRUE;
3890 } 3852 }
3891 break; 3853 else
3892
3893 case KEY_LEFT:
3894 if(mSelectedItems.size())
3895 { 3854 {
3896 LLFolderViewItem* last_selected = getCurSelectedItem(); 3855 last_selected->setOpen( FALSE );
3897 LLFolderViewItem* parent_folder = last_selected->getParentFolder();
3898 if (!last_selected->isOpen() && parent_folder && parent_folder->getParentFolder())
3899 {
3900 setSelection(parent_folder, FALSE, TRUE);
3901 }
3902 else
3903 {
3904 last_selected->setOpen( FALSE );
3905 }
3906 mSearchString.clear();
3907 scrollToShowSelection();
3908 handled = TRUE;
3909 } 3856 }
3910 break; 3857 mSearchString.clear();
3858 scrollToShowSelection();
3859 handled = TRUE;
3911 } 3860 }
3861 break;
3912 } 3862 }
3913 3863
3914 if (!handled && gFocusMgr.childHasKeyboardFocus(getRoot())) 3864 if (!handled && hasFocus())
3915 { 3865 {
3916 if (key == KEY_BACKSPACE) 3866 if (key == KEY_BACKSPACE)
3917 { 3867 {
@@ -3929,7 +3879,7 @@ BOOL LLFolderView::handleKeyHere( KEY key, MASK mask, BOOL called_from_parent )
3929} 3879}
3930 3880
3931 3881
3932BOOL LLFolderView::handleUnicodeCharHere(llwchar uni_char, BOOL called_from_parent) 3882BOOL LLFolderView::handleUnicodeCharHere(llwchar uni_char)
3933{ 3883{
3934 if ((uni_char < 0x20) || (uni_char == 0x7F)) // Control character or DEL 3884 if ((uni_char < 0x20) || (uni_char == 0x7F)) // Control character or DEL
3935 { 3885 {
@@ -4082,11 +4032,7 @@ BOOL LLFolderView::search(LLFolderViewItem* first_item, const LLString &search_s
4082 4032
4083BOOL LLFolderView::handleDoubleClick( S32 x, S32 y, MASK mask ) 4033BOOL LLFolderView::handleDoubleClick( S32 x, S32 y, MASK mask )
4084{ 4034{
4085 if (!getVisible()) 4035 // skip LLFolderViewFolder::handleDoubleClick()
4086 {
4087 return FALSE;
4088 }
4089
4090 return LLView::handleDoubleClick( x, y, mask ); 4036 return LLView::handleDoubleClick( x, y, mask );
4091} 4037}
4092 4038
diff --git a/linden/indra/newview/llfolderview.h b/linden/indra/newview/llfolderview.h
index 1bd46d7..bbf4b1d 100644
--- a/linden/indra/newview/llfolderview.h
+++ b/linden/indra/newview/llfolderview.h
@@ -81,7 +81,7 @@ public:
81 virtual const LLUUID& getUUID() const = 0; 81 virtual const LLUUID& getUUID() const = 0;
82 virtual U32 getCreationDate() const = 0; // UTC seconds 82 virtual U32 getCreationDate() const = 0; // UTC seconds
83 virtual PermissionMask getPermissionMask() const = 0; 83 virtual PermissionMask getPermissionMask() const = 0;
84 virtual LLViewerImage* getIcon() const = 0; 84 virtual LLUIImagePtr getIcon() const = 0;
85 virtual LLFontGL::StyleFlags getLabelStyle() const = 0; 85 virtual LLFontGL::StyleFlags getLabelStyle() const = 0;
86 virtual LLString getLabelSuffix() const = 0; 86 virtual LLString getLabelSuffix() const = 0;
87 virtual void openItem( void ) = 0; 87 virtual void openItem( void ) = 0;
@@ -326,7 +326,8 @@ protected:
326 static LLColor4 sHighlightFgColor; 326 static LLColor4 sHighlightFgColor;
327 static LLColor4 sFilterBGColor; 327 static LLColor4 sFilterBGColor;
328 static LLColor4 sFilterTextColor; 328 static LLColor4 sFilterTextColor;
329 static LLColor4 sLoadingMessageTextColor; 329 static LLColor4 sSuffixColor;
330 static LLColor4 sSearchStatusColor;
330 331
331 LLString mLabel; 332 LLString mLabel;
332 LLString mSearchableLabel; 333 LLString mSearchableLabel;
@@ -340,7 +341,7 @@ protected:
340 BOOL mSelectPending; 341 BOOL mSelectPending;
341 LLFontGL::StyleFlags mLabelStyle; 342 LLFontGL::StyleFlags mLabelStyle;
342 LLString mLabelSuffix; 343 LLString mLabelSuffix;
343 LLPointer<LLViewerImage> mIcon; 344 LLUIImagePtr mIcon;
344 LLString mStatusText; 345 LLString mStatusText;
345 BOOL mHasVisibleChildren; 346 BOOL mHasVisibleChildren;
346 S32 mIndentation; 347 S32 mIndentation;
@@ -351,8 +352,8 @@ protected:
351 F32 mControlLabelRotation; 352 F32 mControlLabelRotation;
352 LLFolderView* mRoot; 353 LLFolderView* mRoot;
353 BOOL mDragAndDropTarget; 354 BOOL mDragAndDropTarget;
354 LLPointer<LLViewerImage> mArrowImage; 355 LLUIImagePtr mArrowImage;
355 LLPointer<LLViewerImage> mBoxImage; 356 LLUIImagePtr mBoxImage;
356 BOOL mIsLoading; 357 BOOL mIsLoading;
357 LLTimer mTimeSinceRequestStart; 358 LLTimer mTimeSinceRequestStart;
358 359
@@ -382,12 +383,9 @@ public:
382 void filterFromRoot( void ); 383 void filterFromRoot( void );
383 384
384 // creation_date is in UTC seconds 385 // creation_date is in UTC seconds
385 LLFolderViewItem( const LLString& name, LLViewerImage* icon, S32 creation_date, LLFolderView* root, LLFolderViewEventListener* listener ); 386 LLFolderViewItem( const LLString& name, LLUIImagePtr icon, S32 creation_date, LLFolderView* root, LLFolderViewEventListener* listener );
386 virtual ~LLFolderViewItem( void ); 387 virtual ~LLFolderViewItem( void );
387 388
388 virtual EWidgetType getWidgetType() const;
389 virtual LLString getWidgetTag() const;
390
391 // addToFolder() returns TRUE if it succeeds. FALSE otherwise 389 // addToFolder() returns TRUE if it succeeds. FALSE otherwise
392 enum { ARRANGE = TRUE, DO_NOT_ARRANGE = FALSE }; 390 enum { ARRANGE = TRUE, DO_NOT_ARRANGE = FALSE };
393 virtual BOOL addToFolder(LLFolderViewFolder* folder, LLFolderView* root); 391 virtual BOOL addToFolder(LLFolderViewFolder* folder, LLFolderView* root);
@@ -500,7 +498,7 @@ public:
500 virtual void setFiltered(BOOL filtered, S32 filter_generation); 498 virtual void setFiltered(BOOL filtered, S32 filter_generation);
501 499
502 // change the icon 500 // change the icon
503 void setIcon(LLViewerImage* icon); 501 void setIcon(LLUIImagePtr icon);
504 502
505 // refresh information from the object being viewed. 503 // refresh information from the object being viewed.
506 virtual void refresh(); 504 virtual void refresh();
@@ -572,14 +570,11 @@ public:
572 RECURSE_UP_DOWN 570 RECURSE_UP_DOWN
573 } ERecurseType; 571 } ERecurseType;
574 572
575 LLFolderViewFolder( const LLString& name, LLViewerImage* icon, 573 LLFolderViewFolder( const LLString& name, LLUIImagePtr icon,
576 LLFolderView* root, 574 LLFolderView* root,
577 LLFolderViewEventListener* listener ); 575 LLFolderViewEventListener* listener );
578 virtual ~LLFolderViewFolder( void ); 576 virtual ~LLFolderViewFolder( void );
579 577
580 virtual EWidgetType getWidgetType() const;
581 virtual LLString getWidgetTag() const;
582
583 virtual BOOL potentiallyVisible(); 578 virtual BOOL potentiallyVisible();
584 579
585 LLFolderViewItem* getNextFromChild( LLFolderViewItem*, BOOL include_children = TRUE ); 580 LLFolderViewItem* getNextFromChild( LLFolderViewItem*, BOOL include_children = TRUE );
@@ -729,12 +724,10 @@ public:
729 724
730 static F32 sAutoOpenTime; 725 static F32 sAutoOpenTime;
731 726
732 LLFolderView( const LLString& name, LLViewerImage* root_folder_icon, const LLRect& rect, 727 LLFolderView( const LLString& name, LLUIImagePtr root_folder_icon, const LLRect& rect,
733 const LLUUID& source_id, LLView *parent_view ); 728 const LLUUID& source_id, LLView *parent_view );
734 virtual ~LLFolderView( void ); 729 virtual ~LLFolderView( void );
735 730
736 virtual EWidgetType getWidgetType() const;
737 virtual LLString getWidgetTag() const;
738 virtual BOOL canFocusChildren() const; 731 virtual BOOL canFocusChildren() const;
739 732
740 // FolderViews default to sort by name. This will change that, 733 // FolderViews default to sort by name. This will change that,
@@ -836,8 +829,8 @@ public:
836 829
837 // LLView functionality 830 // LLView functionality
838 ///*virtual*/ BOOL handleKey( KEY key, MASK mask, BOOL called_from_parent ); 831 ///*virtual*/ BOOL handleKey( KEY key, MASK mask, BOOL called_from_parent );
839 /*virtual*/ BOOL handleKeyHere( KEY key, MASK mask, BOOL called_from_parent ); 832 /*virtual*/ BOOL handleKeyHere( KEY key, MASK mask );
840 /*virtual*/ BOOL handleUnicodeCharHere(llwchar uni_char, BOOL called_from_parent); 833 /*virtual*/ BOOL handleUnicodeCharHere(llwchar uni_char);
841 /*virtual*/ BOOL handleMouseDown( S32 x, S32 y, MASK mask ); 834 /*virtual*/ BOOL handleMouseDown( S32 x, S32 y, MASK mask );
842 /*virtual*/ BOOL handleDoubleClick( S32 x, S32 y, MASK mask ); 835 /*virtual*/ BOOL handleDoubleClick( S32 x, S32 y, MASK mask );
843 /*virtual*/ BOOL handleRightMouseDown( S32 x, S32 y, MASK mask ); 836 /*virtual*/ BOOL handleRightMouseDown( S32 x, S32 y, MASK mask );
diff --git a/linden/indra/newview/llframestatview.cpp b/linden/indra/newview/llframestatview.cpp
index 33a3265..71d810c 100644
--- a/linden/indra/newview/llframestatview.cpp
+++ b/linden/indra/newview/llframestatview.cpp
@@ -63,16 +63,6 @@ LLFrameStatView::~LLFrameStatView()
63 // Children all cleaned up by default view destructor. 63 // Children all cleaned up by default view destructor.
64} 64}
65 65
66EWidgetType LLFrameStatView::getWidgetType() const
67{
68 return WIDGET_TYPE_FRAME_STAT_VIEW;
69}
70
71LLString LLFrameStatView::getWidgetTag() const
72{
73 return LL_FRAME_STAT_VIEW_TAG;
74}
75
76void LLFrameStatView::setup(const LLFrameStats &frame_stats) 66void LLFrameStatView::setup(const LLFrameStats &frame_stats)
77{ 67{
78 S32 i; 68 S32 i;
diff --git a/linden/indra/newview/llframestatview.h b/linden/indra/newview/llframestatview.h
index e72cdc4..2528891 100644
--- a/linden/indra/newview/llframestatview.h
+++ b/linden/indra/newview/llframestatview.h
@@ -49,9 +49,6 @@ public:
49 LLFrameStatView(const std::string& name, const LLRect& rect); 49 LLFrameStatView(const std::string& name, const LLRect& rect);
50 virtual ~LLFrameStatView(); 50 virtual ~LLFrameStatView();
51 51
52 virtual EWidgetType getWidgetType() const;
53 virtual LLString getWidgetTag() const;
54
55 void setup(const LLFrameStats &frame_stats); 52 void setup(const LLFrameStats &frame_stats);
56 53
57 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); 54 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
diff --git a/linden/indra/newview/llgesturemgr.cpp b/linden/indra/newview/llgesturemgr.cpp
index 3be5d4e..27c9836 100644
--- a/linden/indra/newview/llgesturemgr.cpp
+++ b/linden/indra/newview/llgesturemgr.cpp
@@ -50,6 +50,7 @@
50// newview 50// newview
51#include "llagent.h" 51#include "llagent.h"
52#include "llchatbar.h" 52#include "llchatbar.h"
53#include "lldelayedgestureerror.h"
53#include "llinventorymodel.h" 54#include "llinventorymodel.h"
54#include "llnotify.h" 55#include "llnotify.h"
55#include "llviewermessage.h" 56#include "llviewermessage.h"
@@ -1001,25 +1002,16 @@ void LLGestureManager::onLoadComplete(LLVFS *vfs,
1001 } 1002 }
1002 else 1003 else
1003 { 1004 {
1004 if( gViewerStats ) 1005 LLViewerStats::getInstance()->incStat( LLViewerStats::ST_DOWNLOAD_FAILED );
1005 {
1006 gViewerStats->incStat( LLViewerStats::ST_DOWNLOAD_FAILED );
1007 }
1008
1009 // Get missing gesture's name. Use UUID if name can't be found.
1010 LLStringBase<char>::format_map_t args;
1011 LLInventoryItem *item = gInventory.getItem( item_id );
1012 args["[NAME]"] = item ? item->getName() : LLString( item_id.asString() );
1013
1014 1006
1015 if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status || 1007 if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status ||
1016 LL_ERR_FILE_EMPTY == status) 1008 LL_ERR_FILE_EMPTY == status)
1017 { 1009 {
1018 LLNotifyBox::showXml("GestureMissing", args); 1010 LLDelayedGestureError::gestureMissing( item_id );
1019 } 1011 }
1020 else 1012 else
1021 { 1013 {
1022 LLNotifyBox::showXml("UnableToLoadGesture", args); 1014 LLDelayedGestureError::gestureFailedToLoad( item_id );
1023 } 1015 }
1024 1016
1025 llwarns << "Problem loading gesture: " << status << llendl; 1017 llwarns << "Problem loading gesture: " << status << llendl;
diff --git a/linden/indra/newview/llgivemoney.cpp b/linden/indra/newview/llgivemoney.cpp
index 8abda4b..41b1c1e 100644
--- a/linden/indra/newview/llgivemoney.cpp
+++ b/linden/indra/newview/llgivemoney.cpp
@@ -47,7 +47,7 @@
47#include "llbutton.h" 47#include "llbutton.h"
48#include "llselectmgr.h" 48#include "llselectmgr.h"
49#include "lltransactiontypes.h" 49#include "lltransactiontypes.h"
50#include "llvieweruictrlfactory.h" 50#include "lluictrlfactory.h"
51 51
52///---------------------------------------------------------------------------- 52///----------------------------------------------------------------------------
53/// Local function declarations, constants, enums, and typedefs 53/// Local function declarations, constants, enums, and typedefs
@@ -94,12 +94,12 @@ LLFloaterPay::LLFloaterPay(const std::string& name,
94{ 94{
95 if (target_is_object) 95 if (target_is_object)
96 { 96 {
97 gUICtrlFactory->buildFloater(this,"floater_pay_object.xml"); 97 LLUICtrlFactory::getInstance()->buildFloater(this,"floater_pay_object.xml");
98 mObjectSelection = gSelectMgr->getEditSelection(); 98 mObjectSelection = LLSelectMgr::getInstance()->getEditSelection();
99 } 99 }
100 else 100 else
101 { 101 {
102 gUICtrlFactory->buildFloater(this,"floater_pay.xml"); 102 LLUICtrlFactory::getInstance()->buildFloater(this,"floater_pay.xml");
103 } 103 }
104 104
105 105
@@ -111,7 +111,7 @@ LLFloaterPay::LLFloaterPay(const std::string& name,
111 childSetAction("fastpay 1",&LLFloaterPay::onGive,info); 111 childSetAction("fastpay 1",&LLFloaterPay::onGive,info);
112 childSetVisible("fastpay 1", FALSE); 112 childSetVisible("fastpay 1", FALSE);
113 113
114 mQuickPayButton[i] = LLUICtrlFactory::getButtonByName(this, "fastpay 1"); 114 mQuickPayButton[i] = getChild<LLButton>("fastpay 1");
115 mQuickPayInfo[i] = info; 115 mQuickPayInfo[i] = info;
116 ++i; 116 ++i;
117 117
@@ -121,7 +121,7 @@ LLFloaterPay::LLFloaterPay(const std::string& name,
121 childSetAction("fastpay 5",&LLFloaterPay::onGive,info); 121 childSetAction("fastpay 5",&LLFloaterPay::onGive,info);
122 childSetVisible("fastpay 5", FALSE); 122 childSetVisible("fastpay 5", FALSE);
123 123
124 mQuickPayButton[i] = LLUICtrlFactory::getButtonByName(this, "fastpay 5"); 124 mQuickPayButton[i] = getChild<LLButton>("fastpay 5");
125 mQuickPayInfo[i] = info; 125 mQuickPayInfo[i] = info;
126 ++i; 126 ++i;
127 127
@@ -131,7 +131,7 @@ LLFloaterPay::LLFloaterPay(const std::string& name,
131 childSetAction("fastpay 10",&LLFloaterPay::onGive,info); 131 childSetAction("fastpay 10",&LLFloaterPay::onGive,info);
132 childSetVisible("fastpay 10", FALSE); 132 childSetVisible("fastpay 10", FALSE);
133 133
134 mQuickPayButton[i] = LLUICtrlFactory::getButtonByName(this, "fastpay 10"); 134 mQuickPayButton[i] = getChild<LLButton>("fastpay 10");
135 mQuickPayInfo[i] = info; 135 mQuickPayInfo[i] = info;
136 ++i; 136 ++i;
137 137
@@ -141,7 +141,7 @@ LLFloaterPay::LLFloaterPay(const std::string& name,
141 childSetAction("fastpay 20",&LLFloaterPay::onGive,info); 141 childSetAction("fastpay 20",&LLFloaterPay::onGive,info);
142 childSetVisible("fastpay 20", FALSE); 142 childSetVisible("fastpay 20", FALSE);
143 143
144 mQuickPayButton[i] = LLUICtrlFactory::getButtonByName(this, "fastpay 20"); 144 mQuickPayButton[i] = getChild<LLButton>("fastpay 20");
145 mQuickPayInfo[i] = info; 145 mQuickPayInfo[i] = info;
146 ++i; 146 ++i;
147 147
@@ -240,7 +240,7 @@ void LLFloaterPay::processPayPriceReply(LLMessageSystem* msg, void **userdata)
240 if (pay_button > 0) 240 if (pay_button > 0)
241 { 241 {
242 LLString button_str = "L$"; 242 LLString button_str = "L$";
243 button_str += gResMgr->getMonetaryString( pay_button ); 243 button_str += LLResMgr::getInstance()->getMonetaryString( pay_button );
244 244
245 self->mQuickPayButton[i]->setLabelSelected(button_str); 245 self->mQuickPayButton[i]->setLabelSelected(button_str);
246 self->mQuickPayButton[i]->setLabelUnselected(button_str); 246 self->mQuickPayButton[i]->setLabelUnselected(button_str);
@@ -261,8 +261,8 @@ void LLFloaterPay::processPayPriceReply(LLMessageSystem* msg, void **userdata)
261 261
262 // build a string containing the maximum value and calc nerw button width from it. 262 // build a string containing the maximum value and calc nerw button width from it.
263 LLString balance_str = "L$"; 263 LLString balance_str = "L$";
264 balance_str += gResMgr->getMonetaryString( max_pay_amount ); 264 balance_str += LLResMgr::getInstance()->getMonetaryString( max_pay_amount );
265 const LLFontGL* font = gResMgr->getRes(LLFONT_SANSSERIF); 265 const LLFontGL* font = LLResMgr::getInstance()->getRes(LLFONT_SANSSERIF);
266 S32 new_button_width = font->getWidth( LLString(balance_str)); 266 S32 new_button_width = font->getWidth( LLString(balance_str));
267 new_button_width += ( 12 + 12 ); // padding 267 new_button_width += ( 12 + 12 ); // padding
268 268
@@ -379,7 +379,7 @@ void LLFloaterPay::finishPayUI(const LLUUID& target_id, BOOL is_group)
379 379
380 childSetFocus("amount", TRUE); 380 childSetFocus("amount", TRUE);
381 381
382 LLLineEditor* amount = LLUICtrlFactory::getLineEditorByName(this, "amount"); 382 LLLineEditor* amount = getChild<LLLineEditor>("amount");
383 amount->selectAll(); 383 amount->selectAll();
384 mTargetIsGroup = is_group; 384 mTargetIsGroup = is_group;
385} 385}
diff --git a/linden/indra/newview/llglsandbox.cpp b/linden/indra/newview/llglsandbox.cpp
index 31e1935..28b92fd 100644
--- a/linden/indra/newview/llglsandbox.cpp
+++ b/linden/indra/newview/llglsandbox.cpp
@@ -53,7 +53,7 @@
53#include "lltoolmgr.h" 53#include "lltoolmgr.h"
54#include "llselectmgr.h" 54#include "llselectmgr.h"
55#include "llhudmanager.h" 55#include "llhudmanager.h"
56#include "llsphere.h" 56#include "llrendersphere.h"
57#include "llviewerobjectlist.h" 57#include "llviewerobjectlist.h"
58#include "lltoolselectrect.h" 58#include "lltoolselectrect.h"
59#include "llviewerwindow.h" 59#include "llviewerwindow.h"
@@ -86,7 +86,7 @@ BOOL LLAgent::setLookAt(ELookAtType target_type, LLViewerObject *object, LLVecto
86 } 86 }
87 if(!mLookAt || mLookAt->isDead()) 87 if(!mLookAt || mLookAt->isDead())
88 { 88 {
89 mLookAt = (LLHUDEffectLookAt *)gHUDManager->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_LOOKAT); 89 mLookAt = (LLHUDEffectLookAt *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_LOOKAT);
90 mLookAt->setSourceObject(mAvatarObject); 90 mLookAt->setSourceObject(mAvatarObject);
91 } 91 }
92 92
@@ -103,7 +103,7 @@ BOOL LLAgent::setPointAt(EPointAtType target_type, LLViewerObject *object, LLVec
103 103
104 if(!mPointAt || mPointAt->isDead()) 104 if(!mPointAt || mPointAt->isDead())
105 { 105 {
106 mPointAt = (LLHUDEffectPointAt *)gHUDManager->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINTAT); 106 mPointAt = (LLHUDEffectPointAt *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINTAT);
107 mPointAt->setSourceObject(mAvatarObject); 107 mPointAt->setSourceObject(mAvatarObject);
108 } 108 }
109 109
@@ -181,8 +181,8 @@ void LLToolSelectRect::handleRectangleSelection(S32 x, S32 y, MASK mask)
181 top = llround((F32) top * LLUI::sGLScaleFactor.mV[VY]); 181 top = llround((F32) top * LLUI::sGLScaleFactor.mV[VY]);
182 bottom = llround((F32) bottom * LLUI::sGLScaleFactor.mV[VY]); 182 bottom = llround((F32) bottom * LLUI::sGLScaleFactor.mV[VY]);
183 183
184 F32 old_far_plane = gCamera->getFar(); 184 F32 old_far_plane = LLViewerCamera::getInstance()->getFar();
185 F32 old_near_plane = gCamera->getNear(); 185 F32 old_near_plane = LLViewerCamera::getInstance()->getNear();
186 186
187 S32 width = right - left + 1; 187 S32 width = right - left + 1;
188 S32 height = top - bottom + 1; 188 S32 height = top - bottom + 1;
@@ -220,17 +220,17 @@ void LLToolSelectRect::handleRectangleSelection(S32 x, S32 y, MASK mask)
220 { 220 {
221 // ...select distance from control 221 // ...select distance from control
222 LLVector3 relative_av_pos = av_pos; 222 LLVector3 relative_av_pos = av_pos;
223 relative_av_pos -= gCamera->getOrigin(); 223 relative_av_pos -= LLViewerCamera::getInstance()->getOrigin();
224 224
225 F32 new_far = relative_av_pos * gCamera->getAtAxis() + gSavedSettings.getF32("MaxSelectDistance"); 225 F32 new_far = relative_av_pos * LLViewerCamera::getInstance()->getAtAxis() + gSavedSettings.getF32("MaxSelectDistance");
226 F32 new_near = relative_av_pos * gCamera->getAtAxis() - gSavedSettings.getF32("MaxSelectDistance"); 226 F32 new_near = relative_av_pos * LLViewerCamera::getInstance()->getAtAxis() - gSavedSettings.getF32("MaxSelectDistance");
227 227
228 new_near = llmax(new_near, 0.1f); 228 new_near = llmax(new_near, 0.1f);
229 229
230 gCamera->setFar(new_far); 230 LLViewerCamera::getInstance()->setFar(new_far);
231 gCamera->setNear(new_near); 231 LLViewerCamera::getInstance()->setNear(new_near);
232 } 232 }
233 gCamera->setPerspective(FOR_SELECTION, 233 LLViewerCamera::getInstance()->setPerspective(FOR_SELECTION,
234 center_x-width/2, center_y-height/2, width, height, 234 center_x-width/2, center_y-height/2, width, height,
235 limit_select_distance); 235 limit_select_distance);
236 236
@@ -245,17 +245,17 @@ void LLToolSelectRect::handleRectangleSelection(S32 x, S32 y, MASK mask)
245 { 245 {
246 return true; 246 return true;
247 } 247 }
248 S32 result = gCamera->sphereInFrustum(drawable->getPositionAgent(), drawable->getRadius()); 248 S32 result = LLViewerCamera::getInstance()->sphereInFrustum(drawable->getPositionAgent(), drawable->getRadius());
249 switch (result) 249 switch (result)
250 { 250 {
251 case 0: 251 case 0:
252 gSelectMgr->unhighlightObjectOnly(vobjp); 252 LLSelectMgr::getInstance()->unhighlightObjectOnly(vobjp);
253 break; 253 break;
254 case 1: 254 case 1:
255 // check vertices 255 // check vertices
256 if (!gCamera->areVertsVisible(vobjp, LLSelectMgr::sRectSelectInclusive)) 256 if (!LLViewerCamera::getInstance()->areVertsVisible(vobjp, LLSelectMgr::sRectSelectInclusive))
257 { 257 {
258 gSelectMgr->unhighlightObjectOnly(vobjp); 258 LLSelectMgr::getInstance()->unhighlightObjectOnly(vobjp);
259 } 259 }
260 break; 260 break;
261 default: 261 default:
@@ -264,15 +264,15 @@ void LLToolSelectRect::handleRectangleSelection(S32 x, S32 y, MASK mask)
264 return true; 264 return true;
265 } 265 }
266 } func; 266 } func;
267 gSelectMgr->getHighlightedObjects()->applyToObjects(&func); 267 LLSelectMgr::getInstance()->getHighlightedObjects()->applyToObjects(&func);
268 } 268 }
269 269
270 if (grow_selection) 270 if (grow_selection)
271 { 271 {
272 std::vector<LLDrawable*> potentials; 272 std::vector<LLDrawable*> potentials;
273 273
274 for (LLWorld::region_list_t::iterator iter = gWorldp->getRegionList().begin(); 274 for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin();
275 iter != gWorldp->getRegionList().end(); ++iter) 275 iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
276 { 276 {
277 LLViewerRegion* region = *iter; 277 LLViewerRegion* region = *iter;
278 for (U32 i = 0; i < LLViewerRegion::NUM_PARTITIONS; i++) 278 for (U32 i = 0; i < LLViewerRegion::NUM_PARTITIONS; i++)
@@ -280,7 +280,7 @@ void LLToolSelectRect::handleRectangleSelection(S32 x, S32 y, MASK mask)
280 LLSpatialPartition* part = region->getSpatialPartition(i); 280 LLSpatialPartition* part = region->getSpatialPartition(i);
281 if (part) 281 if (part)
282 { 282 {
283 part->cull(*gCamera, &potentials, TRUE); 283 part->cull(*LLViewerCamera::getInstance(), &potentials, TRUE);
284 } 284 }
285 } 285 }
286 } 286 }
@@ -304,20 +304,20 @@ void LLToolSelectRect::handleRectangleSelection(S32 x, S32 y, MASK mask)
304 continue; 304 continue;
305 } 305 }
306 306
307 S32 result = gCamera->sphereInFrustum(drawable->getPositionAgent(), drawable->getRadius()); 307 S32 result = LLViewerCamera::getInstance()->sphereInFrustum(drawable->getPositionAgent(), drawable->getRadius());
308 if (result) 308 if (result)
309 { 309 {
310 switch (result) 310 switch (result)
311 { 311 {
312 case 1: 312 case 1:
313 // check vertices 313 // check vertices
314 if (gCamera->areVertsVisible(vobjp, LLSelectMgr::sRectSelectInclusive)) 314 if (LLViewerCamera::getInstance()->areVertsVisible(vobjp, LLSelectMgr::sRectSelectInclusive))
315 { 315 {
316 gSelectMgr->highlightObjectOnly(vobjp); 316 LLSelectMgr::getInstance()->highlightObjectOnly(vobjp);
317 } 317 }
318 break; 318 break;
319 case 2: 319 case 2:
320 gSelectMgr->highlightObjectOnly(vobjp); 320 LLSelectMgr::getInstance()->highlightObjectOnly(vobjp);
321 break; 321 break;
322 default: 322 default:
323 break; 323 break;
@@ -332,8 +332,8 @@ void LLToolSelectRect::handleRectangleSelection(S32 x, S32 y, MASK mask)
332 glMatrixMode(GL_MODELVIEW); 332 glMatrixMode(GL_MODELVIEW);
333 333
334 // restore camera 334 // restore camera
335 gCamera->setFar(old_far_plane); 335 LLViewerCamera::getInstance()->setFar(old_far_plane);
336 gCamera->setNear(old_near_plane); 336 LLViewerCamera::getInstance()->setNear(old_near_plane);
337 gViewerWindow->setup3DRender(); 337 gViewerWindow->setup3DRender();
338} 338}
339 339
@@ -343,10 +343,6 @@ static const F32 COMPASS_RANGE = 0.33f;
343 343
344void LLCompass::draw() 344void LLCompass::draw()
345{ 345{
346// S32 left, top, right, bottom;
347
348 if (!getVisible()) return;
349
350 glMatrixMode(GL_MODELVIEW); 346 glMatrixMode(GL_MODELVIEW);
351 gGL.pushMatrix(); 347 gGL.pushMatrix();
352 348
@@ -413,8 +409,6 @@ void LLCompass::draw()
413 409
414void LLHorizontalCompass::draw() 410void LLHorizontalCompass::draw()
415{ 411{
416 if (!getVisible()) return;
417
418 LLGLSUIDefault gls_ui; 412 LLGLSUIDefault gls_ui;
419 413
420 S32 width = getRect().getWidth(); 414 S32 width = getRect().getWidth();
@@ -423,7 +417,7 @@ void LLHorizontalCompass::draw()
423 417
424 if( mTexture ) 418 if( mTexture )
425 { 419 {
426 const LLVector3& at_axis = gCamera->getAtAxis(); 420 const LLVector3& at_axis = LLViewerCamera::getInstance()->getAtAxis();
427 F32 center = atan2( at_axis.mV[VX], at_axis.mV[VY] ); 421 F32 center = atan2( at_axis.mV[VX], at_axis.mV[VY] );
428 422
429 center += F_PI; 423 center += F_PI;
@@ -469,7 +463,7 @@ void LLWind::renderVectors()
469 S32 i,j; 463 S32 i,j;
470 F32 x,y; 464 F32 x,y;
471 465
472 F32 region_width_meters = gWorldPointer->getRegionWidthInMeters(); 466 F32 region_width_meters = LLWorld::getInstance()->getRegionWidthInMeters();
473 467
474 LLGLSNoTexture gls_no_texture; 468 LLGLSNoTexture gls_no_texture;
475 gGL.pushMatrix(); 469 gGL.pushMatrix();
@@ -524,10 +518,10 @@ void LLViewerParcelMgr::renderRect(const LLVector3d &west_south_bottom_global,
524 // resolves correctly so we can get a height value. 518 // resolves correctly so we can get a height value.
525 const F32 FUDGE = 0.01f; 519 const F32 FUDGE = 0.01f;
526 520
527 F32 sw_bottom = gWorldp->resolveLandHeightAgent( LLVector3( west, south, 0.f ) ); 521 F32 sw_bottom = LLWorld::getInstance()->resolveLandHeightAgent( LLVector3( west, south, 0.f ) );
528 F32 se_bottom = gWorldp->resolveLandHeightAgent( LLVector3( east-FUDGE, south, 0.f ) ); 522 F32 se_bottom = LLWorld::getInstance()->resolveLandHeightAgent( LLVector3( east-FUDGE, south, 0.f ) );
529 F32 ne_bottom = gWorldp->resolveLandHeightAgent( LLVector3( east-FUDGE, north-FUDGE, 0.f ) ); 523 F32 ne_bottom = LLWorld::getInstance()->resolveLandHeightAgent( LLVector3( east-FUDGE, north-FUDGE, 0.f ) );
530 F32 nw_bottom = gWorldp->resolveLandHeightAgent( LLVector3( west, north-FUDGE, 0.f ) ); 524 F32 nw_bottom = LLWorld::getInstance()->resolveLandHeightAgent( LLVector3( west, north-FUDGE, 0.f ) );
531 525
532 F32 sw_top = sw_bottom + PARCEL_POST_HEIGHT; 526 F32 sw_top = sw_bottom + PARCEL_POST_HEIGHT;
533 F32 se_top = se_bottom + PARCEL_POST_HEIGHT; 527 F32 se_top = se_bottom + PARCEL_POST_HEIGHT;
@@ -601,10 +595,10 @@ void LLViewerParcelMgr::renderParcel(LLParcel* parcel )
601 // resolves correctly so we can get a height value. 595 // resolves correctly so we can get a height value.
602 const F32 FUDGE = 0.01f; 596 const F32 FUDGE = 0.01f;
603 597
604 F32 sw_bottom = gWorldp->resolveLandHeightAgent( LLVector3( west, south, 0.f ) ); 598 F32 sw_bottom = LLWorld::getInstance()->resolveLandHeightAgent( LLVector3( west, south, 0.f ) );
605 F32 se_bottom = gWorldp->resolveLandHeightAgent( LLVector3( east-FUDGE, south, 0.f ) ); 599 F32 se_bottom = LLWorld::getInstance()->resolveLandHeightAgent( LLVector3( east-FUDGE, south, 0.f ) );
606 F32 ne_bottom = gWorldp->resolveLandHeightAgent( LLVector3( east-FUDGE, north-FUDGE, 0.f ) ); 600 F32 ne_bottom = LLWorld::getInstance()->resolveLandHeightAgent( LLVector3( east-FUDGE, north-FUDGE, 0.f ) );
607 F32 nw_bottom = gWorldp->resolveLandHeightAgent( LLVector3( west, north-FUDGE, 0.f ) ); 601 F32 nw_bottom = LLWorld::getInstance()->resolveLandHeightAgent( LLVector3( west, north-FUDGE, 0.f ) );
608 602
609 // little hack to make nearby lines not Z-fight 603 // little hack to make nearby lines not Z-fight
610 east -= 0.1f; 604 east -= 0.1f;
@@ -856,11 +850,11 @@ void LLViewerParcelMgr::renderCollisionSegments(U8* segments, BOOL use_pass, LLV
856 850
857 if (use_pass && (mCollisionBanned == BA_NOT_ON_LIST)) 851 if (use_pass && (mCollisionBanned == BA_NOT_ON_LIST))
858 { 852 {
859 LLViewerImage::bindTexture( getPassImage() ); 853 LLViewerImage::bindTexture(mPassImage);
860 } 854 }
861 else 855 else
862 { 856 {
863 LLViewerImage::bindTexture( getBlockedImage() ); 857 LLViewerImage::bindTexture(mBlockedImage);
864 } 858 }
865 859
866 gGL.begin(GL_QUADS); 860 gGL.begin(GL_QUADS);
@@ -1013,7 +1007,7 @@ void LLViewerObjectList::renderObjectBeacons()
1013 } 1007 }
1014 1008
1015 S32 i; 1009 S32 i;
1016 //const LLFontGL *font = gResMgr->getRes(LLFONT_SANSSERIF); 1010 //const LLFontGL *font = LLResMgr::getInstance()->getRes(LLFONT_SANSSERIF);
1017 1011
1018 LLGLSUIDefault gls_ui; 1012 LLGLSUIDefault gls_ui;
1019 1013
diff --git a/linden/indra/newview/llglslshader.cpp b/linden/indra/newview/llglslshader.cpp
index 2a688e4..f0ad565 100644
--- a/linden/indra/newview/llglslshader.cpp
+++ b/linden/indra/newview/llglslshader.cpp
@@ -114,6 +114,9 @@ LLGLSLShader gGlowExtractProgram;
114LLGLSLShader gPostColorFilterProgram; 114LLGLSLShader gPostColorFilterProgram;
115LLGLSLShader gPostNightVisionProgram; 115LLGLSLShader gPostNightVisionProgram;
116 116
117// Deferred rendering shaders
118LLGLSLShader gDeferredDiffuseProgram;
119
117//current avatar shader parameter pointer 120//current avatar shader parameter pointer
118GLint gAvatarMatrixParam; 121GLint gAvatarMatrixParam;
119 122
@@ -732,7 +735,7 @@ void LLShaderMgr::setShaders()
732 if (gGLManager.mHasFramebufferObject && 735 if (gGLManager.mHasFramebufferObject &&
733 gSavedSettings.getBOOL("VertexShaderEnable")) 736 gSavedSettings.getBOOL("VertexShaderEnable"))
734 { 737 {
735 LLPipeline::sDynamicReflections = gSavedSettings.getBOOL("RenderDynamicReflections") && gGLManager.mHasCubeMap && gFeatureManagerp->isFeatureAvailable("RenderCubeMap"); 738 LLPipeline::sDynamicReflections = gSavedSettings.getBOOL("RenderDynamicReflections") && gGLManager.mHasCubeMap && LLFeatureManager::getInstance()->isFeatureAvailable("RenderCubeMap");
736 LLPipeline::sWaterReflections = gGLManager.mHasCubeMap; 739 LLPipeline::sWaterReflections = gGLManager.mHasCubeMap;
737 LLPipeline::sRenderGlow = gSavedSettings.getBOOL("RenderGlow"); 740 LLPipeline::sRenderGlow = gSavedSettings.getBOOL("RenderGlow");
738 } 741 }
@@ -762,7 +765,7 @@ void LLShaderMgr::setShaders()
762 } 765 }
763 sMaxAvatarShaderLevel = 0; 766 sMaxAvatarShaderLevel = 0;
764 767
765 if (gFeatureManagerp->isFeatureAvailable("VertexShaderEnable") 768 if (LLFeatureManager::getInstance()->isFeatureAvailable("VertexShaderEnable")
766 && gSavedSettings.getBOOL("VertexShaderEnable")) 769 && gSavedSettings.getBOOL("VertexShaderEnable"))
767 { 770 {
768 S32 light_class = 2; 771 S32 light_class = 2;
@@ -771,7 +774,7 @@ void LLShaderMgr::setShaders()
771 S32 effect_class = 2; 774 S32 effect_class = 2;
772 S32 wl_class = 2; 775 S32 wl_class = 2;
773 S32 water_class = 2; 776 S32 water_class = 2;
774 777 S32 deferred_class = 0;
775 if (!gSavedSettings.getBOOL("WindLightUseAtmosShaders")) 778 if (!gSavedSettings.getBOOL("WindLightUseAtmosShaders"))
776 { 779 {
777 // user has disabled WindLight in their settings, downgrade 780 // user has disabled WindLight in their settings, downgrade
@@ -784,7 +787,7 @@ void LLShaderMgr::setShaders()
784 // but class one would 787 // but class one would
785 // TODO: Make water on class one cards color things 788 // TODO: Make water on class one cards color things
786 // beneath it properly 789 // beneath it properly
787 if(gFeatureManagerp->getGPUClass() < GPU_CLASS_2) 790 if(LLFeatureManager::getInstance()->getGPUClass() < GPU_CLASS_2)
788 { 791 {
789 // use lesser water and other stuff 792 // use lesser water and other stuff
790 light_class = 2; 793 light_class = 2;
@@ -795,6 +798,16 @@ void LLShaderMgr::setShaders()
795 } 798 }
796 } 799 }
797 800
801 if (gSavedSettings.getBOOL("RenderDeferred"))
802 {
803 light_class = 1;
804 env_class = 0;
805 obj_class = 0;
806 water_class = 1;
807 effect_class = 1;
808 deferred_class = 1;
809 }
810
798 if(!gSavedSettings.getBOOL("EnableRippleWater")) 811 if(!gSavedSettings.getBOOL("EnableRippleWater"))
799 { 812 {
800 water_class = 0; 813 water_class = 0;
@@ -814,6 +827,7 @@ void LLShaderMgr::setShaders()
814 sVertexShaderLevel[SHADER_OBJECT] = obj_class; 827 sVertexShaderLevel[SHADER_OBJECT] = obj_class;
815 sVertexShaderLevel[SHADER_EFFECT] = effect_class; 828 sVertexShaderLevel[SHADER_EFFECT] = effect_class;
816 sVertexShaderLevel[SHADER_WINDLIGHT] = wl_class; 829 sVertexShaderLevel[SHADER_WINDLIGHT] = wl_class;
830 sVertexShaderLevel[SHADER_DEFERRED] = deferred_class;
817 831
818 BOOL loaded = loadBasicShaders(); 832 BOOL loaded = loadBasicShaders();
819 833
@@ -829,6 +843,7 @@ void LLShaderMgr::setShaders()
829 loadShadersWindLight(); 843 loadShadersWindLight();
830 loadShadersEffects(); 844 loadShadersEffects();
831 loadShadersInterface(); 845 loadShadersInterface();
846 loadShadersDeferred();
832 847
833 // Load max avatar shaders to set the max level 848 // Load max avatar shaders to set the max level
834 sVertexShaderLevel[SHADER_AVATAR] = 3; 849 sVertexShaderLevel[SHADER_AVATAR] = 3;
@@ -939,6 +954,8 @@ void LLShaderMgr::unloadShaders()
939 gPostColorFilterProgram.unload(); 954 gPostColorFilterProgram.unload();
940 gPostNightVisionProgram.unload(); 955 gPostNightVisionProgram.unload();
941 956
957 gDeferredDiffuseProgram.unload();
958
942 sVertexShaderLevel[SHADER_LIGHTING] = 0; 959 sVertexShaderLevel[SHADER_LIGHTING] = 0;
943 sVertexShaderLevel[SHADER_OBJECT] = 0; 960 sVertexShaderLevel[SHADER_OBJECT] = 0;
944 sVertexShaderLevel[SHADER_AVATAR] = 0; 961 sVertexShaderLevel[SHADER_AVATAR] = 0;
@@ -963,7 +980,7 @@ BOOL LLShaderMgr::loadBasicShaders()
963 // class zero we're not going to think about 980 // class zero we're not going to think about
964 // since a class zero card COULD be a ridiculous new card 981 // since a class zero card COULD be a ridiculous new card
965 // and old cards should have the features masked 982 // and old cards should have the features masked
966 if(gFeatureManagerp->getGPUClass() == GPU_CLASS_1) 983 if(LLFeatureManager::getInstance()->getGPUClass() == GPU_CLASS_1)
967 { 984 {
968 sum_lights_class = 2; 985 sum_lights_class = 2;
969 } 986 }
@@ -1061,10 +1078,7 @@ BOOL LLShaderMgr::loadShadersEnvironment()
1061 return FALSE; 1078 return FALSE;
1062 } 1079 }
1063 1080
1064 if (gWorldPointer) 1081 LLWorld::getInstance()->updateWaterObjects();
1065 {
1066 gWorldPointer->updateWaterObjects();
1067 }
1068 1082
1069 return TRUE; 1083 return TRUE;
1070} 1084}
@@ -1147,10 +1161,8 @@ BOOL LLShaderMgr::loadShadersWater()
1147 return loadShadersWater(); 1161 return loadShadersWater();
1148 } 1162 }
1149 1163
1150 if (gWorldPointer) 1164 LLWorld::getInstance()->updateWaterObjects();
1151 { 1165
1152 gWorldPointer->updateWaterObjects();
1153 }
1154 return TRUE; 1166 return TRUE;
1155} 1167}
1156 1168
@@ -1244,6 +1256,29 @@ BOOL LLShaderMgr::loadShadersEffects()
1244 1256
1245} 1257}
1246 1258
1259BOOL LLShaderMgr::loadShadersDeferred()
1260{
1261 if (sVertexShaderLevel[SHADER_DEFERRED] == 0)
1262 {
1263 gDeferredDiffuseProgram.unload();
1264 return FALSE;
1265 }
1266
1267 BOOL success = TRUE;
1268
1269 if (success)
1270 {
1271 gDeferredDiffuseProgram.mName = "Deffered Diffuse Shader";
1272 gDeferredDiffuseProgram.mShaderFiles.clear();
1273 gDeferredDiffuseProgram.mShaderFiles.push_back(make_pair("deferred/diffuseV.glsl", GL_VERTEX_SHADER_ARB));
1274 gDeferredDiffuseProgram.mShaderFiles.push_back(make_pair("deferred/diffuseF.glsl", GL_FRAGMENT_SHADER_ARB));
1275 gDeferredDiffuseProgram.mShaderLevel = sVertexShaderLevel[SHADER_DEFERRED];
1276 success = gDeferredDiffuseProgram.createShader(NULL, NULL);
1277 }
1278
1279 return success;
1280}
1281
1247BOOL LLShaderMgr::loadShadersObject() 1282BOOL LLShaderMgr::loadShadersObject()
1248{ 1283{
1249 BOOL success = TRUE; 1284 BOOL success = TRUE;
diff --git a/linden/indra/newview/llglslshader.h b/linden/indra/newview/llglslshader.h
index 41b0c59..f3f83da 100644
--- a/linden/indra/newview/llglslshader.h
+++ b/linden/indra/newview/llglslshader.h
@@ -149,6 +149,7 @@ public:
149 static S32 getVertexShaderLevel(S32 type); 149 static S32 getVertexShaderLevel(S32 type);
150 static BOOL loadBasicShaders(); 150 static BOOL loadBasicShaders();
151 static BOOL loadShadersEffects(); 151 static BOOL loadShadersEffects();
152 static BOOL loadShadersDeferred();
152 static BOOL loadShadersObject(); 153 static BOOL loadShadersObject();
153 static BOOL loadShadersAvatar(); 154 static BOOL loadShadersAvatar();
154 static BOOL loadShadersEnvironment(); 155 static BOOL loadShadersEnvironment();
@@ -219,6 +220,7 @@ public:
219 SHADER_EFFECT, 220 SHADER_EFFECT,
220 SHADER_WINDLIGHT, 221 SHADER_WINDLIGHT,
221 SHADER_WATER, 222 SHADER_WATER,
223 SHADER_DEFERRED,
222 SHADER_COUNT 224 SHADER_COUNT
223 }; 225 };
224 226
@@ -406,6 +408,9 @@ extern LLGLSLShader gWLCloudProgram;
406extern LLGLSLShader gPostColorFilterProgram; 408extern LLGLSLShader gPostColorFilterProgram;
407extern LLGLSLShader gPostNightVisionProgram; 409extern LLGLSLShader gPostNightVisionProgram;
408 410
411// Deferred rendering shaders
412extern LLGLSLShader gDeferredDiffuseProgram;
413
409//current avatar shader parameter pointer 414//current avatar shader parameter pointer
410extern GLint gAvatarMatrixParam; 415extern GLint gAvatarMatrixParam;
411 416
diff --git a/linden/indra/newview/llgroupmgr.cpp b/linden/indra/newview/llgroupmgr.cpp
index af6a6aa..7ea28e0 100644
--- a/linden/indra/newview/llgroupmgr.cpp
+++ b/linden/indra/newview/llgroupmgr.cpp
@@ -53,8 +53,6 @@
53#include "llfloatergroupinfo.h" 53#include "llfloatergroupinfo.h"
54#include "lluictrlfactory.h" 54#include "lluictrlfactory.h"
55 55
56LLGroupMgr sGroupMgr; // use local instance so that it gets cleaned up on application exit
57LLGroupMgr* gGroupMgr = &sGroupMgr;
58 56
59const U32 MAX_CACHED_GROUPS = 10; 57const U32 MAX_CACHED_GROUPS = 10;
60 58
@@ -705,7 +703,7 @@ void LLGroupMgrGroupData::sendRoleChanges()
705 // If we create a new role, then we need to re-fetch all the role data. 703 // If we create a new role, then we need to re-fetch all the role data.
706 if (need_role_data) 704 if (need_role_data)
707 { 705 {
708 gGroupMgr->sendGroupRoleDataRequest(getID()); 706 LLGroupMgr::getInstance()->sendGroupRoleDataRequest(getID());
709 } 707 }
710 708
711 // Clean up change lists 709 // Clean up change lists
@@ -811,7 +809,7 @@ void LLGroupMgr::processGroupMembersReply(LLMessageSystem* msg, void** data)
811 LLUUID request_id; 809 LLUUID request_id;
812 msg->getUUIDFast(_PREHASH_GroupData, _PREHASH_RequestID, request_id); 810 msg->getUUIDFast(_PREHASH_GroupData, _PREHASH_RequestID, request_id);
813 811
814 LLGroupMgrGroupData* group_datap = gGroupMgr->createGroupData(group_id); 812 LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->createGroupData(group_id);
815 if (group_datap->mMemberRequestID != request_id) 813 if (group_datap->mMemberRequestID != request_id)
816 { 814 {
817 llwarns << "processGroupMembersReply: Received incorrect (stale?) request id" << llendl; 815 llwarns << "processGroupMembersReply: Received incorrect (stale?) request id" << llendl;
@@ -867,7 +865,7 @@ void LLGroupMgr::processGroupMembersReply(LLMessageSystem* msg, void** data)
867 //if group members are loaded while titles are missing, load the titles. 865 //if group members are loaded while titles are missing, load the titles.
868 if(group_datap->mTitles.size() < 1) 866 if(group_datap->mTitles.size() < 1)
869 { 867 {
870 gGroupMgr->sendGroupTitlesRequest(group_id); 868 LLGroupMgr::getInstance()->sendGroupTitlesRequest(group_id);
871 } 869 }
872 } 870 }
873 871
@@ -879,12 +877,12 @@ void LLGroupMgr::processGroupMembersReply(LLMessageSystem* msg, void** data)
879 if (group_datap->mPendingRoleMemberRequest) 877 if (group_datap->mPendingRoleMemberRequest)
880 { 878 {
881 group_datap->mPendingRoleMemberRequest = FALSE; 879 group_datap->mPendingRoleMemberRequest = FALSE;
882 gGroupMgr->sendGroupRoleMembersRequest(group_datap->mID); 880 LLGroupMgr::getInstance()->sendGroupRoleMembersRequest(group_datap->mID);
883 } 881 }
884 } 882 }
885 883
886 group_datap->mChanged = TRUE; 884 group_datap->mChanged = TRUE;
887 gGroupMgr->notifyObservers(GC_MEMBER_DATA); 885 LLGroupMgr::getInstance()->notifyObservers(GC_MEMBER_DATA);
888} 886}
889 887
890//static 888//static
@@ -933,7 +931,7 @@ void LLGroupMgr::processGroupPropertiesReply(LLMessageSystem* msg, void** data)
933 msg->getBOOL("GroupData", "MaturePublish", mature); 931 msg->getBOOL("GroupData", "MaturePublish", mature);
934 msg->getUUID(_PREHASH_GroupData, "OwnerRole", owner_role); 932 msg->getUUID(_PREHASH_GroupData, "OwnerRole", owner_role);
935 933
936 LLGroupMgrGroupData* group_datap = gGroupMgr->createGroupData(group_id); 934 LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->createGroupData(group_id);
937 935
938 group_datap->mName = name; 936 group_datap->mName = name;
939 group_datap->mCharter = charter; 937 group_datap->mCharter = charter;
@@ -951,7 +949,7 @@ void LLGroupMgr::processGroupPropertiesReply(LLMessageSystem* msg, void** data)
951 group_datap->mGroupPropertiesDataComplete = TRUE; 949 group_datap->mGroupPropertiesDataComplete = TRUE;
952 group_datap->mChanged = TRUE; 950 group_datap->mChanged = TRUE;
953 951
954 gGroupMgr->notifyObservers(GC_PROPERTIES); 952 LLGroupMgr::getInstance()->notifyObservers(GC_PROPERTIES);
955} 953}
956 954
957// static 955// static
@@ -972,7 +970,7 @@ void LLGroupMgr::processGroupRoleDataReply(LLMessageSystem* msg, void** data)
972 LLUUID request_id; 970 LLUUID request_id;
973 msg->getUUIDFast(_PREHASH_GroupData, _PREHASH_RequestID, request_id); 971 msg->getUUIDFast(_PREHASH_GroupData, _PREHASH_RequestID, request_id);
974 972
975 LLGroupMgrGroupData* group_data = gGroupMgr->createGroupData(group_id); 973 LLGroupMgrGroupData* group_data = LLGroupMgr::getInstance()->createGroupData(group_id);
976 if (group_data->mRoleDataRequestID != request_id) 974 if (group_data->mRoleDataRequestID != request_id)
977 { 975 {
978 llwarns << "processGroupRoleDataReply: Received incorrect (stale?) request id" << llendl; 976 llwarns << "processGroupRoleDataReply: Received incorrect (stale?) request id" << llendl;
@@ -1013,12 +1011,12 @@ void LLGroupMgr::processGroupRoleDataReply(LLMessageSystem* msg, void** data)
1013 if (group_data->mPendingRoleMemberRequest) 1011 if (group_data->mPendingRoleMemberRequest)
1014 { 1012 {
1015 group_data->mPendingRoleMemberRequest = FALSE; 1013 group_data->mPendingRoleMemberRequest = FALSE;
1016 gGroupMgr->sendGroupRoleMembersRequest(group_data->mID); 1014 LLGroupMgr::getInstance()->sendGroupRoleMembersRequest(group_data->mID);
1017 } 1015 }
1018 } 1016 }
1019 1017
1020 group_data->mChanged = TRUE; 1018 group_data->mChanged = TRUE;
1021 gGroupMgr->notifyObservers(GC_ROLE_DATA); 1019 LLGroupMgr::getInstance()->notifyObservers(GC_ROLE_DATA);
1022} 1020}
1023 1021
1024// static 1022// static
@@ -1042,7 +1040,7 @@ void LLGroupMgr::processGroupRoleMembersReply(LLMessageSystem* msg, void** data)
1042 U32 total_pairs; 1040 U32 total_pairs;
1043 msg->getU32(_PREHASH_AgentData, "TotalPairs", total_pairs); 1041 msg->getU32(_PREHASH_AgentData, "TotalPairs", total_pairs);
1044 1042
1045 LLGroupMgrGroupData* group_data = gGroupMgr->createGroupData(group_id); 1043 LLGroupMgrGroupData* group_data = LLGroupMgr::getInstance()->createGroupData(group_id);
1046 1044
1047 if (group_data->mRoleMembersRequestID != request_id) 1045 if (group_data->mRoleMembersRequestID != request_id)
1048 { 1046 {
@@ -1127,7 +1125,7 @@ void LLGroupMgr::processGroupRoleMembersReply(LLMessageSystem* msg, void** data)
1127 } 1125 }
1128 1126
1129 group_data->mChanged = TRUE; 1127 group_data->mChanged = TRUE;
1130 gGroupMgr->notifyObservers(GC_ROLE_MEMBER_DATA); 1128 LLGroupMgr::getInstance()->notifyObservers(GC_ROLE_MEMBER_DATA);
1131} 1129}
1132 1130
1133// static 1131// static
@@ -1145,7 +1143,7 @@ void LLGroupMgr::processGroupTitlesReply(LLMessageSystem* msg, void** data)
1145 LLUUID group_id; 1143 LLUUID group_id;
1146 msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_GroupID, group_id ); 1144 msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_GroupID, group_id );
1147 1145
1148 LLGroupMgrGroupData* group_data = gGroupMgr->createGroupData(group_id); 1146 LLGroupMgrGroupData* group_data = LLGroupMgr::getInstance()->createGroupData(group_id);
1149 1147
1150 LLUUID request_id; 1148 LLUUID request_id;
1151 msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_RequestID, request_id); 1149 msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_RequestID, request_id);
@@ -1177,7 +1175,7 @@ void LLGroupMgr::processGroupTitlesReply(LLMessageSystem* msg, void** data)
1177 } 1175 }
1178 1176
1179 group_data->mChanged = TRUE; 1177 group_data->mChanged = TRUE;
1180 gGroupMgr->notifyObservers(GC_TITLES); 1178 LLGroupMgr::getInstance()->notifyObservers(GC_TITLES);
1181} 1179}
1182 1180
1183// static 1181// static
@@ -1210,7 +1208,7 @@ void LLGroupMgr::processJoinGroupReply(LLMessageSystem* msg, void ** data)
1210 // refresh all group information 1208 // refresh all group information
1211 gAgent.sendAgentDataUpdateRequest(); 1209 gAgent.sendAgentDataUpdateRequest();
1212 1210
1213 gGroupMgr->clearGroupData(group_id); 1211 LLGroupMgr::getInstance()->clearGroupData(group_id);
1214 // refresh the floater for this group, if any. 1212 // refresh the floater for this group, if any.
1215 LLFloaterGroupInfo::refreshGroup(group_id); 1213 LLFloaterGroupInfo::refreshGroup(group_id);
1216 // refresh the group panel of the search window, if necessary. 1214 // refresh the group panel of the search window, if necessary.
@@ -1232,7 +1230,7 @@ void LLGroupMgr::processLeaveGroupReply(LLMessageSystem* msg, void ** data)
1232 // refresh all group information 1230 // refresh all group information
1233 gAgent.sendAgentDataUpdateRequest(); 1231 gAgent.sendAgentDataUpdateRequest();
1234 1232
1235 gGroupMgr->clearGroupData(group_id); 1233 LLGroupMgr::getInstance()->clearGroupData(group_id);
1236 // close the floater for this group, if any. 1234 // close the floater for this group, if any.
1237 LLFloaterGroupInfo::closeGroup(group_id); 1235 LLFloaterGroupInfo::closeGroup(group_id);
1238 // refresh the group panel of the search window, if necessary. 1236 // refresh the group panel of the search window, if necessary.
@@ -1286,11 +1284,11 @@ LLGroupMgrGroupData* LLGroupMgr::createGroupData(const LLUUID& id)
1286{ 1284{
1287 LLGroupMgrGroupData* group_datap; 1285 LLGroupMgrGroupData* group_datap;
1288 1286
1289 group_map_t::iterator existing_group = gGroupMgr->mGroups.find(id); 1287 group_map_t::iterator existing_group = LLGroupMgr::getInstance()->mGroups.find(id);
1290 if (existing_group == gGroupMgr->mGroups.end()) 1288 if (existing_group == LLGroupMgr::getInstance()->mGroups.end())
1291 { 1289 {
1292 group_datap = new LLGroupMgrGroupData(id); 1290 group_datap = new LLGroupMgrGroupData(id);
1293 gGroupMgr->addGroup(group_datap); 1291 LLGroupMgr::getInstance()->addGroup(group_datap);
1294 } 1292 }
1295 else 1293 else
1296 { 1294 {
@@ -1647,7 +1645,7 @@ void LLGroupMgr::sendGroupMemberEjects(const LLUUID& group_id,
1647 bool start_message = true; 1645 bool start_message = true;
1648 LLMessageSystem* msg = gMessageSystem; 1646 LLMessageSystem* msg = gMessageSystem;
1649 1647
1650 LLGroupMgrGroupData* group_datap = gGroupMgr->getGroupData(group_id); 1648 LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->getGroupData(group_id);
1651 if (!group_datap) return; 1649 if (!group_datap) return;
1652 1650
1653 for (std::vector<LLUUID>::iterator it = member_ids.begin(); 1651 for (std::vector<LLUUID>::iterator it = member_ids.begin();
@@ -1832,7 +1830,7 @@ bool LLGroupMgr::parseRoleActions(const LLString& xml_filename)
1832 role_action_data->mPowerBit = set_power_mask; 1830 role_action_data->mPowerBit = set_power_mask;
1833 role_action_set->mActionSetData = role_action_data; 1831 role_action_set->mActionSetData = role_action_data;
1834 1832
1835 gGroupMgr->mRoleActionSets.push_back(role_action_set); 1833 LLGroupMgr::getInstance()->mRoleActionSets.push_back(role_action_set);
1836 } 1834 }
1837 return true; 1835 return true;
1838} 1836}
@@ -1840,7 +1838,7 @@ bool LLGroupMgr::parseRoleActions(const LLString& xml_filename)
1840// static 1838// static
1841void LLGroupMgr::debugClearAllGroups(void*) 1839void LLGroupMgr::debugClearAllGroups(void*)
1842{ 1840{
1843 gGroupMgr->clearGroups(); 1841 LLGroupMgr::getInstance()->clearGroups();
1844 LLGroupMgr::parseRoleActions("role_actions.xml"); 1842 LLGroupMgr::parseRoleActions("role_actions.xml");
1845} 1843}
1846 1844
diff --git a/linden/indra/newview/llgroupmgr.h b/linden/indra/newview/llgroupmgr.h
index 89be4bf..709bfd8 100644
--- a/linden/indra/newview/llgroupmgr.h
+++ b/linden/indra/newview/llgroupmgr.h
@@ -295,7 +295,7 @@ struct LLRoleActionSet
295 std::vector<LLRoleAction*> mActions; 295 std::vector<LLRoleAction*> mActions;
296}; 296};
297 297
298class LLGroupMgr 298class LLGroupMgr : public LLSingleton<LLGroupMgr>
299{ 299{
300 LOG_CLASS(LLGroupMgr); 300 LOG_CLASS(LLGroupMgr);
301 301
@@ -350,19 +350,18 @@ public:
350 static void debugClearAllGroups(void*); 350 static void debugClearAllGroups(void*);
351 void clearGroups(); 351 void clearGroups();
352 void clearGroupData(const LLUUID& group_id); 352 void clearGroupData(const LLUUID& group_id);
353protected: 353
354private:
354 void notifyObservers(LLGroupChange gc); 355 void notifyObservers(LLGroupChange gc);
355 void addGroup(LLGroupMgrGroupData* group_datap); 356 void addGroup(LLGroupMgrGroupData* group_datap);
356 LLGroupMgrGroupData* createGroupData(const LLUUID &id); 357 LLGroupMgrGroupData* createGroupData(const LLUUID &id);
357 358
358protected:
359 typedef std::multimap<LLUUID,LLGroupMgrObserver*> observer_multimap_t; 359 typedef std::multimap<LLUUID,LLGroupMgrObserver*> observer_multimap_t;
360 observer_multimap_t mObservers; 360 observer_multimap_t mObservers;
361 typedef std::map<LLUUID, LLGroupMgrGroupData*> group_map_t; 361 typedef std::map<LLUUID, LLGroupMgrGroupData*> group_map_t;
362 group_map_t mGroups; 362 group_map_t mGroups;
363}; 363};
364 364
365extern LLGroupMgr* gGroupMgr;
366 365
367#endif 366#endif
368 367
diff --git a/linden/indra/newview/llgroupnotify.cpp b/linden/indra/newview/llgroupnotify.cpp
index cae784b..5b6c3ca 100644
--- a/linden/indra/newview/llgroupnotify.cpp
+++ b/linden/indra/newview/llgroupnotify.cpp
@@ -159,18 +159,23 @@ LLGroupNotifyBox::LLGroupNotifyBox(const char* subject,
159 S32 y = TOP; 159 S32 y = TOP;
160 S32 x = HPAD + HPAD; 160 S32 x = HPAD + HPAD;
161 161
162 class NoticeText : public LLTextBox
163 {
164 public:
165 NoticeText(const LLString& name, const LLRect& rect, const LLString& text = LLString::null, const LLFontGL* font = NULL)
166 : LLTextBox(name, rect, text, font)
167 {
168 setHAlign(LLFontGL::RIGHT);
169 setFontStyle(LLFontGL::DROP_SHADOW_SOFT);
170 setBorderVisible(FALSE);
171 setColor( gColors.getColor("GroupNotifyTextColor") );
172 setBackgroundColor( gColors.getColor("GroupNotifyBoxColor") );
173 }
174 };
175
162 176
163 // Title 177 // Title
164 LLTextBox* line; 178 addChild(new NoticeText("title",LLRect(x,y,RIGHT - HPAD,y - LINE_HEIGHT),"Group Notice",LLFontGL::sSansSerifHuge));
165
166 line = new LLTextBox("title",LLRect(x,y,RIGHT - HPAD,y - LINE_HEIGHT),"Group Notice",LLFontGL::sSansSerifHuge);
167 line->setHAlign(LLFontGL::RIGHT);
168 line->setFontStyle(LLFontGL::DROP_SHADOW_SOFT);
169 line->setBorderVisible(FALSE);
170 line->setColor(LLColor4::white);
171 line->setBackgroundColor( gColors.getColor("GroupNotifyBoxColor") );
172
173 addChild(line);
174 179
175 y -= llfloor(1.5f*LINE_HEIGHT); 180 y -= llfloor(1.5f*LINE_HEIGHT);
176 181
@@ -179,28 +184,25 @@ LLGroupNotifyBox::LLGroupNotifyBox(const char* subject,
179 std::stringstream from; 184 std::stringstream from;
180 from << "Sent by " << from_name << ", " << group_name; 185 from << "Sent by " << from_name << ", " << group_name;
181 186
182 line = new LLTextBox("group",LLRect(x,y,RIGHT - HPAD,y - LINE_HEIGHT),from.str().c_str(),LLFontGL::sSansSerif); 187 addChild(new NoticeText("group",LLRect(x,y,RIGHT - HPAD,y - LINE_HEIGHT),from.str().c_str(),LLFontGL::sSansSerif));
183 line->setFontStyle(LLFontGL::DROP_SHADOW_SOFT);
184 line->setHAlign(LLFontGL::RIGHT);
185 line->setBorderVisible(FALSE);
186 line->setColor(LLColor4::white);
187 line->setBackgroundColor( gColors.getColor("GroupNotifyBoxColor") );
188 addChild(line);
189 188
190 y -= (LINE_HEIGHT + VPAD); 189 y -= (LINE_HEIGHT + VPAD);
190 x = HPAD + HPAD;
191 191
192 LLUUID icon_id(gViewerArt.getString("notify_box_icon.tga"));
193 // TODO: change this to be the group icon. 192 // TODO: change this to be the group icon.
194 if (!group_insignia.isNull()) 193 if (!group_insignia.isNull())
195 { 194 {
196 icon_id = group_insignia; 195 icon = new LLIconCtrl("icon",
196 LLRect(x, y, x+ICON_WIDTH, y-ICON_WIDTH),
197 group_insignia);
198 }
199 else
200 {
201 icon = new LLIconCtrl("icon",
202 LLRect(x, y, x+ICON_WIDTH, y-ICON_WIDTH),
203 "notify_box_icon.tga");
197 } 204 }
198 205
199 x = HPAD + HPAD;
200
201 icon = new LLIconCtrl("icon",
202 LLRect(x, y, x+ICON_WIDTH, y-ICON_WIDTH),
203 icon_id);
204 icon->setMouseOpaque(FALSE); 206 icon->setMouseOpaque(FALSE);
205 addChild(icon); 207 addChild(icon);
206 208
@@ -244,14 +246,9 @@ LLGroupNotifyBox::LLGroupNotifyBox(const char* subject,
244 246
245 if (mHasInventory) 247 if (mHasInventory)
246 { 248 {
247 line = new LLTextBox("subjecttitle",LLRect(x,y,x + LABEL_WIDTH,y - LINE_HEIGHT),"Attached: ",LLFontGL::sSansSerif); 249 addChild(new NoticeText("subjecttitle",LLRect(x,y,x + LABEL_WIDTH,y - LINE_HEIGHT),"Attached: ",LLFontGL::sSansSerif));
248 line->setBorderVisible(FALSE);
249 line->setColor(LLColor4::white);
250 line->setFontStyle(LLFontGL::DROP_SHADOW_SOFT);
251 line->setBackgroundColor( gColors.getColor("GroupNotifyBoxColor") );
252 addChild(line);
253 250
254 LLViewerImage* item_icon = get_item_icon(mInventoryOffer->mType, 251 LLUIImagePtr item_icon = get_item_icon(mInventoryOffer->mType,
255 LLInventoryType::IT_TEXTURE, 252 LLInventoryType::IT_TEXTURE,
256 0, FALSE); 253 0, FALSE);
257 254
@@ -260,7 +257,7 @@ LLGroupNotifyBox::LLGroupNotifyBox(const char* subject,
260 257
261 std::stringstream ss; 258 std::stringstream ss;
262 ss << " " << inventory_name; 259 ss << " " << inventory_name;
263 line = new LLTextBox("object_name",LLRect(x,y,RIGHT - HPAD,y - LINE_HEIGHT),ss.str().c_str(),LLFontGL::sSansSerif); 260 LLTextBox *line = new LLTextBox("object_name",LLRect(x,y,RIGHT - HPAD,y - LINE_HEIGHT),ss.str().c_str(),LLFontGL::sSansSerif);
264 line->setEnabled(FALSE); 261 line->setEnabled(FALSE);
265 line->setBorderVisible(TRUE); 262 line->setBorderVisible(TRUE);
266 line->setDisabledColor(LLColor4::blue4); 263 line->setDisabledColor(LLColor4::blue4);
@@ -271,21 +268,22 @@ LLGroupNotifyBox::LLGroupNotifyBox(const char* subject,
271 268
272 icon = new LLIconCtrl("icon", 269 icon = new LLIconCtrl("icon",
273 LLRect(x, y, x+16, y-16), 270 LLRect(x, y, x+16, y-16),
274 item_icon->getID()); 271 item_icon->getName());
275 icon->setMouseOpaque(FALSE); 272 icon->setMouseOpaque(FALSE);
276 addChild(icon); 273 addChild(icon);
277 } 274 }
278 275
279 LLButton* btn; 276 LLButton* btn;
280 btn = new LLButton("next", 277 btn = new LLButton("next",
281 LLRect(getRect().getWidth()-24, BOTTOM_PAD+16, getRect().getWidth()-8, BOTTOM_PAD), 278 LLRect(getRect().getWidth()-26, BOTTOM_PAD + 20, getRect().getWidth()-2, BOTTOM_PAD),
282 "notify_next.tga", 279 "notify_next.png",
283 "notify_next.tga", 280 "notify_next.png",
284 "", 281 "",
285 onClickNext, 282 onClickNext,
286 this, 283 this,
287 LLFontGL::sSansSerif); 284 LLFontGL::sSansSerif);
288 btn->setToolTip(LLString("Next")); // *TODO: Translate 285 btn->setToolTip(LLString("Next")); // *TODO: Translate
286 btn->setScaleImage(TRUE);
289 addChild(btn); 287 addChild(btn);
290 mNextBtn = btn; 288 mNextBtn = btn;
291 289
@@ -357,13 +355,8 @@ LLGroupNotifyBox::~LLGroupNotifyBox()
357// virtual 355// virtual
358BOOL LLGroupNotifyBox::handleRightMouseDown(S32 x, S32 y, MASK mask) 356BOOL LLGroupNotifyBox::handleRightMouseDown(S32 x, S32 y, MASK mask)
359{ 357{
360 if (getVisible() && getEnabled() && pointInView(x,y)) 358 moveToBack();
361 { 359 return TRUE;
362 moveToBack();
363 return TRUE;
364 }
365
366 return LLPanel::handleRightMouseDown(x, y, mask);
367} 360}
368 361
369 362
diff --git a/linden/indra/newview/llhoverview.cpp b/linden/indra/newview/llhoverview.cpp
index 316ba0b..6cc3873 100644
--- a/linden/indra/newview/llhoverview.cpp
+++ b/linden/indra/newview/llhoverview.cpp
@@ -106,20 +106,10 @@ LLHoverView::~LLHoverView()
106{ 106{
107} 107}
108 108
109EWidgetType LLHoverView::getWidgetType() const
110{
111 return WIDGET_TYPE_HOVER_VIEW;
112}
113
114LLString LLHoverView::getWidgetTag() const
115{
116 return LL_HOVER_VIEW_TAG;
117}
118
119void LLHoverView::updateHover(LLTool* current_tool) 109void LLHoverView::updateHover(LLTool* current_tool)
120{ 110{
121 BOOL picking_tool = ( current_tool == gToolPie 111 BOOL picking_tool = ( current_tool == LLToolPie::getInstance()
122 || current_tool == gToolParcel ); 112 || current_tool == LLToolSelectLand::getInstance() );
123 113
124 mUseHover = !gAgent.cameraMouselook() 114 mUseHover = !gAgent.cameraMouselook()
125 && picking_tool 115 && picking_tool
@@ -127,8 +117,8 @@ void LLHoverView::updateHover(LLTool* current_tool)
127 if (mUseHover) 117 if (mUseHover)
128 { 118 {
129 if ((gViewerWindow->getMouseVelocityStat()->getPrev(0) < 0.01f) 119 if ((gViewerWindow->getMouseVelocityStat()->getPrev(0) < 0.01f)
130 && (gCamera->getAngularVelocityStat()->getPrev(0) < 0.01f) 120 && (LLViewerCamera::getInstance()->getAngularVelocityStat()->getPrev(0) < 0.01f)
131 && (gCamera->getVelocityStat()->getPrev(0) < 0.01f)) 121 && (LLViewerCamera::getInstance()->getVelocityStat()->getPrev(0) < 0.01f))
132 { 122 {
133 if (!mStartHoverPickTimer) 123 if (!mStartHoverPickTimer)
134 { 124 {
@@ -164,7 +154,7 @@ void LLHoverView::pickCallback(S32 x, S32 y, MASK mask)
164 if (hit_obj) 154 if (hit_obj)
165 { 155 {
166 gHoverView->setHoverActive(TRUE); 156 gHoverView->setHoverActive(TRUE);
167 gSelectMgr->setHoverObject(hit_obj); 157 LLSelectMgr::getInstance()->setHoverObject(hit_obj);
168 gHoverView->mLastHoverObject = hit_obj; 158 gHoverView->mLastHoverObject = hit_obj;
169 gHoverView->mHoverOffset = gViewerWindow->lastObjectHitOffset(); 159 gHoverView->mHoverOffset = gViewerWindow->lastObjectHitOffset();
170 } 160 }
@@ -178,7 +168,7 @@ void LLHoverView::pickCallback(S32 x, S32 y, MASK mask)
178 { 168 {
179 gHoverView->setHoverActive(TRUE); 169 gHoverView->setHoverActive(TRUE);
180 gHoverView->mHoverLandGlobal = gLastHitPosGlobal; 170 gHoverView->mHoverLandGlobal = gLastHitPosGlobal;
181 gParcelMgr->requestHoverParcelProperties( gHoverView->mHoverLandGlobal ); 171 LLViewerParcelMgr::getInstance()->requestHoverParcelProperties( gHoverView->mHoverLandGlobal );
182 } 172 }
183 else 173 else
184 { 174 {
@@ -200,7 +190,7 @@ void LLHoverView::cancelHover()
200 mDoneHoverPick = FALSE; 190 mDoneHoverPick = FALSE;
201 mStartHoverPickTimer = FALSE; 191 mStartHoverPickTimer = FALSE;
202 192
203 gSelectMgr->setHoverObject(NULL); 193 LLSelectMgr::getInstance()->setHoverObject(NULL);
204 // Can't do this, some code relies on hover object still being 194 // Can't do this, some code relies on hover object still being
205 // set after the hover is cancelled! Dammit. JC 195 // set after the hover is cancelled! Dammit. JC
206 // mLastHoverObject = NULL; 196 // mLastHoverObject = NULL;
@@ -279,7 +269,7 @@ void LLHoverView::updateText()
279 // 269 //
280 BOOL suppressObjectHoverDisplay = !gSavedSettings.getBOOL("ShowAllObjectHoverTip"); 270 BOOL suppressObjectHoverDisplay = !gSavedSettings.getBOOL("ShowAllObjectHoverTip");
281 271
282 LLSelectNode *nodep = gSelectMgr->getHoverNode();; 272 LLSelectNode *nodep = LLSelectMgr::getInstance()->getHoverNode();;
283 if (nodep) 273 if (nodep)
284 { 274 {
285 line.clear(); 275 line.clear();
@@ -455,7 +445,7 @@ void LLHoverView::updateText()
455 // Didn't hit an object, but since we have a land point we 445 // Didn't hit an object, but since we have a land point we
456 // must be hovering over land. 446 // must be hovering over land.
457 447
458 LLParcel* hover_parcel = gParcelMgr->getHoverParcel(); 448 LLParcel* hover_parcel = LLViewerParcelMgr::getInstance()->getHoverParcel();
459 LLUUID owner; 449 LLUUID owner;
460 S32 width = 0; 450 S32 width = 0;
461 S32 height = 0; 451 S32 height = 0;
@@ -463,8 +453,8 @@ void LLHoverView::updateText()
463 if ( hover_parcel ) 453 if ( hover_parcel )
464 { 454 {
465 owner = hover_parcel->getOwnerID(); 455 owner = hover_parcel->getOwnerID();
466 width = S32(gParcelMgr->getHoverParcelWidth()); 456 width = S32(LLViewerParcelMgr::getInstance()->getHoverParcelWidth());
467 height = S32(gParcelMgr->getHoverParcelHeight()); 457 height = S32(LLViewerParcelMgr::getInstance()->getHoverParcelHeight());
468 } 458 }
469 459
470 // Line: "Land" 460 // Line: "Land"
@@ -602,11 +592,6 @@ void LLHoverView::updateText()
602 592
603void LLHoverView::draw() 593void LLHoverView::draw()
604{ 594{
605 if( !getVisible() )
606 {
607 return;
608 }
609
610 if ( !isHovering() ) 595 if ( !isHovering() )
611 { 596 {
612 return; 597 return;
@@ -615,7 +600,10 @@ void LLHoverView::draw()
615 // To toggle off hover tips, you have to just suppress the draw. 600 // To toggle off hover tips, you have to just suppress the draw.
616 // The picking is still needed to do cursor changes over physical 601 // The picking is still needed to do cursor changes over physical
617 // and scripted objects. JC 602 // and scripted objects. JC
618 if (!sShowHoverTips) return; 603 if (!sShowHoverTips)
604 {
605 return;
606 }
619 607
620 const F32 MAX_HOVER_DISPLAY_SECS = 5.f; 608 const F32 MAX_HOVER_DISPLAY_SECS = 5.f;
621 if (mHoverTimer.getElapsedTimeF32() > MAX_HOVER_DISPLAY_SECS) 609 if (mHoverTimer.getElapsedTimeF32() > MAX_HOVER_DISPLAY_SECS)
@@ -662,10 +650,10 @@ void LLHoverView::draw()
662 return; 650 return;
663 } 651 }
664 652
665 LLViewerImage* box_imagep = gImageList.getImage(LLUUID(gViewerArt.getString("rounded_square.tga")), MIPMAP_FALSE, TRUE); 653 LLUIImagePtr box_imagep = LLUI::getUIImage("rounded_square.tga");
666 LLViewerImage* shadow_imagep = gImageList.getImage(LLUUID(gViewerArt.getString("rounded_square_soft.tga")), MIPMAP_FALSE, TRUE); 654 LLUIImagePtr shadow_imagep = LLUI::getUIImage("rounded_square_soft.tga");
667 655
668 const LLFontGL* fontp = gResMgr->getRes(LLFONT_SANSSERIF_SMALL); 656 const LLFontGL* fontp = LLResMgr::getInstance()->getRes(LLFONT_SANSSERIF_SMALL);
669 657
670 // Render text. 658 // Render text.
671 LLColor4 text_color = gColors.getColor("ToolTipTextColor"); 659 LLColor4 text_color = gColors.getColor("ToolTipTextColor");
@@ -714,14 +702,10 @@ void LLHoverView::draw()
714 702
715 shadow_color.mV[VALPHA] = 0.7f * alpha; 703 shadow_color.mV[VALPHA] = 0.7f * alpha;
716 S32 shadow_offset = gSavedSettings.getS32("DropShadowTooltip"); 704 S32 shadow_offset = gSavedSettings.getS32("DropShadowTooltip");
717 gGL.color4fv(shadow_color.mV); 705 shadow_imagep->draw(LLRect(left + shadow_offset, top - shadow_offset, right + shadow_offset, bottom - shadow_offset), shadow_color);
718 LLViewerImage::bindTexture(shadow_imagep);
719 gl_segmented_rect_2d_tex(left + shadow_offset, top - shadow_offset, right + shadow_offset, bottom - shadow_offset, shadow_imagep->getWidth(), shadow_imagep->getHeight(), 16);
720 706
721 bg_color.mV[VALPHA] = alpha; 707 bg_color.mV[VALPHA] = alpha;
722 gGL.color4fv(bg_color.mV); 708 box_imagep->draw(LLRect(left, top, right, bottom), bg_color);
723 LLViewerImage::bindTexture(box_imagep);
724 gl_segmented_rect_2d_tex(left, top, right, bottom, box_imagep->getWidth(), box_imagep->getHeight(), 16);
725 709
726 S32 cur_offset = top - 4; 710 S32 cur_offset = top - 4;
727 for (text_list_t::iterator iter = mText.begin(); iter != mText.end(); ++iter) 711 for (text_list_t::iterator iter = mText.begin(); iter != mText.end(); ++iter)
diff --git a/linden/indra/newview/llhoverview.h b/linden/indra/newview/llhoverview.h
index ae74c44..5d76cc7 100644
--- a/linden/indra/newview/llhoverview.h
+++ b/linden/indra/newview/llhoverview.h
@@ -55,9 +55,6 @@ public:
55 LLHoverView(const std::string& name, const LLRect& rect); 55 LLHoverView(const std::string& name, const LLRect& rect);
56 ~LLHoverView(); 56 ~LLHoverView();
57 57
58 virtual EWidgetType getWidgetType() const;
59 virtual LLString getWidgetTag() const;
60
61 /*virtual*/ void draw(); 58 /*virtual*/ void draw();
62 59
63 void updateHover(LLTool* current_tool); 60 void updateHover(LLTool* current_tool);
@@ -105,7 +102,7 @@ protected:
105 // If not null and not dead, we're over an object. 102 // If not null and not dead, we're over an object.
106 LLPointer<LLViewerObject> mLastHoverObject; 103 LLPointer<LLViewerObject> mLastHoverObject;
107 104
108 // If not LLVector3d::zero, we're over land. 105 // If not LLVector3d::ZERO, we're over land.
109 LLVector3d mHoverLandGlobal; 106 LLVector3d mHoverLandGlobal;
110 LLVector3d mHoverOffset; 107 LLVector3d mHoverOffset;
111 108
diff --git a/linden/indra/newview/llhudeffect.cpp b/linden/indra/newview/llhudeffect.cpp
index 0a3e6c7..5cc35af 100644
--- a/linden/indra/newview/llhudeffect.cpp
+++ b/linden/indra/newview/llhudeffect.cpp
@@ -36,7 +36,7 @@
36#include "message.h" 36#include "message.h"
37#include "llgl.h" 37#include "llgl.h"
38#include "llagent.h" 38#include "llagent.h"
39#include "llsphere.h" 39#include "llrendersphere.h"
40#include "llimagegl.h" 40#include "llimagegl.h"
41 41
42#include "llviewerobjectlist.h" 42#include "llviewerobjectlist.h"
diff --git a/linden/indra/newview/llhudeffectbeam.cpp b/linden/indra/newview/llhudeffectbeam.cpp
index 2ba9ade..d6c38d3 100644
--- a/linden/indra/newview/llhudeffectbeam.cpp
+++ b/linden/indra/newview/llhudeffectbeam.cpp
@@ -43,7 +43,7 @@
43#include "llglheaders.h" 43#include "llglheaders.h"
44#include "llhudrender.h" 44#include "llhudrender.h"
45#include "llimagegl.h" 45#include "llimagegl.h"
46#include "llsphere.h" 46#include "llrendersphere.h"
47#include "llviewercamera.h" 47#include "llviewercamera.h"
48#include "llvoavatar.h" 48#include "llvoavatar.h"
49#include "llviewercontrol.h" 49#include "llviewercontrol.h"
@@ -274,7 +274,7 @@ void LLHUDEffectBeam::render()
274 274
275 // Init the color of the particles 275 // Init the color of the particles
276 LLColor4U coloru = mColor; 276 LLColor4U coloru = mColor;
277 277
278 // Draw the particles 278 // Draw the particles
279 S32 i; 279 S32 i;
280 for (i = 0; i < NUM_POINTS; i++) 280 for (i = 0; i < NUM_POINTS; i++)
diff --git a/linden/indra/newview/llhudeffectlookat.cpp b/linden/indra/newview/llhudeffectlookat.cpp
index 4cd69bb..abe2a66 100644
--- a/linden/indra/newview/llhudeffectlookat.cpp
+++ b/linden/indra/newview/llhudeffectlookat.cpp
@@ -40,7 +40,7 @@
40#include "llvoavatar.h" 40#include "llvoavatar.h"
41#include "lldrawable.h" 41#include "lldrawable.h"
42#include "llviewerobjectlist.h" 42#include "llviewerobjectlist.h"
43#include "llsphere.h" 43#include "llrendersphere.h"
44#include "llselectmgr.h" 44#include "llselectmgr.h"
45#include "llglheaders.h" 45#include "llglheaders.h"
46 46
@@ -400,7 +400,11 @@ BOOL LLHUDEffectLookAt::setLookAt(ELookAtType target_type, LLViewerObject *objec
400 return FALSE; 400 return FALSE;
401 } 401 }
402 402
403 llassert(target_type < LOOKAT_NUM_TARGETS); 403 if (target_type >= LOOKAT_NUM_TARGETS)
404 {
405 llwarns << "Bad target_type " << (int)target_type << " - ignoring." << llendl;
406 return FALSE;
407 }
404 408
405 // must be same or higher priority than existing effect 409 // must be same or higher priority than existing effect
406 if ((*mAttentions)[target_type].mPriority < (*mAttentions)[mTargetType].mPriority) 410 if ((*mAttentions)[target_type].mPriority < (*mAttentions)[mTargetType].mPriority)
@@ -557,12 +561,13 @@ void LLHUDEffectLookAt::update()
557 561
558 if (mTargetType != LOOKAT_TARGET_NONE) 562 if (mTargetType != LOOKAT_TARGET_NONE)
559 { 563 {
560 calcTargetPosition(); 564 if (calcTargetPosition())
561
562 LLMotion* head_motion = ((LLVOAvatar*)(LLViewerObject*)mSourceObject)->findMotion(ANIM_AGENT_HEAD_ROT);
563 if (!head_motion || head_motion->isStopped())
564 { 565 {
565 ((LLVOAvatar*)(LLViewerObject*)mSourceObject)->startMotion(ANIM_AGENT_HEAD_ROT); 566 LLMotion* head_motion = ((LLVOAvatar*)(LLViewerObject*)mSourceObject)->findMotion(ANIM_AGENT_HEAD_ROT);
567 if (!head_motion || head_motion->isStopped())
568 {
569 ((LLVOAvatar*)(LLViewerObject*)mSourceObject)->startMotion(ANIM_AGENT_HEAD_ROT);
570 }
566 } 571 }
567 } 572 }
568 573
@@ -579,12 +584,14 @@ void LLHUDEffectLookAt::update()
579 * 584 *
580 * Has the side-effect of also calling setAnimationData("LookAtPoint") with the new 585 * Has the side-effect of also calling setAnimationData("LookAtPoint") with the new
581 * mTargetPos on the source object which is assumed to be an avatar. 586 * mTargetPos on the source object which is assumed to be an avatar.
587 *
588 * Returns whether we successfully calculated a finite target position.
582 */ 589 */
583void LLHUDEffectLookAt::calcTargetPosition() 590bool LLHUDEffectLookAt::calcTargetPosition()
584{ 591{
585 if (gNoRender) 592 if (gNoRender)
586 { 593 {
587 return; 594 return false;
588 } 595 }
589 596
590 LLViewerObject *target_obj = (LLViewerObject *)mTargetObject; 597 LLViewerObject *target_obj = (LLViewerObject *)mTargetObject;
@@ -659,5 +666,11 @@ void LLHUDEffectLookAt::calcTargetPosition()
659 } 666 }
660 667
661 mTargetPos -= source_avatar->mHeadp->getWorldPosition(); 668 mTargetPos -= source_avatar->mHeadp->getWorldPosition();
669
670 if (!mTargetPos.isFinite())
671 return false;
672
662 source_avatar->setAnimationData("LookAtPoint", (void *)&mTargetPos); 673 source_avatar->setAnimationData("LookAtPoint", (void *)&mTargetPos);
674
675 return true;
663} 676}
diff --git a/linden/indra/newview/llhudeffectlookat.h b/linden/indra/newview/llhudeffectlookat.h
index cc64c67..918805d 100644
--- a/linden/indra/newview/llhudeffectlookat.h
+++ b/linden/indra/newview/llhudeffectlookat.h
@@ -68,7 +68,7 @@ public:
68 ELookAtType getLookAtType() { return mTargetType; } 68 ELookAtType getLookAtType() { return mTargetType; }
69 const LLVector3& getTargetPos() { return mTargetPos; } 69 const LLVector3& getTargetPos() { return mTargetPos; }
70 const LLVector3d& getTargetOffset() { return mTargetOffsetGlobal; } 70 const LLVector3d& getTargetOffset() { return mTargetOffsetGlobal; }
71 void calcTargetPosition(); 71 bool calcTargetPosition();
72 72
73protected: 73protected:
74 LLHUDEffectLookAt(const U8 type); 74 LLHUDEffectLookAt(const U8 type);
diff --git a/linden/indra/newview/llhudeffectpointat.cpp b/linden/indra/newview/llhudeffectpointat.cpp
index c47705b..97e3bd7 100644
--- a/linden/indra/newview/llhudeffectpointat.cpp
+++ b/linden/indra/newview/llhudeffectpointat.cpp
@@ -232,7 +232,11 @@ BOOL LLHUDEffectPointAt::setPointAt(EPointAtType target_type, LLViewerObject *ob
232 return FALSE; 232 return FALSE;
233 } 233 }
234 234
235 llassert(target_type < POINTAT_NUM_TARGETS); 235 if (target_type >= POINTAT_NUM_TARGETS)
236 {
237 llwarns << "Bad target_type " << (int)target_type << " - ignoring." << llendl;
238 return FALSE;
239 }
236 240
237 // must be same or higher priority than existing effect 241 // must be same or higher priority than existing effect
238 if (POINTAT_PRIORITIES[target_type] < POINTAT_PRIORITIES[mTargetType]) 242 if (POINTAT_PRIORITIES[target_type] < POINTAT_PRIORITIES[mTargetType])
@@ -379,17 +383,19 @@ void LLHUDEffectPointAt::update()
379 } 383 }
380 else 384 else
381 { 385 {
382 calcTargetPosition(); 386 if (calcTargetPosition())
383 387 {
384 ((LLVOAvatar*)(LLViewerObject*)mSourceObject)->startMotion(ANIM_AGENT_EDITING); 388 ((LLVOAvatar*)(LLViewerObject*)mSourceObject)->startMotion(ANIM_AGENT_EDITING);
389 }
385 } 390 }
386 } 391 }
387} 392}
388 393
389//----------------------------------------------------------------------------- 394//-----------------------------------------------------------------------------
390// calcTargetPosition() 395// calcTargetPosition()
396// returns whether we successfully calculated a finite target position.
391//----------------------------------------------------------------------------- 397//-----------------------------------------------------------------------------
392void LLHUDEffectPointAt::calcTargetPosition() 398bool LLHUDEffectPointAt::calcTargetPosition()
393{ 399{
394 LLViewerObject *targetObject = (LLViewerObject *)mTargetObject; 400 LLViewerObject *targetObject = (LLViewerObject *)mTargetObject;
395 LLVector3 local_offset; 401 LLVector3 local_offset;
@@ -435,10 +441,15 @@ void LLHUDEffectPointAt::calcTargetPosition()
435 441
436 mTargetPos -= mSourceObject->getRenderPosition(); 442 mTargetPos -= mSourceObject->getRenderPosition();
437 443
444 if (!mTargetPos.isFinite())
445 return false;
446
438 if (mSourceObject->isAvatar()) 447 if (mSourceObject->isAvatar())
439 { 448 {
440 ((LLVOAvatar*)(LLViewerObject*)mSourceObject)->setAnimationData("PointAtPoint", (void *)&mTargetPos); 449 ((LLVOAvatar*)(LLViewerObject*)mSourceObject)->setAnimationData("PointAtPoint", (void *)&mTargetPos);
441 } 450 }
451
452 return true;
442} 453}
443 454
444const LLVector3d LLHUDEffectPointAt::getPointAtPosGlobal() 455const LLVector3d LLHUDEffectPointAt::getPointAtPosGlobal()
diff --git a/linden/indra/newview/llhudeffectpointat.h b/linden/indra/newview/llhudeffectpointat.h
index f9d864e..8df796c 100644
--- a/linden/indra/newview/llhudeffectpointat.h
+++ b/linden/indra/newview/llhudeffectpointat.h
@@ -71,7 +71,7 @@ protected:
71 // lookat behavior has either target position or target object with offset 71 // lookat behavior has either target position or target object with offset
72 void setTargetObjectAndOffset(LLViewerObject *objp, LLVector3d offset); 72 void setTargetObjectAndOffset(LLViewerObject *objp, LLVector3d offset);
73 void setTargetPosGlobal(const LLVector3d &target_pos_global); 73 void setTargetPosGlobal(const LLVector3d &target_pos_global);
74 void calcTargetPosition(); 74 bool calcTargetPosition();
75 void update(); 75 void update();
76public: 76public:
77 static BOOL sDebugPointAt; 77 static BOOL sDebugPointAt;
diff --git a/linden/indra/newview/llhudeffecttrail.cpp b/linden/indra/newview/llhudeffecttrail.cpp
index ce5905d..c0ed148 100644
--- a/linden/indra/newview/llhudeffecttrail.cpp
+++ b/linden/indra/newview/llhudeffecttrail.cpp
@@ -196,7 +196,7 @@ void LLHUDEffectSpiral::triggerLocal()
196 psb->setSourceObject(mSourceObject); 196 psb->setSourceObject(mSourceObject);
197 psb->setTargetObject(mTargetObject); 197 psb->setTargetObject(mTargetObject);
198 psb->setOwnerUUID(gAgent.getID()); 198 psb->setOwnerUUID(gAgent.getID());
199 gWorldPointer->mPartSim.addPartSource(psb); 199 LLViewerPartSim::getInstance()->addPartSource(psb);
200 mPartSourcep = psb; 200 mPartSourcep = psb;
201 } 201 }
202 } 202 }
@@ -212,7 +212,7 @@ void LLHUDEffectSpiral::triggerLocal()
212 psb->setColor(color); 212 psb->setColor(color);
213 psb->mLKGTargetPosGlobal = mPositionGlobal; 213 psb->mLKGTargetPosGlobal = mPositionGlobal;
214 psb->setOwnerUUID(gAgent.getID()); 214 psb->setOwnerUUID(gAgent.getID());
215 gWorldPointer->mPartSim.addPartSource(psb); 215 LLViewerPartSim::getInstance()->addPartSource(psb);
216 mPartSourcep = psb; 216 mPartSourcep = psb;
217 } 217 }
218 } 218 }
@@ -234,7 +234,7 @@ void LLHUDEffectSpiral::triggerLocal()
234 } 234 }
235 pss->setColor(color); 235 pss->setColor(color);
236 pss->setOwnerUUID(gAgent.getID()); 236 pss->setOwnerUUID(gAgent.getID());
237 gWorldPointer->mPartSim.addPartSource(pss); 237 LLViewerPartSim::getInstance()->addPartSource(pss);
238 mPartSourcep = pss; 238 mPartSourcep = pss;
239 } 239 }
240 } 240 }
diff --git a/linden/indra/newview/llhudicon.cpp b/linden/indra/newview/llhudicon.cpp
index 393c932..22d157c 100644
--- a/linden/indra/newview/llhudicon.cpp
+++ b/linden/indra/newview/llhudicon.cpp
@@ -102,28 +102,28 @@ void LLHUDIcon::renderIcon(BOOL for_select)
102 102
103 // put icon above object, and in front 103 // put icon above object, and in front
104 // RN: don't use drawable radius, it's fricking HUGE 104 // RN: don't use drawable radius, it's fricking HUGE
105 LLVector3 icon_relative_pos = (gCamera->getUpAxis() * ~mSourceObject->getRenderRotation()); 105 LLVector3 icon_relative_pos = (LLViewerCamera::getInstance()->getUpAxis() * ~mSourceObject->getRenderRotation());
106 icon_relative_pos.abs(); 106 icon_relative_pos.abs();
107 107
108 F32 distance_scale = llmin(mSourceObject->getScale().mV[VX] / icon_relative_pos.mV[VX], 108 F32 distance_scale = llmin(mSourceObject->getScale().mV[VX] / icon_relative_pos.mV[VX],
109 mSourceObject->getScale().mV[VY] / icon_relative_pos.mV[VY], 109 mSourceObject->getScale().mV[VY] / icon_relative_pos.mV[VY],
110 mSourceObject->getScale().mV[VZ] / icon_relative_pos.mV[VZ]); 110 mSourceObject->getScale().mV[VZ] / icon_relative_pos.mV[VZ]);
111 F32 up_distance = 0.5f * distance_scale; 111 F32 up_distance = 0.5f * distance_scale;
112 LLVector3 icon_position = obj_position + (up_distance * gCamera->getUpAxis()) * 1.2f; 112 LLVector3 icon_position = obj_position + (up_distance * LLViewerCamera::getInstance()->getUpAxis()) * 1.2f;
113 113
114 LLVector3 icon_to_cam = gCamera->getOrigin() - icon_position; 114 LLVector3 icon_to_cam = LLViewerCamera::getInstance()->getOrigin() - icon_position;
115 icon_to_cam.normVec(); 115 icon_to_cam.normVec();
116 116
117 icon_position += icon_to_cam * mSourceObject->mDrawable->getRadius() * 1.1f; 117 icon_position += icon_to_cam * mSourceObject->mDrawable->getRadius() * 1.1f;
118 118
119 mDistance = dist_vec(icon_position, gCamera->getOrigin()); 119 mDistance = dist_vec(icon_position, LLViewerCamera::getInstance()->getOrigin());
120 120
121 F32 alpha_factor = for_select ? 1.f : clamp_rescale(mDistance, DIST_START_FADE, DIST_END_FADE, 1.f, 0.f); 121 F32 alpha_factor = for_select ? 1.f : clamp_rescale(mDistance, DIST_START_FADE, DIST_END_FADE, 1.f, 0.f);
122 122
123 LLVector3 x_pixel_vec; 123 LLVector3 x_pixel_vec;
124 LLVector3 y_pixel_vec; 124 LLVector3 y_pixel_vec;
125 125
126 gCamera->getPixelVectors(icon_position, y_pixel_vec, x_pixel_vec); 126 LLViewerCamera::getInstance()->getPixelVectors(icon_position, y_pixel_vec, x_pixel_vec);
127 127
128 F32 scale_factor = 1.f; 128 F32 scale_factor = 1.f;
129 if (mAnimTimer.getElapsedTimeF32() < ANIM_TIME) 129 if (mAnimTimer.getElapsedTimeF32() < ANIM_TIME)
diff --git a/linden/indra/newview/llhudmanager.cpp b/linden/indra/newview/llhudmanager.cpp
index 2c38943..5217893 100644
--- a/linden/indra/newview/llhudmanager.cpp
+++ b/linden/indra/newview/llhudmanager.cpp
@@ -42,8 +42,6 @@
42#include "llviewercontrol.h" 42#include "llviewercontrol.h"
43#include "llviewerobjectlist.h" 43#include "llviewerobjectlist.h"
44 44
45LLHUDManager *gHUDManager = NULL;
46
47extern BOOL gNoRender; 45extern BOOL gNoRender;
48 46
49// These are loaded from saved settings. 47// These are loaded from saved settings.
@@ -60,7 +58,6 @@ LLHUDManager::LLHUDManager()
60 58
61LLHUDManager::~LLHUDManager() 59LLHUDManager::~LLHUDManager()
62{ 60{
63 mHUDEffects.reset();
64} 61}
65 62
66 63
@@ -110,6 +107,12 @@ void LLHUDManager::sendEffects()
110 } 107 }
111} 108}
112 109
110//static
111void LLHUDManager::shutdownClass()
112{
113 getInstance()->mHUDEffects.reset();
114}
115
113void LLHUDManager::cleanupEffects() 116void LLHUDManager::cleanupEffects()
114{ 117{
115 S32 i = 0; 118 S32 i = 0;
@@ -155,12 +158,6 @@ void LLHUDManager::processViewerEffect(LLMessageSystem *mesgsys, void **user_dat
155 return; 158 return;
156 } 159 }
157 160
158 if (!gHUDManager)
159 {
160 llwarns << "No gHUDManager!" << llendl;
161 return;
162 }
163
164 LLHUDEffect *effectp = NULL; 161 LLHUDEffect *effectp = NULL;
165 LLUUID effect_id; 162 LLUUID effect_id;
166 U8 effect_type = 0; 163 U8 effect_type = 0;
@@ -172,20 +169,20 @@ void LLHUDManager::processViewerEffect(LLMessageSystem *mesgsys, void **user_dat
172 effectp = NULL; 169 effectp = NULL;
173 LLHUDEffect::getIDType(mesgsys, k, effect_id, effect_type); 170 LLHUDEffect::getIDType(mesgsys, k, effect_id, effect_type);
174 S32 i; 171 S32 i;
175 for (i = 0; i < gHUDManager->mHUDEffects.count(); i++) 172 for (i = 0; i < LLHUDManager::getInstance()->mHUDEffects.count(); i++)
176 { 173 {
177 LLHUDEffect *cur_effectp = gHUDManager->mHUDEffects[i]; 174 LLHUDEffect *cur_effectp = LLHUDManager::getInstance()->mHUDEffects[i];
178 if (!cur_effectp) 175 if (!cur_effectp)
179 { 176 {
180 llwarns << "Null effect in effect manager, skipping" << llendl; 177 llwarns << "Null effect in effect manager, skipping" << llendl;
181 gHUDManager->mHUDEffects.remove(i); 178 LLHUDManager::getInstance()->mHUDEffects.remove(i);
182 i--; 179 i--;
183 continue; 180 continue;
184 } 181 }
185 if (cur_effectp->isDead()) 182 if (cur_effectp->isDead())
186 { 183 {
187 // llwarns << "Dead effect in effect manager, removing" << llendl; 184 // llwarns << "Dead effect in effect manager, removing" << llendl;
188 gHUDManager->mHUDEffects.remove(i); 185 LLHUDManager::getInstance()->mHUDEffects.remove(i);
189 i--; 186 i--;
190 continue; 187 continue;
191 } 188 }
@@ -204,7 +201,7 @@ void LLHUDManager::processViewerEffect(LLMessageSystem *mesgsys, void **user_dat
204 { 201 {
205 if (!effectp) 202 if (!effectp)
206 { 203 {
207 effectp = gHUDManager->createViewerEffect(effect_type, FALSE, FALSE); 204 effectp = LLHUDManager::getInstance()->createViewerEffect(effect_type, FALSE, FALSE);
208 } 205 }
209 206
210 if (effectp) 207 if (effectp)
diff --git a/linden/indra/newview/llhudmanager.h b/linden/indra/newview/llhudmanager.h
index cf63784..cfe9cad 100644
--- a/linden/indra/newview/llhudmanager.h
+++ b/linden/indra/newview/llhudmanager.h
@@ -44,7 +44,7 @@ class LLHUDAnimalControls;
44// End Ventrella 44// End Ventrella
45class LLMessageSystem; 45class LLMessageSystem;
46 46
47class LLHUDManager 47class LLHUDManager : public LLSingleton<LLHUDManager>
48{ 48{
49public: 49public:
50 LLHUDManager(); 50 LLHUDManager();
@@ -56,6 +56,8 @@ public:
56 void sendEffects(); 56 void sendEffects();
57 void cleanupEffects(); 57 void cleanupEffects();
58 58
59 static void shutdownClass();
60
59 static void processViewerEffect(LLMessageSystem *mesgsys, void **user_data); 61 static void processViewerEffect(LLMessageSystem *mesgsys, void **user_data);
60 62
61 static LLColor4 sParentColor; 63 static LLColor4 sParentColor;
@@ -65,6 +67,4 @@ protected:
65 LLDynamicArrayPtr<LLPointer<LLHUDEffect> > mHUDEffects; 67 LLDynamicArrayPtr<LLPointer<LLHUDEffect> > mHUDEffects;
66}; 68};
67 69
68extern LLHUDManager *gHUDManager;
69
70#endif // LL_LLHUDMANAGER_H 70#endif // LL_LLHUDMANAGER_H
diff --git a/linden/indra/newview/llhudrender.cpp b/linden/indra/newview/llhudrender.cpp
index df1fa46..556b6d6 100644
--- a/linden/indra/newview/llhudrender.cpp
+++ b/linden/indra/newview/llhudrender.cpp
@@ -61,10 +61,10 @@ void hud_render_text(const LLWString &wstr, const LLVector3 &pos_agent,
61 const BOOL orthographic) 61 const BOOL orthographic)
62{ 62{
63 // Do cheap plane culling 63 // Do cheap plane culling
64 LLVector3 dir_vec = pos_agent - gCamera->getOrigin(); 64 LLVector3 dir_vec = pos_agent - LLViewerCamera::getInstance()->getOrigin();
65 dir_vec /= dir_vec.magVec(); 65 dir_vec /= dir_vec.magVec();
66 66
67 if (wstr.empty() || (!orthographic && dir_vec * gCamera->getAtAxis() <= 0.f)) 67 if (wstr.empty() || (!orthographic && dir_vec * LLViewerCamera::getInstance()->getAtAxis() <= 0.f))
68 { 68 {
69 return; 69 return;
70 } 70 }
@@ -78,15 +78,15 @@ void hud_render_text(const LLWString &wstr, const LLVector3 &pos_agent,
78 } 78 }
79 else 79 else
80 { 80 {
81 gCamera->getPixelVectors(pos_agent, up_axis, right_axis); 81 LLViewerCamera::getInstance()->getPixelVectors(pos_agent, up_axis, right_axis);
82 } 82 }
83 LLCoordFrame render_frame = *gCamera; 83 LLCoordFrame render_frame = *LLViewerCamera::getInstance();
84 LLQuaternion rot; 84 LLQuaternion rot;
85 if (!orthographic) 85 if (!orthographic)
86 { 86 {
87 rot = render_frame.getQuaternion(); 87 rot = render_frame.getQuaternion();
88 rot = rot * LLQuaternion(-F_PI_BY_TWO, gCamera->getYAxis()); 88 rot = rot * LLQuaternion(-F_PI_BY_TWO, LLViewerCamera::getInstance()->getYAxis());
89 rot = rot * LLQuaternion(F_PI_BY_TWO, gCamera->getXAxis()); 89 rot = rot * LLQuaternion(F_PI_BY_TWO, LLViewerCamera::getInstance()->getXAxis());
90 } 90 }
91 else 91 else
92 { 92 {
diff --git a/linden/indra/newview/llhudtext.cpp b/linden/indra/newview/llhudtext.cpp
index 5dc016e..92caf8e 100644
--- a/linden/indra/newview/llhudtext.cpp
+++ b/linden/indra/newview/llhudtext.cpp
@@ -76,6 +76,7 @@ const F32 LOD_2_SCREEN_COVERAGE = 0.40f;
76std::set<LLPointer<LLHUDText> > LLHUDText::sTextObjects; 76std::set<LLPointer<LLHUDText> > LLHUDText::sTextObjects;
77std::vector<LLPointer<LLHUDText> > LLHUDText::sVisibleTextObjects; 77std::vector<LLPointer<LLHUDText> > LLHUDText::sVisibleTextObjects;
78std::vector<LLPointer<LLHUDText> > LLHUDText::sVisibleHUDTextObjects; 78std::vector<LLPointer<LLHUDText> > LLHUDText::sVisibleHUDTextObjects;
79BOOL LLHUDText::sDisplayText = TRUE ;
79 80
80bool lltextobject_further_away::operator()(const LLPointer<LLHUDText>& lhs, const LLPointer<LLHUDText>& rhs) const 81bool lltextobject_further_away::operator()(const LLPointer<LLHUDText>& lhs, const LLPointer<LLHUDText>& rhs) const
81{ 82{
@@ -120,7 +121,7 @@ LLHUDText::~LLHUDText()
120 121
121void LLHUDText::render() 122void LLHUDText::render()
122{ 123{
123 if (!mOnHUDAttachment) 124 if (!mOnHUDAttachment && sDisplayText)
124 { 125 {
125 LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE); 126 LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
126 renderText(FALSE); 127 renderText(FALSE);
@@ -174,9 +175,7 @@ void LLHUDText::renderText(BOOL for_select)
174 mOffsetY = lltrunc(mHeight * ((mVertAlignment == ALIGN_VERT_CENTER) ? 0.5f : 1.f)); 175 mOffsetY = lltrunc(mHeight * ((mVertAlignment == ALIGN_VERT_CENTER) ? 0.5f : 1.f));
175 176
176 // *TODO: cache this image 177 // *TODO: cache this image
177 LLUUID image_id; 178 LLUIImagePtr imagep = LLUI::getUIImage("rounded_square.tga");
178 image_id.set(gViewerArt.getString("rounded_square.tga"));
179 LLViewerImage* imagep = gImageList.getImage(image_id, MIPMAP_FALSE, TRUE);
180 179
181 // *TODO: make this a per-text setting 180 // *TODO: make this a per-text setting
182 LLColor4 bg_color = gSavedSettings.getColor4("BackgroundChatColor"); 181 LLColor4 bg_color = gSavedSettings.getColor4("BackgroundChatColor");
@@ -210,10 +209,10 @@ void LLHUDText::renderText(BOOL for_select)
210 } 209 }
211 else 210 else
212 { 211 {
213 gCamera->getPixelVectors(mPositionAgent, y_pixel_vec, x_pixel_vec); 212 LLViewerCamera::getInstance()->getPixelVectors(mPositionAgent, y_pixel_vec, x_pixel_vec);
214 } 213 }
215 214
216 LLVector2 border_scale_vec((F32)border_width / (F32)imagep->getWidth(), (F32)border_height / (F32)imagep->getHeight()); 215 LLVector2 border_scale_vec((F32)border_width / (F32)imagep->getTextureWidth(), (F32)border_height / (F32)imagep->getTextureHeight());
217 LLVector3 width_vec = mWidth * x_pixel_vec; 216 LLVector3 width_vec = mWidth * x_pixel_vec;
218 LLVector3 height_vec = mHeight * y_pixel_vec; 217 LLVector3 height_vec = mHeight * y_pixel_vec;
219 LLVector3 scaled_border_width = (F32)llfloor(border_scale * (F32)border_width) * x_pixel_vec; 218 LLVector3 scaled_border_width = (F32)llfloor(border_scale * (F32)border_width) * x_pixel_vec;
@@ -222,7 +221,7 @@ void LLHUDText::renderText(BOOL for_select)
222 mRadius = (width_vec + height_vec).magVec() * 0.5f; 221 mRadius = (width_vec + height_vec).magVec() * 0.5f;
223 222
224 LLCoordGL screen_pos; 223 LLCoordGL screen_pos;
225 gCamera->projectPosAgentToScreen(mPositionAgent, screen_pos, FALSE); 224 LLViewerCamera::getInstance()->projectPosAgentToScreen(mPositionAgent, screen_pos, FALSE);
226 225
227 LLVector2 screen_offset; 226 LLVector2 screen_offset;
228 if (!mUseBubble) 227 if (!mUseBubble)
@@ -245,7 +244,7 @@ void LLHUDText::renderText(BOOL for_select)
245 //} 244 //}
246 //else 245 //else
247 //{ 246 //{
248 // render_position = gCamera->roundToPixel(render_position); 247 // render_position = LLViewerCamera::getInstance()->roundToPixel(render_position);
249 //} 248 //}
250 249
251 if (mUseBubble) 250 if (mUseBubble)
@@ -271,7 +270,7 @@ void LLHUDText::renderText(BOOL for_select)
271 } 270 }
272 else 271 else
273 { 272 {
274 LLViewerImage::bindTexture(imagep); 273 LLViewerImage::bindTexture(imagep->getImage());
275 274
276 gGL.color4fv(bg_color.mV); 275 gGL.color4fv(bg_color.mV);
277 gl_segmented_rect_3d_tex(border_scale_vec, scaled_border_width, scaled_border_height, width_vec, height_vec); 276 gl_segmented_rect_3d_tex(border_scale_vec, scaled_border_width, scaled_border_height, width_vec, height_vec);
@@ -615,25 +614,25 @@ void LLHUDText::updateVisibility()
615 } 614 }
616 615
617 // push text towards camera by radius of object, but not past camera 616 // push text towards camera by radius of object, but not past camera
618 LLVector3 vec_from_camera = mPositionAgent - gCamera->getOrigin(); 617 LLVector3 vec_from_camera = mPositionAgent - LLViewerCamera::getInstance()->getOrigin();
619 LLVector3 dir_from_camera = vec_from_camera; 618 LLVector3 dir_from_camera = vec_from_camera;
620 dir_from_camera.normVec(); 619 dir_from_camera.normVec();
621 620
622 if (dir_from_camera * gCamera->getAtAxis() <= 0.f) 621 if (dir_from_camera * LLViewerCamera::getInstance()->getAtAxis() <= 0.f)
623 { 622 {
624 mPositionAgent -= projected_vec(vec_from_camera, gCamera->getAtAxis()) * 1.f; 623 mPositionAgent -= projected_vec(vec_from_camera, LLViewerCamera::getInstance()->getAtAxis()) * 1.f;
625 mPositionAgent += gCamera->getAtAxis() * (gCamera->getNear() + 0.1f); 624 mPositionAgent += LLViewerCamera::getInstance()->getAtAxis() * (LLViewerCamera::getInstance()->getNear() + 0.1f);
626 } 625 }
627 else if (vec_from_camera * gCamera->getAtAxis() <= gCamera->getNear() + 0.1f + mSourceObject->getVObjRadius()) 626 else if (vec_from_camera * LLViewerCamera::getInstance()->getAtAxis() <= LLViewerCamera::getInstance()->getNear() + 0.1f + mSourceObject->getVObjRadius())
628 { 627 {
629 mPositionAgent = gCamera->getOrigin() + vec_from_camera * ((gCamera->getNear() + 0.1f) / (vec_from_camera * gCamera->getAtAxis())); 628 mPositionAgent = LLViewerCamera::getInstance()->getOrigin() + vec_from_camera * ((LLViewerCamera::getInstance()->getNear() + 0.1f) / (vec_from_camera * LLViewerCamera::getInstance()->getAtAxis()));
630 } 629 }
631 else 630 else
632 { 631 {
633 mPositionAgent -= dir_from_camera * mSourceObject->getVObjRadius(); 632 mPositionAgent -= dir_from_camera * mSourceObject->getVObjRadius();
634 } 633 }
635 634
636 mLastDistance = (mPositionAgent - gCamera->getOrigin()).magVec(); 635 mLastDistance = (mPositionAgent - LLViewerCamera::getInstance()->getOrigin()).magVec();
637 636
638 if (mLOD >= 3 || !mTextSegments.size() || (mDoFade && (mLastDistance > mFadeDistance + mFadeRange))) 637 if (mLOD >= 3 || !mTextSegments.size() || (mDoFade && (mLastDistance > mFadeDistance + mFadeRange)))
639 { 638 {
@@ -644,14 +643,14 @@ void LLHUDText::updateVisibility()
644 LLVector3 x_pixel_vec; 643 LLVector3 x_pixel_vec;
645 LLVector3 y_pixel_vec; 644 LLVector3 y_pixel_vec;
646 645
647 gCamera->getPixelVectors(mPositionAgent, y_pixel_vec, x_pixel_vec); 646 LLViewerCamera::getInstance()->getPixelVectors(mPositionAgent, y_pixel_vec, x_pixel_vec);
648 647
649 LLVector3 render_position = mPositionAgent + 648 LLVector3 render_position = mPositionAgent +
650 (x_pixel_vec * mPositionOffset.mV[VX]) + 649 (x_pixel_vec * mPositionOffset.mV[VX]) +
651 (y_pixel_vec * mPositionOffset.mV[VY]); 650 (y_pixel_vec * mPositionOffset.mV[VY]);
652 651
653 mOffscreen = FALSE; 652 mOffscreen = FALSE;
654 if (!gCamera->sphereInFrustum(render_position, mRadius)) 653 if (!LLViewerCamera::getInstance()->sphereInFrustum(render_position, mRadius))
655 { 654 {
656 if (!mVisibleOffScreen) 655 if (!mVisibleOffScreen)
657 { 656 {
@@ -674,9 +673,9 @@ LLVector2 LLHUDText::updateScreenPos(LLVector2 &offset)
674 LLVector2 screen_pos_vec; 673 LLVector2 screen_pos_vec;
675 LLVector3 x_pixel_vec; 674 LLVector3 x_pixel_vec;
676 LLVector3 y_pixel_vec; 675 LLVector3 y_pixel_vec;
677 gCamera->getPixelVectors(mPositionAgent, y_pixel_vec, x_pixel_vec); 676 LLViewerCamera::getInstance()->getPixelVectors(mPositionAgent, y_pixel_vec, x_pixel_vec);
678 LLVector3 world_pos = mPositionAgent + (offset.mV[VX] * x_pixel_vec) + (offset.mV[VY] * y_pixel_vec); 677 LLVector3 world_pos = mPositionAgent + (offset.mV[VX] * x_pixel_vec) + (offset.mV[VY] * y_pixel_vec);
679 if (!gCamera->projectPosAgentToScreen(world_pos, screen_pos, FALSE) && mVisibleOffScreen) 678 if (!LLViewerCamera::getInstance()->projectPosAgentToScreen(world_pos, screen_pos, FALSE) && mVisibleOffScreen)
680 { 679 {
681 // bubble off-screen, so find a spot for it along screen edge 680 // bubble off-screen, so find a spot for it along screen edge
682 LLVector2 window_center(gViewerWindow->getWindowDisplayWidth() * 0.5f, gViewerWindow->getWindowDisplayHeight() * 0.5f); 681 LLVector2 window_center(gViewerWindow->getWindowDisplayWidth() * 0.5f, gViewerWindow->getWindowDisplayHeight() * 0.5f);
@@ -684,7 +683,7 @@ LLVector2 LLHUDText::updateScreenPos(LLVector2 &offset)
684 screen_pos.mY - window_center.mV[VY]); 683 screen_pos.mY - window_center.mV[VY]);
685 delta_from_center.normVec(); 684 delta_from_center.normVec();
686 685
687 F32 camera_aspect = gCamera->getAspect(); 686 F32 camera_aspect = LLViewerCamera::getInstance()->getAspect();
688 F32 delta_aspect = llabs(delta_from_center.mV[VX] / delta_from_center.mV[VY]); 687 F32 delta_aspect = llabs(delta_from_center.mV[VX] / delta_from_center.mV[VY]);
689 if (camera_aspect / llmax(delta_aspect, 0.001f) > 1.f) 688 if (camera_aspect / llmax(delta_aspect, 0.001f) > 1.f)
690 { 689 {
@@ -834,7 +833,7 @@ void LLHUDText::updateAll()
834 } 833 }
835 } 834 }
836 835
837 LLStat* camera_vel_stat = gCamera->getVelocityStat(); 836 LLStat* camera_vel_stat = LLViewerCamera::getInstance()->getVelocityStat();
838 F32 camera_vel = camera_vel_stat->getCurrent(); 837 F32 camera_vel = camera_vel_stat->getCurrent();
839 if (camera_vel > MAX_STABLE_CAMERA_VELOCITY) 838 if (camera_vel > MAX_STABLE_CAMERA_VELOCITY)
840 { 839 {
diff --git a/linden/indra/newview/llhudtext.h b/linden/indra/newview/llhudtext.h
index 47dc5a7..bd4da88 100644
--- a/linden/indra/newview/llhudtext.h
+++ b/linden/indra/newview/llhudtext.h
@@ -124,6 +124,7 @@ public:
124 static void renderAllHUD(); 124 static void renderAllHUD();
125 static void addPickable(std::set<LLViewerObject*> &pick_list); 125 static void addPickable(std::set<LLViewerObject*> &pick_list);
126 static void reshape(); 126 static void reshape();
127 static void setDisplayText(BOOL flag) { sDisplayText = flag ; }
127protected: 128protected:
128 LLHUDText(const U8 type); 129 LLHUDText(const U8 type);
129 130
@@ -170,6 +171,7 @@ private:
170 S32 mLOD; 171 S32 mLOD;
171 BOOL mHidden; 172 BOOL mHidden;
172 173
174 static BOOL sDisplayText ;
173 static std::set<LLPointer<LLHUDText> > sTextObjects; 175 static std::set<LLPointer<LLHUDText> > sTextObjects;
174 static std::vector<LLPointer<LLHUDText> > sVisibleTextObjects; 176 static std::vector<LLPointer<LLHUDText> > sVisibleTextObjects;
175 static std::vector<LLPointer<LLHUDText> > sVisibleHUDTextObjects; 177 static std::vector<LLPointer<LLHUDText> > sVisibleHUDTextObjects;
diff --git a/linden/indra/newview/llhudview.cpp b/linden/indra/newview/llhudview.cpp
index 7a54623..5867285 100644
--- a/linden/indra/newview/llhudview.cpp
+++ b/linden/indra/newview/llhudview.cpp
@@ -59,16 +59,6 @@ LLHUDView::LLHUDView()
59LLHUDView::~LLHUDView() 59LLHUDView::~LLHUDView()
60{ } 60{ }
61 61
62EWidgetType LLHUDView::getWidgetType() const
63{
64 return WIDGET_TYPE_HUD_VIEW;
65}
66
67LLString LLHUDView::getWidgetTag() const
68{
69 return LL_HUD_VIEW_TAG;
70}
71
72// virtual 62// virtual
73void LLHUDView::draw() 63void LLHUDView::draw()
74{ 64{
diff --git a/linden/indra/newview/llhudview.h b/linden/indra/newview/llhudview.h
index cfe8899..ae32ddd 100644
--- a/linden/indra/newview/llhudview.h
+++ b/linden/indra/newview/llhudview.h
@@ -44,9 +44,6 @@ public:
44 LLHUDView(); 44 LLHUDView();
45 virtual ~LLHUDView(); 45 virtual ~LLHUDView();
46 46
47 virtual EWidgetType getWidgetType() const;
48 virtual LLString getWidgetTag() const;
49
50 virtual void draw(); 47 virtual void draw();
51 48
52 const LLColor4& colorFromType(S32 type); 49 const LLColor4& colorFromType(S32 type);
diff --git a/linden/indra/newview/llimpanel.cpp b/linden/indra/newview/llimpanel.cpp
index 9e6739f..6f06117 100644
--- a/linden/indra/newview/llimpanel.cpp
+++ b/linden/indra/newview/llimpanel.cpp
@@ -62,7 +62,7 @@
62#include "llviewermessage.h" 62#include "llviewermessage.h"
63#include "llviewerstats.h" 63#include "llviewerstats.h"
64#include "llviewercontrol.h" 64#include "llviewercontrol.h"
65#include "llvieweruictrlfactory.h" 65#include "lluictrlfactory.h"
66#include "llviewerwindow.h" 66#include "llviewerwindow.h"
67#include "lllogchat.h" 67#include "lllogchat.h"
68#include "llfloaterhtml.h" 68#include "llfloaterhtml.h"
@@ -1154,7 +1154,7 @@ void LLFloaterIMPanel::init(const LLString& session_label)
1154 1154
1155 mSpeakers = new LLIMSpeakerMgr(mVoiceChannel); 1155 mSpeakers = new LLIMSpeakerMgr(mVoiceChannel);
1156 1156
1157 gUICtrlFactory->buildFloater(this, 1157 LLUICtrlFactory::getInstance()->buildFloater(this,
1158 xml_filename, 1158 xml_filename,
1159 &getFactoryMap(), 1159 &getFactoryMap(),
1160 FALSE); 1160 FALSE);
@@ -1217,12 +1217,12 @@ LLFloaterIMPanel::~LLFloaterIMPanel()
1217 1217
1218BOOL LLFloaterIMPanel::postBuild() 1218BOOL LLFloaterIMPanel::postBuild()
1219{ 1219{
1220 requires("chat_editor", WIDGET_TYPE_LINE_EDITOR); 1220 requires<LLLineEditor>("chat_editor");
1221 requires("im_history", WIDGET_TYPE_TEXT_EDITOR); 1221 requires<LLTextEditor>("im_history");
1222 1222
1223 if (checkRequirements()) 1223 if (checkRequirements())
1224 { 1224 {
1225 mInputEditor = LLUICtrlFactory::getLineEditorByName(this, "chat_editor"); 1225 mInputEditor = getChild<LLLineEditor>("chat_editor");
1226 mInputEditor->setFocusReceivedCallback( onInputEditorFocusReceived, this ); 1226 mInputEditor->setFocusReceivedCallback( onInputEditorFocusReceived, this );
1227 mInputEditor->setFocusLostCallback( onInputEditorFocusLost, this ); 1227 mInputEditor->setFocusLostCallback( onInputEditorFocusLost, this );
1228 mInputEditor->setKeystrokeCallback( onInputEditorKeystroke ); 1228 mInputEditor->setKeystrokeCallback( onInputEditorKeystroke );
@@ -1240,10 +1240,10 @@ BOOL LLFloaterIMPanel::postBuild()
1240 childSetAction("toggle_active_speakers_btn", onClickToggleActiveSpeakers, this); 1240 childSetAction("toggle_active_speakers_btn", onClickToggleActiveSpeakers, this);
1241 1241
1242 childSetAction("moderator_kick_speaker", onKickSpeaker, this); 1242 childSetAction("moderator_kick_speaker", onKickSpeaker, this);
1243 //LLButton* close_btn = LLUICtrlFactory::getButtonByName(this, "close_btn"); 1243 //LLButton* close_btn = getChild<LLButton>("close_btn");
1244 //close_btn->setClickedCallback(&LLFloaterIMPanel::onClickClose, this); 1244 //close_btn->setClickedCallback(&LLFloaterIMPanel::onClickClose, this);
1245 1245
1246 mHistoryEditor = LLViewerUICtrlFactory::getViewerTextEditorByName(this, "im_history"); 1246 mHistoryEditor = getChild<LLViewerTextEditor>("im_history");
1247 mHistoryEditor->setParseHTML(TRUE); 1247 mHistoryEditor->setParseHTML(TRUE);
1248 1248
1249 if ( IM_SESSION_GROUP_START == mDialog ) 1249 if ( IM_SESSION_GROUP_START == mDialog )
@@ -1286,16 +1286,16 @@ void LLFloaterIMPanel::onClickMuteVoice(void* user_data)
1286 LLFloaterIMPanel* floaterp = (LLFloaterIMPanel*)user_data; 1286 LLFloaterIMPanel* floaterp = (LLFloaterIMPanel*)user_data;
1287 if (floaterp) 1287 if (floaterp)
1288 { 1288 {
1289 BOOL is_muted = gMuteListp->isMuted(floaterp->mOtherParticipantUUID, LLMute::flagVoiceChat); 1289 BOOL is_muted = LLMuteList::getInstance()->isMuted(floaterp->mOtherParticipantUUID, LLMute::flagVoiceChat);
1290 1290
1291 LLMute mute(floaterp->mOtherParticipantUUID, floaterp->getTitle(), LLMute::AGENT); 1291 LLMute mute(floaterp->mOtherParticipantUUID, floaterp->getTitle(), LLMute::AGENT);
1292 if (!is_muted) 1292 if (!is_muted)
1293 { 1293 {
1294 gMuteListp->add(mute, LLMute::flagVoiceChat); 1294 LLMuteList::getInstance()->add(mute, LLMute::flagVoiceChat);
1295 } 1295 }
1296 else 1296 else
1297 { 1297 {
1298 gMuteListp->remove(mute, LLMute::flagVoiceChat); 1298 LLMuteList::getInstance()->remove(mute, LLMute::flagVoiceChat);
1299 } 1299 }
1300 } 1300 }
1301} 1301}
@@ -1384,7 +1384,7 @@ void LLFloaterIMPanel::draw()
1384 childSetVisible("speaker_volume", LLVoiceClient::voiceEnabled() && mVoiceChannel->isActive()); 1384 childSetVisible("speaker_volume", LLVoiceClient::voiceEnabled() && mVoiceChannel->isActive());
1385 childSetValue("speaker_volume", gVoiceClient->getUserVolume(mOtherParticipantUUID)); 1385 childSetValue("speaker_volume", gVoiceClient->getUserVolume(mOtherParticipantUUID));
1386 1386
1387 childSetValue("mute_btn", gMuteListp->isMuted(mOtherParticipantUUID, LLMute::flagVoiceChat)); 1387 childSetValue("mute_btn", LLMuteList::getInstance()->isMuted(mOtherParticipantUUID, LLMute::flagVoiceChat));
1388 childSetVisible("mute_btn", LLVoiceClient::voiceEnabled() && mVoiceChannel->isActive()); 1388 childSetVisible("mute_btn", LLVoiceClient::voiceEnabled() && mVoiceChannel->isActive());
1389 } 1389 }
1390 LLFloater::draw(); 1390 LLFloater::draw();
@@ -1540,33 +1540,30 @@ void LLFloaterIMPanel::selectNone()
1540} 1540}
1541 1541
1542 1542
1543BOOL LLFloaterIMPanel::handleKeyHere( KEY key, MASK mask, BOOL called_from_parent ) 1543BOOL LLFloaterIMPanel::handleKeyHere( KEY key, MASK mask )
1544{ 1544{
1545 BOOL handled = FALSE; 1545 BOOL handled = FALSE;
1546 if( getVisible() && getEnabled() && !called_from_parent && gFocusMgr.childHasKeyboardFocus(this)) 1546 if( KEY_RETURN == key && mask == MASK_NONE)
1547 { 1547 {
1548 if( KEY_RETURN == key && mask == MASK_NONE) 1548 sendMsg();
1549 { 1549 handled = TRUE;
1550 sendMsg();
1551 handled = TRUE;
1552 1550
1553 // Close talk panels on hitting return 1551 // Close talk panels on hitting return
1554 // but not shift-return or control-return 1552 // but not shift-return or control-return
1555 if ( !gSavedSettings.getBOOL("PinTalkViewOpen") && !(mask & MASK_CONTROL) && !(mask & MASK_SHIFT) ) 1553 if ( !gSavedSettings.getBOOL("PinTalkViewOpen") && !(mask & MASK_CONTROL) && !(mask & MASK_SHIFT) )
1556 {
1557 gIMMgr->toggle(NULL);
1558 }
1559 }
1560 else if ( KEY_ESCAPE == key )
1561 { 1554 {
1562 handled = TRUE; 1555 gIMMgr->toggle(NULL);
1563 gFocusMgr.setKeyboardFocus(NULL); 1556 }
1557 }
1558 else if ( KEY_ESCAPE == key )
1559 {
1560 handled = TRUE;
1561 gFocusMgr.setKeyboardFocus(NULL);
1564 1562
1565 // Close talk panel with escape 1563 // Close talk panel with escape
1566 if( !gSavedSettings.getBOOL("PinTalkViewOpen") ) 1564 if( !gSavedSettings.getBOOL("PinTalkViewOpen") )
1567 { 1565 {
1568 gIMMgr->toggle(NULL); 1566 gIMMgr->toggle(NULL);
1569 }
1570 } 1567 }
1571 } 1568 }
1572 1569
@@ -1889,7 +1886,7 @@ void LLFloaterIMPanel::sendMsg()
1889 1886
1890 BOOL other_was_typing = mOtherTyping; 1887 BOOL other_was_typing = mOtherTyping;
1891 1888
1892 addHistoryLine(gAgent.getID(), history_echo); 1889 addHistoryLine(gAgent.getID(), history_echo, gSavedSettings.getColor("IMChatColor"));
1893 1890
1894 if (other_was_typing) 1891 if (other_was_typing)
1895 { 1892 {
@@ -1905,7 +1902,7 @@ void LLFloaterIMPanel::sendMsg()
1905 mQueuedMsgsForInit.append(utf8_text); 1902 mQueuedMsgsForInit.append(utf8_text);
1906 } 1903 }
1907 1904
1908 gViewerStats->incStat(LLViewerStats::ST_IM_COUNT); 1905 LLViewerStats::getInstance()->incStat(LLViewerStats::ST_IM_COUNT);
1909 } 1906 }
1910 mInputEditor->setText(LLString::null); 1907 mInputEditor->setText(LLString::null);
1911 1908
@@ -2085,12 +2082,31 @@ void LLFloaterIMPanel::removeTypingIndicator(const LLIMInfo* im_info)
2085} 2082}
2086 2083
2087//static 2084//static
2088void LLFloaterIMPanel::chatFromLogFile(LLString line, void* userdata) 2085void LLFloaterIMPanel::chatFromLogFile(LLLogChat::ELogLineType type, LLString line, void* userdata)
2089{ 2086{
2090 LLFloaterIMPanel* self = (LLFloaterIMPanel*)userdata; 2087 LLFloaterIMPanel* self = (LLFloaterIMPanel*)userdata;
2091 2088 LLUIString message = line;
2089
2090 switch (type)
2091 {
2092 case LLLogChat::LOG_EMPTY:
2093 // add warning log enabled message
2094 message = LLFloaterChat::getInstance()->getUIString("IM_logging_string");
2095 break;
2096 case LLLogChat::LOG_END:
2097 // add log end message
2098 message = LLFloaterChat::getInstance()->getUIString("IM_logging_string");
2099 break;
2100 case LLLogChat::LOG_LINE:
2101 // just add normal lines from file
2102 break;
2103 default:
2104 // nothing
2105 break;
2106 }
2107
2092 //self->addHistoryLine(line, LLColor4::grey, FALSE); 2108 //self->addHistoryLine(line, LLColor4::grey, FALSE);
2093 self->mHistoryEditor->appendColoredText(line, false, true, LLColor4::grey); 2109 self->mHistoryEditor->appendColoredText(message, false, true, LLColor4::grey);
2094} 2110}
2095 2111
2096void LLFloaterIMPanel::showSessionStartError( 2112void LLFloaterIMPanel::showSessionStartError(
@@ -2171,3 +2187,4 @@ void LLFloaterIMPanel::onConfirmForceCloseError(S32 option, void* data)
2171} 2187}
2172 2188
2173 2189
2190
diff --git a/linden/indra/newview/llimpanel.h b/linden/indra/newview/llimpanel.h
index a344ba0..16d4042 100644
--- a/linden/indra/newview/llimpanel.h
+++ b/linden/indra/newview/llimpanel.h
@@ -33,6 +33,7 @@
33#define LL_IMPANEL_H 33#define LL_IMPANEL_H
34 34
35#include "llfloater.h" 35#include "llfloater.h"
36#include "lllogchat.h"
36#include "lluuid.h" 37#include "lluuid.h"
37#include "lldarray.h" 38#include "lldarray.h"
38#include "llinstantmessage.h" 39#include "llinstantmessage.h"
@@ -216,7 +217,7 @@ public:
216 217
217 S32 getNumUnreadMessages() { return mNumUnreadMessages; } 218 S32 getNumUnreadMessages() { return mNumUnreadMessages; }
218 219
219 BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); 220 BOOL handleKeyHere(KEY key, MASK mask);
220 BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, 221 BOOL handleDragAndDrop(S32 x, S32 y, MASK mask,
221 BOOL drop, EDragAndDropType cargo_type, 222 BOOL drop, EDragAndDropType cargo_type,
222 void *cargo_data, EAcceptance *accept, 223 void *cargo_data, EAcceptance *accept,
@@ -256,7 +257,7 @@ public:
256 257
257 // Handle other participant in the session typing. 258 // Handle other participant in the session typing.
258 void processIMTyping(const LLIMInfo* im_info, BOOL typing); 259 void processIMTyping(const LLIMInfo* im_info, BOOL typing);
259 static void chatFromLogFile(LLString line, void* userdata); 260 static void chatFromLogFile(LLLogChat::ELogLineType type, LLString line, void* userdata);
260 261
261 //show error statuses to the user 262 //show error statuses to the user
262 void showSessionStartError(const std::string& error_string); 263 void showSessionStartError(const std::string& error_string);
diff --git a/linden/indra/newview/llimview.cpp b/linden/indra/newview/llimview.cpp
index cad8649..e451388 100644
--- a/linden/indra/newview/llimview.cpp
+++ b/linden/indra/newview/llimview.cpp
@@ -40,7 +40,7 @@
40#include "llhttpclient.h" 40#include "llhttpclient.h"
41#include "llsdutil.h" 41#include "llsdutil.h"
42#include "llstring.h" 42#include "llstring.h"
43#include "llvieweruictrlfactory.h" 43#include "lluictrlfactory.h"
44 44
45#include "llagent.h" 45#include "llagent.h"
46#include "llcallingcard.h" 46#include "llcallingcard.h"
@@ -80,7 +80,7 @@ LLIMMgr* gIMMgr = NULL;
80// 80//
81// Statics 81// Statics
82// 82//
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 LLUIString sInviteMessage; 86static LLUIString sInviteMessage;
@@ -152,7 +152,7 @@ LLFloaterIM::LLFloaterIM()
152 // the size of the im-sesssion when they were created. This happens in 152 // the size of the im-sesssion when they were created. This happens in
153 // LLMultiFloater::resizeToContents() when called through LLMultiFloater::addFloater()) 153 // LLMultiFloater::resizeToContents() when called through LLMultiFloater::addFloater())
154 this->mAutoResize = FALSE; 154 this->mAutoResize = FALSE;
155 gUICtrlFactory->buildFloater(this, "floater_im.xml"); 155 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_im.xml");
156} 156}
157 157
158BOOL LLFloaterIM::postBuild() 158BOOL LLFloaterIM::postBuild()
@@ -374,7 +374,7 @@ LLIMMgr::LLIMMgr() :
374 mFriendObserver = new LLIMViewFriendObserver(this); 374 mFriendObserver = new LLIMViewFriendObserver(this);
375 LLAvatarTracker::instance().addObserver(mFriendObserver); 375 LLAvatarTracker::instance().addObserver(mFriendObserver);
376 376
377 //*HACK: use floater to initialize string constants from xml file 377 // *HACK: use floater to initialize string constants from xml file
378 // then delete it right away 378 // then delete it right away
379 LLFloaterIM* dummy_floater = new LLFloaterIM(); 379 LLFloaterIM* dummy_floater = new LLFloaterIM();
380 delete dummy_floater; 380 delete dummy_floater;
@@ -403,12 +403,12 @@ void LLIMMgr::addMessage(
403 const LLVector3& position) 403 const LLVector3& position)
404{ 404{
405 LLUUID other_participant_id = target_id; 405 LLUUID other_participant_id = target_id;
406 bool is_from_system = target_id.isNull(); 406 bool is_from_system = target_id.isNull() || !strcmp(from, SYSTEM_FROM);
407 407
408 // don't process muted IMs 408 // don't process muted IMs
409 if (gMuteListp->isMuted( 409 if (LLMuteList::getInstance()->isMuted(
410 other_participant_id, 410 other_participant_id,
411 LLMute::flagTextChat) && !gMuteListp->isLinden(from)) 411 LLMute::flagTextChat) && !LLMuteList::getInstance()->isLinden(from))
412 { 412 {
413 return; 413 return;
414 } 414 }
@@ -490,7 +490,7 @@ void LLIMMgr::addMessage(
490 } 490 }
491 else 491 else
492 { 492 {
493 floater->addHistoryLine(other_participant_id, msg); 493 floater->addHistoryLine(other_participant_id, msg, gSavedSettings.getColor("IMChatColor"));
494 } 494 }
495 495
496 LLFloaterChatterBox* chat_floater = LLFloaterChatterBox::getInstance(LLSD()); 496 LLFloaterChatterBox* chat_floater = LLFloaterChatterBox::getInstance(LLSD());
@@ -695,7 +695,7 @@ void LLIMMgr::inviteToSession(
695 const LLString& session_handle) 695 const LLString& session_handle)
696{ 696{
697 //ignore invites from muted residents 697 //ignore invites from muted residents
698 if (gMuteListp->isMuted(caller_id)) 698 if (LLMuteList::getInstance()->isMuted(caller_id))
699 { 699 {
700 return; 700 return;
701 } 701 }
@@ -740,7 +740,7 @@ void LLIMMgr::inviteToSession(
740 if (channelp && channelp->callStarted()) 740 if (channelp && channelp->callStarted())
741 { 741 {
742 // you have already started a call to the other user, so just accept the invite 742 // you have already started a call to the other user, so just accept the invite
743 inviteUserResponse(0, invite); 743 inviteUserResponse(0, invite); // inviteUserResponse deletes
744 return; 744 return;
745 } 745 }
746 746
@@ -754,7 +754,7 @@ void LLIMMgr::inviteToSession(
754 if (gSavedSettings.getBOOL("VoiceCallsFriendsOnly")) 754 if (gSavedSettings.getBOOL("VoiceCallsFriendsOnly"))
755 { 755 {
756 // invite not from a friend, so decline 756 // invite not from a friend, so decline
757 inviteUserResponse(1, invite); 757 inviteUserResponse(1, invite); // inviteUserResponse deletes
758 return; 758 return;
759 } 759 }
760 } 760 }
@@ -773,13 +773,17 @@ void LLIMMgr::inviteToSession(
773 args["[GROUP]"] = session_name; 773 args["[GROUP]"] = session_name;
774 774
775 LLNotifyBox::showXml(notify_box_type, 775 LLNotifyBox::showXml(notify_box_type,
776 args, 776 args,
777 inviteUserResponse, 777 inviteUserResponse,
778 (void*)invite); 778 (void*)invite); // inviteUserResponse deletes
779 779
780 } 780 }
781 mPendingInvitations[session_id.asString()] = LLSD(); 781 mPendingInvitations[session_id.asString()] = LLSD();
782 } 782 }
783 else
784 {
785 delete invite;
786 }
783} 787}
784 788
785//static 789//static
@@ -946,10 +950,10 @@ void LLIMMgr::inviteUserResponse(S32 option, void* user_data)
946 case 2: // mute (also implies ignore, so this falls through to the "ignore" case below) 950 case 2: // mute (also implies ignore, so this falls through to the "ignore" case below)
947 { 951 {
948 // mute the sender of this invite 952 // mute the sender of this invite
949 if (!gMuteListp->isMuted(invitep->mCallerID)) 953 if (!LLMuteList::getInstance()->isMuted(invitep->mCallerID))
950 { 954 {
951 LLMute mute(invitep->mCallerID, invitep->mCallerName, LLMute::AGENT); 955 LLMute mute(invitep->mCallerID, invitep->mCallerName, LLMute::AGENT);
952 gMuteListp->add(mute); 956 LLMuteList::getInstance()->add(mute);
953 } 957 }
954 } 958 }
955 /* FALLTHROUGH */ 959 /* FALLTHROUGH */
@@ -1475,12 +1479,12 @@ public:
1475 (time_t) message_params["timestamp"].asInteger(); 1479 (time_t) message_params["timestamp"].asInteger();
1476 1480
1477 BOOL is_busy = gAgent.getBusy(); 1481 BOOL is_busy = gAgent.getBusy();
1478 BOOL is_muted = gMuteListp->isMuted( 1482 BOOL is_muted = LLMuteList::getInstance()->isMuted(
1479 from_id, 1483 from_id,
1480 name.c_str(), 1484 name.c_str(),
1481 LLMute::flagTextChat); 1485 LLMute::flagTextChat);
1482 1486
1483 BOOL is_linden = gMuteListp->isLinden( 1487 BOOL is_linden = LLMuteList::getInstance()->isLinden(
1484 name.c_str()); 1488 name.c_str());
1485 char separator_string[3]=": "; /* Flawfinder: ignore */ 1489 char separator_string[3]=": "; /* Flawfinder: ignore */
1486 int message_offset=0; 1490 int message_offset=0;
@@ -1624,3 +1628,4 @@ LLHTTPRegistration<LLViewerChatterBoxInvitation>
1624 gHTTPRegistrationMessageChatterBoxInvitation( 1628 gHTTPRegistrationMessageChatterBoxInvitation(
1625 "/message/ChatterBoxInvitation"); 1629 "/message/ChatterBoxInvitation");
1626 1630
1631
diff --git a/linden/indra/newview/llinventoryactions.cpp b/linden/indra/newview/llinventoryactions.cpp
index 27afb17..78b43d5 100644
--- a/linden/indra/newview/llinventoryactions.cpp
+++ b/linden/indra/newview/llinventoryactions.cpp
@@ -81,7 +81,7 @@
81#include "llviewermessage.h" 81#include "llviewermessage.h"
82#include "llviewerregion.h" 82#include "llviewerregion.h"
83#include "lltabcontainer.h" 83#include "lltabcontainer.h"
84#include "llvieweruictrlfactory.h" 84#include "lluictrlfactory.h"
85#include "llselectmgr.h" 85#include "llselectmgr.h"
86 86
87const char* NEW_LSL_NAME = "New Script"; // *TODO:Translate? (probably not) 87const char* NEW_LSL_NAME = "New Script"; // *TODO:Translate? (probably not)
diff --git a/linden/indra/newview/llinventorybridge.cpp b/linden/indra/newview/llinventorybridge.cpp
index be2bb9a..1d5cd88 100644
--- a/linden/indra/newview/llinventorybridge.cpp
+++ b/linden/indra/newview/llinventorybridge.cpp
@@ -81,7 +81,7 @@
81#include "llviewermessage.h" 81#include "llviewermessage.h"
82#include "llviewerregion.h" 82#include "llviewerregion.h"
83#include "lltabcontainer.h" 83#include "lltabcontainer.h"
84#include "llvieweruictrlfactory.h" 84#include "lluictrlfactory.h"
85#include "llselectmgr.h" 85#include "llselectmgr.h"
86#include "llfloateropenobject.h" 86#include "llfloateropenobject.h"
87 87
@@ -124,11 +124,11 @@ const char* ICON_NAME[ICON_NAME_COUNT] =
124 "inv_item_object.tga", 124 "inv_item_object.tga",
125 "inv_item_object_multi.tga", 125 "inv_item_object_multi.tga",
126 "inv_item_notecard.tga", 126 "inv_item_notecard.tga",
127 "inv_item_bodypart.tga", 127 "inv_item_skin.tga",
128 "inv_item_snapshot.tga", 128 "inv_item_snapshot.tga",
129 129
130 "inv_item_shape.tga", 130 "inv_item_shape.tga",
131 "inv_item_bodypart.tga", 131 "inv_item_skin.tga",
132 "inv_item_hair.tga", 132 "inv_item_hair.tga",
133 "inv_item_eyes.tga", 133 "inv_item_eyes.tga",
134 "inv_item_shirt.tga", 134 "inv_item_shirt.tga",
@@ -388,9 +388,10 @@ void hideContextEntries(LLMenuGL& menu,
388 LLString name = (*itor)->getName(); 388 LLString name = (*itor)->getName();
389 389
390 // descend into split menus: 390 // descend into split menus:
391 if ((name == "More") && (WIDGET_TYPE_MENU_ITEM_BRANCH == (*itor)->getWidgetType())) 391 LLMenuItemBranchGL* branchp = dynamic_cast<LLMenuItemBranchGL*>(*itor);
392 if ((name == "More") && branchp)
392 { 393 {
393 hideContextEntries(*((LLMenuItemBranchGL *)(*itor))->getBranch(), entries_to_show, disabled_entries); 394 hideContextEntries(*branchp->getBranch(), entries_to_show, disabled_entries);
394 } 395 }
395 396
396 397
@@ -807,10 +808,9 @@ void LLItemBridge::restoreItem()
807 } 808 }
808} 809}
809 810
810LLViewerImage* LLItemBridge::getIcon() const 811LLUIImagePtr LLItemBridge::getIcon() const
811{ 812{
812 LLString uuid_string = gViewerArt.getString(ICON_NAME[OBJECT_ICON_NAME]); 813 return LLUI::getUIImage(ICON_NAME[OBJECT_ICON_NAME]);
813 return gImageList.getImage(LLUUID(uuid_string), MIPMAP_FALSE, TRUE);
814} 814}
815 815
816PermissionMask LLItemBridge::getPermissionMask() const 816PermissionMask LLItemBridge::getPermissionMask() const
@@ -1133,7 +1133,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
1133 } 1133 }
1134 1134
1135 // check to make sure source is agent inventory, and is represented there. 1135 // check to make sure source is agent inventory, and is represented there.
1136 LLToolDragAndDrop::ESource source = gToolDragAndDrop->getSource(); 1136 LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource();
1137 BOOL is_agent_inventory = (model->getCategory(inv_cat->getUUID()) != NULL) 1137 BOOL is_agent_inventory = (model->getCategory(inv_cat->getUUID()) != NULL)
1138 && (LLToolDragAndDrop::SOURCE_AGENT == source); 1138 && (LLToolDragAndDrop::SOURCE_AGENT == source);
1139 1139
@@ -1626,7 +1626,7 @@ void LLFolderBridge::restoreItem()
1626} 1626}
1627 1627
1628// Icons for folders are based on the preferred type 1628// Icons for folders are based on the preferred type
1629LLViewerImage* LLFolderBridge::getIcon() const 1629LLUIImagePtr LLFolderBridge::getIcon() const
1630{ 1630{
1631 const char* control = NULL; 1631 const char* control = NULL;
1632 LLAssetType::EType preferred_type = LLAssetType::AT_NONE; 1632 LLAssetType::EType preferred_type = LLAssetType::AT_NONE;
@@ -1687,8 +1687,7 @@ LLViewerImage* LLFolderBridge::getIcon() const
1687 control = "inv_folder_plain_closed.tga"; 1687 control = "inv_folder_plain_closed.tga";
1688 break; 1688 break;
1689 } 1689 }
1690 LLString uuid_string = gViewerArt.getString(control); 1690 return LLUI::getUIImage(control);
1691 return gImageList.getImage(LLUUID(uuid_string), MIPMAP_FALSE, TRUE);
1692} 1691}
1693 1692
1694BOOL LLFolderBridge::renameItem(const LLString& new_name) 1693BOOL LLFolderBridge::renameItem(const LLString& new_name)
@@ -2195,7 +2194,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
2195 LLVOAvatar* avatar = gAgent.getAvatarObject(); 2194 LLVOAvatar* avatar = gAgent.getAvatarObject();
2196 if(!avatar) return FALSE; 2195 if(!avatar) return FALSE;
2197 2196
2198 LLToolDragAndDrop::ESource source = gToolDragAndDrop->getSource(); 2197 LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource();
2199 BOOL accept = FALSE; 2198 BOOL accept = FALSE;
2200 LLViewerObject* object = NULL; 2199 LLViewerObject* object = NULL;
2201 if(LLToolDragAndDrop::SOURCE_AGENT == source) 2200 if(LLToolDragAndDrop::SOURCE_AGENT == source)
@@ -2318,8 +2317,8 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
2318 accept = TRUE; 2317 accept = TRUE;
2319 if(drop) 2318 if(drop)
2320 { 2319 {
2321 copy_inventory_from_notecard(gToolDragAndDrop->getObjectID(), 2320 copy_inventory_from_notecard(LLToolDragAndDrop::getInstance()->getObjectID(),
2322 gToolDragAndDrop->getSourceID(), inv_item); 2321 LLToolDragAndDrop::getInstance()->getSourceID(), inv_item);
2323 } 2322 }
2324 } 2323 }
2325 else if(LLToolDragAndDrop::SOURCE_LIBRARY == source) 2324 else if(LLToolDragAndDrop::SOURCE_LIBRARY == source)
@@ -2351,7 +2350,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
2351// | LLScriptBridge (DEPRECTED) | 2350// | LLScriptBridge (DEPRECTED) |
2352// +=================================================+ 2351// +=================================================+
2353 2352
2354LLViewerImage* LLScriptBridge::getIcon() const 2353LLUIImagePtr LLScriptBridge::getIcon() const
2355{ 2354{
2356 return get_item_icon(LLAssetType::AT_SCRIPT, LLInventoryType::IT_LSL, 0, FALSE); 2355 return get_item_icon(LLAssetType::AT_SCRIPT, LLInventoryType::IT_LSL, 0, FALSE);
2357} 2356}
@@ -2363,7 +2362,7 @@ LLViewerImage* LLScriptBridge::getIcon() const
2363LLString LLTextureBridge::sPrefix("Texture: "); 2362LLString LLTextureBridge::sPrefix("Texture: ");
2364 2363
2365 2364
2366LLViewerImage* LLTextureBridge::getIcon() const 2365LLUIImagePtr LLTextureBridge::getIcon() const
2367{ 2366{
2368 return get_item_icon(LLAssetType::AT_TEXTURE, mInvType, 0, FALSE); 2367 return get_item_icon(LLAssetType::AT_TEXTURE, mInvType, 0, FALSE);
2369} 2368}
@@ -2413,7 +2412,7 @@ void LLTextureBridge::openItem()
2413LLString LLSoundBridge::sPrefix("Sound: "); 2412LLString LLSoundBridge::sPrefix("Sound: ");
2414 2413
2415 2414
2416LLViewerImage* LLSoundBridge::getIcon() const 2415LLUIImagePtr LLSoundBridge::getIcon() const
2417{ 2416{
2418 return get_item_icon(LLAssetType::AT_SOUND, LLInventoryType::IT_SOUND, 0, FALSE); 2417 return get_item_icon(LLAssetType::AT_SOUND, LLInventoryType::IT_SOUND, 0, FALSE);
2419} 2418}
@@ -2508,7 +2507,7 @@ void LLSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
2508 2507
2509LLString LLLandmarkBridge::sPrefix("Landmark: "); 2508LLString LLLandmarkBridge::sPrefix("Landmark: ");
2510 2509
2511LLViewerImage* LLLandmarkBridge::getIcon() const 2510LLUIImagePtr LLLandmarkBridge::getIcon() const
2512{ 2511{
2513 return get_item_icon(LLAssetType::AT_LANDMARK, LLInventoryType::IT_LANDMARK, mVisited, FALSE); 2512 return get_item_icon(LLAssetType::AT_LANDMARK, LLInventoryType::IT_LANDMARK, mVisited, FALSE);
2514} 2513}
@@ -2695,7 +2694,7 @@ void LLCallingCardBridge::performAction(LLFolderView* folder, LLInventoryModel*
2695 else LLItemBridge::performAction(folder, model, action); 2694 else LLItemBridge::performAction(folder, model, action);
2696} 2695}
2697 2696
2698LLViewerImage* LLCallingCardBridge::getIcon() const 2697LLUIImagePtr LLCallingCardBridge::getIcon() const
2699{ 2698{
2700 BOOL online = FALSE; 2699 BOOL online = FALSE;
2701 LLViewerInventoryItem* item = getItem(); 2700 LLViewerInventoryItem* item = getItem();
@@ -2855,7 +2854,7 @@ BOOL LLCallingCardBridge::dragOrDrop(MASK mask, BOOL drop,
2855LLString LLNotecardBridge::sPrefix("Note: "); 2854LLString LLNotecardBridge::sPrefix("Note: ");
2856 2855
2857 2856
2858LLViewerImage* LLNotecardBridge::getIcon() const 2857LLUIImagePtr LLNotecardBridge::getIcon() const
2859{ 2858{
2860 return get_item_icon(LLAssetType::AT_NOTECARD, LLInventoryType::IT_NOTECARD, 0, FALSE); 2859 return get_item_icon(LLAssetType::AT_NOTECARD, LLInventoryType::IT_NOTECARD, 0, FALSE);
2861} 2860}
@@ -2923,7 +2922,7 @@ void LLNotecardBridge::openItem()
2923 2922
2924LLString LLGestureBridge::sPrefix("Gesture: "); 2923LLString LLGestureBridge::sPrefix("Gesture: ");
2925 2924
2926LLViewerImage* LLGestureBridge::getIcon() const 2925LLUIImagePtr LLGestureBridge::getIcon() const
2927{ 2926{
2928 return get_item_icon(LLAssetType::AT_GESTURE, LLInventoryType::IT_GESTURE, 0, FALSE); 2927 return get_item_icon(LLAssetType::AT_GESTURE, LLInventoryType::IT_GESTURE, 0, FALSE);
2929} 2928}
@@ -3055,7 +3054,7 @@ void LLGestureBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
3055LLString LLAnimationBridge::sPrefix("Animation: "); 3054LLString LLAnimationBridge::sPrefix("Animation: ");
3056 3055
3057 3056
3058LLViewerImage* LLAnimationBridge::getIcon() const 3057LLUIImagePtr LLAnimationBridge::getIcon() const
3059{ 3058{
3060 return get_item_icon(LLAssetType::AT_ANIMATION, LLInventoryType::IT_ANIMATION, 0, FALSE); 3059 return get_item_icon(LLAssetType::AT_ANIMATION, LLInventoryType::IT_ANIMATION, 0, FALSE);
3061} 3060}
@@ -3173,7 +3172,7 @@ BOOL LLObjectBridge::isItemRemovable()
3173 return LLInvFVBridge::isItemRemovable(); 3172 return LLInvFVBridge::isItemRemovable();
3174} 3173}
3175 3174
3176LLViewerImage* LLObjectBridge::getIcon() const 3175LLUIImagePtr LLObjectBridge::getIcon() const
3177{ 3176{
3178 return get_item_icon(LLAssetType::AT_OBJECT, mInvType, mAttachPt, mIsMultiObject ); 3177 return get_item_icon(LLAssetType::AT_OBJECT, mInvType, mAttachPt, mIsMultiObject );
3179} 3178}
@@ -3223,7 +3222,7 @@ void LLObjectBridge::performAction(LLFolderView* folder, LLInventoryModel* model
3223 gObjectList.findObject(item->getUUID()); 3222 gObjectList.findObject(item->getUUID());
3224 if (found_obj) 3223 if (found_obj)
3225 { 3224 {
3226 gSelectMgr->remove(found_obj); 3225 LLSelectMgr::getInstance()->remove(found_obj);
3227 } 3226 }
3228 else 3227 else
3229 { 3228 {
@@ -3432,10 +3431,10 @@ BOOL LLObjectBridge::renameItem(const LLString& new_name)
3432 LLViewerObject* obj = avatar->getWornAttachment( item->getUUID() ); 3431 LLViewerObject* obj = avatar->getWornAttachment( item->getUUID() );
3433 if( obj ) 3432 if( obj )
3434 { 3433 {
3435 gSelectMgr->deselectAll(); 3434 LLSelectMgr::getInstance()->deselectAll();
3436 gSelectMgr->addAsIndividual( obj, SELECT_ALL_TES, FALSE ); 3435 LLSelectMgr::getInstance()->addAsIndividual( obj, SELECT_ALL_TES, FALSE );
3437 gSelectMgr->selectionSetObjectName( new_name ); 3436 LLSelectMgr::getInstance()->selectionSetObjectName( new_name );
3438 gSelectMgr->deselectAll(); 3437 LLSelectMgr::getInstance()->deselectAll();
3439 } 3438 }
3440 } 3439 }
3441 } 3440 }
@@ -3450,7 +3449,7 @@ BOOL LLObjectBridge::renameItem(const LLString& new_name)
3450 3449
3451LLString LLLSLTextBridge::sPrefix("Script: "); 3450LLString LLLSLTextBridge::sPrefix("Script: ");
3452 3451
3453LLViewerImage* LLLSLTextBridge::getIcon() const 3452LLUIImagePtr LLLSLTextBridge::getIcon() const
3454{ 3453{
3455 return get_item_icon(LLAssetType::AT_SCRIPT, LLInventoryType::IT_LSL, 0, FALSE); 3454 return get_item_icon(LLAssetType::AT_SCRIPT, LLInventoryType::IT_LSL, 0, FALSE);
3456} 3455}
@@ -4176,7 +4175,7 @@ void remove_inventory_category_from_avatar_step2( BOOL proceed, void* userdata)
4176 LLViewerObject *found_obj = gObjectList.findObject( obj_item_array.get(i)->getUUID()); 4175 LLViewerObject *found_obj = gObjectList.findObject( obj_item_array.get(i)->getUUID());
4177 if (found_obj) 4176 if (found_obj)
4178 { 4177 {
4179 gSelectMgr->remove(found_obj); 4178 LLSelectMgr::getInstance()->remove(found_obj);
4180 } 4179 }
4181 else 4180 else
4182 { 4181 {
@@ -4243,7 +4242,7 @@ LLString LLWearableBridge::getLabelSuffix() const
4243 } 4242 }
4244} 4243}
4245 4244
4246LLViewerImage* LLWearableBridge::getIcon() const 4245LLUIImagePtr LLWearableBridge::getIcon() const
4247{ 4246{
4248 return get_item_icon(mAssetType, mInvType, mWearableType, FALSE); 4247 return get_item_icon(mAssetType, mInvType, mWearableType, FALSE);
4249} 4248}
diff --git a/linden/indra/newview/llinventorybridge.h b/linden/indra/newview/llinventorybridge.h
index cca56c2..80b65b2 100644
--- a/linden/indra/newview/llinventorybridge.h
+++ b/linden/indra/newview/llinventorybridge.h
@@ -199,7 +199,7 @@ public:
199 199
200protected: 200protected:
201 LLInvFVBridge(LLInventoryPanel* inventory, const LLUUID& uuid) : 201 LLInvFVBridge(LLInventoryPanel* inventory, const LLUUID& uuid) :
202 mInventoryPanel(inventory), mUUID(uuid) {} 202 mInventoryPanel(inventory), mUUID(uuid), mInvType(LLInventoryType::IT_NONE) {}
203 203
204 LLInventoryObject* getInventoryObject() const; 204 LLInventoryObject* getInventoryObject() const;
205 BOOL isInTrash() const; 205 BOOL isInTrash() const;
@@ -235,7 +235,7 @@ public:
235 virtual void selectItem(); 235 virtual void selectItem();
236 virtual void restoreItem(); 236 virtual void restoreItem();
237 237
238 virtual LLViewerImage* getIcon() const; 238 virtual LLUIImagePtr getIcon() const;
239 virtual const LLString& getDisplayName() const; 239 virtual const LLString& getDisplayName() const;
240 virtual LLString getLabelSuffix() const; 240 virtual LLString getLabelSuffix() const;
241 virtual PermissionMask getPermissionMask() const; 241 virtual PermissionMask getPermissionMask() const;
@@ -275,7 +275,7 @@ public:
275 virtual void restoreItem(); 275 virtual void restoreItem();
276 276
277 277
278 virtual LLViewerImage* getIcon() const; 278 virtual LLUIImagePtr getIcon() const;
279 virtual BOOL renameItem(const LLString& new_name); 279 virtual BOOL renameItem(const LLString& new_name);
280 virtual BOOL removeItem(); 280 virtual BOOL removeItem();
281 virtual BOOL isClipboardPasteable() const; 281 virtual BOOL isClipboardPasteable() const;
@@ -297,7 +297,7 @@ public:
297 297
298protected: 298protected:
299 LLFolderBridge(LLInventoryPanel* inventory, const LLUUID& uuid) : 299 LLFolderBridge(LLInventoryPanel* inventory, const LLUUID& uuid) :
300 LLInvFVBridge(inventory, uuid) {} 300 LLInvFVBridge(inventory, uuid), mCallingCards(FALSE), mWearables(FALSE) {}
301 301
302 // menu callbacks 302 // menu callbacks
303 static void pasteClipboard(void* user_data); 303 static void pasteClipboard(void* user_data);
@@ -337,7 +337,7 @@ class LLScriptBridge : public LLItemBridge
337{ 337{
338 friend class LLInvFVBridge; 338 friend class LLInvFVBridge;
339public: 339public:
340 LLViewerImage* getIcon() const; 340 LLUIImagePtr getIcon() const;
341 341
342protected: 342protected:
343 LLScriptBridge( LLInventoryPanel* inventory, const LLUUID& uuid ) : 343 LLScriptBridge( LLInventoryPanel* inventory, const LLUUID& uuid ) :
@@ -351,7 +351,7 @@ class LLTextureBridge : public LLItemBridge
351public: 351public:
352 virtual const LLString& getPrefix() { return sPrefix; } 352 virtual const LLString& getPrefix() { return sPrefix; }
353 353
354 virtual LLViewerImage* getIcon() const; 354 virtual LLUIImagePtr getIcon() const;
355 virtual void openItem(); 355 virtual void openItem();
356 356
357protected: 357protected:
@@ -367,7 +367,7 @@ class LLSoundBridge : public LLItemBridge
367public: 367public:
368 virtual const LLString& getPrefix() { return sPrefix; } 368 virtual const LLString& getPrefix() { return sPrefix; }
369 369
370 virtual LLViewerImage* getIcon() const; 370 virtual LLUIImagePtr getIcon() const;
371 virtual void openItem(); 371 virtual void openItem();
372 virtual void previewItem(); 372 virtual void previewItem();
373 virtual void buildContextMenu(LLMenuGL& menu, U32 flags); 373 virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
@@ -387,7 +387,7 @@ public:
387 virtual const LLString& getPrefix() { return sPrefix; } 387 virtual const LLString& getPrefix() { return sPrefix; }
388 virtual void performAction(LLFolderView* folder, LLInventoryModel* model, LLString action); 388 virtual void performAction(LLFolderView* folder, LLInventoryModel* model, LLString action);
389 virtual void buildContextMenu(LLMenuGL& menu, U32 flags); 389 virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
390 virtual LLViewerImage* getIcon() const; 390 virtual LLUIImagePtr getIcon() const;
391 virtual void openItem(); 391 virtual void openItem();
392 392
393protected: 393protected:
@@ -427,7 +427,7 @@ public:
427 427
428 virtual LLString getLabelSuffix() const; 428 virtual LLString getLabelSuffix() const;
429 //virtual const LLString& getDisplayName() const; 429 //virtual const LLString& getDisplayName() const;
430 virtual LLViewerImage* getIcon() const; 430 virtual LLUIImagePtr getIcon() const;
431 virtual void performAction(LLFolderView* folder, LLInventoryModel* model, LLString action); 431 virtual void performAction(LLFolderView* folder, LLInventoryModel* model, LLString action);
432 virtual void openItem(); 432 virtual void openItem();
433 virtual void buildContextMenu(LLMenuGL& menu, U32 flags); 433 virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
@@ -454,7 +454,7 @@ class LLNotecardBridge : public LLItemBridge
454public: 454public:
455 virtual const LLString& getPrefix() { return sPrefix; } 455 virtual const LLString& getPrefix() { return sPrefix; }
456 456
457 virtual LLViewerImage* getIcon() const; 457 virtual LLUIImagePtr getIcon() const;
458 virtual void openItem(); 458 virtual void openItem();
459 459
460protected: 460protected:
@@ -471,7 +471,7 @@ class LLGestureBridge : public LLItemBridge
471public: 471public:
472 virtual const LLString& getPrefix() { return sPrefix; } 472 virtual const LLString& getPrefix() { return sPrefix; }
473 473
474 virtual LLViewerImage* getIcon() const; 474 virtual LLUIImagePtr getIcon() const;
475 475
476 // Only suffix for gesture items, not task items, because only 476 // Only suffix for gesture items, not task items, because only
477 // gestures in your inventory can be active. 477 // gestures in your inventory can be active.
@@ -501,7 +501,7 @@ public:
501 virtual void performAction(LLFolderView* folder, LLInventoryModel* model, LLString action); 501 virtual void performAction(LLFolderView* folder, LLInventoryModel* model, LLString action);
502 virtual void buildContextMenu(LLMenuGL& menu, U32 flags); 502 virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
503 503
504 virtual LLViewerImage* getIcon() const; 504 virtual LLUIImagePtr getIcon() const;
505 virtual void openItem(); 505 virtual void openItem();
506 506
507protected: 507protected:
@@ -519,7 +519,7 @@ class LLObjectBridge : public LLItemBridge
519public: 519public:
520 virtual const LLString& getPrefix() { return sPrefix; } 520 virtual const LLString& getPrefix() { return sPrefix; }
521 521
522 virtual LLViewerImage* getIcon() const; 522 virtual LLUIImagePtr getIcon() const;
523 virtual void performAction(LLFolderView* folder, LLInventoryModel* model, LLString action); 523 virtual void performAction(LLFolderView* folder, LLInventoryModel* model, LLString action);
524 virtual void openItem(); 524 virtual void openItem();
525 virtual LLFontGL::StyleFlags getLabelStyle() const; 525 virtual LLFontGL::StyleFlags getLabelStyle() const;
@@ -552,7 +552,7 @@ class LLLSLTextBridge : public LLItemBridge
552public: 552public:
553 virtual const LLString& getPrefix() { return sPrefix; } 553 virtual const LLString& getPrefix() { return sPrefix; }
554 554
555 virtual LLViewerImage* getIcon() const; 555 virtual LLUIImagePtr getIcon() const;
556 virtual void openItem(); 556 virtual void openItem();
557 557
558protected: 558protected:
@@ -568,7 +568,7 @@ class LLWearableBridge : public LLItemBridge
568{ 568{
569 friend class LLInvFVBridge; 569 friend class LLInvFVBridge;
570public: 570public:
571 virtual LLViewerImage* getIcon() const; 571 virtual LLUIImagePtr getIcon() const;
572 virtual void performAction(LLFolderView* folder, LLInventoryModel* model, LLString action); 572 virtual void performAction(LLFolderView* folder, LLInventoryModel* model, LLString action);
573 virtual void openItem(); 573 virtual void openItem();
574 virtual void buildContextMenu(LLMenuGL& menu, U32 flags); 574 virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
diff --git a/linden/indra/newview/llinventorymodel.cpp b/linden/indra/newview/llinventorymodel.cpp
index 13a45a8..e76c427 100644
--- a/linden/indra/newview/llinventorymodel.cpp
+++ b/linden/indra/newview/llinventorymodel.cpp
@@ -930,6 +930,11 @@ void LLInventoryModel::removeObserver(LLInventoryObserver* observer)
930 mObservers.erase(observer); 930 mObservers.erase(observer);
931} 931}
932 932
933BOOL LLInventoryModel::containsObserver(LLInventoryObserver* observer)
934{
935 return mObservers.find(observer) != mObservers.end();
936}
937
933// Call this method when it's time to update everyone on a new state, 938// Call this method when it's time to update everyone on a new state,
934// by default, the inventory model will not update observers 939// by default, the inventory model will not update observers
935// automatically. 940// automatically.
diff --git a/linden/indra/newview/llinventorymodel.h b/linden/indra/newview/llinventorymodel.h
index 8205bf4..b03be24 100644
--- a/linden/indra/newview/llinventorymodel.h
+++ b/linden/indra/newview/llinventorymodel.h
@@ -243,6 +243,7 @@ public:
243 // to remove it. 243 // to remove it.
244 void addObserver(LLInventoryObserver* observer); 244 void addObserver(LLInventoryObserver* observer);
245 void removeObserver(LLInventoryObserver* observer); 245 void removeObserver(LLInventoryObserver* observer);
246 BOOL containsObserver(LLInventoryObserver* observer);
246 247
247 // 248 //
248 // Misc Methods 249 // Misc Methods
diff --git a/linden/indra/newview/llinventoryview.cpp b/linden/indra/newview/llinventoryview.cpp
index 340608b..5e0456d 100644
--- a/linden/indra/newview/llinventoryview.cpp
+++ b/linden/indra/newview/llinventoryview.cpp
@@ -79,11 +79,13 @@
79#include "llviewermessage.h" 79#include "llviewermessage.h"
80#include "llviewerregion.h" 80#include "llviewerregion.h"
81#include "lltabcontainer.h" 81#include "lltabcontainer.h"
82#include "llvieweruictrlfactory.h" 82#include "lluictrlfactory.h"
83#include "llselectmgr.h" 83#include "llselectmgr.h"
84 84
85#include "llsdserialize.h" 85#include "llsdserialize.h"
86 86
87static LLRegisterWidget<LLInventoryPanel> r("inventory_panel");
88
87LLDynamicArray<LLInventoryView*> LLInventoryView::sActiveViews; 89LLDynamicArray<LLInventoryView*> LLInventoryView::sActiveViews;
88 90
89//BOOL LLInventoryView::sOpenNextNewItem = FALSE; 91//BOOL LLInventoryView::sOpenNextNewItem = FALSE;
@@ -113,18 +115,18 @@ LLInventoryViewFinder::LLInventoryViewFinder(const LLString& name,
113 mFilter(inventory_view->mActivePanel->getFilter()) 115 mFilter(inventory_view->mActivePanel->getFilter())
114{ 116{
115 117
116 gUICtrlFactory->buildFloater(this, "floater_inventory_view_finder.xml"); 118 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_inventory_view_finder.xml");
117 119
118 childSetAction("All", selectAllTypes, this); 120 childSetAction("All", selectAllTypes, this);
119 childSetAction("None", selectNoTypes, this); 121 childSetAction("None", selectNoTypes, this);
120 122
121 mSpinSinceHours = LLUICtrlFactory::getSpinnerByName(this, "spin_hours_ago"); 123 mSpinSinceHours = getChild<LLSpinCtrl>("spin_hours_ago");
122 childSetCommitCallback("spin_hours_ago", onTimeAgo, this); 124 childSetCommitCallback("spin_hours_ago", onTimeAgo, this);
123 125
124 mSpinSinceDays = LLUICtrlFactory::getSpinnerByName(this, "spin_days_ago"); 126 mSpinSinceDays = getChild<LLSpinCtrl>("spin_days_ago");
125 childSetCommitCallback("spin_days_ago", onTimeAgo, this); 127 childSetCommitCallback("spin_days_ago", onTimeAgo, this);
126 128
127// mCheckSinceLogoff = LLUICtrlFactory::getSpinnerByName(this, "check_since_logoff"); 129// mCheckSinceLogoff = getChild<LLSpinCtrl>("check_since_logoff");
128 childSetCommitCallback("check_since_logoff", onCheckSinceLogoff, this); 130 childSetCommitCallback("check_since_logoff", onCheckSinceLogoff, this);
129 131
130 childSetAction("Close", onCloseBtn, this); 132 childSetAction("Close", onCloseBtn, this);
@@ -491,12 +493,12 @@ void LLInventoryView::init(LLInventoryModel* inventory)
491 mSavedFolderState = new LLSaveFolderState(); 493 mSavedFolderState = new LLSaveFolderState();
492 mSavedFolderState->setApply(FALSE); 494 mSavedFolderState->setApply(FALSE);
493 495
494 gUICtrlFactory->buildFloater(this, "floater_inventory.xml", NULL); 496 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_inventory.xml", NULL);
495 497
496 mFilterTabs = (LLTabContainer*)LLUICtrlFactory::getTabContainerByName(this, "inventory filter tabs"); 498 mFilterTabs = (LLTabContainer*)getChild<LLTabContainer>("inventory filter tabs");
497 499
498 // Set up the default inv. panel/filter settings. 500 // Set up the default inv. panel/filter settings.
499 mActivePanel = (LLInventoryPanel*)getCtrlByNameAndType("All Items", WIDGET_TYPE_INVENTORY_PANEL); 501 mActivePanel = getChild<LLInventoryPanel>("All Items");
500 if (mActivePanel) 502 if (mActivePanel)
501 { 503 {
502 // "All Items" is the previous only view, so it gets the InventorySortOrder 504 // "All Items" is the previous only view, so it gets the InventorySortOrder
@@ -505,7 +507,7 @@ void LLInventoryView::init(LLInventoryModel* inventory)
505 mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState); 507 mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
506 mActivePanel->setSelectCallback(onSelectionChange, mActivePanel); 508 mActivePanel->setSelectCallback(onSelectionChange, mActivePanel);
507 } 509 }
508 LLInventoryPanel* recent_items_panel = (LLInventoryPanel*)getCtrlByNameAndType("Recent Items", WIDGET_TYPE_INVENTORY_PANEL); 510 LLInventoryPanel* recent_items_panel = getChild<LLInventoryPanel>("Recent Items");
509 if (recent_items_panel) 511 if (recent_items_panel)
510 { 512 {
511 recent_items_panel->setSinceLogoff(TRUE); 513 recent_items_panel->setSinceLogoff(TRUE);
@@ -541,7 +543,7 @@ void LLInventoryView::init(LLInventoryModel* inventory)
541 } 543 }
542 544
543 545
544 mSearchEditor = (LLSearchEditor*)getCtrlByNameAndType("inventory search editor", WIDGET_TYPE_SEARCH_EDITOR); 546 mSearchEditor = getChild<LLSearchEditor>("inventory search editor");
545 if (mSearchEditor) 547 if (mSearchEditor)
546 { 548 {
547 mSearchEditor->setSearchCallback(onSearchEdit, this); 549 mSearchEditor->setSearchCallback(onSearchEdit, this);
@@ -565,7 +567,7 @@ LLInventoryView::~LLInventoryView( void )
565{ 567{
566 // Save the filters state. 568 // Save the filters state.
567 LLSD filterRoot; 569 LLSD filterRoot;
568 LLInventoryPanel* all_items_panel = (LLInventoryPanel*)getCtrlByNameAndType("All Items", WIDGET_TYPE_INVENTORY_PANEL); 570 LLInventoryPanel* all_items_panel = getChild<LLInventoryPanel>("All Items");
569 if (all_items_panel) 571 if (all_items_panel)
570 { 572 {
571 LLInventoryFilter* filter = all_items_panel->getFilter(); 573 LLInventoryFilter* filter = all_items_panel->getFilter();
@@ -574,7 +576,7 @@ LLInventoryView::~LLInventoryView( void )
574 filterRoot[filter->getName()] = filterState; 576 filterRoot[filter->getName()] = filterState;
575 } 577 }
576 578
577 LLInventoryPanel* recent_items_panel = (LLInventoryPanel*)getCtrlByNameAndType("Recent Items", WIDGET_TYPE_INVENTORY_PANEL); 579 LLInventoryPanel* recent_items_panel = getChild<LLInventoryPanel>("Recent Items");
578 if (recent_items_panel) 580 if (recent_items_panel)
579 { 581 {
580 LLInventoryFilter* filter = recent_items_panel->getFilter(); 582 LLInventoryFilter* filter = recent_items_panel->getFilter();
@@ -606,7 +608,7 @@ void LLInventoryView::draw()
606 std::ostringstream title; 608 std::ostringstream title;
607 title << "Inventory"; 609 title << "Inventory";
608 LLString item_count_string; 610 LLString item_count_string;
609 gResMgr->getIntegerString(item_count_string, gInventory.getItemCount()); 611 LLResMgr::getInstance()->getIntegerString(item_count_string, gInventory.getItemCount());
610 title << " (" << item_count_string << " items)"; 612 title << " (" << item_count_string << " items)";
611 title << mFilterText; 613 title << mFilterText;
612 setTitle(title.str()); 614 setTitle(title.str());
@@ -727,15 +729,16 @@ void LLInventoryView::onClose(bool app_quitting)
727 } 729 }
728} 730}
729 731
730BOOL LLInventoryView::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent) 732BOOL LLInventoryView::handleKeyHere(KEY key, MASK mask)
731{ 733{
732 LLFolderView* root_folder = mActivePanel ? mActivePanel->getRootFolder() : NULL; 734 LLFolderView* root_folder = mActivePanel ? mActivePanel->getRootFolder() : NULL;
733 if (root_folder) 735 if (root_folder)
734 { 736 {
735 // first check for user accepting current search results 737 // first check for user accepting current search results
736 if (!called_from_parent 738 if (mSearchEditor
737 && mSearchEditor && mSearchEditor->hasFocus() 739 && mSearchEditor->hasFocus()
738 && (key == KEY_RETURN || key == KEY_DOWN) 740 && (key == KEY_RETURN
741 || key == KEY_DOWN)
739 && mask == MASK_NONE) 742 && mask == MASK_NONE)
740 { 743 {
741 // move focus to inventory proper 744 // move focus to inventory proper
@@ -750,7 +753,7 @@ BOOL LLInventoryView::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent)
750 } 753 }
751 } 754 }
752 755
753 return LLFloater::handleKeyHere(key, mask, called_from_parent); 756 return LLFloater::handleKeyHere(key, mask);
754 757
755} 758}
756 759
@@ -762,7 +765,7 @@ void LLInventoryView::changed(U32 mask)
762 { 765 {
763 LLLocale locale(LLLocale::USER_LOCALE); 766 LLLocale locale(LLLocale::USER_LOCALE);
764 LLString item_count_string; 767 LLString item_count_string;
765 gResMgr->getIntegerString(item_count_string, gInventory.getItemCount()); 768 LLResMgr::getInstance()->getIntegerString(item_count_string, gInventory.getItemCount());
766 title << " (Fetched " << item_count_string << " items...)"; 769 title << " (Fetched " << item_count_string << " items...)";
767 } 770 }
768 title << mFilterText; 771 title << mFilterText;
@@ -1076,7 +1079,7 @@ BOOL LLInventoryView::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
1076 1079
1077 return handled; 1080 return handled;
1078} 1081}
1079LLUUID get_item_icon_uuid(LLAssetType::EType asset_type, 1082LLString get_item_icon_name(LLAssetType::EType asset_type,
1080 LLInventoryType::EType inventory_type, 1083 LLInventoryType::EType inventory_type,
1081 U32 attachment_point, 1084 U32 attachment_point,
1082 BOOL item_is_multi ) 1085 BOOL item_is_multi )
@@ -1193,19 +1196,17 @@ LLUUID get_item_icon_uuid(LLAssetType::EType asset_type,
1193 default: 1196 default:
1194 break; 1197 break;
1195 } 1198 }
1196 LLString uuid_string = gViewerArt.getString(ICON_NAME[idx]); 1199
1197 return LLUUID(uuid_string); 1200 return LLString(ICON_NAME[idx]);
1198} 1201}
1199 1202
1200LLViewerImage* get_item_icon(LLAssetType::EType asset_type, 1203LLUIImagePtr get_item_icon(LLAssetType::EType asset_type,
1201 LLInventoryType::EType inventory_type, 1204 LLInventoryType::EType inventory_type,
1202 U32 attachment_point, 1205 U32 attachment_point,
1203 BOOL item_is_multi) 1206 BOOL item_is_multi)
1204{ 1207{
1205 LLUUID icon_uuid = get_item_icon_uuid(asset_type, inventory_type, attachment_point, item_is_multi ); 1208 const LLString& icon_name = get_item_icon_name(asset_type, inventory_type, attachment_point, item_is_multi );
1206 LLViewerImage* imagep = gImageList.getImage(icon_uuid, MIPMAP_FALSE, TRUE); 1209 return LLUI::getUIImage(icon_name);
1207 imagep->setClamp(TRUE, TRUE);
1208 return imagep;
1209} 1210}
1210 1211
1211const LLString LLInventoryPanel::DEFAULT_SORT_ORDER = LLString("InventorySortOrder"); 1212const LLString LLInventoryPanel::DEFAULT_SORT_ORDER = LLString("InventorySortOrder");
diff --git a/linden/indra/newview/llinventoryview.h b/linden/indra/newview/llinventoryview.h
index c8c3947..a648eb8 100644
--- a/linden/indra/newview/llinventoryview.h
+++ b/linden/indra/newview/llinventoryview.h
@@ -83,8 +83,6 @@ public:
83 83
84 BOOL postBuild(); 84 BOOL postBuild();
85 85
86 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_INVENTORY_PANEL; }
87 virtual LLString getWidgetTag() const { return LL_INVENTORY_PANEL_TAG; }
88 virtual LLXMLNodePtr getXML(bool save_children = true) const; 86 virtual LLXMLNodePtr getXML(bool save_children = true) const;
89 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); 87 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
90 88
@@ -226,7 +224,7 @@ public:
226 virtual void onClose(bool app_quitting); 224 virtual void onClose(bool app_quitting);
227 virtual void setVisible(BOOL visible); 225 virtual void setVisible(BOOL visible);
228 virtual void draw(); 226 virtual void draw();
229 virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); 227 virtual BOOL handleKeyHere(KEY key, MASK mask);
230 228
231 BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, 229 BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
232 EDragAndDropType cargo_type, 230 EDragAndDropType cargo_type,
@@ -346,12 +344,12 @@ void open_notecard(LLViewerInventoryItem* inv_item, const LLString& title, const
346void open_landmark(LLViewerInventoryItem* inv_item, const LLString& title, BOOL show_keep_discard, const LLUUID& source_id = LLUUID::null, BOOL take_focus = TRUE); 344void open_landmark(LLViewerInventoryItem* inv_item, const LLString& title, BOOL show_keep_discard, const LLUUID& source_id = LLUUID::null, BOOL take_focus = TRUE);
347void open_texture(const LLUUID& item_id, const LLString& title, BOOL show_keep_discard, const LLUUID& source_id = LLUUID::null, BOOL take_focus = TRUE); 345void open_texture(const LLUUID& item_id, const LLString& title, BOOL show_keep_discard, const LLUUID& source_id = LLUUID::null, BOOL take_focus = TRUE);
348 346
349LLUUID get_item_icon_uuid(LLAssetType::EType asset_type, 347LLString get_item_icon_name(LLAssetType::EType asset_type,
350 LLInventoryType::EType inventory_type, 348 LLInventoryType::EType inventory_type,
351 U32 attachment_point, 349 U32 attachment_point,
352 BOOL item_is_multi ); 350 BOOL item_is_multi );
353 351
354LLViewerImage* get_item_icon(LLAssetType::EType asset_type, 352LLUIImagePtr get_item_icon(LLAssetType::EType asset_type,
355 LLInventoryType::EType inventory_type, 353 LLInventoryType::EType inventory_type,
356 U32 attachment_point, 354 U32 attachment_point,
357 BOOL item_is_multi ); 355 BOOL item_is_multi );
diff --git a/linden/indra/newview/lljoystickbutton.cpp b/linden/indra/newview/lljoystickbutton.cpp
index b429ed2..548da07 100644
--- a/linden/indra/newview/lljoystickbutton.cpp
+++ b/linden/indra/newview/lljoystickbutton.cpp
@@ -48,6 +48,10 @@
48 48
49#include "llglheaders.h" 49#include "llglheaders.h"
50 50
51static LLRegisterWidget<LLJoystickAgentSlide> r1("joystick_slide");
52static LLRegisterWidget<LLJoystickAgentTurn> r2("joystick_turn");
53
54
51const F32 NUDGE_TIME = 0.25f; // in seconds 55const F32 NUDGE_TIME = 0.25f; // in seconds
52const F32 ORBIT_NUDGE_RATE = 0.05f; // fraction of normal speed 56const F32 ORBIT_NUDGE_RATE = 0.05f; // fraction of normal speed
53 57
@@ -603,37 +607,33 @@ void LLJoystickCameraRotate::setToggleState( BOOL left, BOOL top, BOOL right, BO
603 607
604void LLJoystickCameraRotate::draw() 608void LLJoystickCameraRotate::draw()
605{ 609{
606 610 LLGLSUIDefault gls_ui;
607 if( getVisible() )
608 {
609 LLGLSUIDefault gls_ui;
610 611
611 getImageUnselected()->draw( 0, 0 ); 612 getImageUnselected()->draw( 0, 0 );
612 613
613 if( mInTop ) 614 if( mInTop )
614 { 615 {
615 drawRotatedImage( getImageSelected()->getImage(), 0 ); 616 drawRotatedImage( getImageSelected()->getImage(), 0 );
616 } 617 }
617 618
618 if( mInRight ) 619 if( mInRight )
619 { 620 {
620 drawRotatedImage( getImageSelected()->getImage(), 1 ); 621 drawRotatedImage( getImageSelected()->getImage(), 1 );
621 } 622 }
622 623
623 if( mInBottom ) 624 if( mInBottom )
624 { 625 {
625 drawRotatedImage( getImageSelected()->getImage(), 2 ); 626 drawRotatedImage( getImageSelected()->getImage(), 2 );
626 } 627 }
627 628
628 if( mInLeft ) 629 if( mInLeft )
629 { 630 {
630 drawRotatedImage( getImageSelected()->getImage(), 3 ); 631 drawRotatedImage( getImageSelected()->getImage(), 3 );
631 } 632 }
632 633
633 if (sDebugRects) 634 if (sDebugRects)
634 { 635 {
635 drawDebugRect(); 636 drawDebugRect();
636 }
637 } 637 }
638} 638}
639 639
@@ -722,8 +722,8 @@ LLJoystickCameraZoom::LLJoystickCameraZoom(const LLString& name, LLRect rect, co
722 mInTop( FALSE ), 722 mInTop( FALSE ),
723 mInBottom( FALSE ) 723 mInBottom( FALSE )
724{ 724{
725 mPlusInImage = gImageList.getImage(LLUI::findAssetUUIDByName(plus_in_img), MIPMAP_FALSE, TRUE); 725 mPlusInImage = LLUIImageList::getInstance()->getUIImage(plus_in_img);
726 mMinusInImage = gImageList.getImage(LLUI::findAssetUUIDByName(minus_in_img), MIPMAP_FALSE, TRUE); 726 mMinusInImage = LLUIImageList::getInstance()->getUIImage(minus_in_img);
727} 727}
728 728
729 729
@@ -789,26 +789,23 @@ void LLJoystickCameraZoom::setToggleState( BOOL top, BOOL bottom )
789 789
790void LLJoystickCameraZoom::draw() 790void LLJoystickCameraZoom::draw()
791{ 791{
792 if( getVisible() ) 792 if( mInTop )
793 { 793 {
794 if( mInTop ) 794 mPlusInImage->draw(0,0);
795 { 795 }
796 gl_draw_image( 0, 0, mPlusInImage ); 796 else
797 } 797 if( mInBottom )
798 else 798 {
799 if( mInBottom ) 799 mMinusInImage->draw(0,0);
800 { 800 }
801 gl_draw_image( 0, 0, mMinusInImage ); 801 else
802 } 802 {
803 else 803 getImageUnselected()->draw( 0, 0 );
804 { 804 }
805 getImageUnselected()->draw( 0, 0 );
806 }
807 805
808 if (sDebugRects) 806 if (sDebugRects)
809 { 807 {
810 drawDebugRect(); 808 drawDebugRect();
811 }
812 } 809 }
813} 810}
814 811
diff --git a/linden/indra/newview/lljoystickbutton.h b/linden/indra/newview/lljoystickbutton.h
index ed0d1dd..49db055 100644
--- a/linden/indra/newview/lljoystickbutton.h
+++ b/linden/indra/newview/lljoystickbutton.h
@@ -94,9 +94,6 @@ public:
94 : LLJoystick(name, rect, default_image, selected_image, initial) 94 : LLJoystick(name, rect, default_image, selected_image, initial)
95 { } 95 { }
96 96
97 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_JOYSTICK_TURN; }
98 virtual LLString getWidgetTag() const { return LL_JOYSTICK_TURN; }
99
100 virtual void onHeldDown(); 97 virtual void onHeldDown();
101 98
102 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); 99 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
@@ -113,10 +110,6 @@ public:
113 : LLJoystick(name, rect, default_image, selected_image, initial) 110 : LLJoystick(name, rect, default_image, selected_image, initial)
114 { } 111 { }
115 112
116 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_JOYSTICK_SLIDE; }
117 virtual LLString getWidgetTag() const { return LL_JOYSTICK_SLIDE; }
118
119
120 virtual void onHeldDown(); 113 virtual void onHeldDown();
121 virtual void onMouseUp(); 114 virtual void onMouseUp();
122 115
@@ -183,8 +176,8 @@ protected:
183protected: 176protected:
184 BOOL mInTop; 177 BOOL mInTop;
185 BOOL mInBottom; 178 BOOL mInBottom;
186 LLPointer<LLViewerImage> mPlusInImage; 179 LLUIImagePtr mPlusInImage;
187 LLPointer<LLViewerImage> mMinusInImage; 180 LLUIImagePtr mMinusInImage;
188}; 181};
189 182
190 183
diff --git a/linden/indra/newview/lllandmarklist.cpp b/linden/indra/newview/lllandmarklist.cpp
index 1c0b874..ee5819b 100644
--- a/linden/indra/newview/lllandmarklist.cpp
+++ b/linden/indra/newview/lllandmarklist.cpp
@@ -115,10 +115,7 @@ void LLLandmarkList::processGetAssetReply(
115 } 115 }
116 else 116 else
117 { 117 {
118 if( gViewerStats ) 118 LLViewerStats::getInstance()->incStat( LLViewerStats::ST_DOWNLOAD_FAILED );
119 {
120 gViewerStats->incStat( LLViewerStats::ST_DOWNLOAD_FAILED );
121 }
122 119
123 if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status ) 120 if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status )
124 { 121 {
diff --git a/linden/indra/newview/lllcd.cpp b/linden/indra/newview/lllcd.cpp
index f9660b5..6574f6f 100644
--- a/linden/indra/newview/lllcd.cpp
+++ b/linden/indra/newview/lllcd.cpp
@@ -37,7 +37,7 @@
37#include "llstatusbar.h" 37#include "llstatusbar.h"
38#include "llviewerregion.h" 38#include "llviewerregion.h"
39#include "llviewerstats.h" 39#include "llviewerstats.h"
40#include "llvieweruictrlfactory.h" 40#include "lluictrlfactory.h"
41#include "llviewercontrol.h" 41#include "llviewercontrol.h"
42 42
43#if LL_LCD_COMPILE 43#if LL_LCD_COMPILE
@@ -63,7 +63,7 @@ void CreateLCDDebugWindows()
63 { 63 {
64 // load up the text so we are sure it's externalized and localized correctly. 64 // load up the text so we are sure it's externalized and localized correctly.
65 bogus = new LLPanel(); 65 bogus = new LLPanel();
66 gUICtrlFactory->buildPanel(bogus, "lcd_text.xml"); 66 LLUICtrlFactory::getInstance()->buildPanel(bogus, "lcd_text.xml");
67 67
68 LLLCDPageGroup *pageGroup = NULL; 68 LLLCDPageGroup *pageGroup = NULL;
69 pageGroup = new llDefaultPageGroup(gLcdScreen->mLCD, LLLCD::kLCDDefault, gLcdScreen->mSLIcon); 69 pageGroup = new llDefaultPageGroup(gLcdScreen->mLCD, LLLCD::kLCDDefault, gLcdScreen->mSLIcon);
@@ -212,14 +212,11 @@ void LLDebugPageGroup::UpdateDetails()
212 ping = llformat("%d", gStatusBar->mRegionDetails.mPing); 212 ping = llformat("%d", gStatusBar->mRegionDetails.mPing);
213 } 213 }
214 214
215 if (gViewerStats) 215 packetLoss = llformat("%.1f%%", LLViewerStats::getInstance()->mPacketsLostPercentStat.getCurrent());
216 { 216 simfps = llformat("%d", (int)LLViewerStats::getInstance()->mSimFPS.getCurrent());
217 packetLoss = llformat("%.1f%%", gViewerStats->mPacketsLostPercentStat.getCurrent()); 217 fps = llformat("%.1f%", LLViewerStats::getInstance()->mFPSStat.getMeanPerSec());
218 simfps = llformat("%d", (int)gViewerStats->mSimFPS.getCurrent()); 218 packetsIn = llformat("%d", (int)LLViewerStats::getInstance()->mSimInPPS.getCurrent());
219 fps = llformat("%.1f%", gViewerStats->mFPSStat.getMeanPerSec()); 219 packetsOut = llformat("%d", (int)LLViewerStats::getInstance()->mSimOutPPS.getCurrent());
220 packetsIn = llformat("%d", (int)gViewerStats->mSimInPPS.getCurrent());
221 packetsOut = llformat("%d", (int)gViewerStats->mSimOutPPS.getCurrent());
222 }
223 220
224 // fps 221 // fps
225 mLCD->SetText(mPageArray[0].mDisplayItemArray[0], (LPCTSTR)(utf8str_to_utf16str(fps).c_str())); 222 mLCD->SetText(mPageArray[0].mDisplayItemArray[0], (LPCTSTR)(utf8str_to_utf16str(fps).c_str()));
diff --git a/linden/indra/newview/lllogchat.cpp b/linden/indra/newview/lllogchat.cpp
index b0f3f42..7be9781 100644
--- a/linden/indra/newview/lllogchat.cpp
+++ b/linden/indra/newview/lllogchat.cpp
@@ -33,7 +33,8 @@
33 33
34#include "lllogchat.h" 34#include "lllogchat.h"
35#include "llappviewer.h" 35#include "llappviewer.h"
36 36#include "llfloaterchat.h"
37
37const S32 LOG_RECALL_SIZE = 2048; 38const S32 LOG_RECALL_SIZE = 2048;
38 39
39//static 40//static
@@ -88,7 +89,7 @@ void LLLogChat::saveHistory(LLString filename, LLString line)
88 } 89 }
89} 90}
90 91
91void LLLogChat::loadHistory(LLString filename , void (*callback)(LLString,void*), void* userdata) 92void LLLogChat::loadHistory(LLString filename , void (*callback)(ELogLineType,LLString,void*), void* userdata)
92{ 93{
93 if(!filename.size()) 94 if(!filename.size())
94 { 95 {
@@ -98,6 +99,9 @@ void LLLogChat::loadHistory(LLString filename , void (*callback)(LLString,void*)
98 FILE* fptr = LLFile::fopen(makeLogFileName(filename).c_str(), "r"); /*Flawfinder: ignore*/ 99 FILE* fptr = LLFile::fopen(makeLogFileName(filename).c_str(), "r"); /*Flawfinder: ignore*/
99 if (!fptr) 100 if (!fptr)
100 { 101 {
102 //LLUIString message = LLFloaterChat::getInstance()->getUIString("IM_logging_string");
103 //callback(LOG_EMPTY,"IM_logging_string",userdata);
104 callback(LOG_EMPTY,"",userdata);
101 return; //No previous conversation with this name. 105 return; //No previous conversation with this name.
102 } 106 }
103 else 107 else
@@ -124,14 +128,14 @@ void LLLogChat::loadHistory(LLString filename , void (*callback)(LLString,void*)
124 128
125 if (!firstline) 129 if (!firstline)
126 { 130 {
127 callback(buffer,userdata); 131 callback(LOG_LINE,buffer,userdata);
128 } 132 }
129 else 133 else
130 { 134 {
131 firstline = FALSE; 135 firstline = FALSE;
132 } 136 }
133 } 137 }
134 callback("-- End of Log ---",userdata); 138 callback(LOG_END,"",userdata);
135 139
136 fclose(fptr); 140 fclose(fptr);
137 } 141 }
diff --git a/linden/indra/newview/lllogchat.h b/linden/indra/newview/lllogchat.h
index c2d16dc..8c21ff2 100644
--- a/linden/indra/newview/lllogchat.h
+++ b/linden/indra/newview/lllogchat.h
@@ -36,10 +36,18 @@
36class LLLogChat 36class LLLogChat
37{ 37{
38public: 38public:
39 // status values for callback function
40 enum ELogLineType {
41 LOG_EMPTY,
42 LOG_LINE,
43 LOG_END
44 };
39 static LLString timestamp(bool withdate = false); 45 static LLString timestamp(bool withdate = false);
40 static LLString makeLogFileName(LLString(filename)); 46 static LLString makeLogFileName(LLString(filename));
41 static void saveHistory(LLString filename, LLString line); 47 static void saveHistory(LLString filename, LLString line);
42 static void loadHistory(LLString filename, void (*callback)(LLString,void*),void* userdata); 48 static void loadHistory(LLString filename,
49 void (*callback)(ELogLineType,LLString,void*),
50 void* userdata);
43}; 51};
44 52
45#endif 53#endif
diff --git a/linden/indra/newview/llmanip.cpp b/linden/indra/newview/llmanip.cpp
index 9d9103f..8934266 100644
--- a/linden/indra/newview/llmanip.cpp
+++ b/linden/indra/newview/llmanip.cpp
@@ -53,7 +53,7 @@
53#include "llviewerobject.h" 53#include "llviewerobject.h"
54#include "llviewerwindow.h" 54#include "llviewerwindow.h"
55#include "llvoavatar.h" 55#include "llvoavatar.h"
56#include "llworld.h" // for gWorldPointer 56#include "llworld.h" // for LLWorld::getInstance()
57#include "llresmgr.h" 57#include "llresmgr.h"
58#include "pipeline.h" 58#include "pipeline.h"
59#include "llglheaders.h" 59#include "llglheaders.h"
@@ -106,14 +106,14 @@ void LLManip::getManipNormal(LLViewerObject* object, EManipPart manip, LLVector3
106 LLVector3 grid_scale; 106 LLVector3 grid_scale;
107 LLQuaternion grid_rotation; 107 LLQuaternion grid_rotation;
108 108
109 gSelectMgr->getGrid(grid_origin, grid_rotation, grid_scale); 109 LLSelectMgr::getInstance()->getGrid(grid_origin, grid_rotation, grid_scale);
110 110
111 if (manip >= LL_X_ARROW && manip <= LL_Z_ARROW) 111 if (manip >= LL_X_ARROW && manip <= LL_Z_ARROW)
112 { 112 {
113 LLVector3 arrow_axis; 113 LLVector3 arrow_axis;
114 getManipAxis(object, manip, arrow_axis); 114 getManipAxis(object, manip, arrow_axis);
115 115
116 LLVector3 cross = arrow_axis % gCamera->getAtAxis(); 116 LLVector3 cross = arrow_axis % LLViewerCamera::getInstance()->getAtAxis();
117 normal = cross % arrow_axis; 117 normal = cross % arrow_axis;
118 normal.normVec(); 118 normal.normVec();
119 } 119 }
@@ -148,7 +148,7 @@ BOOL LLManip::getManipAxis(LLViewerObject* object, EManipPart manip, LLVector3 &
148 LLVector3 grid_scale; 148 LLVector3 grid_scale;
149 LLQuaternion grid_rotation; 149 LLQuaternion grid_rotation;
150 150
151 gSelectMgr->getGrid(grid_origin, grid_rotation, grid_scale); 151 LLSelectMgr::getInstance()->getGrid(grid_origin, grid_rotation, grid_scale);
152 152
153 if (manip == LL_X_ARROW) 153 if (manip == LL_X_ARROW)
154 { 154 {
@@ -181,12 +181,12 @@ F32 LLManip::getSubdivisionLevel(const LLVector3 &reference_point, const LLVecto
181 } 181 }
182 else 182 else
183 { 183 {
184 cam_to_reference = reference_point - gCamera->getOrigin(); 184 cam_to_reference = reference_point - LLViewerCamera::getInstance()->getOrigin();
185 } 185 }
186 F32 current_range = cam_to_reference.normVec(); 186 F32 current_range = cam_to_reference.normVec();
187 187
188 F32 projected_translation_axis_length = (translate_axis % cam_to_reference).magVec(); 188 F32 projected_translation_axis_length = (translate_axis % cam_to_reference).magVec();
189 F32 subdivisions = llmax(projected_translation_axis_length * grid_scale / (current_range / gCamera->getPixelMeterRatio() * min_pixel_spacing), 0.f); 189 F32 subdivisions = llmax(projected_translation_axis_length * grid_scale / (current_range / LLViewerCamera::getInstance()->getPixelMeterRatio() * min_pixel_spacing), 0.f);
190 subdivisions = llclamp((F32)pow(2.f, llfloor(log(subdivisions) / log(2.f))), 1.f / 32.f, 32.f); 190 subdivisions = llclamp((F32)pow(2.f, llfloor(log(subdivisions) / log(2.f))), 1.f / 32.f, 32.f);
191 191
192 return subdivisions; 192 return subdivisions;
@@ -194,7 +194,7 @@ F32 LLManip::getSubdivisionLevel(const LLVector3 &reference_point, const LLVecto
194 194
195void LLManip::handleSelect() 195void LLManip::handleSelect()
196{ 196{
197 mObjectSelection = gSelectMgr->getEditSelection(); 197 mObjectSelection = LLSelectMgr::getInstance()->getEditSelection();
198} 198}
199 199
200void LLManip::handleDeselect() 200void LLManip::handleDeselect()
@@ -255,12 +255,12 @@ BOOL LLManip::getMousePointOnPlaneAgent(LLVector3& point, S32 x, S32 y, LLVector
255 return result; 255 return result;
256} 256}
257 257
258BOOL LLManip::getMousePointOnPlaneGlobal(LLVector3d& point, S32 x, S32 y, LLVector3d origin, LLVector3 normal) 258BOOL LLManip::getMousePointOnPlaneGlobal(LLVector3d& point, S32 x, S32 y, LLVector3d origin, LLVector3 normal) const
259{ 259{
260 if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD) 260 if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD)
261 { 261 {
262 BOOL result = FALSE; 262 BOOL result = FALSE;
263 F32 mouse_x = ((F32)x / gViewerWindow->getWindowWidth() - 0.5f) * gCamera->getAspect() / gAgent.getAvatarObject()->mHUDCurZoom; 263 F32 mouse_x = ((F32)x / gViewerWindow->getWindowWidth() - 0.5f) * LLViewerCamera::getInstance()->getAspect() / gAgent.getAvatarObject()->mHUDCurZoom;
264 F32 mouse_y = ((F32)y / gViewerWindow->getWindowHeight() - 0.5f) / gAgent.getAvatarObject()->mHUDCurZoom; 264 F32 mouse_y = ((F32)y / gViewerWindow->getWindowHeight() - 0.5f) / gAgent.getAvatarObject()->mHUDCurZoom;
265 265
266 LLVector3 origin_agent = gAgent.getPosAgentFromGlobal(origin); 266 LLVector3 origin_agent = gAgent.getPosAgentFromGlobal(origin);
@@ -299,7 +299,7 @@ BOOL LLManip::nearestPointOnLineFromMouse( S32 x, S32 y, const LLVector3& b1, co
299 299
300 if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD) 300 if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD)
301 { 301 {
302 F32 mouse_x = (((F32)x / gViewerWindow->getWindowWidth()) - 0.5f) * gCamera->getAspect() / gAgent.getAvatarObject()->mHUDCurZoom; 302 F32 mouse_x = (((F32)x / gViewerWindow->getWindowWidth()) - 0.5f) * LLViewerCamera::getInstance()->getAspect() / gAgent.getAvatarObject()->mHUDCurZoom;
303 F32 mouse_y = (((F32)y / gViewerWindow->getWindowHeight()) - 0.5f) / gAgent.getAvatarObject()->mHUDCurZoom; 303 F32 mouse_y = (((F32)y / gViewerWindow->getWindowHeight()) - 0.5f) / gAgent.getAvatarObject()->mHUDCurZoom;
304 a1 = LLVector3(llmin(b1.mV[VX] - 0.1f, b2.mV[VX] - 0.1f, 0.f), -mouse_x, mouse_y); 304 a1 = LLVector3(llmin(b1.mV[VX] - 0.1f, b2.mV[VX] - 0.1f, 0.f), -mouse_x, mouse_y);
305 a2 = a1 + LLVector3(1.f, 0.f, 0.f); 305 a2 = a1 + LLVector3(1.f, 0.f, 0.f);
@@ -342,7 +342,7 @@ BOOL LLManip::nearestPointOnLineFromMouse( S32 x, S32 y, const LLVector3& b1, co
342 342
343LLVector3 LLManip::getSavedPivotPoint() const 343LLVector3 LLManip::getSavedPivotPoint() const
344{ 344{
345 return gSelectMgr->getSavedBBoxOfSelection().getCenterAgent(); 345 return LLSelectMgr::getInstance()->getSavedBBoxOfSelection().getCenterAgent();
346} 346}
347 347
348LLVector3 LLManip::getPivotPoint() 348LLVector3 LLManip::getPivotPoint()
@@ -351,7 +351,7 @@ LLVector3 LLManip::getPivotPoint()
351 { 351 {
352 return mObjectSelection->getFirstObject()->getPivotPositionAgent(); 352 return mObjectSelection->getFirstObject()->getPivotPositionAgent();
353 } 353 }
354 return gSelectMgr->getBBoxOfSelection().getCenterAgent(); 354 return LLSelectMgr::getInstance()->getBBoxOfSelection().getCenterAgent();
355} 355}
356 356
357 357
@@ -360,7 +360,7 @@ void LLManip::renderGuidelines(BOOL draw_x, BOOL draw_y, BOOL draw_z)
360 LLVector3 grid_origin; 360 LLVector3 grid_origin;
361 LLQuaternion grid_rot; 361 LLQuaternion grid_rot;
362 LLVector3 grid_scale; 362 LLVector3 grid_scale;
363 gSelectMgr->getGrid(grid_origin, grid_rot, grid_scale); 363 LLSelectMgr::getInstance()->getGrid(grid_origin, grid_rot, grid_scale);
364 364
365 const BOOL children_ok = TRUE; 365 const BOOL children_ok = TRUE;
366 LLViewerObject* object = mObjectSelection->getFirstRootObject(children_ok); 366 LLViewerObject* object = mObjectSelection->getFirstRootObject(children_ok);
@@ -369,7 +369,7 @@ void LLManip::renderGuidelines(BOOL draw_x, BOOL draw_y, BOOL draw_z)
369 return; 369 return;
370 } 370 }
371 371
372 //LLVector3 center_agent = gSelectMgr->getBBoxOfSelection().getCenterAgent(); 372 //LLVector3 center_agent = LLSelectMgr::getInstance()->getBBoxOfSelection().getCenterAgent();
373 LLVector3 center_agent = getPivotPoint(); 373 LLVector3 center_agent = getPivotPoint();
374 374
375 glPushMatrix(); 375 glPushMatrix();
@@ -381,7 +381,7 @@ void LLManip::renderGuidelines(BOOL draw_x, BOOL draw_y, BOOL draw_z)
381 grid_rot.getAngleAxis(&angle_radians, &x, &y, &z); 381 grid_rot.getAngleAxis(&angle_radians, &x, &y, &z);
382 glRotatef(angle_radians * RAD_TO_DEG, x, y, z); 382 glRotatef(angle_radians * RAD_TO_DEG, x, y, z);
383 383
384 F32 region_size = gWorldPointer->getRegionWidthInMeters(); 384 F32 region_size = LLWorld::getInstance()->getRegionWidthInMeters();
385 385
386 const F32 LINE_ALPHA = 0.33f; 386 const F32 LINE_ALPHA = 0.33f;
387 387
@@ -423,29 +423,24 @@ void LLManip::renderXYZ(const LLVector3 &vec)
423{ 423{
424 const S32 PAD = 10; 424 const S32 PAD = 10;
425 char feedback_string[128]; /*Flawfinder: ignore*/ 425 char feedback_string[128]; /*Flawfinder: ignore*/
426 LLVector3 camera_pos = gCamera->getOrigin() + gCamera->getAtAxis(); 426 LLVector3 camera_pos = LLViewerCamera::getInstance()->getOrigin() + LLViewerCamera::getInstance()->getAtAxis();
427 S32 vertical_offset = gViewerWindow->getWindowHeight() / 2 - VERTICAL_OFFSET; 427 S32 vertical_offset = gViewerWindow->getWindowHeight() / 2 - VERTICAL_OFFSET;
428 S32 window_center_x = gViewerWindow->getWindowWidth() / 2; 428 S32 window_center_x = gViewerWindow->getWindowWidth() / 2;
429 S32 window_center_y = gViewerWindow->getWindowHeight() / 2; 429 S32 window_center_y = gViewerWindow->getWindowHeight() / 2;
430 430
431 LLUUID image_id;
432 image_id.set(gViewerArt.getString("rounded_square.tga"));
433 LLViewerImage* imagep = gImageList.getImage(image_id, MIPMAP_FALSE, TRUE);
434
435 glPushMatrix(); 431 glPushMatrix();
436 { 432 {
433 LLUIImagePtr imagep = LLUI::getUIImage("rounded_square.tga");
437 gViewerWindow->setup2DRender(); 434 gViewerWindow->setup2DRender();
438 const LLVector2& display_scale = gViewerWindow->getDisplayScale(); 435 const LLVector2& display_scale = gViewerWindow->getDisplayScale();
439 glScalef(display_scale.mV[VX], display_scale.mV[VY], 1.f); 436 glScalef(display_scale.mV[VX], display_scale.mV[VY], 1.f);
440 gGL.color4f(0.f, 0.f, 0.f, 0.7f); 437 gGL.color4f(0.f, 0.f, 0.f, 0.7f);
441 438
442 gl_draw_scaled_image_with_border(window_center_x - 115, 439 imagep->draw(
440 window_center_x - 115,
443 window_center_y + vertical_offset - PAD, 441 window_center_y + vertical_offset - PAD,
444 16,
445 16,
446 235, 442 235,
447 PAD * 2 + 10, 443 PAD * 2 + 10,
448 imagep,
449 LLColor4(0.f, 0.f, 0.f, 0.7f) ); 444 LLColor4(0.f, 0.f, 0.f, 0.7f) );
450 } 445 }
451 glPopMatrix(); 446 glPopMatrix();
@@ -457,31 +452,31 @@ void LLManip::renderXYZ(const LLVector3 &vec)
457 LLGLDepthTest gls_depth(GL_FALSE); 452 LLGLDepthTest gls_depth(GL_FALSE);
458 // render drop shadowed text 453 // render drop shadowed text
459 snprintf(feedback_string, sizeof(feedback_string), "X: %.3f", vec.mV[VX]); /* Flawfinder: ignore */ 454 snprintf(feedback_string, sizeof(feedback_string), "X: %.3f", vec.mV[VX]); /* Flawfinder: ignore */
460 hud_render_text(utf8str_to_wstring(feedback_string), camera_pos, *gResMgr->getRes( LLFONT_SANSSERIF ), LLFontGL::NORMAL, -102.f + 1.f, (F32)vertical_offset - 1.f, LLColor4::black, FALSE); 455 hud_render_text(utf8str_to_wstring(feedback_string), camera_pos, *LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF ), LLFontGL::NORMAL, -102.f + 1.f, (F32)vertical_offset - 1.f, LLColor4::black, FALSE);
461 456
462 snprintf(feedback_string, sizeof(feedback_string), "Y: %.3f", vec.mV[VY]); /* Flawfinder: ignore */ 457 snprintf(feedback_string, sizeof(feedback_string), "Y: %.3f", vec.mV[VY]); /* Flawfinder: ignore */
463 hud_render_text(utf8str_to_wstring(feedback_string), camera_pos, *gResMgr->getRes( LLFONT_SANSSERIF ), LLFontGL::NORMAL, -27.f + 1.f, (F32)vertical_offset - 1.f, LLColor4::black, FALSE); 458 hud_render_text(utf8str_to_wstring(feedback_string), camera_pos, *LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF ), LLFontGL::NORMAL, -27.f + 1.f, (F32)vertical_offset - 1.f, LLColor4::black, FALSE);
464 459
465 snprintf(feedback_string, sizeof(feedback_string), "Z: %.3f", vec.mV[VZ]); /* Flawfinder: ignore */ 460 snprintf(feedback_string, sizeof(feedback_string), "Z: %.3f", vec.mV[VZ]); /* Flawfinder: ignore */
466 hud_render_text(utf8str_to_wstring(feedback_string), camera_pos, *gResMgr->getRes( LLFONT_SANSSERIF ), LLFontGL::NORMAL, 48.f + 1.f, (F32)vertical_offset - 1.f, LLColor4::black, FALSE); 461 hud_render_text(utf8str_to_wstring(feedback_string), camera_pos, *LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF ), LLFontGL::NORMAL, 48.f + 1.f, (F32)vertical_offset - 1.f, LLColor4::black, FALSE);
467 462
468 // render text on top 463 // render text on top
469 snprintf(feedback_string, sizeof(feedback_string), "X: %.3f", vec.mV[VX]); /* Flawfinder: ignore */ 464 snprintf(feedback_string, sizeof(feedback_string), "X: %.3f", vec.mV[VX]); /* Flawfinder: ignore */
470 hud_render_text(utf8str_to_wstring(feedback_string), camera_pos, *gResMgr->getRes( LLFONT_SANSSERIF ), LLFontGL::NORMAL, -102.f, (F32)vertical_offset, LLColor4(1.f, 0.5f, 0.5f, 1.f), FALSE); 465 hud_render_text(utf8str_to_wstring(feedback_string), camera_pos, *LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF ), LLFontGL::NORMAL, -102.f, (F32)vertical_offset, LLColor4(1.f, 0.5f, 0.5f, 1.f), FALSE);
471 466
472 glColor3f(0.5f, 1.f, 0.5f); 467 glColor3f(0.5f, 1.f, 0.5f);
473 snprintf(feedback_string, sizeof(feedback_string), "Y: %.3f", vec.mV[VY]); /* Flawfinder: ignore */ 468 snprintf(feedback_string, sizeof(feedback_string), "Y: %.3f", vec.mV[VY]); /* Flawfinder: ignore */
474 hud_render_text(utf8str_to_wstring(feedback_string), camera_pos, *gResMgr->getRes( LLFONT_SANSSERIF ), LLFontGL::NORMAL, -27.f, (F32)vertical_offset, LLColor4(0.5f, 1.f, 0.5f, 1.f), FALSE); 469 hud_render_text(utf8str_to_wstring(feedback_string), camera_pos, *LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF ), LLFontGL::NORMAL, -27.f, (F32)vertical_offset, LLColor4(0.5f, 1.f, 0.5f, 1.f), FALSE);
475 470
476 glColor3f(0.5f, 0.5f, 1.f); 471 glColor3f(0.5f, 0.5f, 1.f);
477 snprintf(feedback_string, sizeof(feedback_string), "Z: %.3f", vec.mV[VZ]); /* Flawfinder: ignore */ 472 snprintf(feedback_string, sizeof(feedback_string), "Z: %.3f", vec.mV[VZ]); /* Flawfinder: ignore */
478 hud_render_text(utf8str_to_wstring(feedback_string), camera_pos, *gResMgr->getRes( LLFONT_SANSSERIF ), LLFontGL::NORMAL, 48.f, (F32)vertical_offset, LLColor4(0.5f, 0.5f, 1.f, 1.f), FALSE); 473 hud_render_text(utf8str_to_wstring(feedback_string), camera_pos, *LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF ), LLFontGL::NORMAL, 48.f, (F32)vertical_offset, LLColor4(0.5f, 0.5f, 1.f, 1.f), FALSE);
479 } 474 }
480} 475}
481 476
482void LLManip::renderTickText(const LLVector3& pos, const char* text, const LLColor4 &color) 477void LLManip::renderTickText(const LLVector3& pos, const char* text, const LLColor4 &color)
483{ 478{
484 const LLFontGL* big_fontp = gResMgr->getRes( LLFONT_SANSSERIF ); 479 const LLFontGL* big_fontp = LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF );
485 480
486 BOOL hud_selection = mObjectSelection->getSelectType() == SELECT_TYPE_HUD; 481 BOOL hud_selection = mObjectSelection->getSelectType() == SELECT_TYPE_HUD;
487 glMatrixMode(GL_MODELVIEW); 482 glMatrixMode(GL_MODELVIEW);
@@ -511,8 +506,8 @@ void LLManip::renderTickValue(const LLVector3& pos, F32 value, const char* suffi
511{ 506{
512 LLLocale locale(LLLocale::USER_LOCALE); 507 LLLocale locale(LLLocale::USER_LOCALE);
513 508
514 const LLFontGL* big_fontp = gResMgr->getRes( LLFONT_SANSSERIF ); 509 const LLFontGL* big_fontp = LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF );
515 const LLFontGL* small_fontp = gResMgr->getRes( LLFONT_SANSSERIF_SMALL ); 510 const LLFontGL* small_fontp = LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF_SMALL );
516 511
517 char val_string[128]; /*Flawfinder: ignore*/ 512 char val_string[128]; /*Flawfinder: ignore*/
518 char fraction_string[128]; /*Flawfinder: ignore*/ 513 char fraction_string[128]; /*Flawfinder: ignore*/
@@ -559,7 +554,7 @@ void LLManip::renderTickValue(const LLVector3& pos, F32 value, const char* suffi
559 554
560 if (fractional_portion != 0) 555 if (fractional_portion != 0)
561 { 556 {
562 snprintf(fraction_string, sizeof(fraction_string), "%c%02d%s", gResMgr->getDecimalPoint(), fractional_portion, suffix); /* Flawfinder: ignore */ 557 snprintf(fraction_string, sizeof(fraction_string), "%c%02d%s", LLResMgr::getInstance()->getDecimalPoint(), fractional_portion, suffix); /* Flawfinder: ignore */
563 558
564 gViewerWindow->setupViewport(1, -1); 559 gViewerWindow->setupViewport(1, -1);
565 hud_render_utf8text(val_string, render_pos, *big_fontp, LLFontGL::NORMAL, -1.f * big_fontp->getWidthF32(val_string), 3.f, shadow_color, hud_selection); 560 hud_render_utf8text(val_string, render_pos, *big_fontp, LLFontGL::NORMAL, -1.f * big_fontp->getWidthF32(val_string), 3.f, shadow_color, hud_selection);
diff --git a/linden/indra/newview/llmanip.h b/linden/indra/newview/llmanip.h
index ef6630b..34847e7 100644
--- a/linden/indra/newview/llmanip.h
+++ b/linden/indra/newview/llmanip.h
@@ -146,7 +146,7 @@ protected:
146 void renderTickValue(const LLVector3& pos, F32 value, const char* suffix, const LLColor4 &color); 146 void renderTickValue(const LLVector3& pos, F32 value, const char* suffix, const LLColor4 &color);
147 void renderTickText(const LLVector3& pos, const char* suffix, const LLColor4 &color); 147 void renderTickText(const LLVector3& pos, const char* suffix, const LLColor4 &color);
148 void updateGridSettings(); 148 void updateGridSettings();
149 BOOL getMousePointOnPlaneGlobal(LLVector3d& point, S32 x, S32 y, LLVector3d origin, LLVector3 normal); 149 BOOL getMousePointOnPlaneGlobal(LLVector3d& point, S32 x, S32 y, LLVector3d origin, LLVector3 normal) const;
150 BOOL getMousePointOnPlaneAgent(LLVector3& point, S32 x, S32 y, LLVector3 origin, LLVector3 normal); 150 BOOL getMousePointOnPlaneAgent(LLVector3& point, S32 x, S32 y, LLVector3 origin, LLVector3 normal);
151 BOOL nearestPointOnLineFromMouse( S32 x, S32 y, const LLVector3& b1, const LLVector3& b2, F32 &a_param, F32 &b_param ); 151 BOOL nearestPointOnLineFromMouse( S32 x, S32 y, const LLVector3& b1, const LLVector3& b2, F32 &a_param, F32 &b_param );
152 LLColor4 setupSnapGuideRenderPass(S32 pass); 152 LLColor4 setupSnapGuideRenderPass(S32 pass);
diff --git a/linden/indra/newview/llmaniprotate.cpp b/linden/indra/newview/llmaniprotate.cpp
index bd951a6..94bbe7d 100644
--- a/linden/indra/newview/llmaniprotate.cpp
+++ b/linden/indra/newview/llmaniprotate.cpp
@@ -54,7 +54,6 @@
54#include "llstatusbar.h" 54#include "llstatusbar.h"
55#include "llui.h" 55#include "llui.h"
56#include "llvoavatar.h" 56#include "llvoavatar.h"
57#include "llviewborder.h"
58#include "llviewercamera.h" 57#include "llviewercamera.h"
59#include "llviewerobject.h" 58#include "llviewerobject.h"
60#include "llviewerobject.h" 59#include "llviewerobject.h"
@@ -109,7 +108,7 @@ LLManipRotate::LLManipRotate( LLToolComposite* composite )
109void LLManipRotate::handleSelect() 108void LLManipRotate::handleSelect()
110{ 109{
111 // *FIX: put this in mouseDown? 110 // *FIX: put this in mouseDown?
112 gSelectMgr->saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK); 111 LLSelectMgr::getInstance()->saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK);
113 gFloaterTools->setStatusText("rotate"); 112 gFloaterTools->setStatusText("rotate");
114 LLManip::handleSelect(); 113 LLManip::handleSelect();
115} 114}
@@ -225,7 +224,7 @@ void LLManipRotate::render()
225 LLVector3 grid_scale; 224 LLVector3 grid_scale;
226 LLQuaternion grid_rotation; 225 LLQuaternion grid_rotation;
227 226
228 gSelectMgr->getGrid(grid_origin, grid_rotation, grid_scale); 227 LLSelectMgr::getInstance()->getGrid(grid_origin, grid_rotation, grid_scale);
229 228
230 grid_rotation.getAngleAxis(&angle_radians, &x, &y, &z); 229 grid_rotation.getAngleAxis(&angle_radians, &x, &y, &z);
231 glRotatef(angle_radians * RAD_TO_DEG, x, y, z); 230 glRotatef(angle_radians * RAD_TO_DEG, x, y, z);
@@ -386,10 +385,10 @@ BOOL LLManipRotate::handleMouseDownOnPart( S32 x, S32 y, MASK mask )
386 highlightManipulators(x, y); 385 highlightManipulators(x, y);
387 S32 hit_part = mHighlightedPart; 386 S32 hit_part = mHighlightedPart;
388 // we just started a drag, so save initial object positions 387 // we just started a drag, so save initial object positions
389 gSelectMgr->saveSelectedObjectTransform(SELECT_ACTION_TYPE_ROTATE); 388 LLSelectMgr::getInstance()->saveSelectedObjectTransform(SELECT_ACTION_TYPE_ROTATE);
390 389
391 // save selection center 390 // save selection center
392 mRotationCenter = gAgent.getPosGlobalFromAgent( getPivotPoint() ); //gSelectMgr->getSelectionCenterGlobal(); 391 mRotationCenter = gAgent.getPosGlobalFromAgent( getPivotPoint() ); //LLSelectMgr::getInstance()->getSelectionCenterGlobal();
393 392
394 mManipPart = (EManipPart)hit_part; 393 mManipPart = (EManipPart)hit_part;
395 LLVector3 center = gAgent.getPosAgentFromGlobal( mRotationCenter ); 394 LLVector3 center = gAgent.getPosAgentFromGlobal( mRotationCenter );
@@ -435,7 +434,7 @@ BOOL LLManipRotate::handleMouseDownOnPart( S32 x, S32 y, MASK mask )
435 434
436 // Route future Mouse messages here preemptively. (Release on mouse up.) 435 // Route future Mouse messages here preemptively. (Release on mouse up.)
437 setMouseCapture( TRUE ); 436 setMouseCapture( TRUE );
438 gSelectMgr->enableSilhouette(FALSE); 437 LLSelectMgr::getInstance()->enableSilhouette(FALSE);
439 return TRUE; 438 return TRUE;
440} 439}
441 440
@@ -461,12 +460,12 @@ BOOL LLManipRotate::handleMouseUp(S32 x, S32 y, MASK mask)
461 mManipPart = LL_NO_PART; 460 mManipPart = LL_NO_PART;
462 461
463 // Might have missed last update due to timing. 462 // Might have missed last update due to timing.
464 gSelectMgr->sendMultipleUpdate( UPD_ROTATION | UPD_POSITION ); 463 LLSelectMgr::getInstance()->sendMultipleUpdate( UPD_ROTATION | UPD_POSITION );
465 gSelectMgr->enableSilhouette(TRUE); 464 LLSelectMgr::getInstance()->enableSilhouette(TRUE);
466 //gAgent.setObjectTracking(gSavedSettings.getBOOL("TrackFocusObject")); 465 //gAgent.setObjectTracking(gSavedSettings.getBOOL("TrackFocusObject"));
467 466
468 gSelectMgr->updateSelectionCenter(); 467 LLSelectMgr::getInstance()->updateSelectionCenter();
469 gSelectMgr->saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK); 468 LLSelectMgr::getInstance()->saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK);
470 } 469 }
471 470
472 return LLManip::handleMouseUp(x, y, mask); 471 return LLManip::handleMouseUp(x, y, mask);
@@ -635,7 +634,7 @@ void LLManipRotate::drag( S32 x, S32 y )
635 if (object->isRootEdit() && !object->isAttachment()) 634 if (object->isRootEdit() && !object->isAttachment())
636 { 635 {
637 LLVector3d new_pos_global = gAgent.getPosGlobalFromAgent(new_position); 636 LLVector3d new_pos_global = gAgent.getPosGlobalFromAgent(new_position);
638 new_pos_global = gWorldp->clipToVisibleRegions(selectNode->mSavedPositionGlobal, new_pos_global); 637 new_pos_global = LLWorld::getInstance()->clipToVisibleRegions(selectNode->mSavedPositionGlobal, new_pos_global);
639 new_position = gAgent.getPosAgentFromGlobal(new_pos_global); 638 new_position = gAgent.getPosAgentFromGlobal(new_pos_global);
640 } 639 }
641 640
@@ -704,8 +703,8 @@ void LLManipRotate::drag( S32 x, S32 y )
704 } 703 }
705 704
706 // store changes to override updates 705 // store changes to override updates
707 for (LLObjectSelection::iterator iter = gSelectMgr->getSelection()->begin(); 706 for (LLObjectSelection::iterator iter = LLSelectMgr::getInstance()->getSelection()->begin();
708 iter != gSelectMgr->getSelection()->end(); iter++) 707 iter != LLSelectMgr::getInstance()->getSelection()->end(); iter++)
709 { 708 {
710 LLSelectNode* selectNode = *iter; 709 LLSelectNode* selectNode = *iter;
711 LLViewerObject*cur = selectNode->getObject(); 710 LLViewerObject*cur = selectNode->getObject();
@@ -716,7 +715,7 @@ void LLManipRotate::drag( S32 x, S32 y )
716 } 715 }
717 } 716 }
718 717
719 gSelectMgr->updateSelectionCenter(); 718 LLSelectMgr::getInstance()->updateSelectionCenter();
720 719
721 // RN: just clear focus so camera doesn't follow spurious object updates 720 // RN: just clear focus so camera doesn't follow spurious object updates
722 gAgent.clearFocusObject(); 721 gAgent.clearFocusObject();
@@ -744,7 +743,7 @@ void LLManipRotate::renderSnapGuides()
744 LLQuaternion grid_rotation; 743 LLQuaternion grid_rotation;
745 LLVector3 constraint_axis = getConstraintAxis(); 744 LLVector3 constraint_axis = getConstraintAxis();
746 745
747 gSelectMgr->getGrid(grid_origin, grid_rotation, grid_scale); 746 LLSelectMgr::getInstance()->getGrid(grid_origin, grid_rotation, grid_scale);
748 747
749 if (!gSavedSettings.getBOOL("SnapEnabled")) 748 if (!gSavedSettings.getBOOL("SnapEnabled"))
750 { 749 {
@@ -771,7 +770,7 @@ void LLManipRotate::renderSnapGuides()
771 { 770 {
772 test_axis = test_axis * ~grid_rotation; 771 test_axis = test_axis * ~grid_rotation;
773 } 772 }
774 else if (gSelectMgr->getGridMode() == GRID_MODE_REF_OBJECT) 773 else if (LLSelectMgr::getInstance()->getGridMode() == GRID_MODE_REF_OBJECT)
775 { 774 {
776 test_axis = test_axis * ~grid_rotation; 775 test_axis = test_axis * ~grid_rotation;
777 constrain_to_ref_object = TRUE; 776 constrain_to_ref_object = TRUE;
@@ -1118,7 +1117,7 @@ BOOL LLManipRotate::updateVisiblity()
1118 // JC - 03.26.2002 1117 // JC - 03.26.2002
1119 if (!hasMouseCapture()) 1118 if (!hasMouseCapture())
1120 { 1119 {
1121 mRotationCenter = gAgent.getPosGlobalFromAgent( getPivotPoint() );//gSelectMgr->getSelectionCenterGlobal(); 1120 mRotationCenter = gAgent.getPosGlobalFromAgent( getPivotPoint() );//LLSelectMgr::getInstance()->getSelectionCenterGlobal();
1122 } 1121 }
1123 1122
1124 BOOL visible = FALSE; 1123 BOOL visible = FALSE;
@@ -1130,7 +1129,7 @@ BOOL LLManipRotate::updateVisiblity()
1130 mCenterToCamNorm = mCenterToCam; 1129 mCenterToCamNorm = mCenterToCam;
1131 mCenterToCamMag = mCenterToCamNorm.normVec(); 1130 mCenterToCamMag = mCenterToCamNorm.normVec();
1132 1131
1133 mRadiusMeters = RADIUS_PIXELS / (F32) gCamera->getViewHeightInPixels(); 1132 mRadiusMeters = RADIUS_PIXELS / (F32) LLViewerCamera::getInstance()->getViewHeightInPixels();
1134 mRadiusMeters /= gAgent.getAvatarObject()->mHUDCurZoom; 1133 mRadiusMeters /= gAgent.getAvatarObject()->mHUDCurZoom;
1135 1134
1136 mCenterToProfilePlaneMag = mRadiusMeters * mRadiusMeters / mCenterToCamMag; 1135 mCenterToProfilePlaneMag = mRadiusMeters * mRadiusMeters / mCenterToCamMag;
@@ -1142,13 +1141,13 @@ BOOL LLManipRotate::updateVisiblity()
1142 } 1141 }
1143 else 1142 else
1144 { 1143 {
1145 visible = gCamera->projectPosAgentToScreen(center, mCenterScreen ); 1144 visible = LLViewerCamera::getInstance()->projectPosAgentToScreen(center, mCenterScreen );
1146 if( visible ) 1145 if( visible )
1147 { 1146 {
1148 mCenterToCam = gAgent.getCameraPositionAgent() - center; 1147 mCenterToCam = gAgent.getCameraPositionAgent() - center;
1149 mCenterToCamNorm = mCenterToCam; 1148 mCenterToCamNorm = mCenterToCam;
1150 mCenterToCamMag = mCenterToCamNorm.normVec(); 1149 mCenterToCamMag = mCenterToCamNorm.normVec();
1151 LLVector3 cameraAtAxis = gCamera->getAtAxis(); 1150 LLVector3 cameraAtAxis = LLViewerCamera::getInstance()->getAtAxis();
1152 cameraAtAxis.normVec(); 1151 cameraAtAxis.normVec();
1153 1152
1154 F32 z_dist = -1.f * (mCenterToCam * cameraAtAxis); 1153 F32 z_dist = -1.f * (mCenterToCam * cameraAtAxis);
@@ -1165,8 +1164,8 @@ BOOL LLManipRotate::updateVisiblity()
1165 1164
1166 if (mCenterToCamMag > 0.001f) 1165 if (mCenterToCamMag > 0.001f)
1167 { 1166 {
1168 F32 fraction_of_fov = RADIUS_PIXELS / (F32) gCamera->getViewHeightInPixels(); 1167 F32 fraction_of_fov = RADIUS_PIXELS / (F32) LLViewerCamera::getInstance()->getViewHeightInPixels();
1169 F32 apparent_angle = fraction_of_fov * gCamera->getView(); // radians 1168 F32 apparent_angle = fraction_of_fov * LLViewerCamera::getInstance()->getView(); // radians
1170 mRadiusMeters = z_dist * tan(apparent_angle); 1169 mRadiusMeters = z_dist * tan(apparent_angle);
1171 1170
1172 mCenterToProfilePlaneMag = mRadiusMeters * mRadiusMeters / mCenterToCamMag; 1171 mCenterToProfilePlaneMag = mRadiusMeters * mRadiusMeters / mCenterToCamMag;
@@ -1274,7 +1273,7 @@ LLVector3 LLManipRotate::getConstraintAxis()
1274 LLVector3 grid_scale; 1273 LLVector3 grid_scale;
1275 LLQuaternion grid_rotation; 1274 LLQuaternion grid_rotation;
1276 1275
1277 gSelectMgr->getGrid(grid_origin, grid_rotation, grid_scale); 1276 LLSelectMgr::getInstance()->getGrid(grid_origin, grid_rotation, grid_scale);
1278 1277
1279 LLSelectNode* first_node = mObjectSelection->getFirstMoveableNode(TRUE); 1278 LLSelectNode* first_node = mObjectSelection->getFirstMoveableNode(TRUE);
1280 if (first_node) 1279 if (first_node)
@@ -1301,7 +1300,7 @@ LLQuaternion LLManipRotate::dragConstrained( S32 x, S32 y )
1301 LLVector3 grid_scale; 1300 LLVector3 grid_scale;
1302 LLQuaternion grid_rotation; 1301 LLQuaternion grid_rotation;
1303 1302
1304 gSelectMgr->getGrid(grid_origin, grid_rotation, grid_scale); 1303 LLSelectMgr::getInstance()->getGrid(grid_origin, grid_rotation, grid_scale);
1305 1304
1306 LLVector3 axis1; 1305 LLVector3 axis1;
1307 LLVector3 axis2; 1306 LLVector3 axis2;
@@ -1311,7 +1310,7 @@ LLQuaternion LLManipRotate::dragConstrained( S32 x, S32 y )
1311 { 1310 {
1312 test_axis = test_axis * ~grid_rotation; 1311 test_axis = test_axis * ~grid_rotation;
1313 } 1312 }
1314 else if (gSelectMgr->getGridMode() == GRID_MODE_REF_OBJECT) 1313 else if (LLSelectMgr::getInstance()->getGridMode() == GRID_MODE_REF_OBJECT)
1315 { 1314 {
1316 test_axis = test_axis * ~grid_rotation; 1315 test_axis = test_axis * ~grid_rotation;
1317 } 1316 }
@@ -1335,7 +1334,7 @@ LLQuaternion LLManipRotate::dragConstrained( S32 x, S32 y )
1335 { 1334 {
1336 axis1 = axis1 * grid_rotation; 1335 axis1 = axis1 * grid_rotation;
1337 } 1336 }
1338 else if (gSelectMgr->getGridMode() == GRID_MODE_REF_OBJECT) 1337 else if (LLSelectMgr::getInstance()->getGridMode() == GRID_MODE_REF_OBJECT)
1339 { 1338 {
1340 axis1 = axis1 * grid_rotation; 1339 axis1 = axis1 * grid_rotation;
1341 } 1340 }
@@ -1651,7 +1650,7 @@ LLVector3 LLManipRotate::intersectRayWithSphere( const LLVector3& ray_pt, const
1651//static 1650//static
1652void LLManipRotate::mouseToRay( S32 x, S32 y, LLVector3* ray_pt, LLVector3* ray_dir ) 1651void LLManipRotate::mouseToRay( S32 x, S32 y, LLVector3* ray_pt, LLVector3* ray_dir )
1653{ 1652{
1654 if (gSelectMgr->getSelection()->getSelectType() == SELECT_TYPE_HUD) 1653 if (LLSelectMgr::getInstance()->getSelection()->getSelectType() == SELECT_TYPE_HUD)
1655 { 1654 {
1656 F32 mouse_x = (((F32)x / gViewerWindow->getWindowWidth()) - 0.5f) / gAgent.getAvatarObject()->mHUDCurZoom; 1655 F32 mouse_x = (((F32)x / gViewerWindow->getWindowWidth()) - 0.5f) / gAgent.getAvatarObject()->mHUDCurZoom;
1657 F32 mouse_y = ((((F32)y) / gViewerWindow->getWindowHeight()) - 0.5f) / gAgent.getAvatarObject()->mHUDCurZoom; 1656 F32 mouse_y = ((((F32)y) / gViewerWindow->getWindowHeight()) - 0.5f) / gAgent.getAvatarObject()->mHUDCurZoom;
@@ -1662,7 +1661,7 @@ void LLManipRotate::mouseToRay( S32 x, S32 y, LLVector3* ray_pt, LLVector3* ray_
1662 else 1661 else
1663 { 1662 {
1664 *ray_pt = gAgent.getCameraPositionAgent(); 1663 *ray_pt = gAgent.getCameraPositionAgent();
1665 gCamera->projectScreenToPosAgent(x, y, ray_dir); 1664 LLViewerCamera::getInstance()->projectScreenToPosAgent(x, y, ray_dir);
1666 *ray_dir -= *ray_pt; 1665 *ray_dir -= *ray_pt;
1667 ray_dir->normVec(); 1666 ray_dir->normVec();
1668 } 1667 }
@@ -1672,7 +1671,7 @@ void LLManipRotate::highlightManipulators( S32 x, S32 y )
1672{ 1671{
1673 mHighlightedPart = LL_NO_PART; 1672 mHighlightedPart = LL_NO_PART;
1674 1673
1675 //LLBBox bbox = gSelectMgr->getBBoxOfSelection(); 1674 //LLBBox bbox = LLSelectMgr::getInstance()->getBBoxOfSelection();
1676 LLViewerObject *first_object = mObjectSelection->getFirstMoveableObject(TRUE); 1675 LLViewerObject *first_object = mObjectSelection->getFirstMoveableObject(TRUE);
1677 1676
1678 if (!first_object) 1677 if (!first_object)
@@ -1691,7 +1690,7 @@ void LLManipRotate::highlightManipulators( S32 x, S32 y )
1691 LLVector3 grid_scale; 1690 LLVector3 grid_scale;
1692 LLQuaternion grid_rotation; 1691 LLQuaternion grid_rotation;
1693 1692
1694 gSelectMgr->getGrid(grid_origin, grid_rotation, grid_scale); 1693 LLSelectMgr::getInstance()->getGrid(grid_origin, grid_rotation, grid_scale);
1695 1694
1696 LLVector3 rot_x_axis = LLVector3::x_axis * grid_rotation; 1695 LLVector3 rot_x_axis = LLVector3::x_axis * grid_rotation;
1697 LLVector3 rot_y_axis = LLVector3::y_axis * grid_rotation; 1696 LLVector3 rot_y_axis = LLVector3::y_axis * grid_rotation;
diff --git a/linden/indra/newview/llmanipscale.cpp b/linden/indra/newview/llmanipscale.cpp
index 883c3d7..86bfba9 100644
--- a/linden/indra/newview/llmanipscale.cpp
+++ b/linden/indra/newview/llmanipscale.cpp
@@ -159,9 +159,9 @@ inline void LLManipScale::conditionalHighlight( U32 part, const LLColor4* highli
159 159
160void LLManipScale::handleSelect() 160void LLManipScale::handleSelect()
161{ 161{
162 LLBBox bbox = gSelectMgr->getBBoxOfSelection(); 162 LLBBox bbox = LLSelectMgr::getInstance()->getBBoxOfSelection();
163 updateSnapGuides(bbox); 163 updateSnapGuides(bbox);
164 gSelectMgr->saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK); 164 LLSelectMgr::getInstance()->saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK);
165 gFloaterTools->setStatusText("scale"); 165 gFloaterTools->setStatusText("scale");
166 LLManip::handleSelect(); 166 LLManip::handleSelect();
167} 167}
@@ -226,13 +226,13 @@ void LLManipScale::render()
226 const F32 BOX_HANDLE_BASE_SIZE = 50.0f; // box size in pixels = BOX_HANDLE_BASE_SIZE * BOX_HANDLE_BASE_FACTOR 226 const F32 BOX_HANDLE_BASE_SIZE = 50.0f; // box size in pixels = BOX_HANDLE_BASE_SIZE * BOX_HANDLE_BASE_FACTOR
227 const F32 BOX_HANDLE_BASE_FACTOR = 0.2f; 227 const F32 BOX_HANDLE_BASE_FACTOR = 0.2f;
228 228
229 LLVector3 center_agent = gAgent.getPosAgentFromGlobal(gSelectMgr->getSelectionCenterGlobal()); 229 LLVector3 center_agent = gAgent.getPosAgentFromGlobal(LLSelectMgr::getInstance()->getSelectionCenterGlobal());
230 230
231 F32 range; 231 F32 range;
232 F32 range_from_agent; 232 F32 range_from_agent;
233 if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD) 233 if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD)
234 { 234 {
235 mBoxHandleSize = BOX_HANDLE_BASE_SIZE * BOX_HANDLE_BASE_FACTOR / (F32) gCamera->getViewHeightInPixels(); 235 mBoxHandleSize = BOX_HANDLE_BASE_SIZE * BOX_HANDLE_BASE_FACTOR / (F32) LLViewerCamera::getInstance()->getViewHeightInPixels();
236 mBoxHandleSize /= gAgent.getAvatarObject()->mHUDCurZoom; 236 mBoxHandleSize /= gAgent.getAvatarObject()->mHUDCurZoom;
237 } 237 }
238 else 238 else
@@ -253,8 +253,8 @@ void LLManipScale::render()
253 if (range > 0.001f) 253 if (range > 0.001f)
254 { 254 {
255 // range != zero 255 // range != zero
256 F32 fraction_of_fov = BOX_HANDLE_BASE_SIZE / (F32) gCamera->getViewHeightInPixels(); 256 F32 fraction_of_fov = BOX_HANDLE_BASE_SIZE / (F32) LLViewerCamera::getInstance()->getViewHeightInPixels();
257 F32 apparent_angle = fraction_of_fov * gCamera->getView(); // radians 257 F32 apparent_angle = fraction_of_fov * LLViewerCamera::getInstance()->getView(); // radians
258 mBoxHandleSize = range * tan(apparent_angle) * BOX_HANDLE_BASE_FACTOR; 258 mBoxHandleSize = range * tan(apparent_angle) * BOX_HANDLE_BASE_FACTOR;
259 } 259 }
260 else 260 else
@@ -267,7 +267,7 @@ void LLManipScale::render()
267 //////////////////////////////////////////////////////////////////////// 267 ////////////////////////////////////////////////////////////////////////
268 // Draw bounding box 268 // Draw bounding box
269 269
270 LLBBox bbox = gSelectMgr->getBBoxOfSelection(); 270 LLBBox bbox = LLSelectMgr::getInstance()->getBBoxOfSelection();
271 LLVector3 pos_agent = bbox.getPositionAgent(); 271 LLVector3 pos_agent = bbox.getPositionAgent();
272 LLQuaternion rot = bbox.getRotation(); 272 LLQuaternion rot = bbox.getRotation();
273 273
@@ -338,10 +338,10 @@ BOOL LLManipScale::handleMouseDownOnPart( S32 x, S32 y, MASK mask )
338 highlightManipulators(x, y); 338 highlightManipulators(x, y);
339 S32 hit_part = mHighlightedPart; 339 S32 hit_part = mHighlightedPart;
340 340
341 gSelectMgr->enableSilhouette(FALSE); 341 LLSelectMgr::getInstance()->enableSilhouette(FALSE);
342 mManipPart = (EManipPart)hit_part; 342 mManipPart = (EManipPart)hit_part;
343 343
344 LLBBox bbox = gSelectMgr->getBBoxOfSelection(); 344 LLBBox bbox = LLSelectMgr::getInstance()->getBBoxOfSelection();
345 LLVector3 box_center_agent = bbox.getCenterAgent(); 345 LLVector3 box_center_agent = bbox.getCenterAgent();
346 LLVector3 box_corner_agent = bbox.localToAgent( unitVectorToLocalBBoxExtent( partToUnitVector( mManipPart ), bbox ) ); 346 LLVector3 box_corner_agent = bbox.localToAgent( unitVectorToLocalBBoxExtent( partToUnitVector( mManipPart ), bbox ) );
347 347
@@ -354,7 +354,7 @@ BOOL LLManipScale::handleMouseDownOnPart( S32 x, S32 y, MASK mask )
354 mDragPointGlobal = mDragStartPointGlobal; 354 mDragPointGlobal = mDragStartPointGlobal;
355 355
356 // we just started a drag, so save initial object positions, orientations, and scales 356 // we just started a drag, so save initial object positions, orientations, and scales
357 gSelectMgr->saveSelectedObjectTransform(SELECT_ACTION_TYPE_SCALE); 357 LLSelectMgr::getInstance()->saveSelectedObjectTransform(SELECT_ACTION_TYPE_SCALE);
358 // Route future Mouse messages here preemptively. (Release on mouse up.) 358 // Route future Mouse messages here preemptively. (Release on mouse up.)
359 setMouseCapture( TRUE ); 359 setMouseCapture( TRUE );
360 360
@@ -384,16 +384,16 @@ BOOL LLManipScale::handleMouseUp(S32 x, S32 y, MASK mask)
384 } 384 }
385 385
386 //send texture update 386 //send texture update
387 gSelectMgr->adjustTexturesByScale(TRUE, getStretchTextures()); 387 LLSelectMgr::getInstance()->adjustTexturesByScale(TRUE, getStretchTextures());
388 388
389 gSelectMgr->enableSilhouette(TRUE); 389 LLSelectMgr::getInstance()->enableSilhouette(TRUE);
390 mManipPart = LL_NO_PART; 390 mManipPart = LL_NO_PART;
391 391
392 // Might have missed last update due to UPDATE_DELAY timing 392 // Might have missed last update due to UPDATE_DELAY timing
393 gSelectMgr->sendMultipleUpdate( mLastUpdateFlags ); 393 LLSelectMgr::getInstance()->sendMultipleUpdate( mLastUpdateFlags );
394 394
395 //gAgent.setObjectTracking(gSavedSettings.getBOOL("TrackFocusObject")); 395 //gAgent.setObjectTracking(gSavedSettings.getBOOL("TrackFocusObject"));
396 gSelectMgr->saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK); 396 LLSelectMgr::getInstance()->saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK);
397 } 397 }
398 return LLManip::handleMouseUp(x, y, mask); 398 return LLManip::handleMouseUp(x, y, mask);
399} 399}
@@ -422,7 +422,7 @@ BOOL LLManipScale::handleHover(S32 x, S32 y, MASK mask)
422 } 422 }
423 423
424 // Patch up textures, if possible. 424 // Patch up textures, if possible.
425 gSelectMgr->adjustTexturesByScale(FALSE, getStretchTextures()); 425 LLSelectMgr::getInstance()->adjustTexturesByScale(FALSE, getStretchTextures());
426 426
427 gViewerWindow->getWindow()->setCursor(UI_CURSOR_TOOLSCALE); 427 gViewerWindow->getWindow()->setCursor(UI_CURSOR_TOOLSCALE);
428 return TRUE; 428 return TRUE;
@@ -434,7 +434,7 @@ void LLManipScale::highlightManipulators(S32 x, S32 y)
434 434
435 // If we have something selected, try to hit its manipulator handles. 435 // If we have something selected, try to hit its manipulator handles.
436 // Don't do this with nothing selected, as it kills the framerate. 436 // Don't do this with nothing selected, as it kills the framerate.
437 LLBBox bbox = gSelectMgr->getBBoxOfSelection(); 437 LLBBox bbox = LLSelectMgr::getInstance()->getBBoxOfSelection();
438 438
439 if( canAffectSelection() ) 439 if( canAffectSelection() )
440 { 440 {
@@ -447,15 +447,15 @@ void LLManipScale::highlightManipulators(S32 x, S32 y)
447 transform *= cfr; 447 transform *= cfr;
448 LLMatrix4 window_scale; 448 LLMatrix4 window_scale;
449 F32 zoom_level = 2.f * gAgent.getAvatarObject()->mHUDCurZoom; 449 F32 zoom_level = 2.f * gAgent.getAvatarObject()->mHUDCurZoom;
450 window_scale.initAll(LLVector3(zoom_level / gCamera->getAspect(), zoom_level, 0.f), 450 window_scale.initAll(LLVector3(zoom_level / LLViewerCamera::getInstance()->getAspect(), zoom_level, 0.f),
451 LLQuaternion::DEFAULT, 451 LLQuaternion::DEFAULT,
452 LLVector3::zero); 452 LLVector3::zero);
453 transform *= window_scale; 453 transform *= window_scale;
454 } 454 }
455 else 455 else
456 { 456 {
457 LLMatrix4 projMatrix = gCamera->getProjection(); 457 LLMatrix4 projMatrix = LLViewerCamera::getInstance()->getProjection();
458 LLMatrix4 modelView = gCamera->getModelview(); 458 LLMatrix4 modelView = LLViewerCamera::getInstance()->getModelview();
459 transform.initAll(LLVector3(1.f, 1.f, 1.f), bbox.getRotation(), bbox.getPositionAgent()); 459 transform.initAll(LLVector3(1.f, 1.f, 1.f), bbox.getRotation(), bbox.getPositionAgent());
460 460
461 transform *= modelView; 461 transform *= modelView;
@@ -819,8 +819,8 @@ void LLManipScale::drag( S32 x, S32 y )
819 } 819 }
820 820
821 // store changes to override updates 821 // store changes to override updates
822 for (LLObjectSelection::iterator iter = gSelectMgr->getSelection()->begin(); 822 for (LLObjectSelection::iterator iter = LLSelectMgr::getInstance()->getSelection()->begin();
823 iter != gSelectMgr->getSelection()->end(); iter++) 823 iter != LLSelectMgr::getInstance()->getSelection()->end(); iter++)
824 { 824 {
825 LLSelectNode* selectNode = *iter; 825 LLSelectNode* selectNode = *iter;
826 LLViewerObject*cur = selectNode->getObject(); 826 LLViewerObject*cur = selectNode->getObject();
@@ -831,14 +831,14 @@ void LLManipScale::drag( S32 x, S32 y )
831 } 831 }
832 } 832 }
833 833
834 gSelectMgr->updateSelectionCenter(); 834 LLSelectMgr::getInstance()->updateSelectionCenter();
835 gAgent.clearFocusObject(); 835 gAgent.clearFocusObject();
836} 836}
837 837
838// Scale around the 838// Scale around the
839void LLManipScale::dragCorner( S32 x, S32 y ) 839void LLManipScale::dragCorner( S32 x, S32 y )
840{ 840{
841 LLBBox bbox = gSelectMgr->getBBoxOfSelection(); 841 LLBBox bbox = LLSelectMgr::getInstance()->getBBoxOfSelection();
842 842
843 // Suppress scale if mouse hasn't moved. 843 // Suppress scale if mouse hasn't moved.
844 if (x == mLastMouseX && y == mLastMouseY) 844 if (x == mLastMouseX && y == mLastMouseY)
@@ -962,8 +962,8 @@ void LLManipScale::dragCorner( S32 x, S32 y )
962 mInSnapRegime = FALSE; 962 mInSnapRegime = FALSE;
963 } 963 }
964 964
965 F32 max_scale_factor = MAX_OBJECT_SCALE / MIN_OBJECT_SCALE; 965 F32 max_scale_factor = DEFAULT_MAX_PRIM_SCALE / MIN_PRIM_SCALE;
966 F32 min_scale_factor = MIN_OBJECT_SCALE / MAX_OBJECT_SCALE; 966 F32 min_scale_factor = MIN_PRIM_SCALE / DEFAULT_MAX_PRIM_SCALE;
967 967
968 // find max and min scale factors that will make biggest object hit max absolute scale and smallest object hit min absolute scale 968 // find max and min scale factors that will make biggest object hit max absolute scale and smallest object hit min absolute scale
969 for (LLObjectSelection::iterator iter = mObjectSelection->begin(); 969 for (LLObjectSelection::iterator iter = mObjectSelection->begin();
@@ -975,10 +975,10 @@ void LLManipScale::dragCorner( S32 x, S32 y )
975 { 975 {
976 const LLVector3& scale = selectNode->mSavedScale; 976 const LLVector3& scale = selectNode->mSavedScale;
977 977
978 F32 cur_max_scale_factor = llmin( MAX_OBJECT_SCALE / scale.mV[VX], MAX_OBJECT_SCALE / scale.mV[VY], MAX_OBJECT_SCALE / scale.mV[VZ] ); 978 F32 cur_max_scale_factor = llmin( DEFAULT_MAX_PRIM_SCALE / scale.mV[VX], DEFAULT_MAX_PRIM_SCALE / scale.mV[VY], DEFAULT_MAX_PRIM_SCALE / scale.mV[VZ] );
979 max_scale_factor = llmin( max_scale_factor, cur_max_scale_factor ); 979 max_scale_factor = llmin( max_scale_factor, cur_max_scale_factor );
980 980
981 F32 cur_min_scale_factor = llmax( MIN_OBJECT_SCALE / scale.mV[VX], MIN_OBJECT_SCALE / scale.mV[VY], MIN_OBJECT_SCALE / scale.mV[VZ] ); 981 F32 cur_min_scale_factor = llmax( MIN_PRIM_SCALE / scale.mV[VX], MIN_PRIM_SCALE / scale.mV[VY], MIN_PRIM_SCALE / scale.mV[VZ] );
982 min_scale_factor = llmax( min_scale_factor, cur_min_scale_factor ); 982 min_scale_factor = llmax( min_scale_factor, cur_min_scale_factor );
983 } 983 }
984 } 984 }
@@ -1003,7 +1003,7 @@ void LLManipScale::dragCorner( S32 x, S32 y )
1003 LLVector3d new_pos_global = drag_global + (selectNode->mSavedPositionGlobal - drag_global) * scale_factor; 1003 LLVector3d new_pos_global = drag_global + (selectNode->mSavedPositionGlobal - drag_global) * scale_factor;
1004 if (!cur->isAttachment()) 1004 if (!cur->isAttachment())
1005 { 1005 {
1006 new_pos_global = gWorldp->clipToVisibleRegions(selectNode->mSavedPositionGlobal, new_pos_global); 1006 new_pos_global = LLWorld::getInstance()->clipToVisibleRegions(selectNode->mSavedPositionGlobal, new_pos_global);
1007 } 1007 }
1008 cur->setPositionAbsoluteGlobal( new_pos_global ); 1008 cur->setPositionAbsoluteGlobal( new_pos_global );
1009 rebuild(cur); 1009 rebuild(cur);
@@ -1081,7 +1081,7 @@ void LLManipScale::dragFace( S32 x, S32 y )
1081 LLVector3 drag_start_dir_f; 1081 LLVector3 drag_start_dir_f;
1082 drag_start_dir_f.setVec(drag_start_dir_d); 1082 drag_start_dir_f.setVec(drag_start_dir_d);
1083 1083
1084 LLBBox bbox = gSelectMgr->getBBoxOfSelection(); 1084 LLBBox bbox = LLSelectMgr::getInstance()->getBBoxOfSelection();
1085 1085
1086 F32 s = 0; 1086 F32 s = 0;
1087 F32 t = 0; 1087 F32 t = 0;
@@ -1224,7 +1224,7 @@ void LLManipScale::sendUpdates( BOOL send_position_update, BOOL send_scale_updat
1224 // enforce minimum update delay and don't stream updates on sub-object selections 1224 // enforce minimum update delay and don't stream updates on sub-object selections
1225 if( elapsed_time > UPDATE_DELAY && !gSavedSettings.getBOOL("EditLinkedParts") ) 1225 if( elapsed_time > UPDATE_DELAY && !gSavedSettings.getBOOL("EditLinkedParts") )
1226 { 1226 {
1227 gSelectMgr->sendMultipleUpdate( update_flags ); 1227 LLSelectMgr::getInstance()->sendMultipleUpdate( update_flags );
1228 update_timer.reset(); 1228 update_timer.reset();
1229 mSendUpdateOnMouseUp = FALSE; 1229 mSendUpdateOnMouseUp = FALSE;
1230 } 1230 }
@@ -1270,7 +1270,7 @@ void LLManipScale::stretchFace( const LLVector3& drag_start_agent, const LLVecto
1270 1270
1271 F32 denom = axis * dir_local; 1271 F32 denom = axis * dir_local;
1272 F32 desired_delta_size = is_approx_zero(denom) ? 0.f : (delta_local_mag / denom); // in meters 1272 F32 desired_delta_size = is_approx_zero(denom) ? 0.f : (delta_local_mag / denom); // in meters
1273 F32 desired_scale = llclamp(selectNode->mSavedScale.mV[axis_index] + desired_delta_size, MIN_OBJECT_SCALE, MAX_OBJECT_SCALE); 1273 F32 desired_scale = llclamp(selectNode->mSavedScale.mV[axis_index] + desired_delta_size, MIN_PRIM_SCALE, DEFAULT_MAX_PRIM_SCALE);
1274 // propagate scale constraint back to position offset 1274 // propagate scale constraint back to position offset
1275 desired_delta_size = desired_scale - selectNode->mSavedScale.mV[axis_index]; // propagate constraint back to position 1275 desired_delta_size = desired_scale - selectNode->mSavedScale.mV[axis_index]; // propagate constraint back to position
1276 1276
@@ -1288,7 +1288,7 @@ void LLManipScale::stretchFace( const LLVector3& drag_start_agent, const LLVecto
1288 1288
1289 if (cur->isRootEdit() && !cur->isAttachment()) 1289 if (cur->isRootEdit() && !cur->isAttachment())
1290 { 1290 {
1291 LLVector3d new_pos_global = gWorldp->clipToVisibleRegions(selectNode->mSavedPositionGlobal, selectNode->mSavedPositionGlobal + delta_pos_global); 1291 LLVector3d new_pos_global = LLWorld::getInstance()->clipToVisibleRegions(selectNode->mSavedPositionGlobal, selectNode->mSavedPositionGlobal + delta_pos_global);
1292 cur->setPositionGlobal( new_pos_global ); 1292 cur->setPositionGlobal( new_pos_global );
1293 } 1293 }
1294 else 1294 else
@@ -1340,7 +1340,7 @@ void LLManipScale::renderGuidelinesPart( const LLBBox& bbox )
1340 1340
1341 guideline_end -= guideline_start; 1341 guideline_end -= guideline_start;
1342 guideline_end.normVec(); 1342 guideline_end.normVec();
1343 guideline_end *= gWorldPointer->getRegionWidthInMeters(); 1343 guideline_end *= LLWorld::getInstance()->getRegionWidthInMeters();
1344 guideline_end += guideline_start; 1344 guideline_end += guideline_start;
1345 1345
1346 { 1346 {
@@ -1358,7 +1358,7 @@ void LLManipScale::updateSnapGuides(const LLBBox& bbox)
1358 LLVector3 grid_origin; 1358 LLVector3 grid_origin;
1359 LLVector3 grid_scale; 1359 LLVector3 grid_scale;
1360 LLQuaternion grid_rotation; 1360 LLQuaternion grid_rotation;
1361 gSelectMgr->getGrid(grid_origin, grid_rotation, grid_scale); 1361 LLSelectMgr::getInstance()->getGrid(grid_origin, grid_rotation, grid_scale);
1362 1362
1363 LLVector3 box_corner_agent = bbox.localToAgent(unitVectorToLocalBBoxExtent( partToUnitVector( mManipPart ), bbox )); 1363 LLVector3 box_corner_agent = bbox.localToAgent(unitVectorToLocalBBoxExtent( partToUnitVector( mManipPart ), bbox ));
1364 mScaleCenter = getUniform() ? bbox.getCenterAgent() : bbox.localToAgent(unitVectorToLocalBBoxExtent( -1.f * partToUnitVector( mManipPart ), bbox )); 1364 mScaleCenter = getUniform() ? bbox.getCenterAgent() : bbox.localToAgent(unitVectorToLocalBBoxExtent( -1.f * partToUnitVector( mManipPart ), bbox ));
@@ -1372,8 +1372,8 @@ void LLManipScale::updateSnapGuides(const LLBBox& bbox)
1372 } 1372 }
1373 else 1373 else
1374 { 1374 {
1375 F32 object_distance = dist_vec(mScaleCenter, gCamera->getOrigin()); 1375 F32 object_distance = dist_vec(mScaleCenter, LLViewerCamera::getInstance()->getOrigin());
1376 mSnapRegimeOffset = (SNAP_GUIDE_SCREEN_OFFSET * gViewerWindow->getWindowWidth() * object_distance) / gCamera->getPixelMeterRatio(); 1376 mSnapRegimeOffset = (SNAP_GUIDE_SCREEN_OFFSET * gViewerWindow->getWindowWidth() * object_distance) / LLViewerCamera::getInstance()->getPixelMeterRatio();
1377 } 1377 }
1378 LLVector3 cam_at_axis; 1378 LLVector3 cam_at_axis;
1379 F32 snap_guide_length; 1379 F32 snap_guide_length;
@@ -1384,9 +1384,9 @@ void LLManipScale::updateSnapGuides(const LLBBox& bbox)
1384 } 1384 }
1385 else 1385 else
1386 { 1386 {
1387 cam_at_axis = gCamera->getAtAxis(); 1387 cam_at_axis = LLViewerCamera::getInstance()->getAtAxis();
1388 F32 manipulator_distance = dist_vec(box_corner_agent, gCamera->getOrigin()); 1388 F32 manipulator_distance = dist_vec(box_corner_agent, LLViewerCamera::getInstance()->getOrigin());
1389 snap_guide_length = (SNAP_GUIDE_SCREEN_LENGTH * gViewerWindow->getWindowWidth() * manipulator_distance) / gCamera->getPixelMeterRatio(); 1389 snap_guide_length = (SNAP_GUIDE_SCREEN_LENGTH * gViewerWindow->getWindowWidth() * manipulator_distance) / LLViewerCamera::getInstance()->getPixelMeterRatio();
1390 } 1390 }
1391 1391
1392 mSnapGuideLength = snap_guide_length / llmax(0.1f, (llmin(mSnapGuideDir1 * cam_at_axis, mSnapGuideDir2 * cam_at_axis))); 1392 mSnapGuideLength = snap_guide_length / llmax(0.1f, (llmin(mSnapGuideDir1 * cam_at_axis, mSnapGuideDir2 * cam_at_axis)));
@@ -1415,7 +1415,7 @@ void LLManipScale::updateSnapGuides(const LLBBox& bbox)
1415 LLVector3 scale_snap = grid_scale; 1415 LLVector3 scale_snap = grid_scale;
1416 mScaleSnapUnit1 = scale_snap.scaleVec(partToUnitVector( mManipPart )).magVec(); 1416 mScaleSnapUnit1 = scale_snap.scaleVec(partToUnitVector( mManipPart )).magVec();
1417 mScaleSnapUnit2 = mScaleSnapUnit1; 1417 mScaleSnapUnit2 = mScaleSnapUnit1;
1418 mSnapGuideDir1 *= mSnapGuideDir1 * gCamera->getUpAxis() > 0.f ? 1.f : -1.f; 1418 mSnapGuideDir1 *= mSnapGuideDir1 * LLViewerCamera::getInstance()->getUpAxis() > 0.f ? 1.f : -1.f;
1419 mSnapGuideDir2 = mSnapGuideDir1 * -1.f; 1419 mSnapGuideDir2 = mSnapGuideDir1 * -1.f;
1420 mSnapDir1 = mScaleDir; 1420 mSnapDir1 = mScaleDir;
1421 mSnapDir2 = mScaleDir; 1421 mSnapDir2 = mScaleDir;
@@ -1430,7 +1430,7 @@ void LLManipScale::updateSnapGuides(const LLBBox& bbox)
1430 } 1430 }
1431 else 1431 else
1432 { 1432 {
1433 local_camera_dir = (gCamera->getOrigin() - bbox.getCenterAgent()) * ~bbox.getRotation(); 1433 local_camera_dir = (LLViewerCamera::getInstance()->getOrigin() - bbox.getCenterAgent()) * ~bbox.getRotation();
1434 local_camera_dir.normVec(); 1434 local_camera_dir.normVec();
1435 } 1435 }
1436 local_scale_dir -= projected_vec(local_scale_dir, local_camera_dir); 1436 local_scale_dir -= projected_vec(local_scale_dir, local_camera_dir);
@@ -1622,7 +1622,7 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)
1622 gGL.end(); 1622 gGL.end();
1623 } 1623 }
1624 1624
1625 LLVector2 screen_translate_axis(llabs(mScaleDir * gCamera->getLeftAxis()), llabs(mScaleDir * gCamera->getUpAxis())); 1625 LLVector2 screen_translate_axis(llabs(mScaleDir * LLViewerCamera::getInstance()->getLeftAxis()), llabs(mScaleDir * LLViewerCamera::getInstance()->getUpAxis()));
1626 screen_translate_axis.normVec(); 1626 screen_translate_axis.normVec();
1627 1627
1628 S32 tick_label_spacing = llround(screen_translate_axis * sTickLabelSpacing); 1628 S32 tick_label_spacing = llround(screen_translate_axis * sTickLabelSpacing);
@@ -1728,7 +1728,7 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)
1728 LLVector3 text_origin = tick_pos + 1728 LLVector3 text_origin = tick_pos +
1729 (mSnapGuideDir1 * mSnapRegimeOffset * (1.f + tick_scale)); 1729 (mSnapGuideDir1 * mSnapRegimeOffset * (1.f + tick_scale));
1730 1730
1731 EGridMode grid_mode = gSelectMgr->getGridMode(); 1731 EGridMode grid_mode = LLSelectMgr::getInstance()->getGridMode();
1732 F32 tick_val; 1732 F32 tick_val;
1733 if (grid_mode == GRID_MODE_WORLD) 1733 if (grid_mode == GRID_MODE_WORLD)
1734 { 1734 {
@@ -1780,7 +1780,7 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)
1780 LLVector3 text_origin = tick_pos + 1780 LLVector3 text_origin = tick_pos +
1781 (mSnapGuideDir2 * mSnapRegimeOffset * (1.f + tick_scale)); 1781 (mSnapGuideDir2 * mSnapRegimeOffset * (1.f + tick_scale));
1782 1782
1783 EGridMode grid_mode = gSelectMgr->getGridMode(); 1783 EGridMode grid_mode = LLSelectMgr::getInstance()->getGridMode();
1784 F32 tick_val; 1784 F32 tick_val;
1785 if (grid_mode == GRID_MODE_WORLD) 1785 if (grid_mode == GRID_MODE_WORLD)
1786 { 1786 {
@@ -1814,10 +1814,10 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)
1814 { 1814 {
1815 if (mHelpTextTimer.getElapsedTimeF32() < sHelpTextVisibleTime + sHelpTextFadeTime && sNumTimesHelpTextShown < sMaxTimesShowHelpText) 1815 if (mHelpTextTimer.getElapsedTimeF32() < sHelpTextVisibleTime + sHelpTextFadeTime && sNumTimesHelpTextShown < sMaxTimesShowHelpText)
1816 { 1816 {
1817 LLVector3 selection_center_start = gSelectMgr->getSavedBBoxOfSelection().getCenterAgent(); 1817 LLVector3 selection_center_start = LLSelectMgr::getInstance()->getSavedBBoxOfSelection().getCenterAgent();
1818 1818
1819 LLVector3 offset_dir; 1819 LLVector3 offset_dir;
1820 if (mSnapGuideDir1 * gCamera->getAtAxis() > mSnapGuideDir2 * gCamera->getAtAxis()) 1820 if (mSnapGuideDir1 * LLViewerCamera::getInstance()->getAtAxis() > mSnapGuideDir2 * LLViewerCamera::getInstance()->getAtAxis())
1821 { 1821 {
1822 offset_dir = mSnapGuideDir2; 1822 offset_dir = mSnapGuideDir2;
1823 } 1823 }
@@ -1834,7 +1834,7 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)
1834 help_text_color.mV[VALPHA] = clamp_rescale(mHelpTextTimer.getElapsedTimeF32(), sHelpTextVisibleTime, sHelpTextVisibleTime + sHelpTextFadeTime, grid_alpha, 0.f); 1834 help_text_color.mV[VALPHA] = clamp_rescale(mHelpTextTimer.getElapsedTimeF32(), sHelpTextVisibleTime, sHelpTextVisibleTime + sHelpTextFadeTime, grid_alpha, 0.f);
1835 hud_render_utf8text(help_text, help_text_pos, *big_fontp, LLFontGL::NORMAL, -0.5f * big_fontp->getWidthF32(help_text), 3.f, help_text_color, mObjectSelection->getSelectType() == SELECT_TYPE_HUD); 1835 hud_render_utf8text(help_text, help_text_pos, *big_fontp, LLFontGL::NORMAL, -0.5f * big_fontp->getWidthF32(help_text), 3.f, help_text_color, mObjectSelection->getSelectType() == SELECT_TYPE_HUD);
1836 help_text = "to snap to grid"; 1836 help_text = "to snap to grid";
1837 help_text_pos -= gCamera->getUpAxis() * mSnapRegimeOffset * 0.4f; 1837 help_text_pos -= LLViewerCamera::getInstance()->getUpAxis() * mSnapRegimeOffset * 0.4f;
1838 hud_render_utf8text(help_text, help_text_pos, *big_fontp, LLFontGL::NORMAL, -0.5f * big_fontp->getWidthF32(help_text), 3.f, help_text_color, mObjectSelection->getSelectType() == SELECT_TYPE_HUD); 1838 hud_render_utf8text(help_text, help_text_pos, *big_fontp, LLFontGL::NORMAL, -0.5f * big_fontp->getWidthF32(help_text), 3.f, help_text_color, mObjectSelection->getSelectType() == SELECT_TYPE_HUD);
1839 } 1839 }
1840 } 1840 }
@@ -1968,7 +1968,7 @@ F32 LLManipScale::partToMaxScale( S32 part, const LLBBox &bbox ) const
1968 max_extent = bbox_extents.mV[i]; 1968 max_extent = bbox_extents.mV[i];
1969 } 1969 }
1970 } 1970 }
1971 max_scale_factor = bbox_extents.magVec() * MAX_OBJECT_SCALE / max_extent; 1971 max_scale_factor = bbox_extents.magVec() * DEFAULT_MAX_PRIM_SCALE / max_extent;
1972 1972
1973 if (getUniform()) 1973 if (getUniform())
1974 { 1974 {
@@ -1983,7 +1983,7 @@ F32 LLManipScale::partToMinScale( S32 part, const LLBBox &bbox ) const
1983{ 1983{
1984 LLVector3 bbox_extents = unitVectorToLocalBBoxExtent( partToUnitVector( part ), bbox ); 1984 LLVector3 bbox_extents = unitVectorToLocalBBoxExtent( partToUnitVector( part ), bbox );
1985 bbox_extents.abs(); 1985 bbox_extents.abs();
1986 F32 min_extent = MAX_OBJECT_SCALE; 1986 F32 min_extent = DEFAULT_MAX_PRIM_SCALE;
1987 for (U32 i = VX; i <= VZ; i++) 1987 for (U32 i = VX; i <= VZ; i++)
1988 { 1988 {
1989 if (bbox_extents.mV[i] > 0.f && bbox_extents.mV[i] < min_extent) 1989 if (bbox_extents.mV[i] > 0.f && bbox_extents.mV[i] < min_extent)
@@ -1991,7 +1991,7 @@ F32 LLManipScale::partToMinScale( S32 part, const LLBBox &bbox ) const
1991 min_extent = bbox_extents.mV[i]; 1991 min_extent = bbox_extents.mV[i];
1992 } 1992 }
1993 } 1993 }
1994 F32 min_scale_factor = bbox_extents.magVec() * MIN_OBJECT_SCALE / min_extent; 1994 F32 min_scale_factor = bbox_extents.magVec() * MIN_PRIM_SCALE / min_extent;
1995 1995
1996 if (getUniform()) 1996 if (getUniform())
1997 { 1997 {
diff --git a/linden/indra/newview/llmaniptranslate.cpp b/linden/indra/newview/llmaniptranslate.cpp
index c1457b3..7d729a6 100644
--- a/linden/indra/newview/llmaniptranslate.cpp
+++ b/linden/indra/newview/llmaniptranslate.cpp
@@ -53,7 +53,7 @@
53#include "llhudrender.h" 53#include "llhudrender.h"
54#include "llresmgr.h" 54#include "llresmgr.h"
55#include "llselectmgr.h" 55#include "llselectmgr.h"
56#include "llsphere.h" 56#include "llrendersphere.h"
57#include "llstatusbar.h" 57#include "llstatusbar.h"
58#include "lltoolmgr.h" 58#include "lltoolmgr.h"
59#include "llviewercamera.h" 59#include "llviewercamera.h"
@@ -252,7 +252,7 @@ LLManipTranslate::~LLManipTranslate()
252 252
253void LLManipTranslate::handleSelect() 253void LLManipTranslate::handleSelect()
254{ 254{
255 gSelectMgr->saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK); 255 LLSelectMgr::getInstance()->saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK);
256 gFloaterTools->setStatusText("move"); 256 gFloaterTools->setStatusText("move");
257 LLManip::handleSelect(); 257 LLManip::handleSelect();
258} 258}
@@ -309,12 +309,12 @@ BOOL LLManipTranslate::handleMouseDownOnPart( S32 x, S32 y, MASK mask )
309 mHelpTextTimer.reset(); 309 mHelpTextTimer.reset();
310 sNumTimesHelpTextShown++; 310 sNumTimesHelpTextShown++;
311 311
312 gSelectMgr->getGrid(mGridOrigin, mGridRotation, mGridScale); 312 LLSelectMgr::getInstance()->getGrid(mGridOrigin, mGridRotation, mGridScale);
313 313
314 gSelectMgr->enableSilhouette(FALSE); 314 LLSelectMgr::getInstance()->enableSilhouette(FALSE);
315 315
316 // we just started a drag, so save initial object positions 316 // we just started a drag, so save initial object positions
317 gSelectMgr->saveSelectedObjectTransform(SELECT_ACTION_TYPE_MOVE); 317 LLSelectMgr::getInstance()->saveSelectedObjectTransform(SELECT_ACTION_TYPE_MOVE);
318 318
319 mManipPart = (EManipPart)hit_part; 319 mManipPart = (EManipPart)hit_part;
320 mMouseDownX = x; 320 mMouseDownX = x;
@@ -345,7 +345,7 @@ BOOL LLManipTranslate::handleMouseDownOnPart( S32 x, S32 y, MASK mask )
345 BOOL axis_exists = getManipAxis(selected_object, mManipPart, axis); 345 BOOL axis_exists = getManipAxis(selected_object, mManipPart, axis);
346 getManipNormal(selected_object, mManipPart, mManipNormal); 346 getManipNormal(selected_object, mManipPart, mManipNormal);
347 347
348 //LLVector3 select_center_agent = gAgent.getPosAgentFromGlobal(gSelectMgr->getSelectionCenterGlobal()); 348 //LLVector3 select_center_agent = gAgent.getPosAgentFromGlobal(LLSelectMgr::getInstance()->getSelectionCenterGlobal());
349 // TomY: The above should (?) be identical to the below 349 // TomY: The above should (?) be identical to the below
350 LLVector3 select_center_agent = getPivotPoint(); 350 LLVector3 select_center_agent = getPivotPoint();
351 mSubdivisions = llclamp(getSubdivisionLevel(select_center_agent, axis_exists ? axis : LLVector3::z_axis, getMinGridScale()), sGridMinSubdivisionLevel, sGridMaxSubdivisionLevel); 351 mSubdivisions = llclamp(getSubdivisionLevel(select_center_agent, axis_exists ? axis : LLVector3::z_axis, getMinGridScale()), sGridMinSubdivisionLevel, sGridMaxSubdivisionLevel);
@@ -354,7 +354,7 @@ BOOL LLManipTranslate::handleMouseDownOnPart( S32 x, S32 y, MASK mask )
354 if (mManipPart >= LL_YZ_PLANE && mManipPart <= LL_XY_PLANE) 354 if (mManipPart >= LL_YZ_PLANE && mManipPart <= LL_XY_PLANE)
355 { 355 {
356 LLCoordGL mouse_pos; 356 LLCoordGL mouse_pos;
357 if (!gCamera->projectPosAgentToScreen(select_center_agent, mouse_pos)) 357 if (!LLViewerCamera::getInstance()->projectPosAgentToScreen(select_center_agent, mouse_pos))
358 { 358 {
359 // mouse_pos may be nonsense 359 // mouse_pos may be nonsense
360 llwarns << "Failed to project object center to screen" << llendl; 360 llwarns << "Failed to project object center to screen" << llendl;
@@ -367,7 +367,7 @@ BOOL LLManipTranslate::handleMouseDownOnPart( S32 x, S32 y, MASK mask )
367 } 367 }
368 } 368 }
369 369
370 gSelectMgr->updateSelectionCenter(); 370 LLSelectMgr::getInstance()->updateSelectionCenter();
371 LLVector3d object_start_global = gAgent.getPosGlobalFromAgent(getPivotPoint()); 371 LLVector3d object_start_global = gAgent.getPosGlobalFromAgent(getPivotPoint());
372 getMousePointOnPlaneGlobal(mDragCursorStartGlobal, x, y, object_start_global, mManipNormal); 372 getMousePointOnPlaneGlobal(mDragCursorStartGlobal, x, y, object_start_global, mManipNormal);
373 mDragSelectionStartGlobal = object_start_global; 373 mDragSelectionStartGlobal = object_start_global;
@@ -445,7 +445,7 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
445 if (mask == MASK_COPY) 445 if (mask == MASK_COPY)
446 { 446 {
447 // ...we're trying to make a copy 447 // ...we're trying to make a copy
448 gSelectMgr->selectDuplicate(LLVector3::zero, FALSE); 448 LLSelectMgr::getInstance()->selectDuplicate(LLVector3::zero, FALSE);
449 mCopyMadeThisDrag = TRUE; 449 mCopyMadeThisDrag = TRUE;
450 450
451 // When we make the copy, we don't want to do any other processing. 451 // When we make the copy, we don't want to do any other processing.
@@ -487,7 +487,7 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
487 487
488 axis_d.setVec(axis_f); 488 axis_d.setVec(axis_f);
489 489
490 gSelectMgr->updateSelectionCenter(); 490 LLSelectMgr::getInstance()->updateSelectionCenter();
491 LLVector3d current_pos_global = gAgent.getPosGlobalFromAgent(getPivotPoint()); 491 LLVector3d current_pos_global = gAgent.getPosGlobalFromAgent(getPivotPoint());
492 492
493 mSubdivisions = llclamp(getSubdivisionLevel(getPivotPoint(), axis_f, getMinGridScale()), sGridMinSubdivisionLevel, sGridMaxSubdivisionLevel); 493 mSubdivisions = llclamp(getSubdivisionLevel(getPivotPoint(), axis_f, getMinGridScale()), sGridMinSubdivisionLevel, sGridMaxSubdivisionLevel);
@@ -558,7 +558,7 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
558 558
559 // snap to planar grid 559 // snap to planar grid
560 LLVector3 cursor_point_agent = gAgent.getPosAgentFromGlobal(cursor_point_global); 560 LLVector3 cursor_point_agent = gAgent.getPosAgentFromGlobal(cursor_point_global);
561 LLVector3 camera_plane_projection = gCamera->getAtAxis(); 561 LLVector3 camera_plane_projection = LLViewerCamera::getInstance()->getAtAxis();
562 camera_plane_projection -= projected_vec(camera_plane_projection, mManipNormal); 562 camera_plane_projection -= projected_vec(camera_plane_projection, mManipNormal);
563 camera_plane_projection.normVec(); 563 camera_plane_projection.normVec();
564 LLVector3 camera_projected_dir = camera_plane_projection; 564 LLVector3 camera_projected_dir = camera_plane_projection;
@@ -709,7 +709,7 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
709 LLVector3d new_position_global = selectNode->mSavedPositionGlobal + clamped_relative_move; 709 LLVector3d new_position_global = selectNode->mSavedPositionGlobal + clamped_relative_move;
710 710
711 // Don't let object centers go too far underground 711 // Don't let object centers go too far underground
712 F64 min_height = gWorldp->getMinAllowedZ(object); 712 F64 min_height = LLWorld::getInstance()->getMinAllowedZ(object);
713 if (new_position_global.mdV[VZ] < min_height) 713 if (new_position_global.mdV[VZ] < min_height)
714 { 714 {
715 new_position_global.mdV[VZ] = min_height; 715 new_position_global.mdV[VZ] = min_height;
@@ -724,12 +724,12 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
724 // Grass is always drawn on the ground, so clamp its position to the ground 724 // Grass is always drawn on the ground, so clamp its position to the ground
725 if (object->getPCode() == LL_PCODE_LEGACY_GRASS) 725 if (object->getPCode() == LL_PCODE_LEGACY_GRASS)
726 { 726 {
727 new_position_global.mdV[VZ] = gWorldp->resolveLandHeightGlobal(new_position_global) + 1.f; 727 new_position_global.mdV[VZ] = LLWorld::getInstance()->resolveLandHeightGlobal(new_position_global) + 1.f;
728 } 728 }
729 729
730 if (object->isRootEdit()) 730 if (object->isRootEdit())
731 { 731 {
732 new_position_global = gWorldp->clipToVisibleRegions(object->getPositionGlobal(), new_position_global); 732 new_position_global = LLWorld::getInstance()->clipToVisibleRegions(object->getPositionGlobal(), new_position_global);
733 } 733 }
734 734
735 // PR: Only update if changed 735 // PR: Only update if changed
@@ -776,7 +776,7 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
776 } 776 }
777 } 777 }
778 778
779 gSelectMgr->updateSelectionCenter(); 779 LLSelectMgr::getInstance()->updateSelectionCenter();
780 gAgent.clearFocusObject(); 780 gAgent.clearFocusObject();
781 dialog_refresh_all(); // ??? is this necessary? 781 dialog_refresh_all(); // ??? is this necessary?
782 782
@@ -794,9 +794,9 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)
794 return; 794 return;
795 } 795 }
796 796
797 //LLBBox bbox = gSelectMgr->getBBoxOfSelection(); 797 //LLBBox bbox = LLSelectMgr::getInstance()->getBBoxOfSelection();
798 LLMatrix4 projMatrix = gCamera->getProjection(); 798 LLMatrix4 projMatrix = LLViewerCamera::getInstance()->getProjection();
799 LLMatrix4 modelView = gCamera->getModelview(); 799 LLMatrix4 modelView = LLViewerCamera::getInstance()->getModelview();
800 800
801 LLVector3 object_position = getPivotPoint(); 801 LLVector3 object_position = getPivotPoint();
802 802
@@ -804,7 +804,7 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)
804 LLVector3 grid_scale; 804 LLVector3 grid_scale;
805 LLQuaternion grid_rotation; 805 LLQuaternion grid_rotation;
806 806
807 gSelectMgr->getGrid(grid_origin, grid_rotation, grid_scale); 807 LLSelectMgr::getInstance()->getGrid(grid_origin, grid_rotation, grid_scale);
808 808
809 LLVector3 relative_camera_dir; 809 LLVector3 relative_camera_dir;
810 810
@@ -819,14 +819,14 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)
819 transform *= cfr; 819 transform *= cfr;
820 LLMatrix4 window_scale; 820 LLMatrix4 window_scale;
821 F32 zoom_level = 2.f * gAgent.getAvatarObject()->mHUDCurZoom; 821 F32 zoom_level = 2.f * gAgent.getAvatarObject()->mHUDCurZoom;
822 window_scale.initAll(LLVector3(zoom_level / gCamera->getAspect(), zoom_level, 0.f), 822 window_scale.initAll(LLVector3(zoom_level / LLViewerCamera::getInstance()->getAspect(), zoom_level, 0.f),
823 LLQuaternion::DEFAULT, 823 LLQuaternion::DEFAULT,
824 LLVector3::zero); 824 LLVector3::zero);
825 transform *= window_scale; 825 transform *= window_scale;
826 } 826 }
827 else 827 else
828 { 828 {
829 relative_camera_dir = (object_position - gCamera->getOrigin()) * ~grid_rotation; 829 relative_camera_dir = (object_position - LLViewerCamera::getInstance()->getOrigin()) * ~grid_rotation;
830 relative_camera_dir.normVec(); 830 relative_camera_dir.normVec();
831 831
832 transform.initRotTrans(grid_rotation, LLVector4(object_position)); 832 transform.initRotTrans(grid_rotation, LLVector4(object_position));
@@ -1036,13 +1036,13 @@ BOOL LLManipTranslate::handleMouseUp(S32 x, S32 y, MASK mask)
1036 { 1036 {
1037 // make sure arrow colors go back to normal 1037 // make sure arrow colors go back to normal
1038 mManipPart = LL_NO_PART; 1038 mManipPart = LL_NO_PART;
1039 gSelectMgr->enableSilhouette(TRUE); 1039 LLSelectMgr::getInstance()->enableSilhouette(TRUE);
1040 1040
1041 // Might have missed last update due to UPDATE_DELAY timing. 1041 // Might have missed last update due to UPDATE_DELAY timing.
1042 gSelectMgr->sendMultipleUpdate( UPD_POSITION ); 1042 LLSelectMgr::getInstance()->sendMultipleUpdate( UPD_POSITION );
1043 1043
1044 mInSnapRegime = FALSE; 1044 mInSnapRegime = FALSE;
1045 gSelectMgr->saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK); 1045 LLSelectMgr::getInstance()->saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK);
1046 //gAgent.setObjectTracking(gSavedSettings.getBOOL("TrackFocusObject")); 1046 //gAgent.setObjectTracking(gSavedSettings.getBOOL("TrackFocusObject"));
1047 } 1047 }
1048 1048
@@ -1105,8 +1105,8 @@ void LLManipTranslate::renderSnapGuides()
1105 LLVector3 grid_scale; 1105 LLVector3 grid_scale;
1106 LLQuaternion grid_rotation; 1106 LLQuaternion grid_rotation;
1107 1107
1108 gSelectMgr->getGrid(grid_origin, grid_rotation, grid_scale); 1108 LLSelectMgr::getInstance()->getGrid(grid_origin, grid_rotation, grid_scale);
1109 LLVector3 saved_selection_center = getSavedPivotPoint(); //gSelectMgr->getSavedBBoxOfSelection().getCenterAgent(); 1109 LLVector3 saved_selection_center = getSavedPivotPoint(); //LLSelectMgr::getInstance()->getSavedBBoxOfSelection().getCenterAgent();
1110 LLVector3 selection_center = getPivotPoint(); 1110 LLVector3 selection_center = getPivotPoint();
1111 1111
1112 LLViewerObject *first_object = first_node->getObject(); 1112 LLViewerObject *first_object = first_node->getObject();
@@ -1149,7 +1149,7 @@ void LLManipTranslate::renderSnapGuides()
1149 } 1149 }
1150 else 1150 else
1151 { 1151 {
1152 at_axis_abs = saved_selection_center - gCamera->getOrigin(); 1152 at_axis_abs = saved_selection_center - LLViewerCamera::getInstance()->getOrigin();
1153 at_axis_abs.normVec(); 1153 at_axis_abs.normVec();
1154 1154
1155 at_axis_abs = at_axis_abs * ~grid_rotation; 1155 at_axis_abs = at_axis_abs * ~grid_rotation;
@@ -1225,14 +1225,14 @@ void LLManipTranslate::renderSnapGuides()
1225 } 1225 }
1226 else 1226 else
1227 { 1227 {
1228 LLVector3 cam_to_selection = getPivotPoint() - gCamera->getOrigin(); 1228 LLVector3 cam_to_selection = getPivotPoint() - LLViewerCamera::getInstance()->getOrigin();
1229 F32 current_range = cam_to_selection.normVec(); 1229 F32 current_range = cam_to_selection.normVec();
1230 guide_size_meters = SNAP_GUIDE_SCREEN_SIZE * gViewerWindow->getWindowHeight() * current_range / gCamera->getPixelMeterRatio(); 1230 guide_size_meters = SNAP_GUIDE_SCREEN_SIZE * gViewerWindow->getWindowHeight() * current_range / LLViewerCamera::getInstance()->getPixelMeterRatio();
1231 1231
1232 F32 fraction_of_fov = mAxisArrowLength / (F32) gCamera->getViewHeightInPixels(); 1232 F32 fraction_of_fov = mAxisArrowLength / (F32) LLViewerCamera::getInstance()->getViewHeightInPixels();
1233 F32 apparent_angle = fraction_of_fov * gCamera->getView(); // radians 1233 F32 apparent_angle = fraction_of_fov * LLViewerCamera::getInstance()->getView(); // radians
1234 F32 offset_at_camera = tan(apparent_angle) * 1.5f; 1234 F32 offset_at_camera = tan(apparent_angle) * 1.5f;
1235 F32 range = dist_vec(gAgent.getPosAgentFromGlobal(first_node->mSavedPositionGlobal), gCamera->getOrigin()); 1235 F32 range = dist_vec(gAgent.getPosAgentFromGlobal(first_node->mSavedPositionGlobal), LLViewerCamera::getInstance()->getOrigin());
1236 mSnapOffsetMeters = range * offset_at_camera; 1236 mSnapOffsetMeters = range * offset_at_camera;
1237 } 1237 }
1238 1238
@@ -1362,7 +1362,7 @@ void LLManipTranslate::renderSnapGuides()
1362 1362
1363 sub_div_offset = llround(fmod(dist_grid_axis - offset_nearest_grid_unit, getMinGridScale() * 32.f) / smallest_grid_unit_scale); 1363 sub_div_offset = llround(fmod(dist_grid_axis - offset_nearest_grid_unit, getMinGridScale() * 32.f) / smallest_grid_unit_scale);
1364 1364
1365 LLVector2 screen_translate_axis(llabs(translate_axis * gCamera->getLeftAxis()), llabs(translate_axis * gCamera->getUpAxis())); 1365 LLVector2 screen_translate_axis(llabs(translate_axis * LLViewerCamera::getInstance()->getLeftAxis()), llabs(translate_axis * LLViewerCamera::getInstance()->getUpAxis()));
1366 screen_translate_axis.normVec(); 1366 screen_translate_axis.normVec();
1367 1367
1368 S32 tick_label_spacing = llround(screen_translate_axis * sTickLabelSpacing); 1368 S32 tick_label_spacing = llround(screen_translate_axis * sTickLabelSpacing);
@@ -1387,7 +1387,7 @@ void LLManipTranslate::renderSnapGuides()
1387 { 1387 {
1388 F32 snap_offset_meters; 1388 F32 snap_offset_meters;
1389 1389
1390 if (mSnapOffsetAxis * gCamera->getUpAxis() > 0.f) 1390 if (mSnapOffsetAxis * LLViewerCamera::getInstance()->getUpAxis() > 0.f)
1391 { 1391 {
1392 snap_offset_meters = mSnapOffsetMeters; 1392 snap_offset_meters = mSnapOffsetMeters;
1393 } 1393 }
@@ -1401,7 +1401,7 @@ void LLManipTranslate::renderSnapGuides()
1401 1401
1402 LLVector3 tick_offset = (tick_pos - mGridOrigin) * ~mGridRotation; 1402 LLVector3 tick_offset = (tick_pos - mGridOrigin) * ~mGridRotation;
1403 F32 offset_val = 0.5f * tick_offset.mV[ARROW_TO_AXIS[mManipPart]] / getMinGridScale(); 1403 F32 offset_val = 0.5f * tick_offset.mV[ARROW_TO_AXIS[mManipPart]] / getMinGridScale();
1404 EGridMode grid_mode = gSelectMgr->getGridMode(); 1404 EGridMode grid_mode = LLSelectMgr::getInstance()->getGridMode();
1405 F32 text_highlight = 0.8f; 1405 F32 text_highlight = 0.8f;
1406 if(i - llround(offset_nearest_grid_unit / smallest_grid_unit_scale) == 0 && mInSnapRegime) 1406 if(i - llround(offset_nearest_grid_unit / smallest_grid_unit_scale) == 0 && mInSnapRegime)
1407 { 1407 {
@@ -1426,7 +1426,7 @@ void LLManipTranslate::renderSnapGuides()
1426 if (mHelpTextTimer.getElapsedTimeF32() < sHelpTextVisibleTime + sHelpTextFadeTime && sNumTimesHelpTextShown < sMaxTimesShowHelpText) 1426 if (mHelpTextTimer.getElapsedTimeF32() < sHelpTextVisibleTime + sHelpTextFadeTime && sNumTimesHelpTextShown < sMaxTimesShowHelpText)
1427 { 1427 {
1428 F32 snap_offset_meters_up; 1428 F32 snap_offset_meters_up;
1429 if (mSnapOffsetAxis * gCamera->getUpAxis() > 0.f) 1429 if (mSnapOffsetAxis * LLViewerCamera::getInstance()->getUpAxis() > 0.f)
1430 { 1430 {
1431 snap_offset_meters_up = mSnapOffsetMeters; 1431 snap_offset_meters_up = mSnapOffsetMeters;
1432 } 1432 }
@@ -1435,7 +1435,7 @@ void LLManipTranslate::renderSnapGuides()
1435 snap_offset_meters_up = -mSnapOffsetMeters; 1435 snap_offset_meters_up = -mSnapOffsetMeters;
1436 } 1436 }
1437 1437
1438 LLVector3 selection_center_start = getSavedPivotPoint();//gSelectMgr->getSavedBBoxOfSelection().getCenterAgent(); 1438 LLVector3 selection_center_start = getSavedPivotPoint();//LLSelectMgr::getInstance()->getSavedBBoxOfSelection().getCenterAgent();
1439 1439
1440 LLVector3 help_text_pos = selection_center_start + (snap_offset_meters_up * 3.f * mSnapOffsetAxis); 1440 LLVector3 help_text_pos = selection_center_start + (snap_offset_meters_up * 3.f * mSnapOffsetAxis);
1441 const LLFontGL* big_fontp = LLFontGL::sSansSerif; 1441 const LLFontGL* big_fontp = LLFontGL::sSansSerif;
@@ -1445,7 +1445,7 @@ void LLManipTranslate::renderSnapGuides()
1445 help_text_color.mV[VALPHA] = clamp_rescale(mHelpTextTimer.getElapsedTimeF32(), sHelpTextVisibleTime, sHelpTextVisibleTime + sHelpTextFadeTime, line_alpha, 0.f); 1445 help_text_color.mV[VALPHA] = clamp_rescale(mHelpTextTimer.getElapsedTimeF32(), sHelpTextVisibleTime, sHelpTextVisibleTime + sHelpTextFadeTime, line_alpha, 0.f);
1446 hud_render_utf8text(help_text, help_text_pos, *big_fontp, LLFontGL::NORMAL, -0.5f * big_fontp->getWidthF32(help_text), 3.f, help_text_color, mObjectSelection->getSelectType() == SELECT_TYPE_HUD); 1446 hud_render_utf8text(help_text, help_text_pos, *big_fontp, LLFontGL::NORMAL, -0.5f * big_fontp->getWidthF32(help_text), 3.f, help_text_color, mObjectSelection->getSelectType() == SELECT_TYPE_HUD);
1447 help_text = "to snap to grid"; 1447 help_text = "to snap to grid";
1448 help_text_pos -= gCamera->getUpAxis() * mSnapOffsetMeters * 0.2f; 1448 help_text_pos -= LLViewerCamera::getInstance()->getUpAxis() * mSnapOffsetMeters * 0.2f;
1449 hud_render_utf8text(help_text, help_text_pos, *big_fontp, LLFontGL::NORMAL, -0.5f * big_fontp->getWidthF32(help_text), 3.f, help_text_color, mObjectSelection->getSelectType() == SELECT_TYPE_HUD); 1449 hud_render_utf8text(help_text, help_text_pos, *big_fontp, LLFontGL::NORMAL, -0.5f * big_fontp->getWidthF32(help_text), 3.f, help_text_color, mObjectSelection->getSelectType() == SELECT_TYPE_HUD);
1450 } 1450 }
1451 } 1451 }
@@ -1655,7 +1655,7 @@ void LLManipTranslate::highlightIntersection(LLVector3 normal,
1655 1655
1656 //setup clip plane 1656 //setup clip plane
1657 normal = normal * grid_rotation; 1657 normal = normal * grid_rotation;
1658 if (normal * (gCamera->getOrigin()-selection_center) < 0) 1658 if (normal * (LLViewerCamera::getInstance()->getOrigin()-selection_center) < 0)
1659 { 1659 {
1660 normal = -normal; 1660 normal = -normal;
1661 } 1661 }
@@ -1756,7 +1756,7 @@ void LLManipTranslate::renderTranslationHandles()
1756 LLQuaternion grid_rotation; 1756 LLQuaternion grid_rotation;
1757 LLGLDepthTest gls_depth(GL_FALSE); 1757 LLGLDepthTest gls_depth(GL_FALSE);
1758 1758
1759 gSelectMgr->getGrid(grid_origin, grid_rotation, grid_scale); 1759 LLSelectMgr::getInstance()->getGrid(grid_origin, grid_rotation, grid_scale);
1760 LLVector3 at_axis; 1760 LLVector3 at_axis;
1761 if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD) 1761 if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD)
1762 { 1762 {
@@ -1764,7 +1764,7 @@ void LLManipTranslate::renderTranslationHandles()
1764 } 1764 }
1765 else 1765 else
1766 { 1766 {
1767 at_axis = gCamera->getAtAxis() * ~grid_rotation; 1767 at_axis = LLViewerCamera::getInstance()->getAtAxis() * ~grid_rotation;
1768 } 1768 }
1769 1769
1770 if (at_axis.mV[VX] > 0.f) 1770 if (at_axis.mV[VX] > 0.f)
@@ -1823,8 +1823,8 @@ void LLManipTranslate::renderTranslationHandles()
1823 if (range > 0.001f) 1823 if (range > 0.001f)
1824 { 1824 {
1825 // range != zero 1825 // range != zero
1826 F32 fraction_of_fov = mAxisArrowLength / (F32) gCamera->getViewHeightInPixels(); 1826 F32 fraction_of_fov = mAxisArrowLength / (F32) LLViewerCamera::getInstance()->getViewHeightInPixels();
1827 F32 apparent_angle = fraction_of_fov * gCamera->getView(); // radians 1827 F32 apparent_angle = fraction_of_fov * LLViewerCamera::getInstance()->getView(); // radians
1828 mArrowLengthMeters = range * tan(apparent_angle); 1828 mArrowLengthMeters = range * tan(apparent_angle);
1829 } 1829 }
1830 else 1830 else
@@ -1859,7 +1859,7 @@ void LLManipTranslate::renderTranslationHandles()
1859 } 1859 }
1860 else 1860 else
1861 { 1861 {
1862 relative_camera_dir = (selection_center - gCamera->getOrigin()) * invRotation; 1862 relative_camera_dir = (selection_center - LLViewerCamera::getInstance()->getOrigin()) * invRotation;
1863 } 1863 }
1864 relative_camera_dir.normVec(); 1864 relative_camera_dir.normVec();
1865 1865
diff --git a/linden/indra/newview/llmapresponders.cpp b/linden/indra/newview/llmapresponders.cpp
index eba890b..d16bc78 100644
--- a/linden/indra/newview/llmapresponders.cpp
+++ b/linden/indra/newview/llmapresponders.cpp
@@ -45,7 +45,7 @@ void LLMapLayerResponder::result(const LLSD& result)
45 45
46 S32 agent_flags = result["AgentData"]["Flags"]; 46 S32 agent_flags = result["AgentData"]["Flags"];
47 47
48 if (agent_flags != gWorldMap->mCurrentMap) 48 if (agent_flags != LLWorldMap::getInstance()->mCurrentMap)
49 { 49 {
50 llwarns << "Invalid or out of date map image type returned!" << llendl; 50 llwarns << "Invalid or out of date map image type returned!" << llendl;
51 return; 51 return;
@@ -54,7 +54,7 @@ void LLMapLayerResponder::result(const LLSD& result)
54 LLUUID image_id; 54 LLUUID image_id;
55 //U32 left, right, top, bottom; 55 //U32 left, right, top, bottom;
56 56
57 gWorldMap->mMapLayers[agent_flags].clear(); 57 LLWorldMap::getInstance()->mMapLayers[agent_flags].clear();
58 58
59 LLSD::array_const_iterator iter; 59 LLSD::array_const_iterator iter;
60 BOOL adjust = FALSE; 60 BOOL adjust = FALSE;
@@ -76,14 +76,14 @@ void LLMapLayerResponder::result(const LLSD& result)
76 76
77 F32 x_meters = F32(new_layer.LayerExtents.mLeft*REGION_WIDTH_UNITS); 77 F32 x_meters = F32(new_layer.LayerExtents.mLeft*REGION_WIDTH_UNITS);
78 F32 y_meters = F32(new_layer.LayerExtents.mBottom*REGION_WIDTH_UNITS); 78 F32 y_meters = F32(new_layer.LayerExtents.mBottom*REGION_WIDTH_UNITS);
79 adjust = gWorldMap->extendAABB(U32(x_meters), U32(y_meters), 79 adjust = LLWorldMap::getInstance()->extendAABB(U32(x_meters), U32(y_meters),
80 U32(x_meters+REGION_WIDTH_UNITS*new_layer.LayerExtents.getWidth()), 80 U32(x_meters+REGION_WIDTH_UNITS*new_layer.LayerExtents.getWidth()),
81 U32(y_meters+REGION_WIDTH_UNITS*new_layer.LayerExtents.getHeight())) || adjust; 81 U32(y_meters+REGION_WIDTH_UNITS*new_layer.LayerExtents.getHeight())) || adjust;
82 82
83 gWorldMap->mMapLayers[agent_flags].push_back(new_layer); 83 LLWorldMap::getInstance()->mMapLayers[agent_flags].push_back(new_layer);
84 } 84 }
85 85
86 gWorldMap->mMapLoaded[agent_flags] = TRUE; 86 LLWorldMap::getInstance()->mMapLoaded[agent_flags] = TRUE;
87 if(adjust) gFloaterWorldMap->adjustZoomSliderBounds(); 87 if(adjust) gFloaterWorldMap->adjustZoomSliderBounds();
88 88
89 /* 89 /*
@@ -121,21 +121,21 @@ void LLMapLayerResponder::result(const LLSD& result)
121 if (access == 255) 121 if (access == 255)
122 { 122 {
123 // This region doesn't exist 123 // This region doesn't exist
124 if (gWorldMap->mIsTrackingUnknownLocation && 124 if (LLWorldMap::getInstance()->mIsTrackingUnknownLocation &&
125 gWorldMap->mUnknownLocation.mdV[0] >= x_meters && 125 LLWorldMap::getInstance()->mUnknownLocation.mdV[0] >= x_meters &&
126 gWorldMap->mUnknownLocation.mdV[0] < x_meters + 256 && 126 LLWorldMap::getInstance()->mUnknownLocation.mdV[0] < x_meters + 256 &&
127 gWorldMap->mUnknownLocation.mdV[1] >= y_meters && 127 LLWorldMap::getInstance()->mUnknownLocation.mdV[1] >= y_meters &&
128 gWorldMap->mUnknownLocation.mdV[1] < y_meters + 256) 128 LLWorldMap::getInstance()->mUnknownLocation.mdV[1] < y_meters + 256)
129 { 129 {
130 // We were tracking this location, but it doesn't exist 130 // We were tracking this location, but it doesn't exist
131 gWorldMap->mInvalidLocation = TRUE; 131 LLWorldMap::getInstance()->mInvalidLocation = TRUE;
132 } 132 }
133 133
134 found_null_sim = true; 134 found_null_sim = true;
135 } 135 }
136 else 136 else
137 { 137 {
138 adjust = gWorldMap->extendAABB(x_meters, 138 adjust = LLWorldMap::getInstance()->extendAABB(x_meters,
139 y_meters, 139 y_meters,
140 x_meters+REGION_WIDTH_UNITS, 140 x_meters+REGION_WIDTH_UNITS,
141 y_meters+REGION_WIDTH_UNITS) || adjust; 141 y_meters+REGION_WIDTH_UNITS) || adjust;
@@ -144,8 +144,8 @@ void LLMapLayerResponder::result(const LLSD& result)
144 // llinfos << "Map sim " << name << " image layer " << agent_flags << " ID " << image_id.getString() << llendl; 144 // llinfos << "Map sim " << name << " image layer " << agent_flags << " ID " << image_id.getString() << llendl;
145 145
146 LLSimInfo* siminfo = new LLSimInfo(); 146 LLSimInfo* siminfo = new LLSimInfo();
147 LLWorldMap::sim_info_map_t::iterator iter = gWorldMap->mSimInfoMap.find(handle); 147 LLWorldMap::sim_info_map_t::iterator iter = LLWorldMap::getInstance()->mSimInfoMap.find(handle);
148 if (iter != gWorldMap->mSimInfoMap.end()) 148 if (iter != LLWorldMap::getInstance()->mSimInfoMap.end())
149 { 149 {
150 LLSimInfo* oldinfo = iter->second; 150 LLSimInfo* oldinfo = iter->second;
151 for (S32 image=0; image<MAP_SIM_IMAGE_TYPES; ++image) 151 for (S32 image=0; image<MAP_SIM_IMAGE_TYPES; ++image)
@@ -154,7 +154,7 @@ void LLMapLayerResponder::result(const LLSD& result)
154 } 154 }
155 delete oldinfo; 155 delete oldinfo;
156 } 156 }
157 gWorldMap->mSimInfoMap[handle] = siminfo; 157 LLWorldMap::getInstance()->mSimInfoMap[handle] = siminfo;
158 158
159 siminfo->mHandle = handle; 159 siminfo->mHandle = handle;
160 siminfo->mName.assign( name ); 160 siminfo->mName.assign( name );
@@ -162,7 +162,7 @@ void LLMapLayerResponder::result(const LLSD& result)
162 siminfo->mRegionFlags = region_flags; 162 siminfo->mRegionFlags = region_flags;
163 siminfo->mWaterHeight = (F32) water_height; 163 siminfo->mWaterHeight = (F32) water_height;
164 siminfo->mMapImageID[agent_flags] = image_id; 164 siminfo->mMapImageID[agent_flags] = image_id;
165 siminfo->mCurrentImage = gImageList.getImage(siminfo->mMapImageID[gWorldMap->mCurrentMap], MIPMAP_TRUE, FALSE); 165 siminfo->mCurrentImage = gImageList.getImage(siminfo->mMapImageID[LLWorldMap::getInstance()->mCurrentMap], MIPMAP_TRUE, FALSE);
166 siminfo->mCurrentImage->bindTexture(0); 166 siminfo->mCurrentImage->bindTexture(0);
167 siminfo->mCurrentImage->setClamp(TRUE, TRUE); 167 siminfo->mCurrentImage->setClamp(TRUE, TRUE);
168 168
@@ -175,22 +175,22 @@ void LLMapLayerResponder::result(const LLSD& result)
175 siminfo->mOverlayImage = NULL; 175 siminfo->mOverlayImage = NULL;
176 } 176 }
177 177
178 if (gWorldMap->mIsTrackingUnknownLocation && 178 if (LLWorldMap::getInstance()->mIsTrackingUnknownLocation &&
179 gWorldMap->mUnknownLocation.mdV[0] >= x_meters && 179 LLWorldMap::getInstance()->mUnknownLocation.mdV[0] >= x_meters &&
180 gWorldMap->mUnknownLocation.mdV[0] < x_meters + 256 && 180 LLWorldMap::getInstance()->mUnknownLocation.mdV[0] < x_meters + 256 &&
181 gWorldMap->mUnknownLocation.mdV[1] >= y_meters && 181 LLWorldMap::getInstance()->mUnknownLocation.mdV[1] >= y_meters &&
182 gWorldMap->mUnknownLocation.mdV[1] < y_meters + 256) 182 LLWorldMap::getInstance()->mUnknownLocation.mdV[1] < y_meters + 256)
183 { 183 {
184 if (siminfo->mAccess == SIM_ACCESS_DOWN) 184 if (siminfo->mAccess == SIM_ACCESS_DOWN)
185 { 185 {
186 // We were tracking this location, but it doesn't exist 186 // We were tracking this location, but it doesn't exist
187 gWorldMap->mInvalidLocation = true; 187 LLWorldMap::getInstance()->mInvalidLocation = true;
188 } 188 }
189 else 189 else
190 { 190 {
191 // We were tracking this location, and it does exist 191 // We were tracking this location, and it does exist
192 bool is_tracking_dbl = gWorldMap->mIsTrackingDoubleClick == TRUE; 192 bool is_tracking_dbl = LLWorldMap::getInstance()->mIsTrackingDoubleClick == TRUE;
193 gFloaterWorldMap->trackLocation(gWorldMap->mUnknownLocation); 193 gFloaterWorldMap->trackLocation(LLWorldMap::getInstance()->mUnknownLocation);
194 if (is_tracking_dbl) 194 if (is_tracking_dbl)
195 { 195 {
196 LLVector3d pos_global = LLTracker::getTrackedPositionGlobal(); 196 LLVector3d pos_global = LLTracker::getTrackedPositionGlobal();
diff --git a/linden/indra/newview/llmediaremotectrl.cpp b/linden/indra/newview/llmediaremotectrl.cpp
index 61c0042..448bc7f 100644
--- a/linden/indra/newview/llmediaremotectrl.cpp
+++ b/linden/indra/newview/llmediaremotectrl.cpp
@@ -40,7 +40,7 @@
40#include "llviewermedia.h" 40#include "llviewermedia.h"
41#include "llviewerparcelmedia.h" 41#include "llviewerparcelmedia.h"
42#include "llviewerparcelmgr.h" 42#include "llviewerparcelmgr.h"
43#include "llvieweruictrlfactory.h" 43#include "lluictrlfactory.h"
44#include "llpanelaudiovolume.h" 44#include "llpanelaudiovolume.h"
45#include "llparcel.h" 45#include "llparcel.h"
46#include "llviewercontrol.h" 46#include "llviewercontrol.h"
@@ -49,6 +49,9 @@
49//////////////////////////////////////////////////////////////////////////////// 49////////////////////////////////////////////////////////////////////////////////
50// 50//
51// 51//
52
53static LLRegisterWidget<LLMediaRemoteCtrl> r("media_remote");
54
52LLMediaRemoteCtrl::LLMediaRemoteCtrl() 55LLMediaRemoteCtrl::LLMediaRemoteCtrl()
53{ 56{
54 setIsChrome(TRUE); 57 setIsChrome(TRUE);
@@ -64,11 +67,11 @@ void LLMediaRemoteCtrl::build()
64 deleteAllChildren(); 67 deleteAllChildren();
65 if (gSavedSettings.getBOOL("ShowVolumeSettingsPopup")) 68 if (gSavedSettings.getBOOL("ShowVolumeSettingsPopup"))
66 { 69 {
67 gUICtrlFactory->buildPanel(this, "panel_media_remote_expanded.xml", &getFactoryMap()); 70 LLUICtrlFactory::getInstance()->buildPanel(this, "panel_media_remote_expanded.xml", &getFactoryMap());
68 } 71 }
69 else 72 else
70 { 73 {
71 gUICtrlFactory->buildPanel(this, "panel_media_remote.xml", &getFactoryMap()); 74 LLUICtrlFactory::getInstance()->buildPanel(this, "panel_media_remote.xml", &getFactoryMap());
72 } 75 }
73} 76}
74 77
@@ -92,7 +95,7 @@ void LLMediaRemoteCtrl::draw()
92{ 95{
93 enableMediaButtons(); 96 enableMediaButtons();
94 97
95 LLButton* expand_button = LLUICtrlFactory::getButtonByName(this, "expand"); 98 LLButton* expand_button = getChild<LLButton>("expand");
96 if (expand_button) 99 if (expand_button)
97 { 100 {
98 if (expand_button->getToggleState()) 101 if (expand_button->getToggleState())
@@ -155,7 +158,7 @@ void LLMediaRemoteCtrl::enableMediaButtons()
155 158
156 // Put this in xui file 159 // Put this in xui file
157 LLString media_url = mControls->getString("default_tooltip_label"); 160 LLString media_url = mControls->getString("default_tooltip_label");
158 LLParcel* parcel = gParcelMgr->getAgentParcel(); 161 LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
159 162
160 if (gSavedSettings.getBOOL("AudioStreamingVideo")) 163 if (gSavedSettings.getBOOL("AudioStreamingVideo"))
161 { 164 {
@@ -222,14 +225,14 @@ void LLMediaRemoteCtrl::enableMediaButtons()
222 stop_media_enabled = false; 225 stop_media_enabled = false;
223 } 226 }
224 } 227 }
225 const LLUUID media_icon_id = LLUUID(gViewerArt.findString(LLMIMETypes::findIcon(media_type))); 228 const LLString media_icon_name = LLMIMETypes::findIcon(media_type);
226 LLButton* music_play_btn = LLUICtrlFactory::getButtonByName(this, "music_play"); 229 LLButton* music_play_btn = getChild<LLButton>("music_play");
227 LLButton* music_stop_btn = LLUICtrlFactory::getButtonByName(this, "music_stop"); 230 LLButton* music_stop_btn = getChild<LLButton>("music_stop");
228 LLButton* music_pause_btn = LLUICtrlFactory::getButtonByName(this, "music_pause"); 231 LLButton* music_pause_btn = getChild<LLButton>("music_pause");
229 LLButton* media_play_btn = LLUICtrlFactory::getButtonByName(this, "media_play"); 232 LLButton* media_play_btn = getChild<LLButton>("media_play");
230 LLButton* media_stop_btn = LLUICtrlFactory::getButtonByName(this, "media_stop"); 233 LLButton* media_stop_btn = getChild<LLButton>("media_stop");
231 LLButton* media_pause_btn = LLUICtrlFactory::getButtonByName(this, "media_pause"); 234 LLButton* media_pause_btn = getChild<LLButton>("media_pause");
232 LLIconCtrl* media_icon = LLUICtrlFactory::getIconByName(this, "media_icon"); 235 LLIconCtrl* media_icon = getChild<LLIconCtrl>("media_icon");
233 236
234 music_play_btn->setEnabled(play_music_enabled); 237 music_play_btn->setEnabled(play_music_enabled);
235 music_stop_btn->setEnabled(stop_music_enabled); 238 music_stop_btn->setEnabled(stop_music_enabled);
@@ -237,9 +240,9 @@ void LLMediaRemoteCtrl::enableMediaButtons()
237 music_pause_btn->setVisible(music_show_pause); 240 music_pause_btn->setVisible(music_show_pause);
238 music_play_btn->setVisible(! music_show_pause); 241 music_play_btn->setVisible(! music_show_pause);
239 childSetColor("music_icon", music_icon_color); 242 childSetColor("music_icon", music_icon_color);
240 if(! media_icon_id.isNull()) 243 if(!media_icon_name.empty())
241 { 244 {
242 media_icon->setImage(media_icon_id); 245 media_icon->setImage(media_icon_name);
243 } 246 }
244 247
245 media_play_btn->setEnabled(play_media_enabled); 248 media_play_btn->setEnabled(play_media_enabled);
diff --git a/linden/indra/newview/llmemoryview.cpp b/linden/indra/newview/llmemoryview.cpp
index c6db748..c7a929d 100644
--- a/linden/indra/newview/llmemoryview.cpp
+++ b/linden/indra/newview/llmemoryview.cpp
@@ -67,16 +67,6 @@ LLMemoryView::~LLMemoryView()
67{ 67{
68} 68}
69 69
70EWidgetType LLMemoryView::getWidgetType() const
71{
72 return WIDGET_TYPE_MEMORY_VIEW;
73}
74
75LLString LLMemoryView::getWidgetTag() const
76{
77 return LL_MEMORY_VIEW_TAG;
78}
79
80BOOL LLMemoryView::handleMouseDown(S32 x, S32 y, MASK mask) 70BOOL LLMemoryView::handleMouseDown(S32 x, S32 y, MASK mask)
81{ 71{
82 if (mask & MASK_SHIFT) 72 if (mask & MASK_SHIFT)
diff --git a/linden/indra/newview/llmemoryview.h b/linden/indra/newview/llmemoryview.h
index 64652ef..3fd61a1 100644
--- a/linden/indra/newview/llmemoryview.h
+++ b/linden/indra/newview/llmemoryview.h
@@ -40,9 +40,6 @@ public:
40 LLMemoryView(const std::string& name, const LLRect& rect); 40 LLMemoryView(const std::string& name, const LLRect& rect);
41 virtual ~LLMemoryView(); 41 virtual ~LLMemoryView();
42 42
43 virtual EWidgetType getWidgetType() const;
44 virtual LLString getWidgetTag() const;
45
46 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); 43 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
47 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); 44 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
48 virtual BOOL handleHover(S32 x, S32 y, MASK mask); 45 virtual BOOL handleHover(S32 x, S32 y, MASK mask);
diff --git a/linden/indra/newview/llmenucommands.cpp b/linden/indra/newview/llmenucommands.cpp
index 0db42e2..14db323 100644
--- a/linden/indra/newview/llmenucommands.cpp
+++ b/linden/indra/newview/llmenucommands.cpp
@@ -62,7 +62,7 @@
62#include "llviewerparceloverlay.h" 62#include "llviewerparceloverlay.h"
63#include "llviewerregion.h" 63#include "llviewerregion.h"
64#include "llviewerstats.h" 64#include "llviewerstats.h"
65#include "llvieweruictrlfactory.h" 65#include "lluictrlfactory.h"
66#include "llviewerwindow.h" 66#include "llviewerwindow.h"
67#include "llworld.h" 67#include "llworld.h"
68#include "llworldmap.h" 68#include "llworldmap.h"
diff --git a/linden/indra/newview/llmimetypes.cpp b/linden/indra/newview/llmimetypes.cpp
index db00079..d5a1ffe 100644
--- a/linden/indra/newview/llmimetypes.cpp
+++ b/linden/indra/newview/llmimetypes.cpp
@@ -34,7 +34,7 @@
34 34
35#include "llmimetypes.h" 35#include "llmimetypes.h"
36 36
37#include "llvieweruictrlfactory.h" 37#include "lluictrlfactory.h"
38 38
39LLMIMETypes::mime_info_map_t LLMIMETypes::sMap; 39LLMIMETypes::mime_info_map_t LLMIMETypes::sMap;
40LLMIMETypes::mime_widget_set_map_t LLMIMETypes::sWidgetMap; 40LLMIMETypes::mime_widget_set_map_t LLMIMETypes::sWidgetMap;
@@ -52,7 +52,7 @@ LLString sDefaultImpl;
52bool LLMIMETypes::parseMIMETypes(const LLString& xml_filename) 52bool LLMIMETypes::parseMIMETypes(const LLString& xml_filename)
53{ 53{
54 LLXMLNodePtr root; 54 LLXMLNodePtr root;
55 bool success = LLViewerUICtrlFactory::getLayeredXMLNode(xml_filename, root); 55 bool success = LLUICtrlFactory::getLayeredXMLNode(xml_filename, root);
56 if ( ! success || root.isNull() || ! root->hasName( "mimetypes" ) ) 56 if ( ! success || root.isNull() || ! root->hasName( "mimetypes" ) )
57 { 57 {
58 llwarns << "Unable to read MIME type file: " 58 llwarns << "Unable to read MIME type file: "
diff --git a/linden/indra/newview/llmorphview.cpp b/linden/indra/newview/llmorphview.cpp
index 404534b..6a592e6 100644
--- a/linden/indra/newview/llmorphview.cpp
+++ b/linden/indra/newview/llmorphview.cpp
@@ -80,16 +80,6 @@ LLMorphView::LLMorphView(const std::string& name, const LLRect& rect)
80{ 80{
81} 81}
82 82
83EWidgetType LLMorphView::getWidgetType() const
84{
85 return WIDGET_TYPE_MORPH_VIEW;
86}
87
88LLString LLMorphView::getWidgetTag() const
89{
90 return LL_MORPH_VIEW_TAG;
91}
92
93//----------------------------------------------------------------------------- 83//-----------------------------------------------------------------------------
94// initialize() 84// initialize()
95//----------------------------------------------------------------------------- 85//-----------------------------------------------------------------------------
@@ -110,8 +100,8 @@ void LLMorphView::initialize()
110 avatarp->mSpecialRenderMode = 3; 100 avatarp->mSpecialRenderMode = 3;
111 101
112 // set up camera for close look at avatar 102 // set up camera for close look at avatar
113 mOldCameraNearClip = gCamera->getNear(); 103 mOldCameraNearClip = LLViewerCamera::getInstance()->getNear();
114 gCamera->setNear(MORPH_NEAR_CLIP); 104 LLViewerCamera::getInstance()->setNear(MORPH_NEAR_CLIP);
115} 105}
116 106
117//----------------------------------------------------------------------------- 107//-----------------------------------------------------------------------------
@@ -127,7 +117,7 @@ void LLMorphView::shutdown()
127 avatarp->startMotion( ANIM_AGENT_BODY_NOISE ); 117 avatarp->startMotion( ANIM_AGENT_BODY_NOISE );
128 avatarp->mSpecialRenderMode = 0; 118 avatarp->mSpecialRenderMode = 0;
129 // reset camera 119 // reset camera
130 gCamera->setNear(mOldCameraNearClip); 120 LLViewerCamera::getInstance()->setNear(mOldCameraNearClip);
131 } 121 }
132} 122}
133 123
diff --git a/linden/indra/newview/llmorphview.h b/linden/indra/newview/llmorphview.h
index 14645f4..1ea09ac 100644
--- a/linden/indra/newview/llmorphview.h
+++ b/linden/indra/newview/llmorphview.h
@@ -44,9 +44,6 @@ class LLMorphView : public LLView
44public: 44public:
45 LLMorphView(const std::string& name, const LLRect& rect); 45 LLMorphView(const std::string& name, const LLRect& rect);
46 46
47 virtual EWidgetType getWidgetType() const;
48 virtual LLString getWidgetTag() const;
49
50 void initialize(); 47 void initialize();
51 void shutdown(); 48 void shutdown();
52 49
diff --git a/linden/indra/newview/llmoveview.cpp b/linden/indra/newview/llmoveview.cpp
index 5444a6e..0bb0a5e 100644
--- a/linden/indra/newview/llmoveview.cpp
+++ b/linden/indra/newview/llmoveview.cpp
@@ -39,12 +39,10 @@
39// Viewer includes 39// Viewer includes
40#include "llagent.h" 40#include "llagent.h"
41#include "llviewercontrol.h" 41#include "llviewercontrol.h"
42#include "llfontgl.h"
43#include "llbutton.h" 42#include "llbutton.h"
44#include "llviewerwindow.h" 43#include "llviewerwindow.h"
45#include "lljoystickbutton.h" 44#include "lljoystickbutton.h"
46#include "llresmgr.h" 45#include "lluictrlfactory.h"
47#include "llvieweruictrlfactory.h"
48 46
49// 47//
50// Constants 48// Constants
@@ -54,68 +52,48 @@ const F32 MOVE_BUTTON_DELAY = 0.0f;
54const F32 YAW_NUDGE_RATE = 0.05f; // fraction of normal speed 52const F32 YAW_NUDGE_RATE = 0.05f; // fraction of normal speed
55const F32 NUDGE_TIME = 0.25f; // in seconds 53const F32 NUDGE_TIME = 0.25f; // in seconds
56 54
57const char *MOVE_TITLE = "";
58
59//
60// Global statics
61//
62
63LLFloaterMove* LLFloaterMove::sInstance = NULL;
64
65
66// 55//
67// Member functions 56// Member functions
68// 57//
69 58
70// protected 59// protected
71LLFloaterMove::LLFloaterMove() 60LLFloaterMove::LLFloaterMove(const LLSD& key)
72: LLFloater("move floater", "FloaterMoveRect", MOVE_TITLE, FALSE, 100, 100, DRAG_ON_TOP, 61: LLFloater("move floater")
73 MINIMIZE_NO)
74{ 62{
75 setIsChrome(TRUE); 63 setIsChrome(TRUE);
76 gUICtrlFactory->buildFloater(this,"floater_moveview.xml");
77 64
78 mForwardButton = LLViewerUICtrlFactory::getJoystickAgentTurnByName(this, "forward btn"); 65 const BOOL DONT_OPEN = FALSE;
66 LLUICtrlFactory::getInstance()->buildFloater(this,"floater_moveview.xml", NULL, DONT_OPEN);
67
68 mForwardButton = getChild<LLJoystickAgentTurn>("forward btn");
79 mForwardButton->setHeldDownDelay(MOVE_BUTTON_DELAY); 69 mForwardButton->setHeldDownDelay(MOVE_BUTTON_DELAY);
80 70
81 mBackwardButton = LLViewerUICtrlFactory::getJoystickAgentTurnByName(this, "backward btn"); 71 mBackwardButton = getChild<LLJoystickAgentTurn>("backward btn");
82 mBackwardButton->setHeldDownDelay(MOVE_BUTTON_DELAY); 72 mBackwardButton->setHeldDownDelay(MOVE_BUTTON_DELAY);
83 73
84 mSlideLeftButton = LLViewerUICtrlFactory::getJoystickAgentSlideByName(this, "slide left btn"); 74 mSlideLeftButton = getChild<LLJoystickAgentSlide>("slide left btn");
85 mSlideLeftButton->setHeldDownDelay(MOVE_BUTTON_DELAY); 75 mSlideLeftButton->setHeldDownDelay(MOVE_BUTTON_DELAY);
86 76
87 mSlideRightButton = LLViewerUICtrlFactory::getJoystickAgentSlideByName(this, "slide right btn"); 77 mSlideRightButton = getChild<LLJoystickAgentSlide>("slide right btn");
88 mSlideRightButton->setHeldDownDelay(MOVE_BUTTON_DELAY); 78 mSlideRightButton->setHeldDownDelay(MOVE_BUTTON_DELAY);
89 79
90 mTurnLeftButton = LLUICtrlFactory::getButtonByName(this, "turn left btn"); 80 mTurnLeftButton = getChild<LLButton>("turn left btn");
91 mTurnLeftButton->setHeldDownDelay(MOVE_BUTTON_DELAY); 81 mTurnLeftButton->setHeldDownDelay(MOVE_BUTTON_DELAY);
92 mTurnLeftButton->setHeldDownCallback( turnLeft ); 82 mTurnLeftButton->setHeldDownCallback( turnLeft );
93 83
94 mTurnRightButton = LLUICtrlFactory::getButtonByName(this, "turn right btn"); 84 mTurnRightButton = getChild<LLButton>("turn right btn");
95 mTurnRightButton->setHeldDownDelay(MOVE_BUTTON_DELAY); 85 mTurnRightButton->setHeldDownDelay(MOVE_BUTTON_DELAY);
96 mTurnRightButton->setHeldDownCallback( turnRight ); 86 mTurnRightButton->setHeldDownCallback( turnRight );
97 87
98 mMoveUpButton = LLUICtrlFactory::getButtonByName(this, "move up btn"); 88 mMoveUpButton = getChild<LLButton>("move up btn");
99 childSetAction("move up btn",moveUp,NULL); 89 childSetAction("move up btn",moveUp,NULL);
100 mMoveUpButton->setHeldDownDelay(MOVE_BUTTON_DELAY); 90 mMoveUpButton->setHeldDownDelay(MOVE_BUTTON_DELAY);
101 mMoveUpButton->setHeldDownCallback( moveUp ); 91 mMoveUpButton->setHeldDownCallback( moveUp );
102 92
103 mMoveDownButton = LLUICtrlFactory::getButtonByName(this, "move down btn"); 93 mMoveDownButton = getChild<LLButton>("move down btn");
104 childSetAction("move down btn",moveDown,NULL); 94 childSetAction("move down btn",moveDown,NULL);
105 mMoveDownButton->setHeldDownDelay(MOVE_BUTTON_DELAY); 95 mMoveDownButton->setHeldDownDelay(MOVE_BUTTON_DELAY);
106 mMoveDownButton->setHeldDownCallback( moveDown ); 96 mMoveDownButton->setHeldDownCallback( moveDown );
107
108 mFlyButton = LLUICtrlFactory::getButtonByName(this, "fly btn");
109 childSetAction("fly btn",onFlyButtonClicked,NULL);
110
111 sInstance = this;
112}
113
114// protected
115LLFloaterMove::~LLFloaterMove()
116{
117 // children all deleted by LLView destructor
118 sInstance = NULL;
119} 97}
120 98
121// virtual 99// virtual
@@ -133,48 +111,12 @@ void LLFloaterMove::onClose(bool app_quitting)
133// Static member functions 111// Static member functions
134// 112//
135 113
136// static 114void LLFloaterMove::onOpen()
137void LLFloaterMove::show(void*)
138{ 115{
139 if (sInstance) 116 LLFloater::onOpen();
140 {
141 sInstance->open(); /*Flawfinder: ignore*/
142 }
143 else
144 {
145 LLFloaterMove* f = new LLFloaterMove();
146 f->open(); /*Flawfinder: ignore*/
147 }
148
149 gSavedSettings.setBOOL("ShowMovementControls", TRUE); 117 gSavedSettings.setBOOL("ShowMovementControls", TRUE);
150} 118}
151 119
152// static
153void LLFloaterMove::toggle(void*)
154{
155 if (sInstance)
156 {
157 sInstance->close();
158 }
159 else
160 {
161 show(NULL);
162 }
163}
164
165// static
166BOOL LLFloaterMove::visible(void*)
167{
168 return (sInstance != NULL);
169}
170
171// protected static
172void LLFloaterMove::onFlyButtonClicked(void *)
173{
174 gAgent.toggleFlying();
175}
176
177
178// protected static 120// protected static
179F32 LLFloaterMove::getYawRate( F32 time ) 121F32 LLFloaterMove::getYawRate( F32 time )
180{ 122{
@@ -192,14 +134,14 @@ F32 LLFloaterMove::getYawRate( F32 time )
192// protected static 134// protected static
193void LLFloaterMove::turnLeft(void *) 135void LLFloaterMove::turnLeft(void *)
194{ 136{
195 F32 time = sInstance->mTurnLeftButton->getHeldDownTime(); 137 F32 time = getInstance()->mTurnLeftButton->getHeldDownTime();
196 gAgent.moveYaw( getYawRate( time ) ); 138 gAgent.moveYaw( getYawRate( time ) );
197} 139}
198 140
199// protected static 141// protected static
200void LLFloaterMove::turnRight(void *) 142void LLFloaterMove::turnRight(void *)
201{ 143{
202 F32 time = sInstance->mTurnRightButton->getHeldDownTime(); 144 F32 time = getInstance()->mTurnRightButton->getHeldDownTime();
203 gAgent.moveYaw( -getYawRate( time ) ); 145 gAgent.moveYaw( -getYawRate( time ) );
204} 146}
205 147
diff --git a/linden/indra/newview/llmoveview.h b/linden/indra/newview/llmoveview.h
index 2683e62..a3a4ad1 100644
--- a/linden/indra/newview/llmoveview.h
+++ b/linden/indra/newview/llmoveview.h
@@ -43,23 +43,20 @@ class LLJoystickAgentSlide;
43// Classes 43// Classes
44// 44//
45class LLFloaterMove 45class LLFloaterMove
46: public LLFloater 46: public LLFloater,
47 public LLFloaterSingleton<LLFloaterMove>
47{ 48{
49 friend class LLUISingleton<LLFloaterMove, VisibilityPolicy<LLFloater> >;
50
48protected: 51protected:
49 LLFloaterMove(); 52 LLFloaterMove(const LLSD& key);
50 ~LLFloaterMove(); 53 ~LLFloaterMove() {}
51 54
52public: 55public:
56 /*virtual*/ void onOpen();
53 /*virtual*/ void onClose(bool app_quitting); 57 /*virtual*/ void onClose(bool app_quitting);
54 static void onFlyButtonClicked(void* userdata);
55 static F32 getYawRate(F32 time);
56 58
57 static void show(void*); 59 static F32 getYawRate(F32 time);
58 static void toggle(void*);
59 static BOOL visible(void*);
60
61 // This function is used for agent-driven button highlighting
62 static LLFloaterMove* getInstance() { return sInstance; }
63 60
64protected: 61protected:
65 static void turnLeftNudge(void* userdata); 62 static void turnLeftNudge(void* userdata);
@@ -72,8 +69,6 @@ protected:
72 static void moveDown(void* userdata); 69 static void moveDown(void* userdata);
73 70
74public: 71public:
75 LLButton* mFlyButton;
76
77 LLJoystickAgentTurn* mForwardButton; 72 LLJoystickAgentTurn* mForwardButton;
78 LLJoystickAgentTurn* mBackwardButton; 73 LLJoystickAgentTurn* mBackwardButton;
79 LLJoystickAgentSlide* mSlideLeftButton; 74 LLJoystickAgentSlide* mSlideLeftButton;
@@ -82,9 +77,6 @@ public:
82 LLButton* mTurnRightButton; 77 LLButton* mTurnRightButton;
83 LLButton* mMoveUpButton; 78 LLButton* mMoveUpButton;
84 LLButton* mMoveDownButton; 79 LLButton* mMoveDownButton;
85
86protected:
87 static LLFloaterMove* sInstance;
88}; 80};
89 81
90 82
diff --git a/linden/indra/newview/llmutelist.cpp b/linden/indra/newview/llmutelist.cpp
index 9b645a6..c411ffe 100644
--- a/linden/indra/newview/llmutelist.cpp
+++ b/linden/indra/newview/llmutelist.cpp
@@ -59,14 +59,12 @@
59#include "message.h" 59#include "message.h"
60 60
61#include "llagent.h" 61#include "llagent.h"
62#include "llfloatermute.h"
63#include "llviewergenericmessage.h" // for gGenericDispatcher 62#include "llviewergenericmessage.h" // for gGenericDispatcher
64#include "llviewerwindow.h" 63#include "llviewerwindow.h"
65#include "llworld.h" //for particle system banning 64#include "llworld.h" //for particle system banning
66#include "llviewerobject.h" 65#include "llviewerobject.h"
67#include "llviewerobjectlist.h" 66#include "llviewerobjectlist.h"
68 67
69LLMuteList* gMuteListp = NULL;
70 68
71std::map<LLUUID, F32> LLMuteList::sUserVolumeSettings; 69std::map<LLUUID, F32> LLMuteList::sUserVolumeSettings;
72 70
@@ -81,7 +79,7 @@ public:
81 const LLUUID& invoice, 79 const LLUUID& invoice,
82 const sparam_t& strings) 80 const sparam_t& strings)
83 { 81 {
84 gMuteListp->setLoaded(); 82 LLMuteList::getInstance()->setLoaded();
85 return true; 83 return true;
86 } 84 }
87}; 85};
@@ -159,18 +157,27 @@ void LLMute::setFromDisplayName(const LLString& display_name)
159 return; 157 return;
160} 158}
161 159
160/* static */
161LLMuteList* LLMuteList::getInstance()
162{
163 // Register callbacks at the first time that we find that the message system has been created.
164 static BOOL registered = FALSE;
165 if( !registered && gMessageSystem != NULL)
166 {
167 registered = TRUE;
168 // Register our various callbacks
169 gMessageSystem->setHandlerFuncFast(_PREHASH_MuteListUpdate, processMuteListUpdate);
170 gMessageSystem->setHandlerFuncFast(_PREHASH_UseCachedMuteList, processUseCachedMuteList);
171 }
172 return LLSingleton<LLMuteList>::getInstance(); // Call the "base" implementation.
173}
174
162//----------------------------------------------------------------------------- 175//-----------------------------------------------------------------------------
163// LLMuteList() 176// LLMuteList()
164//----------------------------------------------------------------------------- 177//-----------------------------------------------------------------------------
165LLMuteList::LLMuteList() : 178LLMuteList::LLMuteList() :
166 mIsLoaded(FALSE) 179 mIsLoaded(FALSE)
167{ 180{
168 LLMessageSystem* msg = gMessageSystem;
169
170 // Register our various callbacks
171 msg->setHandlerFuncFast(_PREHASH_MuteListUpdate, processMuteListUpdate);
172 msg->setHandlerFuncFast(_PREHASH_UseCachedMuteList, processUseCachedMuteList);
173
174 gGenericDispatcher.addHandler("emptymutelist", &sDispatchEmptyMuteList); 181 gGenericDispatcher.addHandler("emptymutelist", &sDispatchEmptyMuteList);
175 182
176 // load per-resident voice volume information 183 // load per-resident voice volume information
@@ -318,7 +325,7 @@ BOOL LLMuteList::add(const LLMute& mute, U32 flags)
318 //Kill all particle systems owned by muted task 325 //Kill all particle systems owned by muted task
319 if(localmute.mType == LLMute::AGENT || localmute.mType == LLMute::OBJECT) 326 if(localmute.mType == LLMute::AGENT || localmute.mType == LLMute::OBJECT)
320 { 327 {
321 gWorldPointer->mPartSim.clearParticlesByOwnerID(localmute.mID); 328 LLViewerPartSim::getInstance()->clearParticlesByOwnerID(localmute.mID);
322 } 329 }
323 } 330 }
324 return TRUE; 331 return TRUE;
@@ -345,7 +352,7 @@ void LLMuteList::updateAdd(const LLMute& mute)
345 msg->addU32("MuteFlags", mute.mFlags); 352 msg->addU32("MuteFlags", mute.mFlags);
346 gAgent.sendReliableMessage(); 353 gAgent.sendReliableMessage();
347 354
348 mIsLoaded = TRUE; 355 mIsLoaded = TRUE; // why is this here? -MG
349} 356}
350 357
351 358
@@ -398,8 +405,7 @@ BOOL LLMuteList::remove(const LLMute& mute, U32 flags)
398 } 405 }
399 406
400 // Must be after erase. 407 // Must be after erase.
401 notifyObservers(); 408 setLoaded(); // why is this here? -MG
402 found = TRUE;
403 } 409 }
404 410
405 // Clean up any legacy mutes 411 // Clean up any legacy mutes
@@ -411,8 +417,7 @@ BOOL LLMuteList::remove(const LLMute& mute, U32 flags)
411 updateRemove(mute); 417 updateRemove(mute);
412 mLegacyMutes.erase(legacy_it); 418 mLegacyMutes.erase(legacy_it);
413 // Must be after erase. 419 // Must be after erase.
414 notifyObservers(); 420 setLoaded(); // why is this here? -MG
415 found = TRUE;
416 } 421 }
417 422
418 return found; 423 return found;
@@ -502,8 +507,7 @@ BOOL LLMuteList::loadFromFile(const LLString& filename)
502 } 507 }
503 } 508 }
504 fclose(fp); 509 fclose(fp);
505 mIsLoaded = TRUE; 510 setLoaded();
506 notifyObservers();
507 return TRUE; 511 return TRUE;
508} 512}
509 513
@@ -673,24 +677,22 @@ void LLMuteList::processMuteListUpdate(LLMessageSystem* msg, void**)
673void LLMuteList::processUseCachedMuteList(LLMessageSystem* msg, void**) 677void LLMuteList::processUseCachedMuteList(LLMessageSystem* msg, void**)
674{ 678{
675 llinfos << "LLMuteList::processUseCachedMuteList()" << llendl; 679 llinfos << "LLMuteList::processUseCachedMuteList()" << llendl;
676 if (!gMuteListp) return;
677 680
678 char agent_id_string[UUID_STR_LENGTH]; /*Flawfinder: ignore*/ 681 char agent_id_string[UUID_STR_LENGTH]; /*Flawfinder: ignore*/
679 gAgent.getID().toString(agent_id_string); 682 gAgent.getID().toString(agent_id_string);
680 char filename[LL_MAX_PATH]; /*Flawfinder: ignore*/ 683 char filename[LL_MAX_PATH]; /*Flawfinder: ignore*/
681 snprintf(filename, sizeof(filename), "%s.cached_mute", gDirUtilp->getExpandedFilename(LL_PATH_CACHE,agent_id_string).c_str()); /* Flawfinder: ignore */ 684 snprintf(filename, sizeof(filename), "%s.cached_mute", gDirUtilp->getExpandedFilename(LL_PATH_CACHE,agent_id_string).c_str()); /* Flawfinder: ignore */
682 gMuteListp->loadFromFile(filename); 685 LLMuteList::getInstance()->loadFromFile(filename);
683} 686}
684 687
685void LLMuteList::onFileMuteList(void** user_data, S32 error_code, LLExtStat ext_status) 688void LLMuteList::onFileMuteList(void** user_data, S32 error_code, LLExtStat ext_status)
686{ 689{
687 llinfos << "LLMuteList::processMuteListFile()" << llendl; 690 llinfos << "LLMuteList::processMuteListFile()" << llendl;
688 if (!gMuteListp) return;
689 691
690 std::string *local_filename_and_path = (std::string*)user_data; 692 std::string *local_filename_and_path = (std::string*)user_data;
691 if(local_filename_and_path && !local_filename_and_path->empty() && (error_code == 0)) 693 if(local_filename_and_path && !local_filename_and_path->empty() && (error_code == 0))
692 { 694 {
693 gMuteListp->loadFromFile(local_filename_and_path->c_str()); 695 LLMuteList::getInstance()->loadFromFile(local_filename_and_path->c_str());
694 LLFile::remove(local_filename_and_path->c_str()); 696 LLFile::remove(local_filename_and_path->c_str());
695 } 697 }
696 delete local_filename_and_path; 698 delete local_filename_and_path;
@@ -714,14 +716,6 @@ void LLMuteList::setLoaded()
714 716
715void LLMuteList::notifyObservers() 717void LLMuteList::notifyObservers()
716{ 718{
717 // HACK: LLFloaterMute is constructed before LLMuteList,
718 // so it can't easily observe it. Changing this requires
719 // much reshuffling of the startup process. JC
720 if (gFloaterMute)
721 {
722 gFloaterMute->refreshMuteList();
723 }
724
725 for (observer_set_t::iterator it = mObservers.begin(); 719 for (observer_set_t::iterator it = mObservers.begin();
726 it != mObservers.end(); 720 it != mObservers.end();
727 ) 721 )
diff --git a/linden/indra/newview/llmutelist.h b/linden/indra/newview/llmutelist.h
index fa85924..e1a87c8 100644
--- a/linden/indra/newview/llmutelist.h
+++ b/linden/indra/newview/llmutelist.h
@@ -79,12 +79,17 @@ public:
79 U32 mFlags; // flags pertaining to this mute entry 79 U32 mFlags; // flags pertaining to this mute entry
80}; 80};
81 81
82class LLMuteList 82class LLMuteList : public LLSingleton<LLMuteList>
83{ 83{
84public: 84public:
85 LLMuteList(); 85 LLMuteList();
86 ~LLMuteList(); 86 ~LLMuteList();
87 87
88 // Implemented locally so that we can perform some delayed initialization.
89 // Callers should be careful to call this one and not LLSingleton<LLMuteList>::getInstance()
90 // which would circumvent that mechanism. -MG
91 static LLMuteList* getInstance();
92
88 void addObserver(LLMuteListObserver* observer); 93 void addObserver(LLMuteListObserver* observer);
89 void removeObserver(LLMuteListObserver* observer); 94 void removeObserver(LLMuteListObserver* observer);
90 95
@@ -170,6 +175,5 @@ public:
170 virtual void onChange() = 0; 175 virtual void onChange() = 0;
171}; 176};
172 177
173extern LLMuteList *gMuteListp;
174 178
175#endif //LL_MUTELIST_H 179#endif //LL_MUTELIST_H
diff --git a/linden/indra/newview/llnameeditor.cpp b/linden/indra/newview/llnameeditor.cpp
index dcb8911..99f9ee7 100644
--- a/linden/indra/newview/llnameeditor.cpp
+++ b/linden/indra/newview/llnameeditor.cpp
@@ -42,6 +42,7 @@
42#include "llstring.h" 42#include "llstring.h"
43#include "llui.h" 43#include "llui.h"
44 44
45static LLRegisterWidget<LLNameEditor> r("name_editor");
45 46
46// statics 47// statics
47std::set<LLNameEditor*> LLNameEditor::sInstances; 48std::set<LLNameEditor*> LLNameEditor::sInstances;
@@ -55,10 +56,7 @@ LLNameEditor::LLNameEditor(const std::string& name, const LLRect& rect,
55 void (*keystroke_callback)(LLLineEditor* caller, void* user_data), 56 void (*keystroke_callback)(LLLineEditor* caller, void* user_data),
56 void (*focus_lost_callback)(LLFocusableElement* caller, void* user_data), 57 void (*focus_lost_callback)(LLFocusableElement* caller, void* user_data),
57 void* userdata, 58 void* userdata,
58 LLLinePrevalidateFunc prevalidate_func, 59 LLLinePrevalidateFunc prevalidate_func)
59 LLViewBorder::EBevel border_bevel,
60 LLViewBorder::EStyle border_style,
61 S32 border_thickness)
62: LLLineEditor(name, rect, 60: LLLineEditor(name, rect,
63 "(retrieving)", 61 "(retrieving)",
64 glfont, 62 glfont,
@@ -67,10 +65,7 @@ LLNameEditor::LLNameEditor(const std::string& name, const LLRect& rect,
67 keystroke_callback, 65 keystroke_callback,
68 focus_lost_callback, 66 focus_lost_callback,
69 userdata, 67 userdata,
70 prevalidate_func, 68 prevalidate_func),
71 border_bevel,
72 border_style,
73 border_thickness),
74 mNameID(name_id) 69 mNameID(name_id)
75{ 70{
76 LLNameEditor::sInstances.insert(this); 71 LLNameEditor::sInstances.insert(this);
@@ -157,19 +152,6 @@ LLView* LLNameEditor::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory
157 node->getAttributeS32("max_length", max_text_length); 152 node->getAttributeS32("max_length", max_text_length);
158 153
159 LLFontGL* font = LLView::selectFont(node); 154 LLFontGL* font = LLView::selectFont(node);
160
161 LLViewBorder::EStyle border_style = LLViewBorder::STYLE_LINE;
162 LLString border_string;
163 node->getAttributeString("border_style", border_string);
164 LLString::toLower(border_string);
165
166 if (border_string == "texture")
167 {
168 border_style = LLViewBorder::STYLE_TEXTURE;
169 }
170
171 S32 border_thickness = 1;
172 node->getAttributeS32("border_thickness", border_thickness);
173 155
174 LLUICtrlCallback commit_callback = NULL; 156 LLUICtrlCallback commit_callback = NULL;
175 157
@@ -178,14 +160,7 @@ LLView* LLNameEditor::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory
178 LLUUID::null, FALSE, 160 LLUUID::null, FALSE,
179 font, 161 font,
180 max_text_length, 162 max_text_length,
181 commit_callback, 163 commit_callback);
182 NULL,
183 NULL,
184 NULL,
185 NULL,
186 LLViewBorder::BEVEL_IN,
187 border_style,
188 border_thickness);
189 164
190 LLString label; 165 LLString label;
191 if(node->getAttributeString("label", label)) 166 if(node->getAttributeString("label", label))
diff --git a/linden/indra/newview/llnameeditor.h b/linden/indra/newview/llnameeditor.h
index 1f31f64..3d9a9cc 100644
--- a/linden/indra/newview/llnameeditor.h
+++ b/linden/indra/newview/llnameeditor.h
@@ -54,10 +54,7 @@ public:
54 void (*keystroke_callback)(LLLineEditor* caller, void* user_data) = NULL, 54 void (*keystroke_callback)(LLLineEditor* caller, void* user_data) = NULL,
55 void (*focus_lost_callback)(LLFocusableElement* caller, void* user_data) = NULL, 55 void (*focus_lost_callback)(LLFocusableElement* caller, void* user_data) = NULL,
56 void* userdata = NULL, 56 void* userdata = NULL,
57 LLLinePrevalidateFunc prevalidate_func = NULL, 57 LLLinePrevalidateFunc prevalidate_func = NULL);
58 LLViewBorder::EBevel border_bevel = LLViewBorder::BEVEL_IN,
59 LLViewBorder::EStyle border_style = LLViewBorder::STYLE_LINE,
60 S32 border_thickness = 1);
61 // By default, follows top and left and is mouse-opaque. 58 // By default, follows top and left and is mouse-opaque.
62 // If no text, text = name. 59 // If no text, text = name.
63 // If no font, uses default system font. 60 // If no font, uses default system font.
@@ -74,8 +71,6 @@ public:
74 static void refreshAll(const LLUUID& id, const char* firstname, 71 static void refreshAll(const LLUUID& id, const char* firstname,
75 const char* lastname, BOOL is_group); 72 const char* lastname, BOOL is_group);
76 73
77 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_NAME_EDITOR; }
78 virtual LLString getWidgetTag() const { return LL_NAME_EDITOR_TAG; }
79 74
80 // Take/return agent UUIDs 75 // Take/return agent UUIDs
81 virtual void setValue( const LLSD& value ); 76 virtual void setValue( const LLSD& value );
diff --git a/linden/indra/newview/llnamelistctrl.cpp b/linden/indra/newview/llnamelistctrl.cpp
index bdfdf06..564677a 100644
--- a/linden/indra/newview/llnamelistctrl.cpp
+++ b/linden/indra/newview/llnamelistctrl.cpp
@@ -39,6 +39,8 @@
39#include "llagent.h" 39#include "llagent.h"
40#include "llinventory.h" 40#include "llinventory.h"
41 41
42static LLRegisterWidget<LLNameListCtrl> r("name_list");
43
42// statics 44// statics
43std::set<LLNameListCtrl*> LLNameListCtrl::sInstances; 45std::set<LLNameListCtrl*> LLNameListCtrl::sInstances;
44 46
diff --git a/linden/indra/newview/llnamelistctrl.h b/linden/indra/newview/llnamelistctrl.h
index 71e336d..3aa4dfc 100644
--- a/linden/indra/newview/llnamelistctrl.h
+++ b/linden/indra/newview/llnamelistctrl.h
@@ -50,8 +50,7 @@ public:
50 S32 name_column_index = 0, 50 S32 name_column_index = 0,
51 const LLString& tooltip = LLString::null); 51 const LLString& tooltip = LLString::null);
52 virtual ~LLNameListCtrl(); 52 virtual ~LLNameListCtrl();
53 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_NAME_LIST; } 53
54 virtual LLString getWidgetTag() const { return LL_NAME_LIST_CTRL_TAG; }
55 virtual LLXMLNodePtr getXML(bool save_children = true) const; 54 virtual LLXMLNodePtr getXML(bool save_children = true) const;
56 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); 55 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
57 56
diff --git a/linden/indra/newview/llnetmap.cpp b/linden/indra/newview/llnetmap.cpp
index 01400b1..9226fac 100644
--- a/linden/indra/newview/llnetmap.cpp
+++ b/linden/indra/newview/llnetmap.cpp
@@ -103,15 +103,20 @@ LLNetMap::LLNetMap(
103 103
104 mObjectImageCenterGlobal = gAgent.getCameraPositionGlobal(); 104 mObjectImageCenterGlobal = gAgent.getCameraPositionGlobal();
105 105
106 // TODO: exteralize hardcoded constants.
106 const S32 DIR_WIDTH = 10; 107 const S32 DIR_WIDTH = 10;
107 const S32 DIR_HEIGHT = 10; 108 const S32 DIR_HEIGHT = 10;
108 LLRect major_dir_rect( 0, DIR_HEIGHT, DIR_WIDTH, 0 ); 109 LLRect major_dir_rect( 0, DIR_HEIGHT, DIR_WIDTH, 0 );
109 110 const LLColor4 minor_color( 1.f, 1.f, 1.f, .7f );
110 mTextBoxNorth = new LLTextBox( "N", major_dir_rect ); 111 const LLRect minor_dir_rect( 0, DIR_HEIGHT, DIR_WIDTH * 2, 0 );
111 mTextBoxNorth->setFontStyle(LLFontGL::DROP_SHADOW_SOFT); 112
113 // Note: removing special treatment for north compass point (DEV-10559). -MG
114 //mTextBoxNorth = new LLTextBox( "N", major_dir_rect );
115 //mTextBoxNorth->setFontStyle(LLFontGL::DROP_SHADOW_SOFT);
116 //addChild( mTextBoxNorth );
117 mTextBoxNorth = new LLTextBox( "N", major_dir_rect );
118 mTextBoxNorth->setColor( minor_color );
112 addChild( mTextBoxNorth ); 119 addChild( mTextBoxNorth );
113
114 LLColor4 minor_color( 1.f, 1.f, 1.f, .7f );
115 120
116 mTextBoxEast = new LLTextBox( "E", major_dir_rect ); 121 mTextBoxEast = new LLTextBox( "E", major_dir_rect );
117 mTextBoxEast->setColor( minor_color ); 122 mTextBoxEast->setColor( minor_color );
@@ -127,8 +132,6 @@ LLNetMap::LLNetMap(
127 mTextBoxSouth->setColor( minor_color ); 132 mTextBoxSouth->setColor( minor_color );
128 addChild( mTextBoxSouth ); 133 addChild( mTextBoxSouth );
129 134
130 LLRect minor_dir_rect( 0, DIR_HEIGHT, DIR_WIDTH * 2, 0 );
131
132 mTextBoxSouthEast = new LLTextBox( "SE", minor_dir_rect ); 135 mTextBoxSouthEast = new LLTextBox( "SE", minor_dir_rect );
133 mTextBoxSouthEast->setColor( minor_color ); 136 mTextBoxSouthEast->setColor( minor_color );
134 addChild( mTextBoxSouthEast ); 137 addChild( mTextBoxSouthEast );
@@ -163,8 +166,6 @@ LLNetMap::LLNetMap(
163 mPopupMenuHandle = menu->getHandle(); 166 mPopupMenuHandle = menu->getHandle();
164 167
165 sInstance = this; 168 sInstance = this;
166
167 gSavedSettings.getControl("MiniMapRotate")->addListener(&mNetMapListener);
168} 169}
169 170
170LLNetMap::~LLNetMap() 171LLNetMap::~LLNetMap()
@@ -172,17 +173,6 @@ LLNetMap::~LLNetMap()
172 sInstance = NULL; 173 sInstance = NULL;
173} 174}
174 175
175EWidgetType LLNetMap::getWidgetType() const
176{
177 return WIDGET_TYPE_NET_MAP;
178}
179
180LLString LLNetMap::getWidgetTag() const
181{
182 return LL_NET_MAP_TAG;
183}
184
185
186void LLNetMap::setScale( F32 scale ) 176void LLNetMap::setScale( F32 scale )
187{ 177{
188 gMiniMapScale = scale; 178 gMiniMapScale = scale;
@@ -196,20 +186,8 @@ void LLNetMap::setScale( F32 scale )
196 F32 half_width = (F32)(getRect().getWidth() / 2); 186 F32 half_width = (F32)(getRect().getWidth() / 2);
197 F32 half_height = (F32)(getRect().getHeight() / 2); 187 F32 half_height = (F32)(getRect().getHeight() / 2);
198 F32 radius = sqrt( half_width * half_width + half_height * half_height ); 188 F32 radius = sqrt( half_width * half_width + half_height * half_height );
199
200 F32 region_widths = (2.f*radius)/gMiniMapScale; 189 F32 region_widths = (2.f*radius)/gMiniMapScale;
201 190 F32 meters = region_widths * LLWorld::getInstance()->getRegionWidthInMeters();
202 F32 meters;
203 if (!gWorldPointer)
204 {
205 // Hack! Sometimes world hasn't been initialized at this point.
206 meters = 256.f*region_widths;
207 }
208 else
209 {
210 meters = region_widths * gWorldPointer->getRegionWidthInMeters();
211 }
212
213 F32 num_pixels = (F32)mObjectImagep->getWidth(); 191 F32 num_pixels = (F32)mObjectImagep->getWidth();
214 mObjectMapTPM = num_pixels/meters; 192 mObjectMapTPM = num_pixels/meters;
215 mObjectMapPixels = 2.f*radius; 193 mObjectMapPixels = 2.f*radius;
@@ -233,10 +211,6 @@ void LLNetMap::draw()
233{ 211{
234 static LLFrameTimer map_timer; 212 static LLFrameTimer map_timer;
235 213
236 if (!getVisible() || !gWorldPointer)
237 {
238 return;
239 }
240 if (mObjectImagep.isNull()) 214 if (mObjectImagep.isNull())
241 { 215 {
242 createObjectImage(); 216 createObjectImage();
@@ -273,15 +247,15 @@ void LLNetMap::draw()
273 if( LLNetMap::sRotateMap ) 247 if( LLNetMap::sRotateMap )
274 { 248 {
275 // rotate subsequent draws to agent rotation 249 // rotate subsequent draws to agent rotation
276 rotation = atan2( gCamera->getAtAxis().mV[VX], gCamera->getAtAxis().mV[VY] ); 250 rotation = atan2( LLViewerCamera::getInstance()->getAtAxis().mV[VX], LLViewerCamera::getInstance()->getAtAxis().mV[VY] );
277 glRotatef( rotation * RAD_TO_DEG, 0.f, 0.f, 1.f); 251 glRotatef( rotation * RAD_TO_DEG, 0.f, 0.f, 1.f);
278 } 252 }
279 253
280 // figure out where agent is 254 // figure out where agent is
281 S32 region_width = llround(gWorldPointer->getRegionWidthInMeters()); 255 S32 region_width = llround(LLWorld::getInstance()->getRegionWidthInMeters());
282 256
283 for (LLWorld::region_list_t::iterator iter = gWorldp->mActiveRegionList.begin(); 257 for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->mActiveRegionList.begin();
284 iter != gWorldp->mActiveRegionList.end(); ++iter) 258 iter != LLWorld::getInstance()->mActiveRegionList.end(); ++iter)
285 { 259 {
286 LLViewerRegion* regionp = *iter; 260 LLViewerRegion* regionp = *iter;
287 // Find x and y position relative to camera's center. 261 // Find x and y position relative to camera's center.
@@ -397,8 +371,8 @@ void LLNetMap::draw()
397 LLVector3 pos_map; 371 LLVector3 pos_map;
398 372
399 // Draw avatars 373 // Draw avatars
400 for (LLWorld::region_list_t::iterator iter = gWorldp->mActiveRegionList.begin(); 374 for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->mActiveRegionList.begin();
401 iter != gWorldp->mActiveRegionList.end(); ++iter) 375 iter != LLWorld::getInstance()->mActiveRegionList.end(); ++iter)
402 { 376 {
403 LLViewerRegion* regionp = *iter; 377 LLViewerRegion* regionp = *iter;
404 const LLVector3d& origin_global = regionp->getOriginGlobal(); 378 const LLVector3d& origin_global = regionp->getOriginGlobal();
@@ -462,19 +436,18 @@ void LLNetMap::draw()
462 } 436 }
463 437
464 // Draw dot for self avatar position 438 // Draw dot for self avatar position
465 //drawTracking( gAgent.getPosGlobalFromAgent(gAgent.getFrameAgent().getCenter()), gSelfMapColor );
466 pos_global = gAgent.getPositionGlobal(); 439 pos_global = gAgent.getPositionGlobal();
467 pos_map = globalPosToView(pos_global); 440 pos_map = globalPosToView(pos_global);
468 gl_draw_image(llround(pos_map.mV[VX]) - 4, 441 LLUIImagePtr you = LLWorldMapView::sAvatarYouSmallImage;
469 llround(pos_map.mV[VY]) - 4, 442 you->draw(
470 LLWorldMapView::sAvatarYouSmallImage, 443 llround(pos_map.mV[VX]) - you->getWidth()/2,
471 LLColor4::white); 444 llround(pos_map.mV[VY]) - you->getHeight()/2);
472 445
473 // Draw frustum 446 // Draw frustum
474 F32 meters_to_pixels = gMiniMapScale/ gWorldPointer->getRegionWidthInMeters(); 447 F32 meters_to_pixels = gMiniMapScale/ LLWorld::getInstance()->getRegionWidthInMeters();
475 448
476 F32 horiz_fov = gCamera->getView() * gCamera->getAspect(); 449 F32 horiz_fov = LLViewerCamera::getInstance()->getView() * LLViewerCamera::getInstance()->getAspect();
477 F32 far_clip_meters = gCamera->getFar(); 450 F32 far_clip_meters = LLViewerCamera::getInstance()->getFar();
478 F32 far_clip_pixels = far_clip_meters * meters_to_pixels; 451 F32 far_clip_pixels = far_clip_meters * meters_to_pixels;
479 452
480 F32 half_width_meters = far_clip_meters * tan( horiz_fov / 2 ); 453 F32 half_width_meters = far_clip_meters * tan( horiz_fov / 2 );
@@ -503,7 +476,7 @@ void LLNetMap::draw()
503 // If we don't rotate the map, we have to rotate the frustum. 476 // If we don't rotate the map, we have to rotate the frustum.
504 gGL.pushMatrix(); 477 gGL.pushMatrix();
505 gGL.translatef( ctr_x, ctr_y, 0 ); 478 gGL.translatef( ctr_x, ctr_y, 0 );
506 glRotatef( atan2( gCamera->getAtAxis().mV[VX], gCamera->getAtAxis().mV[VY] ) * RAD_TO_DEG, 0.f, 0.f, -1.f); 479 glRotatef( atan2( LLViewerCamera::getInstance()->getAtAxis().mV[VX], LLViewerCamera::getInstance()->getAtAxis().mV[VY] ) * RAD_TO_DEG, 0.f, 0.f, -1.f);
507 gGL.begin( GL_TRIANGLES ); 480 gGL.begin( GL_TRIANGLES );
508 gGL.vertex2f( 0, 0 ); 481 gGL.vertex2f( 0, 0 );
509 gGL.vertex2f( -half_width_pixels, far_clip_pixels ); 482 gGL.vertex2f( -half_width_pixels, far_clip_pixels );
@@ -539,7 +512,7 @@ LLVector3 LLNetMap::globalPosToView( const LLVector3d& global_pos )
539 512
540 if( LLNetMap::sRotateMap ) 513 if( LLNetMap::sRotateMap )
541 { 514 {
542 F32 radians = atan2( gCamera->getAtAxis().mV[VX], gCamera->getAtAxis().mV[VY] ); 515 F32 radians = atan2( LLViewerCamera::getInstance()->getAtAxis().mV[VX], LLViewerCamera::getInstance()->getAtAxis().mV[VY] );
543 LLQuaternion rot(radians, LLVector3(0.f, 0.f, 1.f)); 516 LLQuaternion rot(radians, LLVector3(0.f, 0.f, 1.f));
544 pos_local.rotVec( rot ); 517 pos_local.rotVec( rot );
545 } 518 }
@@ -583,7 +556,7 @@ LLVector3d LLNetMap::viewPosToGlobal( S32 x, S32 y )
583 556
584 LLVector3 pos_local( (F32)x, (F32)y, 0 ); 557 LLVector3 pos_local( (F32)x, (F32)y, 0 );
585 558
586 F32 radians = - atan2( gCamera->getAtAxis().mV[VX], gCamera->getAtAxis().mV[VY] ); 559 F32 radians = - atan2( LLViewerCamera::getInstance()->getAtAxis().mV[VX], LLViewerCamera::getInstance()->getAtAxis().mV[VY] );
587 560
588 if( LLNetMap::sRotateMap ) 561 if( LLNetMap::sRotateMap )
589 { 562 {
@@ -591,7 +564,7 @@ LLVector3d LLNetMap::viewPosToGlobal( S32 x, S32 y )
591 pos_local.rotVec( rot ); 564 pos_local.rotVec( rot );
592 } 565 }
593 566
594 pos_local *= ( gWorldPointer->getRegionWidthInMeters() / gMiniMapScale ); 567 pos_local *= ( LLWorld::getInstance()->getRegionWidthInMeters() / gMiniMapScale );
595 568
596 LLVector3d pos_global; 569 LLVector3d pos_global;
597 pos_global.setVec( pos_local ); 570 pos_global.setVec( pos_local );
@@ -614,7 +587,7 @@ BOOL LLNetMap::handleToolTip( S32 x, S32 y, LLString& msg, LLRect* sticky_rect_s
614 { 587 {
615 return FALSE; 588 return FALSE;
616 } 589 }
617 LLViewerRegion* region = gWorldPointer->getRegionFromPosGlobal( viewPosToGlobal( x, y ) ); 590 LLViewerRegion* region = LLWorld::getInstance()->getRegionFromPosGlobal( viewPosToGlobal( x, y ) );
618 if( region ) 591 if( region )
619 { 592 {
620 msg.assign( region->getName() ); 593 msg.assign( region->getName() );
@@ -828,9 +801,3 @@ void LLNetMap::handleZoomLevel(void* which)
828 break; 801 break;
829 } 802 }
830} 803}
831
832bool LLRotateNetMapListener::handleEvent(LLPointer<LLEvent> event, const LLSD& user_data)
833{
834 LLNetMap::setRotateMap(event->getValue().asBoolean());
835 return true;
836}
diff --git a/linden/indra/newview/llnetmap.h b/linden/indra/newview/llnetmap.h
index 88ec051..7a3654c 100644
--- a/linden/indra/newview/llnetmap.h
+++ b/linden/indra/newview/llnetmap.h
@@ -45,21 +45,12 @@ class LLCoordGL;
45class LLTextBox; 45class LLTextBox;
46class LLMenuGL; 46class LLMenuGL;
47 47
48class LLRotateNetMapListener : public LLSimpleListener
49{
50public:
51 bool handleEvent(LLPointer<LLEvent>, const LLSD& user_data);
52};
53
54class LLNetMap : public LLUICtrl 48class LLNetMap : public LLUICtrl
55{ 49{
56public: 50public:
57 LLNetMap(const std::string& name, const LLRect& rect, const LLColor4& bg_color ); 51 LLNetMap(const std::string& name, const LLRect& rect, const LLColor4& bg_color );
58 virtual ~LLNetMap(); 52 virtual ~LLNetMap();
59 53
60 virtual EWidgetType getWidgetType() const;
61 virtual LLString getWidgetTag() const;
62
63 virtual void draw(); 54 virtual void draw();
64 virtual BOOL handleDoubleClick( S32 x, S32 y, MASK mask ); 55 virtual BOOL handleDoubleClick( S32 x, S32 y, MASK mask );
65 virtual BOOL handleRightMouseDown( S32 x, S32 y, MASK mask ); 56 virtual BOOL handleRightMouseDown( S32 x, S32 y, MASK mask );
@@ -117,8 +108,6 @@ public:
117 LLTextBox* mTextBoxNorthWest; 108 LLTextBox* mTextBoxNorthWest;
118 LLTextBox* mTextBoxSouthWest; 109 LLTextBox* mTextBoxSouthWest;
119 110
120 LLRotateNetMapListener mNetMapListener;
121
122 static BOOL sRotateMap; 111 static BOOL sRotateMap;
123 static LLNetMap* sInstance; 112 static LLNetMap* sInstance;
124}; 113};
diff --git a/linden/indra/newview/llnotify.cpp b/linden/indra/newview/llnotify.cpp
index 0bd039a..19695e8 100644
--- a/linden/indra/newview/llnotify.cpp
+++ b/linden/indra/newview/llnotify.cpp
@@ -334,13 +334,14 @@ LLNotifyBox::LLNotifyBox(LLPointer<LLNotifyBoxTemplate> xml_template, const LLSt
334 { 334 {
335 LLButton* btn; 335 LLButton* btn;
336 btn = new LLButton("next", 336 btn = new LLButton("next",
337 LLRect(getRect().getWidth()-18, BOTTOM_PAD+16, getRect().getWidth()-2, BOTTOM_PAD+2), 337 LLRect(getRect().getWidth()-26, BOTTOM_PAD + 20, getRect().getWidth()-2, BOTTOM_PAD),
338 "notify_next.tga", 338 "notify_next.png",
339 "notify_next.tga", 339 "notify_next.png",
340 "", 340 "",
341 onClickNext, 341 onClickNext,
342 this, 342 this,
343 sFont); 343 sFont);
344 btn->setScaleImage(TRUE);
344 btn->setToolTip(LLString("Next")); // *TODO: Translate 345 btn->setToolTip(LLString("Next")); // *TODO: Translate
345 addChild(btn); 346 addChild(btn);
346 mNextBtn = btn; 347 mNextBtn = btn;
@@ -445,7 +446,7 @@ BOOL LLNotifyBox::handleMouseUp(S32 x, S32 y, MASK mask)
445// virtual 446// virtual
446BOOL LLNotifyBox::handleRightMouseDown(S32 x, S32 y, MASK mask) 447BOOL LLNotifyBox::handleRightMouseDown(S32 x, S32 y, MASK mask)
447{ 448{
448 if (!mIsTip && getVisible() && getEnabled() && pointInView(x,y)) 449 if (!mIsTip)
449 { 450 {
450 moveToBack(true); 451 moveToBack(true);
451 return TRUE; 452 return TRUE;
@@ -505,12 +506,10 @@ void LLNotifyBox::draw()
505 506
506void LLNotifyBox::drawBackground() const 507void LLNotifyBox::drawBackground() const
507{ 508{
508 LLUUID image_id; 509 LLUIImagePtr imagep = LLUI::getUIImage("rounded_square.tga");
509 image_id.set(gViewerArt.getString("rounded_square.tga"));
510 LLViewerImage* imagep = gImageList.getImage(image_id, MIPMAP_FALSE, TRUE);
511 if (imagep) 510 if (imagep)
512 { 511 {
513 LLViewerImage::bindTexture(imagep); 512 LLViewerImage::bindTexture(imagep->getImage());
514 // set proper background color depending on whether notify box is a caution or not 513 // set proper background color depending on whether notify box is a caution or not
515 LLColor4 color = mIsCaution? gColors.getColor("NotifyCautionBoxColor") : gColors.getColor("NotifyBoxColor"); 514 LLColor4 color = mIsCaution? gColors.getColor("NotifyCautionBoxColor") : gColors.getColor("NotifyBoxColor");
516 if(gFocusMgr.childHasKeyboardFocus( this )) 515 if(gFocusMgr.childHasKeyboardFocus( this ))
@@ -520,11 +519,11 @@ void LLNotifyBox::drawBackground() const
520 gGL.color4fv(color.mV); 519 gGL.color4fv(color.mV);
521 gl_segmented_rect_2d_tex(-focus_width, getRect().getHeight() + focus_width, 520 gl_segmented_rect_2d_tex(-focus_width, getRect().getHeight() + focus_width,
522 getRect().getWidth() + focus_width, -focus_width, 521 getRect().getWidth() + focus_width, -focus_width,
523 imagep->getWidth(), imagep->getHeight(), 522 imagep->getTextureWidth(), imagep->getTextureHeight(),
524 16, mIsTip ? ROUNDED_RECT_TOP : ROUNDED_RECT_BOTTOM); 523 16, mIsTip ? ROUNDED_RECT_TOP : ROUNDED_RECT_BOTTOM);
525 color = gColors.getColor("ColorDropShadow"); 524 color = gColors.getColor("ColorDropShadow");
526 gGL.color4fv(color.mV); 525 gGL.color4fv(color.mV);
527 gl_segmented_rect_2d_tex(0, getRect().getHeight(), getRect().getWidth(), 0, imagep->getWidth(), imagep->getHeight(), 16, mIsTip ? ROUNDED_RECT_TOP : ROUNDED_RECT_BOTTOM); 526 gl_segmented_rect_2d_tex(0, getRect().getHeight(), getRect().getWidth(), 0, imagep->getTextureWidth(), imagep->getTextureHeight(), 16, mIsTip ? ROUNDED_RECT_TOP : ROUNDED_RECT_BOTTOM);
528 527
529 if( mIsCaution ) 528 if( mIsCaution )
530 color = gColors.getColor("NotifyCautionBoxColor"); 529 color = gColors.getColor("NotifyCautionBoxColor");
@@ -532,12 +531,12 @@ void LLNotifyBox::drawBackground() const
532 color = gColors.getColor("NotifyBoxColor"); 531 color = gColors.getColor("NotifyBoxColor");
533 532
534 gGL.color4fv(color.mV); 533 gGL.color4fv(color.mV);
535 gl_segmented_rect_2d_tex(1, getRect().getHeight()-1, getRect().getWidth()-1, 1, imagep->getWidth(), imagep->getHeight(), 16, mIsTip ? ROUNDED_RECT_TOP : ROUNDED_RECT_BOTTOM); 534 gl_segmented_rect_2d_tex(1, getRect().getHeight()-1, getRect().getWidth()-1, 1, imagep->getTextureWidth(), imagep->getTextureHeight(), 16, mIsTip ? ROUNDED_RECT_TOP : ROUNDED_RECT_BOTTOM);
536 } 535 }
537 else 536 else
538 { 537 {
539 gGL.color4fv(color.mV); 538 gGL.color4fv(color.mV);
540 gl_segmented_rect_2d_tex(0, getRect().getHeight(), getRect().getWidth(), 0, imagep->getWidth(), imagep->getHeight(), 16, mIsTip ? ROUNDED_RECT_TOP : ROUNDED_RECT_BOTTOM); 539 gl_segmented_rect_2d_tex(0, getRect().getHeight(), getRect().getWidth(), 0, imagep->getTextureWidth(), imagep->getTextureHeight(), 16, mIsTip ? ROUNDED_RECT_TOP : ROUNDED_RECT_BOTTOM);
541 } 540 }
542 } 541 }
543} 542}
diff --git a/linden/indra/newview/llnotify.h b/linden/indra/newview/llnotify.h
index 9421a5b..f2d37c1 100644
--- a/linden/indra/newview/llnotify.h
+++ b/linden/indra/newview/llnotify.h
@@ -168,8 +168,6 @@ public:
168 void showOnly(LLView * ctrl); 168 void showOnly(LLView * ctrl);
169 LLNotifyBox * getFirstNontipBox() const; 169 LLNotifyBox * getFirstNontipBox() const;
170 170
171 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_VIEW; };
172 virtual LLString getWidgetTag() const { return LLString(); }
173 171
174 class Matcher 172 class Matcher
175 { 173 {
diff --git a/linden/indra/newview/lloverlaybar.cpp b/linden/indra/newview/lloverlaybar.cpp
index 0366e75..e5c1113 100644
--- a/linden/indra/newview/lloverlaybar.cpp
+++ b/linden/indra/newview/lloverlaybar.cpp
@@ -55,12 +55,13 @@
55#include "llviewermedia.h" 55#include "llviewermedia.h"
56#include "llviewerparcelmedia.h" 56#include "llviewerparcelmedia.h"
57#include "llviewerparcelmgr.h" 57#include "llviewerparcelmgr.h"
58#include "llvieweruictrlfactory.h" 58#include "lluictrlfactory.h"
59#include "llviewerwindow.h" 59#include "llviewerwindow.h"
60#include "llvoiceclient.h" 60#include "llvoiceclient.h"
61#include "llvoavatar.h" 61#include "llvoavatar.h"
62#include "llvoiceremotectrl.h" 62#include "llvoiceremotectrl.h"
63#include "llwebbrowserctrl.h" 63#include "llwebbrowserctrl.h"
64#include "llselectmgr.h"
64 65
65// 66//
66// Globals 67// Globals
@@ -112,7 +113,7 @@ LLOverlayBar::LLOverlayBar()
112 factory_map["voice_remote"] = LLCallbackMap(LLOverlayBar::createVoiceRemote, this); 113 factory_map["voice_remote"] = LLCallbackMap(LLOverlayBar::createVoiceRemote, this);
113 factory_map["chat_bar"] = LLCallbackMap(LLOverlayBar::createChatBar, this); 114 factory_map["chat_bar"] = LLCallbackMap(LLOverlayBar::createChatBar, this);
114 115
115 gUICtrlFactory->buildPanel(this, "panel_overlaybar.xml", &factory_map); 116 LLUICtrlFactory::getInstance()->buildPanel(this, "panel_overlaybar.xml", &factory_map);
116} 117}
117 118
118BOOL LLOverlayBar::postBuild() 119BOOL LLOverlayBar::postBuild()
@@ -136,16 +137,6 @@ LLOverlayBar::~LLOverlayBar()
136 // LLView destructor cleans up children 137 // LLView destructor cleans up children
137} 138}
138 139
139EWidgetType LLOverlayBar::getWidgetType() const
140{
141 return WIDGET_TYPE_OVERLAY_BAR;
142}
143
144LLString LLOverlayBar::getWidgetTag() const
145{
146 return LL_OVERLAY_BAR_TAG;
147}
148
149// virtual 140// virtual
150void LLOverlayBar::reshape(S32 width, S32 height, BOOL called_from_parent) 141void LLOverlayBar::reshape(S32 width, S32 height, BOOL called_from_parent)
151{ 142{
@@ -159,12 +150,12 @@ void LLOverlayBar::reshape(S32 width, S32 height, BOOL called_from_parent)
159 150
160void LLOverlayBar::layoutButtons() 151void LLOverlayBar::layoutButtons()
161{ 152{
162 LLView* state_buttons_panel = getChildByName("state_buttons", TRUE); 153 LLView* state_buttons_panel = getChildView("state_buttons");
163 154
164 if (state_buttons_panel && state_buttons_panel->getVisible()) 155 if (state_buttons_panel->getVisible())
165 { 156 {
166 LLViewQuery query; 157 LLViewQuery query;
167 LLWidgetTypeFilter widget_filter(WIDGET_TYPE_BUTTON); 158 LLWidgetTypeFilter<LLButton> widget_filter;
168 query.addPreFilter(LLEnabledFilter::getInstance()); 159 query.addPreFilter(LLEnabledFilter::getInstance());
169 query.addPreFilter(&widget_filter); 160 query.addPreFilter(&widget_filter);
170 161
@@ -200,7 +191,7 @@ void LLOverlayBar::refresh()
200 BOOL buttons_changed = FALSE; 191 BOOL buttons_changed = FALSE;
201 192
202 BOOL im_received = gIMMgr->getIMReceived(); 193 BOOL im_received = gIMMgr->getIMReceived();
203 LLButton* button = LLUICtrlFactory::getButtonByName(this, "IM Received"); 194 LLButton* button = getChild<LLButton>("IM Received");
204 if (button && button->getVisible() != im_received) 195 if (button && button->getVisible() != im_received)
205 { 196 {
206 button->setVisible(im_received); 197 button->setVisible(im_received);
@@ -210,7 +201,7 @@ void LLOverlayBar::refresh()
210 } 201 }
211 202
212 BOOL busy = gAgent.getBusy(); 203 BOOL busy = gAgent.getBusy();
213 button = LLUICtrlFactory::getButtonByName(this, "Set Not Busy"); 204 button = getChild<LLButton>("Set Not Busy");
214 if (button && button->getVisible() != busy) 205 if (button && button->getVisible() != busy)
215 { 206 {
216 button->setVisible(busy); 207 button->setVisible(busy);
@@ -220,7 +211,7 @@ void LLOverlayBar::refresh()
220 } 211 }
221 212
222 BOOL controls_grabbed = gAgent.anyControlGrabbed(); 213 BOOL controls_grabbed = gAgent.anyControlGrabbed();
223 button = LLUICtrlFactory::getButtonByName(this, "Release Keys"); 214 button = getChild<LLButton>("Release Keys");
224 215
225 if (button && button->getVisible() != controls_grabbed) 216 if (button && button->getVisible() != controls_grabbed)
226 { 217 {
@@ -233,7 +224,7 @@ void LLOverlayBar::refresh()
233 BOOL mouselook_grabbed; 224 BOOL mouselook_grabbed;
234 mouselook_grabbed = gAgent.isControlGrabbed(CONTROL_ML_LBUTTON_DOWN_INDEX) 225 mouselook_grabbed = gAgent.isControlGrabbed(CONTROL_ML_LBUTTON_DOWN_INDEX)
235 || gAgent.isControlGrabbed(CONTROL_ML_LBUTTON_UP_INDEX); 226 || gAgent.isControlGrabbed(CONTROL_ML_LBUTTON_UP_INDEX);
236 button = LLUICtrlFactory::getButtonByName(this, "Mouselook"); 227 button = getChild<LLButton>("Mouselook");
237 228
238 if (button && button->getVisible() != mouselook_grabbed) 229 if (button && button->getVisible() != mouselook_grabbed)
239 { 230 {
@@ -248,7 +239,7 @@ void LLOverlayBar::refresh()
248 { 239 {
249 sitting = gAgent.getAvatarObject()->mIsSitting; 240 sitting = gAgent.getAvatarObject()->mIsSitting;
250 } 241 }
251 button = LLUICtrlFactory::getButtonByName(this, "Stand Up"); 242 button = getChild<LLButton>("Stand Up");
252 243
253 if (button && button->getVisible() != sitting) 244 if (button && button->getVisible() != sitting)
254 { 245 {
@@ -325,6 +316,7 @@ void LLOverlayBar::onClickMouselook(void*)
325//static 316//static
326void LLOverlayBar::onClickStandUp(void*) 317void LLOverlayBar::onClickStandUp(void*)
327{ 318{
319 LLSelectMgr::getInstance()->deselectAllForStandingUp();
328 gAgent.setControlFlags(AGENT_CONTROL_STAND_UP); 320 gAgent.setControlFlags(AGENT_CONTROL_STAND_UP);
329} 321}
330 322
@@ -359,7 +351,7 @@ void LLOverlayBar::toggleMediaPlay(void*)
359 } 351 }
360 else 352 else
361 { 353 {
362 LLParcel* parcel = gParcelMgr->getAgentParcel(); 354 LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
363 if (parcel) 355 if (parcel)
364 { 356 {
365 LLViewerParcelMedia::play(parcel); 357 LLViewerParcelMedia::play(parcel);
@@ -380,7 +372,7 @@ void LLOverlayBar::toggleMusicPlay(void*)
380 gOverlayBar->mMusicState = PLAYING; // desired state 372 gOverlayBar->mMusicState = PLAYING; // desired state
381 if (gAudiop) 373 if (gAudiop)
382 { 374 {
383 LLParcel* parcel = gParcelMgr->getAgentParcel(); 375 LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
384 if ( parcel ) 376 if ( parcel )
385 { 377 {
386 // this doesn't work properly when crossing parcel boundaries - even when the 378 // this doesn't work properly when crossing parcel boundaries - even when the
diff --git a/linden/indra/newview/lloverlaybar.h b/linden/indra/newview/lloverlaybar.h
index abbc33f..51a6e50 100644
--- a/linden/indra/newview/lloverlaybar.h
+++ b/linden/indra/newview/lloverlaybar.h
@@ -57,9 +57,6 @@ public:
57 LLOverlayBar(); 57 LLOverlayBar();
58 ~LLOverlayBar(); 58 ~LLOverlayBar();
59 59
60 virtual EWidgetType getWidgetType() const;
61 virtual LLString getWidgetTag() const;
62
63 /*virtual*/ void refresh(); 60 /*virtual*/ void refresh();
64 /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE); 61 /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
65 /*virtual*/ BOOL postBuild(); 62 /*virtual*/ BOOL postBuild();
diff --git a/linden/indra/newview/llpanelLCD.cpp b/linden/indra/newview/llpanelLCD.cpp
index b58b21c..cd6626c 100644
--- a/linden/indra/newview/llpanelLCD.cpp
+++ b/linden/indra/newview/llpanelLCD.cpp
@@ -38,7 +38,7 @@
38#include "llrect.h" 38#include "llrect.h"
39#include "llfontgl.h" 39#include "llfontgl.h"
40#include "message.h" 40#include "message.h"
41#include "llvieweruictrlfactory.h" 41#include "lluictrlfactory.h"
42 42
43// project includes 43// project includes
44#include "llviewerwindow.h" 44#include "llviewerwindow.h"
@@ -70,18 +70,18 @@
70 70
71LLPanelLCD::LLPanelLCD() 71LLPanelLCD::LLPanelLCD()
72{ 72{
73 gUICtrlFactory->buildPanel(this, "panel_preferences_lcd.xml"); 73 LLUICtrlFactory::getInstance()->buildPanel(this, "panel_preferences_lcd.xml");
74} 74}
75 75
76BOOL LLPanelLCD::postBuild() 76BOOL LLPanelLCD::postBuild()
77{ 77{
78 requires("LCDDestination", WIDGET_TYPE_RADIO_GROUP); 78 requires<LLRadioGroup>("LCDDestination");
79 requires("DisplayLinden", WIDGET_TYPE_CHECKBOX); 79 requires<LLCheckBoxCtrl>("DisplayLinden");
80 requires("DisplayDebug", WIDGET_TYPE_CHECKBOX); 80 requires<LLCheckBoxCtrl>("DisplayDebug");
81 requires("DisplayDebugConsole", WIDGET_TYPE_CHECKBOX); 81 requires<LLCheckBoxCtrl>("DisplayDebugConsole");
82 requires("DisplayRegion", WIDGET_TYPE_CHECKBOX); 82 requires<LLCheckBoxCtrl>("DisplayRegion");
83 requires("DisplayChat", WIDGET_TYPE_CHECKBOX); 83 requires<LLCheckBoxCtrl>("DisplayChat");
84 requires("DisplayIM", WIDGET_TYPE_CHECKBOX); 84 requires<LLCheckBoxCtrl>("DisplayIM");
85 85
86 if (!checkRequirements()) 86 if (!checkRequirements())
87 { 87 {
diff --git a/linden/indra/newview/llpanelaudioprefs.cpp b/linden/indra/newview/llpanelaudioprefs.cpp
index 606eeb9..6dc1e73 100644
--- a/linden/indra/newview/llpanelaudioprefs.cpp
+++ b/linden/indra/newview/llpanelaudioprefs.cpp
@@ -57,7 +57,7 @@
57#include "lltextbox.h" 57#include "lltextbox.h"
58#include "llui.h" 58#include "llui.h"
59#include "llviewerparcelmgr.h" 59#include "llviewerparcelmgr.h"
60#include "llvieweruictrlfactory.h" 60#include "lluictrlfactory.h"
61#include "llviewerwindow.h" 61#include "llviewerwindow.h"
62#include "llviewercontrol.h" 62#include "llviewercontrol.h"
63 63
@@ -76,7 +76,7 @@ LLPanelAudioPrefs::LLPanelAudioPrefs()
76{ 76{
77 mFactoryMap["Volume Panel"] = LLCallbackMap(createVolumePanel, NULL); 77 mFactoryMap["Volume Panel"] = LLCallbackMap(createVolumePanel, NULL);
78 78
79 gUICtrlFactory->buildPanel(this, "panel_preferences_audio.xml", &getFactoryMap()); 79 LLUICtrlFactory::getInstance()->buildPanel(this, "panel_preferences_audio.xml", &getFactoryMap());
80} 80}
81 81
82LLPanelAudioPrefs::~LLPanelAudioPrefs() 82LLPanelAudioPrefs::~LLPanelAudioPrefs()
diff --git a/linden/indra/newview/llpanelaudiovolume.cpp b/linden/indra/newview/llpanelaudiovolume.cpp
index 0464814..e5bc9c5 100644
--- a/linden/indra/newview/llpanelaudiovolume.cpp
+++ b/linden/indra/newview/llpanelaudiovolume.cpp
@@ -35,7 +35,7 @@
35 35
36#include "lloverlaybar.h" 36#include "lloverlaybar.h"
37#include "llviewercontrol.h" 37#include "llviewercontrol.h"
38#include "llvieweruictrlfactory.h" 38#include "lluictrlfactory.h"
39 39
40//////////////////////////////////////////////////////////////////////////////// 40////////////////////////////////////////////////////////////////////////////////
41// 41//
diff --git a/linden/indra/newview/llpanelavatar.cpp b/linden/indra/newview/llpanelavatar.cpp
index 5d32f4b..3314ec1 100644
--- a/linden/indra/newview/llpanelavatar.cpp
+++ b/linden/indra/newview/llpanelavatar.cpp
@@ -74,14 +74,13 @@
74#include "llviewergenericmessage.h" // send_generic_message 74#include "llviewergenericmessage.h" // send_generic_message
75#include "llviewerobjectlist.h" 75#include "llviewerobjectlist.h"
76#include "llviewerregion.h" 76#include "llviewerregion.h"
77#include "llviewborder.h"
78#include "llweb.h" 77#include "llweb.h"
79#include "llinventorymodel.h" 78#include "llinventorymodel.h"
80#include "roles_constants.h" 79#include "roles_constants.h"
81 80
82#define kArraySize( _kArray ) ( sizeof( (_kArray) ) / sizeof( _kArray[0] ) ) 81#define kArraySize( _kArray ) ( sizeof( (_kArray) ) / sizeof( _kArray[0] ) )
83 82
84#include "llvieweruictrlfactory.h" 83#include "lluictrlfactory.h"
85 84
86// Statics 85// Statics
87std::list<LLPanelAvatar*> LLPanelAvatar::sAllPanels; 86std::list<LLPanelAvatar*> LLPanelAvatar::sAllPanels;
@@ -104,9 +103,6 @@ public:
104 LLDropTarget(const std::string& name, const LLRect& rect, const LLUUID& agent_id); 103 LLDropTarget(const std::string& name, const LLRect& rect, const LLUUID& agent_id);
105 ~LLDropTarget(); 104 ~LLDropTarget();
106 105
107 virtual EWidgetType getWidgetType() const;
108 virtual LLString getWidgetTag() const;
109
110 void doDrop(EDragAndDropType cargo_type, void* cargo_data); 106 void doDrop(EDragAndDropType cargo_type, void* cargo_data);
111 107
112 // 108 //
@@ -133,16 +129,6 @@ LLDropTarget::~LLDropTarget()
133{ 129{
134} 130}
135 131
136EWidgetType LLDropTarget::getWidgetType() const
137{
138 return WIDGET_TYPE_DROP_TARGET;
139}
140
141LLString LLDropTarget::getWidgetTag() const
142{
143 return LL_DROP_TARGET_TAG;
144}
145
146void LLDropTarget::doDrop(EDragAndDropType cargo_type, void* cargo_data) 132void LLDropTarget::doDrop(EDragAndDropType cargo_type, void* cargo_data)
147{ 133{
148 llinfos << "LLDropTarget::doDrop()" << llendl; 134 llinfos << "LLDropTarget::doDrop()" << llendl;
@@ -243,12 +229,9 @@ LLPanelAvatarTab::LLPanelAvatarTab(const std::string& name, const LLRect &rect,
243// virtual 229// virtual
244void LLPanelAvatarTab::draw() 230void LLPanelAvatarTab::draw()
245{ 231{
246 if (getVisible()) 232 refresh();
247 {
248 refresh();
249 233
250 LLPanel::draw(); 234 LLPanel::draw();
251 }
252} 235}
253 236
254void LLPanelAvatarTab::sendAvatarProfileRequestIfNeeded(const char* method) 237void LLPanelAvatarTab::sendAvatarProfileRequestIfNeeded(const char* method)
@@ -314,12 +297,12 @@ void LLPanelAvatarSecondLife::clearControls()
314 297
315 mPartnerID = LLUUID::null; 298 mPartnerID = LLUUID::null;
316 299
317 LLScrollListCtrl* group_list = LLUICtrlFactory::getScrollListByName(this,"groups"); 300 LLScrollListCtrl* group_list = getChild<LLScrollListCtrl>("groups");
318 if(group_list) 301 if(group_list)
319 { 302 {
320 group_list->deleteAllItems(); 303 group_list->deleteAllItems();
321 } 304 }
322 LLScrollListCtrl* ratings_list = LLUICtrlFactory::getScrollListByName(this,"ratings"); 305 LLScrollListCtrl* ratings_list = getChild<LLScrollListCtrl>("ratings");
323 if(ratings_list) 306 if(ratings_list)
324 { 307 {
325 ratings_list->deleteAllItems(); 308 ratings_list->deleteAllItems();
@@ -339,15 +322,6 @@ void LLPanelAvatarSecondLife::enableControls(BOOL self)
339 childSetEnabled("allow_publish", self); 322 childSetEnabled("allow_publish", self);
340 childSetVisible("?", self); 323 childSetVisible("?", self);
341 childSetEnabled("?", self); 324 childSetEnabled("?", self);
342
343 if (!self)
344 {
345 // This is because the LLTextEditor
346 // appears to reset the read only background color when
347 // setEnable is called, for some reason
348 LLTextEditor* about = LLUICtrlFactory::getTextEditorByName(this,"about");
349 if (about) about->setReadOnlyBgColor(LLColor4::transparent);
350 }
351} 325}
352 326
353 327
@@ -361,7 +335,7 @@ void LLPanelAvatarSecondLife::onDoubleClickGroup(void* data)
361 LLPanelAvatarSecondLife* self = (LLPanelAvatarSecondLife*)data; 335 LLPanelAvatarSecondLife* self = (LLPanelAvatarSecondLife*)data;
362 336
363 337
364 LLScrollListCtrl* group_list = LLUICtrlFactory::getScrollListByName(self,"groups"); 338 LLScrollListCtrl* group_list = self->getChild<LLScrollListCtrl>("groups");
365 if(group_list) 339 if(group_list)
366 { 340 {
367 LLScrollListItem* item = group_list->getFirstSelected(); 341 LLScrollListItem* item = group_list->getFirstSelected();
@@ -478,7 +452,7 @@ BOOL LLPanelAvatarNotes::postBuild(void)
478{ 452{
479 childSetCommitCallback("notes edit",onCommitNotes,this); 453 childSetCommitCallback("notes edit",onCommitNotes,this);
480 454
481 LLTextEditor* te = LLUICtrlFactory::getTextEditorByName(this,"notes edit"); 455 LLTextEditor* te = getChild<LLTextEditor>("notes edit");
482 if(te) te->setCommitOnFocusLost(TRUE); 456 if(te) te->setCommitOnFocusLost(TRUE);
483 return TRUE; 457 return TRUE;
484} 458}
@@ -529,7 +503,7 @@ BOOL LLPanelAvatarAdvanced::postBuild()
529 for(S32 tt=0; tt < mWantToCount; ++tt) 503 for(S32 tt=0; tt < mWantToCount; ++tt)
530 { 504 {
531 LLString ctlname = llformat("chk%d", tt); 505 LLString ctlname = llformat("chk%d", tt);
532 mWantToCheck[tt] = LLUICtrlFactory::getCheckBoxByName(this,ctlname); 506 mWantToCheck[tt] = getChild<LLCheckBoxCtrl>(ctlname);
533 } 507 }
534 mSkillsCount = (6>kArraySize(mSkillsCheck))?kArraySize(mSkillsCheck):6; 508 mSkillsCount = (6>kArraySize(mSkillsCheck))?kArraySize(mSkillsCheck):6;
535 509
@@ -537,11 +511,11 @@ BOOL LLPanelAvatarAdvanced::postBuild()
537 { 511 {
538 //Find the Skills checkboxes and save off thier controls 512 //Find the Skills checkboxes and save off thier controls
539 LLString ctlname = llformat("schk%d",tt); 513 LLString ctlname = llformat("schk%d",tt);
540 mSkillsCheck[tt] = LLUICtrlFactory::getCheckBoxByName(this,ctlname); 514 mSkillsCheck[tt] = getChild<LLCheckBoxCtrl>(ctlname);
541 } 515 }
542 516
543 mWantToEdit = LLUICtrlFactory::getLineEditorByName(this,"want_to_edit"); 517 mWantToEdit = getChild<LLLineEditor>("want_to_edit");
544 mSkillsEdit = LLUICtrlFactory::getLineEditorByName(this,"skills_edit"); 518 mSkillsEdit = getChild<LLLineEditor>("skills_edit");
545 childSetVisible("skills_edit",LLPanelAvatar::sAllowFirstLife); 519 childSetVisible("skills_edit",LLPanelAvatar::sAllowFirstLife);
546 childSetVisible("want_to_edit",LLPanelAvatar::sAllowFirstLife); 520 childSetVisible("want_to_edit",LLPanelAvatar::sAllowFirstLife);
547 521
@@ -717,17 +691,6 @@ void LLPanelAvatarAdvanced::enableControls(BOOL self)
717 if (mWantToEdit) mWantToEdit->setEnabled(self); 691 if (mWantToEdit) mWantToEdit->setEnabled(self);
718 if (mSkillsEdit) mSkillsEdit->setEnabled(self); 692 if (mSkillsEdit) mSkillsEdit->setEnabled(self);
719 childSetEnabled("languages_edit",self); 693 childSetEnabled("languages_edit",self);
720
721 if (!self)
722 {
723 // This is because the LLTextEditor
724 // appears to reset the read only background color when
725 // setEnable is called, for some reason
726 if (mWantToEdit) mWantToEdit->setReadOnlyBgColor(LLColor4::transparent);
727 if (mSkillsEdit) mSkillsEdit->setReadOnlyBgColor(LLColor4::transparent);
728 LLLineEditor* languages_edit = getChild<LLLineEditor>("languages_edit");
729 languages_edit->setReadOnlyBgColor(LLColor4::transparent);
730 }
731} 694}
732 695
733void LLPanelAvatarAdvanced::setWantSkills(U32 want_to_mask, const std::string& want_to_text, 696void LLPanelAvatarAdvanced::setWantSkills(U32 want_to_mask, const std::string& want_to_text,
@@ -828,7 +791,7 @@ void LLPanelAvatarClassified::refresh()
828{ 791{
829 BOOL self = (gAgent.getID() == getPanelAvatar()->getAvatarID()); 792 BOOL self = (gAgent.getID() == getPanelAvatar()->getAvatarID());
830 793
831 LLTabContainer* tabs = LLUICtrlFactory::getTabContainerByName(this,"classified tab"); 794 LLTabContainer* tabs = getChild<LLTabContainer>("classified tab");
832 795
833 S32 tab_count = tabs ? tabs->getTabCount() : 0; 796 S32 tab_count = tabs ? tabs->getTabCount() : 0;
834 797
@@ -862,7 +825,7 @@ void LLPanelAvatarClassified::refresh()
862 825
863BOOL LLPanelAvatarClassified::canClose() 826BOOL LLPanelAvatarClassified::canClose()
864{ 827{
865 LLTabContainer* tabs = LLViewerUICtrlFactory::getTabContainerByName(this, "classified tab"); 828 LLTabContainer* tabs = getChild<LLTabContainer>("classified tab");
866 for (S32 i = 0; i < tabs->getTabCount(); i++) 829 for (S32 i = 0; i < tabs->getTabCount(); i++)
867 { 830 {
868 LLPanelClassified* panel = (LLPanelClassified*)tabs->getPanelByIndex(i); 831 LLPanelClassified* panel = (LLPanelClassified*)tabs->getPanelByIndex(i);
@@ -876,7 +839,7 @@ BOOL LLPanelAvatarClassified::canClose()
876 839
877BOOL LLPanelAvatarClassified::titleIsValid() 840BOOL LLPanelAvatarClassified::titleIsValid()
878{ 841{
879 LLTabContainer* tabs = LLViewerUICtrlFactory::getTabContainerByName(this, "classified tab"); 842 LLTabContainer* tabs = getChild<LLTabContainer>("classified tab");
880 if ( tabs ) 843 if ( tabs )
881 { 844 {
882 LLPanelClassified* panel = (LLPanelClassified*)tabs->getCurrentPanel(); 845 LLPanelClassified* panel = (LLPanelClassified*)tabs->getCurrentPanel();
@@ -894,7 +857,7 @@ BOOL LLPanelAvatarClassified::titleIsValid()
894 857
895void LLPanelAvatarClassified::apply() 858void LLPanelAvatarClassified::apply()
896{ 859{
897 LLTabContainer* tabs = LLViewerUICtrlFactory::getTabContainerByName(this, "classified tab"); 860 LLTabContainer* tabs = getChild<LLTabContainer>("classified tab");
898 for (S32 i = 0; i < tabs->getTabCount(); i++) 861 for (S32 i = 0; i < tabs->getTabCount(); i++)
899 { 862 {
900 LLPanelClassified* panel = (LLPanelClassified*)tabs->getPanelByIndex(i); 863 LLPanelClassified* panel = (LLPanelClassified*)tabs->getPanelByIndex(i);
@@ -905,7 +868,7 @@ void LLPanelAvatarClassified::apply()
905 868
906void LLPanelAvatarClassified::deleteClassifiedPanels() 869void LLPanelAvatarClassified::deleteClassifiedPanels()
907{ 870{
908 LLTabContainer* tabs = LLViewerUICtrlFactory::getTabContainerByName(this,"classified tab"); 871 LLTabContainer* tabs = getChild<LLTabContainer>("classified tab");
909 if (tabs) 872 if (tabs)
910 { 873 {
911 tabs->deleteAllTabs(); 874 tabs->deleteAllTabs();
@@ -925,7 +888,7 @@ void LLPanelAvatarClassified::processAvatarClassifiedReply(LLMessageSystem* msg,
925 char classified_name[DB_PICK_NAME_SIZE]; /*Flawfinder: ignore*/ 888 char classified_name[DB_PICK_NAME_SIZE]; /*Flawfinder: ignore*/
926 LLPanelClassified* panel_classified = NULL; 889 LLPanelClassified* panel_classified = NULL;
927 890
928 LLTabContainer* tabs = LLViewerUICtrlFactory::getTabContainerByName(this,"classified tab"); 891 LLTabContainer* tabs = getChild<LLTabContainer>("classified tab");
929 892
930 // Don't remove old panels. We need to be able to process multiple 893 // Don't remove old panels. We need to be able to process multiple
931 // packets for people who have lots of classifieds. JC 894 // packets for people who have lots of classifieds. JC
@@ -983,7 +946,7 @@ void LLPanelAvatarClassified::callbackNew(S32 option, void* data)
983 { 946 {
984 LLPanelClassified* panel_classified = new LLPanelClassified(false, false); 947 LLPanelClassified* panel_classified = new LLPanelClassified(false, false);
985 panel_classified->initNewClassified(); 948 panel_classified->initNewClassified();
986 LLTabContainer* tabs = LLViewerUICtrlFactory::getTabContainerByName(self,"classified tab"); 949 LLTabContainer* tabs = self->getChild<LLTabContainer>("classified tab");
987 if(tabs) 950 if(tabs)
988 { 951 {
989 tabs->addTabPanel(panel_classified, panel_classified->getClassifiedName()); 952 tabs->addTabPanel(panel_classified, panel_classified->getClassifiedName());
@@ -998,7 +961,7 @@ void LLPanelAvatarClassified::onClickDelete(void* data)
998{ 961{
999 LLPanelAvatarClassified* self = (LLPanelAvatarClassified*)data; 962 LLPanelAvatarClassified* self = (LLPanelAvatarClassified*)data;
1000 963
1001 LLTabContainer* tabs = LLViewerUICtrlFactory::getTabContainerByName(self,"classified tab"); 964 LLTabContainer* tabs = self->getChild<LLTabContainer>("classified tab");
1002 LLPanelClassified* panel_classified = NULL; 965 LLPanelClassified* panel_classified = NULL;
1003 if(tabs) 966 if(tabs)
1004 { 967 {
@@ -1017,7 +980,7 @@ void LLPanelAvatarClassified::onClickDelete(void* data)
1017void LLPanelAvatarClassified::callbackDelete(S32 option, void* data) 980void LLPanelAvatarClassified::callbackDelete(S32 option, void* data)
1018{ 981{
1019 LLPanelAvatarClassified* self = (LLPanelAvatarClassified*)data; 982 LLPanelAvatarClassified* self = (LLPanelAvatarClassified*)data;
1020 LLTabContainer* tabs = LLViewerUICtrlFactory::getTabContainerByName(self,"classified tab"); 983 LLTabContainer* tabs = self->getChild<LLTabContainer>("classified tab");
1021 LLPanelClassified* panel_classified=NULL; 984 LLPanelClassified* panel_classified=NULL;
1022 if(tabs) 985 if(tabs)
1023 { 986 {
@@ -1062,7 +1025,7 @@ LLPanelAvatarPicks::LLPanelAvatarPicks(const std::string& name,
1062void LLPanelAvatarPicks::refresh() 1025void LLPanelAvatarPicks::refresh()
1063{ 1026{
1064 BOOL self = (gAgent.getID() == getPanelAvatar()->getAvatarID()); 1027 BOOL self = (gAgent.getID() == getPanelAvatar()->getAvatarID());
1065 LLTabContainer* tabs = LLViewerUICtrlFactory::getTabContainerByName(this,"picks tab"); 1028 LLTabContainer* tabs = getChild<LLTabContainer>("picks tab");
1066 S32 tab_count = tabs ? tabs->getTabCount() : 0; 1029 S32 tab_count = tabs ? tabs->getTabCount() : 0;
1067 childSetEnabled("New...", self && tab_count < MAX_AVATAR_PICKS); 1030 childSetEnabled("New...", self && tab_count < MAX_AVATAR_PICKS);
1068 childSetEnabled("Delete...", self && tab_count > 0); 1031 childSetEnabled("Delete...", self && tab_count > 0);
@@ -1075,7 +1038,7 @@ void LLPanelAvatarPicks::refresh()
1075 1038
1076void LLPanelAvatarPicks::deletePickPanels() 1039void LLPanelAvatarPicks::deletePickPanels()
1077{ 1040{
1078 LLTabContainer* tabs = LLUICtrlFactory::getTabContainerByName(this,"picks tab"); 1041 LLTabContainer* tabs = getChild<LLTabContainer>("picks tab");
1079 if(tabs) 1042 if(tabs)
1080 { 1043 {
1081 tabs->deleteAllTabs(); 1044 tabs->deleteAllTabs();
@@ -1094,7 +1057,7 @@ void LLPanelAvatarPicks::processAvatarPicksReply(LLMessageSystem* msg, void**)
1094 char pick_name[DB_PICK_NAME_SIZE]; /*Flawfinder: ignore*/ 1057 char pick_name[DB_PICK_NAME_SIZE]; /*Flawfinder: ignore*/
1095 LLPanelPick* panel_pick = NULL; 1058 LLPanelPick* panel_pick = NULL;
1096 1059
1097 LLTabContainer* tabs = LLUICtrlFactory::getTabContainerByName(this,"picks tab"); 1060 LLTabContainer* tabs = getChild<LLTabContainer>("picks tab");
1098 1061
1099 // Clear out all the old panels. We'll replace them with the correct 1062 // Clear out all the old panels. We'll replace them with the correct
1100 // number of new panels. 1063 // number of new panels.
@@ -1144,7 +1107,7 @@ void LLPanelAvatarPicks::onClickNew(void* data)
1144{ 1107{
1145 LLPanelAvatarPicks* self = (LLPanelAvatarPicks*)data; 1108 LLPanelAvatarPicks* self = (LLPanelAvatarPicks*)data;
1146 LLPanelPick* panel_pick = new LLPanelPick(FALSE); 1109 LLPanelPick* panel_pick = new LLPanelPick(FALSE);
1147 LLTabContainer* tabs = LLUICtrlFactory::getTabContainerByName(self,"picks tab"); 1110 LLTabContainer* tabs = self->getChild<LLTabContainer>("picks tab");
1148 1111
1149 panel_pick->initNewPick(); 1112 panel_pick->initNewPick();
1150 if(tabs) 1113 if(tabs)
@@ -1159,7 +1122,7 @@ void LLPanelAvatarPicks::onClickNew(void* data)
1159void LLPanelAvatarPicks::onClickDelete(void* data) 1122void LLPanelAvatarPicks::onClickDelete(void* data)
1160{ 1123{
1161 LLPanelAvatarPicks* self = (LLPanelAvatarPicks*)data; 1124 LLPanelAvatarPicks* self = (LLPanelAvatarPicks*)data;
1162 LLTabContainer* tabs = LLUICtrlFactory::getTabContainerByName(self,"picks tab"); 1125 LLTabContainer* tabs = self->getChild<LLTabContainer>("picks tab");
1163 LLPanelPick* panel_pick = tabs?(LLPanelPick*)tabs->getCurrentPanel():NULL; 1126 LLPanelPick* panel_pick = tabs?(LLPanelPick*)tabs->getCurrentPanel():NULL;
1164 1127
1165 if (!panel_pick) return; 1128 if (!panel_pick) return;
@@ -1177,7 +1140,7 @@ void LLPanelAvatarPicks::onClickDelete(void* data)
1177void LLPanelAvatarPicks::callbackDelete(S32 option, void* data) 1140void LLPanelAvatarPicks::callbackDelete(S32 option, void* data)
1178{ 1141{
1179 LLPanelAvatarPicks* self = (LLPanelAvatarPicks*)data; 1142 LLPanelAvatarPicks* self = (LLPanelAvatarPicks*)data;
1180 LLTabContainer* tabs = LLUICtrlFactory::getTabContainerByName(self,"picks tab"); 1143 LLTabContainer* tabs = self->getChild<LLTabContainer>("picks tab");
1181 LLPanelPick* panel_pick = tabs?(LLPanelPick*)tabs->getCurrentPanel():NULL; 1144 LLPanelPick* panel_pick = tabs?(LLPanelPick*)tabs->getCurrentPanel():NULL;
1182 LLMessageSystem* msg = gMessageSystem; 1145 LLMessageSystem* msg = gMessageSystem;
1183 1146
@@ -1257,7 +1220,7 @@ LLPanelAvatar::LLPanelAvatar(
1257 factory_map["1st Life"] = LLCallbackMap(createPanelAvatarFirstLife, this); 1220 factory_map["1st Life"] = LLCallbackMap(createPanelAvatarFirstLife, this);
1258 factory_map["My Notes"] = LLCallbackMap(createPanelAvatarNotes, this); 1221 factory_map["My Notes"] = LLCallbackMap(createPanelAvatarNotes, this);
1259 1222
1260 gUICtrlFactory->buildPanel(this, "panel_avatar.xml", &factory_map); 1223 LLUICtrlFactory::getInstance()->buildPanel(this, "panel_avatar.xml", &factory_map);
1261 1224
1262 selectTab(0); 1225 selectTab(0);
1263 1226
@@ -1266,7 +1229,7 @@ LLPanelAvatar::LLPanelAvatar(
1266 1229
1267BOOL LLPanelAvatar::postBuild(void) 1230BOOL LLPanelAvatar::postBuild(void)
1268{ 1231{
1269 mTab = LLUICtrlFactory::getTabContainerByName(this,"tab"); 1232 mTab = getChild<LLTabContainer>("tab");
1270 childSetAction("Kick",onClickKick,this); 1233 childSetAction("Kick",onClickKick,this);
1271 childSetAction("Freeze",onClickFreeze, this); 1234 childSetAction("Freeze",onClickFreeze, this);
1272 childSetAction("Unfreeze", onClickUnfreeze, this); 1235 childSetAction("Unfreeze", onClickUnfreeze, this);
@@ -1406,7 +1369,7 @@ void LLPanelAvatar::setAvatarID(const LLUUID &avatar_id, const LLString &name,
1406 mDropTarget->setAgentID(mAvatarID); 1369 mDropTarget->setAgentID(mAvatarID);
1407 } 1370 }
1408 1371
1409 LLNameEditor* name_edit = LLViewerUICtrlFactory::getNameEditorByName(this, "name"); 1372 LLNameEditor* name_edit = getChild<LLNameEditor>("name");
1410 if(name_edit) 1373 if(name_edit)
1411 { 1374 {
1412 if (name.empty()) 1375 if (name.empty())
@@ -1535,7 +1498,7 @@ void LLPanelAvatar::resetGroupList()
1535 1498
1536 if (mPanelSecondLife) 1499 if (mPanelSecondLife)
1537 { 1500 {
1538 LLScrollListCtrl* group_list = LLUICtrlFactory::getScrollListByName(mPanelSecondLife,"groups"); 1501 LLScrollListCtrl* group_list = mPanelSecondLife->getChild<LLScrollListCtrl>("groups");
1539 if (group_list) 1502 if (group_list)
1540 { 1503 {
1541 group_list->deleteAllItems(); 1504 group_list->deleteAllItems();
@@ -1584,7 +1547,7 @@ void LLPanelAvatar::onClickIM(void* userdata)
1584 gIMMgr->setFloaterOpen(TRUE); 1547 gIMMgr->setFloaterOpen(TRUE);
1585 1548
1586 std::string name; 1549 std::string name;
1587 LLNameEditor* nameedit = LLViewerUICtrlFactory::getNameEditorByName(self->mPanelSecondLife, "name"); 1550 LLNameEditor* nameedit = self->mPanelSecondLife->getChild<LLNameEditor>("name");
1588 if (nameedit) name = nameedit->getText(); 1551 if (nameedit) name = nameedit->getText();
1589 gIMMgr->addSession(name, IM_NOTHING_SPECIAL, self->mAvatarID); 1552 gIMMgr->addSession(name, IM_NOTHING_SPECIAL, self->mAvatarID);
1590} 1553}
@@ -1601,7 +1564,7 @@ void LLPanelAvatar::onClickTrack(void* userdata)
1601 if( gFloaterWorldMap ) 1564 if( gFloaterWorldMap )
1602 { 1565 {
1603 std::string name; 1566 std::string name;
1604 LLNameEditor* nameedit = LLViewerUICtrlFactory::getNameEditorByName(self->mPanelSecondLife, "name"); 1567 LLNameEditor* nameedit = self->mPanelSecondLife->getChild<LLNameEditor>("name");
1605 if (nameedit) name = nameedit->getText(); 1568 if (nameedit) name = nameedit->getText();
1606 gFloaterWorldMap->trackAvatar(self->mAvatarID, name); 1569 gFloaterWorldMap->trackAvatar(self->mAvatarID, name);
1607 LLFloaterWorldMap::show(NULL, TRUE); 1570 LLFloaterWorldMap::show(NULL, TRUE);
@@ -1613,7 +1576,7 @@ void LLPanelAvatar::onClickTrack(void* userdata)
1613void LLPanelAvatar::onClickAddFriend(void* userdata) 1576void LLPanelAvatar::onClickAddFriend(void* userdata)
1614{ 1577{
1615 LLPanelAvatar* self = (LLPanelAvatar*) userdata; 1578 LLPanelAvatar* self = (LLPanelAvatar*) userdata;
1616 LLNameEditor* name_edit = LLViewerUICtrlFactory::getNameEditorByName(self->mPanelSecondLife, "name"); 1579 LLNameEditor* name_edit = self->mPanelSecondLife->getChild<LLNameEditor>("name");
1617 if (name_edit) 1580 if (name_edit)
1618 { 1581 {
1619 LLPanelFriends::requestFriendshipDialog(self->getAvatarID(), 1582 LLPanelFriends::requestFriendshipDialog(self->getAvatarID(),
@@ -1629,21 +1592,21 @@ void LLPanelAvatar::onClickMute(void *userdata)
1629 LLPanelAvatar* self = (LLPanelAvatar*) userdata; 1592 LLPanelAvatar* self = (LLPanelAvatar*) userdata;
1630 1593
1631 LLUUID agent_id = self->getAvatarID(); 1594 LLUUID agent_id = self->getAvatarID();
1632 LLNameEditor* name_edit = LLViewerUICtrlFactory::getNameEditorByName(self->mPanelSecondLife, "name"); 1595 LLNameEditor* name_edit = self->mPanelSecondLife->getChild<LLNameEditor>("name");
1633 1596
1634 if (name_edit) 1597 if (name_edit)
1635 { 1598 {
1636 std::string agent_name = name_edit->getText(); 1599 std::string agent_name = name_edit->getText();
1637 LLFloaterMute::showInstance(); 1600 LLFloaterMute::showInstance();
1638 1601
1639 if (gMuteListp->isMuted(agent_id)) 1602 if (LLMuteList::getInstance()->isMuted(agent_id))
1640 { 1603 {
1641 gFloaterMute->selectMute(agent_id); 1604 LLFloaterMute::getInstance()->selectMute(agent_id);
1642 } 1605 }
1643 else 1606 else
1644 { 1607 {
1645 LLMute mute(agent_id, agent_name, LLMute::AGENT); 1608 LLMute mute(agent_id, agent_name, LLMute::AGENT);
1646 gMuteListp->add(mute); 1609 LLMuteList::getInstance()->add(mute);
1647 } 1610 }
1648 } 1611 }
1649} 1612}
@@ -1679,7 +1642,7 @@ void LLPanelAvatar::onClickOK(void *userdata)
1679 { 1642 {
1680 self->sendAvatarPropertiesUpdate(); 1643 self->sendAvatarPropertiesUpdate();
1681 1644
1682 LLTabContainer* tabs = LLUICtrlFactory::getTabContainerByName(self,"tab"); 1645 LLTabContainer* tabs = self->getChild<LLTabContainer>("tab");
1683 if ( tabs->getCurrentPanel() != self->mPanelClassified ) 1646 if ( tabs->getCurrentPanel() != self->mPanelClassified )
1684 { 1647 {
1685 self->mPanelClassified->apply(); 1648 self->mPanelClassified->apply();
@@ -1984,7 +1947,7 @@ void LLPanelAvatar::processAvatarGroupsReply(LLMessageSystem *msg, void**)
1984 continue; 1947 continue;
1985 } 1948 }
1986 1949
1987 LLScrollListCtrl* group_list = LLUICtrlFactory::getScrollListByName(self->mPanelSecondLife,"groups"); 1950 LLScrollListCtrl* group_list = self->mPanelSecondLife->getChild<LLScrollListCtrl>("groups");
1988// if(group_list) 1951// if(group_list)
1989// { 1952// {
1990// group_list->deleteAllItems(); 1953// group_list->deleteAllItems();
@@ -2316,7 +2279,7 @@ void LLPanelAvatar::onClickCSR(void* userdata)
2316 LLPanelAvatar* self = (LLPanelAvatar*)userdata; 2279 LLPanelAvatar* self = (LLPanelAvatar*)userdata;
2317 if (!self) return; 2280 if (!self) return;
2318 2281
2319 LLNameEditor* name_edit = LLViewerUICtrlFactory::getNameEditorByName(self, "name"); 2282 LLNameEditor* name_edit = self->getChild<LLNameEditor>("name");
2320 if (!name_edit) return; 2283 if (!name_edit) return;
2321 2284
2322 LLString name = name_edit->getText(); 2285 LLString name = name_edit->getText();
diff --git a/linden/indra/newview/llpanelclassified.cpp b/linden/indra/newview/llpanelclassified.cpp
index 45c4e38..7908ccc 100644
--- a/linden/indra/newview/llpanelclassified.cpp
+++ b/linden/indra/newview/llpanelclassified.cpp
@@ -60,7 +60,7 @@
60#include "lltexturectrl.h" 60#include "lltexturectrl.h"
61#include "lluiconstants.h" 61#include "lluiconstants.h"
62#include "llurldispatcher.h" // for classified HTML detail click teleports 62#include "llurldispatcher.h" // for classified HTML detail click teleports
63#include "llvieweruictrlfactory.h" 63#include "lluictrlfactory.h"
64#include "llviewerparcelmgr.h" 64#include "llviewerparcelmgr.h"
65#include "llviewerwindow.h" 65#include "llviewerwindow.h"
66#include "llworldmap.h" 66#include "llworldmap.h"
@@ -184,11 +184,11 @@ LLPanelClassified::LLPanelClassified(bool in_finder, bool from_search)
184 std::string classified_def_file; 184 std::string classified_def_file;
185 if (mInFinder) 185 if (mInFinder)
186 { 186 {
187 gUICtrlFactory->buildPanel(this, "panel_classified.xml"); 187 LLUICtrlFactory::getInstance()->buildPanel(this, "panel_classified.xml");
188 } 188 }
189 else 189 else
190 { 190 {
191 gUICtrlFactory->buildPanel(this, "panel_avatar_classified.xml"); 191 LLUICtrlFactory::getInstance()->buildPanel(this, "panel_avatar_classified.xml");
192 } 192 }
193 193
194 // Register dispatcher 194 // Register dispatcher
@@ -223,12 +223,12 @@ void LLPanelClassified::reset()
223 223
224BOOL LLPanelClassified::postBuild() 224BOOL LLPanelClassified::postBuild()
225{ 225{
226 mSnapshotCtrl = LLViewerUICtrlFactory::getTexturePickerByName(this, "snapshot_ctrl"); 226 mSnapshotCtrl = getChild<LLTextureCtrl>("snapshot_ctrl");
227 mSnapshotCtrl->setCommitCallback(onCommitAny); 227 mSnapshotCtrl->setCommitCallback(onCommitAny);
228 mSnapshotCtrl->setCallbackUserData(this); 228 mSnapshotCtrl->setCallbackUserData(this);
229 mSnapshotSize = mSnapshotCtrl->getRect(); 229 mSnapshotSize = mSnapshotCtrl->getRect();
230 230
231 mNameEditor = LLViewerUICtrlFactory::getLineEditorByName(this, "given_name_editor"); 231 mNameEditor = getChild<LLLineEditor>("given_name_editor");
232 mNameEditor->setMaxTextLength(DB_PARCEL_NAME_LEN); 232 mNameEditor->setMaxTextLength(DB_PARCEL_NAME_LEN);
233 mNameEditor->setCommitOnFocusLost(TRUE); 233 mNameEditor->setCommitOnFocusLost(TRUE);
234 mNameEditor->setFocusReceivedCallback(focusReceived, this); 234 mNameEditor->setFocusReceivedCallback(focusReceived, this);
@@ -236,35 +236,35 @@ BOOL LLPanelClassified::postBuild()
236 mNameEditor->setCallbackUserData(this); 236 mNameEditor->setCallbackUserData(this);
237 mNameEditor->setPrevalidate( LLLineEditor::prevalidateASCII ); 237 mNameEditor->setPrevalidate( LLLineEditor::prevalidateASCII );
238 238
239 mDescEditor = LLUICtrlFactory::getTextEditorByName(this, "desc_editor"); 239 mDescEditor = getChild<LLTextEditor>("desc_editor");
240 mDescEditor->setCommitOnFocusLost(TRUE); 240 mDescEditor->setCommitOnFocusLost(TRUE);
241 mDescEditor->setFocusReceivedCallback(focusReceived, this); 241 mDescEditor->setFocusReceivedCallback(focusReceived, this);
242 mDescEditor->setCommitCallback(onCommitAny); 242 mDescEditor->setCommitCallback(onCommitAny);
243 mDescEditor->setCallbackUserData(this); 243 mDescEditor->setCallbackUserData(this);
244 mDescEditor->setTabsToNextField(TRUE); 244 mDescEditor->setTabsToNextField(TRUE);
245 245
246 mLocationEditor = LLViewerUICtrlFactory::getLineEditorByName(this, "location_editor"); 246 mLocationEditor = getChild<LLLineEditor>("location_editor");
247 247
248 mSetBtn = LLViewerUICtrlFactory::getButtonByName(this, "set_location_btn"); 248 mSetBtn = getChild<LLButton>( "set_location_btn");
249 mSetBtn->setClickedCallback(onClickSet); 249 mSetBtn->setClickedCallback(onClickSet);
250 mSetBtn->setCallbackUserData(this); 250 mSetBtn->setCallbackUserData(this);
251 251
252 mTeleportBtn = LLViewerUICtrlFactory::getButtonByName(this, "classified_teleport_btn"); 252 mTeleportBtn = getChild<LLButton>( "classified_teleport_btn");
253 mTeleportBtn->setClickedCallback(onClickTeleport); 253 mTeleportBtn->setClickedCallback(onClickTeleport);
254 mTeleportBtn->setCallbackUserData(this); 254 mTeleportBtn->setCallbackUserData(this);
255 255
256 mMapBtn = LLViewerUICtrlFactory::getButtonByName(this, "classified_map_btn"); 256 mMapBtn = getChild<LLButton>( "classified_map_btn");
257 mMapBtn->setClickedCallback(onClickMap); 257 mMapBtn->setClickedCallback(onClickMap);
258 mMapBtn->setCallbackUserData(this); 258 mMapBtn->setCallbackUserData(this);
259 259
260 if(mInFinder) 260 if(mInFinder)
261 { 261 {
262 mProfileBtn = LLViewerUICtrlFactory::getButtonByName(this, "classified_profile_btn"); 262 mProfileBtn = getChild<LLButton>( "classified_profile_btn");
263 mProfileBtn->setClickedCallback(onClickProfile); 263 mProfileBtn->setClickedCallback(onClickProfile);
264 mProfileBtn->setCallbackUserData(this); 264 mProfileBtn->setCallbackUserData(this);
265 } 265 }
266 266
267 mCategoryCombo = LLViewerUICtrlFactory::getComboBoxByName(this, "classified_category_combo"); 267 mCategoryCombo = getChild<LLComboBox>( "classified_category_combo");
268 LLClassifiedInfo::cat_map::iterator iter; 268 LLClassifiedInfo::cat_map::iterator iter;
269 for (iter = LLClassifiedInfo::sCategories.begin(); 269 for (iter = LLClassifiedInfo::sCategories.begin();
270 iter != LLClassifiedInfo::sCategories.end(); 270 iter != LLClassifiedInfo::sCategories.end();
@@ -276,7 +276,7 @@ BOOL LLPanelClassified::postBuild()
276 mCategoryCombo->setCommitCallback(onCommitAny); 276 mCategoryCombo->setCommitCallback(onCommitAny);
277 mCategoryCombo->setCallbackUserData(this); 277 mCategoryCombo->setCallbackUserData(this);
278 278
279 mMatureCheck = LLViewerUICtrlFactory::getCheckBoxByName(this, "classified_mature_check"); 279 mMatureCheck = getChild<LLCheckBoxCtrl>( "classified_mature_check");
280 mMatureCheck->setCommitCallback(onCommitAny); 280 mMatureCheck->setCommitCallback(onCommitAny);
281 mMatureCheck->setCallbackUserData(this); 281 mMatureCheck->setCallbackUserData(this);
282 if (gAgent.isTeen()) 282 if (gAgent.isTeen())
@@ -287,18 +287,18 @@ BOOL LLPanelClassified::postBuild()
287 287
288 if (!mInFinder) 288 if (!mInFinder)
289 { 289 {
290 mAutoRenewCheck = LLUICtrlFactory::getCheckBoxByName(this, "auto_renew_check"); 290 mAutoRenewCheck = getChild<LLCheckBoxCtrl>( "auto_renew_check");
291 mAutoRenewCheck->setCommitCallback(onCommitAny); 291 mAutoRenewCheck->setCommitCallback(onCommitAny);
292 mAutoRenewCheck->setCallbackUserData(this); 292 mAutoRenewCheck->setCallbackUserData(this);
293 } 293 }
294 294
295 mUpdateBtn = LLUICtrlFactory::getButtonByName(this, "classified_update_btn"); 295 mUpdateBtn = getChild<LLButton>("classified_update_btn");
296 mUpdateBtn->setClickedCallback(onClickUpdate); 296 mUpdateBtn->setClickedCallback(onClickUpdate);
297 mUpdateBtn->setCallbackUserData(this); 297 mUpdateBtn->setCallbackUserData(this);
298 298
299 if (!mInFinder) 299 if (!mInFinder)
300 { 300 {
301 mClickThroughText = LLUICtrlFactory::getTextBoxByName(this, "click_through_text"); 301 mClickThroughText = getChild<LLTextBox>("click_through_text");
302 } 302 }
303 303
304 return TRUE; 304 return TRUE;
@@ -351,10 +351,10 @@ void LLPanelClassified::saveCallback(S32 option, void* data)
351 LLView* view = self; 351 LLView* view = self;
352 while (view) 352 while (view)
353 { 353 {
354 if (view->getWidgetType() == WIDGET_TYPE_FLOATER) 354 LLFloater* floaterp = dynamic_cast<LLFloater*>(view);
355 if (floaterp)
355 { 356 {
356 LLFloater* f = (LLFloater*)view; 357 floaterp->close();
357 f->close();
358 break; 358 break;
359 } 359 }
360 view = view->getParent(); 360 view = view->getParent();
@@ -393,7 +393,7 @@ void LLPanelClassified::initNewClassified()
393 mPaidFor = FALSE; 393 mPaidFor = FALSE;
394 394
395 // Try to fill in the current parcel 395 // Try to fill in the current parcel
396 LLParcel* parcel = gParcelMgr->getAgentParcel(); 396 LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
397 if (parcel) 397 if (parcel)
398 { 398 {
399 mNameEditor->setText(parcel->getName()); 399 mNameEditor->setText(parcel->getName());
@@ -674,17 +674,16 @@ void LLPanelClassified::processClassifiedInfoReply(LLMessageSystem *msg, void **
674 self->mUpdateBtn->setLabel(self->getString("update_txt")); 674 self->mUpdateBtn->setLabel(self->getString("update_txt"));
675 675
676 self->resetDirty(); 676 self->resetDirty();
677
678 self->resetDirty();
677 } 679 }
678} 680}
679 681
680void LLPanelClassified::draw() 682void LLPanelClassified::draw()
681{ 683{
682 if (getVisible()) 684 refresh();
683 {
684 refresh();
685 685
686 LLPanel::draw(); 686 LLPanel::draw();
687 }
688} 687}
689 688
690 689
@@ -709,12 +708,13 @@ void LLPanelClassified::refresh()
709 if(godlike) 708 if(godlike)
710 { 709 {
711 //make it smaller, so text is more legible 710 //make it smaller, so text is more legible
712 mSnapshotCtrl->setRect(LLRect(20, 375, 320, 175)); 711 mSnapshotCtrl->setOrigin(20, 175);
713 712 mSnapshotCtrl->reshape(300, 200);
714 } 713 }
715 else 714 else
716 { 715 {
717 mSnapshotCtrl->setRect(mSnapshotSize); 716 mSnapshotCtrl->setOrigin(mSnapshotSize.mLeft, mSnapshotSize.mBottom);
717 mSnapshotCtrl->reshape(mSnapshotSize.getWidth(), mSnapshotSize.getHeight());
718 //normal 718 //normal
719 } 719 }
720 mNameEditor->setEnabled(godlike); 720 mNameEditor->setEnabled(godlike);
@@ -1004,7 +1004,7 @@ LLFloaterPriceForListing::~LLFloaterPriceForListing()
1004//virtual 1004//virtual
1005BOOL LLFloaterPriceForListing::postBuild() 1005BOOL LLFloaterPriceForListing::postBuild()
1006{ 1006{
1007 LLLineEditor* edit = LLUICtrlFactory::getLineEditorByName(this, "price_edit"); 1007 LLLineEditor* edit = getChild<LLLineEditor>("price_edit");
1008 if (edit) 1008 if (edit)
1009 { 1009 {
1010 edit->setPrevalidate(LLLineEditor::prevalidateNonNegativeS32); 1010 edit->setPrevalidate(LLLineEditor::prevalidateNonNegativeS32);
@@ -1028,7 +1028,7 @@ void LLFloaterPriceForListing::show( void (*callback)(S32, LLString, void*), voi
1028 LLFloaterPriceForListing *self = new LLFloaterPriceForListing(); 1028 LLFloaterPriceForListing *self = new LLFloaterPriceForListing();
1029 1029
1030 // Builds and adds to gFloaterView 1030 // Builds and adds to gFloaterView
1031 gUICtrlFactory->buildFloater(self, "floater_price_for_listing.xml"); 1031 LLUICtrlFactory::getInstance()->buildFloater(self, "floater_price_for_listing.xml");
1032 self->center(); 1032 self->center();
1033 1033
1034 self->mCallback = callback; 1034 self->mCallback = callback;
diff --git a/linden/indra/newview/llpanelcontents.cpp b/linden/indra/newview/llpanelcontents.cpp
index 631f1a7..be4d9db 100644
--- a/linden/indra/newview/llpanelcontents.cpp
+++ b/linden/indra/newview/llpanelcontents.cpp
@@ -109,20 +109,20 @@ void LLPanelContents::getState(LLViewerObject *objectp )
109 } 109 }
110 110
111 LLUUID group_id; // used for SL-23488 111 LLUUID group_id; // used for SL-23488
112 gSelectMgr->selectGetGroup(group_id); // sets group_id as a side effect SL-23488 112 LLSelectMgr::getInstance()->selectGetGroup(group_id); // sets group_id as a side effect SL-23488
113 113
114 // BUG? Check for all objects being editable? 114 // BUG? Check for all objects being editable?
115 BOOL editable = gAgent.isGodlike() 115 BOOL editable = gAgent.isGodlike()
116 || (objectp->permModify() 116 || (objectp->permModify()
117 && ( objectp->permYouOwner() || ( !group_id.isNull() && gAgent.isInGroup(group_id) ))); // solves SL-23488 117 && ( objectp->permYouOwner() || ( !group_id.isNull() && gAgent.isInGroup(group_id) ))); // solves SL-23488
118 BOOL all_volume = gSelectMgr->selectionAllPCode( LL_PCODE_VOLUME ); 118 BOOL all_volume = LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME );
119 119
120 // Edit script button - ok if object is editable and there's an 120 // Edit script button - ok if object is editable and there's an
121 // unambiguous destination for the object. 121 // unambiguous destination for the object.
122 if( editable && 122 if( editable &&
123 all_volume && 123 all_volume &&
124 ((gSelectMgr->getSelection()->getRootObjectCount() == 1) 124 ((LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() == 1)
125 || (gSelectMgr->getSelection()->getObjectCount() == 1))) 125 || (LLSelectMgr::getInstance()->getSelection()->getObjectCount() == 1)))
126 { 126 {
127 //mBtnNewScript->setEnabled(TRUE); 127 //mBtnNewScript->setEnabled(TRUE);
128 childSetEnabled("button new script",TRUE); 128 childSetEnabled("button new script",TRUE);
@@ -138,7 +138,7 @@ void LLPanelContents::getState(LLViewerObject *objectp )
138void LLPanelContents::refresh() 138void LLPanelContents::refresh()
139{ 139{
140 const BOOL children_ok = TRUE; 140 const BOOL children_ok = TRUE;
141 LLViewerObject* object = gSelectMgr->getSelection()->getFirstRootObject(children_ok); 141 LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getFirstRootObject(children_ok);
142 142
143 getState(object); 143 getState(object);
144 if (mPanelInventory) 144 if (mPanelInventory)
@@ -157,7 +157,7 @@ void LLPanelContents::refresh()
157void LLPanelContents::onClickNewScript(void *userdata) 157void LLPanelContents::onClickNewScript(void *userdata)
158{ 158{
159 const BOOL children_ok = TRUE; 159 const BOOL children_ok = TRUE;
160 LLViewerObject* object = gSelectMgr->getSelection()->getFirstRootObject(children_ok); 160 LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getFirstRootObject(children_ok);
161 if(object) 161 if(object)
162 { 162 {
163 LLPermissions perm; 163 LLPermissions perm;
diff --git a/linden/indra/newview/llpaneldebug.cpp b/linden/indra/newview/llpaneldebug.cpp
index 288302b..dce0235 100644
--- a/linden/indra/newview/llpaneldebug.cpp
+++ b/linden/indra/newview/llpaneldebug.cpp
@@ -77,7 +77,7 @@ LLPanelDebug::LLPanelDebug(const std::string& name, const LLRect& rect)
77 LLCheckboxCtrl* check = NULL; 77 LLCheckboxCtrl* check = NULL;
78 LLSliderCtrl *sliderctrl = NULL; 78 LLSliderCtrl *sliderctrl = NULL;
79 79
80 const LLFontGL* font = gResMgr->getRes( LLFONT_SANSSERIF_SMALL ); 80 const LLFontGL* font = LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF_SMALL );
81 81
82 const S32 HPAD = 10; 82 const S32 HPAD = 10;
83 const S32 VPAD = 4; 83 const S32 VPAD = 4;
diff --git a/linden/indra/newview/llpaneldirbrowser.cpp b/linden/indra/newview/llpaneldirbrowser.cpp
index 3ce533c..0d359d7 100644
--- a/linden/indra/newview/llpaneldirbrowser.cpp
+++ b/linden/indra/newview/llpaneldirbrowser.cpp
@@ -67,7 +67,7 @@
67#include "llviewercontrol.h" 67#include "llviewercontrol.h"
68#include "llviewerimagelist.h" 68#include "llviewerimagelist.h"
69#include "llviewermessage.h" 69#include "llviewermessage.h"
70#include "llvieweruictrlfactory.h" 70#include "lluictrlfactory.h"
71 71
72#include <string> 72#include <string>
73#include <sstream> 73#include <sstream>
@@ -128,7 +128,7 @@ void LLPanelDirBrowser::draw()
128 // item. Unfortunately, we don't know when the find is actually done, 128 // item. Unfortunately, we don't know when the find is actually done,
129 // so only do this if it's been some time since the last packet of 129 // so only do this if it's been some time since the last packet of
130 // results was received. 130 // results was received.
131 if (getVisible() && mLastResultTimer.getElapsedTimeF32() > 0.5) 131 if (mLastResultTimer.getElapsedTimeF32() > 0.5)
132 { 132 {
133 if (!mDidAutoSelect && 133 if (!mDidAutoSelect &&
134 !childHasFocus("results")) 134 !childHasFocus("results"))
@@ -182,8 +182,7 @@ void LLPanelDirBrowser::resetSearchStart()
182// protected 182// protected
183void LLPanelDirBrowser::updateResultCount() 183void LLPanelDirBrowser::updateResultCount()
184{ 184{
185 LLScrollListCtrl* list = gUICtrlFactory->getScrollListByName(this, "results"); 185 LLScrollListCtrl* list = getChild<LLScrollListCtrl>("results");
186 if (!list) return;
187 186
188 S32 result_count = list->getItemCount(); 187 S32 result_count = list->getItemCount();
189 LLString result_text; 188 LLString result_text;
@@ -496,13 +495,11 @@ void LLPanelDirBrowser::processDirPeopleReply(LLMessageSystem *msg, void**)
496 LLSD row; 495 LLSD row;
497 row["id"] = agent_id; 496 row["id"] = agent_id;
498 497
499 LLUUID image_id;
500 // We don't show online status in the finder anymore, 498 // We don't show online status in the finder anymore,
501 // so just use the 'offline' icon as the generic 'person' icon 499 // so just use the 'offline' icon as the generic 'person' icon
502 image_id.set( gViewerArt.getString("icon_avatar_offline.tga") );
503 row["columns"][0]["column"] = "icon"; 500 row["columns"][0]["column"] = "icon";
504 row["columns"][0]["type"] = "icon"; 501 row["columns"][0]["type"] = "icon";
505 row["columns"][0]["value"] = image_id; 502 row["columns"][0]["value"] = "icon_avatar_offline.tga";
506 503
507 content["type"] = AVATAR_CODE; 504 content["type"] = AVATAR_CODE;
508 505
@@ -655,11 +652,9 @@ void LLPanelDirBrowser::processDirPopularReply(LLMessageSystem *msg, void**)
655 LLSD row; 652 LLSD row;
656 row["id"] = parcel_id; 653 row["id"] = parcel_id;
657 654
658 LLUUID image_id;
659 image_id.set( gViewerArt.getString("icon_popular.tga") );
660 row["columns"][0]["column"] = "icon"; 655 row["columns"][0]["column"] = "icon";
661 row["columns"][0]["type"] = "icon"; 656 row["columns"][0]["type"] = "icon";
662 row["columns"][0]["value"] = image_id; 657 row["columns"][0]["value"] = "icon_popular.tga";
663 658
664 row["columns"][1]["column"] = "name"; 659 row["columns"][1]["column"] = "name";
665 row["columns"][1]["value"] = name; 660 row["columns"][1]["value"] = name;
@@ -759,17 +754,15 @@ void LLPanelDirBrowser::processDirEventsReply(LLMessageSystem* msg, void**)
759 LLUUID image_id; 754 LLUUID image_id;
760 if (event_flags & EVENT_FLAG_MATURE) 755 if (event_flags & EVENT_FLAG_MATURE)
761 { 756 {
762 image_id.set( gViewerArt.getString("icon_event_mature.tga") );
763 row["columns"][0]["column"] = "icon"; 757 row["columns"][0]["column"] = "icon";
764 row["columns"][0]["type"] = "icon"; 758 row["columns"][0]["type"] = "icon";
765 row["columns"][0]["value"] = image_id; 759 row["columns"][0]["value"] = "icon_event_mature.tga";
766 } 760 }
767 else 761 else
768 { 762 {
769 image_id.set( gViewerArt.getString("icon_event.tga") );
770 row["columns"][0]["column"] = "icon"; 763 row["columns"][0]["column"] = "icon";
771 row["columns"][0]["type"] = "icon"; 764 row["columns"][0]["type"] = "icon";
772 row["columns"][0]["value"] = image_id; 765 row["columns"][0]["value"] = "icon_event.tga";
773 } 766 }
774 767
775 row["columns"][1]["column"] = "name"; 768 row["columns"][1]["column"] = "name";
@@ -855,10 +848,9 @@ void LLPanelDirBrowser::processDirGroupsReply(LLMessageSystem* msg, void**)
855 row["id"] = group_id; 848 row["id"] = group_id;
856 849
857 LLUUID image_id; 850 LLUUID image_id;
858 image_id.set( gViewerArt.getString("icon_group.tga") );
859 row["columns"][0]["column"] = "icon"; 851 row["columns"][0]["column"] = "icon";
860 row["columns"][0]["type"] = "icon"; 852 row["columns"][0]["type"] = "icon";
861 row["columns"][0]["value"] = image_id; 853 row["columns"][0]["value"] = "icon_group.tga";
862 854
863 row["columns"][1]["column"] = "name"; 855 row["columns"][1]["column"] = "name";
864 row["columns"][1]["value"] = group_name; 856 row["columns"][1]["value"] = group_name;
@@ -1088,11 +1080,9 @@ void LLPanelDirBrowser::addClassified(LLCtrlListInterface *list, const LLUUID& p
1088 LLSD row; 1080 LLSD row;
1089 row["id"] = pick_id; 1081 row["id"] = pick_id;
1090 1082
1091 LLUUID image_id;
1092 image_id.set( gViewerArt.getString("icon_top_pick.tga") );
1093 row["columns"][0]["column"] = "icon"; 1083 row["columns"][0]["column"] = "icon";
1094 row["columns"][0]["type"] = "icon"; 1084 row["columns"][0]["type"] = "icon";
1095 row["columns"][0]["value"] = image_id; 1085 row["columns"][0]["value"] = "icon_top_pick.tga";
1096 1086
1097 row["columns"][1]["column"] = "name"; 1087 row["columns"][1]["column"] = "name";
1098 row["columns"][1]["value"] = name; 1088 row["columns"][1]["value"] = name;
@@ -1114,28 +1104,25 @@ LLSD LLPanelDirBrowser::createLandSale(const LLUUID& parcel_id, BOOL is_auction,
1114 // Icon and type 1104 // Icon and type
1115 if(is_auction) 1105 if(is_auction)
1116 { 1106 {
1117 image_id.set( gViewerArt.getString("icon_auction.tga") );
1118 row["columns"][0]["column"] = "icon"; 1107 row["columns"][0]["column"] = "icon";
1119 row["columns"][0]["type"] = "icon"; 1108 row["columns"][0]["type"] = "icon";
1120 row["columns"][0]["value"] = image_id; 1109 row["columns"][0]["value"] = "icon_auction.tga";
1121 1110
1122 *type = AUCTION_CODE; 1111 *type = AUCTION_CODE;
1123 } 1112 }
1124 else if (is_for_sale) 1113 else if (is_for_sale)
1125 { 1114 {
1126 image_id.set( gViewerArt.getString("icon_for_sale.tga") );
1127 row["columns"][0]["column"] = "icon"; 1115 row["columns"][0]["column"] = "icon";
1128 row["columns"][0]["type"] = "icon"; 1116 row["columns"][0]["type"] = "icon";
1129 row["columns"][0]["value"] = image_id; 1117 row["columns"][0]["value"] = "icon_for_sale.tga";
1130 1118
1131 *type = FOR_SALE_CODE; 1119 *type = FOR_SALE_CODE;
1132 } 1120 }
1133 else 1121 else
1134 { 1122 {
1135 image_id.set( gViewerArt.getString("icon_place.tga") );
1136 row["columns"][0]["column"] = "icon"; 1123 row["columns"][0]["column"] = "icon";
1137 row["columns"][0]["type"] = "icon"; 1124 row["columns"][0]["type"] = "icon";
1138 row["columns"][0]["value"] = image_id; 1125 row["columns"][0]["value"] = "icon_place.tga";
1139 1126
1140 *type = PLACE_CODE; 1127 *type = PLACE_CODE;
1141 } 1128 }
@@ -1175,35 +1162,9 @@ void LLPanelDirBrowser::newClassified()
1175 } 1162 }
1176} 1163}
1177 1164
1178void LLPanelDirBrowser::renameClassified(const LLUUID& classified_id, const char* name)
1179{
1180 // TomY What, really?
1181 /*LLScrollListItem* row;
1182 for (row = mResultsList->getFirstData(); row; row = mResultsList->getNextData())
1183 {
1184 if (row->getUUID() == classified_id)
1185 {
1186 const LLScrollListCell* column;
1187 LLScrollListText* text;
1188
1189 // icon
1190 // type
1191 column = row->getColumn(2); // name (visible)
1192 text = (LLScrollListText*)column;
1193 text->setText(name);
1194
1195 column = row->getColumn(3); // name (invisible)
1196 text = (LLScrollListText*)column;
1197 text->setText(name);
1198 }
1199 }*/
1200}
1201
1202
1203void LLPanelDirBrowser::setupNewSearch() 1165void LLPanelDirBrowser::setupNewSearch()
1204{ 1166{
1205 LLScrollListCtrl* list = gUICtrlFactory->getScrollListByName(this, "results"); 1167 LLScrollListCtrl* list = getChild<LLScrollListCtrl>("results");
1206 if (!list) return;
1207 1168
1208 gDirBrowserInstances.removeData(mSearchID); 1169 gDirBrowserInstances.removeData(mSearchID);
1209 // Make a new query ID 1170 // Make a new query ID
@@ -1263,8 +1224,7 @@ void LLPanelDirBrowser::sendDirFindQuery(
1263 1224
1264void LLPanelDirBrowser::addHelpText(const char* text) 1225void LLPanelDirBrowser::addHelpText(const char* text)
1265{ 1226{
1266 LLScrollListCtrl* list = gUICtrlFactory->getScrollListByName(this, "results"); 1227 LLScrollListCtrl* list = getChild<LLScrollListCtrl>("results");
1267 if (!list) return;
1268 1228
1269 list->addCommentText(text); 1229 list->addCommentText(text);
1270 childDisable("results"); 1230 childDisable("results");
diff --git a/linden/indra/newview/llpaneldirbrowser.h b/linden/indra/newview/llpaneldirbrowser.h
index fd32e5a..1f0e879 100644
--- a/linden/indra/newview/llpaneldirbrowser.h
+++ b/linden/indra/newview/llpaneldirbrowser.h
@@ -105,8 +105,6 @@ public:
105 105
106 void showEvent(const U32 event_id); 106 void showEvent(const U32 event_id);
107 107
108 void renameClassified(const LLUUID& classified_id, const char* name);
109
110 // Prev/Next page buttons 108 // Prev/Next page buttons
111 static void onClickNext(void* data); 109 static void onClickNext(void* data);
112 static void onClickPrev(void* data); 110 static void onClickPrev(void* data);
diff --git a/linden/indra/newview/llpaneldirclassified.cpp b/linden/indra/newview/llpaneldirclassified.cpp
index 52b10b2..7edf78d 100644
--- a/linden/indra/newview/llpaneldirclassified.cpp
+++ b/linden/indra/newview/llpaneldirclassified.cpp
@@ -58,7 +58,7 @@
58#include "llpaneldirbrowser.h" 58#include "llpaneldirbrowser.h"
59#include "lltextbox.h" 59#include "lltextbox.h"
60#include "llviewermessage.h" 60#include "llviewermessage.h"
61#include "llvieweruictrlfactory.h" 61#include "lluictrlfactory.h"
62#include "llworldmap.h" 62#include "llworldmap.h"
63 63
64// 64//
diff --git a/linden/indra/newview/llpaneldirfind.cpp b/linden/indra/newview/llpaneldirfind.cpp
index 294c535..dcda770 100644
--- a/linden/indra/newview/llpaneldirfind.cpp
+++ b/linden/indra/newview/llpaneldirfind.cpp
@@ -57,7 +57,7 @@
57#include "lldir.h" 57#include "lldir.h"
58#include "llviewercontrol.h" 58#include "llviewercontrol.h"
59#include "llviewerregion.h" // for region name for search urls 59#include "llviewerregion.h" // for region name for search urls
60#include "llvieweruictrlfactory.h" 60#include "lluictrlfactory.h"
61#include "llfloaterdirectory.h" 61#include "llfloaterdirectory.h"
62#include "llpaneldirbrowser.h" 62#include "llpaneldirbrowser.h"
63 63
@@ -125,7 +125,7 @@ BOOL LLPanelDirFindAll::postBuild()
125 childSetValue("mature_check", false); 125 childSetValue("mature_check", false);
126 } 126 }
127 127
128 mWebBrowser = LLViewerUICtrlFactory::getWebBrowserByName(this, "find_browser"); 128 mWebBrowser = getChild<LLWebBrowserCtrl>("find_browser");
129 if (mWebBrowser) 129 if (mWebBrowser)
130 { 130 {
131 // new pages appear in same window as the results page now 131 // new pages appear in same window as the results page now
diff --git a/linden/indra/newview/llpaneldisplay.cpp b/linden/indra/newview/llpaneldisplay.cpp
index 5bc1f7e..e5072c5 100644
--- a/linden/indra/newview/llpaneldisplay.cpp
+++ b/linden/indra/newview/llpaneldisplay.cpp
@@ -53,6 +53,7 @@
53#include "llspinctrl.h" 53#include "llspinctrl.h"
54#include "llstartup.h" 54#include "llstartup.h"
55#include "lltextbox.h" 55#include "lltextbox.h"
56#include "lltexteditor.h"
56#include "llui.h" 57#include "llui.h"
57#include "llviewercamera.h" 58#include "llviewercamera.h"
58#include "llviewerimage.h" 59#include "llviewerimage.h"
@@ -67,7 +68,7 @@
67#include "llwindow.h" 68#include "llwindow.h"
68#include "llworld.h" 69#include "llworld.h"
69#include "pipeline.h" 70#include "pipeline.h"
70#include "llvieweruictrlfactory.h" 71#include "lluictrlfactory.h"
71#include "llfeaturemanager.h" 72#include "llfeaturemanager.h"
72#include "llglslshader.h" 73#include "llglslshader.h"
73#include "llfloaterhardwaresettings.h" 74#include "llfloaterhardwaresettings.h"
@@ -88,63 +89,11 @@ const S32 ASPECT_RATIO_STR_LEN = 100;
88 89
89LLPanelDisplay::LLPanelDisplay() 90LLPanelDisplay::LLPanelDisplay()
90{ 91{
91 gUICtrlFactory->buildPanel(this, "panel_preferences_graphics1.xml"); 92 LLUICtrlFactory::getInstance()->buildPanel(this, "panel_preferences_graphics1.xml");
92} 93}
93 94
94BOOL LLPanelDisplay::postBuild() 95BOOL LLPanelDisplay::postBuild()
95{ 96{
96 requires("windowed mode", WIDGET_TYPE_CHECKBOX);
97 requires("fullscreen combo", WIDGET_TYPE_COMBO_BOX);
98 requires("aspect_ratio", WIDGET_TYPE_COMBO_BOX);
99 requires("aspect_auto_detect", WIDGET_TYPE_CHECKBOX);
100 requires("AspectRatioLabel1", WIDGET_TYPE_TEXT_BOX);
101 requires("DisplayResLabel", WIDGET_TYPE_TEXT_BOX);
102 requires("FullScreenInfo", WIDGET_TYPE_TEXT_EDITOR);
103
104 requires("QualityPerformanceSelection", WIDGET_TYPE_SLIDER);
105 requires("CustomSettings", WIDGET_TYPE_CHECKBOX);
106
107 requires("GraphicsHardwareButton", WIDGET_TYPE_BUTTON);
108 requires("Defaults", WIDGET_TYPE_BUTTON);
109
110 requires("BumpShiny", WIDGET_TYPE_CHECKBOX);
111 requires("BasicShaders", WIDGET_TYPE_CHECKBOX);
112 requires("AvatarVertexProgram", WIDGET_TYPE_CHECKBOX);
113 requires("WindLightUseAtmosShaders", WIDGET_TYPE_CHECKBOX);
114 requires("Reflections", WIDGET_TYPE_CHECKBOX);
115
116 requires("AvatarImpostors", WIDGET_TYPE_CHECKBOX);
117 requires("AvatarCloth", WIDGET_TYPE_CHECKBOX);
118
119 requires("DrawDistance", WIDGET_TYPE_SLIDER);
120 requires("DrawDistanceMeterText1", WIDGET_TYPE_TEXT_BOX);
121 requires("DrawDistanceMeterText2", WIDGET_TYPE_TEXT_BOX);
122
123 requires("ObjectMeshDetail", WIDGET_TYPE_SLIDER);
124 requires("FlexibleMeshDetail", WIDGET_TYPE_SLIDER);
125 requires("TreeMeshDetail", WIDGET_TYPE_SLIDER);
126 requires("AvatarMeshDetail", WIDGET_TYPE_SLIDER);
127 requires("TerrainMeshDetail", WIDGET_TYPE_SLIDER);
128 requires("SkyMeshDetail", WIDGET_TYPE_SLIDER);
129 requires("MaxParticleCount", WIDGET_TYPE_SLIDER);
130 requires("RenderPostProcess", WIDGET_TYPE_SLIDER);
131
132 requires("ObjectMeshDetailText", WIDGET_TYPE_TEXT_BOX);
133 requires("FlexibleMeshDetailText", WIDGET_TYPE_TEXT_BOX);
134 requires("TreeMeshDetailText", WIDGET_TYPE_TEXT_BOX);
135 requires("AvatarMeshDetailText", WIDGET_TYPE_TEXT_BOX);
136 requires("TerrainMeshDetailText", WIDGET_TYPE_TEXT_BOX);
137 requires("SkyMeshDetailText", WIDGET_TYPE_TEXT_BOX);
138 requires("PostProcessText", WIDGET_TYPE_TEXT_BOX);
139
140 requires("LightingDetailRadio", WIDGET_TYPE_RADIO_GROUP);
141 requires("TerrainDetailRadio", WIDGET_TYPE_RADIO_GROUP);
142
143 if (!checkRequirements())
144 {
145 return FALSE;
146 }
147
148 // return to default values 97 // return to default values
149 childSetAction("Defaults", setHardwareDefaults, NULL); 98 childSetAction("Defaults", setHardwareDefaults, NULL);
150 99
@@ -159,20 +108,20 @@ BOOL LLPanelDisplay::postBuild()
159 108
160 // radio set for fullscreen size 109 // radio set for fullscreen size
161 110
162 mCtrlWindowed = LLUICtrlFactory::getCheckBoxByName(this, "windowed mode"); 111 mCtrlWindowed = getChild<LLCheckBoxCtrl>( "windowed mode");
163 mCtrlWindowed->setCommitCallback(onCommitWindowedMode); 112 mCtrlWindowed->setCommitCallback(onCommitWindowedMode);
164 mCtrlWindowed->setCallbackUserData(this); 113 mCtrlWindowed->setCallbackUserData(this);
165 114
166 mAspectRatioLabel1 = LLUICtrlFactory::getTextBoxByName(this, "AspectRatioLabel1"); 115 mAspectRatioLabel1 = getChild<LLTextBox>("AspectRatioLabel1");
167 mFullScreenInfo = LLUICtrlFactory::getTextEditorByName(this, "FullScreenInfo"); 116 mFullScreenInfo = getChild<LLTextEditor>("FullScreenInfo");
168 mDisplayResLabel = LLUICtrlFactory::getTextBoxByName(this, "DisplayResLabel"); 117 mDisplayResLabel = getChild<LLTextBox>("DisplayResLabel");
169 118
170 S32 num_resolutions = 0; 119 S32 num_resolutions = 0;
171 LLWindow::LLWindowResolution* supported_resolutions = gViewerWindow->getWindow()->getSupportedResolutions(num_resolutions); 120 LLWindow::LLWindowResolution* supported_resolutions = gViewerWindow->getWindow()->getSupportedResolutions(num_resolutions);
172 121
173 S32 fullscreen_mode = num_resolutions - 1; 122 S32 fullscreen_mode = num_resolutions - 1;
174 123
175 mCtrlFullScreen = LLUICtrlFactory::getComboBoxByName(this, "fullscreen combo"); 124 mCtrlFullScreen = getChild<LLComboBox>( "fullscreen combo");
176 125
177 LLUIString resolution_label = getUIString("resolution_format"); 126 LLUIString resolution_label = getUIString("resolution_format");
178 127
@@ -239,7 +188,7 @@ BOOL LLPanelDisplay::postBuild()
239 aspect_ratio_text = llformat("%.3f", mAspectRatio); 188 aspect_ratio_text = llformat("%.3f", mAspectRatio);
240 } 189 }
241 190
242 mCtrlAspectRatio = LLUICtrlFactory::getComboBoxByName(this, "aspect_ratio"); 191 mCtrlAspectRatio = getChild<LLComboBox>( "aspect_ratio");
243 mCtrlAspectRatio->setTextEntryCallback(onKeystrokeAspectRatio); 192 mCtrlAspectRatio->setTextEntryCallback(onKeystrokeAspectRatio);
244 mCtrlAspectRatio->setCommitCallback(onSelectAspectRatio); 193 mCtrlAspectRatio->setCommitCallback(onSelectAspectRatio);
245 mCtrlAspectRatio->setCallbackUserData(this); 194 mCtrlAspectRatio->setCallbackUserData(this);
@@ -247,125 +196,123 @@ BOOL LLPanelDisplay::postBuild()
247 mCtrlAspectRatio->add(aspect_ratio_text, &mAspectRatio, ADD_TOP); 196 mCtrlAspectRatio->add(aspect_ratio_text, &mAspectRatio, ADD_TOP);
248 mCtrlAspectRatio->setCurrentByIndex(0); 197 mCtrlAspectRatio->setCurrentByIndex(0);
249 198
250 mCtrlAutoDetectAspect = LLUICtrlFactory::getCheckBoxByName(this, "aspect_auto_detect"); 199 mCtrlAutoDetectAspect = getChild<LLCheckBoxCtrl>( "aspect_auto_detect");
251 mCtrlAutoDetectAspect->setCommitCallback(onCommitAutoDetectAspect); 200 mCtrlAutoDetectAspect->setCommitCallback(onCommitAutoDetectAspect);
252 mCtrlAutoDetectAspect->setCallbackUserData(this); 201 mCtrlAutoDetectAspect->setCallbackUserData(this);
253 202
254 // radio performance box 203 // radio performance box
255 mCtrlSliderQuality = LLUICtrlFactory::getSliderByName(this, 204 mCtrlSliderQuality = getChild<LLSliderCtrl>("QualityPerformanceSelection");
256 "QualityPerformanceSelection");
257 mCtrlSliderQuality->setSliderMouseUpCallback(onChangeQuality); 205 mCtrlSliderQuality->setSliderMouseUpCallback(onChangeQuality);
258 mCtrlSliderQuality->setCallbackUserData(this); 206 mCtrlSliderQuality->setCallbackUserData(this);
259 207
260 mCtrlCustomSettings = LLUICtrlFactory::getCheckBoxByName(this, "CustomSettings"); 208 mCtrlCustomSettings = getChild<LLCheckBoxCtrl>("CustomSettings");
261 mCtrlCustomSettings->setCommitCallback(onChangeCustom); 209 mCtrlCustomSettings->setCommitCallback(onChangeCustom);
262 mCtrlCustomSettings->setCallbackUserData(this); 210 mCtrlCustomSettings->setCallbackUserData(this);
263 211
264 mGraphicsBorder = static_cast<LLViewBorder*>(getChildByName("GraphicsBorder")); 212 mGraphicsBorder = getChild<LLViewBorder>("GraphicsBorder");
265 llassert(mGraphicsBorder != NULL);
266 213
267 //---------------------------------------------------------------------------- 214 //----------------------------------------------------------------------------
268 // Enable Bump/Shiny 215 // Enable Bump/Shiny
269 mCtrlBumpShiny = LLUICtrlFactory::getCheckBoxByName(this, "BumpShiny"); 216 mCtrlBumpShiny = getChild<LLCheckBoxCtrl>("BumpShiny");
270 217
271 //---------------------------------------------------------------------------- 218 //----------------------------------------------------------------------------
272 // Enable Reflections 219 // Enable Reflections
273 mCtrlReflections = LLUICtrlFactory::getCheckBoxByName(this, "Reflections"); 220 mCtrlReflections = getChild<LLCheckBoxCtrl>("Reflections");
274 mCtrlReflections->setCommitCallback(&LLPanelDisplay::onVertexShaderEnable); 221 mCtrlReflections->setCommitCallback(&LLPanelDisplay::onVertexShaderEnable);
275 mCtrlReflections->setCallbackUserData(this); 222 mCtrlReflections->setCallbackUserData(this);
276 mRadioReflectionDetail = LLUICtrlFactory::getRadioGroupByName(this, "ReflectionDetailRadio"); 223 mRadioReflectionDetail = getChild<LLRadioGroup>("ReflectionDetailRadio");
277 224
278 // WindLight 225 // WindLight
279 mCtrlWindLight = LLUICtrlFactory::getCheckBoxByName(this, "WindLightUseAtmosShaders"); 226 mCtrlWindLight = getChild<LLCheckBoxCtrl>("WindLightUseAtmosShaders");
280 mCtrlWindLight->setCommitCallback(&LLPanelDisplay::onVertexShaderEnable); 227 mCtrlWindLight->setCommitCallback(&LLPanelDisplay::onVertexShaderEnable);
281 mCtrlWindLight->setCallbackUserData(this); 228 mCtrlWindLight->setCallbackUserData(this);
282 229
283 //---------------------------------------------------------------------------- 230 //----------------------------------------------------------------------------
284 // Enable Avatar Shaders 231 // Enable Avatar Shaders
285 mCtrlAvatarVP = LLUICtrlFactory::getCheckBoxByName(this, "AvatarVertexProgram"); 232 mCtrlAvatarVP = getChild<LLCheckBoxCtrl>("AvatarVertexProgram");
286 mCtrlAvatarVP->setCommitCallback(&LLPanelDisplay::onVertexShaderEnable); 233 mCtrlAvatarVP->setCommitCallback(&LLPanelDisplay::onVertexShaderEnable);
287 mCtrlAvatarVP->setCallbackUserData(this); 234 mCtrlAvatarVP->setCallbackUserData(this);
288 235
289 //---------------------------------------------------------------------------- 236 //----------------------------------------------------------------------------
290 // Avatar Render Mode 237 // Avatar Render Mode
291 mCtrlAvatarCloth = LLUICtrlFactory::getCheckBoxByName(this, "AvatarCloth"); 238 mCtrlAvatarCloth = getChild<LLCheckBoxCtrl>("AvatarCloth");
292 mCtrlAvatarImpostors = LLUICtrlFactory::getCheckBoxByName(this, "AvatarImpostors"); 239 mCtrlAvatarImpostors = getChild<LLCheckBoxCtrl>("AvatarImpostors");
293 240
294 //---------------------------------------------------------------------------- 241 //----------------------------------------------------------------------------
295 // radio set for lighting detail 242 // radio set for lighting detail
296 mRadioLightingDetail2 = LLUICtrlFactory::getRadioGroupByName(this, "LightingDetailRadio"); 243 mRadioLightingDetail2 = getChild<LLRadioGroup>("LightingDetailRadio");
297 244
298 //---------------------------------------------------------------------------- 245 //----------------------------------------------------------------------------
299 // radio set for terrain detail mode 246 // radio set for terrain detail mode
300 mRadioTerrainDetail = LLUICtrlFactory::getRadioGroupByName(this, "TerrainDetailRadio"); 247 mRadioTerrainDetail = getChild<LLRadioGroup>("TerrainDetailRadio");
301 248
302 //---------------------------------------------------------------------------- 249 //----------------------------------------------------------------------------
303 // Global Shader Enable 250 // Global Shader Enable
304 mCtrlShaderEnable = LLUICtrlFactory::getCheckBoxByName(this, "BasicShaders"); 251 mCtrlShaderEnable = getChild<LLCheckBoxCtrl>("BasicShaders");
305 mCtrlShaderEnable->setCommitCallback(&LLPanelDisplay::onVertexShaderEnable); 252 mCtrlShaderEnable->setCommitCallback(&LLPanelDisplay::onVertexShaderEnable);
306 mCtrlShaderEnable->setCallbackUserData(this); 253 mCtrlShaderEnable->setCallbackUserData(this);
307 254
308 //============================================================================ 255 //============================================================================
309 256
310 // Object detail slider 257 // Object detail slider
311 mCtrlDrawDistance = LLUICtrlFactory::getSliderByName(this, "DrawDistance"); 258 mCtrlDrawDistance = getChild<LLSliderCtrl>("DrawDistance");
312 mDrawDistanceMeterText1 = LLUICtrlFactory::getTextBoxByName(this, "DrawDistanceMeterText1"); 259 mDrawDistanceMeterText1 = getChild<LLTextBox>("DrawDistanceMeterText1");
313 mDrawDistanceMeterText2 = LLUICtrlFactory::getTextBoxByName(this, "DrawDistanceMeterText2"); 260 mDrawDistanceMeterText2 = getChild<LLTextBox>("DrawDistanceMeterText2");
314 mCtrlDrawDistance->setCommitCallback(&LLPanelDisplay::updateMeterText); 261 mCtrlDrawDistance->setCommitCallback(&LLPanelDisplay::updateMeterText);
315 mCtrlDrawDistance->setCallbackUserData(this); 262 mCtrlDrawDistance->setCallbackUserData(this);
316 263
317 // Object detail slider 264 // Object detail slider
318 mCtrlLODFactor = LLUICtrlFactory::getSliderByName(this, "ObjectMeshDetail"); 265 mCtrlLODFactor = getChild<LLSliderCtrl>("ObjectMeshDetail");
319 mLODFactorText = LLUICtrlFactory::getTextBoxByName(this, "ObjectMeshDetailText"); 266 mLODFactorText = getChild<LLTextBox>("ObjectMeshDetailText");
320 mCtrlLODFactor->setCommitCallback(&LLPanelDisplay::updateSliderText); 267 mCtrlLODFactor->setCommitCallback(&LLPanelDisplay::updateSliderText);
321 mCtrlLODFactor->setCallbackUserData(mLODFactorText); 268 mCtrlLODFactor->setCallbackUserData(mLODFactorText);
322 269
323 // Flex object detail slider 270 // Flex object detail slider
324 mCtrlFlexFactor = LLUICtrlFactory::getSliderByName(this, "FlexibleMeshDetail"); 271 mCtrlFlexFactor = getChild<LLSliderCtrl>("FlexibleMeshDetail");
325 mFlexFactorText = LLUICtrlFactory::getTextBoxByName(this, "FlexibleMeshDetailText"); 272 mFlexFactorText = getChild<LLTextBox>("FlexibleMeshDetailText");
326 mCtrlFlexFactor->setCommitCallback(&LLPanelDisplay::updateSliderText); 273 mCtrlFlexFactor->setCommitCallback(&LLPanelDisplay::updateSliderText);
327 mCtrlFlexFactor->setCallbackUserData(mFlexFactorText); 274 mCtrlFlexFactor->setCallbackUserData(mFlexFactorText);
328 275
329 // Tree detail slider 276 // Tree detail slider
330 mCtrlTreeFactor = LLUICtrlFactory::getSliderByName(this, "TreeMeshDetail"); 277 mCtrlTreeFactor = getChild<LLSliderCtrl>("TreeMeshDetail");
331 mTreeFactorText = LLUICtrlFactory::getTextBoxByName(this, "TreeMeshDetailText"); 278 mTreeFactorText = getChild<LLTextBox>("TreeMeshDetailText");
332 mCtrlTreeFactor->setCommitCallback(&LLPanelDisplay::updateSliderText); 279 mCtrlTreeFactor->setCommitCallback(&LLPanelDisplay::updateSliderText);
333 mCtrlTreeFactor->setCallbackUserData(mTreeFactorText); 280 mCtrlTreeFactor->setCallbackUserData(mTreeFactorText);
334 281
335 // Avatar detail slider 282 // Avatar detail slider
336 mCtrlAvatarFactor = LLUICtrlFactory::getSliderByName(this, "AvatarMeshDetail"); 283 mCtrlAvatarFactor = getChild<LLSliderCtrl>("AvatarMeshDetail");
337 mAvatarFactorText = LLUICtrlFactory::getTextBoxByName(this, "AvatarMeshDetailText"); 284 mAvatarFactorText = getChild<LLTextBox>("AvatarMeshDetailText");
338 mCtrlAvatarFactor->setCommitCallback(&LLPanelDisplay::updateSliderText); 285 mCtrlAvatarFactor->setCommitCallback(&LLPanelDisplay::updateSliderText);
339 mCtrlAvatarFactor->setCallbackUserData(mAvatarFactorText); 286 mCtrlAvatarFactor->setCallbackUserData(mAvatarFactorText);
340 287
341 // Terrain detail slider 288 // Terrain detail slider
342 mCtrlTerrainFactor = LLUICtrlFactory::getSliderByName(this, "TerrainMeshDetail"); 289 mCtrlTerrainFactor = getChild<LLSliderCtrl>("TerrainMeshDetail");
343 mTerrainFactorText = LLUICtrlFactory::getTextBoxByName(this, "TerrainMeshDetailText"); 290 mTerrainFactorText = getChild<LLTextBox>("TerrainMeshDetailText");
344 mCtrlTerrainFactor->setCommitCallback(&LLPanelDisplay::updateSliderText); 291 mCtrlTerrainFactor->setCommitCallback(&LLPanelDisplay::updateSliderText);
345 mCtrlTerrainFactor->setCallbackUserData(mTerrainFactorText); 292 mCtrlTerrainFactor->setCallbackUserData(mTerrainFactorText);
346 293
347 // Terrain detail slider 294 // Terrain detail slider
348 mCtrlSkyFactor = LLUICtrlFactory::getSliderByName(this, "SkyMeshDetail"); 295 mCtrlSkyFactor = getChild<LLSliderCtrl>("SkyMeshDetail");
349 mSkyFactorText = LLUICtrlFactory::getTextBoxByName(this, "SkyMeshDetailText"); 296 mSkyFactorText = getChild<LLTextBox>("SkyMeshDetailText");
350 mCtrlSkyFactor->setCommitCallback(&LLPanelDisplay::updateSliderText); 297 mCtrlSkyFactor->setCommitCallback(&LLPanelDisplay::updateSliderText);
351 mCtrlSkyFactor->setCallbackUserData(mSkyFactorText); 298 mCtrlSkyFactor->setCallbackUserData(mSkyFactorText);
352 299
353 // Particle detail slider 300 // Particle detail slider
354 mCtrlMaxParticle = LLUICtrlFactory::getSliderByName(this, "MaxParticleCount"); 301 mCtrlMaxParticle = getChild<LLSliderCtrl>("MaxParticleCount");
355 302
356 // Glow detail slider 303 // Glow detail slider
357 mCtrlPostProcess = LLUICtrlFactory::getSliderByName(this, "RenderPostProcess"); 304 mCtrlPostProcess = getChild<LLSliderCtrl>("RenderPostProcess");
358 mPostProcessText = LLUICtrlFactory::getTextBoxByName(this, "PostProcessText"); 305 mPostProcessText = getChild<LLTextBox>("PostProcessText");
359 mCtrlPostProcess->setCommitCallback(&LLPanelDisplay::updateSliderText); 306 mCtrlPostProcess->setCommitCallback(&LLPanelDisplay::updateSliderText);
360 mCtrlPostProcess->setCallbackUserData(mPostProcessText); 307 mCtrlPostProcess->setCallbackUserData(mPostProcessText);
361 308
362 // Text boxes (for enabling/disabling) 309 // Text boxes (for enabling/disabling)
363 mShaderText = LLUICtrlFactory::getTextBoxByName(this, "ShadersText"); 310 mShaderText = getChild<LLTextBox>("ShadersText");
364 mReflectionText = LLUICtrlFactory::getTextBoxByName(this, "ReflectionDetailText"); 311 mReflectionText = getChild<LLTextBox>("ReflectionDetailText");
365 mAvatarText = LLUICtrlFactory::getTextBoxByName(this, "AvatarRenderingText"); 312 mAvatarText = getChild<LLTextBox>("AvatarRenderingText");
366 mTerrainText = LLUICtrlFactory::getTextBoxByName(this, "TerrainDetailText"); 313 mTerrainText = getChild<LLTextBox>("TerrainDetailText");
367 mLightingText = LLUICtrlFactory::getTextBoxByName(this, "LightingDetailText"); 314 mLightingText = getChild<LLTextBox>("LightingDetailText");
368 mMeshDetailText = LLUICtrlFactory::getTextBoxByName(this, "MeshDetailText"); 315 mMeshDetailText = getChild<LLTextBox>("MeshDetailText");
369 316
370 refresh(); 317 refresh();
371 318
@@ -462,11 +409,11 @@ void LLPanelDisplay::refreshEnabledState()
462 // Reflections 409 // Reflections
463 BOOL reflections = gSavedSettings.getBOOL("VertexShaderEnable") 410 BOOL reflections = gSavedSettings.getBOOL("VertexShaderEnable")
464 && gGLManager.mHasCubeMap 411 && gGLManager.mHasCubeMap
465 && gFeatureManagerp->isFeatureAvailable("RenderCubeMap"); 412 && LLFeatureManager::getInstance()->isFeatureAvailable("RenderCubeMap");
466 mCtrlReflections->setEnabled(reflections); 413 mCtrlReflections->setEnabled(reflections);
467 414
468 // Bump & Shiny 415 // Bump & Shiny
469 bool bumpshiny = gGLManager.mHasCubeMap && gFeatureManagerp->isFeatureAvailable("RenderCubeMap") && gFeatureManagerp->isFeatureAvailable("RenderObjectBump"); 416 bool bumpshiny = gGLManager.mHasCubeMap && LLFeatureManager::getInstance()->isFeatureAvailable("RenderCubeMap") && LLFeatureManager::getInstance()->isFeatureAvailable("RenderObjectBump");
470 mCtrlBumpShiny->setEnabled(bumpshiny ? TRUE : FALSE); 417 mCtrlBumpShiny->setEnabled(bumpshiny ? TRUE : FALSE);
471 418
472 for (S32 i = 0; i < mRadioReflectionDetail->getItemCount(); ++i) 419 for (S32 i = 0; i < mRadioReflectionDetail->getItemCount(); ++i)
@@ -489,7 +436,7 @@ void LLPanelDisplay::refreshEnabledState()
489 } 436 }
490 437
491 // Vertex Shaders 438 // Vertex Shaders
492 mCtrlShaderEnable->setEnabled(gFeatureManagerp->isFeatureAvailable("VertexShaderEnable")); 439 mCtrlShaderEnable->setEnabled(LLFeatureManager::getInstance()->isFeatureAvailable("VertexShaderEnable"));
493 440
494 BOOL shaders = mCtrlShaderEnable->get(); 441 BOOL shaders = mCtrlShaderEnable->get();
495 if (shaders) 442 if (shaders)
@@ -517,7 +464,7 @@ void LLPanelDisplay::refreshEnabledState()
517void LLPanelDisplay::disableUnavailableSettings() 464void LLPanelDisplay::disableUnavailableSettings()
518{ 465{
519 // if vertex shaders off, disable all shader related products 466 // if vertex shaders off, disable all shader related products
520 if(!gFeatureManagerp->isFeatureAvailable("VertexShaderEnable")) 467 if(!LLFeatureManager::getInstance()->isFeatureAvailable("VertexShaderEnable"))
521 { 468 {
522 mCtrlShaderEnable->setEnabled(FALSE); 469 mCtrlShaderEnable->setEnabled(FALSE);
523 mCtrlShaderEnable->setValue(FALSE); 470 mCtrlShaderEnable->setValue(FALSE);
@@ -536,21 +483,21 @@ void LLPanelDisplay::disableUnavailableSettings()
536 } 483 }
537 484
538 // disabled windlight 485 // disabled windlight
539 if(!gFeatureManagerp->isFeatureAvailable("WindLightUseAtmosShaders")) 486 if(!LLFeatureManager::getInstance()->isFeatureAvailable("WindLightUseAtmosShaders"))
540 { 487 {
541 mCtrlWindLight->setEnabled(FALSE); 488 mCtrlWindLight->setEnabled(FALSE);
542 mCtrlWindLight->setValue(FALSE); 489 mCtrlWindLight->setValue(FALSE);
543 } 490 }
544 491
545 // disabled reflections 492 // disabled reflections
546 if(!gFeatureManagerp->isFeatureAvailable("RenderWaterReflections")) 493 if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderWaterReflections"))
547 { 494 {
548 mCtrlReflections->setEnabled(FALSE); 495 mCtrlReflections->setEnabled(FALSE);
549 mCtrlReflections->setValue(FALSE); 496 mCtrlReflections->setValue(FALSE);
550 } 497 }
551 498
552 // disabled av 499 // disabled av
553 if(!gFeatureManagerp->isFeatureAvailable("RenderAvatarVP")) 500 if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderAvatarVP"))
554 { 501 {
555 mCtrlAvatarVP->setEnabled(FALSE); 502 mCtrlAvatarVP->setEnabled(FALSE);
556 mCtrlAvatarVP->setValue(FALSE); 503 mCtrlAvatarVP->setValue(FALSE);
@@ -559,13 +506,13 @@ void LLPanelDisplay::disableUnavailableSettings()
559 mCtrlAvatarCloth->setValue(FALSE); 506 mCtrlAvatarCloth->setValue(FALSE);
560 } 507 }
561 // disabled cloth 508 // disabled cloth
562 if(!gFeatureManagerp->isFeatureAvailable("RenderAvatarCloth")) 509 if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderAvatarCloth"))
563 { 510 {
564 mCtrlAvatarCloth->setEnabled(FALSE); 511 mCtrlAvatarCloth->setEnabled(FALSE);
565 mCtrlAvatarCloth->setValue(FALSE); 512 mCtrlAvatarCloth->setValue(FALSE);
566 } 513 }
567 // disabled impostors 514 // disabled impostors
568 if(!gFeatureManagerp->isFeatureAvailable("RenderUseImpostors")) 515 if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderUseImpostors"))
569 { 516 {
570 mCtrlAvatarImpostors->setEnabled(FALSE); 517 mCtrlAvatarImpostors->setEnabled(FALSE);
571 mCtrlAvatarImpostors->setValue(FALSE); 518 mCtrlAvatarImpostors->setValue(FALSE);
@@ -722,7 +669,7 @@ void LLPanelDisplay::onChangeQuality(LLUICtrl *ctrl, void *data)
722 } 669 }
723 670
724 U32 set = (U32)sldr->getValueF32(); 671 U32 set = (U32)sldr->getValueF32();
725 gFeatureManagerp->setGraphicsLevel(set, true); 672 LLFeatureManager::getInstance()->setGraphicsLevel(set, true);
726 673
727 LLFloaterPreference::refreshEnabledGraphics(); 674 LLFloaterPreference::refreshEnabledGraphics();
728 cur_panel->refresh(); 675 cur_panel->refresh();
@@ -859,15 +806,12 @@ void LLPanelDisplay::applyResolution()
859 } 806 }
860 807
861 // force aspect ratio 808 // force aspect ratio
862 if (fullscreen && gCamera) 809 if (fullscreen)
863 { 810 {
864 gCamera->setAspect( gViewerWindow->getDisplayAspectRatio() ); 811 LLViewerCamera::getInstance()->setAspect( gViewerWindow->getDisplayAspectRatio() );
865 } 812 }
866 813
867 if (gWorldPointer) 814 send_agent_update(TRUE);
868 {
869 send_agent_update(TRUE);
870 }
871 815
872 // Update enable/disable 816 // Update enable/disable
873 refresh(); 817 refresh();
@@ -955,11 +899,8 @@ void LLPanelDisplay::onVertexShaderEnable(LLUICtrl* self, void* data)
955 899
956void LLPanelDisplay::setHardwareDefaults(void* user_data) 900void LLPanelDisplay::setHardwareDefaults(void* user_data)
957{ 901{
958 if (gFeatureManagerp) 902 LLFeatureManager::getInstance()->applyRecommendedSettings();
959 { 903 LLFloaterPreference::refreshEnabledGraphics();
960 gFeatureManagerp->applyRecommendedSettings();
961 LLFloaterPreference::refreshEnabledGraphics();
962 }
963} 904}
964 905
965void LLPanelDisplay::updateSliderText(LLUICtrl* ctrl, void* user_data) 906void LLPanelDisplay::updateSliderText(LLUICtrl* ctrl, void* user_data)
@@ -999,12 +940,8 @@ void LLPanelDisplay::updateMeterText(LLUICtrl* ctrl, void* user_data)
999 LLPanelDisplay* panel = (LLPanelDisplay*)user_data; 940 LLPanelDisplay* panel = (LLPanelDisplay*)user_data;
1000 LLSliderCtrl* slider = (LLSliderCtrl*) ctrl; 941 LLSliderCtrl* slider = (LLSliderCtrl*) ctrl;
1001 942
1002 LLTextBox* m1 = LLUICtrlFactory::getTextBoxByName(panel, "DrawDistanceMeterText1"); 943 LLTextBox* m1 = panel->getChild<LLTextBox>("DrawDistanceMeterText1");
1003 LLTextBox* m2 = LLUICtrlFactory::getTextBoxByName(panel, "DrawDistanceMeterText2"); 944 LLTextBox* m2 = panel->getChild<LLTextBox>("DrawDistanceMeterText2");
1004 if(m1 == NULL || m2 == NULL || slider == NULL)
1005 {
1006 return;
1007 }
1008 945
1009 // toggle the two text boxes based on whether we have 1 or two digits 946 // toggle the two text boxes based on whether we have 1 or two digits
1010 F32 val = slider->getValueF32(); 947 F32 val = slider->getValueF32();
diff --git a/linden/indra/newview/llpanelevent.cpp b/linden/indra/newview/llpanelevent.cpp
index 2bf61b3..abfbe79 100644
--- a/linden/indra/newview/llpanelevent.cpp
+++ b/linden/indra/newview/llpanelevent.cpp
@@ -51,7 +51,7 @@
51#include "llviewercontrol.h" 51#include "llviewercontrol.h"
52#include "llweb.h" 52#include "llweb.h"
53#include "llworldmap.h" 53#include "llworldmap.h"
54#include "llvieweruictrlfactory.h" 54#include "lluictrlfactory.h"
55 55
56//static 56//static
57std::list<LLPanelEvent*> LLPanelEvent::sAllPanels; 57std::list<LLPanelEvent*> LLPanelEvent::sAllPanels;
@@ -70,51 +70,35 @@ LLPanelEvent::~LLPanelEvent()
70 70
71BOOL LLPanelEvent::postBuild() 71BOOL LLPanelEvent::postBuild()
72{ 72{
73 mTBName = LLViewerUICtrlFactory::getTextBoxByName(this, "event_name"); 73 mTBName = getChild<LLTextBox>("event_name");
74 mTBName->setColor(gColors.getColor( "LabelSelectedColor" ));
75 74
76 mTBCategory = LLViewerUICtrlFactory::getTextBoxByName(this, "event_category"); 75 mTBCategory = getChild<LLTextBox>("event_category");
77 mTBCategory->setColor(gColors.getColor( "LabelSelectedColor" ));
78
79 childSetColor("event_mature_yes", gColors.getColor( "LabelSelectedColor" ));
80 childSetColor("event_mature_no", gColors.getColor( "LabelSelectedColor" ));
81 76
82 mTBDate = LLViewerUICtrlFactory::getTextBoxByName(this, "event_date"); 77 mTBDate = getChild<LLTextBox>("event_date");
83 mTBDate->setColor(gColors.getColor( "LabelSelectedColor" ));
84 78
85 mTBDuration = LLViewerUICtrlFactory::getTextBoxByName(this, "event_duration"); 79 mTBDuration = getChild<LLTextBox>("event_duration");
86 mTBDuration->setColor(gColors.getColor( "LabelSelectedColor" ));
87 80
88 mTBDesc = LLUICtrlFactory::getTextEditorByName(this, "event_desc"); 81 mTBDesc = getChild<LLTextEditor>("event_desc");
89 mTBDesc->setWordWrap(TRUE); 82 mTBDesc->setWordWrap(TRUE);
90 mTBDesc->setEnabled(FALSE); 83 mTBDesc->setEnabled(FALSE);
91 mTBDesc->setFgColor(gColors.getColor( "LabelSelectedColor" ));
92 mTBDesc->setReadOnlyFgColor(LLColor4(1.f, 1.f, 1.f, 1.f));
93 84
94 mTBRunBy = LLViewerUICtrlFactory::getTextBoxByName(this, "event_runby"); 85 mTBRunBy = getChild<LLTextBox>("event_runby");
95 mTBRunBy->setColor(gColors.getColor( "LabelSelectedColor" )); 86 mTBLocation = getChild<LLTextBox>("event_location");
96 mTBLocation = LLViewerUICtrlFactory::getTextBoxByName(this, "event_location"); 87 mTBCover = getChild<LLTextBox>("event_cover");
97 mTBLocation->setColor(gColors.getColor( "LabelSelectedColor" ));
98 mTBCover = LLViewerUICtrlFactory::getTextBoxByName(this, "event_cover");
99 mTBCover->setColor(gColors.getColor( "LabelSelectedColor" ));
100 88
101 mTeleportBtn = LLViewerUICtrlFactory::getButtonByName(this, "teleport_btn"); 89 mTeleportBtn = getChild<LLButton>( "teleport_btn");
102 mTeleportBtn->setClickedCallback(onClickTeleport); 90 mTeleportBtn->setClickedCallback(onClickTeleport);
103 mTeleportBtn->setCallbackUserData(this); 91 mTeleportBtn->setCallbackUserData(this);
104 92
105 mMapBtn = LLViewerUICtrlFactory::getButtonByName(this, "map_btn"); 93 mMapBtn = getChild<LLButton>( "map_btn");
106 mMapBtn->setClickedCallback(onClickMap); 94 mMapBtn->setClickedCallback(onClickMap);
107 mMapBtn->setCallbackUserData(this); 95 mMapBtn->setCallbackUserData(this);
108 96
109 //mLandmarkBtn = LLViewerUICtrlFactory::getButtonByName(this, "landmark_btn"); 97 mNotifyBtn = getChild<LLButton>( "notify_btn");
110 //mLandmarkBtn->setClickedCallback(onClickLandmark);
111 //mLandmarkBtn->setCallbackUserData(this);
112
113 mNotifyBtn = LLViewerUICtrlFactory::getButtonByName(this, "notify_btn");
114 mNotifyBtn->setClickedCallback(onClickNotify); 98 mNotifyBtn->setClickedCallback(onClickNotify);
115 mNotifyBtn->setCallbackUserData(this); 99 mNotifyBtn->setCallbackUserData(this);
116 100
117 mCreateEventBtn = LLViewerUICtrlFactory::getButtonByName(this, "create_event_btn"); 101 mCreateEventBtn = getChild<LLButton>( "create_event_btn");
118 mCreateEventBtn->setClickedCallback(onClickCreateEvent); 102 mCreateEventBtn->setClickedCallback(onClickCreateEvent);
119 mCreateEventBtn->setCallbackUserData(this); 103 mCreateEventBtn->setCallbackUserData(this);
120 104
diff --git a/linden/indra/newview/llpanelevent.h b/linden/indra/newview/llpanelevent.h
index a3d474f..a75ee28 100644
--- a/linden/indra/newview/llpanelevent.h
+++ b/linden/indra/newview/llpanelevent.h
@@ -86,7 +86,6 @@ protected:
86 86
87 LLButton* mTeleportBtn; 87 LLButton* mTeleportBtn;
88 LLButton* mMapBtn; 88 LLButton* mMapBtn;
89 //LLButton* mLandmarkBtn;
90 LLButton* mCreateEventBtn; 89 LLButton* mCreateEventBtn;
91 LLButton* mNotifyBtn; 90 LLButton* mNotifyBtn;
92 91
diff --git a/linden/indra/newview/llpanelface.cpp b/linden/indra/newview/llpanelface.cpp
index a52c57f..4742627 100644
--- a/linden/indra/newview/llpanelface.cpp
+++ b/linden/indra/newview/llpanelface.cpp
@@ -60,7 +60,7 @@
60#include "llviewermedia.h" 60#include "llviewermedia.h"
61#include "llviewerobject.h" 61#include "llviewerobject.h"
62#include "llviewerstats.h" 62#include "llviewerstats.h"
63#include "llvieweruictrlfactory.h" 63#include "lluictrlfactory.h"
64 64
65// 65//
66// Methods 66// Methods
@@ -100,7 +100,7 @@ BOOL LLPanelFace::postBuild()
100 // Allow any texture to be used during non-immediate mode. 100 // Allow any texture to be used during non-immediate mode.
101 mTextureCtrl->setNonImmediateFilterPermMask(PERM_NONE); 101 mTextureCtrl->setNonImmediateFilterPermMask(PERM_NONE);
102 LLAggregatePermissions texture_perms; 102 LLAggregatePermissions texture_perms;
103 if (gSelectMgr->selectGetAggregateTexturePermissions(texture_perms)) 103 if (LLSelectMgr::getInstance()->selectGetAggregateTexturePermissions(texture_perms))
104 { 104 {
105 BOOL can_copy = 105 BOOL can_copy =
106 texture_perms.getValue(PERM_COPY) == LLAggregatePermissions::AP_EMPTY || 106 texture_perms.getValue(PERM_COPY) == LLAggregatePermissions::AP_EMPTY ||
@@ -128,14 +128,14 @@ BOOL LLPanelFace::postBuild()
128 mColorSwatch->setCanApplyImmediately(TRUE); 128 mColorSwatch->setCanApplyImmediately(TRUE);
129 } 129 }
130 130
131 mLabelColorTransp = LLUICtrlFactory::getTextBoxByName(this,"color trans"); 131 mLabelColorTransp = getChild<LLTextBox>("color trans");
132 if(mLabelColorTransp) 132 if(mLabelColorTransp)
133 { 133 {
134 mLabelColorTransp->setFollowsTop(); 134 mLabelColorTransp->setFollowsTop();
135 mLabelColorTransp->setFollowsLeft(); 135 mLabelColorTransp->setFollowsLeft();
136 } 136 }
137 137
138 mCtrlColorTransp = LLUICtrlFactory::getSpinnerByName(this,"ColorTrans"); 138 mCtrlColorTransp = getChild<LLSpinCtrl>("ColorTrans");
139 if(mCtrlColorTransp) 139 if(mCtrlColorTransp)
140 { 140 {
141 mCtrlColorTransp->setCommitCallback(LLPanelFace::onCommitAlpha); 141 mCtrlColorTransp->setCommitCallback(LLPanelFace::onCommitAlpha);
@@ -145,14 +145,14 @@ BOOL LLPanelFace::postBuild()
145 mCtrlColorTransp->setFollowsLeft(); 145 mCtrlColorTransp->setFollowsLeft();
146 } 146 }
147 147
148 mCheckFullbright = LLUICtrlFactory::getCheckBoxByName(this,"checkbox fullbright"); 148 mCheckFullbright = getChild<LLCheckBoxCtrl>("checkbox fullbright");
149 if (mCheckFullbright) 149 if (mCheckFullbright)
150 { 150 {
151 mCheckFullbright->setCommitCallback(LLPanelFace::onCommitFullbright); 151 mCheckFullbright->setCommitCallback(LLPanelFace::onCommitFullbright);
152 mCheckFullbright->setCallbackUserData( this ); 152 mCheckFullbright->setCallbackUserData( this );
153 } 153 }
154 mLabelTexGen = LLUICtrlFactory::getTextBoxByName(this,"tex gen"); 154 mLabelTexGen = getChild<LLTextBox>("tex gen");
155 mComboTexGen = LLUICtrlFactory::getComboBoxByName(this,"combobox texgen"); 155 mComboTexGen = getChild<LLComboBox>("combobox texgen");
156 if(mComboTexGen) 156 if(mComboTexGen)
157 { 157 {
158 mComboTexGen->setCommitCallback(LLPanelFace::onCommitTexGen); 158 mComboTexGen->setCommitCallback(LLPanelFace::onCommitTexGen);
@@ -160,8 +160,8 @@ BOOL LLPanelFace::postBuild()
160 mComboTexGen->setCallbackUserData( this ); 160 mComboTexGen->setCallbackUserData( this );
161 } 161 }
162 162
163 mLabelGlow = LLUICtrlFactory::getTextBoxByName(this,"glow label"); 163 mLabelGlow = getChild<LLTextBox>("glow label");
164 mCtrlGlow = LLUICtrlFactory::getSpinnerByName(this,"glow"); 164 mCtrlGlow = getChild<LLSpinCtrl>("glow");
165 if(mCtrlGlow) 165 if(mCtrlGlow)
166 { 166 {
167 mCtrlGlow->setCommitCallback(LLPanelFace::onCommitGlow); 167 mCtrlGlow->setCommitCallback(LLPanelFace::onCommitGlow);
@@ -210,69 +210,68 @@ void LLPanelFace::sendTexture()
210 { 210 {
211 id = mTextureCtrl->getImageAssetID(); 211 id = mTextureCtrl->getImageAssetID();
212 } 212 }
213 gSelectMgr->selectionSetImage(id); 213 LLSelectMgr::getInstance()->selectionSetImage(id);
214 } 214 }
215} 215}
216 216
217void LLPanelFace::sendBump() 217void LLPanelFace::sendBump()
218{ 218{
219 LLComboBox* mComboBumpiness = gUICtrlFactory->getComboBoxByName(this,"combobox bumpiness"); 219 LLComboBox* mComboBumpiness = getChild<LLComboBox>("combobox bumpiness");
220 if(!mComboBumpiness)return; 220 if(!mComboBumpiness)return;
221 U8 bump = (U8) mComboBumpiness->getCurrentIndex() & TEM_BUMP_MASK; 221 U8 bump = (U8) mComboBumpiness->getCurrentIndex() & TEM_BUMP_MASK;
222 gSelectMgr->selectionSetBumpmap( bump ); 222 LLSelectMgr::getInstance()->selectionSetBumpmap( bump );
223} 223}
224 224
225void LLPanelFace::sendTexGen() 225void LLPanelFace::sendTexGen()
226{ 226{
227 LLComboBox* mComboTexGen = gUICtrlFactory->getComboBoxByName(this,"combobox texgen"); 227 LLComboBox* mComboTexGen = getChild<LLComboBox>("combobox texgen");
228 if(!mComboTexGen)return; 228 if(!mComboTexGen)return;
229 U8 tex_gen = (U8) mComboTexGen->getCurrentIndex() << TEM_TEX_GEN_SHIFT; 229 U8 tex_gen = (U8) mComboTexGen->getCurrentIndex() << TEM_TEX_GEN_SHIFT;
230 gSelectMgr->selectionSetTexGen( tex_gen ); 230 LLSelectMgr::getInstance()->selectionSetTexGen( tex_gen );
231} 231}
232 232
233void LLPanelFace::sendShiny() 233void LLPanelFace::sendShiny()
234{ 234{
235 LLComboBox* mComboShininess = gUICtrlFactory->getComboBoxByName(this,"combobox shininess"); 235 LLComboBox* mComboShininess = getChild<LLComboBox>("combobox shininess");
236 if(!mComboShininess)return; 236 if(!mComboShininess)return;
237 U8 shiny = (U8) mComboShininess->getCurrentIndex() & TEM_SHINY_MASK; 237 U8 shiny = (U8) mComboShininess->getCurrentIndex() & TEM_SHINY_MASK;
238 gSelectMgr->selectionSetShiny( shiny ); 238 LLSelectMgr::getInstance()->selectionSetShiny( shiny );
239} 239}
240 240
241void LLPanelFace::sendFullbright() 241void LLPanelFace::sendFullbright()
242{ 242{
243 LLCheckBoxCtrl* mCheckFullbright = gUICtrlFactory->getCheckBoxByName(this,"checkbox fullbright"); 243 LLCheckBoxCtrl* mCheckFullbright = getChild<LLCheckBoxCtrl>("checkbox fullbright");
244 if(!mCheckFullbright)return; 244 if(!mCheckFullbright)return;
245 U8 fullbright = mCheckFullbright->get() ? TEM_FULLBRIGHT_MASK : 0; 245 U8 fullbright = mCheckFullbright->get() ? TEM_FULLBRIGHT_MASK : 0;
246 gSelectMgr->selectionSetFullbright( fullbright ); 246 LLSelectMgr::getInstance()->selectionSetFullbright( fullbright );
247} 247}
248 248
249void LLPanelFace::sendColor() 249void LLPanelFace::sendColor()
250{ 250{
251 251
252 LLColorSwatchCtrl* mColorSwatch = LLViewerUICtrlFactory::getColorSwatchByName(this,"colorswatch"); 252 LLColorSwatchCtrl* mColorSwatch = getChild<LLColorSwatchCtrl>("colorswatch");
253 if(!mColorSwatch)return; 253 if(!mColorSwatch)return;
254 LLColor4 color = mColorSwatch->get(); 254 LLColor4 color = mColorSwatch->get();
255 255
256 gSelectMgr->selectionSetColorOnly( color ); 256 LLSelectMgr::getInstance()->selectionSetColorOnly( color );
257} 257}
258 258
259void LLPanelFace::sendAlpha() 259void LLPanelFace::sendAlpha()
260{ 260{
261 LLSpinCtrl* mCtrlColorTransp = LLViewerUICtrlFactory::getSpinnerByName(this,"ColorTrans"); 261 LLSpinCtrl* mCtrlColorTransp = getChild<LLSpinCtrl>("ColorTrans");
262 if(!mCtrlColorTransp)return; 262 if(!mCtrlColorTransp)return;
263 F32 alpha = (100.f - mCtrlColorTransp->get()) / 100.f; 263 F32 alpha = (100.f - mCtrlColorTransp->get()) / 100.f;
264 264
265 gSelectMgr->selectionSetAlphaOnly( alpha ); 265 LLSelectMgr::getInstance()->selectionSetAlphaOnly( alpha );
266} 266}
267 267
268 268
269void LLPanelFace::sendGlow() 269void LLPanelFace::sendGlow()
270{ 270{
271 LLSpinCtrl* mCtrlGlow = LLViewerUICtrlFactory::getSpinnerByName(this,"glow"); 271 LLSpinCtrl* mCtrlGlow = getChild<LLSpinCtrl>("glow");
272 if(!mCtrlGlow)return;
273 F32 glow = mCtrlGlow->get(); 272 F32 glow = mCtrlGlow->get();
274 273
275 gSelectMgr->selectionSetGlow( glow ); 274 LLSelectMgr::getInstance()->selectionSetGlow( glow );
276} 275}
277 276
278struct LLPanelFaceSetTEFunctor : public LLSelectedTEFunctor 277struct LLPanelFaceSetTEFunctor : public LLSelectedTEFunctor
@@ -282,14 +281,14 @@ struct LLPanelFaceSetTEFunctor : public LLSelectedTEFunctor
282 { 281 {
283 BOOL valid; 282 BOOL valid;
284 F32 value; 283 F32 value;
285 LLSpinCtrl* ctrlTexScaleS = LLViewerUICtrlFactory::getSpinnerByName(mPanel,"TexScaleU"); 284 LLSpinCtrl* ctrlTexScaleS = mPanel->getChild<LLSpinCtrl>("TexScaleU");
286 LLSpinCtrl* ctrlTexScaleT = LLViewerUICtrlFactory::getSpinnerByName(mPanel,"TexScaleV"); 285 LLSpinCtrl* ctrlTexScaleT = mPanel->getChild<LLSpinCtrl>("TexScaleV");
287 LLSpinCtrl* ctrlTexOffsetS = LLViewerUICtrlFactory::getSpinnerByName(mPanel,"TexOffsetU"); 286 LLSpinCtrl* ctrlTexOffsetS = mPanel->getChild<LLSpinCtrl>("TexOffsetU");
288 LLSpinCtrl* ctrlTexOffsetT = LLViewerUICtrlFactory::getSpinnerByName(mPanel,"TexOffsetV"); 287 LLSpinCtrl* ctrlTexOffsetT = mPanel->getChild<LLSpinCtrl>("TexOffsetV");
289 LLSpinCtrl* ctrlTexRotation = LLViewerUICtrlFactory::getSpinnerByName(mPanel,"TexRot"); 288 LLSpinCtrl* ctrlTexRotation = mPanel->getChild<LLSpinCtrl>("TexRot");
290 LLCheckBoxCtrl* checkFlipScaleS = LLViewerUICtrlFactory::getCheckBoxByName(mPanel,"checkbox flip s"); 289 LLCheckBoxCtrl* checkFlipScaleS = mPanel->getChild<LLCheckBoxCtrl>("checkbox flip s");
291 LLCheckBoxCtrl* checkFlipScaleT = LLViewerUICtrlFactory::getCheckBoxByName(mPanel,"checkbox flip t"); 290 LLCheckBoxCtrl* checkFlipScaleT = mPanel->getChild<LLCheckBoxCtrl>("checkbox flip t");
292 LLComboBox* comboTexGen = LLViewerUICtrlFactory::getComboBoxByName(mPanel,"combobox texgen"); 291 LLComboBox* comboTexGen = mPanel->getChild<LLComboBox>("combobox texgen");
293 if (ctrlTexScaleS) 292 if (ctrlTexScaleS)
294 { 293 {
295 valid = !ctrlTexScaleS->getTentative() || !checkFlipScaleS->getTentative(); 294 valid = !ctrlTexScaleS->getTentative() || !checkFlipScaleS->getTentative();
@@ -373,15 +372,15 @@ struct LLPanelFaceSendFunctor : public LLSelectedObjectFunctor
373void LLPanelFace::sendTextureInfo() 372void LLPanelFace::sendTextureInfo()
374{ 373{
375 LLPanelFaceSetTEFunctor setfunc(this); 374 LLPanelFaceSetTEFunctor setfunc(this);
376 gSelectMgr->getSelection()->applyToTEs(&setfunc); 375 LLSelectMgr::getInstance()->getSelection()->applyToTEs(&setfunc);
377 376
378 LLPanelFaceSendFunctor sendfunc; 377 LLPanelFaceSendFunctor sendfunc;
379 gSelectMgr->getSelection()->applyToObjects(&sendfunc); 378 LLSelectMgr::getInstance()->getSelection()->applyToObjects(&sendfunc);
380} 379}
381 380
382void LLPanelFace::getState() 381void LLPanelFace::getState()
383{ 382{
384 LLViewerObject* objectp = gSelectMgr->getSelection()->getFirstObject(); 383 LLViewerObject* objectp = LLSelectMgr::getInstance()->getSelection()->getFirstObject();
385 384
386 if( objectp 385 if( objectp
387 && objectp->getPCode() == LL_PCODE_VOLUME 386 && objectp->getPCode() == LL_PCODE_VOLUME
@@ -411,7 +410,7 @@ void LLPanelFace::getState()
411 childSetEnabled("button apply",editable); 410 childSetEnabled("button apply",editable);
412 411
413 bool identical; 412 bool identical;
414 LLTextureCtrl* texture_ctrl = LLViewerUICtrlFactory::getTexturePickerByName(this,"texture control"); 413 LLTextureCtrl* texture_ctrl = getChild<LLTextureCtrl>("texture control");
415 414
416 // Texture 415 // Texture
417 { 416 {
@@ -424,7 +423,7 @@ void LLPanelFace::getState()
424 return image ? image->getID() : LLUUID::null; 423 return image ? image->getID() : LLUUID::null;
425 } 424 }
426 } func; 425 } func;
427 identical = gSelectMgr->getSelection()->getSelectedTEValue( &func, id ); 426 identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, id );
428 427
429 if (identical) 428 if (identical)
430 { 429 {
@@ -463,7 +462,7 @@ void LLPanelFace::getState()
463 { 462 {
464// texture_ctrl->setValid( editable ); 463// texture_ctrl->setValid( editable );
465 464
466 if (gSelectMgr->selectGetAggregateTexturePermissions(texture_perms)) 465 if (LLSelectMgr::getInstance()->selectGetAggregateTexturePermissions(texture_perms))
467 { 466 {
468 BOOL can_copy = 467 BOOL can_copy =
469 texture_perms.getValue(PERM_COPY) == LLAggregatePermissions::AP_EMPTY || 468 texture_perms.getValue(PERM_COPY) == LLAggregatePermissions::AP_EMPTY ||
@@ -491,7 +490,7 @@ void LLPanelFace::getState()
491 return object->getTE(face)->mScaleS; 490 return object->getTE(face)->mScaleS;
492 } 491 }
493 } func; 492 } func;
494 identical = gSelectMgr->getSelection()->getSelectedTEValue( &func, scale_s ); 493 identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, scale_s );
495 childSetValue("TexScaleU",editable ? llabs(scale_s) : 0); 494 childSetValue("TexScaleU",editable ? llabs(scale_s) : 0);
496 childSetTentative("TexScaleU",LLSD((BOOL)(!identical))); 495 childSetTentative("TexScaleU",LLSD((BOOL)(!identical)));
497 childSetEnabled("TexScaleU",editable); 496 childSetEnabled("TexScaleU",editable);
@@ -509,7 +508,7 @@ void LLPanelFace::getState()
509 return object->getTE(face)->mScaleT; 508 return object->getTE(face)->mScaleT;
510 } 509 }
511 } func; 510 } func;
512 identical = gSelectMgr->getSelection()->getSelectedTEValue( &func, scale_t ); 511 identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, scale_t );
513 512
514 childSetValue("TexScaleV",llabs(editable ? llabs(scale_t) : 0)); 513 childSetValue("TexScaleV",llabs(editable ? llabs(scale_t) : 0));
515 childSetTentative("TexScaleV",LLSD((BOOL)(!identical))); 514 childSetTentative("TexScaleV",LLSD((BOOL)(!identical)));
@@ -530,7 +529,7 @@ void LLPanelFace::getState()
530 return object->getTE(face)->mOffsetS; 529 return object->getTE(face)->mOffsetS;
531 } 530 }
532 } func; 531 } func;
533 identical = gSelectMgr->getSelection()->getSelectedTEValue( &func, offset_s ); 532 identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, offset_s );
534 childSetValue("TexOffsetU", editable ? offset_s : 0); 533 childSetValue("TexOffsetU", editable ? offset_s : 0);
535 childSetTentative("TexOffsetU",!identical); 534 childSetTentative("TexOffsetU",!identical);
536 childSetEnabled("TexOffsetU",editable); 535 childSetEnabled("TexOffsetU",editable);
@@ -545,7 +544,7 @@ void LLPanelFace::getState()
545 return object->getTE(face)->mOffsetT; 544 return object->getTE(face)->mOffsetT;
546 } 545 }
547 } func; 546 } func;
548 identical = gSelectMgr->getSelection()->getSelectedTEValue( &func, offset_t ); 547 identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, offset_t );
549 childSetValue("TexOffsetV", editable ? offset_t : 0); 548 childSetValue("TexOffsetV", editable ? offset_t : 0);
550 childSetTentative("TexOffsetV",!identical); 549 childSetTentative("TexOffsetV",!identical);
551 childSetEnabled("TexOffsetV",editable); 550 childSetEnabled("TexOffsetV",editable);
@@ -562,14 +561,14 @@ void LLPanelFace::getState()
562 return object->getTE(face)->mRotation; 561 return object->getTE(face)->mRotation;
563 } 562 }
564 } func; 563 } func;
565 identical = gSelectMgr->getSelection()->getSelectedTEValue( &func, rotation ); 564 identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, rotation );
566 childSetValue("TexRot", editable ? rotation * RAD_TO_DEG : 0); 565 childSetValue("TexRot", editable ? rotation * RAD_TO_DEG : 0);
567 childSetTentative("TexRot",!identical); 566 childSetTentative("TexRot",!identical);
568 childSetEnabled("TexRot",editable); 567 childSetEnabled("TexRot",editable);
569 } 568 }
570 569
571 // Color swatch 570 // Color swatch
572 LLColorSwatchCtrl* mColorSwatch = LLViewerUICtrlFactory::getColorSwatchByName(this,"colorswatch"); 571 LLColorSwatchCtrl* mColorSwatch = getChild<LLColorSwatchCtrl>("colorswatch");
573 LLColor4 color = LLColor4::white; 572 LLColor4 color = LLColor4::white;
574 if(mColorSwatch) 573 if(mColorSwatch)
575 { 574 {
@@ -580,7 +579,7 @@ void LLPanelFace::getState()
580 return object->getTE(face)->getColor(); 579 return object->getTE(face)->getColor();
581 } 580 }
582 } func; 581 } func;
583 identical = gSelectMgr->getSelection()->getSelectedTEValue( &func, color ); 582 identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, color );
584 583
585 mColorSwatch->setOriginal(color); 584 mColorSwatch->setOriginal(color);
586 mColorSwatch->set(color, TRUE); 585 mColorSwatch->set(color, TRUE);
@@ -609,7 +608,7 @@ void LLPanelFace::getState()
609 return object->getTE(face)->getGlow(); 608 return object->getTE(face)->getGlow();
610 } 609 }
611 } func; 610 } func;
612 identical = gSelectMgr->getSelection()->getSelectedTEValue( &func, glow ); 611 identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, glow );
613 612
614 childSetValue("glow",glow); 613 childSetValue("glow",glow);
615 childSetEnabled("glow",editable); 614 childSetEnabled("glow",editable);
@@ -628,7 +627,7 @@ void LLPanelFace::getState()
628 return (F32)(object->getTE(face)->getShiny()); 627 return (F32)(object->getTE(face)->getShiny());
629 } 628 }
630 } func; 629 } func;
631 identical = gSelectMgr->getSelection()->getSelectedTEValue( &func, shinyf ); 630 identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, shinyf );
632 LLCtrlSelectionInterface* combobox_shininess = 631 LLCtrlSelectionInterface* combobox_shininess =
633 childGetSelectionInterface("combobox shininess"); 632 childGetSelectionInterface("combobox shininess");
634 if (combobox_shininess) 633 if (combobox_shininess)
@@ -653,7 +652,7 @@ void LLPanelFace::getState()
653 return (F32)(object->getTE(face)->getBumpmap()); 652 return (F32)(object->getTE(face)->getBumpmap());
654 } 653 }
655 } func; 654 } func;
656 identical = gSelectMgr->getSelection()->getSelectedTEValue( &func, bumpf ); 655 identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, bumpf );
657 LLCtrlSelectionInterface* combobox_bumpiness = 656 LLCtrlSelectionInterface* combobox_bumpiness =
658 childGetSelectionInterface("combobox bumpiness"); 657 childGetSelectionInterface("combobox bumpiness");
659 if (combobox_bumpiness) 658 if (combobox_bumpiness)
@@ -678,7 +677,7 @@ void LLPanelFace::getState()
678 return (F32)(object->getTE(face)->getTexGen()); 677 return (F32)(object->getTE(face)->getTexGen());
679 } 678 }
680 } func; 679 } func;
681 identical = gSelectMgr->getSelection()->getSelectedTEValue( &func, genf ); 680 identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, genf );
682 S32 selected_texgen = ((S32) genf) >> TEM_TEX_GEN_SHIFT; 681 S32 selected_texgen = ((S32) genf) >> TEM_TEX_GEN_SHIFT;
683 LLCtrlSelectionInterface* combobox_texgen = 682 LLCtrlSelectionInterface* combobox_texgen =
684 childGetSelectionInterface("combobox texgen"); 683 childGetSelectionInterface("combobox texgen");
@@ -716,7 +715,7 @@ void LLPanelFace::getState()
716 return (F32)(object->getTE(face)->getFullbright()); 715 return (F32)(object->getTE(face)->getFullbright());
717 } 716 }
718 } func; 717 } func;
719 identical = gSelectMgr->getSelection()->getSelectedTEValue( &func, fullbrightf ); 718 identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, fullbrightf );
720 719
721 childSetValue("checkbox fullbright",(S32)fullbrightf); 720 childSetValue("checkbox fullbright",(S32)fullbrightf);
722 childSetEnabled("checkbox fullbright",editable); 721 childSetEnabled("checkbox fullbright",editable);
@@ -743,11 +742,11 @@ void LLPanelFace::getState()
743 return object->getTE(face)->mScaleS / object->getScale().mV[s_axis]; 742 return object->getTE(face)->mScaleS / object->getScale().mV[s_axis];
744 } 743 }
745 } func; 744 } func;
746 identical = gSelectMgr->getSelection()->getSelectedTEValue( &func, repeats ); 745 identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, repeats );
747 746
748 childSetValue("rptctrl", editable ? repeats : 0); 747 childSetValue("rptctrl", editable ? repeats : 0);
749 childSetTentative("rptctrl",!identical); 748 childSetTentative("rptctrl",!identical);
750 LLComboBox* mComboTexGen = LLViewerUICtrlFactory::getComboBoxByName(this,"combobox texgen"); 749 LLComboBox* mComboTexGen = getChild<LLComboBox>("combobox texgen");
751 if (mComboTexGen) 750 if (mComboTexGen)
752 { 751 {
753 BOOL enabled = editable && (!mComboTexGen || mComboTexGen->getCurrentIndex() != 1); 752 BOOL enabled = editable && (!mComboTexGen || mComboTexGen->getCurrentIndex() != 1);
@@ -825,14 +824,14 @@ void LLPanelFace::onCommitAlpha(LLUICtrl* ctrl, void* userdata)
825// static 824// static
826void LLPanelFace::onCancelColor(LLUICtrl* ctrl, void* userdata) 825void LLPanelFace::onCancelColor(LLUICtrl* ctrl, void* userdata)
827{ 826{
828 gSelectMgr->selectionRevertColors(); 827 LLSelectMgr::getInstance()->selectionRevertColors();
829} 828}
830 829
831// static 830// static
832void LLPanelFace::onSelectColor(LLUICtrl* ctrl, void* userdata) 831void LLPanelFace::onSelectColor(LLUICtrl* ctrl, void* userdata)
833{ 832{
834 LLPanelFace* self = (LLPanelFace*) userdata; 833 LLPanelFace* self = (LLPanelFace*) userdata;
835 gSelectMgr->saveSelectedObjectColors(); 834 LLSelectMgr::getInstance()->saveSelectedObjectColors();
836 self->sendColor(); 835 self->sendColor();
837} 836}
838 837
@@ -875,8 +874,8 @@ void LLPanelFace::onCommitGlow(LLUICtrl* ctrl, void* userdata)
875BOOL LLPanelFace::onDragTexture(LLUICtrl*, LLInventoryItem* item, void*) 874BOOL LLPanelFace::onDragTexture(LLUICtrl*, LLInventoryItem* item, void*)
876{ 875{
877 BOOL accept = TRUE; 876 BOOL accept = TRUE;
878 for (LLObjectSelection::root_iterator iter = gSelectMgr->getSelection()->root_begin(); 877 for (LLObjectSelection::root_iterator iter = LLSelectMgr::getInstance()->getSelection()->root_begin();
879 iter != gSelectMgr->getSelection()->root_end(); iter++) 878 iter != LLSelectMgr::getInstance()->getSelection()->root_end(); iter++)
880 { 879 {
881 LLSelectNode* node = *iter; 880 LLSelectNode* node = *iter;
882 LLViewerObject* obj = node->getObject(); 881 LLViewerObject* obj = node->getObject();
@@ -894,7 +893,7 @@ void LLPanelFace::onCommitTexture( LLUICtrl* ctrl, void* userdata )
894{ 893{
895 LLPanelFace* self = (LLPanelFace*) userdata; 894 LLPanelFace* self = (LLPanelFace*) userdata;
896 895
897 gViewerStats->incStat(LLViewerStats::ST_EDIT_TEXTURE_COUNT ); 896 LLViewerStats::getInstance()->incStat(LLViewerStats::ST_EDIT_TEXTURE_COUNT );
898 897
899 self->sendTexture(); 898 self->sendTexture();
900} 899}
@@ -902,14 +901,14 @@ void LLPanelFace::onCommitTexture( LLUICtrl* ctrl, void* userdata )
902// static 901// static
903void LLPanelFace::onCancelTexture(LLUICtrl* ctrl, void* userdata) 902void LLPanelFace::onCancelTexture(LLUICtrl* ctrl, void* userdata)
904{ 903{
905 gSelectMgr->selectionRevertTextures(); 904 LLSelectMgr::getInstance()->selectionRevertTextures();
906} 905}
907 906
908// static 907// static
909void LLPanelFace::onSelectTexture(LLUICtrl* ctrl, void* userdata) 908void LLPanelFace::onSelectTexture(LLUICtrl* ctrl, void* userdata)
910{ 909{
911 LLPanelFace* self = (LLPanelFace*) userdata; 910 LLPanelFace* self = (LLPanelFace*) userdata;
912 gSelectMgr->saveSelectedObjectTextures(); 911 LLSelectMgr::getInstance()->saveSelectedObjectTextures();
913 self->sendTexture(); 912 self->sendTexture();
914} 913}
915 914
@@ -931,7 +930,7 @@ void LLPanelFace::onClickApply(void* userdata)
931 930
932 //F32 repeats_per_meter = self->mCtrlRepeatsPerMeter->get(); 931 //F32 repeats_per_meter = self->mCtrlRepeatsPerMeter->get();
933 F32 repeats_per_meter = (F32)self->childGetValue( "rptctrl" ).asReal();//self->mCtrlRepeatsPerMeter->get(); 932 F32 repeats_per_meter = (F32)self->childGetValue( "rptctrl" ).asReal();//self->mCtrlRepeatsPerMeter->get();
934 gSelectMgr->selectionTexScaleAutofit( repeats_per_meter ); 933 LLSelectMgr::getInstance()->selectionTexScaleAutofit( repeats_per_meter );
935} 934}
936 935
937// commit the fit media texture to prim button 936// commit the fit media texture to prim button
@@ -965,8 +964,8 @@ struct LLPanelFaceSetMediaFunctor : public LLSelectedTEFunctor
965void LLPanelFace::onClickAutoFix(void* userdata) 964void LLPanelFace::onClickAutoFix(void* userdata)
966{ 965{
967 LLPanelFaceSetMediaFunctor setfunc; 966 LLPanelFaceSetMediaFunctor setfunc;
968 gSelectMgr->getSelection()->applyToTEs(&setfunc); 967 LLSelectMgr::getInstance()->getSelection()->applyToTEs(&setfunc);
969 968
970 LLPanelFaceSendFunctor sendfunc; 969 LLPanelFaceSendFunctor sendfunc;
971 gSelectMgr->getSelection()->applyToObjects(&sendfunc); 970 LLSelectMgr::getInstance()->getSelection()->applyToObjects(&sendfunc);
972} 971}
diff --git a/linden/indra/newview/llpanelgeneral.cpp b/linden/indra/newview/llpanelgeneral.cpp
index 2c68e9a..17fca4e 100644
--- a/linden/indra/newview/llpanelgeneral.cpp
+++ b/linden/indra/newview/llpanelgeneral.cpp
@@ -38,7 +38,7 @@
38#include "llrect.h" 38#include "llrect.h"
39#include "llfontgl.h" 39#include "llfontgl.h"
40#include "message.h" 40#include "message.h"
41#include "llvieweruictrlfactory.h" 41#include "lluictrlfactory.h"
42 42
43// project includes 43// project includes
44#include "llagent.h" 44#include "llagent.h"
@@ -58,6 +58,9 @@
58#include "llappviewer.h" 58#include "llappviewer.h"
59#include "llurlsimstring.h" 59#include "llurlsimstring.h"
60#include "llappviewer.h" 60#include "llappviewer.h"
61
62#include "llcheckboxctrl.h"
63#include "llradiogroup.h"
61// 64//
62// Imported globals 65// Imported globals
63// 66//
@@ -73,6 +76,13 @@ void set_start_location(LLUICtrl* ctrl, void* data);
73// 76//
74// Static functions 77// Static functions
75// 78//
79static void set_render_name_fade_out(LLUICtrl* ctrl, void* data)
80{
81 LLComboBox* combo = (LLComboBox*)ctrl;
82 if (!combo) return;
83 gSavedSettings.setS32("RenderName", combo->getCurrentIndex() );
84}
85
76void set_crash_behavior(LLUICtrl* ctrl, void* data) 86void set_crash_behavior(LLUICtrl* ctrl, void* data)
77{ 87{
78 LLAppViewer::instance()->setCrashBehavior(((LLComboBox*) ctrl)->getCurrentIndex()); 88 LLAppViewer::instance()->setCrashBehavior(((LLComboBox*) ctrl)->getCurrentIndex());
@@ -95,37 +105,18 @@ void LLPanelGeneral::set_specific_start_location(LLLineEditor* line_editor, void
95 105
96LLPanelGeneral::LLPanelGeneral() 106LLPanelGeneral::LLPanelGeneral()
97{ 107{
98 gUICtrlFactory->buildPanel(this, "panel_preferences_general.xml"); 108 LLUICtrlFactory::getInstance()->buildPanel(this, "panel_preferences_general.xml");
99} 109}
100 110
101BOOL LLPanelGeneral::postBuild() 111BOOL LLPanelGeneral::postBuild()
102{ 112{
103 requires("location_combobox", WIDGET_TYPE_COMBO_BOX); 113 childSetCommitCallback("fade_out_combobox", set_render_name_fade_out);
104 requires("show_location_checkbox", WIDGET_TYPE_CHECKBOX);
105 requires("fade_out_radio", WIDGET_TYPE_RADIO_GROUP);
106 requires("show_my_name_checkbox", WIDGET_TYPE_CHECKBOX);
107 requires("show_my_title_checkbox", WIDGET_TYPE_CHECKBOX);
108 requires("small_avatar_names_checkbox", WIDGET_TYPE_CHECKBOX);
109 requires("effect_color_swatch", WIDGET_TYPE_COLOR_SWATCH);
110 requires("UI Scale", WIDGET_TYPE_SLIDER);
111 requires("ui_auto_scale", WIDGET_TYPE_CHECKBOX);
112 requires("afk_timeout_spinner", WIDGET_TYPE_SPINNER);
113 requires("rotate_mini_map_checkbox", WIDGET_TYPE_CHECKBOX);
114 requires("friends_online_notify_checkbox", WIDGET_TYPE_CHECKBOX);
115 requires("notify_money_change_checkbox", WIDGET_TYPE_CHECKBOX);
116 requires("use_system_color_picker_checkbox", WIDGET_TYPE_CHECKBOX);
117 requires("crash_behavior_combobox", WIDGET_TYPE_COMBO_BOX);
118
119 if (!checkRequirements())
120 {
121 return FALSE;
122 }
123 114
124 LLString region_name_prompt = getString("region_name_prompt"); 115 LLString region_name_prompt = getString("region_name_prompt");
125 116
126 117
127 // location combobox 118 // location combobox
128 LLComboBox* combo = LLUICtrlFactory::getComboBoxByName(this, "location_combobox"); 119 LLComboBox* combo = getChild<LLComboBox>( "location_combobox");
129 if (combo) 120 if (combo)
130 { 121 {
131 if (!LLURLSimString::sInstance.mSimString.empty()) 122 if (!LLURLSimString::sInstance.mSimString.empty())
@@ -151,7 +142,7 @@ BOOL LLPanelGeneral::postBuild()
151 // Show location on login screen 142 // Show location on login screen
152 childSetCommitCallback("show_location_checkbox", &LLPanelGeneral::clickShowStartLocation); 143 childSetCommitCallback("show_location_checkbox", &LLPanelGeneral::clickShowStartLocation);
153 144
154 combo = LLUICtrlFactory::getComboBoxByName(this, "crash_behavior_combobox"); 145 combo = getChild<LLComboBox>( "crash_behavior_combobox");
155 if (combo) 146 if (combo)
156 { 147 {
157 combo->setCurrentByIndex( LLAppViewer::instance()->getCrashBehavior() ); 148 combo->setCurrentByIndex( LLAppViewer::instance()->getCrashBehavior() );
@@ -175,7 +166,7 @@ void LLPanelGeneral::refresh()
175{ 166{
176 LLPanel::refresh(); 167 LLPanel::refresh();
177 BOOL login_last = gSavedSettings.getBOOL("LoginLastLocation"); 168 BOOL login_last = gSavedSettings.getBOOL("LoginLastLocation");
178 LLComboBox* combo = LLUICtrlFactory::getComboBoxByName(this, "location_combobox"); 169 LLComboBox* combo = getChild<LLComboBox>( "location_combobox");
179 if (combo) 170 if (combo)
180 { 171 {
181 if (!LLURLSimString::sInstance.mSimString.empty()) 172 if (!LLURLSimString::sInstance.mSimString.empty())
@@ -191,13 +182,19 @@ void LLPanelGeneral::refresh()
191 } 182 }
192 183
193 mCrashBehavior = LLAppViewer::instance()->getCrashBehavior(); 184 mCrashBehavior = LLAppViewer::instance()->getCrashBehavior();
194 combo = LLUICtrlFactory::getComboBoxByName(this, "crash_behavior_combobox"); 185 combo = getChild<LLComboBox>( "crash_behavior_combobox");
195 if (combo) 186 if (combo)
196 { 187 {
197 combo->setCurrentByIndex( LLAppViewer::instance()->getCrashBehavior() ); 188 combo->setCurrentByIndex( LLAppViewer::instance()->getCrashBehavior() );
198 } 189 }
199 190
200 mRenderName = gSavedSettings.getS32("RenderName"); 191 mRenderName = gSavedSettings.getS32("RenderName");
192 combo = getChild<LLComboBox>("fade_out_combobox");
193 if (combo)
194 {
195 combo->setCurrentByIndex( mRenderName );
196 }
197
201 mRenderNameHideSelf = gSavedSettings.getBOOL("RenderNameHideSelf"); 198 mRenderNameHideSelf = gSavedSettings.getBOOL("RenderNameHideSelf");
202 mSmallAvatarNames = gSavedSettings.getBOOL("SmallAvatarNames"); 199 mSmallAvatarNames = gSavedSettings.getBOOL("SmallAvatarNames");
203 mRenderHideGroupTitle = gSavedSettings.getBOOL("RenderHideGroupTitle"); 200 mRenderHideGroupTitle = gSavedSettings.getBOOL("RenderHideGroupTitle");
@@ -239,9 +236,6 @@ void LLPanelGeneral::cancel()
239 LLURLSimString::setString(mLoginLocation); 236 LLURLSimString::setString(mLoginLocation);
240 237
241 LLAppViewer::instance()->setCrashBehavior(mCrashBehavior); 238 LLAppViewer::instance()->setCrashBehavior(mCrashBehavior);
242
243 // make listener
244 //gAFKTimeout = away_timeout;
245} 239}
246 240
247void LLPanelGeneral::clickShowStartLocation(LLUICtrl*, void* user_data) 241void LLPanelGeneral::clickShowStartLocation(LLUICtrl*, void* user_data)
diff --git a/linden/indra/newview/llpanelgroup.cpp b/linden/indra/newview/llpanelgroup.cpp
index b6f4681..84f6594 100644
--- a/linden/indra/newview/llpanelgroup.cpp
+++ b/linden/indra/newview/llpanelgroup.cpp
@@ -42,7 +42,7 @@
42#include "lltabcontainer.h" 42#include "lltabcontainer.h"
43#include "lltextbox.h" 43#include "lltextbox.h"
44#include "llviewermessage.h" 44#include "llviewermessage.h"
45#include "llvieweruictrlfactory.h" 45#include "lluictrlfactory.h"
46#include "llviewerwindow.h" 46#include "llviewerwindow.h"
47#include "llappviewer.h" 47#include "llappviewer.h"
48 48
@@ -160,16 +160,16 @@ LLPanelGroup::LLPanelGroup(const std::string& filename,
160 mFactoryMap["roles_sub_tab"] = LLCallbackMap(LLPanelGroupRolesSubTab::createTab, &mID); 160 mFactoryMap["roles_sub_tab"] = LLCallbackMap(LLPanelGroupRolesSubTab::createTab, &mID);
161 mFactoryMap["actions_sub_tab"] = LLCallbackMap(LLPanelGroupActionsSubTab::createTab, &mID); 161 mFactoryMap["actions_sub_tab"] = LLCallbackMap(LLPanelGroupActionsSubTab::createTab, &mID);
162 162
163 gGroupMgr->addObserver(this); 163 LLGroupMgr::getInstance()->addObserver(this);
164 164
165 // Pass on construction of this panel to the control factory. 165 // Pass on construction of this panel to the control factory.
166 gUICtrlFactory->buildPanel(this, filename, &getFactoryMap()); 166 LLUICtrlFactory::getInstance()->buildPanel(this, filename, &getFactoryMap());
167 mFilename = filename; 167 mFilename = filename;
168} 168}
169 169
170LLPanelGroup::~LLPanelGroup() 170LLPanelGroup::~LLPanelGroup()
171{ 171{
172 gGroupMgr->removeObserver(this); 172 LLGroupMgr::getInstance()->removeObserver(this);
173 173
174 int i; 174 int i;
175 int tab_count = mTabContainer->getTabCount(); 175 int tab_count = mTabContainer->getTabCount();
@@ -360,9 +360,9 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)
360{ 360{
361 LLRect rect(getRect()); 361 LLRect rect(getRect());
362 362
363 gGroupMgr->removeObserver(this); 363 LLGroupMgr::getInstance()->removeObserver(this);
364 mID = group_id; 364 mID = group_id;
365 gGroupMgr->addObserver(this); 365 LLGroupMgr::getInstance()->addObserver(this);
366 //TODO: this is really bad, we should add a method 366 //TODO: this is really bad, we should add a method
367 // where the panels can just update themselves 367 // where the panels can just update themselves
368 // on a group id change. Similar to update() but with a group 368 // on a group id change. Similar to update() but with a group
@@ -371,7 +371,7 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)
371 // For now, rebuild panel 371 // For now, rebuild panel
372 //delete children and rebuild panel 372 //delete children and rebuild panel
373 deleteAllChildren(); 373 deleteAllChildren();
374 gUICtrlFactory->buildPanel(this, mFilename, &getFactoryMap()); 374 LLUICtrlFactory::getInstance()->buildPanel(this, mFilename, &getFactoryMap());
375} 375}
376 376
377void LLPanelGroup::selectTab(std::string tab_name) 377void LLPanelGroup::selectTab(std::string tab_name)
@@ -603,7 +603,7 @@ void LLPanelGroup::draw()
603 603
604void LLPanelGroup::refreshData() 604void LLPanelGroup::refreshData()
605{ 605{
606 gGroupMgr->clearGroupData(getID()); 606 LLGroupMgr::getInstance()->clearGroupData(getID());
607 mCurrentTab->activate(); 607 mCurrentTab->activate();
608 608
609 // 5 second timeout 609 // 5 second timeout
@@ -616,14 +616,13 @@ void LLPanelGroup::close()
616{ 616{
617 // Pass this to the parent, if it is a floater. 617 // Pass this to the parent, if it is a floater.
618 LLView* viewp = getParent(); 618 LLView* viewp = getParent();
619 if (viewp 619 LLFloater* floaterp = dynamic_cast<LLFloater*>(viewp);
620 && WIDGET_TYPE_FLOATER == viewp->getWidgetType()) 620 if (floaterp)
621 { 621 {
622 // First, set the force close flag, since the floater 622 // First, set the force close flag, since the floater
623 // will be asking us whether it can close. 623 // will be asking us whether it can close.
624 mForceClose = TRUE; 624 mForceClose = TRUE;
625 // Tell the parent floater to close. 625 // Tell the parent floater to close.
626 LLFloater* floaterp = (LLFloater*) viewp;
627 floaterp->close(); 626 floaterp->close();
628 } 627 }
629} 628}
diff --git a/linden/indra/newview/llpanelgroupgeneral.cpp b/linden/indra/newview/llpanelgroupgeneral.cpp
index e2572f1..1709ad2 100644
--- a/linden/indra/newview/llpanelgroupgeneral.cpp
+++ b/linden/indra/newview/llpanelgroupgeneral.cpp
@@ -33,7 +33,7 @@
33 33
34#include "llpanelgroupgeneral.h" 34#include "llpanelgroupgeneral.h"
35 35
36#include "llvieweruictrlfactory.h" 36#include "lluictrlfactory.h"
37#include "llagent.h" 37#include "llagent.h"
38#include "roles_constants.h" 38#include "roles_constants.h"
39#include "llfloateravatarinfo.h" 39#include "llfloateravatarinfo.h"
@@ -304,7 +304,7 @@ void LLPanelGroupGeneral::onCommitTitle(LLUICtrl* ctrl, void* data)
304{ 304{
305 LLPanelGroupGeneral* self = (LLPanelGroupGeneral*)data; 305 LLPanelGroupGeneral* self = (LLPanelGroupGeneral*)data;
306 if (self->mGroupID.isNull() || !self->mAllowEdit) return; 306 if (self->mGroupID.isNull() || !self->mAllowEdit) return;
307 gGroupMgr->sendGroupTitleUpdate(self->mGroupID,self->mComboActiveTitle->getCurrentID()); 307 LLGroupMgr::getInstance()->sendGroupTitleUpdate(self->mGroupID,self->mComboActiveTitle->getCurrentID());
308 self->update(GC_TITLES); 308 self->update(GC_TITLES);
309} 309}
310 310
@@ -329,7 +329,7 @@ void LLPanelGroupGeneral::onClickJoin(void *userdata)
329 329
330 lldebugs << "joining group: " << self->mGroupID << llendl; 330 lldebugs << "joining group: " << self->mGroupID << llendl;
331 331
332 LLGroupMgrGroupData* gdatap = gGroupMgr->getGroupData(self->mGroupID); 332 LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(self->mGroupID);
333 333
334 if (gdatap) 334 if (gdatap)
335 { 335 {
@@ -350,7 +350,7 @@ void LLPanelGroupGeneral::onClickJoin(void *userdata)
350 } 350 }
351 else 351 else
352 { 352 {
353 llwarns << "gGroupMgr->getGroupData(" << self->mGroupID 353 llwarns << "LLGroupMgr::getInstance()->getGroupData(" << self->mGroupID
354 << ") was NULL" << llendl; 354 << ") was NULL" << llendl;
355 } 355 }
356} 356}
@@ -366,7 +366,7 @@ void LLPanelGroupGeneral::joinDlgCB(S32 which, void *userdata)
366 return; 366 return;
367 } 367 }
368 368
369 gGroupMgr->sendGroupMemberJoin(self->mGroupID); 369 LLGroupMgr::getInstance()->sendGroupMemberJoin(self->mGroupID);
370} 370}
371 371
372// static 372// static
@@ -392,17 +392,17 @@ bool LLPanelGroupGeneral::needsApply(LLString& mesg)
392 392
393void LLPanelGroupGeneral::activate() 393void LLPanelGroupGeneral::activate()
394{ 394{
395 LLGroupMgrGroupData* gdatap = gGroupMgr->getGroupData(mGroupID); 395 LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
396 if (mGroupID.notNull() 396 if (mGroupID.notNull()
397 && (!gdatap || mFirstUse)) 397 && (!gdatap || mFirstUse))
398 { 398 {
399 gGroupMgr->sendGroupTitlesRequest(mGroupID); 399 LLGroupMgr::getInstance()->sendGroupTitlesRequest(mGroupID);
400 gGroupMgr->sendGroupPropertiesRequest(mGroupID); 400 LLGroupMgr::getInstance()->sendGroupPropertiesRequest(mGroupID);
401 401
402 402
403 if (!gdatap || !gdatap->isMemberDataComplete() ) 403 if (!gdatap || !gdatap->isMemberDataComplete() )
404 { 404 {
405 gGroupMgr->sendGroupMembersRequest(mGroupID); 405 LLGroupMgr::getInstance()->sendGroupMembersRequest(mGroupID);
406 } 406 }
407 407
408 mFirstUse = FALSE; 408 mFirstUse = FALSE;
@@ -446,12 +446,12 @@ bool LLPanelGroupGeneral::apply(LLString& mesg)
446 LLString::format_map_t args; 446 LLString::format_map_t args;
447 args["[MESSAGE]"] = mConfirmGroupCreateStr; 447 args["[MESSAGE]"] = mConfirmGroupCreateStr;
448 gViewerWindow->alertXml("GenericAlertYesCancel", args, 448 gViewerWindow->alertXml("GenericAlertYesCancel", args,
449 createGroupCallback,this); 449 createGroupCallback,new LLHandle<LLPanel>(getHandle()));
450 450
451 return false; 451 return false;
452 } 452 }
453 453
454 LLGroupMgrGroupData* gdatap = gGroupMgr->getGroupData(mGroupID); 454 LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
455 455
456 if (!gdatap) 456 if (!gdatap)
457 { 457 {
@@ -496,7 +496,7 @@ bool LLPanelGroupGeneral::apply(LLString& mesg)
496 496
497 if (can_change_ident || can_change_member_opts) 497 if (can_change_ident || can_change_member_opts)
498 { 498 {
499 gGroupMgr->sendUpdateGroupInfo(mGroupID); 499 LLGroupMgr::getInstance()->sendUpdateGroupInfo(mGroupID);
500 } 500 }
501 } 501 }
502 502
@@ -526,7 +526,10 @@ void LLPanelGroupGeneral::cancel()
526// static 526// static
527void LLPanelGroupGeneral::createGroupCallback(S32 option, void* userdata) 527void LLPanelGroupGeneral::createGroupCallback(S32 option, void* userdata)
528{ 528{
529 LLPanelGroupGeneral* self = (LLPanelGroupGeneral*)userdata; 529 LLHandle<LLPanel> panel_handle = *(LLHandle<LLPanel>*)userdata;
530 delete (LLHandle<LLPanel>*)userdata;
531
532 LLPanelGroupGeneral* self = dynamic_cast<LLPanelGroupGeneral*>(panel_handle.get());
530 if (!self) return; 533 if (!self) return;
531 534
532 switch(option) 535 switch(option)
@@ -537,7 +540,7 @@ void LLPanelGroupGeneral::createGroupCallback(S32 option, void* userdata)
537 U32 enrollment_fee = (self->mCtrlEnrollmentFee->get() ? 540 U32 enrollment_fee = (self->mCtrlEnrollmentFee->get() ?
538 (U32) self->mSpinEnrollmentFee->get() : 0); 541 (U32) self->mSpinEnrollmentFee->get() : 0);
539 542
540 gGroupMgr->sendCreateGroupRequest(self->mGroupNameEditor->getText(), 543 LLGroupMgr::getInstance()->sendCreateGroupRequest(self->mGroupNameEditor->getText(),
541 self->mEditCharter->getText(), 544 self->mEditCharter->getText(),
542 self->mCtrlShowInGroupList->get(), 545 self->mCtrlShowInGroupList->get(),
543 self->mInsignia->getImageAssetID(), 546 self->mInsignia->getImageAssetID(),
@@ -563,7 +566,7 @@ void LLPanelGroupGeneral::update(LLGroupChange gc)
563{ 566{
564 if (mGroupID.isNull()) return; 567 if (mGroupID.isNull()) return;
565 568
566 LLGroupMgrGroupData* gdatap = gGroupMgr->getGroupData(mGroupID); 569 LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
567 570
568 if (!gdatap) return; 571 if (!gdatap) return;
569 572
@@ -734,7 +737,7 @@ void LLPanelGroupGeneral::updateMembers()
734{ 737{
735 mPendingMemberUpdate = FALSE; 738 mPendingMemberUpdate = FALSE;
736 739
737 LLGroupMgrGroupData* gdatap = gGroupMgr->getGroupData(mGroupID); 740 LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
738 741
739 if (!mListVisibleMembers || !gdatap 742 if (!mListVisibleMembers || !gdatap
740 || !gdatap->isMemberDataComplete()) 743 || !gdatap->isMemberDataComplete())
diff --git a/linden/indra/newview/llpanelgroupinvite.cpp b/linden/indra/newview/llpanelgroupinvite.cpp
index c393854..e051bb6 100644
--- a/linden/indra/newview/llpanelgroupinvite.cpp
+++ b/linden/indra/newview/llpanelgroupinvite.cpp
@@ -42,7 +42,8 @@
42#include "lltextbox.h" 42#include "lltextbox.h"
43#include "llviewerobject.h" 43#include "llviewerobject.h"
44#include "llviewerobjectlist.h" 44#include "llviewerobjectlist.h"
45#include "llvieweruictrlfactory.h" 45#include "lluictrlfactory.h"
46#include "llviewerwindow.h"
46 47
47class LLPanelGroupInvite::impl 48class LLPanelGroupInvite::impl
48{ 49{
@@ -65,6 +66,7 @@ public:
65 static void callbackAddUsers(const std::vector<std::string>& names, 66 static void callbackAddUsers(const std::vector<std::string>& names,
66 const std::vector<LLUUID>& agent_ids, 67 const std::vector<LLUUID>& agent_ids,
67 void* user_data); 68 void* user_data);
69 static void inviteOwnerCallback(S32 option, void* userdata);
68 70
69public: 71public:
70 LLUUID mGroupID; 72 LLUUID mGroupID;
@@ -75,6 +77,8 @@ public:
75 LLButton *mOKButton; 77 LLButton *mOKButton;
76 LLButton *mRemoveButton; 78 LLButton *mRemoveButton;
77 LLTextBox *mGroupName; 79 LLTextBox *mGroupName;
80 LLString mOwnerWarning;
81 bool mConfirmedOwnerInvite;
78 82
79 void (*mCloseCallback)(void* data); 83 void (*mCloseCallback)(void* data);
80 84
@@ -82,16 +86,18 @@ public:
82}; 86};
83 87
84 88
85LLPanelGroupInvite::impl::impl(const LLUUID& group_id) 89LLPanelGroupInvite::impl::impl(const LLUUID& group_id):
90 mGroupID( group_id ),
91 mLoadingText (),
92 mInvitees ( NULL ),
93 mRoleNames( NULL ),
94 mOKButton ( NULL ),
95 mRemoveButton( NULL ),
96 mGroupName( NULL ),
97 mConfirmedOwnerInvite( false ),
98 mCloseCallback( NULL ),
99 mCloseCallbackUserData( NULL )
86{ 100{
87 mGroupID = group_id;
88
89 mInvitees = NULL;
90 mRoleNames = NULL;
91 mRemoveButton = NULL;
92
93 mCloseCallback = NULL;
94 mCloseCallbackUserData = NULL;
95} 101}
96 102
97LLPanelGroupInvite::impl::~impl() 103LLPanelGroupInvite::impl::~impl()
@@ -140,12 +146,23 @@ void LLPanelGroupInvite::impl::submitInvitations()
140{ 146{
141 std::map<LLUUID, LLUUID> role_member_pairs; 147 std::map<LLUUID, LLUUID> role_member_pairs;
142 148
149 LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
150
143 // Default to everyone role. 151 // Default to everyone role.
144 LLUUID role_id = LLUUID::null; 152 LLUUID role_id = LLUUID::null;
145 153
146 if (mRoleNames) 154 if (mRoleNames)
147 { 155 {
148 role_id = mRoleNames->getCurrentID(); 156 role_id = mRoleNames->getCurrentID();
157
158 // owner role: display confirmation and wait for callback
159 if ((role_id == gdatap->mOwnerRole) && (!mConfirmedOwnerInvite))
160 {
161 LLString::format_map_t args;
162 args["[MESSAGE]"] = mOwnerWarning;
163 gViewerWindow->alertXml("GenericAlertYesCancel", args, inviteOwnerCallback, this);
164 return; // we'll be called again if user confirms
165 }
149 } 166 }
150 167
151 //loop over the users 168 //loop over the users
@@ -157,12 +174,34 @@ void LLPanelGroupInvite::impl::submitInvitations()
157 role_member_pairs[item->getUUID()] = role_id; 174 role_member_pairs[item->getUUID()] = role_id;
158 } 175 }
159 176
160 gGroupMgr->sendGroupMemberInvites(mGroupID, role_member_pairs); 177 LLGroupMgr::getInstance()->sendGroupMemberInvites(mGroupID, role_member_pairs);
161 178
162 //then close 179 //then close
163 (*mCloseCallback)(mCloseCallbackUserData); 180 (*mCloseCallback)(mCloseCallbackUserData);
164} 181}
165 182
183//static
184void LLPanelGroupInvite::impl::inviteOwnerCallback(S32 option, void* userdata)
185{
186 LLPanelGroupInvite::impl* self = (LLPanelGroupInvite::impl*)userdata;
187 if (!self) return;
188
189 switch(option)
190 {
191 case 0:
192 // user confirmed that they really want a new group owner
193 self->mConfirmedOwnerInvite = true;
194 self->submitInvitations();
195 break;
196 case 1:
197 // fall through
198 default:
199 break;
200 }
201}
202
203
204
166void LLPanelGroupInvite::impl::addRoleNames(LLGroupMgrGroupData* gdatap) 205void LLPanelGroupInvite::impl::addRoleNames(LLGroupMgrGroupData* gdatap)
167{ 206{
168 LLGroupMgrGroupData::member_list_t::iterator agent_iter = 207 LLGroupMgrGroupData::member_list_t::iterator agent_iter =
@@ -323,7 +362,7 @@ LLPanelGroupInvite::LLPanelGroupInvite(const std::string& name,
323 std::string panel_def_file; 362 std::string panel_def_file;
324 363
325 // Pass on construction of this panel to the control factory. 364 // Pass on construction of this panel to the control factory.
326 gUICtrlFactory->buildPanel(this, "panel_group_invite.xml", &getFactoryMap()); 365 LLUICtrlFactory::getInstance()->buildPanel(this, "panel_group_invite.xml", &getFactoryMap());
327} 366}
328 367
329LLPanelGroupInvite::~LLPanelGroupInvite() 368LLPanelGroupInvite::~LLPanelGroupInvite()
@@ -412,8 +451,8 @@ void LLPanelGroupInvite::update()
412 451
413void LLPanelGroupInvite::updateLists() 452void LLPanelGroupInvite::updateLists()
414{ 453{
415 LLGroupMgrGroupData* gdatap = gGroupMgr->getGroupData(mImplementation->mGroupID); 454 LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mImplementation->mGroupID);
416 BOOL waiting = FALSE; 455 bool waiting = false;
417 456
418 if (gdatap) 457 if (gdatap)
419 { 458 {
@@ -426,7 +465,7 @@ void LLPanelGroupInvite::updateLists()
426 } 465 }
427 else 466 else
428 { 467 {
429 waiting = TRUE; 468 waiting = true;
430 } 469 }
431 if (gdatap->isRoleDataComplete() && gdatap->isMemberDataComplete()) 470 if (gdatap->isRoleDataComplete() && gdatap->isMemberDataComplete())
432 { 471 {
@@ -442,21 +481,21 @@ void LLPanelGroupInvite::updateLists()
442 } 481 }
443 else 482 else
444 { 483 {
445 waiting = TRUE; 484 waiting = true;
446 } 485 }
447 } 486 }
448 else 487 else
449 { 488 {
450 waiting = TRUE; 489 waiting = true;
451 } 490 }
452 491
453 if (waiting) 492 if (waiting)
454 { 493 {
455 if (!mPendingUpdate) 494 if (!mPendingUpdate)
456 { 495 {
457 gGroupMgr->sendGroupPropertiesRequest(mImplementation->mGroupID); 496 LLGroupMgr::getInstance()->sendGroupPropertiesRequest(mImplementation->mGroupID);
458 gGroupMgr->sendGroupMembersRequest(mImplementation->mGroupID); 497 LLGroupMgr::getInstance()->sendGroupMembersRequest(mImplementation->mGroupID);
459 gGroupMgr->sendGroupRoleDataRequest(mImplementation->mGroupID); 498 LLGroupMgr::getInstance()->sendGroupRoleDataRequest(mImplementation->mGroupID);
460 } 499 }
461 mPendingUpdate = TRUE; 500 mPendingUpdate = TRUE;
462 } 501 }
@@ -523,6 +562,8 @@ BOOL LLPanelGroupInvite::postBuild()
523 button->setCallbackUserData(mImplementation); 562 button->setCallbackUserData(mImplementation);
524 } 563 }
525 564
565 mImplementation->mOwnerWarning = getString("confirm_invite_owner_str");
566
526 update(); 567 update();
527 568
528 return (mImplementation->mRoleNames && 569 return (mImplementation->mRoleNames &&
diff --git a/linden/indra/newview/llpanelgrouplandmoney.cpp b/linden/indra/newview/llpanelgrouplandmoney.cpp
index 7cfe460..419d6d2 100644
--- a/linden/indra/newview/llpanelgrouplandmoney.cpp
+++ b/linden/indra/newview/llpanelgrouplandmoney.cpp
@@ -46,7 +46,7 @@
46#include "lltextbox.h" 46#include "lltextbox.h"
47#include "lltabcontainer.h" 47#include "lltabcontainer.h"
48#include "lltransactiontypes.h" 48#include "lltransactiontypes.h"
49#include "llvieweruictrlfactory.h" 49#include "lluictrlfactory.h"
50 50
51#include "llstatusbar.h" 51#include "llstatusbar.h"
52#include "llfloaterworldmap.h" 52#include "llfloaterworldmap.h"
diff --git a/linden/indra/newview/llpanelgroupnotices.cpp b/linden/indra/newview/llpanelgroupnotices.cpp
index 30709af..846a4c1 100644
--- a/linden/indra/newview/llpanelgroupnotices.cpp
+++ b/linden/indra/newview/llpanelgroupnotices.cpp
@@ -76,8 +76,6 @@ public:
76 76
77 // 77 //
78 // LLView functionality 78 // LLView functionality
79 virtual EWidgetType getWidgetType() const;
80 virtual LLString getWidgetTag() const;
81 virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, 79 virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
82 EDragAndDropType cargo_type, 80 EDragAndDropType cargo_type,
83 void* cargo_data, 81 void* cargo_data,
@@ -96,16 +94,6 @@ LLGroupDropTarget::LLGroupDropTarget(const std::string& name, const LLRect& rect
96{ 94{
97} 95}
98 96
99EWidgetType LLGroupDropTarget::getWidgetType() const
100{
101 return WIDGET_TYPE_DONTCARE;
102}
103
104LLString LLGroupDropTarget::getWidgetTag() const
105{
106 return LL_GROUP_DROP_TARGET_TAG;
107}
108
109void LLGroupDropTarget::doDrop(EDragAndDropType cargo_type, void* cargo_data) 97void LLGroupDropTarget::doDrop(EDragAndDropType cargo_type, void* cargo_data)
110{ 98{
111 llinfos << "LLGroupDropTarget::doDrop()" << llendl; 99 llinfos << "LLGroupDropTarget::doDrop()" << llendl;
@@ -328,12 +316,12 @@ void LLPanelGroupNotices::setItem(LLPointer<LLInventoryItem> inv_item)
328 item_is_multi = TRUE; 316 item_is_multi = TRUE;
329 }; 317 };
330 318
331 LLViewerImage* item_icon = get_item_icon(inv_item->getType(), 319 LLString icon_name = get_item_icon_name(inv_item->getType(),
332 inv_item->getInventoryType(), 320 inv_item->getInventoryType(),
333 inv_item->getFlags(), 321 inv_item->getFlags(),
334 item_is_multi ); 322 item_is_multi );
335 323
336 mCreateInventoryIcon->setImage(item_icon->getID()); 324 mCreateInventoryIcon->setImage(icon_name);
337 mCreateInventoryIcon->setVisible(TRUE); 325 mCreateInventoryIcon->setVisible(TRUE);
338 326
339 std::stringstream ss; 327 std::stringstream ss;
@@ -486,11 +474,11 @@ void LLPanelGroupNotices::processNotices(LLMessageSystem* msg)
486 row["columns"][0]["column"] = "icon"; 474 row["columns"][0]["column"] = "icon";
487 if (has_attachment) 475 if (has_attachment)
488 { 476 {
489 LLUUID icon_id = get_item_icon_uuid( 477 LLString icon_name = get_item_icon_name(
490 (LLAssetType::EType)asset_type, 478 (LLAssetType::EType)asset_type,
491 LLInventoryType::IT_NONE,FALSE, FALSE); 479 LLInventoryType::IT_NONE,FALSE, FALSE);
492 row["columns"][0]["type"] = "icon"; 480 row["columns"][0]["type"] = "icon";
493 row["columns"][0]["value"] = icon_id; 481 row["columns"][0]["value"] = icon_name;
494 } 482 }
495 483
496 row["columns"][1]["column"] = "subject"; 484 row["columns"][1]["column"] = "subject";
@@ -556,11 +544,11 @@ void LLPanelGroupNotices::showNotice(const char* subject,
556 { 544 {
557 mInventoryOffer = inventory_offer; 545 mInventoryOffer = inventory_offer;
558 546
559 LLViewerImage* item_icon = get_item_icon(mInventoryOffer->mType, 547 LLString icon_name = get_item_icon_name(mInventoryOffer->mType,
560 LLInventoryType::IT_TEXTURE, 548 LLInventoryType::IT_TEXTURE,
561 0, FALSE); 549 0, FALSE);
562 550
563 mViewInventoryIcon->setImage(item_icon->getID()); 551 mViewInventoryIcon->setImage(icon_name);
564 mViewInventoryIcon->setVisible(TRUE); 552 mViewInventoryIcon->setVisible(TRUE);
565 553
566 std::stringstream ss; 554 std::stringstream ss;
diff --git a/linden/indra/newview/llpanelgrouproles.cpp b/linden/indra/newview/llpanelgrouproles.cpp
index 194f880..ccf776f 100644
--- a/linden/indra/newview/llpanelgrouproles.cpp
+++ b/linden/indra/newview/llpanelgrouproles.cpp
@@ -61,7 +61,7 @@ bool agentCanRemoveFromRole(const LLUUID& group_id,
61bool agentCanAddToRole(const LLUUID& group_id, 61bool agentCanAddToRole(const LLUUID& group_id,
62 const LLUUID& role_id) 62 const LLUUID& role_id)
63{ 63{
64 LLGroupMgrGroupData* gdatap = gGroupMgr->getGroupData(group_id); 64 LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(group_id);
65 if (!gdatap) 65 if (!gdatap)
66 { 66 {
67 llwarns << "agentCanAddToRole " 67 llwarns << "agentCanAddToRole "
@@ -414,14 +414,14 @@ void LLPanelGroupRoles::update(LLGroupChange gc)
414void LLPanelGroupRoles::activate() 414void LLPanelGroupRoles::activate()
415{ 415{
416 // Start requesting member and role data if needed. 416 // Start requesting member and role data if needed.
417 LLGroupMgrGroupData* gdatap = gGroupMgr->getGroupData(mGroupID); 417 LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
418 //if (!gdatap || mFirstUse) 418 //if (!gdatap || mFirstUse)
419 { 419 {
420 // Check member data. 420 // Check member data.
421 421
422 if (!gdatap || !gdatap->isMemberDataComplete() ) 422 if (!gdatap || !gdatap->isMemberDataComplete() )
423 { 423 {
424 gGroupMgr->sendGroupMembersRequest(mGroupID); 424 LLGroupMgr::getInstance()->sendGroupMembersRequest(mGroupID);
425 } 425 }
426 426
427 // Check role data. 427 // Check role data.
@@ -430,19 +430,19 @@ void LLPanelGroupRoles::activate()
430 // Mildly hackish - clear all pending changes 430 // Mildly hackish - clear all pending changes
431 cancel(); 431 cancel();
432 432
433 gGroupMgr->sendGroupRoleDataRequest(mGroupID); 433 LLGroupMgr::getInstance()->sendGroupRoleDataRequest(mGroupID);
434 } 434 }
435 435
436 // Check role-member mapping data. 436 // Check role-member mapping data.
437 if (!gdatap || !gdatap->isRoleMemberDataComplete() ) 437 if (!gdatap || !gdatap->isRoleMemberDataComplete() )
438 { 438 {
439 gGroupMgr->sendGroupRoleMembersRequest(mGroupID); 439 LLGroupMgr::getInstance()->sendGroupRoleMembersRequest(mGroupID);
440 } 440 }
441 441
442 // Need this to get base group member powers 442 // Need this to get base group member powers
443 if (!gdatap || !gdatap->isGroupPropertiesDataComplete() ) 443 if (!gdatap || !gdatap->isGroupPropertiesDataComplete() )
444 { 444 {
445 gGroupMgr->sendGroupPropertiesRequest(mGroupID); 445 LLGroupMgr::getInstance()->sendGroupPropertiesRequest(mGroupID);
446 } 446 }
447 447
448 mFirstUse = FALSE; 448 mFirstUse = FALSE;
@@ -529,23 +529,23 @@ BOOL LLPanelGroupSubTab::postBuild()
529 bool no_recurse = false; 529 bool no_recurse = false;
530 530
531 LLIconCtrl* icon = getChild<LLIconCtrl>("power_folder_icon",no_recurse); 531 LLIconCtrl* icon = getChild<LLIconCtrl>("power_folder_icon",no_recurse);
532 if (icon && icon->getImage().notNull()) 532 if (icon && !icon->getImageName().empty())
533 { 533 {
534 mActionIcons["folder"] = icon->getImage(); 534 mActionIcons["folder"] = icon->getImageName();
535 removeChild(icon, TRUE); 535 removeChild(icon, TRUE);
536 } 536 }
537 537
538 icon = getChild<LLIconCtrl>("power_all_have_icon",no_recurse); 538 icon = getChild<LLIconCtrl>("power_all_have_icon",no_recurse);
539 if (icon && icon->getImage().notNull()) 539 if (icon && !icon->getImageName().empty())
540 { 540 {
541 mActionIcons["full"] = icon->getImage(); 541 mActionIcons["full"] = icon->getImageName();
542 removeChild(icon, TRUE); 542 removeChild(icon, TRUE);
543 } 543 }
544 544
545 icon = getChild<LLIconCtrl>("power_partial_icon",no_recurse); 545 icon = getChild<LLIconCtrl>("power_partial_icon",no_recurse);
546 if (icon && icon->getImage().notNull()) 546 if (icon && !icon->getImageName().empty())
547 { 547 {
548 mActionIcons["partial"] = icon->getImage(); 548 mActionIcons["partial"] = icon->getImageName();
549 removeChild(icon, TRUE); 549 removeChild(icon, TRUE);
550 } 550 }
551 551
@@ -679,14 +679,14 @@ void LLPanelGroupSubTab::buildActionsList(LLScrollListCtrl* ctrl,
679 BOOL filter, 679 BOOL filter,
680 BOOL is_owner_role) 680 BOOL is_owner_role)
681{ 681{
682 if (gGroupMgr->mRoleActionSets.empty()) 682 if (LLGroupMgr::getInstance()->mRoleActionSets.empty())
683 { 683 {
684 llwarns << "Can't build action list - no actions found." << llendl; 684 llwarns << "Can't build action list - no actions found." << llendl;
685 return; 685 return;
686 } 686 }
687 687
688 std::vector<LLRoleActionSet*>::iterator ras_it = gGroupMgr->mRoleActionSets.begin(); 688 std::vector<LLRoleActionSet*>::iterator ras_it = LLGroupMgr::getInstance()->mRoleActionSets.begin();
689 std::vector<LLRoleActionSet*>::iterator ras_end = gGroupMgr->mRoleActionSets.end(); 689 std::vector<LLRoleActionSet*>::iterator ras_end = LLGroupMgr::getInstance()->mRoleActionSets.end();
690 690
691 for ( ; ras_it != ras_end; ++ras_it) 691 for ( ; ras_it != ras_end; ++ras_it)
692 { 692 {
@@ -951,7 +951,7 @@ void LLPanelGroupMembersSubTab::handleMemberSelect()
951 mAssignedRolesList->deleteAllItems(); 951 mAssignedRolesList->deleteAllItems();
952 mAllowedActionsList->deleteAllItems(); 952 mAllowedActionsList->deleteAllItems();
953 953
954 LLGroupMgrGroupData* gdatap = gGroupMgr->getGroupData(mGroupID); 954 LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
955 if (!gdatap) 955 if (!gdatap)
956 { 956 {
957 llwarns << "LLPanelGroupMembersSubTab::handleMemberSelect() " 957 llwarns << "LLPanelGroupMembersSubTab::handleMemberSelect() "
@@ -1199,14 +1199,14 @@ void LLPanelGroupMembersSubTab::handleEjectMembers()
1199 1199
1200 mMembersList->deleteSelectedItems(); 1200 mMembersList->deleteSelectedItems();
1201 1201
1202 gGroupMgr->sendGroupMemberEjects(mGroupID, 1202 LLGroupMgr::getInstance()->sendGroupMemberEjects(mGroupID,
1203 selected_members); 1203 selected_members);
1204} 1204}
1205 1205
1206void LLPanelGroupMembersSubTab::handleRoleCheck(const LLUUID& role_id, 1206void LLPanelGroupMembersSubTab::handleRoleCheck(const LLUUID& role_id,
1207 LLRoleMemberChangeType type) 1207 LLRoleMemberChangeType type)
1208{ 1208{
1209 LLGroupMgrGroupData* gdatap = gGroupMgr->getGroupData(mGroupID); 1209 LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
1210 if (!gdatap) return; 1210 if (!gdatap) return;
1211 1211
1212 //add that the user is requesting to change the roles for selected 1212 //add that the user is requesting to change the roles for selected
@@ -1356,7 +1356,7 @@ void LLPanelGroupMembersSubTab::cancel()
1356 1356
1357bool LLPanelGroupMembersSubTab::apply(LLString& mesg) 1357bool LLPanelGroupMembersSubTab::apply(LLString& mesg)
1358{ 1358{
1359 LLGroupMgrGroupData* gdatap = gGroupMgr->getGroupData(mGroupID); 1359 LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
1360 if (!gdatap) 1360 if (!gdatap)
1361 { 1361 {
1362 llwarns << "Unable to get group data for group " << mGroupID << llendl; 1362 llwarns << "Unable to get group data for group " << mGroupID << llendl;
@@ -1421,7 +1421,7 @@ void LLPanelGroupMembersSubTab::applyMemberChanges()
1421{ 1421{
1422 //sucks to do a find again here, but it is in constant time, so, could 1422 //sucks to do a find again here, but it is in constant time, so, could
1423 //be worse 1423 //be worse
1424 LLGroupMgrGroupData* gdatap = gGroupMgr->getGroupData(mGroupID); 1424 LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
1425 if (!gdatap) 1425 if (!gdatap)
1426 { 1426 {
1427 llwarns << "Unable to get group data for group " << mGroupID << llendl; 1427 llwarns << "Unable to get group data for group " << mGroupID << llendl;
@@ -1446,7 +1446,7 @@ void LLPanelGroupMembersSubTab::applyMemberChanges()
1446 } 1446 }
1447 mMemberRoleChangeData.clear(); 1447 mMemberRoleChangeData.clear();
1448 1448
1449 gGroupMgr->sendGroupRoleMemberChanges(mGroupID); 1449 LLGroupMgr::getInstance()->sendGroupRoleMemberChanges(mGroupID);
1450 //force a UI update 1450 //force a UI update
1451 handleMemberSelect(); 1451 handleMemberSelect();
1452 1452
@@ -1485,7 +1485,7 @@ U64 LLPanelGroupMembersSubTab::getAgentPowersBasedOnRoleChanges(const LLUUID& ag
1485 //and then we have to build the powers up bases on the roles the agent 1485 //and then we have to build the powers up bases on the roles the agent
1486 //is in 1486 //is in
1487 1487
1488 LLGroupMgrGroupData* gdatap = gGroupMgr->getGroupData(mGroupID); 1488 LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
1489 if (!gdatap) 1489 if (!gdatap)
1490 { 1490 {
1491 llwarns << "LLPanelGroupMembersSubTab::getAgentPowersBasedOnRoleChanges() -- No group data!" << llendl; 1491 llwarns << "LLPanelGroupMembersSubTab::getAgentPowersBasedOnRoleChanges() -- No group data!" << llendl;
@@ -1598,7 +1598,7 @@ void LLPanelGroupMembersSubTab::update(LLGroupChange gc)
1598 return; 1598 return;
1599 } 1599 }
1600 1600
1601 LLGroupMgrGroupData* gdatap = gGroupMgr->getGroupData(mGroupID); 1601 LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
1602 if (!gdatap) 1602 if (!gdatap)
1603 { 1603 {
1604 llwarns << "LLPanelGroupMembersSubTab::update() -- No group data!" << llendl; 1604 llwarns << "LLPanelGroupMembersSubTab::update() -- No group data!" << llendl;
@@ -1649,7 +1649,7 @@ void LLPanelGroupMembersSubTab::updateMembers()
1649 1649
1650 lldebugs << "LLPanelGroupMembersSubTab::updateMembers()" << llendl; 1650 lldebugs << "LLPanelGroupMembersSubTab::updateMembers()" << llendl;
1651 1651
1652 LLGroupMgrGroupData* gdatap = gGroupMgr->getGroupData(mGroupID); 1652 LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
1653 if (!gdatap) 1653 if (!gdatap)
1654 { 1654 {
1655 llwarns << "LLPanelGroupMembersSubTab::updateMembers() -- No group data!" << llendl; 1655 llwarns << "LLPanelGroupMembersSubTab::updateMembers() -- No group data!" << llendl;
@@ -1856,7 +1856,7 @@ bool LLPanelGroupRolesSubTab::needsApply(LLString& mesg)
1856{ 1856{
1857 lldebugs << "LLPanelGroupRolesSubTab::needsApply()" << llendl; 1857 lldebugs << "LLPanelGroupRolesSubTab::needsApply()" << llendl;
1858 1858
1859 LLGroupMgrGroupData* gdatap = gGroupMgr->getGroupData(mGroupID); 1859 LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
1860 1860
1861 return (mHasRoleChange // Text changed in current role 1861 return (mHasRoleChange // Text changed in current role
1862 || (gdatap && gdatap->pendingRoleChanges())); // Pending role changes in the group 1862 || (gdatap && gdatap->pendingRoleChanges())); // Pending role changes in the group
@@ -1867,7 +1867,7 @@ bool LLPanelGroupRolesSubTab::apply(LLString& mesg)
1867 lldebugs << "LLPanelGroupRolesSubTab::apply()" << llendl; 1867 lldebugs << "LLPanelGroupRolesSubTab::apply()" << llendl;
1868 1868
1869 saveRoleChanges(); 1869 saveRoleChanges();
1870 gGroupMgr->sendGroupRoleChanges(mGroupID); 1870 LLGroupMgr::getInstance()->sendGroupRoleChanges(mGroupID);
1871 1871
1872 notifyObservers(); 1872 notifyObservers();
1873 1873
@@ -1877,7 +1877,7 @@ bool LLPanelGroupRolesSubTab::apply(LLString& mesg)
1877void LLPanelGroupRolesSubTab::cancel() 1877void LLPanelGroupRolesSubTab::cancel()
1878{ 1878{
1879 mHasRoleChange = FALSE; 1879 mHasRoleChange = FALSE;
1880 gGroupMgr->cancelGroupRoleChanges(mGroupID); 1880 LLGroupMgr::getInstance()->cancelGroupRoleChanges(mGroupID);
1881 1881
1882 notifyObservers(); 1882 notifyObservers();
1883} 1883}
@@ -1930,11 +1930,11 @@ void LLPanelGroupRolesSubTab::update(LLGroupChange gc)
1930 1930
1931 if (mGroupID.isNull()) return; 1931 if (mGroupID.isNull()) return;
1932 1932
1933 LLGroupMgrGroupData* gdatap = gGroupMgr->getGroupData(mGroupID); 1933 LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
1934 1934
1935 if (!gdatap || !gdatap->isRoleDataComplete()) 1935 if (!gdatap || !gdatap->isRoleDataComplete())
1936 { 1936 {
1937 gGroupMgr->sendGroupRoleDataRequest(mGroupID); 1937 LLGroupMgr::getInstance()->sendGroupRoleDataRequest(mGroupID);
1938 } 1938 }
1939 else 1939 else
1940 { 1940 {
@@ -2005,12 +2005,12 @@ void LLPanelGroupRolesSubTab::update(LLGroupChange gc)
2005 2005
2006 if (!gdatap || !gdatap->isMemberDataComplete()) 2006 if (!gdatap || !gdatap->isMemberDataComplete())
2007 { 2007 {
2008 gGroupMgr->sendGroupMembersRequest(mGroupID); 2008 LLGroupMgr::getInstance()->sendGroupMembersRequest(mGroupID);
2009 } 2009 }
2010 2010
2011 if (!gdatap || !gdatap->isRoleMemberDataComplete()) 2011 if (!gdatap || !gdatap->isRoleMemberDataComplete())
2012 { 2012 {
2013 gGroupMgr->sendGroupRoleMembersRequest(mGroupID); 2013 LLGroupMgr::getInstance()->sendGroupRoleMembersRequest(mGroupID);
2014 } 2014 }
2015 2015
2016 if ((GC_ROLE_MEMBER_DATA == gc || GC_MEMBER_DATA == gc) 2016 if ((GC_ROLE_MEMBER_DATA == gc || GC_MEMBER_DATA == gc)
@@ -2037,7 +2037,7 @@ void LLPanelGroupRolesSubTab::handleRoleSelect()
2037 mAssignedMembersList->deleteAllItems(); 2037 mAssignedMembersList->deleteAllItems();
2038 mAllowedActionsList->deleteAllItems(); 2038 mAllowedActionsList->deleteAllItems();
2039 2039
2040 LLGroupMgrGroupData* gdatap = gGroupMgr->getGroupData(mGroupID); 2040 LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
2041 if (!gdatap) 2041 if (!gdatap)
2042 { 2042 {
2043 llwarns << "LLPanelGroupRolesSubTab::handleRoleSelect() " 2043 llwarns << "LLPanelGroupRolesSubTab::handleRoleSelect() "
@@ -2118,7 +2118,7 @@ void LLPanelGroupRolesSubTab::buildMembersList()
2118{ 2118{
2119 mAssignedMembersList->deleteAllItems(); 2119 mAssignedMembersList->deleteAllItems();
2120 2120
2121 LLGroupMgrGroupData* gdatap = gGroupMgr->getGroupData(mGroupID); 2121 LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
2122 if (!gdatap) 2122 if (!gdatap)
2123 { 2123 {
2124 llwarns << "LLPanelGroupRolesSubTab::handleRoleSelect() " 2124 llwarns << "LLPanelGroupRolesSubTab::handleRoleSelect() "
@@ -2179,7 +2179,7 @@ void LLPanelGroupRolesSubTab::handleActionCheck(LLCheckBoxCtrl* check, bool forc
2179{ 2179{
2180 lldebugs << "LLPanelGroupRolesSubTab::handleActionSelect()" << llendl; 2180 lldebugs << "LLPanelGroupRolesSubTab::handleActionSelect()" << llendl;
2181 2181
2182 LLGroupMgrGroupData* gdatap = gGroupMgr->getGroupData(mGroupID); 2182 LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
2183 if (!gdatap) 2183 if (!gdatap)
2184 { 2184 {
2185 llwarns << "LLPanelGroupRolesSubTab::handleRoleSelect() " 2185 llwarns << "LLPanelGroupRolesSubTab::handleRoleSelect() "
@@ -2313,7 +2313,7 @@ void LLPanelGroupRolesSubTab::handleMemberVisibilityChange(bool value)
2313{ 2313{
2314 lldebugs << "LLPanelGroupRolesSubTab::handleMemberVisibilityChange()" << llendl; 2314 lldebugs << "LLPanelGroupRolesSubTab::handleMemberVisibilityChange()" << llendl;
2315 2315
2316 LLGroupMgrGroupData* gdatap = gGroupMgr->getGroupData(mGroupID); 2316 LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
2317 if (!gdatap) 2317 if (!gdatap)
2318 { 2318 {
2319 llwarns << "LLPanelGroupRolesSubTab::handleRoleSelect() " 2319 llwarns << "LLPanelGroupRolesSubTab::handleRoleSelect() "
@@ -2348,7 +2348,7 @@ void LLPanelGroupRolesSubTab::onCreateRole(void* user_data)
2348 2348
2349void LLPanelGroupRolesSubTab::handleCreateRole() 2349void LLPanelGroupRolesSubTab::handleCreateRole()
2350{ 2350{
2351 LLGroupMgrGroupData* gdatap = gGroupMgr->getGroupData(mGroupID); 2351 LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
2352 2352
2353 if (!gdatap) return; 2353 if (!gdatap) return;
2354 2354
@@ -2389,7 +2389,7 @@ void LLPanelGroupRolesSubTab::onDeleteRole(void* user_data)
2389 2389
2390void LLPanelGroupRolesSubTab::handleDeleteRole() 2390void LLPanelGroupRolesSubTab::handleDeleteRole()
2391{ 2391{
2392 LLGroupMgrGroupData* gdatap = gGroupMgr->getGroupData(mGroupID); 2392 LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
2393 2393
2394 if (!gdatap) return; 2394 if (!gdatap) return;
2395 2395
@@ -2416,7 +2416,7 @@ void LLPanelGroupRolesSubTab::handleDeleteRole()
2416 2416
2417void LLPanelGroupRolesSubTab::saveRoleChanges() 2417void LLPanelGroupRolesSubTab::saveRoleChanges()
2418{ 2418{
2419 LLGroupMgrGroupData* gdatap = gGroupMgr->getGroupData(mGroupID); 2419 LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
2420 2420
2421 if (!gdatap) return; 2421 if (!gdatap) return;
2422 2422
@@ -2589,7 +2589,7 @@ void LLPanelGroupActionsSubTab::handleActionSelect()
2589 mActionDescription->clear(); 2589 mActionDescription->clear();
2590 } 2590 }
2591 2591
2592 LLGroupMgrGroupData* gdatap = gGroupMgr->getGroupData(mGroupID); 2592 LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
2593 2593
2594 if (!gdatap) return; 2594 if (!gdatap) return;
2595 2595
@@ -2611,7 +2611,7 @@ void LLPanelGroupActionsSubTab::handleActionSelect()
2611 } 2611 }
2612 else 2612 else
2613 { 2613 {
2614 gGroupMgr->sendGroupMembersRequest(mGroupID); 2614 LLGroupMgr::getInstance()->sendGroupMembersRequest(mGroupID);
2615 } 2615 }
2616 2616
2617 if (gdatap->isRoleDataComplete()) 2617 if (gdatap->isRoleDataComplete())
@@ -2632,6 +2632,6 @@ void LLPanelGroupActionsSubTab::handleActionSelect()
2632 } 2632 }
2633 else 2633 else
2634 { 2634 {
2635 gGroupMgr->sendGroupRoleDataRequest(mGroupID); 2635 LLGroupMgr::getInstance()->sendGroupRoleDataRequest(mGroupID);
2636 } 2636 }
2637} 2637}
diff --git a/linden/indra/newview/llpanelgrouproles.h b/linden/indra/newview/llpanelgrouproles.h
index 5a0ea31..83052c0 100644
--- a/linden/indra/newview/llpanelgrouproles.h
+++ b/linden/indra/newview/llpanelgrouproles.h
@@ -45,7 +45,7 @@ class LLScrollListItem;
45// Forward declare for friend usage. 45// Forward declare for friend usage.
46//virtual BOOL LLPanelGroupSubTab::postBuildSubTab(LLView*); 46//virtual BOOL LLPanelGroupSubTab::postBuildSubTab(LLView*);
47 47
48typedef std::map<std::string,LLUUID> icon_map_t; 48typedef std::map<std::string,std::string> icon_map_t;
49 49
50class LLPanelGroupRoles : public LLPanelGroupTab, 50class LLPanelGroupRoles : public LLPanelGroupTab,
51 public LLPanelGroupTabObserver 51 public LLPanelGroupTabObserver
diff --git a/linden/indra/newview/llpanelgroupvoting.cpp b/linden/indra/newview/llpanelgroupvoting.cpp
index dae1eda..d58af78 100644
--- a/linden/indra/newview/llpanelgroupvoting.cpp
+++ b/linden/indra/newview/llpanelgroupvoting.cpp
@@ -1589,7 +1589,7 @@ BOOL LLPanelGroupVoting::postBuild()
1589 1589
1590void LLPanelGroupVoting::activate() 1590void LLPanelGroupVoting::activate()
1591{ 1591{
1592 gGroupMgr->sendGroupPropertiesRequest(mGroupID); 1592 LLGroupMgr::getInstance()->sendGroupPropertiesRequest(mGroupID);
1593 update(GC_ALL); 1593 update(GC_ALL);
1594 1594
1595 mImpl->setEnableListProposals(); 1595 mImpl->setEnableListProposals();
@@ -1609,7 +1609,7 @@ bool LLPanelGroupVoting::apply(LLString& mesg)
1609void LLPanelGroupVoting::update(LLGroupChange gc) 1609void LLPanelGroupVoting::update(LLGroupChange gc)
1610{ 1610{
1611 LLGroupMgrGroupData* group_datap = NULL; 1611 LLGroupMgrGroupData* group_datap = NULL;
1612 group_datap = gGroupMgr->getGroupData(mGroupID); 1612 group_datap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
1613 1613
1614 if ( group_datap ) 1614 if ( group_datap )
1615 { 1615 {
diff --git a/linden/indra/newview/llpanelinput.cpp b/linden/indra/newview/llpanelinput.cpp
index 7fac7f8..7034b1c 100644
--- a/linden/indra/newview/llpanelinput.cpp
+++ b/linden/indra/newview/llpanelinput.cpp
@@ -38,11 +38,12 @@
38#include "llrect.h" 38#include "llrect.h"
39#include "llfontgl.h" 39#include "llfontgl.h"
40#include "message.h" 40#include "message.h"
41#include "llvieweruictrlfactory.h" 41#include "lluictrlfactory.h"
42 42
43// project includes 43// project includes
44#include "llviewerwindow.h" 44#include "llviewerwindow.h"
45#include "llcheckboxctrl.h" 45#include "llcheckboxctrl.h"
46#include "llfloaterjoystick.h"
46#include "llradiogroup.h" 47#include "llradiogroup.h"
47#include "llresmgr.h" 48#include "llresmgr.h"
48#include "llspinctrl.h" 49#include "llspinctrl.h"
@@ -73,24 +74,13 @@
73 74
74LLPanelInput::LLPanelInput() 75LLPanelInput::LLPanelInput()
75{ 76{
76 gUICtrlFactory->buildPanel(this, "panel_preferences_input.xml"); 77 LLUICtrlFactory::getInstance()->buildPanel(this, "panel_preferences_input.xml");
77} 78}
78 79
79BOOL LLPanelInput::postBuild() 80BOOL LLPanelInput::postBuild()
80{ 81{
81 requires("Mouse Sensitivity", WIDGET_TYPE_SLIDER_BAR); 82 childSetAction("joystic_setup_button", onClickJoystickSetup, (void*)this);
82 requires("invert mouse", WIDGET_TYPE_CHECKBOX);
83 requires("automatic fly", WIDGET_TYPE_CHECKBOX);
84 requires("dynamic camera", WIDGET_TYPE_SLIDER);
85 requires("edit camera movement", WIDGET_TYPE_CHECKBOX);
86 requires("appearance camera movement", WIDGET_TYPE_CHECKBOX);
87 requires("avfp", WIDGET_TYPE_CHECKBOX);
88 83
89 if (!checkRequirements())
90 {
91 return FALSE;
92 }
93
94 refresh(); 84 refresh();
95 85
96 return TRUE; 86 return TRUE;
@@ -135,3 +125,15 @@ void LLPanelInput::cancel()
135 gSavedSettings.setBOOL("FirstPersonAvatarVisible", mFirstPersonAvatarVisible); 125 gSavedSettings.setBOOL("FirstPersonAvatarVisible", mFirstPersonAvatarVisible);
136} 126}
137 127
128//static
129void LLPanelInput::onClickJoystickSetup(void* user_data)
130{
131 LLPanelInput* prefs = (LLPanelInput*)user_data;
132 LLFloaterJoystick* floaterp = LLFloaterJoystick::showInstance();
133 LLFloater* parent_floater = gFloaterView->getParentFloater(prefs);
134 if (parent_floater)
135 {
136 parent_floater->addDependentFloater(floaterp, FALSE);
137 }
138}
139
diff --git a/linden/indra/newview/llpanelinput.h b/linden/indra/newview/llpanelinput.h
index c90c03c..e73e0ed 100644
--- a/linden/indra/newview/llpanelinput.h
+++ b/linden/indra/newview/llpanelinput.h
@@ -50,6 +50,9 @@ public:
50 void apply(); 50 void apply();
51 void cancel(); 51 void cancel();
52 52
53private:
54 static void onClickJoystickSetup(void* user_data);
55
53protected: 56protected:
54 F32 mMouseSensitivityVal; 57 F32 mMouseSensitivityVal;
55 BOOL mAutomaticFly; 58 BOOL mAutomaticFly;
diff --git a/linden/indra/newview/llpanelinventory.cpp b/linden/indra/newview/llpanelinventory.cpp
index 3e92760..466e2b3 100644
--- a/linden/indra/newview/llpanelinventory.cpp
+++ b/linden/indra/newview/llpanelinventory.cpp
@@ -125,7 +125,7 @@ public:
125 virtual PermissionMask getPermissionMask() const { return PERM_NONE; } 125 virtual PermissionMask getPermissionMask() const { return PERM_NONE; }
126 virtual const LLUUID& getUUID() const { return mUUID; } 126 virtual const LLUUID& getUUID() const { return mUUID; }
127 virtual U32 getCreationDate() const; 127 virtual U32 getCreationDate() const;
128 virtual LLViewerImage* getIcon() const; 128 virtual LLUIImagePtr getIcon() const;
129 virtual void openItem(); 129 virtual void openItem();
130 virtual void previewItem(); 130 virtual void previewItem();
131 virtual void selectItem() {} 131 virtual void selectItem() {}
@@ -339,7 +339,7 @@ U32 LLTaskInvFVBridge::getCreationDate() const
339 return 0; 339 return 0;
340} 340}
341 341
342LLViewerImage* LLTaskInvFVBridge::getIcon() const 342LLUIImagePtr LLTaskInvFVBridge::getIcon() const
343{ 343{
344 BOOL item_is_multi = FALSE; 344 BOOL item_is_multi = FALSE;
345 if ( mFlags & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS ) 345 if ( mFlags & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS )
@@ -700,7 +700,7 @@ public:
700 const LLUUID& uuid, 700 const LLUUID& uuid,
701 const LLString& name); 701 const LLString& name);
702 702
703 virtual LLViewerImage* getIcon() const; 703 virtual LLUIImagePtr getIcon() const;
704 virtual const LLString& getDisplayName() const { return getName(); } 704 virtual const LLString& getDisplayName() const { return getName(); }
705 virtual BOOL isItemRenameable() const; 705 virtual BOOL isItemRenameable() const;
706 virtual BOOL renameItem(const LLString& new_name); 706 virtual BOOL renameItem(const LLString& new_name);
@@ -721,10 +721,9 @@ LLTaskCategoryBridge::LLTaskCategoryBridge(
721{ 721{
722} 722}
723 723
724LLViewerImage* LLTaskCategoryBridge::getIcon() const 724LLUIImagePtr LLTaskCategoryBridge::getIcon() const
725{ 725{
726 LLString uuid_string = gViewerArt.getString("inv_folder_plain_closed.tga"); 726 return LLUI::getUIImage("inv_folder_plain_closed.tga");
727 return gImageList.getImage(LLUUID(uuid_string), MIPMAP_FALSE, TRUE);
728} 727}
729 728
730BOOL LLTaskCategoryBridge::isItemRenameable() const 729BOOL LLTaskCategoryBridge::isItemRenameable() const
@@ -799,7 +798,7 @@ BOOL LLTaskCategoryBridge::dragOrDrop(MASK mask, BOOL drop,
799 switch(cargo_type) 798 switch(cargo_type)
800 { 799 {
801 case DAD_CATEGORY: 800 case DAD_CATEGORY:
802 accept = gToolDragAndDrop->dadUpdateInventoryCategory(object,drop); 801 accept = LLToolDragAndDrop::getInstance()->dadUpdateInventoryCategory(object,drop);
803 break; 802 break;
804 case DAD_TEXTURE: 803 case DAD_TEXTURE:
805 case DAD_SOUND: 804 case DAD_SOUND:
@@ -817,8 +816,8 @@ BOOL LLTaskCategoryBridge::dragOrDrop(MASK mask, BOOL drop,
817 //accept = LLToolDragAndDrop::isInventoryDropAcceptable(object, (LLViewerInventoryItem*)cargo_data); 816 //accept = LLToolDragAndDrop::isInventoryDropAcceptable(object, (LLViewerInventoryItem*)cargo_data);
818 if(LLToolDragAndDrop::isInventoryDropAcceptable( 817 if(LLToolDragAndDrop::isInventoryDropAcceptable(
819 object, (LLViewerInventoryItem*)cargo_data) 818 object, (LLViewerInventoryItem*)cargo_data)
820 && (LLToolDragAndDrop::SOURCE_WORLD != gToolDragAndDrop->getSource()) 819 && (LLToolDragAndDrop::SOURCE_WORLD != LLToolDragAndDrop::getInstance()->getSource())
821 && (LLToolDragAndDrop::SOURCE_NOTECARD != gToolDragAndDrop->getSource())) 820 && (LLToolDragAndDrop::SOURCE_NOTECARD != LLToolDragAndDrop::getInstance()->getSource()))
822 { 821 {
823 accept = TRUE; 822 accept = TRUE;
824 } 823 }
@@ -826,8 +825,8 @@ BOOL LLTaskCategoryBridge::dragOrDrop(MASK mask, BOOL drop,
826 { 825 {
827 LLToolDragAndDrop::dropInventory(object, 826 LLToolDragAndDrop::dropInventory(object,
828 (LLViewerInventoryItem*)cargo_data, 827 (LLViewerInventoryItem*)cargo_data,
829 gToolDragAndDrop->getSource(), 828 LLToolDragAndDrop::getInstance()->getSource(),
830 gToolDragAndDrop->getSourceID()); 829 LLToolDragAndDrop::getInstance()->getSourceID());
831 } 830 }
832 break; 831 break;
833 case DAD_SCRIPT: 832 case DAD_SCRIPT:
@@ -838,8 +837,8 @@ BOOL LLTaskCategoryBridge::dragOrDrop(MASK mask, BOOL drop,
838 //accept = LLToolDragAndDrop::isInventoryDropAcceptable(object, (LLViewerInventoryItem*)cargo_data); 837 //accept = LLToolDragAndDrop::isInventoryDropAcceptable(object, (LLViewerInventoryItem*)cargo_data);
839 if(LLToolDragAndDrop::isInventoryDropAcceptable( 838 if(LLToolDragAndDrop::isInventoryDropAcceptable(
840 object, (LLViewerInventoryItem*)cargo_data) 839 object, (LLViewerInventoryItem*)cargo_data)
841 && (LLToolDragAndDrop::SOURCE_WORLD != gToolDragAndDrop->getSource()) 840 && (LLToolDragAndDrop::SOURCE_WORLD != LLToolDragAndDrop::getInstance()->getSource())
842 && (LLToolDragAndDrop::SOURCE_NOTECARD != gToolDragAndDrop->getSource())) 841 && (LLToolDragAndDrop::SOURCE_NOTECARD != LLToolDragAndDrop::getInstance()->getSource()))
843 { 842 {
844 accept = TRUE; 843 accept = TRUE;
845 } 844 }
@@ -850,8 +849,8 @@ BOOL LLTaskCategoryBridge::dragOrDrop(MASK mask, BOOL drop,
850 // inactive if the control key is being held down. 849 // inactive if the control key is being held down.
851 BOOL active = ((mask & MASK_CONTROL) == 0); 850 BOOL active = ((mask & MASK_CONTROL) == 0);
852 LLToolDragAndDrop::dropScript(object, item, active, 851 LLToolDragAndDrop::dropScript(object, item, active,
853 gToolDragAndDrop->getSource(), 852 LLToolDragAndDrop::getInstance()->getSource(),
854 gToolDragAndDrop->getSourceID()); 853 LLToolDragAndDrop::getInstance()->getSourceID());
855 } 854 }
856 break; 855 break;
857 case DAD_CALLINGCARD: 856 case DAD_CALLINGCARD:
@@ -875,7 +874,7 @@ public:
875 const LLString& name, 874 const LLString& name,
876 LLInventoryType::EType it); 875 LLInventoryType::EType it);
877 876
878 virtual LLViewerImage* getIcon() const; 877 virtual LLUIImagePtr getIcon() const;
879 virtual void openItem(); 878 virtual void openItem();
880protected: 879protected:
881 LLInventoryType::EType mInventoryType; 880 LLInventoryType::EType mInventoryType;
@@ -891,7 +890,7 @@ LLTaskTextureBridge::LLTaskTextureBridge(
891{ 890{
892} 891}
893 892
894LLViewerImage* LLTaskTextureBridge::getIcon() const 893LLUIImagePtr LLTaskTextureBridge::getIcon() const
895{ 894{
896 return get_item_icon(LLAssetType::AT_TEXTURE, mInventoryType, 0, FALSE); 895 return get_item_icon(LLAssetType::AT_TEXTURE, mInventoryType, 0, FALSE);
897} 896}
@@ -928,7 +927,7 @@ public:
928 const LLUUID& uuid, 927 const LLUUID& uuid,
929 const LLString& name); 928 const LLString& name);
930 929
931 virtual LLViewerImage* getIcon() const; 930 virtual LLUIImagePtr getIcon() const;
932 virtual void openItem(); 931 virtual void openItem();
933 virtual void performAction(LLFolderView* folder, LLInventoryModel* model, LLString action); 932 virtual void performAction(LLFolderView* folder, LLInventoryModel* model, LLString action);
934 virtual void buildContextMenu(LLMenuGL& menu, U32 flags); 933 virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
@@ -943,7 +942,7 @@ LLTaskSoundBridge::LLTaskSoundBridge(
943{ 942{
944} 943}
945 944
946LLViewerImage* LLTaskSoundBridge::getIcon() const 945LLUIImagePtr LLTaskSoundBridge::getIcon() const
947{ 946{
948 return get_item_icon(LLAssetType::AT_SOUND, LLInventoryType::IT_SOUND, 0, FALSE); 947 return get_item_icon(LLAssetType::AT_SOUND, LLInventoryType::IT_SOUND, 0, FALSE);
949} 948}
@@ -1065,7 +1064,7 @@ public:
1065 const LLUUID& uuid, 1064 const LLUUID& uuid,
1066 const LLString& name); 1065 const LLString& name);
1067 1066
1068 virtual LLViewerImage* getIcon() const; 1067 virtual LLUIImagePtr getIcon() const;
1069}; 1068};
1070 1069
1071LLTaskLandmarkBridge::LLTaskLandmarkBridge( 1070LLTaskLandmarkBridge::LLTaskLandmarkBridge(
@@ -1076,7 +1075,7 @@ LLTaskLandmarkBridge::LLTaskLandmarkBridge(
1076{ 1075{
1077} 1076}
1078 1077
1079LLViewerImage* LLTaskLandmarkBridge::getIcon() const 1078LLUIImagePtr LLTaskLandmarkBridge::getIcon() const
1080{ 1079{
1081 return get_item_icon(LLAssetType::AT_LANDMARK, LLInventoryType::IT_LANDMARK, 0, FALSE); 1080 return get_item_icon(LLAssetType::AT_LANDMARK, LLInventoryType::IT_LANDMARK, 0, FALSE);
1082} 1081}
@@ -1094,7 +1093,7 @@ public:
1094 const LLUUID& uuid, 1093 const LLUUID& uuid,
1095 const LLString& name); 1094 const LLString& name);
1096 1095
1097 virtual LLViewerImage* getIcon() const; 1096 virtual LLUIImagePtr getIcon() const;
1098 virtual BOOL isItemRenameable() const; 1097 virtual BOOL isItemRenameable() const;
1099 virtual BOOL renameItem(const LLString& new_name); 1098 virtual BOOL renameItem(const LLString& new_name);
1100}; 1099};
@@ -1107,7 +1106,7 @@ LLTaskCallingCardBridge::LLTaskCallingCardBridge(
1107{ 1106{
1108} 1107}
1109 1108
1110LLViewerImage* LLTaskCallingCardBridge::getIcon() const 1109LLUIImagePtr LLTaskCallingCardBridge::getIcon() const
1111{ 1110{
1112 return get_item_icon(LLAssetType::AT_CALLINGCARD, LLInventoryType::IT_CALLINGCARD, 0, FALSE); 1111 return get_item_icon(LLAssetType::AT_CALLINGCARD, LLInventoryType::IT_CALLINGCARD, 0, FALSE);
1113} 1112}
@@ -1135,7 +1134,7 @@ public:
1135 const LLUUID& uuid, 1134 const LLUUID& uuid,
1136 const LLString& name); 1135 const LLString& name);
1137 1136
1138 virtual LLViewerImage* getIcon() const; 1137 virtual LLUIImagePtr getIcon() const;
1139 //static BOOL enableIfCopyable( void* userdata ); 1138 //static BOOL enableIfCopyable( void* userdata );
1140}; 1139};
1141 1140
@@ -1147,7 +1146,7 @@ LLTaskScriptBridge::LLTaskScriptBridge(
1147{ 1146{
1148} 1147}
1149 1148
1150LLViewerImage* LLTaskScriptBridge::getIcon() const 1149LLUIImagePtr LLTaskScriptBridge::getIcon() const
1151{ 1150{
1152 return get_item_icon(LLAssetType::AT_SCRIPT, LLInventoryType::IT_LSL, 0, FALSE); 1151 return get_item_icon(LLAssetType::AT_SCRIPT, LLInventoryType::IT_LSL, 0, FALSE);
1153} 1152}
@@ -1235,7 +1234,7 @@ public:
1235 const LLUUID& uuid, 1234 const LLUUID& uuid,
1236 const LLString& name); 1235 const LLString& name);
1237 1236
1238 virtual LLViewerImage* getIcon() const; 1237 virtual LLUIImagePtr getIcon() const;
1239}; 1238};
1240 1239
1241LLTaskObjectBridge::LLTaskObjectBridge( 1240LLTaskObjectBridge::LLTaskObjectBridge(
@@ -1246,7 +1245,7 @@ LLTaskObjectBridge::LLTaskObjectBridge(
1246{ 1245{
1247} 1246}
1248 1247
1249LLViewerImage* LLTaskObjectBridge::getIcon() const 1248LLUIImagePtr LLTaskObjectBridge::getIcon() const
1250{ 1249{
1251 BOOL item_is_multi = FALSE; 1250 BOOL item_is_multi = FALSE;
1252 if ( mFlags & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS ) 1251 if ( mFlags & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS )
@@ -1269,7 +1268,7 @@ public:
1269 const LLUUID& uuid, 1268 const LLUUID& uuid,
1270 const LLString& name); 1269 const LLString& name);
1271 1270
1272 virtual LLViewerImage* getIcon() const; 1271 virtual LLUIImagePtr getIcon() const;
1273 virtual void openItem(); 1272 virtual void openItem();
1274 virtual BOOL removeItem(); 1273 virtual BOOL removeItem();
1275}; 1274};
@@ -1282,7 +1281,7 @@ LLTaskNotecardBridge::LLTaskNotecardBridge(
1282{ 1281{
1283} 1282}
1284 1283
1285LLViewerImage* LLTaskNotecardBridge::getIcon() const 1284LLUIImagePtr LLTaskNotecardBridge::getIcon() const
1286{ 1285{
1287 return get_item_icon(LLAssetType::AT_NOTECARD, LLInventoryType::IT_NOTECARD, 0, FALSE); 1286 return get_item_icon(LLAssetType::AT_NOTECARD, LLInventoryType::IT_NOTECARD, 0, FALSE);
1288} 1287}
@@ -1335,7 +1334,7 @@ public:
1335 const LLUUID& uuid, 1334 const LLUUID& uuid,
1336 const LLString& name); 1335 const LLString& name);
1337 1336
1338 virtual LLViewerImage* getIcon() const; 1337 virtual LLUIImagePtr getIcon() const;
1339 virtual void openItem(); 1338 virtual void openItem();
1340 virtual BOOL removeItem(); 1339 virtual BOOL removeItem();
1341}; 1340};
@@ -1348,7 +1347,7 @@ LLTaskGestureBridge::LLTaskGestureBridge(
1348{ 1347{
1349} 1348}
1350 1349
1351LLViewerImage* LLTaskGestureBridge::getIcon() const 1350LLUIImagePtr LLTaskGestureBridge::getIcon() const
1352{ 1351{
1353 return get_item_icon(LLAssetType::AT_GESTURE, LLInventoryType::IT_GESTURE, 0, FALSE); 1352 return get_item_icon(LLAssetType::AT_GESTURE, LLInventoryType::IT_GESTURE, 0, FALSE);
1354} 1353}
@@ -1395,7 +1394,7 @@ public:
1395 const LLUUID& uuid, 1394 const LLUUID& uuid,
1396 const LLString& name); 1395 const LLString& name);
1397 1396
1398 virtual LLViewerImage* getIcon() const; 1397 virtual LLUIImagePtr getIcon() const;
1399 virtual void openItem(); 1398 virtual void openItem();
1400 virtual BOOL removeItem(); 1399 virtual BOOL removeItem();
1401}; 1400};
@@ -1408,7 +1407,7 @@ LLTaskAnimationBridge::LLTaskAnimationBridge(
1408{ 1407{
1409} 1408}
1410 1409
1411LLViewerImage* LLTaskAnimationBridge::getIcon() const 1410LLUIImagePtr LLTaskAnimationBridge::getIcon() const
1412{ 1411{
1413 return get_item_icon(LLAssetType::AT_ANIMATION, LLInventoryType::IT_ANIMATION, 0, FALSE); 1412 return get_item_icon(LLAssetType::AT_ANIMATION, LLInventoryType::IT_ANIMATION, 0, FALSE);
1414} 1413}
@@ -1475,7 +1474,7 @@ public:
1475 LLAssetType::EType asset_type, 1474 LLAssetType::EType asset_type,
1476 U32 flags); 1475 U32 flags);
1477 1476
1478 virtual LLViewerImage* getIcon() const; 1477 virtual LLUIImagePtr getIcon() const;
1479 1478
1480protected: 1479protected:
1481 LLAssetType::EType mAssetType; 1480 LLAssetType::EType mAssetType;
@@ -1492,7 +1491,7 @@ LLTaskWearableBridge::LLTaskWearableBridge(
1492{ 1491{
1493} 1492}
1494 1493
1495LLViewerImage* LLTaskWearableBridge::getIcon() const 1494LLUIImagePtr LLTaskWearableBridge::getIcon() const
1496{ 1495{
1497 return get_item_icon(mAssetType, LLInventoryType::IT_WEARABLE, mFlags, FALSE ); 1496 return get_item_icon(mAssetType, LLInventoryType::IT_WEARABLE, mFlags, FALSE );
1498} 1497}
@@ -1620,9 +1619,9 @@ void LLPanelInventory::clearContents()
1620{ 1619{
1621 mHaveInventory = FALSE; 1620 mHaveInventory = FALSE;
1622 mIsInventoryEmpty = TRUE; 1621 mIsInventoryEmpty = TRUE;
1623 if (gToolDragAndDrop && gToolDragAndDrop->getSource() == LLToolDragAndDrop::SOURCE_WORLD) 1622 if (LLToolDragAndDrop::getInstance() && LLToolDragAndDrop::getInstance()->getSource() == LLToolDragAndDrop::SOURCE_WORLD)
1624 { 1623 {
1625 gToolDragAndDrop->endDrag(); 1624 LLToolDragAndDrop::getInstance()->endDrag();
1626 } 1625 }
1627 1626
1628 if( mScroller ) 1627 if( mScroller )
@@ -1854,12 +1853,12 @@ void LLPanelInventory::refresh()
1854 //llinfos << "LLPanelInventory::refresh()" << llendl; 1853 //llinfos << "LLPanelInventory::refresh()" << llendl;
1855 BOOL has_inventory = FALSE; 1854 BOOL has_inventory = FALSE;
1856 const BOOL non_root_ok = TRUE; 1855 const BOOL non_root_ok = TRUE;
1857 LLSelectNode* node = gSelectMgr->getSelection()->getFirstRootNode(NULL, non_root_ok); 1856 LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode(NULL, non_root_ok);
1858 if(node) 1857 if(node)
1859 { 1858 {
1860 LLViewerObject* object = node->getObject(); 1859 LLViewerObject* object = node->getObject();
1861 if(object && ((gSelectMgr->getSelection()->getRootObjectCount() == 1) 1860 if(object && ((LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() == 1)
1862 || (gSelectMgr->getSelection()->getObjectCount() == 1))) 1861 || (LLSelectMgr::getInstance()->getSelection()->getObjectCount() == 1)))
1863 { 1862 {
1864 // determine if we need to make a request. Start with a 1863 // determine if we need to make a request. Start with a
1865 // default based on if we have inventory at all. 1864 // default based on if we have inventory at all.
@@ -1925,30 +1924,27 @@ void LLPanelInventory::startRenamingSelectedItem()
1925 1924
1926void LLPanelInventory::draw() 1925void LLPanelInventory::draw()
1927{ 1926{
1928 if( getVisible() ) 1927 LLPanel::draw();
1929 {
1930 LLPanel::draw();
1931 1928
1932 if(mIsInventoryEmpty) 1929 if(mIsInventoryEmpty)
1930 {
1931 if((LLUUID::null != mTaskUUID) && (!mHaveInventory))
1933 { 1932 {
1934 if((LLUUID::null != mTaskUUID) && (!mHaveInventory)) 1933 LLFontGL::sSansSerif->renderUTF8("Loading contents...", 0,
1935 { 1934 (S32)(getRect().getWidth() * 0.5f),
1936 LLFontGL::sSansSerif->renderUTF8("Loading contents...", 0, 1935 10,
1937 (S32)(getRect().getWidth() * 0.5f), 1936 LLColor4( 1, 1, 1, 1 ),
1938 10, 1937 LLFontGL::HCENTER,
1939 LLColor4( 1, 1, 1, 1 ), 1938 LLFontGL::BOTTOM);
1940 LLFontGL::HCENTER, 1939 }
1941 LLFontGL::BOTTOM); 1940 else if(mHaveInventory)
1942 } 1941 {
1943 else if(mHaveInventory) 1942 LLFontGL::sSansSerif->renderUTF8("No contents", 0,
1944 { 1943 (S32)(getRect().getWidth() * 0.5f),
1945 LLFontGL::sSansSerif->renderUTF8("No contents", 0, 1944 10,
1946 (S32)(getRect().getWidth() * 0.5f), 1945 LLColor4( 1, 1, 1, 1 ),
1947 10, 1946 LLFontGL::HCENTER,
1948 LLColor4( 1, 1, 1, 1 ), 1947 LLFontGL::BOTTOM);
1949 LLFontGL::HCENTER,
1950 LLFontGL::BOTTOM);
1951 }
1952 } 1948 }
1953 } 1949 }
1954} 1950}
diff --git a/linden/indra/newview/llpanelland.cpp b/linden/indra/newview/llpanelland.cpp
index 5edd304..be05703 100644
--- a/linden/indra/newview/llpanelland.cpp
+++ b/linden/indra/newview/llpanelland.cpp
@@ -43,7 +43,7 @@
43#include "llviewerregion.h" 43#include "llviewerregion.h"
44#include "roles_constants.h" 44#include "roles_constants.h"
45 45
46#include "llvieweruictrlfactory.h" 46#include "lluictrlfactory.h"
47 47
48LLPanelLandSelectObserver* LLPanelLandInfo::sObserver = NULL; 48LLPanelLandSelectObserver* LLPanelLandInfo::sObserver = NULL;
49LLPanelLandInfo* LLPanelLandInfo::sInstance = NULL; 49LLPanelLandInfo* LLPanelLandInfo::sInstance = NULL;
@@ -81,7 +81,7 @@ LLPanelLandInfo::LLPanelLandInfo(const std::string& name)
81 if (!sObserver) 81 if (!sObserver)
82 { 82 {
83 sObserver = new LLPanelLandSelectObserver(); 83 sObserver = new LLPanelLandSelectObserver();
84 gParcelMgr->addObserver( sObserver ); 84 LLViewerParcelMgr::getInstance()->addObserver( sObserver );
85 } 85 }
86 86
87} 87}
@@ -90,7 +90,7 @@ LLPanelLandInfo::LLPanelLandInfo(const std::string& name)
90// virtual 90// virtual
91LLPanelLandInfo::~LLPanelLandInfo() 91LLPanelLandInfo::~LLPanelLandInfo()
92{ 92{
93 gParcelMgr->removeObserver( sObserver ); 93 LLViewerParcelMgr::getInstance()->removeObserver( sObserver );
94 delete sObserver; 94 delete sObserver;
95 sObserver = NULL; 95 sObserver = NULL;
96 96
@@ -111,8 +111,8 @@ void LLPanelLandInfo::refreshAll()
111// public 111// public
112void LLPanelLandInfo::refresh() 112void LLPanelLandInfo::refresh()
113{ 113{
114 LLParcel *parcel = gParcelMgr->getParcelSelection()->getParcel(); 114 LLParcel *parcel = LLViewerParcelMgr::getInstance()->getParcelSelection()->getParcel();
115 LLViewerRegion *regionp = gParcelMgr->getSelectionRegion(); 115 LLViewerRegion *regionp = LLViewerParcelMgr::getInstance()->getSelectionRegion();
116 116
117 if (!parcel || !regionp) 117 if (!parcel || !regionp)
118 { 118 {
@@ -177,9 +177,9 @@ void LLPanelLandInfo::refresh()
177 // not just a single unit of land, 177 // not just a single unit of land,
178 // you must own part of it, 178 // you must own part of it,
179 // and it must not be a whole parcel. 179 // and it must not be a whole parcel.
180 if (gParcelMgr->getSelectedArea() > PARCEL_UNIT_AREA 180 if (LLViewerParcelMgr::getInstance()->getSelectedArea() > PARCEL_UNIT_AREA
181 //&& gParcelMgr->getSelfCount() > 1 181 //&& LLViewerParcelMgr::getInstance()->getSelfCount() > 1
182 && !gParcelMgr->getParcelSelection()->getWholeParcelSelected()) 182 && !LLViewerParcelMgr::getInstance()->getParcelSelection()->getWholeParcelSelected())
183 { 183 {
184 childSetEnabled("button join land",TRUE); 184 childSetEnabled("button join land",TRUE);
185 } 185 }
@@ -197,12 +197,12 @@ void LLPanelLandInfo::refresh()
197 S32 rent_price; 197 S32 rent_price;
198 BOOL for_sale; 198 BOOL for_sale;
199 F32 dwell; 199 F32 dwell;
200 gParcelMgr->getDisplayInfo(&area, 200 LLViewerParcelMgr::getInstance()->getDisplayInfo(&area,
201 &claim_price, 201 &claim_price,
202 &rent_price, 202 &rent_price,
203 &for_sale, 203 &for_sale,
204 &dwell); 204 &dwell);
205 if(is_public || (is_for_sale && gParcelMgr->getParcelSelection()->getWholeParcelSelected())) 205 if(is_public || (is_for_sale && LLViewerParcelMgr::getInstance()->getParcelSelection()->getWholeParcelSelected()))
206 { 206 {
207 childSetTextArg("label_area_price","[PRICE]", llformat("%d",claim_price)); 207 childSetTextArg("label_area_price","[PRICE]", llformat("%d",claim_price));
208 childSetTextArg("label_area_price","[AREA]", llformat("%d",area)); 208 childSetTextArg("label_area_price","[AREA]", llformat("%d",area));
@@ -222,35 +222,35 @@ void LLPanelLandInfo::refresh()
222//static 222//static
223void LLPanelLandInfo::onClickClaim(void*) 223void LLPanelLandInfo::onClickClaim(void*)
224{ 224{
225 gParcelMgr->startBuyLand(); 225 LLViewerParcelMgr::getInstance()->startBuyLand();
226} 226}
227 227
228 228
229//static 229//static
230void LLPanelLandInfo::onClickRelease(void*) 230void LLPanelLandInfo::onClickRelease(void*)
231{ 231{
232 gParcelMgr->startReleaseLand(); 232 LLViewerParcelMgr::getInstance()->startReleaseLand();
233} 233}
234 234
235// static 235// static
236void LLPanelLandInfo::onClickDivide(void*) 236void LLPanelLandInfo::onClickDivide(void*)
237{ 237{
238 gParcelMgr->startDivideLand(); 238 LLViewerParcelMgr::getInstance()->startDivideLand();
239} 239}
240 240
241// static 241// static
242void LLPanelLandInfo::onClickJoin(void*) 242void LLPanelLandInfo::onClickJoin(void*)
243{ 243{
244 gParcelMgr->startJoinLand(); 244 LLViewerParcelMgr::getInstance()->startJoinLand();
245} 245}
246 246
247//static 247//static
248void LLPanelLandInfo::onClickAbout(void*) 248void LLPanelLandInfo::onClickAbout(void*)
249{ 249{
250 // Promote the rectangle selection to a parcel selection 250 // Promote the rectangle selection to a parcel selection
251 if (!gParcelMgr->getParcelSelection()->getWholeParcelSelected()) 251 if (!LLViewerParcelMgr::getInstance()->getParcelSelection()->getWholeParcelSelected())
252 { 252 {
253 gParcelMgr->selectParcelInRectangle(); 253 LLViewerParcelMgr::getInstance()->selectParcelInRectangle();
254 } 254 }
255 255
256 LLFloaterLand::showInstance(); 256 LLFloaterLand::showInstance();
diff --git a/linden/indra/newview/llpanellandmedia.cpp b/linden/indra/newview/llpanellandmedia.cpp
index cb8e8c5..6810c0a 100644
--- a/linden/indra/newview/llpanellandmedia.cpp
+++ b/linden/indra/newview/llpanellandmedia.cpp
@@ -37,7 +37,7 @@
37// viewer includes 37// viewer includes
38#include "llmimetypes.h" 38#include "llmimetypes.h"
39#include "llviewerparcelmgr.h" 39#include "llviewerparcelmgr.h"
40#include "llvieweruictrlfactory.h" 40#include "lluictrlfactory.h"
41 41
42// library includes 42// library includes
43#include "llcheckboxctrl.h" 43#include "llcheckboxctrl.h"
@@ -80,58 +80,51 @@ LLPanelLandMedia::~LLPanelLandMedia()
80 80
81BOOL LLPanelLandMedia::postBuild() 81BOOL LLPanelLandMedia::postBuild()
82{ 82{
83 mCheckSoundLocal = LLUICtrlFactory::getCheckBoxByName(this, "check sound local"); 83 mCheckSoundLocal = getChild<LLCheckBoxCtrl>("check sound local");
84 childSetCommitCallback("check sound local", onCommitAny, this); 84 childSetCommitCallback("check sound local", onCommitAny, this);
85 85
86 mRadioVoiceChat = LLUICtrlFactory::getRadioGroupByName(this, "parcel_voice_channel"); 86 mRadioVoiceChat = getChild<LLRadioGroup>("parcel_voice_channel");
87 childSetCommitCallback("parcel_voice_channel", onCommitAny, this); 87 childSetCommitCallback("parcel_voice_channel", onCommitAny, this);
88 88
89 mMusicURLEdit = LLUICtrlFactory::getLineEditorByName(this, "music_url"); 89 mMusicURLEdit = getChild<LLLineEditor>("music_url");
90 childSetCommitCallback("music_url", onCommitAny, this); 90 childSetCommitCallback("music_url", onCommitAny, this);
91 91
92 mMediaTextureCtrl = LLViewerUICtrlFactory::getTexturePickerByName(this, "media texture"); 92 mMediaTextureCtrl = getChild<LLTextureCtrl>("media texture");
93 if (mMediaTextureCtrl) 93 mMediaTextureCtrl->setCommitCallback( onCommitAny );
94 { 94 mMediaTextureCtrl->setCallbackUserData( this );
95 mMediaTextureCtrl->setCommitCallback( onCommitAny ); 95 mMediaTextureCtrl->setAllowNoTexture ( TRUE );
96 mMediaTextureCtrl->setCallbackUserData( this ); 96 mMediaTextureCtrl->setImmediateFilterPermMask(PERM_COPY | PERM_TRANSFER);
97 mMediaTextureCtrl->setAllowNoTexture ( TRUE ); 97 mMediaTextureCtrl->setNonImmediateFilterPermMask(PERM_COPY | PERM_TRANSFER);
98 mMediaTextureCtrl->setImmediateFilterPermMask(PERM_COPY | PERM_TRANSFER);
99 mMediaTextureCtrl->setNonImmediateFilterPermMask(PERM_COPY | PERM_TRANSFER);
100 }
101 else
102 {
103 llwarns << "LLViewerUICtrlFactory::getTexturePickerByName() returned NULL for 'media texure'" << llendl;
104 }
105 98
106 mMediaAutoScaleCheck = LLUICtrlFactory::getCheckBoxByName(this, "media_auto_scale"); 99 mMediaAutoScaleCheck = getChild<LLCheckBoxCtrl>("media_auto_scale");
107 childSetCommitCallback("media_auto_scale", onCommitAny, this); 100 childSetCommitCallback("media_auto_scale", onCommitAny, this);
108 101
109 mMediaLoopCheck = LLUICtrlFactory::getCheckBoxByName(this, "media_loop"); 102 mMediaLoopCheck = getChild<LLCheckBoxCtrl>("media_loop");
110 childSetCommitCallback("media_loop", onCommitAny, this); 103 childSetCommitCallback("media_loop", onCommitAny, this);
111 104
112 mMediaUrlCheck = LLUICtrlFactory::getCheckBoxByName(this, "hide_media_url"); 105 mMediaUrlCheck = getChild<LLCheckBoxCtrl>("hide_media_url");
113 childSetCommitCallback("hide_media_url", onCommitAny, this); 106 childSetCommitCallback("hide_media_url", onCommitAny, this);
114 107
115 mMusicUrlCheck = LLUICtrlFactory::getCheckBoxByName(this, "hide_music_url"); 108 mMusicUrlCheck = getChild<LLCheckBoxCtrl>("hide_music_url");
116 childSetCommitCallback("hide_music_url", onCommitAny, this); 109 childSetCommitCallback("hide_music_url", onCommitAny, this);
117 110
118 mMediaURLEdit = LLUICtrlFactory::getLineEditorByName(this, "media_url"); 111 mMediaURLEdit = getChild<LLLineEditor>("media_url");
119 childSetCommitCallback("media_url", onCommitAny, this); 112 childSetCommitCallback("media_url", onCommitAny, this);
120 113
121 mMediaDescEdit = LLUICtrlFactory::getLineEditorByName(this, "url_description"); 114 mMediaDescEdit = getChild<LLLineEditor>("url_description");
122 childSetCommitCallback("url_description", onCommitAny, this); 115 childSetCommitCallback("url_description", onCommitAny, this);
123 116
124 mMediaTypeCombo = LLUICtrlFactory::getComboBoxByName(this, "media type"); 117 mMediaTypeCombo = getChild<LLComboBox>("media type");
125 childSetCommitCallback("media type", onCommitType, this); 118 childSetCommitCallback("media type", onCommitType, this);
126 populateMIMECombo(); 119 populateMIMECombo();
127 120
128 mMediaWidthCtrl = LLUICtrlFactory::getSpinnerByName(this, "media_size_width"); 121 mMediaWidthCtrl = getChild<LLSpinCtrl>("media_size_width");
129 childSetCommitCallback("media_size_width", onCommitAny, this); 122 childSetCommitCallback("media_size_width", onCommitAny, this);
130 mMediaHeightCtrl = LLUICtrlFactory::getSpinnerByName(this, "media_size_height"); 123 mMediaHeightCtrl = getChild<LLSpinCtrl>("media_size_height");
131 childSetCommitCallback("media_size_height", onCommitAny, this); 124 childSetCommitCallback("media_size_height", onCommitAny, this);
132 mMediaSizeCtrlLabel = LLUICtrlFactory::getTextBoxByName(this, "media_size"); 125 mMediaSizeCtrlLabel = getChild<LLTextBox>("media_size");
133 126
134 mSetURLButton = LLUICtrlFactory::getButtonByName(this, "set_media_url"); 127 mSetURLButton = getChild<LLButton>("set_media_url");
135 childSetAction("set_media_url", onSetBtn, this); 128 childSetAction("set_media_url", onSetBtn, this);
136 129
137 return TRUE; 130 return TRUE;
@@ -401,7 +394,7 @@ void LLPanelLandMedia::onCommitAny(LLUICtrl*, void *userdata)
401 parcel->setObscureMusic( obscure_music ); 394 parcel->setObscureMusic( obscure_music );
402 395
403 // Send current parcel data upstream to server 396 // Send current parcel data upstream to server
404 gParcelMgr->sendParcelPropertiesUpdate( parcel ); 397 LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel );
405 398
406 // Might have changed properties, so let's redraw! 399 // Might have changed properties, so let's redraw!
407 self->refresh(); 400 self->refresh();
diff --git a/linden/indra/newview/llpanellogin.cpp b/linden/indra/newview/llpanellogin.cpp
index 26075a1..f403271 100644
--- a/linden/indra/newview/llpanellogin.cpp
+++ b/linden/indra/newview/llpanellogin.cpp
@@ -65,7 +65,7 @@
65#include "llnotify.h" 65#include "llnotify.h"
66#include "llappviewer.h" // for gHideLinks 66#include "llappviewer.h" // for gHideLinks
67#include "llurlsimstring.h" 67#include "llurlsimstring.h"
68#include "llvieweruictrlfactory.h" 68#include "lluictrlfactory.h"
69#include "llhttpclient.h" 69#include "llhttpclient.h"
70#include "llweb.h" 70#include "llweb.h"
71#include "llwebbrowserctrl.h" 71#include "llwebbrowserctrl.h"
@@ -206,7 +206,7 @@ void LLLoginHandler::parse(const LLSD& queryMap)
206 206
207 if (LLAppViewer::instance()->getLoginURIs().size() == 0) 207 if (LLAppViewer::instance()->getLoginURIs().size() == 0)
208 { 208 {
209 snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName); /* Flawfinder: ignore */ 209 gGridName = gGridInfo[gGridChoice].mName; /* Flawfinder: ignore */
210 LLAppViewer::instance()->resetURIs(); 210 LLAppViewer::instance()->resetURIs();
211 } 211 }
212 212
@@ -349,9 +349,9 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
349 gViewerWindow->getRootView()->addChildAtEnd(this); 349 gViewerWindow->getRootView()->addChildAtEnd(this);
350 350
351 // Logo 351 // Logo
352 mLogoImage = gImageList.getImage("startup_logo.tga", LLUUID::null, MIPMAP_FALSE, TRUE); 352 mLogoImage = LLUI::getUIImage("startup_logo.j2c");
353 353
354 gUICtrlFactory->buildPanel(this, "panel_login.xml"); 354 LLUICtrlFactory::getInstance()->buildPanel(this, "panel_login.xml");
355 355
356#if USE_VIEWER_AUTH 356#if USE_VIEWER_AUTH
357 //leave room for the login menu bar 357 //leave room for the login menu bar
@@ -368,44 +368,43 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
368 childSetUserData("password_edit", this); 368 childSetUserData("password_edit", this);
369 369
370 // change z sort of clickable text to be behind buttons 370 // change z sort of clickable text to be behind buttons
371 sendChildToBack(getChildByName("channel_text")); 371 sendChildToBack(getChildView("channel_text"));
372 sendChildToBack(getChildByName("version_text")); 372 sendChildToBack(getChildView("version_text"));
373 sendChildToBack(getChildByName("forgot_password_text")); 373 sendChildToBack(getChildView("forgot_password_text"));
374 374
375 LLLineEditor* edit = LLUICtrlFactory::getLineEditorByName(this, "password_edit"); 375 LLLineEditor* edit = getChild<LLLineEditor>("password_edit");
376 if (edit) edit->setDrawAsterixes(TRUE); 376 if (edit) edit->setDrawAsterixes(TRUE);
377 377
378 LLComboBox* combo = LLUICtrlFactory::getComboBoxByName(this, "start_location_combo"); 378 LLComboBox* combo = getChild<LLComboBox>("start_location_combo");
379 if (combo) 379 combo->setAllowTextEntry(TRUE, 128, FALSE);
380 {
381 combo->setAllowTextEntry(TRUE, 128, FALSE);
382 380
383 // The XML file loads the combo with the following labels: 381 // The XML file loads the combo with the following labels:
384 // 0 - "My Home" 382 // 0 - "My Home"
385 // 1 - "My Last Location" 383 // 1 - "My Last Location"
386 // 2 - "<Type region name>" 384 // 2 - "<Type region name>"
387 385
388 BOOL login_last = gSavedSettings.getBOOL("LoginLastLocation"); 386 BOOL login_last = gSavedSettings.getBOOL("LoginLastLocation");
389 LLString sim_string = LLURLSimString::sInstance.mSimString; 387 LLString sim_string = LLURLSimString::sInstance.mSimString;
390 if (!sim_string.empty()) 388 if (!sim_string.empty())
391 { 389 {
392 // Replace "<Type region name>" with this region name 390 // Replace "<Type region name>" with this region name
393 combo->remove(2); 391 combo->remove(2);
394 combo->add( sim_string ); 392 combo->add( sim_string );
395 combo->setTextEntry(sim_string); 393 combo->setTextEntry(sim_string);
396 combo->setCurrentByIndex( 2 ); 394 combo->setCurrentByIndex( 2 );
397 } 395 }
398 else if (login_last) 396 else if (login_last)
399 { 397 {
400 combo->setCurrentByIndex( 1 ); 398 combo->setCurrentByIndex( 1 );
401 }
402 else
403 {
404 combo->setCurrentByIndex( 0 );
405 }
406
407 combo->setCommitCallback( &LLPanelGeneral::set_start_location );
408 } 399 }
400 else
401 {
402 combo->setCurrentByIndex( 0 );
403 }
404
405 combo->setCommitCallback( &LLPanelGeneral::set_start_location );
406
407 childSetCommitCallback("server_combo", onSelectServer, this);
409 408
410 childSetAction("connect_btn", onClickConnect, this); 409 childSetAction("connect_btn", onClickConnect, this);
411 410
@@ -413,71 +412,59 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
413 412
414 childSetAction("quit_btn", onClickQuit, this); 413 childSetAction("quit_btn", onClickQuit, this);
415 414
416 LLTextBox* version_text = LLUICtrlFactory::getTextBoxByName(this, "version_text"); 415 LLTextBox* version_text = getChild<LLTextBox>("version_text");
417 if (version_text) 416 LLString version = llformat("%d.%d.%d (%d)",
418 { 417 LL_VERSION_MAJOR,
419 LLString version = llformat("%d.%d.%d (%d)", 418 LL_VERSION_MINOR,
420 LL_VERSION_MAJOR, 419 LL_VERSION_PATCH,
421 LL_VERSION_MINOR, 420 LL_VIEWER_BUILD );
422 LL_VERSION_PATCH, 421 version_text->setText(version);
423 LL_VIEWER_BUILD ); 422 version_text->setClickedCallback(onClickVersion);
424 version_text->setText(version); 423 version_text->setCallbackUserData(this);
425 version_text->setClickedCallback(onClickVersion); 424
426 version_text->setCallbackUserData(this); 425 LLTextBox* channel_text = getChild<LLTextBox>("channel_text");
427 } 426 channel_text->setText(gSavedSettings.getString("VersionChannelName"));
428 427 channel_text->setClickedCallback(onClickVersion);
429 LLTextBox* channel_text = LLUICtrlFactory::getTextBoxByName(this, "channel_text"); 428 channel_text->setCallbackUserData(this);
430 if (channel_text)
431 {
432 channel_text->setText(gChannelName);
433 channel_text->setClickedCallback(onClickVersion);
434 channel_text->setCallbackUserData(this);
435 }
436 429
437 LLTextBox* forgot_password_text = LLUICtrlFactory::getTextBoxByName(this, "forgot_password_text"); 430 LLTextBox* forgot_password_text = getChild<LLTextBox>("forgot_password_text");
438 if (forgot_password_text) 431 forgot_password_text->setClickedCallback(onClickForgotPassword);
439 {
440 forgot_password_text->setClickedCallback(onClickForgotPassword);
441 }
442#endif 432#endif
443 433
444 // get the web browser control 434 // get the web browser control
445 LLWebBrowserCtrl* web_browser = getChild<LLWebBrowserCtrl>("login_html"); 435 LLWebBrowserCtrl* web_browser = getChild<LLWebBrowserCtrl>("login_html");
446 if ( web_browser ) 436 // Need to handle login secondlife:///app/ URLs
447 { 437 web_browser->setOpenAppSLURLs( true );
448 // Need to handle login secondlife:///app/ URLs
449 web_browser->setOpenAppSLURLs( true );
450 438
451 // observe browser events 439 // observe browser events
452 web_browser->addObserver( this ); 440 web_browser->addObserver( this );
453 441
454 // don't make it a tab stop until SL-27594 is fixed 442 // don't make it a tab stop until SL-27594 is fixed
455 web_browser->setTabStop(FALSE); 443 web_browser->setTabStop(FALSE);
456 web_browser->navigateToLocalPage( "loading", "loading.html" ); 444 web_browser->navigateToLocalPage( "loading", "loading.html" );
457 445
458 // make links open in external browser 446 // make links open in external browser
459 web_browser->setOpenInExternalBrowser( true ); 447 web_browser->setOpenInExternalBrowser( true );
460 448
461 // force the size to be correct (XML doesn't seem to be sufficient to do this) (with some padding so the other login screen doesn't show through) 449 // force the size to be correct (XML doesn't seem to be sufficient to do this) (with some padding so the other login screen doesn't show through)
462 LLRect htmlRect = getRect(); 450 LLRect htmlRect = getRect();
463#if USE_VIEWER_AUTH 451#if USE_VIEWER_AUTH
464 htmlRect.setCenterAndSize( getRect().getCenterX() - 2, getRect().getCenterY(), getRect().getWidth() + 6, getRect().getHeight()); 452 htmlRect.setCenterAndSize( getRect().getCenterX() - 2, getRect().getCenterY(), getRect().getWidth() + 6, getRect().getHeight());
465#else 453#else
466 htmlRect.setCenterAndSize( getRect().getCenterX() - 2, getRect().getCenterY() + 40, getRect().getWidth() + 6, getRect().getHeight() - 78 ); 454 htmlRect.setCenterAndSize( getRect().getCenterX() - 2, getRect().getCenterY() + 40, getRect().getWidth() + 6, getRect().getHeight() - 78 );
467#endif 455#endif
468 web_browser->setRect( htmlRect ); 456 web_browser->setRect( htmlRect );
469 web_browser->reshape( htmlRect.getWidth(), htmlRect.getHeight(), TRUE ); 457 web_browser->reshape( htmlRect.getWidth(), htmlRect.getHeight(), TRUE );
470 reshape( getRect().getWidth(), getRect().getHeight(), 1 ); 458 reshape( getRect().getWidth(), getRect().getHeight(), 1 );
471 459
472 // kick off a request to grab the url manually 460 // kick off a request to grab the url manually
473 gResponsePtr = LLIamHereLogin::build( this ); 461 gResponsePtr = LLIamHereLogin::build( this );
474 std::string login_page = LLAppViewer::instance()->getLoginPage(); 462 std::string login_page = gSavedSettings.getString("LoginPage");
475 if (login_page.empty()) 463 if (login_page.empty())
476 { 464 {
477 login_page = getString( "real_url" ); 465 login_page = getString( "real_url" );
478 } 466 }
479 LLHTTPClient::head( login_page, gResponsePtr ); 467 LLHTTPClient::head( login_page, gResponsePtr );
480 };
481 468
482#if !USE_VIEWER_AUTH 469#if !USE_VIEWER_AUTH
483 // Initialize visibility (and don't force visibility - use prefs) 470 // Initialize visibility (and don't force visibility - use prefs)
@@ -549,15 +536,13 @@ LLPanelLogin::~LLPanelLogin()
549 if ( gResponsePtr ) 536 if ( gResponsePtr )
550 gResponsePtr->setParent( 0 ); 537 gResponsePtr->setParent( 0 );
551 538
552 // We know we're done with the image, so be rid of it. 539 //// We know we're done with the image, so be rid of it.
553 gImageList.deleteImage( mLogoImage ); 540 //gImageList.deleteImage( mLogoImage );
554} 541}
555 542
556// virtual 543// virtual
557void LLPanelLogin::draw() 544void LLPanelLogin::draw()
558{ 545{
559 if (!getVisible()) return;
560
561 glPushMatrix(); 546 glPushMatrix();
562 { 547 {
563 F32 image_aspect = 1.333333f; 548 F32 image_aspect = 1.333333f;
@@ -578,14 +563,14 @@ void LLPanelLogin::draw()
578 // draw a background box in black 563 // draw a background box in black
579 gl_rect_2d( 0, height - 264, width, 264, LLColor4( 0.0f, 0.0f, 0.0f, 1.f ) ); 564 gl_rect_2d( 0, height - 264, width, 264, LLColor4( 0.0f, 0.0f, 0.0f, 1.f ) );
580 // draw the bottom part of the background image - just the blue background to the native client UI 565 // draw the bottom part of the background image - just the blue background to the native client UI
581 gl_draw_scaled_image(0, -264, width + 8, mLogoImage->getHeight(), mLogoImage); 566 mLogoImage->draw(0, -264, width + 8, mLogoImage->getHeight());
582#endif 567#endif
583 } 568 }
584 else 569 else
585 { 570 {
586 // the HTML login page is not available so default to the original screen 571 // the HTML login page is not available so default to the original screen
587 S32 offscreen_part = height / 3; 572 S32 offscreen_part = height / 3;
588 gl_draw_scaled_image(0, -offscreen_part, width, height+offscreen_part, mLogoImage); 573 mLogoImage->draw(0, -offscreen_part, width, height+offscreen_part);
589 }; 574 };
590 } 575 }
591 glPopMatrix(); 576 glPopMatrix();
@@ -594,56 +579,50 @@ void LLPanelLogin::draw()
594} 579}
595 580
596// virtual 581// virtual
597BOOL LLPanelLogin::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent) 582BOOL LLPanelLogin::handleKeyHere(KEY key, MASK mask)
598{ 583{
599 if (getVisible() && getEnabled()) 584 if (( KEY_RETURN == key ) && (MASK_ALT == mask))
600 { 585 {
601 if (( KEY_RETURN == key ) && (MASK_ALT == mask)) 586 gViewerWindow->toggleFullscreen(FALSE);
602 { 587 return TRUE;
603 gViewerWindow->toggleFullscreen(FALSE); 588 }
604 return TRUE;
605 }
606 589
607 if (('P' == key) && (MASK_CONTROL == mask)) 590 if (('P' == key) && (MASK_CONTROL == mask))
608 { 591 {
609 LLFloaterPreference::show(NULL); 592 LLFloaterPreference::show(NULL);
610 return TRUE; 593 return TRUE;
611 } 594 }
612 595
613 if (('T' == key) && (MASK_CONTROL == mask)) 596 if (('T' == key) && (MASK_CONTROL == mask))
614 { 597 {
615 new LLFloaterSimple("floater_test.xml"); 598 new LLFloaterSimple("floater_test.xml");
616 return TRUE; 599 return TRUE;
617 } 600 }
618 601
619 if ( KEY_F1 == key ) 602 if ( KEY_F1 == key )
620 { 603 {
621 llinfos << "Spawning HTML help window" << llendl; 604 llinfos << "Spawning HTML help window" << llendl;
622 gViewerHtmlHelp.show(); 605 gViewerHtmlHelp.show();
623 return TRUE; 606 return TRUE;
624 } 607 }
625 608
626# if !LL_RELEASE_FOR_DOWNLOAD 609# if !LL_RELEASE_FOR_DOWNLOAD
627 if ( KEY_F2 == key ) 610 if ( KEY_F2 == key )
628 { 611 {
629 llinfos << "Spawning floater TOS window" << llendl; 612 llinfos << "Spawning floater TOS window" << llendl;
630 LLFloaterTOS* tos_dialog = LLFloaterTOS::show(LLFloaterTOS::TOS_TOS,""); 613 LLFloaterTOS* tos_dialog = LLFloaterTOS::show(LLFloaterTOS::TOS_TOS,"");
631 tos_dialog->startModal(); 614 tos_dialog->startModal();
632 return TRUE; 615 return TRUE;
633 } 616 }
634#endif 617#endif
635 618
636 if (!called_from_parent) 619 if (KEY_RETURN == key && MASK_NONE == mask)
637 { 620 {
638 if (KEY_RETURN == key && MASK_NONE == mask) 621 // let the panel handle UICtrl processing: calls onClickConnect()
639 { 622 return LLPanel::handleKeyHere(key, mask);
640 // let the panel handle UICtrl processing: calls onClickConnect()
641 return LLPanel::handleKeyHere(key, mask, called_from_parent);
642 }
643 }
644 } 623 }
645 624
646 return LLPanel::handleKeyHere(key, mask, called_from_parent); 625 return LLPanel::handleKeyHere(key, mask);
647} 626}
648 627
649// virtual 628// virtual
@@ -685,12 +664,12 @@ void LLPanelLogin::giveFocus()
685 { 664 {
686 // User saved his name but not his password. Move 665 // User saved his name but not his password. Move
687 // focus to password field. 666 // focus to password field.
688 edit = LLUICtrlFactory::getLineEditorByName(sInstance, "password_edit"); 667 edit = sInstance->getChild<LLLineEditor>("password_edit");
689 } 668 }
690 else 669 else
691 { 670 {
692 // User doesn't have a name, so start there. 671 // User doesn't have a name, so start there.
693 edit = LLUICtrlFactory::getLineEditorByName(sInstance, "first_name_edit"); 672 edit = sInstance->getChild<LLLineEditor>("first_name_edit");
694 } 673 }
695 674
696 if (edit) 675 if (edit)
@@ -771,12 +750,9 @@ void LLPanelLogin::addServer(const char *server, S32 domain_name)
771 return; 750 return;
772 } 751 }
773 752
774 LLComboBox* combo = LLUICtrlFactory::getComboBoxByName(sInstance, "server_combo"); 753 LLComboBox* combo = sInstance->getChild<LLComboBox>("server_combo");
775 if (combo) 754 combo->add(server, LLSD(domain_name) );
776 { 755 combo->setCurrentByIndex(0);
777 combo->add(server, LLSD(domain_name) );
778 combo->setCurrentByIndex(0);
779 }
780} 756}
781 757
782// static 758// static
@@ -810,27 +786,24 @@ BOOL LLPanelLogin::getServer(LLString &server, S32 &domain_name)
810 } 786 }
811 else 787 else
812 { 788 {
813 LLComboBox* combo = LLUICtrlFactory::getComboBoxByName(sInstance, "server_combo"); 789 LLComboBox* combo = sInstance->getChild<LLComboBox>("server_combo");
814 if (combo) 790 LLSD combo_val = combo->getValue();
791 if (LLSD::TypeInteger == combo_val.type())
815 { 792 {
816 LLSD combo_val = combo->getValue(); 793 domain_name = combo->getValue().asInteger();
817 if (LLSD::TypeInteger == combo_val.type())
818 {
819 domain_name = combo->getValue().asInteger();
820 794
821 if ((S32)GRID_INFO_OTHER == domain_name) 795 if ((S32)GRID_INFO_OTHER == domain_name)
822 {
823 server = gGridName;
824 }
825 }
826 else
827 { 796 {
828 // no valid selection, return other 797 server = gGridName;
829 domain_name = (S32)GRID_INFO_OTHER;
830 server = combo_val.asString();
831 } 798 }
832 user_picked = combo->isDirty();
833 } 799 }
800 else
801 {
802 // no valid selection, return other
803 domain_name = (S32)GRID_INFO_OTHER;
804 server = combo_val.asString();
805 }
806 user_picked = combo->isDirty();
834 } 807 }
835 808
836 return user_picked; 809 return user_picked;
@@ -845,11 +818,8 @@ void LLPanelLogin::getLocation(LLString &location)
845 return; 818 return;
846 } 819 }
847 820
848 LLComboBox* combo = LLUICtrlFactory::getComboBoxByName(sInstance, "start_location_combo"); 821 LLComboBox* combo = sInstance->getChild<LLComboBox>("start_location_combo");
849 if (combo) 822 location = combo->getValue().asString();
850 {
851 location = combo->getValue().asString();
852 }
853} 823}
854 824
855// static 825// static
@@ -860,8 +830,7 @@ void LLPanelLogin::refreshLocation( bool force_visible )
860#if USE_VIEWER_AUTH 830#if USE_VIEWER_AUTH
861 loadLoginPage(); 831 loadLoginPage();
862#else 832#else
863 LLComboBox* combo = LLUICtrlFactory::getComboBoxByName(sInstance, "start_location_combo"); 833 LLComboBox* combo = sInstance->getChild<LLComboBox>("start_location_combo");
864 if (!combo) return;
865 834
866 if (LLURLSimString::parse()) 835 if (LLURLSimString::parse())
867 { 836 {
@@ -927,13 +896,70 @@ void LLPanelLogin::loadLoginPage()
927 896
928 std::ostringstream oStr; 897 std::ostringstream oStr;
929 898
930 std::string login_page = LLAppViewer::instance()->getLoginPage(); 899 std::string login_page = gSavedSettings.getString("LoginPage");
931 if (login_page.empty()) 900 if (login_page.empty())
932 { 901 {
933 login_page = sInstance->getString( "real_url" ); 902 login_page = sInstance->getString( "real_url" );
934 } 903 }
935 oStr << login_page; 904 oStr << login_page;
936 905
906 // Use the right delimeter depending on how LLURI parses the URL
907 LLURI login_page_uri = LLURI(login_page);
908 std::string first_query_delimiter = "&";
909 if (login_page_uri.queryMap().size() == 0)
910 {
911 first_query_delimiter = "?";
912 }
913
914 // Language
915 LLString language(gSavedSettings.getString("Language"));
916 if(language == "default")
917 {
918 language = gSavedSettings.getString("SystemLanguage");
919 }
920 oStr << first_query_delimiter<<"lang=" << language;
921
922 // First Login?
923 if (gSavedSettings.getBOOL("FirstLoginThisInstall"))
924 {
925 oStr << "&firstlogin=TRUE";
926 }
927
928 // Channel and Version
929 LLString version = llformat("%d.%d.%d (%d)",
930 LL_VERSION_MAJOR, LL_VERSION_MINOR, LL_VERSION_PATCH, LL_VIEWER_BUILD);
931
932 char* curl_channel = curl_escape(gSavedSettings.getString("VersionChannelName").c_str(), 0);
933 char* curl_version = curl_escape(version.c_str(), 0);
934
935 oStr << "&channel=" << curl_channel;
936 oStr << "&version=" << curl_version;
937
938 curl_free(curl_channel);
939 curl_free(curl_version);
940
941 // Grid
942 LLString grid;
943 S32 grid_index;
944 getServer( grid, grid_index );
945 if( grid_index != (S32)GRID_INFO_OTHER )
946 {
947 grid = gGridInfo[grid_index].mLabel;
948 }
949
950 if(gGridChoice != (EGridInfo)grid_index)
951 {
952 LLAppViewer::instance()->resetURIs();
953 gGridChoice = (EGridInfo)grid_index;
954 gViewerWindow->setMenuBackgroundColor(false,
955 !LLAppViewer::instance()->isInProductionGrid());
956 gLoginMenuBarView->setBackgroundColor(gMenuBarView->getBackgroundColor());
957 }
958
959 char* curl_grid = curl_escape(grid.c_str(), 0);
960 oStr << "&grid=" << curl_grid;
961 curl_free(curl_grid);
962
937#if USE_VIEWER_AUTH 963#if USE_VIEWER_AUTH
938 LLURLSimString::sInstance.parse(); 964 LLURLSimString::sInstance.parse();
939 965
@@ -963,60 +989,35 @@ void LLPanelLogin::loadLoginPage()
963 } 989 }
964 990
965 LLString firstname, lastname; 991 LLString firstname, lastname;
966 992
967 if (gCmdLineFirstName.empty()) 993 if(gSavedSettings.getLLSD("UserLoginInfo").size() == 3)
994 {
995 LLSD cmd_line_login = gSavedSettings.getLLSD("UserLoginInfo");
996 firstname = cmd_line_login[0].asString();
997 lastname = cmd_line_login[1].asString();
998 password = cmd_line_login[2].asString();
999 }
1000
1001 if (firstname.empty())
968 { 1002 {
969 firstname = gSavedSettings.getString("FirstName"); 1003 firstname = gSavedSettings.getString("FirstName");
970 } 1004 }
971 else
972 {
973 firstname = gCmdLineFirstName;
974 }
975 1005
976 if (gCmdLineLastName.empty()) 1006 if (lastname.empty())
977 { 1007 {
978 lastname = gSavedSettings.getString("LastName"); 1008 lastname = gSavedSettings.getString("LastName");
979 } 1009 }
980 else
981 {
982 lastname = gCmdLineLastName;
983 }
984 1010
985 LLString version = llformat("%d.%d.%d (%d)",
986 LL_VERSION_MAJOR, LL_VERSION_MINOR, LL_VERSION_PATCH, LL_VIEWER_BUILD);
987
988 char* curl_region = curl_escape(region.c_str(), 0); 1011 char* curl_region = curl_escape(region.c_str(), 0);
989 char* curl_channel = curl_escape(gChannelName.c_str(), 0);
990 char* curl_version = curl_escape(version.c_str(), 0);
991 1012
992 1013 oStr <<"firstname=" << firstname <<
993 // Use the right delimeter depending on how LLURI parses the URL 1014 "&lastname=" << lastname << "&location=" << location << "&region=" << curl_region;
994 LLURI login_page_uri = LLURI(login_page);
995 std::string first_query_delimiter = "&";
996 if (login_page_uri.queryMap().size() == 0)
997 {
998 first_query_delimiter = "?";
999 }
1000 oStr << first_query_delimiter << "firstname=" << firstname <<
1001 "&lastname=" << lastname << "&location=" << location << "&region=" << curl_region <<
1002 "&grid=" << gGridInfo[gGridChoice].mLabel << "&channel=" << curl_channel <<
1003 "&version=" << curl_version;
1004 1015
1005 curl_free(curl_region); 1016 curl_free(curl_region);
1006 curl_free(curl_channel);
1007 curl_free(curl_version);
1008
1009 LLString language(gSavedSettings.getString("Language"));
1010 if(language == "default")
1011 {
1012 language = gSavedSettings.getString("SystemLanguage");
1013 }
1014
1015 oStr << "&lang=" << language;
1016 1017
1017 if (!gCmdLinePassword.empty()) 1018 if (!password.empty())
1018 { 1019 {
1019 oStr << "&password=" << gCmdLinePassword; 1020 oStr << "&password=" << password;
1020 } 1021 }
1021 else if (!(password = load_password_from_disk()).empty()) 1022 else if (!(password = load_password_from_disk()).empty())
1022 { 1023 {
@@ -1087,15 +1088,12 @@ void LLPanelLogin::onClickConnect(void *)
1087 // has both first and last name typed 1088 // has both first and last name typed
1088 1089
1089 // store off custom server entry, if currently selected 1090 // store off custom server entry, if currently selected
1090 LLComboBox* combo = LLUICtrlFactory::getComboBoxByName(sInstance, "server_combo"); 1091 LLComboBox* combo = sInstance->getChild<LLComboBox>("server_combo");
1091 if (combo) 1092 S32 selected_server = combo->getValue();
1093 if (selected_server == GRID_INFO_NONE)
1092 { 1094 {
1093 S32 selected_server = combo->getValue(); 1095 LLString custom_server = combo->getValue().asString();
1094 if (selected_server == GRID_INFO_NONE) 1096 gSavedSettings.setString("CustomServer", custom_server);
1095 {
1096 LLString custom_server = combo->getValue().asString();
1097 gSavedSettings.setString("CustomServer", custom_server);
1098 }
1099 } 1097 }
1100 sInstance->mCallback(0, sInstance->mCallbackData); 1098 sInstance->mCallback(0, sInstance->mCallbackData);
1101 } 1099 }
@@ -1177,3 +1175,10 @@ void LLPanelLogin::onPassKey(LLLineEditor* caller, void* user_data)
1177 sCapslockDidNotification = TRUE; 1175 sCapslockDidNotification = TRUE;
1178 } 1176 }
1179} 1177}
1178
1179// static
1180void LLPanelLogin::onSelectServer(LLUICtrl*, void*)
1181{
1182 // grid changed so show new splash screen (possibly)
1183 loadLoginPage();
1184}
diff --git a/linden/indra/newview/llpanellogin.h b/linden/indra/newview/llpanellogin.h
index a754224..1100cd6 100644
--- a/linden/indra/newview/llpanellogin.h
+++ b/linden/indra/newview/llpanellogin.h
@@ -74,7 +74,7 @@ public:
74 void *callback_data); 74 void *callback_data);
75 ~LLPanelLogin(); 75 ~LLPanelLogin();
76 76
77 virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); 77 virtual BOOL handleKeyHere(KEY key, MASK mask);
78 virtual void draw(); 78 virtual void draw();
79 virtual void setFocus( BOOL b ); 79 virtual void setFocus( BOOL b );
80 80
@@ -112,9 +112,10 @@ private:
112 virtual void onNavigateComplete( const EventType& eventIn ); 112 virtual void onNavigateComplete( const EventType& eventIn );
113 static void onClickForgotPassword(void*); 113 static void onClickForgotPassword(void*);
114 static void onPassKey(LLLineEditor* caller, void* user_data); 114 static void onPassKey(LLLineEditor* caller, void* user_data);
115 static void onSelectServer(LLUICtrl*, void*);
115 116
116private: 117private:
117 LLPointer<LLViewerImage> mLogoImage; 118 LLPointer<LLUIImage> mLogoImage;
118 119
119 void (*mCallback)(S32 option, void *userdata); 120 void (*mCallback)(S32 option, void *userdata);
120 void* mCallbackData; 121 void* mCallbackData;
diff --git a/linden/indra/newview/llpanelmorph.cpp b/linden/indra/newview/llpanelmorph.cpp
index 817b214..a8da26d 100644
--- a/linden/indra/newview/llpanelmorph.cpp
+++ b/linden/indra/newview/llpanelmorph.cpp
@@ -217,7 +217,7 @@ void LLPanelMorph::updateSpinners(LLPolyMesh *mesh)
217//----------------------------------------------------------------------------- 217//-----------------------------------------------------------------------------
218void LLPanelMorph::createSpinners(LLPolyMesh *mesh) 218void LLPanelMorph::createSpinners(LLPolyMesh *mesh)
219{ 219{
220 const LLFontGL* font = gResMgr->getRes( LLFONT_SANSSERIF_SMALL ); 220 const LLFontGL* font = LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF_SMALL );
221 S32 cur_y; 221 S32 cur_y;
222 S32 new_height; 222 S32 new_height;
223 S32 control_focus = -1; 223 S32 control_focus = -1;
diff --git a/linden/indra/newview/llpanelmsgs.cpp b/linden/indra/newview/llpanelmsgs.cpp
index fc21ecb..fb33edf 100644
--- a/linden/indra/newview/llpanelmsgs.cpp
+++ b/linden/indra/newview/llpanelmsgs.cpp
@@ -36,7 +36,7 @@
36#include "llscrolllistctrl.h" 36#include "llscrolllistctrl.h"
37#include "llviewerwindow.h" 37#include "llviewerwindow.h"
38#include "llviewercontrol.h" 38#include "llviewercontrol.h"
39#include "llvieweruictrlfactory.h" 39#include "lluictrlfactory.h"
40#include "llfirstuse.h" 40#include "llfirstuse.h"
41 41
42class LLPopupData 42class LLPopupData
@@ -56,7 +56,7 @@ LLPanelMsgs::LLPanelMsgs() :
56 mDisabledPopups( NULL ), 56 mDisabledPopups( NULL ),
57 mEnabledPopups( NULL ) 57 mEnabledPopups( NULL )
58{ 58{
59 gUICtrlFactory->buildPanel(this, "panel_preferences_popups.xml"); 59 LLUICtrlFactory::getInstance()->buildPanel(this, "panel_preferences_popups.xml");
60} 60}
61 61
62 62
@@ -68,8 +68,8 @@ LLPanelMsgs::~LLPanelMsgs()
68//----------------------------------------------------------------------------- 68//-----------------------------------------------------------------------------
69BOOL LLPanelMsgs::postBuild() 69BOOL LLPanelMsgs::postBuild()
70{ 70{
71 mDisabledPopups = LLViewerUICtrlFactory::getScrollListByName(this, "disabled_popups"); 71 mDisabledPopups = getChild<LLScrollListCtrl>("disabled_popups");
72 mEnabledPopups = LLViewerUICtrlFactory::getScrollListByName(this, "enabled_popups"); 72 mEnabledPopups = getChild<LLScrollListCtrl>("enabled_popups");
73 childSetAction("enable_popup", onClickEnablePopup, this); 73 childSetAction("enable_popup", onClickEnablePopup, this);
74 childSetAction("reset_dialogs_btn", onClickResetDialogs, this); 74 childSetAction("reset_dialogs_btn", onClickResetDialogs, this);
75 childSetAction("skip_dialogs_btn", onClickSkipDialogs, this); 75 childSetAction("skip_dialogs_btn", onClickSkipDialogs, this);
diff --git a/linden/indra/newview/llpanelnetwork.cpp b/linden/indra/newview/llpanelnetwork.cpp
index be797cc..a900d0e 100644
--- a/linden/indra/newview/llpanelnetwork.cpp
+++ b/linden/indra/newview/llpanelnetwork.cpp
@@ -53,12 +53,12 @@
53#include "llviewerthrottle.h" 53#include "llviewerthrottle.h"
54#include "llworld.h" 54#include "llworld.h"
55#include "llviewercontrol.h" 55#include "llviewercontrol.h"
56#include "llvieweruictrlfactory.h" 56#include "lluictrlfactory.h"
57#include "llviewerwindow.h" 57#include "llviewerwindow.h"
58 58
59LLPanelNetwork::LLPanelNetwork() 59LLPanelNetwork::LLPanelNetwork()
60{ 60{
61 gUICtrlFactory->buildPanel(this, "panel_preferences_network.xml"); 61 LLUICtrlFactory::getInstance()->buildPanel(this, "panel_preferences_network.xml");
62} 62}
63 63
64BOOL LLPanelNetwork::postBuild() 64BOOL LLPanelNetwork::postBuild()
diff --git a/linden/indra/newview/llpanelobject.cpp b/linden/indra/newview/llpanelobject.cpp
index a395d09..7024691 100644
--- a/linden/indra/newview/llpanelobject.cpp
+++ b/linden/indra/newview/llpanelobject.cpp
@@ -69,7 +69,7 @@
69#include "llworld.h" 69#include "llworld.h"
70#include "pipeline.h" 70#include "pipeline.h"
71#include "llviewercontrol.h" 71#include "llviewercontrol.h"
72#include "llvieweruictrlfactory.h" 72#include "lluictrlfactory.h"
73#include "llfirstuse.h" 73#include "llfirstuse.h"
74 74
75#include "lldrawpool.h" 75#include "lldrawpool.h"
@@ -110,57 +110,57 @@ BOOL LLPanelObject::postBuild()
110 //-------------------------------------------------------- 110 //--------------------------------------------------------
111 111
112 // Lock checkbox 112 // Lock checkbox
113 mCheckLock = gUICtrlFactory->getCheckBoxByName(this,"checkbox locked"); 113 mCheckLock = getChild<LLCheckBoxCtrl>("checkbox locked");
114 childSetCommitCallback("checkbox locked",onCommitLock,this); 114 childSetCommitCallback("checkbox locked",onCommitLock,this);
115 115
116 // Physical checkbox 116 // Physical checkbox
117 mCheckPhysics = gUICtrlFactory->getCheckBoxByName(this,"Physical Checkbox Ctrl"); 117 mCheckPhysics = getChild<LLCheckBoxCtrl>("Physical Checkbox Ctrl");
118 childSetCommitCallback("Physical Checkbox Ctrl",onCommitPhysics,this); 118 childSetCommitCallback("Physical Checkbox Ctrl",onCommitPhysics,this);
119 119
120 // Temporary checkbox 120 // Temporary checkbox
121 mCheckTemporary = gUICtrlFactory->getCheckBoxByName(this,"Temporary Checkbox Ctrl"); 121 mCheckTemporary = getChild<LLCheckBoxCtrl>("Temporary Checkbox Ctrl");
122 childSetCommitCallback("Temporary Checkbox Ctrl",onCommitTemporary,this); 122 childSetCommitCallback("Temporary Checkbox Ctrl",onCommitTemporary,this);
123 123
124 // Phantom checkbox 124 // Phantom checkbox
125 mCheckPhantom = gUICtrlFactory->getCheckBoxByName(this,"Phantom Checkbox Ctrl"); 125 mCheckPhantom = getChild<LLCheckBoxCtrl>("Phantom Checkbox Ctrl");
126 childSetCommitCallback("Phantom Checkbox Ctrl",onCommitPhantom,this); 126 childSetCommitCallback("Phantom Checkbox Ctrl",onCommitPhantom,this);
127 127
128 // Position 128 // Position
129 mLabelPosition = gUICtrlFactory->getTextBoxByName(this,"label position"); 129 mLabelPosition = getChild<LLTextBox>("label position");
130 mCtrlPosX = gUICtrlFactory->getSpinnerByName(this,"Pos X"); 130 mCtrlPosX = getChild<LLSpinCtrl>("Pos X");
131 childSetCommitCallback("Pos X",onCommitPosition,this); 131 childSetCommitCallback("Pos X",onCommitPosition,this);
132 mCtrlPosY = gUICtrlFactory->getSpinnerByName(this,"Pos Y"); 132 mCtrlPosY = getChild<LLSpinCtrl>("Pos Y");
133 childSetCommitCallback("Pos Y",onCommitPosition,this); 133 childSetCommitCallback("Pos Y",onCommitPosition,this);
134 mCtrlPosZ = gUICtrlFactory->getSpinnerByName(this,"Pos Z"); 134 mCtrlPosZ = getChild<LLSpinCtrl>("Pos Z");
135 childSetCommitCallback("Pos Z",onCommitPosition,this); 135 childSetCommitCallback("Pos Z",onCommitPosition,this);
136 136
137 // Scale 137 // Scale
138 mLabelSize = gUICtrlFactory->getTextBoxByName(this,"label size"); 138 mLabelSize = getChild<LLTextBox>("label size");
139 mCtrlScaleX = gUICtrlFactory->getSpinnerByName(this,"Scale X"); 139 mCtrlScaleX = getChild<LLSpinCtrl>("Scale X");
140 childSetCommitCallback("Scale X",onCommitScale,this); 140 childSetCommitCallback("Scale X",onCommitScale,this);
141 141
142 // Scale Y 142 // Scale Y
143 mCtrlScaleY = gUICtrlFactory->getSpinnerByName(this,"Scale Y"); 143 mCtrlScaleY = getChild<LLSpinCtrl>("Scale Y");
144 childSetCommitCallback("Scale Y",onCommitScale,this); 144 childSetCommitCallback("Scale Y",onCommitScale,this);
145 145
146 // Scale Z 146 // Scale Z
147 mCtrlScaleZ = gUICtrlFactory->getSpinnerByName(this,"Scale Z"); 147 mCtrlScaleZ = getChild<LLSpinCtrl>("Scale Z");
148 childSetCommitCallback("Scale Z",onCommitScale,this); 148 childSetCommitCallback("Scale Z",onCommitScale,this);
149 149
150 // Rotation 150 // Rotation
151 mLabelRotation = gUICtrlFactory->getTextBoxByName(this,"label rotation"); 151 mLabelRotation = getChild<LLTextBox>("label rotation");
152 mCtrlRotX = gUICtrlFactory->getSpinnerByName(this,"Rot X"); 152 mCtrlRotX = getChild<LLSpinCtrl>("Rot X");
153 childSetCommitCallback("Rot X",onCommitRotation,this); 153 childSetCommitCallback("Rot X",onCommitRotation,this);
154 mCtrlRotY = gUICtrlFactory->getSpinnerByName(this,"Rot Y"); 154 mCtrlRotY = getChild<LLSpinCtrl>("Rot Y");
155 childSetCommitCallback("Rot Y",onCommitRotation,this); 155 childSetCommitCallback("Rot Y",onCommitRotation,this);
156 mCtrlRotZ = gUICtrlFactory->getSpinnerByName(this,"Rot Z"); 156 mCtrlRotZ = getChild<LLSpinCtrl>("Rot Z");
157 childSetCommitCallback("Rot Z",onCommitRotation,this); 157 childSetCommitCallback("Rot Z",onCommitRotation,this);
158 158
159 //-------------------------------------------------------- 159 //--------------------------------------------------------
160 160
161 // material type popup 161 // material type popup
162 mLabelMaterial = gUICtrlFactory->getTextBoxByName(this,"label material"); 162 mLabelMaterial = getChild<LLTextBox>("label material");
163 mComboMaterial = gUICtrlFactory->getComboBoxByName(this,"material"); 163 mComboMaterial = getChild<LLComboBox>("material");
164 childSetCommitCallback("material",onCommitMaterial,this); 164 childSetCommitCallback("material",onCommitMaterial,this);
165 mComboMaterial->removeall(); 165 mComboMaterial->removeall();
166 // *TODO:translate 166 // *TODO:translate
@@ -176,84 +176,84 @@ BOOL LLPanelObject::postBuild()
176 mComboMaterialItemCount = mComboMaterial->getItemCount(); 176 mComboMaterialItemCount = mComboMaterial->getItemCount();
177 177
178 // Base Type 178 // Base Type
179 mLabelBaseType = gUICtrlFactory->getTextBoxByName(this,"label basetype"); 179 mLabelBaseType = getChild<LLTextBox>("label basetype");
180 mComboBaseType = gUICtrlFactory->getComboBoxByName(this,"comboBaseType"); 180 mComboBaseType = getChild<LLComboBox>("comboBaseType");
181 childSetCommitCallback("comboBaseType",onCommitParametric,this); 181 childSetCommitCallback("comboBaseType",onCommitParametric,this);
182 182
183 // Cut 183 // Cut
184 mLabelCut = gUICtrlFactory->getTextBoxByName(this,"text cut"); 184 mLabelCut = getChild<LLTextBox>("text cut");
185 mSpinCutBegin = gUICtrlFactory->getSpinnerByName(this,"cut begin"); 185 mSpinCutBegin = getChild<LLSpinCtrl>("cut begin");
186 childSetCommitCallback("cut begin",onCommitParametric,this); 186 childSetCommitCallback("cut begin",onCommitParametric,this);
187 mSpinCutBegin->setValidateBeforeCommit( precommitValidate ); 187 mSpinCutBegin->setValidateBeforeCommit( precommitValidate );
188 mSpinCutEnd = gUICtrlFactory->getSpinnerByName(this,"cut end"); 188 mSpinCutEnd = getChild<LLSpinCtrl>("cut end");
189 childSetCommitCallback("cut end",onCommitParametric,this); 189 childSetCommitCallback("cut end",onCommitParametric,this);
190 mSpinCutEnd->setValidateBeforeCommit( &precommitValidate ); 190 mSpinCutEnd->setValidateBeforeCommit( &precommitValidate );
191 191
192 // Hollow / Skew 192 // Hollow / Skew
193 mLabelHollow = gUICtrlFactory->getTextBoxByName(this,"text hollow"); 193 mLabelHollow = getChild<LLTextBox>("text hollow");
194 mLabelSkew = gUICtrlFactory->getTextBoxByName(this,"text skew"); 194 mLabelSkew = getChild<LLTextBox>("text skew");
195 mSpinHollow = gUICtrlFactory->getSpinnerByName(this,"Scale 1"); 195 mSpinHollow = getChild<LLSpinCtrl>("Scale 1");
196 childSetCommitCallback("Scale 1",onCommitParametric,this); 196 childSetCommitCallback("Scale 1",onCommitParametric,this);
197 mSpinHollow->setValidateBeforeCommit( &precommitValidate ); 197 mSpinHollow->setValidateBeforeCommit( &precommitValidate );
198 mSpinSkew = gUICtrlFactory->getSpinnerByName(this,"Skew"); 198 mSpinSkew = getChild<LLSpinCtrl>("Skew");
199 childSetCommitCallback("Skew",onCommitParametric,this); 199 childSetCommitCallback("Skew",onCommitParametric,this);
200 mSpinSkew->setValidateBeforeCommit( &precommitValidate ); 200 mSpinSkew->setValidateBeforeCommit( &precommitValidate );
201 mLabelHoleType = gUICtrlFactory->getTextBoxByName(this,"Hollow Shape"); 201 mLabelHoleType = getChild<LLTextBox>("Hollow Shape");
202 202
203 // Hole Type 203 // Hole Type
204 mComboHoleType = gUICtrlFactory->getComboBoxByName(this,"hole"); 204 mComboHoleType = getChild<LLComboBox>("hole");
205 childSetCommitCallback("hole",onCommitParametric,this); 205 childSetCommitCallback("hole",onCommitParametric,this);
206 206
207 // Twist 207 // Twist
208 mLabelTwist = gUICtrlFactory->getTextBoxByName(this,"text twist"); 208 mLabelTwist = getChild<LLTextBox>("text twist");
209 mSpinTwistBegin = gUICtrlFactory->getSpinnerByName(this,"Twist Begin"); 209 mSpinTwistBegin = getChild<LLSpinCtrl>("Twist Begin");
210 childSetCommitCallback("Twist Begin",onCommitParametric,this); 210 childSetCommitCallback("Twist Begin",onCommitParametric,this);
211 mSpinTwistBegin->setValidateBeforeCommit( precommitValidate ); 211 mSpinTwistBegin->setValidateBeforeCommit( precommitValidate );
212 mSpinTwist = gUICtrlFactory->getSpinnerByName(this,"Twist End"); 212 mSpinTwist = getChild<LLSpinCtrl>("Twist End");
213 childSetCommitCallback("Twist End",onCommitParametric,this); 213 childSetCommitCallback("Twist End",onCommitParametric,this);
214 mSpinTwist->setValidateBeforeCommit( &precommitValidate ); 214 mSpinTwist->setValidateBeforeCommit( &precommitValidate );
215 215
216 // Scale 216 // Scale
217 mSpinScaleX = gUICtrlFactory->getSpinnerByName(this,"Taper Scale X"); 217 mSpinScaleX = getChild<LLSpinCtrl>("Taper Scale X");
218 childSetCommitCallback("Taper Scale X",onCommitParametric,this); 218 childSetCommitCallback("Taper Scale X",onCommitParametric,this);
219 mSpinScaleX->setValidateBeforeCommit( &precommitValidate ); 219 mSpinScaleX->setValidateBeforeCommit( &precommitValidate );
220 mSpinScaleY = gUICtrlFactory->getSpinnerByName(this,"Taper Scale Y"); 220 mSpinScaleY = getChild<LLSpinCtrl>("Taper Scale Y");
221 childSetCommitCallback("Taper Scale Y",onCommitParametric,this); 221 childSetCommitCallback("Taper Scale Y",onCommitParametric,this);
222 mSpinScaleY->setValidateBeforeCommit( &precommitValidate ); 222 mSpinScaleY->setValidateBeforeCommit( &precommitValidate );
223 223
224 // Shear 224 // Shear
225 mLabelShear = gUICtrlFactory->getTextBoxByName(this,"text topshear"); 225 mLabelShear = getChild<LLTextBox>("text topshear");
226 mSpinShearX = gUICtrlFactory->getSpinnerByName(this,"Shear X"); 226 mSpinShearX = getChild<LLSpinCtrl>("Shear X");
227 childSetCommitCallback("Shear X",onCommitParametric,this); 227 childSetCommitCallback("Shear X",onCommitParametric,this);
228 mSpinShearX->setValidateBeforeCommit( &precommitValidate ); 228 mSpinShearX->setValidateBeforeCommit( &precommitValidate );
229 mSpinShearY = gUICtrlFactory->getSpinnerByName(this,"Shear Y"); 229 mSpinShearY = getChild<LLSpinCtrl>("Shear Y");
230 childSetCommitCallback("Shear Y",onCommitParametric,this); 230 childSetCommitCallback("Shear Y",onCommitParametric,this);
231 mSpinShearY->setValidateBeforeCommit( &precommitValidate ); 231 mSpinShearY->setValidateBeforeCommit( &precommitValidate );
232 232
233 // Path / Profile 233 // Path / Profile
234 mCtrlPathBegin = gUICtrlFactory->getSpinnerByName(this,"Path Limit Begin"); 234 mCtrlPathBegin = getChild<LLSpinCtrl>("Path Limit Begin");
235 childSetCommitCallback("Path Limit Begin",onCommitParametric,this); 235 childSetCommitCallback("Path Limit Begin",onCommitParametric,this);
236 mCtrlPathBegin->setValidateBeforeCommit( &precommitValidate ); 236 mCtrlPathBegin->setValidateBeforeCommit( &precommitValidate );
237 mCtrlPathEnd = gUICtrlFactory->getSpinnerByName(this,"Path Limit End"); 237 mCtrlPathEnd = getChild<LLSpinCtrl>("Path Limit End");
238 childSetCommitCallback("Path Limit End",onCommitParametric,this); 238 childSetCommitCallback("Path Limit End",onCommitParametric,this);
239 mCtrlPathEnd->setValidateBeforeCommit( &precommitValidate ); 239 mCtrlPathEnd->setValidateBeforeCommit( &precommitValidate );
240 240
241 // Taper 241 // Taper
242 mLabelTaper = gUICtrlFactory->getTextBoxByName(this,"text taper2"); 242 mLabelTaper = getChild<LLTextBox>("text taper2");
243 mSpinTaperX = gUICtrlFactory->getSpinnerByName(this,"Taper X"); 243 mSpinTaperX = getChild<LLSpinCtrl>("Taper X");
244 childSetCommitCallback("Taper X",onCommitParametric,this); 244 childSetCommitCallback("Taper X",onCommitParametric,this);
245 mSpinTaperX->setValidateBeforeCommit( precommitValidate ); 245 mSpinTaperX->setValidateBeforeCommit( precommitValidate );
246 mSpinTaperY = gUICtrlFactory->getSpinnerByName(this,"Taper Y"); 246 mSpinTaperY = getChild<LLSpinCtrl>("Taper Y");
247 childSetCommitCallback("Taper Y",onCommitParametric,this); 247 childSetCommitCallback("Taper Y",onCommitParametric,this);
248 mSpinTaperY->setValidateBeforeCommit( precommitValidate ); 248 mSpinTaperY->setValidateBeforeCommit( precommitValidate );
249 249
250 // Radius Offset / Revolutions 250 // Radius Offset / Revolutions
251 mLabelRadiusOffset = gUICtrlFactory->getTextBoxByName(this,"text radius delta"); 251 mLabelRadiusOffset = getChild<LLTextBox>("text radius delta");
252 mLabelRevolutions = gUICtrlFactory->getTextBoxByName(this,"text revolutions"); 252 mLabelRevolutions = getChild<LLTextBox>("text revolutions");
253 mSpinRadiusOffset = gUICtrlFactory->getSpinnerByName(this,"Radius Offset"); 253 mSpinRadiusOffset = getChild<LLSpinCtrl>("Radius Offset");
254 childSetCommitCallback("Radius Offset",onCommitParametric,this); 254 childSetCommitCallback("Radius Offset",onCommitParametric,this);
255 mSpinRadiusOffset->setValidateBeforeCommit( &precommitValidate ); 255 mSpinRadiusOffset->setValidateBeforeCommit( &precommitValidate );
256 mSpinRevolutions = gUICtrlFactory->getSpinnerByName(this,"Revolutions"); 256 mSpinRevolutions = getChild<LLSpinCtrl>("Revolutions");
257 childSetCommitCallback("Revolutions",onCommitParametric,this); 257 childSetCommitCallback("Revolutions",onCommitParametric,this);
258 mSpinRevolutions->setValidateBeforeCommit( &precommitValidate ); 258 mSpinRevolutions->setValidateBeforeCommit( &precommitValidate );
259 259
@@ -272,7 +272,7 @@ BOOL LLPanelObject::postBuild()
272 // Allow any texture to be used during non-immediate mode. 272 // Allow any texture to be used during non-immediate mode.
273 mCtrlSculptTexture->setNonImmediateFilterPermMask(PERM_NONE); 273 mCtrlSculptTexture->setNonImmediateFilterPermMask(PERM_NONE);
274 LLAggregatePermissions texture_perms; 274 LLAggregatePermissions texture_perms;
275 if (gSelectMgr->selectGetAggregateTexturePermissions(texture_perms)) 275 if (LLSelectMgr::getInstance()->selectGetAggregateTexturePermissions(texture_perms))
276 { 276 {
277 BOOL can_copy = 277 BOOL can_copy =
278 texture_perms.getValue(PERM_COPY) == LLAggregatePermissions::AP_EMPTY || 278 texture_perms.getValue(PERM_COPY) == LLAggregatePermissions::AP_EMPTY ||
@@ -288,8 +288,8 @@ BOOL LLPanelObject::postBuild()
288 } 288 }
289 } 289 }
290 290
291 mLabelSculptType = gUICtrlFactory->getTextBoxByName(this, "label sculpt type"); 291 mLabelSculptType = getChild<LLTextBox>("label sculpt type");
292 mCtrlSculptType = gUICtrlFactory->getComboBoxByName(this, "sculpt type control"); 292 mCtrlSculptType = getChild<LLComboBox>( "sculpt type control");
293 childSetCommitCallback("sculpt type control", onCommitSculptType, this); 293 childSetCommitCallback("sculpt type control", onCommitSculptType, this);
294 294
295 295
@@ -317,11 +317,11 @@ LLPanelObject::~LLPanelObject()
317 317
318void LLPanelObject::getState( ) 318void LLPanelObject::getState( )
319{ 319{
320 LLViewerObject* objectp = gSelectMgr->getSelection()->getFirstRootObject(); 320 LLViewerObject* objectp = LLSelectMgr::getInstance()->getSelection()->getFirstRootObject();
321 LLViewerObject* root_objectp = objectp; 321 LLViewerObject* root_objectp = objectp;
322 if(!objectp) 322 if(!objectp)
323 { 323 {
324 objectp = gSelectMgr->getSelection()->getFirstObject(); 324 objectp = LLSelectMgr::getInstance()->getSelection()->getFirstObject();
325 // *FIX: shouldn't we just keep the child? 325 // *FIX: shouldn't we just keep the child?
326 if (objectp) 326 if (objectp)
327 { 327 {
@@ -430,13 +430,13 @@ void LLPanelObject::getState( )
430 BOOL owners_identical; 430 BOOL owners_identical;
431 LLUUID owner_id; 431 LLUUID owner_id;
432 LLString owner_name; 432 LLString owner_name;
433 owners_identical = gSelectMgr->selectGetOwner(owner_id, owner_name); 433 owners_identical = LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name);
434 434
435 // BUG? Check for all objects being editable? 435 // BUG? Check for all objects being editable?
436 S32 roots_selected = gSelectMgr->getSelection()->getRootObjectCount(); 436 S32 roots_selected = LLSelectMgr::getInstance()->getSelection()->getRootObjectCount();
437 BOOL editable = root_objectp->permModify(); 437 BOOL editable = root_objectp->permModify();
438 S32 selected_count = gSelectMgr->getSelection()->getObjectCount(); 438 S32 selected_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount();
439 BOOL single_volume = (gSelectMgr->selectionAllPCode( LL_PCODE_VOLUME )) 439 BOOL single_volume = (LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME ))
440 && (selected_count == 1); 440 && (selected_count == 1);
441 441
442 // Select Single Message 442 // Select Single Message
@@ -460,7 +460,7 @@ void LLPanelObject::getState( )
460 BOOL valid; 460 BOOL valid;
461 U32 owner_mask_on; 461 U32 owner_mask_on;
462 U32 owner_mask_off; 462 U32 owner_mask_off;
463 valid = gSelectMgr->selectGetPerm(PERM_OWNER, &owner_mask_on, &owner_mask_off); 463 valid = LLSelectMgr::getInstance()->selectGetPerm(PERM_OWNER, &owner_mask_on, &owner_mask_off);
464 464
465 if(valid) 465 if(valid)
466 { 466 {
@@ -517,7 +517,7 @@ void LLPanelObject::getState( )
517 return object->getMaterial(); 517 return object->getMaterial();
518 } 518 }
519 } func; 519 } func;
520 bool material_same = gSelectMgr->getSelection()->getSelectedTEValue( &func, material_code ); 520 bool material_same = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, material_code );
521 521
522 if (editable && single_volume && material_same) 522 if (editable && single_volume && material_same)
523 { 523 {
@@ -1054,10 +1054,9 @@ void LLPanelObject::getState( )
1054 mLabelRevolutions->setVisible( revolutions_visible ); 1054 mLabelRevolutions->setVisible( revolutions_visible );
1055 mSpinRevolutions ->setVisible( revolutions_visible ); 1055 mSpinRevolutions ->setVisible( revolutions_visible );
1056 1056
1057 bool sculpt_type_visible = FALSE; // currently not visible - for LSL setting only
1058 mCtrlSculptTexture->setVisible(sculpt_texture_visible); 1057 mCtrlSculptTexture->setVisible(sculpt_texture_visible);
1059 mLabelSculptType->setVisible(sculpt_texture_visible && sculpt_type_visible); 1058 mLabelSculptType->setVisible(sculpt_texture_visible);
1060 mCtrlSculptType->setVisible(sculpt_texture_visible && sculpt_type_visible); 1059 mCtrlSculptType->setVisible(sculpt_texture_visible);
1061 1060
1062 1061
1063 // sculpt texture 1062 // sculpt texture
@@ -1076,7 +1075,7 @@ void LLPanelObject::getState( )
1076 mSculptTypeRevert = sculpt_params->getSculptType(); 1075 mSculptTypeRevert = sculpt_params->getSculptType();
1077 } 1076 }
1078 1077
1079 LLTextureCtrl* mTextureCtrl = LLViewerUICtrlFactory::getTexturePickerByName(this,"sculpt texture control"); 1078 LLTextureCtrl* mTextureCtrl = getChild<LLTextureCtrl>("sculpt texture control");
1080 if(mTextureCtrl) 1079 if(mTextureCtrl)
1081 { 1080 {
1082 mTextureCtrl->setTentative(FALSE); 1081 mTextureCtrl->setTentative(FALSE);
@@ -1123,7 +1122,7 @@ void LLPanelObject::sendIsPhysical()
1123 BOOL value = mCheckPhysics->get(); 1122 BOOL value = mCheckPhysics->get();
1124 if( mIsPhysical != value ) 1123 if( mIsPhysical != value )
1125 { 1124 {
1126 gSelectMgr->selectionUpdatePhysics(value); 1125 LLSelectMgr::getInstance()->selectionUpdatePhysics(value);
1127 mIsPhysical = value; 1126 mIsPhysical = value;
1128 1127
1129 llinfos << "update physics sent" << llendl; 1128 llinfos << "update physics sent" << llendl;
@@ -1139,7 +1138,7 @@ void LLPanelObject::sendIsTemporary()
1139 BOOL value = mCheckTemporary->get(); 1138 BOOL value = mCheckTemporary->get();
1140 if( mIsTemporary != value ) 1139 if( mIsTemporary != value )
1141 { 1140 {
1142 gSelectMgr->selectionUpdateTemporary(value); 1141 LLSelectMgr::getInstance()->selectionUpdateTemporary(value);
1143 mIsTemporary = value; 1142 mIsTemporary = value;
1144 1143
1145 llinfos << "update temporary sent" << llendl; 1144 llinfos << "update temporary sent" << llendl;
@@ -1156,7 +1155,7 @@ void LLPanelObject::sendIsPhantom()
1156 BOOL value = mCheckPhantom->get(); 1155 BOOL value = mCheckPhantom->get();
1157 if( mIsPhantom != value ) 1156 if( mIsPhantom != value )
1158 { 1157 {
1159 gSelectMgr->selectionUpdatePhantom(value); 1158 LLSelectMgr::getInstance()->selectionUpdatePhantom(value);
1160 mIsPhantom = value; 1159 mIsPhantom = value;
1161 1160
1162 llinfos << "update phantom sent" << llendl; 1161 llinfos << "update phantom sent" << llendl;
@@ -1172,7 +1171,7 @@ void LLPanelObject::sendCastShadows()
1172 BOOL value = mCheckCastShadows->get(); 1171 BOOL value = mCheckCastShadows->get();
1173 if( mCastShadows != value ) 1172 if( mCastShadows != value )
1174 { 1173 {
1175 gSelectMgr->selectionUpdateCastShadows(value); 1174 LLSelectMgr::getInstance()->selectionUpdateCastShadows(value);
1176 mCastShadows = value; 1175 mCastShadows = value;
1177 1176
1178 llinfos << "update cast shadows sent" << llendl; 1177 llinfos << "update cast shadows sent" << llendl;
@@ -1196,7 +1195,7 @@ void LLPanelObject::onCommitMaterial( LLUICtrl* ctrl, void* userdata )
1196 if (material_name != LEGACY_FULLBRIGHT_DESC) 1195 if (material_name != LEGACY_FULLBRIGHT_DESC)
1197 { 1196 {
1198 U8 material_code = LLMaterialTable::basic.getMCode(material_name.c_str()); 1197 U8 material_code = LLMaterialTable::basic.getMCode(material_name.c_str());
1199 gSelectMgr->selectionSetMaterial(material_code); 1198 LLSelectMgr::getInstance()->selectionSetMaterial(material_code);
1200 } 1199 }
1201 } 1200 }
1202} 1201}
@@ -1574,7 +1573,7 @@ void LLPanelObject::sendRotation()
1574 1573
1575 mObject->setRotation(rotation, TRUE ); 1574 mObject->setRotation(rotation, TRUE );
1576 1575
1577 gSelectMgr->sendMultipleUpdate(UPD_ROTATION); 1576 LLSelectMgr::getInstance()->sendMultipleUpdate(UPD_ROTATION);
1578 } 1577 }
1579} 1578}
1580 1579
@@ -1596,13 +1595,13 @@ void LLPanelObject::sendScale()
1596 BOOL dont_stretch_textures = !LLManipScale::getStretchTextures(); 1595 BOOL dont_stretch_textures = !LLManipScale::getStretchTextures();
1597 if (dont_stretch_textures) 1596 if (dont_stretch_textures)
1598 { 1597 {
1599 gSelectMgr->saveSelectedObjectTransform(SELECT_ACTION_TYPE_SCALE); 1598 LLSelectMgr::getInstance()->saveSelectedObjectTransform(SELECT_ACTION_TYPE_SCALE);
1600 } 1599 }
1601 1600
1602 mObject->setScale(newscale, TRUE); 1601 mObject->setScale(newscale, TRUE);
1603 gSelectMgr->sendMultipleUpdate(UPD_SCALE | UPD_POSITION); 1602 LLSelectMgr::getInstance()->sendMultipleUpdate(UPD_SCALE | UPD_POSITION);
1604 1603
1605 gSelectMgr->adjustTexturesByScale(TRUE, !dont_stretch_textures); 1604 LLSelectMgr::getInstance()->adjustTexturesByScale(TRUE, !dont_stretch_textures);
1606// llinfos << "scale sent" << llendl; 1605// llinfos << "scale sent" << llendl;
1607 } 1606 }
1608 else 1607 else
@@ -1621,8 +1620,8 @@ void LLPanelObject::sendPosition()
1621 1620
1622 // Clamp the Z height 1621 // Clamp the Z height
1623 const F32 height = newpos.mV[VZ]; 1622 const F32 height = newpos.mV[VZ];
1624 const F32 min_height = gWorldp->getMinAllowedZ(mObject); 1623 const F32 min_height = LLWorld::getInstance()->getMinAllowedZ(mObject);
1625 const F32 max_height = gWorldPointer->getRegionMaxHeight(); 1624 const F32 max_height = LLWorld::getInstance()->getRegionMaxHeight();
1626 1625
1627 if (!mObject->isAttachment()) 1626 if (!mObject->isAttachment())
1628 { 1627 {
@@ -1640,7 +1639,7 @@ void LLPanelObject::sendPosition()
1640 // Grass is always drawn on the ground, so clamp its position to the ground 1639 // Grass is always drawn on the ground, so clamp its position to the ground
1641 if (mObject->getPCode() == LL_PCODE_LEGACY_GRASS) 1640 if (mObject->getPCode() == LL_PCODE_LEGACY_GRASS)
1642 { 1641 {
1643 mCtrlPosZ->set(gWorldp->resolveLandHeightAgent(newpos) + 1.f); 1642 mCtrlPosZ->set(LLWorld::getInstance()->resolveLandHeightAgent(newpos) + 1.f);
1644 } 1643 }
1645 } 1644 }
1646 1645
@@ -1648,7 +1647,7 @@ void LLPanelObject::sendPosition()
1648 // won't get dumped by the simulator. 1647 // won't get dumped by the simulator.
1649 LLVector3d new_pos_global = regionp->getPosGlobalFromRegion(newpos); 1648 LLVector3d new_pos_global = regionp->getPosGlobalFromRegion(newpos);
1650 1649
1651 if ( gWorldPointer->positionRegionValidGlobal(new_pos_global) ) 1650 if ( LLWorld::getInstance()->positionRegionValidGlobal(new_pos_global) )
1652 { 1651 {
1653 // send only if the position is changed, that is, the delta vector is not zero 1652 // send only if the position is changed, that is, the delta vector is not zero
1654 LLVector3d old_pos_global = mObject->getPositionGlobal(); 1653 LLVector3d old_pos_global = mObject->getPositionGlobal();
@@ -1666,16 +1665,9 @@ void LLPanelObject::sendPosition()
1666 { 1665 {
1667 mObject->setPositionEdit(newpos); 1666 mObject->setPositionEdit(newpos);
1668 } 1667 }
1669 gSelectMgr->sendMultipleUpdate(UPD_POSITION); 1668 LLSelectMgr::getInstance()->sendMultipleUpdate(UPD_POSITION);
1670 //mRootObject->sendPositionUpdate();
1671 1669
1672 gSelectMgr->updateSelectionCenter(); 1670 LLSelectMgr::getInstance()->updateSelectionCenter();
1673
1674// llinfos << "position sent" << llendl;
1675 }
1676 else
1677 {
1678// llinfos << "position not changed" << llendl;
1679 } 1671 }
1680 } 1672 }
1681 else 1673 else
@@ -1727,9 +1719,9 @@ void LLPanelObject::draw()
1727 const LLColor4 blue( 0.f, 0.5f, 1.0f, 1); 1719 const LLColor4 blue( 0.f, 0.5f, 1.0f, 1);
1728 1720
1729 // Tune the colors of the labels 1721 // Tune the colors of the labels
1730 LLTool* tool = gToolMgr->getCurrentTool(); 1722 LLTool* tool = LLToolMgr::getInstance()->getCurrentTool();
1731 1723
1732 if (tool == gToolTranslate) 1724 if (tool == LLToolCompTranslate::getInstance())
1733 { 1725 {
1734 mCtrlPosX ->setLabelColor(red); 1726 mCtrlPosX ->setLabelColor(red);
1735 mCtrlPosY ->setLabelColor(green); 1727 mCtrlPosY ->setLabelColor(green);
@@ -1743,7 +1735,7 @@ void LLPanelObject::draw()
1743 mCtrlRotY ->setLabelColor(white); 1735 mCtrlRotY ->setLabelColor(white);
1744 mCtrlRotZ ->setLabelColor(white); 1736 mCtrlRotZ ->setLabelColor(white);
1745 } 1737 }
1746 else if ( tool == gToolStretch ) 1738 else if ( tool == LLToolCompScale::getInstance() )
1747 { 1739 {
1748 mCtrlPosX ->setLabelColor(white); 1740 mCtrlPosX ->setLabelColor(white);
1749 mCtrlPosY ->setLabelColor(white); 1741 mCtrlPosY ->setLabelColor(white);
@@ -1757,7 +1749,7 @@ void LLPanelObject::draw()
1757 mCtrlRotY ->setLabelColor(white); 1749 mCtrlRotY ->setLabelColor(white);
1758 mCtrlRotZ ->setLabelColor(white); 1750 mCtrlRotZ ->setLabelColor(white);
1759 } 1751 }
1760 else if ( tool == gToolRotate ) 1752 else if ( tool == LLToolCompRotate::getInstance() )
1761 { 1753 {
1762 mCtrlPosX ->setLabelColor(white); 1754 mCtrlPosX ->setLabelColor(white);
1763 mCtrlPosY ->setLabelColor(white); 1755 mCtrlPosY ->setLabelColor(white);
@@ -1823,7 +1815,7 @@ void LLPanelObject::clearCtrls()
1823 mLabelRadiusOffset->setEnabled( FALSE ); 1815 mLabelRadiusOffset->setEnabled( FALSE );
1824 mLabelRevolutions->setEnabled( FALSE ); 1816 mLabelRevolutions->setEnabled( FALSE );
1825 1817
1826 childSetVisible("select_single", TRUE); 1818 childSetVisible("select_single", FALSE);
1827 childSetVisible("edit_object", TRUE); 1819 childSetVisible("edit_object", TRUE);
1828 childSetEnabled("edit_object", FALSE); 1820 childSetEnabled("edit_object", FALSE);
1829 1821
@@ -1847,7 +1839,7 @@ void LLPanelObject::onCommitLock(LLUICtrl *ctrl, void *data)
1847 1839
1848 BOOL new_state = self->mCheckLock->get(); 1840 BOOL new_state = self->mCheckLock->get();
1849 1841
1850 gSelectMgr->selectionSetObjectPermissions(PERM_OWNER, !new_state, PERM_MOVE | PERM_MODIFY); 1842 LLSelectMgr::getInstance()->selectionSetObjectPermissions(PERM_OWNER, !new_state, PERM_MOVE | PERM_MODIFY);
1851} 1843}
1852 1844
1853// static 1845// static
diff --git a/linden/indra/newview/llpanelpermissions.cpp b/linden/indra/newview/llpanelpermissions.cpp
index cd97d0c..ea742ba 100644
--- a/linden/indra/newview/llpanelpermissions.cpp
+++ b/linden/indra/newview/llpanelpermissions.cpp
@@ -61,7 +61,7 @@
61#include "llfloatergroups.h" 61#include "llfloatergroups.h"
62#include "llnamebox.h" 62#include "llnamebox.h"
63#include "llviewercontrol.h" 63#include "llviewercontrol.h"
64#include "llvieweruictrlfactory.h" 64#include "lluictrlfactory.h"
65#include "roles_constants.h" 65#include "roles_constants.h"
66 66
67///---------------------------------------------------------------------------- 67///----------------------------------------------------------------------------
@@ -109,7 +109,7 @@ BOOL LLPanelPermissions::postBuild()
109 this->childSetCommitCallback("clickaction",LLPanelPermissions::onCommitClickAction,this); 109 this->childSetCommitCallback("clickaction",LLPanelPermissions::onCommitClickAction,this);
110 this->childSetCommitCallback("search_check",LLPanelPermissions::onCommitIncludeInSearch,this); 110 this->childSetCommitCallback("search_check",LLPanelPermissions::onCommitIncludeInSearch,this);
111 111
112 LLTextBox* group_rect_proxy = gUICtrlFactory->getTextBoxByName(this,"Group Name Proxy"); 112 LLTextBox* group_rect_proxy = getChild<LLTextBox>("Group Name Proxy");
113 if(group_rect_proxy ) 113 if(group_rect_proxy )
114 { 114 {
115 mLabelGroupName = new LLNameBox("Group Name", group_rect_proxy->getRect()); 115 mLabelGroupName = new LLNameBox("Group Name", group_rect_proxy->getRect());
@@ -132,7 +132,7 @@ LLPanelPermissions::~LLPanelPermissions()
132 132
133void LLPanelPermissions::refresh() 133void LLPanelPermissions::refresh()
134{ 134{
135 LLButton* BtnDeedToGroup = gUICtrlFactory->getButtonByName(this,"button deed"); 135 LLButton* BtnDeedToGroup = getChild<LLButton>("button deed");
136 if(BtnDeedToGroup) 136 if(BtnDeedToGroup)
137 { 137 {
138 LLString deedText; 138 LLString deedText;
@@ -148,16 +148,16 @@ void LLPanelPermissions::refresh()
148 BtnDeedToGroup->setLabelUnselected(deedText); 148 BtnDeedToGroup->setLabelUnselected(deedText);
149 } 149 }
150 BOOL root_selected = TRUE; 150 BOOL root_selected = TRUE;
151 LLSelectNode* nodep = gSelectMgr->getSelection()->getFirstRootNode(); 151 LLSelectNode* nodep = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode();
152 S32 object_count = gSelectMgr->getSelection()->getRootObjectCount(); 152 S32 object_count = LLSelectMgr::getInstance()->getSelection()->getRootObjectCount();
153 if(!nodep || 0 == object_count) 153 if(!nodep || 0 == object_count)
154 { 154 {
155 nodep = gSelectMgr->getSelection()->getFirstNode(); 155 nodep = LLSelectMgr::getInstance()->getSelection()->getFirstNode();
156 object_count = gSelectMgr->getSelection()->getObjectCount(); 156 object_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount();
157 root_selected = FALSE; 157 root_selected = FALSE;
158 } 158 }
159 159
160 //BOOL attachment_selected = gSelectMgr->getSelection()->isAttachment(); 160 //BOOL attachment_selected = LLSelectMgr::getInstance()->getSelection()->isAttachment();
161 //attachment_selected = false; 161 //attachment_selected = false;
162 LLViewerObject* objectp = NULL; 162 LLViewerObject* objectp = NULL;
163 if(nodep) objectp = nodep->getObject(); 163 if(nodep) objectp = nodep->getObject();
@@ -222,7 +222,7 @@ void LLPanelPermissions::refresh()
222 childSetValue("search_check", FALSE); 222 childSetValue("search_check", FALSE);
223 childSetEnabled("search_check", false); 223 childSetEnabled("search_check", false);
224 224
225 LLRadioGroup* RadioSaleType = gUICtrlFactory->getRadioGroupByName(this,"sale type"); 225 LLRadioGroup* RadioSaleType = getChild<LLRadioGroup>("sale type");
226 if(RadioSaleType) 226 if(RadioSaleType)
227 { 227 {
228 RadioSaleType->setSelectedIndex(-1); 228 RadioSaleType->setSelectedIndex(-1);
@@ -234,7 +234,7 @@ void LLPanelPermissions::refresh()
234 childSetEnabled("EdCost",false); 234 childSetEnabled("EdCost",false);
235 235
236 childSetEnabled("label click action",false); 236 childSetEnabled("label click action",false);
237 LLComboBox* ComboClickAction = gUICtrlFactory->getComboBoxByName(this,"clickaction"); 237 LLComboBox* ComboClickAction = getChild<LLComboBox>("clickaction");
238 if(ComboClickAction) 238 if(ComboClickAction)
239 { 239 {
240 ComboClickAction->setEnabled(FALSE); 240 ComboClickAction->setEnabled(FALSE);
@@ -254,9 +254,9 @@ void LLPanelPermissions::refresh()
254 BOOL is_one_object = (object_count == 1); 254 BOOL is_one_object = (object_count == 1);
255 255
256 // BUG: fails if a root and non-root are both single-selected. 256 // BUG: fails if a root and non-root are both single-selected.
257 BOOL is_perm_modify = (gSelectMgr->getSelection()->getFirstRootNode() 257 BOOL is_perm_modify = (LLSelectMgr::getInstance()->getSelection()->getFirstRootNode()
258 && gSelectMgr->selectGetRootsModify()) 258 && LLSelectMgr::getInstance()->selectGetRootsModify())
259 || gSelectMgr->selectGetModify(); 259 || LLSelectMgr::getInstance()->selectGetModify();
260 const LLView* keyboard_focus_view = gFocusMgr.getKeyboardFocus(); 260 const LLView* keyboard_focus_view = gFocusMgr.getKeyboardFocus();
261 S32 string_index = 0; 261 S32 string_index = 0;
262 LLString MODIFY_INFO_STRINGS[] = 262 LLString MODIFY_INFO_STRINGS[] =
@@ -283,7 +283,7 @@ void LLPanelPermissions::refresh()
283 childSetEnabled("Creator:",true); 283 childSetEnabled("Creator:",true);
284 BOOL creators_identical; 284 BOOL creators_identical;
285 LLString creator_name; 285 LLString creator_name;
286 creators_identical = gSelectMgr->selectGetCreator(mCreatorID, 286 creators_identical = LLSelectMgr::getInstance()->selectGetCreator(mCreatorID,
287 creator_name); 287 creator_name);
288 288
289 childSetText("Creator Name",creator_name); 289 childSetText("Creator Name",creator_name);
@@ -295,13 +295,13 @@ void LLPanelPermissions::refresh()
295 295
296 BOOL owners_identical; 296 BOOL owners_identical;
297 LLString owner_name; 297 LLString owner_name;
298 owners_identical = gSelectMgr->selectGetOwner(mOwnerID, owner_name); 298 owners_identical = LLSelectMgr::getInstance()->selectGetOwner(mOwnerID, owner_name);
299 299
300// llinfos << "owners_identical " << (owners_identical ? "TRUE": "FALSE") << llendl; 300// llinfos << "owners_identical " << (owners_identical ? "TRUE": "FALSE") << llendl;
301 301
302 if (mOwnerID.isNull()) 302 if (mOwnerID.isNull())
303 { 303 {
304 if(gSelectMgr->selectIsGroupOwned()) 304 if(LLSelectMgr::getInstance()->selectIsGroupOwned())
305 { 305 {
306 // Group owned already displayed by selectGetOwner 306 // Group owned already displayed by selectGetOwner
307 } 307 }
@@ -309,7 +309,7 @@ void LLPanelPermissions::refresh()
309 { 309 {
310 // Display last owner if public 310 // Display last owner if public
311 LLString last_owner_name; 311 LLString last_owner_name;
312 gSelectMgr->selectGetLastOwner(mLastOwnerID, last_owner_name); 312 LLSelectMgr::getInstance()->selectGetLastOwner(mLastOwnerID, last_owner_name);
313 313
314 // It should never happen that the last owner is null and the owner 314 // It should never happen that the last owner is null and the owner
315 // is null, but it seems to be a bug in the simulator right now. JC 315 // is null, but it seems to be a bug in the simulator right now. JC
@@ -323,12 +323,12 @@ void LLPanelPermissions::refresh()
323 323
324 childSetText("Owner Name",owner_name); 324 childSetText("Owner Name",owner_name);
325 childSetEnabled("Owner Name",TRUE); 325 childSetEnabled("Owner Name",TRUE);
326 childSetEnabled("button owner profile",owners_identical && (mOwnerID.notNull() || gSelectMgr->selectIsGroupOwned())); 326 childSetEnabled("button owner profile",owners_identical && (mOwnerID.notNull() || LLSelectMgr::getInstance()->selectIsGroupOwned()));
327 327
328 // update group text field 328 // update group text field
329 childSetEnabled("Group:",true); 329 childSetEnabled("Group:",true);
330 LLUUID group_id; 330 LLUUID group_id;
331 BOOL groups_identical = gSelectMgr->selectGetGroup(group_id); 331 BOOL groups_identical = LLSelectMgr::getInstance()->selectGetGroup(group_id);
332 if (groups_identical) 332 if (groups_identical)
333 { 333 {
334 if(mLabelGroupName) 334 if(mLabelGroupName)
@@ -348,14 +348,14 @@ void LLPanelPermissions::refresh()
348 if(is_one_object) 348 if(is_one_object)
349 { 349 {
350 childSetEnabled("Name:",true); 350 childSetEnabled("Name:",true);
351 LLLineEditor* LineEditorObjectName = gUICtrlFactory->getLineEditorByName(this,"Object Name"); 351 LLLineEditor* LineEditorObjectName = getChild<LLLineEditor>("Object Name");
352 if(keyboard_focus_view != LineEditorObjectName) 352 if(keyboard_focus_view != LineEditorObjectName)
353 { 353 {
354 childSetText("Object Name",nodep->mName); 354 childSetText("Object Name",nodep->mName);
355 } 355 }
356 356
357 childSetEnabled("Description:",true); 357 childSetEnabled("Description:",true);
358 LLLineEditor* LineEditorObjectDesc = gUICtrlFactory->getLineEditorByName(this,"Object Description"); 358 LLLineEditor* LineEditorObjectDesc = getChild<LLLineEditor>("Object Description");
359 if(LineEditorObjectDesc) 359 if(LineEditorObjectDesc)
360 { 360 {
361 if(keyboard_focus_view != LineEditorObjectDesc) 361 if(keyboard_focus_view != LineEditorObjectDesc)
@@ -378,8 +378,8 @@ void LLPanelPermissions::refresh()
378 378
379 379
380 // Pre-compute object info string 380 // Pre-compute object info string
381 S32 prim_count = gSelectMgr->getSelection()->getObjectCount(); 381 S32 prim_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount();
382 S32 obj_count = gSelectMgr->getSelection()->getRootObjectCount(); 382 S32 obj_count = LLSelectMgr::getInstance()->getSelection()->getRootObjectCount();
383 383
384 LLString object_info_string; 384 LLString object_info_string;
385 if (1 == obj_count) 385 if (1 == obj_count)
@@ -406,17 +406,17 @@ void LLPanelPermissions::refresh()
406 childSetEnabled("prim info",true); 406 childSetEnabled("prim info",true);
407 407
408 S32 price; 408 S32 price;
409 BOOL is_for_sale = gSelectMgr->selectIsForSale(price); 409 BOOL is_for_sale = LLSelectMgr::getInstance()->selectIsForSale(price);
410 if (!is_for_sale) 410 if (!is_for_sale)
411 { 411 {
412 price = DEFAULT_PRICE; 412 price = DEFAULT_PRICE;
413 } 413 }
414 414
415 BOOL self_owned = (gAgent.getID() == mOwnerID); 415 BOOL self_owned = (gAgent.getID() == mOwnerID);
416 BOOL group_owned = gSelectMgr->selectIsGroupOwned() ; 416 BOOL group_owned = LLSelectMgr::getInstance()->selectIsGroupOwned() ;
417 BOOL public_owned = (mOwnerID.isNull() && !gSelectMgr->selectIsGroupOwned()); 417 BOOL public_owned = (mOwnerID.isNull() && !LLSelectMgr::getInstance()->selectIsGroupOwned());
418 BOOL can_transfer = gSelectMgr->selectGetRootsTransfer(); 418 BOOL can_transfer = LLSelectMgr::getInstance()->selectGetRootsTransfer();
419 BOOL can_copy = gSelectMgr->selectGetRootsCopy(); 419 BOOL can_copy = LLSelectMgr::getInstance()->selectGetRootsCopy();
420 420
421 if(!owners_identical) 421 if(!owners_identical)
422 { 422 {
@@ -426,7 +426,7 @@ void LLPanelPermissions::refresh()
426 } 426 }
427 else if(self_owned || (group_owned && gAgent.hasPowerInGroup(group_id,GP_OBJECT_SET_SALE))) 427 else if(self_owned || (group_owned && gAgent.hasPowerInGroup(group_id,GP_OBJECT_SET_SALE)))
428 { 428 {
429 LLLineEditor* EditPrice = gUICtrlFactory->getLineEditorByName(this,"EdCost"); 429 LLLineEditor* EditPrice = getChild<LLLineEditor>("EdCost");
430 if(keyboard_focus_view != EditPrice) 430 if(keyboard_focus_view != EditPrice)
431 { 431 {
432 childSetText("EdCost",llformat("%d",price)); 432 childSetText("EdCost",llformat("%d",price));
@@ -478,23 +478,23 @@ void LLPanelPermissions::refresh()
478 U32 next_owner_mask_on = 0; 478 U32 next_owner_mask_on = 0;
479 U32 next_owner_mask_off = 0; 479 U32 next_owner_mask_off = 0;
480 480
481 valid_base_perms = gSelectMgr->selectGetPerm(PERM_BASE, 481 valid_base_perms = LLSelectMgr::getInstance()->selectGetPerm(PERM_BASE,
482 &base_mask_on, 482 &base_mask_on,
483 &base_mask_off); 483 &base_mask_off);
484 484
485 valid_owner_perms = gSelectMgr->selectGetPerm(PERM_OWNER, 485 valid_owner_perms = LLSelectMgr::getInstance()->selectGetPerm(PERM_OWNER,
486 &owner_mask_on, 486 &owner_mask_on,
487 &owner_mask_off); 487 &owner_mask_off);
488 488
489 valid_group_perms = gSelectMgr->selectGetPerm(PERM_GROUP, 489 valid_group_perms = LLSelectMgr::getInstance()->selectGetPerm(PERM_GROUP,
490 &group_mask_on, 490 &group_mask_on,
491 &group_mask_off); 491 &group_mask_off);
492 492
493 valid_everyone_perms = gSelectMgr->selectGetPerm(PERM_EVERYONE, 493 valid_everyone_perms = LLSelectMgr::getInstance()->selectGetPerm(PERM_EVERYONE,
494 &everyone_mask_on, 494 &everyone_mask_on,
495 &everyone_mask_off); 495 &everyone_mask_off);
496 496
497 valid_next_perms = gSelectMgr->selectGetPerm(PERM_NEXT_OWNER, 497 valid_next_perms = LLSelectMgr::getInstance()->selectGetPerm(PERM_NEXT_OWNER,
498 &next_owner_mask_on, 498 &next_owner_mask_on,
499 &next_owner_mask_off); 499 &next_owner_mask_off);
500 500
@@ -724,10 +724,10 @@ void LLPanelPermissions::refresh()
724 724
725 // reflect sale information 725 // reflect sale information
726 LLSaleInfo sale_info; 726 LLSaleInfo sale_info;
727 BOOL valid_sale_info = gSelectMgr->selectGetSaleInfo(sale_info); 727 BOOL valid_sale_info = LLSelectMgr::getInstance()->selectGetSaleInfo(sale_info);
728 LLSaleInfo::EForSale sale_type = sale_info.getSaleType(); 728 LLSaleInfo::EForSale sale_type = sale_info.getSaleType();
729 729
730 LLRadioGroup* RadioSaleType = gUICtrlFactory->getRadioGroupByName(this,"sale type"); 730 LLRadioGroup* RadioSaleType = getChild<LLRadioGroup>("sale type");
731 if(RadioSaleType) 731 if(RadioSaleType)
732 { 732 {
733 if (valid_sale_info) 733 if (valid_sale_info)
@@ -753,18 +753,18 @@ void LLPanelPermissions::refresh()
753 } 753 }
754 754
755 // Check search status of objects 755 // Check search status of objects
756 BOOL all_volume = gSelectMgr->selectionAllPCode( LL_PCODE_VOLUME ); 756 BOOL all_volume = LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME );
757 bool include_in_search; 757 bool include_in_search;
758 bool all_include_in_search = gSelectMgr->selectionGetIncludeInSearch(&include_in_search); 758 bool all_include_in_search = LLSelectMgr::getInstance()->selectionGetIncludeInSearch(&include_in_search);
759 childSetEnabled("search_check", has_change_sale_ability && all_volume); 759 childSetEnabled("search_check", has_change_sale_ability && all_volume);
760 childSetValue("search_check", include_in_search); 760 childSetValue("search_check", include_in_search);
761 childSetTentative("search_check", ! all_include_in_search); 761 childSetTentative("search_check", ! all_include_in_search);
762 762
763 // Click action (touch, sit, buy) 763 // Click action (touch, sit, buy)
764 U8 click_action = 0; 764 U8 click_action = 0;
765 if (gSelectMgr->selectionGetClickAction(&click_action)) 765 if (LLSelectMgr::getInstance()->selectionGetClickAction(&click_action))
766 { 766 {
767 LLComboBox* ComboClickAction = gUICtrlFactory->getComboBoxByName(this,"clickaction"); 767 LLComboBox* ComboClickAction = getChild<LLComboBox>("clickaction");
768 if(ComboClickAction) 768 if(ComboClickAction)
769 { 769 {
770 ComboClickAction->setCurrentByIndex((S32)click_action); 770 ComboClickAction->setCurrentByIndex((S32)click_action);
@@ -779,14 +779,14 @@ void LLPanelPermissions::refresh()
779void LLPanelPermissions::onClickClaim(void*) 779void LLPanelPermissions::onClickClaim(void*)
780{ 780{
781 // try to claim ownership 781 // try to claim ownership
782 gSelectMgr->sendOwner(gAgent.getID(), gAgent.getGroupID()); 782 LLSelectMgr::getInstance()->sendOwner(gAgent.getID(), gAgent.getGroupID());
783} 783}
784 784
785// static 785// static
786void LLPanelPermissions::onClickRelease(void*) 786void LLPanelPermissions::onClickRelease(void*)
787{ 787{
788 // try to release ownership 788 // try to release ownership
789 gSelectMgr->sendOwner(LLUUID::null, LLUUID::null); 789 LLSelectMgr::getInstance()->sendOwner(LLUUID::null, LLUUID::null);
790} 790}
791 791
792// static 792// static
@@ -802,10 +802,10 @@ void LLPanelPermissions::onClickOwner(void *data)
802{ 802{
803 LLPanelPermissions *self = (LLPanelPermissions *)data; 803 LLPanelPermissions *self = (LLPanelPermissions *)data;
804 804
805 if (gSelectMgr->selectIsGroupOwned()) 805 if (LLSelectMgr::getInstance()->selectIsGroupOwned())
806 { 806 {
807 LLUUID group_id; 807 LLUUID group_id;
808 gSelectMgr->selectGetGroup(group_id); 808 LLSelectMgr::getInstance()->selectGetGroup(group_id);
809 LLFloaterGroupInfo::showFromUUID(group_id); 809 LLFloaterGroupInfo::showFromUUID(group_id);
810 } 810 }
811 else 811 else
@@ -819,7 +819,7 @@ void LLPanelPermissions::onClickGroup(void* data)
819 LLPanelPermissions* panelp = (LLPanelPermissions*)data; 819 LLPanelPermissions* panelp = (LLPanelPermissions*)data;
820 LLUUID owner_id; 820 LLUUID owner_id;
821 LLString name; 821 LLString name;
822 BOOL owners_identical = gSelectMgr->selectGetOwner(owner_id, name); 822 BOOL owners_identical = LLSelectMgr::getInstance()->selectGetOwner(owner_id, name);
823 LLFloater* parent_floater = gFloaterView->getParentFloater(panelp); 823 LLFloater* parent_floater = gFloaterView->getParentFloater(panelp);
824 824
825 if(owners_identical && (owner_id == gAgent.getID())) 825 if(owners_identical && (owner_id == gAgent.getID()))
@@ -845,7 +845,7 @@ void LLPanelPermissions::cbGroupID(LLUUID group_id, void* userdata)
845 { 845 {
846 self->mLabelGroupName->setNameID(group_id, TRUE); 846 self->mLabelGroupName->setNameID(group_id, TRUE);
847 } 847 }
848 gSelectMgr->sendGroup(group_id); 848 LLSelectMgr::getInstance()->sendGroup(group_id);
849} 849}
850 850
851void callback_deed_to_group(S32 option, void*) 851void callback_deed_to_group(S32 option, void*)
@@ -853,11 +853,11 @@ void callback_deed_to_group(S32 option, void*)
853 if (0 == option) 853 if (0 == option)
854 { 854 {
855 LLUUID group_id; 855 LLUUID group_id;
856 BOOL groups_identical = gSelectMgr->selectGetGroup(group_id); 856 BOOL groups_identical = LLSelectMgr::getInstance()->selectGetGroup(group_id);
857 if(groups_identical && (gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED))) 857 if(groups_identical && (gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED)))
858 { 858 {
859 gSelectMgr->sendOwner(LLUUID::null, group_id, FALSE); 859 LLSelectMgr::getInstance()->sendOwner(LLUUID::null, group_id, FALSE);
860// gViewerStats->incStat(LLViewerStats::ST_RELEASE_COUNT); 860// LLViewerStats::getInstance()->incStat(LLViewerStats::ST_RELEASE_COUNT);
861 } 861 }
862 } 862 }
863} 863}
@@ -875,7 +875,7 @@ void LLPanelPermissions::onClickDeedToGroup(void* data)
875// static 875// static
876void LLPanelPermissions::onCommitPerm(LLUICtrl *ctrl, void *data, U8 field, U32 perm) 876void LLPanelPermissions::onCommitPerm(LLUICtrl *ctrl, void *data, U8 field, U32 perm)
877{ 877{
878 LLViewerObject* object = gSelectMgr->getSelection()->getFirstRootObject(); 878 LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getFirstRootObject();
879 if(!object) return; 879 if(!object) return;
880 880
881 // Checkbox will have toggled itself 881 // Checkbox will have toggled itself
@@ -883,7 +883,7 @@ void LLPanelPermissions::onCommitPerm(LLUICtrl *ctrl, void *data, U8 field, U32
883 LLCheckBoxCtrl *check = (LLCheckBoxCtrl *)ctrl; 883 LLCheckBoxCtrl *check = (LLCheckBoxCtrl *)ctrl;
884 BOOL new_state = check->get(); 884 BOOL new_state = check->get();
885 885
886 gSelectMgr->selectionSetObjectPermissions(field, new_state, perm); 886 LLSelectMgr::getInstance()->selectionSetObjectPermissions(field, new_state, perm);
887} 887}
888 888
889// static 889// static
@@ -931,11 +931,11 @@ void LLPanelPermissions::onCommitName(LLUICtrl*, void* data)
931{ 931{
932 //llinfos << "LLPanelPermissions::onCommitName()" << llendl; 932 //llinfos << "LLPanelPermissions::onCommitName()" << llendl;
933 LLPanelPermissions* self = (LLPanelPermissions*)data; 933 LLPanelPermissions* self = (LLPanelPermissions*)data;
934 LLLineEditor* tb = gUICtrlFactory->getLineEditorByName(self,"Object Name"); 934 LLLineEditor* tb = self->getChild<LLLineEditor>("Object Name");
935 if(tb) 935 if(tb)
936 { 936 {
937 gSelectMgr->selectionSetObjectName(tb->getText()); 937 LLSelectMgr::getInstance()->selectionSetObjectName(tb->getText());
938// gSelectMgr->selectionSetObjectName(self->mLabelObjectName->getText()); 938// LLSelectMgr::getInstance()->selectionSetObjectName(self->mLabelObjectName->getText());
939 } 939 }
940} 940}
941 941
@@ -945,10 +945,10 @@ void LLPanelPermissions::onCommitDesc(LLUICtrl*, void* data)
945{ 945{
946 //llinfos << "LLPanelPermissions::onCommitDesc()" << llendl; 946 //llinfos << "LLPanelPermissions::onCommitDesc()" << llendl;
947 LLPanelPermissions* self = (LLPanelPermissions*)data; 947 LLPanelPermissions* self = (LLPanelPermissions*)data;
948 LLLineEditor* le = gUICtrlFactory->getLineEditorByName(self,"Object Description"); 948 LLLineEditor* le = self->getChild<LLLineEditor>("Object Description");
949 if(le) 949 if(le)
950 { 950 {
951 gSelectMgr->selectionSetObjectDescription(le->getText()); 951 LLSelectMgr::getInstance()->selectionSetObjectDescription(le->getText());
952 } 952 }
953} 953}
954 954
@@ -971,11 +971,11 @@ void LLPanelPermissions::setAllSaleInfo()
971 llinfos << "LLPanelPermissions::setAllSaleInfo()" << llendl; 971 llinfos << "LLPanelPermissions::setAllSaleInfo()" << llendl;
972 LLSaleInfo::EForSale sale_type = LLSaleInfo::FS_NOT; 972 LLSaleInfo::EForSale sale_type = LLSaleInfo::FS_NOT;
973 973
974 LLCheckBoxCtrl* mCheckPurchase = gUICtrlFactory->getCheckBoxByName(this,"checkbox for sale"); 974 LLCheckBoxCtrl* mCheckPurchase = getChild<LLCheckBoxCtrl>("checkbox for sale");
975 975
976 if(mCheckPurchase && mCheckPurchase->get()) 976 if(mCheckPurchase && mCheckPurchase->get())
977 { 977 {
978 LLRadioGroup* RadioSaleType = gUICtrlFactory->getRadioGroupByName(this,"sale type"); 978 LLRadioGroup* RadioSaleType = getChild<LLRadioGroup>("sale type");
979 if(RadioSaleType) 979 if(RadioSaleType)
980 { 980 {
981 switch(RadioSaleType->getSelectedIndex()) 981 switch(RadioSaleType->getSelectedIndex())
@@ -995,7 +995,7 @@ void LLPanelPermissions::setAllSaleInfo()
995 } 995 }
996 } 996 }
997 } 997 }
998 LLLineEditor* mEditPrice = gUICtrlFactory->getLineEditorByName(this,"EdCost"); 998 LLLineEditor* mEditPrice = getChild<LLLineEditor>("EdCost");
999 999
1000 S32 price = -1; 1000 S32 price = -1;
1001 if(mEditPrice) 1001 if(mEditPrice)
@@ -1010,17 +1010,17 @@ void LLPanelPermissions::setAllSaleInfo()
1010 } 1010 }
1011 1011
1012 LLSaleInfo sale_info(sale_type, price); 1012 LLSaleInfo sale_info(sale_type, price);
1013 gSelectMgr->selectionSetObjectSaleInfo(sale_info); 1013 LLSelectMgr::getInstance()->selectionSetObjectSaleInfo(sale_info);
1014 1014
1015 // If turned off for-sale, make sure click-action buy is turned 1015 // If turned off for-sale, make sure click-action buy is turned
1016 // off as well 1016 // off as well
1017 if (sale_type == LLSaleInfo::FS_NOT) 1017 if (sale_type == LLSaleInfo::FS_NOT)
1018 { 1018 {
1019 U8 click_action = 0; 1019 U8 click_action = 0;
1020 gSelectMgr->selectionGetClickAction(&click_action); 1020 LLSelectMgr::getInstance()->selectionGetClickAction(&click_action);
1021 if (click_action == CLICK_ACTION_BUY) 1021 if (click_action == CLICK_ACTION_BUY)
1022 { 1022 {
1023 gSelectMgr->selectionSetClickAction(CLICK_ACTION_TOUCH); 1023 LLSelectMgr::getInstance()->selectionSetClickAction(CLICK_ACTION_TOUCH);
1024 } 1024 }
1025 } 1025 }
1026} 1026}
@@ -1046,14 +1046,14 @@ void LLPanelPermissions::onCommitClickAction(LLUICtrl* ctrl, void*)
1046 if (click_action == CLICK_ACTION_BUY) 1046 if (click_action == CLICK_ACTION_BUY)
1047 { 1047 {
1048 LLSaleInfo sale_info; 1048 LLSaleInfo sale_info;
1049 gSelectMgr->selectGetSaleInfo(sale_info); 1049 LLSelectMgr::getInstance()->selectGetSaleInfo(sale_info);
1050 if (!sale_info.isForSale()) 1050 if (!sale_info.isForSale())
1051 { 1051 {
1052 gViewerWindow->alertXml("CantSetBuyObject"); 1052 gViewerWindow->alertXml("CantSetBuyObject");
1053 1053
1054 // Set click action back to its old value 1054 // Set click action back to its old value
1055 U8 click_action = 0; 1055 U8 click_action = 0;
1056 gSelectMgr->selectionGetClickAction(&click_action); 1056 LLSelectMgr::getInstance()->selectionGetClickAction(&click_action);
1057 box->setCurrentByIndex((S32)click_action); 1057 box->setCurrentByIndex((S32)click_action);
1058 1058
1059 return; 1059 return;
@@ -1063,14 +1063,14 @@ void LLPanelPermissions::onCommitClickAction(LLUICtrl* ctrl, void*)
1063 { 1063 {
1064 // Verify object has script with money() handler 1064 // Verify object has script with money() handler
1065 LLSelectionPayable payable; 1065 LLSelectionPayable payable;
1066 bool can_pay = gSelectMgr->getSelection()->applyToObjects(&payable); 1066 bool can_pay = LLSelectMgr::getInstance()->getSelection()->applyToObjects(&payable);
1067 if (!can_pay) 1067 if (!can_pay)
1068 { 1068 {
1069 // Warn, but do it anyway. 1069 // Warn, but do it anyway.
1070 gViewerWindow->alertXml("ClickActionNotPayable"); 1070 gViewerWindow->alertXml("ClickActionNotPayable");
1071 } 1071 }
1072 } 1072 }
1073 gSelectMgr->selectionSetClickAction(click_action); 1073 LLSelectMgr::getInstance()->selectionSetClickAction(click_action);
1074} 1074}
1075 1075
1076// static 1076// static
@@ -1079,6 +1079,6 @@ void LLPanelPermissions::onCommitIncludeInSearch(LLUICtrl* ctrl, void*)
1079 LLCheckBoxCtrl* box = (LLCheckBoxCtrl*)ctrl; 1079 LLCheckBoxCtrl* box = (LLCheckBoxCtrl*)ctrl;
1080 llassert(box); 1080 llassert(box);
1081 1081
1082 gSelectMgr->selectionSetIncludeInSearch(box->get()); 1082 LLSelectMgr::getInstance()->selectionSetIncludeInSearch(box->get());
1083} 1083}
1084 1084
diff --git a/linden/indra/newview/llpanelpick.cpp b/linden/indra/newview/llpanelpick.cpp
index eddbc45..32894ce 100644
--- a/linden/indra/newview/llpanelpick.cpp
+++ b/linden/indra/newview/llpanelpick.cpp
@@ -52,7 +52,7 @@
52#include "lltexturectrl.h" 52#include "lltexturectrl.h"
53#include "lluiconstants.h" 53#include "lluiconstants.h"
54#include "llviewergenericmessage.h" 54#include "llviewergenericmessage.h"
55#include "llvieweruictrlfactory.h" 55#include "lluictrlfactory.h"
56#include "llviewerparcelmgr.h" 56#include "llviewerparcelmgr.h"
57#include "llworldmap.h" 57#include "llworldmap.h"
58#include "llfloaterworldmap.h" 58#include "llfloaterworldmap.h"
@@ -88,11 +88,11 @@ LLPanelPick::LLPanelPick(BOOL top_pick)
88 std::string pick_def_file; 88 std::string pick_def_file;
89 if (top_pick) 89 if (top_pick)
90 { 90 {
91 gUICtrlFactory->buildPanel(this, "panel_top_pick.xml"); 91 LLUICtrlFactory::getInstance()->buildPanel(this, "panel_top_pick.xml");
92 } 92 }
93 else 93 else
94 { 94 {
95 gUICtrlFactory->buildPanel(this, "panel_avatar_pick.xml"); 95 LLUICtrlFactory::getInstance()->buildPanel(this, "panel_avatar_pick.xml");
96 } 96 }
97} 97}
98 98
@@ -121,44 +121,44 @@ void LLPanelPick::reset()
121 121
122BOOL LLPanelPick::postBuild() 122BOOL LLPanelPick::postBuild()
123{ 123{
124 mSnapshotCtrl = LLViewerUICtrlFactory::getTexturePickerByName(this, "snapshot_ctrl"); 124 mSnapshotCtrl = getChild<LLTextureCtrl>("snapshot_ctrl");
125 mSnapshotCtrl->setCommitCallback(onCommitAny); 125 mSnapshotCtrl->setCommitCallback(onCommitAny);
126 mSnapshotCtrl->setCallbackUserData(this); 126 mSnapshotCtrl->setCallbackUserData(this);
127 127
128 mNameEditor = LLViewerUICtrlFactory::getLineEditorByName(this, "given_name_editor"); 128 mNameEditor = getChild<LLLineEditor>("given_name_editor");
129 mNameEditor->setCommitOnFocusLost(TRUE); 129 mNameEditor->setCommitOnFocusLost(TRUE);
130 mNameEditor->setCommitCallback(onCommitAny); 130 mNameEditor->setCommitCallback(onCommitAny);
131 mNameEditor->setCallbackUserData(this); 131 mNameEditor->setCallbackUserData(this);
132 132
133 mDescEditor = LLUICtrlFactory::getTextEditorByName(this, "desc_editor"); 133 mDescEditor = getChild<LLTextEditor>("desc_editor");
134 mDescEditor->setCommitOnFocusLost(TRUE); 134 mDescEditor->setCommitOnFocusLost(TRUE);
135 mDescEditor->setCommitCallback(onCommitAny); 135 mDescEditor->setCommitCallback(onCommitAny);
136 mDescEditor->setCallbackUserData(this); 136 mDescEditor->setCallbackUserData(this);
137 mDescEditor->setTabsToNextField(TRUE); 137 mDescEditor->setTabsToNextField(TRUE);
138 138
139 mLocationEditor = LLViewerUICtrlFactory::getLineEditorByName(this, "location_editor"); 139 mLocationEditor = getChild<LLLineEditor>("location_editor");
140 140
141 mSetBtn = LLViewerUICtrlFactory::getButtonByName(this, "set_location_btn"); 141 mSetBtn = getChild<LLButton>( "set_location_btn");
142 mSetBtn->setClickedCallback(onClickSet); 142 mSetBtn->setClickedCallback(onClickSet);
143 mSetBtn->setCallbackUserData(this); 143 mSetBtn->setCallbackUserData(this);
144 144
145 mTeleportBtn = LLViewerUICtrlFactory::getButtonByName(this, "pick_teleport_btn"); 145 mTeleportBtn = getChild<LLButton>( "pick_teleport_btn");
146 mTeleportBtn->setClickedCallback(onClickTeleport); 146 mTeleportBtn->setClickedCallback(onClickTeleport);
147 mTeleportBtn->setCallbackUserData(this); 147 mTeleportBtn->setCallbackUserData(this);
148 148
149 mMapBtn = LLViewerUICtrlFactory::getButtonByName(this, "pick_map_btn"); 149 mMapBtn = getChild<LLButton>( "pick_map_btn");
150 mMapBtn->setClickedCallback(onClickMap); 150 mMapBtn->setClickedCallback(onClickMap);
151 mMapBtn->setCallbackUserData(this); 151 mMapBtn->setCallbackUserData(this);
152 152
153 mSortOrderText = LLViewerUICtrlFactory::getTextBoxByName(this, "sort_order_text"); 153 mSortOrderText = getChild<LLTextBox>("sort_order_text");
154 154
155 mSortOrderEditor = LLViewerUICtrlFactory::getLineEditorByName(this, "sort_order_editor"); 155 mSortOrderEditor = getChild<LLLineEditor>("sort_order_editor");
156 mSortOrderEditor->setPrevalidate(LLLineEditor::prevalidateInt); 156 mSortOrderEditor->setPrevalidate(LLLineEditor::prevalidateInt);
157 mSortOrderEditor->setCommitOnFocusLost(TRUE); 157 mSortOrderEditor->setCommitOnFocusLost(TRUE);
158 mSortOrderEditor->setCommitCallback(onCommitAny); 158 mSortOrderEditor->setCommitCallback(onCommitAny);
159 mSortOrderEditor->setCallbackUserData(this); 159 mSortOrderEditor->setCallbackUserData(this);
160 160
161 mEnabledCheck = LLViewerUICtrlFactory::getCheckBoxByName(this, "enabled_check"); 161 mEnabledCheck = getChild<LLCheckBoxCtrl>( "enabled_check");
162 mEnabledCheck->setCommitCallback(onCommitAny); 162 mEnabledCheck->setCommitCallback(onCommitAny);
163 mEnabledCheck->setCallbackUserData(this); 163 mEnabledCheck->setCallbackUserData(this);
164 164
@@ -176,7 +176,7 @@ void LLPanelPick::initNewPick()
176 mPosGlobal = gAgent.getPositionGlobal(); 176 mPosGlobal = gAgent.getPositionGlobal();
177 177
178 // Try to fill in the current parcel 178 // Try to fill in the current parcel
179 LLParcel* parcel = gParcelMgr->getAgentParcel(); 179 LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
180 if (parcel) 180 if (parcel)
181 { 181 {
182 mNameEditor->setText(parcel->getName()); 182 mNameEditor->setText(parcel->getName());
@@ -367,12 +367,9 @@ void LLPanelPick::processPickInfoReply(LLMessageSystem *msg, void **)
367 367
368void LLPanelPick::draw() 368void LLPanelPick::draw()
369{ 369{
370 if (getVisible()) 370 refresh();
371 {
372 refresh();
373 371
374 LLPanel::draw(); 372 LLPanel::draw();
375 }
376} 373}
377 374
378 375
diff --git a/linden/indra/newview/llpanelplace.cpp b/linden/indra/newview/llpanelplace.cpp
index 2b50a9d..e7dc08f 100644
--- a/linden/indra/newview/llpanelplace.cpp
+++ b/linden/indra/newview/llpanelplace.cpp
@@ -52,7 +52,7 @@
52#include "lltexturectrl.h" 52#include "lltexturectrl.h"
53#include "llworldmap.h" 53#include "llworldmap.h"
54#include "llviewerregion.h" 54#include "llviewerregion.h"
55#include "llvieweruictrlfactory.h" 55#include "lluictrlfactory.h"
56//#include "llviewermenu.h" // create_landmark() 56//#include "llviewermenu.h" // create_landmark()
57#include "llweb.h" 57#include "llweb.h"
58#include "llsdutil.h" 58#include "llsdutil.h"
@@ -85,33 +85,33 @@ BOOL LLPanelPlace::postBuild()
85 // Since this is only used in the directory browser, always 85 // Since this is only used in the directory browser, always
86 // disable the snapshot control. Otherwise clicking on it will 86 // disable the snapshot control. Otherwise clicking on it will
87 // open a texture picker. 87 // open a texture picker.
88 mSnapshotCtrl = LLViewerUICtrlFactory::getTexturePickerByName(this, "snapshot_ctrl"); 88 mSnapshotCtrl = getChild<LLTextureCtrl>("snapshot_ctrl");
89 mSnapshotCtrl->setEnabled(FALSE); 89 mSnapshotCtrl->setEnabled(FALSE);
90 90
91 mNameEditor = LLViewerUICtrlFactory::getTextBoxByName(this, "name_editor"); 91 mNameEditor = getChild<LLTextBox>("name_editor");
92 // Text boxes appear to have a " " in them by default. This breaks the 92 // Text boxes appear to have a " " in them by default. This breaks the
93 // emptiness test for filling in data from the network. Slam to empty. 93 // emptiness test for filling in data from the network. Slam to empty.
94 mNameEditor->setText( LLString::null ); 94 mNameEditor->setText( LLString::null );
95 95
96 mDescEditor = LLUICtrlFactory::getTextEditorByName(this, "desc_editor"); 96 mDescEditor = getChild<LLTextEditor>("desc_editor");
97 97
98 mInfoEditor = LLViewerUICtrlFactory::getTextBoxByName(this, "info_editor"); 98 mInfoEditor = getChild<LLTextBox>("info_editor");
99 99
100 mLocationEditor = LLViewerUICtrlFactory::getTextBoxByName(this, "location_editor"); 100 mLocationEditor = getChild<LLTextBox>("location_editor");
101 101
102 mTeleportBtn = LLViewerUICtrlFactory::getButtonByName(this, "teleport_btn"); 102 mTeleportBtn = getChild<LLButton>( "teleport_btn");
103 mTeleportBtn->setClickedCallback(onClickTeleport); 103 mTeleportBtn->setClickedCallback(onClickTeleport);
104 mTeleportBtn->setCallbackUserData(this); 104 mTeleportBtn->setCallbackUserData(this);
105 105
106 mMapBtn = LLViewerUICtrlFactory::getButtonByName(this, "map_btn"); 106 mMapBtn = getChild<LLButton>( "map_btn");
107 mMapBtn->setClickedCallback(onClickMap); 107 mMapBtn->setClickedCallback(onClickMap);
108 mMapBtn->setCallbackUserData(this); 108 mMapBtn->setCallbackUserData(this);
109 109
110 //mLandmarkBtn = LLViewerUICtrlFactory::getButtonByName(this, "landmark_btn"); 110 //mLandmarkBtn = getChild<LLButton>( "landmark_btn");
111 //mLandmarkBtn->setClickedCallback(onClickLandmark); 111 //mLandmarkBtn->setClickedCallback(onClickLandmark);
112 //mLandmarkBtn->setCallbackUserData(this); 112 //mLandmarkBtn->setCallbackUserData(this);
113 113
114 mAuctionBtn = LLViewerUICtrlFactory::getButtonByName(this, "auction_btn"); 114 mAuctionBtn = getChild<LLButton>( "auction_btn");
115 mAuctionBtn->setClickedCallback(onClickAuction); 115 mAuctionBtn->setClickedCallback(onClickAuction);
116 mAuctionBtn->setCallbackUserData(this); 116 mAuctionBtn->setCallbackUserData(this);
117 117
@@ -371,9 +371,9 @@ void LLPanelPlace::onClickTeleport(void* data)
371 LLPanelPlace* self = (LLPanelPlace*)data; 371 LLPanelPlace* self = (LLPanelPlace*)data;
372 372
373 LLView* parent_viewp = self->getParent(); 373 LLView* parent_viewp = self->getParent();
374 if (parent_viewp->getWidgetType() == WIDGET_TYPE_FLOATER) 374 LLFloater* parent_floaterp = dynamic_cast<LLFloater*>(parent_viewp);
375 if (parent_floaterp)
375 { 376 {
376 LLFloater* parent_floaterp = (LLFloater*)parent_viewp;
377 parent_floaterp->close(); 377 parent_floaterp->close();
378 } 378 }
379 // LLFloater* parent_floaterp = (LLFloater*)self->getParent(); 379 // LLFloater* parent_floaterp = (LLFloater*)self->getParent();
diff --git a/linden/indra/newview/llpanelvolume.cpp b/linden/indra/newview/llpanelvolume.cpp
index 285750a..23ca7c4 100644
--- a/linden/indra/newview/llpanelvolume.cpp
+++ b/linden/indra/newview/llpanelvolume.cpp
@@ -74,7 +74,7 @@
74#include "pipeline.h" 74#include "pipeline.h"
75 75
76#include "lldrawpool.h" 76#include "lldrawpool.h"
77#include "llvieweruictrlfactory.h" 77#include "lluictrlfactory.h"
78 78
79// "Features" Tab 79// "Features" Tab
80 80
@@ -139,11 +139,11 @@ LLPanelVolume::~LLPanelVolume()
139 139
140void LLPanelVolume::getState( ) 140void LLPanelVolume::getState( )
141{ 141{
142 LLViewerObject* objectp = gSelectMgr->getSelection()->getFirstRootObject(); 142 LLViewerObject* objectp = LLSelectMgr::getInstance()->getSelection()->getFirstRootObject();
143 LLViewerObject* root_objectp = objectp; 143 LLViewerObject* root_objectp = objectp;
144 if(!objectp) 144 if(!objectp)
145 { 145 {
146 objectp = gSelectMgr->getSelection()->getFirstObject(); 146 objectp = LLSelectMgr::getInstance()->getSelection()->getFirstObject();
147 // *FIX: shouldn't we just keep the child? 147 // *FIX: shouldn't we just keep the child?
148 if (objectp) 148 if (objectp)
149 { 149 {
@@ -183,12 +183,12 @@ void LLPanelVolume::getState( )
183 BOOL owners_identical; 183 BOOL owners_identical;
184 LLUUID owner_id; 184 LLUUID owner_id;
185 LLString owner_name; 185 LLString owner_name;
186 owners_identical = gSelectMgr->selectGetOwner(owner_id, owner_name); 186 owners_identical = LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name);
187 187
188 // BUG? Check for all objects being editable? 188 // BUG? Check for all objects being editable?
189 BOOL editable = root_objectp->permModify(); 189 BOOL editable = root_objectp->permModify();
190 BOOL single_volume = gSelectMgr->selectionAllPCode( LL_PCODE_VOLUME ) 190 BOOL single_volume = LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME )
191 && gSelectMgr->getSelection()->getObjectCount() == 1; 191 && LLSelectMgr::getInstance()->getSelection()->getObjectCount() == 1;
192 192
193 // Select Single Message 193 // Select Single Message
194 if (single_volume) 194 if (single_volume)
@@ -232,9 +232,9 @@ void LLPanelVolume::getState( )
232 } 232 }
233 else 233 else
234 { 234 {
235 ((LLPanel *) getChildByName ("Light Intensity", true))->clear(); 235 getChild<LLSpinCtrl>("Light Intensity", true)->clear();
236 ((LLPanel *) getChildByName ("Light Radius", true))->clear(); 236 getChild<LLSpinCtrl>("Light Radius", true)->clear();
237 ((LLPanel *) getChildByName ("Light Falloff", true))->clear(); 237 getChild<LLSpinCtrl>("Light Falloff", true)->clear();
238 238
239 childSetEnabled("label color",false); 239 childSetEnabled("label color",false);
240 LLColorSwatchCtrl* LightColorSwatch = getChild<LLColorSwatchCtrl>("colorswatch"); 240 LLColorSwatchCtrl* LightColorSwatch = getChild<LLColorSwatchCtrl>("colorswatch");
@@ -292,14 +292,14 @@ void LLPanelVolume::getState( )
292 } 292 }
293 else 293 else
294 { 294 {
295 ((LLPanel *) getChildByName ("FlexNumSections", true))->clear(); 295 getChild<LLSpinCtrl>("FlexNumSections", true)->clear();
296 ((LLPanel *) getChildByName ("FlexGravity", true))->clear(); 296 getChild<LLSpinCtrl>("FlexGravity", true)->clear();
297 ((LLPanel *) getChildByName ("FlexTension", true))->clear(); 297 getChild<LLSpinCtrl>("FlexTension", true)->clear();
298 ((LLPanel *) getChildByName ("FlexFriction", true))->clear(); 298 getChild<LLSpinCtrl>("FlexFriction", true)->clear();
299 ((LLPanel *) getChildByName ("FlexWind", true))->clear(); 299 getChild<LLSpinCtrl>("FlexWind", true)->clear();
300 ((LLPanel *) getChildByName ("FlexForceX", true))->clear(); 300 getChild<LLSpinCtrl>("FlexForceX", true)->clear();
301 ((LLPanel *) getChildByName ("FlexForceY", true))->clear(); 301 getChild<LLSpinCtrl>("FlexForceY", true)->clear();
302 ((LLPanel *) getChildByName ("FlexForceZ", true))->clear(); 302 getChild<LLSpinCtrl>("FlexForceZ", true)->clear();
303 303
304 childSetEnabled("FlexNumSections",false); 304 childSetEnabled("FlexNumSections",false);
305 childSetEnabled("FlexGravity",false); 305 childSetEnabled("FlexGravity",false);
@@ -412,7 +412,7 @@ void LLPanelVolume::sendIsFlexible()
412 412
413 if (objectp->getClickAction() == CLICK_ACTION_SIT) 413 if (objectp->getClickAction() == CLICK_ACTION_SIT)
414 { 414 {
415 gSelectMgr->selectionSetClickAction(CLICK_ACTION_NONE); 415 LLSelectMgr::getInstance()->selectionSetClickAction(CLICK_ACTION_NONE);
416 } 416 }
417 417
418 } 418 }
@@ -420,7 +420,7 @@ void LLPanelVolume::sendIsFlexible()
420 if (volobjp->setIsFlexible(is_flexible)) 420 if (volobjp->setIsFlexible(is_flexible))
421 { 421 {
422 mObject->sendShapeUpdate(); 422 mObject->sendShapeUpdate();
423 gSelectMgr->selectionUpdatePhantom(volobjp->flagPhantom()); 423 LLSelectMgr::getInstance()->selectionUpdatePhantom(volobjp->flagPhantom());
424 } 424 }
425 425
426 llinfos << "update flexible sent" << llendl; 426 llinfos << "update flexible sent" << llendl;
diff --git a/linden/indra/newview/llpanelweb.cpp b/linden/indra/newview/llpanelweb.cpp
index 0de828a..13ed9bf 100644
--- a/linden/indra/newview/llpanelweb.cpp
+++ b/linden/indra/newview/llpanelweb.cpp
@@ -46,7 +46,7 @@
46#include "llui.h" 46#include "llui.h"
47#include "lluictrlfactory.h" 47#include "lluictrlfactory.h"
48#include "llviewercontrol.h" 48#include "llviewercontrol.h"
49#include "llvieweruictrlfactory.h" 49#include "lluictrlfactory.h"
50#include "llviewerwindow.h" 50#include "llviewerwindow.h"
51#include "llmediamanager.h" 51#include "llmediamanager.h"
52 52
@@ -92,7 +92,7 @@ void free_web_media(LLMediaBase *media_source)
92 92
93LLPanelWeb::LLPanelWeb() 93LLPanelWeb::LLPanelWeb()
94{ 94{
95 gUICtrlFactory->buildPanel(this, "panel_preferences_web.xml"); 95 LLUICtrlFactory::getInstance()->buildPanel(this, "panel_preferences_web.xml");
96} 96}
97 97
98BOOL LLPanelWeb::postBuild() 98BOOL LLPanelWeb::postBuild()
@@ -138,7 +138,7 @@ void LLPanelWeb::refresh()
138 mWebProxyAddress = gSavedSettings.getString("BrowserProxyAddress"); 138 mWebProxyAddress = gSavedSettings.getString("BrowserProxyAddress");
139 mWebProxyPort = gSavedSettings.getS32("BrowserProxyPort"); 139 mWebProxyPort = gSavedSettings.getS32("BrowserProxyPort");
140 140
141 LLLineEditor* web_proxy_editor = gUICtrlFactory->getLineEditorByName(this, "web_proxy_editor"); 141 LLLineEditor* web_proxy_editor = getChild<LLLineEditor>("web_proxy_editor");
142 if (web_proxy_editor) 142 if (web_proxy_editor)
143 { 143 {
144 web_proxy_editor->setText( gSavedSettings.getString("BrowserProxyAddress") ); 144 web_proxy_editor->setText( gSavedSettings.getString("BrowserProxyAddress") );
diff --git a/linden/indra/newview/llprefschat.cpp b/linden/indra/newview/llprefschat.cpp
index 9d8e910..3236f79 100644
--- a/linden/indra/newview/llprefschat.cpp
+++ b/linden/indra/newview/llprefschat.cpp
@@ -33,8 +33,9 @@
33#include "llviewerprecompiledheaders.h" 33#include "llviewerprecompiledheaders.h"
34 34
35#include "llprefschat.h" 35#include "llprefschat.h"
36#include "lltexteditor.h"
36#include "llviewercontrol.h" 37#include "llviewercontrol.h"
37#include "llvieweruictrlfactory.h" 38#include "lluictrlfactory.h"
38 39
39class LLPrefsChatImpl : public LLPanel 40class LLPrefsChatImpl : public LLPanel
40{ 41{
@@ -53,6 +54,7 @@ protected:
53 S32 mChatMaxLines; 54 S32 mChatMaxLines;
54 LLColor4 mSystemChatColor; 55 LLColor4 mSystemChatColor;
55 LLColor4 mAgentChatColor; 56 LLColor4 mAgentChatColor;
57 LLColor4 mIMChatColor;
56 LLColor4 mObjectChatColor; 58 LLColor4 mObjectChatColor;
57 LLColor4 mOwnerSayChatColor; 59 LLColor4 mOwnerSayChatColor;
58 LLColor4 mBGChatColor; 60 LLColor4 mBGChatColor;
@@ -73,7 +75,7 @@ protected:
73LLPrefsChatImpl::LLPrefsChatImpl() 75LLPrefsChatImpl::LLPrefsChatImpl()
74: LLPanel("Chat Panel") 76: LLPanel("Chat Panel")
75{ 77{
76 gUICtrlFactory->buildPanel(this, "panel_preferences_chat.xml"); 78 LLUICtrlFactory::getInstance()->buildPanel(this, "panel_preferences_chat.xml");
77 79
78 refresh(); 80 refresh();
79} 81}
@@ -88,6 +90,7 @@ void LLPrefsChatImpl::refresh()
88 mChatMaxLines = gSavedSettings.getS32("ConsoleMaxLines"); 90 mChatMaxLines = gSavedSettings.getS32("ConsoleMaxLines");
89 mSystemChatColor = gSavedSettings.getColor4("SystemChatColor"); 91 mSystemChatColor = gSavedSettings.getColor4("SystemChatColor");
90 mAgentChatColor = gSavedSettings.getColor4("AgentChatColor"); 92 mAgentChatColor = gSavedSettings.getColor4("AgentChatColor");
93 mIMChatColor = gSavedSettings.getColor4("IMChatColor");
91 mObjectChatColor = gSavedSettings.getColor4("ObjectChatColor"); 94 mObjectChatColor = gSavedSettings.getColor4("ObjectChatColor");
92 mOwnerSayChatColor = gSavedSettings.getColor4("llOwnerSayChatColor"); 95 mOwnerSayChatColor = gSavedSettings.getColor4("llOwnerSayChatColor");
93 mBGChatColor = gSavedSettings.getColor4("BackgroundChatColor"); 96 mBGChatColor = gSavedSettings.getColor4("BackgroundChatColor");
@@ -110,6 +113,7 @@ void LLPrefsChatImpl::cancel()
110 gSavedSettings.setS32("ConsoleMaxLines", mChatMaxLines); 113 gSavedSettings.setS32("ConsoleMaxLines", mChatMaxLines);
111 gSavedSettings.setColor4("SystemChatColor", mSystemChatColor); 114 gSavedSettings.setColor4("SystemChatColor", mSystemChatColor);
112 gSavedSettings.setColor4("AgentChatColor", mAgentChatColor); 115 gSavedSettings.setColor4("AgentChatColor", mAgentChatColor);
116 gSavedSettings.setColor4("IMChatColor", mIMChatColor);
113 gSavedSettings.setColor4("ObjectChatColor", mObjectChatColor); 117 gSavedSettings.setColor4("ObjectChatColor", mObjectChatColor);
114 gSavedSettings.setColor4("llOwnerSayChatColor", mOwnerSayChatColor); 118 gSavedSettings.setColor4("llOwnerSayChatColor", mOwnerSayChatColor);
115 gSavedSettings.setColor4("BackgroundChatColor", mBGChatColor); 119 gSavedSettings.setColor4("BackgroundChatColor", mBGChatColor);
diff --git a/linden/indra/newview/llprefsim.cpp b/linden/indra/newview/llprefsim.cpp
index 168d218..fff10c7 100644
--- a/linden/indra/newview/llprefsim.cpp
+++ b/linden/indra/newview/llprefsim.cpp
@@ -42,7 +42,7 @@
42#include "llagent.h" 42#include "llagent.h"
43#include "llviewercontrol.h" 43#include "llviewercontrol.h"
44#include "llviewernetwork.h" 44#include "llviewernetwork.h"
45#include "llvieweruictrlfactory.h" 45#include "lluictrlfactory.h"
46 46
47#include "lldirpicker.h" 47#include "lldirpicker.h"
48 48
@@ -91,7 +91,7 @@ protected:
91LLPrefsIMImpl::LLPrefsIMImpl() 91LLPrefsIMImpl::LLPrefsIMImpl()
92 : LLPanel("IM Prefs Panel") 92 : LLPanel("IM Prefs Panel")
93{ 93{
94 gUICtrlFactory->buildPanel(this, "panel_preferences_im.xml"); 94 LLUICtrlFactory::getInstance()->buildPanel(this, "panel_preferences_im.xml");
95} 95}
96 96
97void LLPrefsIMImpl::refresh() 97void LLPrefsIMImpl::refresh()
@@ -187,7 +187,7 @@ void LLPrefsIMImpl::enableHistory()
187 187
188void LLPrefsIMImpl::apply() 188void LLPrefsIMImpl::apply()
189{ 189{
190 LLTextEditor* busy = LLUICtrlFactory::getTextEditorByName(this, "busy_response"); 190 LLTextEditor* busy = getChild<LLTextEditor>("busy_response");
191 LLWString busy_response; 191 LLWString busy_response;
192 if (busy) busy_response = busy->getWText(); 192 if (busy) busy_response = busy->getWText();
193 LLWString::replaceTabsWithSpaces(busy_response, 4); 193 LLWString::replaceTabsWithSpaces(busy_response, 4);
diff --git a/linden/indra/newview/llprefsvoice.cpp b/linden/indra/newview/llprefsvoice.cpp
index 773ddfe..22a0115 100644
--- a/linden/indra/newview/llprefsvoice.cpp
+++ b/linden/indra/newview/llprefsvoice.cpp
@@ -38,12 +38,12 @@
38#include "llcombobox.h" 38#include "llcombobox.h"
39 39
40#include "llviewercontrol.h" 40#include "llviewercontrol.h"
41#include "llvieweruictrlfactory.h" 41#include "lluictrlfactory.h"
42 42
43#include "llmodaldialog.h" 43#include "llmodaldialog.h"
44#include "llkeyboard.h" 44#include "llkeyboard.h"
45#include "llfocusmgr.h" 45#include "llfocusmgr.h"
46#include "llfloatervoicewizard.h" 46#include "llfloatervoicedevicesettings.h"
47 47
48#include "llappviewer.h" 48#include "llappviewer.h"
49 49
@@ -62,7 +62,7 @@ public:
62 { 62 {
63 mOldFrontmost = gFloaterView->getFrontmost(); 63 mOldFrontmost = gFloaterView->getFrontmost();
64 64
65 gUICtrlFactory->buildFloater(this, "floater_select_key.xml"); 65 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_select_key.xml");
66 66
67 childSetAction("Cancel", LLVoiceHotkeySelectDialog::onCancel, this ); 67 childSetAction("Cancel", LLVoiceHotkeySelectDialog::onCancel, this );
68 childSetFocus("Cancel"); 68 childSetFocus("Cancel");
@@ -71,14 +71,17 @@ public:
71 /*virtual*/ void setFocus( BOOL b ) 71 /*virtual*/ void setFocus( BOOL b )
72 { 72 {
73 LLFloater::setFocus(b); 73 LLFloater::setFocus(b);
74 74
75 // This forces keyboard processing to happen at the raw key level instead of going through handleUnicodeChar. 75 // This forces keyboard processing to happen at the raw key level instead of going through handleUnicodeChar.
76 gFocusMgr.removeKeyboardFocusWithoutCallback(gFocusMgr.getKeyboardFocus()); 76 if (b)
77 {
78 gFocusMgr.setKeystrokesOnly(TRUE);
79 }
77 } 80 }
78 81
79 static void onCancel( void* userdata ); 82 static void onCancel( void* userdata );
80 83
81 BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent ); 84 BOOL handleKeyHere(KEY key, MASK mask);
82 85
83}; 86};
84 87
@@ -98,11 +101,14 @@ void LLPrefsVoiceLogic::init()
98 mPushToTalkToggle = gSavedSettings.getBOOL("PushToTalkToggle"); 101 mPushToTalkToggle = gSavedSettings.getBOOL("PushToTalkToggle");
99 mEarLocation = gSavedSettings.getS32("VoiceEarLocation"); 102 mEarLocation = gSavedSettings.getS32("VoiceEarLocation");
100 103
101 mCtrlEarLocation = LLUICtrlFactory::getSelectionInterfaceByName(mPanel, "ear_location"); 104 LLUICtrl* ear_location = mPanel->getChild<LLUICtrl>("ear_location");
102 mCtrlEarLocation->selectByValue(LLSD(gSavedSettings.getS32("VoiceEarLocation"))); 105 mCtrlEarLocation = ear_location->getSelectionInterface();
106 if (mCtrlEarLocation)
107 {
108 mCtrlEarLocation->selectByValue(LLSD(gSavedSettings.getS32("VoiceEarLocation")));
109 }
103 mPanel->childSetCommitCallback("ear_location", onEarLocationCommit, this ); 110 mPanel->childSetCommitCallback("ear_location", onEarLocationCommit, this );
104 111
105 mPanel->childSetAction("launch_voice_wizard_button", onClickLaunchWizard, mPanel);
106 mPanel->childSetAction("set_voice_hotkey_button", onClickSetKey, this); 112 mPanel->childSetAction("set_voice_hotkey_button", onClickSetKey, this);
107 mPanel->childSetAction("set_voice_middlemouse_button", onClickSetMiddleMouse, this); 113 mPanel->childSetAction("set_voice_middlemouse_button", onClickSetMiddleMouse, this);
108 114
@@ -112,11 +118,12 @@ void LLPrefsVoiceLogic::init()
112 118
113void LLPrefsVoiceLogic::refresh() 119void LLPrefsVoiceLogic::refresh()
114{ 120{
115 mPanel->childSetVisible("voice_unavailable", gDisableVoice); 121 BOOL voiceDisabled = gSavedSettings.getBOOL("CmdLineDisableVoice");
116 mPanel->childSetVisible("enable_voice_check", !gDisableVoice); 122 mPanel->childSetVisible("voice_unavailable", voiceDisabled);
117 mPanel->childSetEnabled("enable_voice_check", !gDisableVoice); 123 mPanel->childSetVisible("enable_voice_check", !voiceDisabled);
124 mPanel->childSetEnabled("enable_voice_check", !voiceDisabled);
118 125
119 bool enable = !gDisableVoice && gSavedSettings.getBOOL("EnableVoiceChat"); 126 bool enable = !voiceDisabled && gSavedSettings.getBOOL("EnableVoiceChat");
120 127
121 mPanel->childSetEnabled("friends_only_check", enable); 128 mPanel->childSetEnabled("friends_only_check", enable);
122 mPanel->childSetEnabled("push_to_talk_check", enable); 129 mPanel->childSetEnabled("push_to_talk_check", enable);
@@ -152,18 +159,6 @@ void LLPrefsVoiceLogic::onEarLocationCommit(LLUICtrl* ctrl, void* user_data)
152 } 159 }
153} 160}
154 161
155//static
156void LLPrefsVoiceLogic::onClickLaunchWizard(void* user_data)
157{
158 LLPrefsVoice* prefs = (LLPrefsVoice*)user_data;
159 LLFloaterVoiceWizard* floaterp = LLFloaterVoiceWizard::showInstance();
160 LLFloater* parent_floater = gFloaterView->getParentFloater(prefs);
161 if (parent_floater)
162 {
163 parent_floater->addDependentFloater(floaterp, FALSE);
164 }
165}
166
167// static 162// static
168void LLPrefsVoiceLogic::onClickSetKey(void* user_data) 163void LLPrefsVoiceLogic::onClickSetKey(void* user_data)
169{ 164{
@@ -209,7 +204,7 @@ void LLVoiceHotkeySelectDialog::onCancel( void* userdata )
209 self->mOldFrontmost->setFrontmost(TRUE); 204 self->mOldFrontmost->setFrontmost(TRUE);
210} 205}
211 206
212BOOL LLVoiceHotkeySelectDialog::handleKey(KEY key, MASK mask, BOOL called_from_parent ) 207BOOL LLVoiceHotkeySelectDialog::handleKeyHere(KEY key, MASK mask)
213{ 208{
214 BOOL result = TRUE; 209 BOOL result = TRUE;
215 210
@@ -236,13 +231,13 @@ BOOL LLVoiceHotkeySelectDialog::handleKey(KEY key, MASK mask, BOOL called_from_p
236LLPrefsVoice::LLPrefsVoice() 231LLPrefsVoice::LLPrefsVoice()
237: LLPanel("Voice Chat Panel") 232: LLPanel("Voice Chat Panel")
238{ 233{
239 gUICtrlFactory->buildPanel(this, "panel_preferences_voice.xml"); 234 LLUICtrlFactory::getInstance()->buildPanel(this, "panel_preferences_voice.xml");
240 mLogic = new LLPrefsVoiceLogic(this); 235 mLogic = new LLPrefsVoiceLogic(this);
241 childSetAction("device_settings_btn", onClickDeviceSettingsBtn, this); 236 childSetAction("device_settings_btn", onClickVoiceDeviceSettingsBtn, this);
242 237
243 // create floater immediately and keep it hidden 238 // create floater immediately and keep it hidden
244 // since it stores preference state for audio devices 239 // since it stores preference state for audio devices
245 mDeviceSettings = LLFloaterDeviceSettings::getInstance(); 240 mVoiceDeviceSettings = LLFloaterVoiceDeviceSettings::getInstance();
246} 241}
247 242
248LLPrefsVoice::~LLPrefsVoice() 243LLPrefsVoice::~LLPrefsVoice()
@@ -252,34 +247,35 @@ LLPrefsVoice::~LLPrefsVoice()
252 247
253void LLPrefsVoice::draw() 248void LLPrefsVoice::draw()
254{ 249{
255 bool enable = !gDisableVoice && gSavedSettings.getBOOL("EnableVoiceChat"); 250 bool enable = !gSavedSettings.getBOOL("CmdLineDisableVoice")
251 && gSavedSettings.getBOOL("EnableVoiceChat");
256 childSetEnabled("device_settings_btn", enable); 252 childSetEnabled("device_settings_btn", enable);
257 253
258 mLogic->refresh(); 254 mLogic->refresh();
259 mDeviceSettings->refresh(); 255 mVoiceDeviceSettings->refresh();
260 LLPanel::draw(); 256 LLPanel::draw();
261} 257}
262 258
263void LLPrefsVoice::apply() 259void LLPrefsVoice::apply()
264{ 260{
265 mLogic->apply(); 261 mLogic->apply();
266 mDeviceSettings->apply(); 262 mVoiceDeviceSettings->apply();
267} 263}
268 264
269void LLPrefsVoice::cancel() 265void LLPrefsVoice::cancel()
270{ 266{
271 mLogic->cancel(); 267 mLogic->cancel();
272 mDeviceSettings->cancel(); 268 mVoiceDeviceSettings->cancel();
273} 269}
274 270
275//static 271//static
276void LLPrefsVoice::onClickDeviceSettingsBtn(void* user_data) 272void LLPrefsVoice::onClickVoiceDeviceSettingsBtn(void* user_data)
277{ 273{
278 LLPrefsVoice* prefs = (LLPrefsVoice*)user_data; 274 LLPrefsVoice* prefs = (LLPrefsVoice*)user_data;
279 prefs->mDeviceSettings->open(); 275 prefs->mVoiceDeviceSettings->open();
280 LLFloater* parent_floater = gFloaterView->getParentFloater(prefs); 276 LLFloater* parent_floater = gFloaterView->getParentFloater(prefs);
281 if (parent_floater) 277 if (parent_floater)
282 { 278 {
283 parent_floater->addDependentFloater(prefs->mDeviceSettings, FALSE); 279 parent_floater->addDependentFloater(prefs->mVoiceDeviceSettings, FALSE);
284 } 280 }
285} 281}
diff --git a/linden/indra/newview/llprefsvoice.h b/linden/indra/newview/llprefsvoice.h
index bb47b85..1fb5c66 100644
--- a/linden/indra/newview/llprefsvoice.h
+++ b/linden/indra/newview/llprefsvoice.h
@@ -34,7 +34,7 @@
34 34
35#include "llpanel.h" 35#include "llpanel.h"
36 36
37class LLFloaterDeviceSettings; 37class LLFloaterVoiceDeviceSettings;
38 38
39class LLPrefsVoiceLogic 39class LLPrefsVoiceLogic
40{ 40{
@@ -55,7 +55,6 @@ protected:
55 static void onClickSetKey(void* user_data); 55 static void onClickSetKey(void* user_data);
56 static void onClickSetMiddleMouse(void* user_data); 56 static void onClickSetMiddleMouse(void* user_data);
57 static void onEarLocationCommit(LLUICtrl* ctrl, void* user_data); 57 static void onEarLocationCommit(LLUICtrl* ctrl, void* user_data);
58 static void onClickLaunchWizard(void* user_data);
59 58
60 BOOL mEnableVoice; 59 BOOL mEnableVoice;
61 BOOL mVoiceCallsFriendsOnly; 60 BOOL mVoiceCallsFriendsOnly;
@@ -81,10 +80,10 @@ public:
81 void cancel(); 80 void cancel();
82 81
83protected: 82protected:
84 static void onClickDeviceSettingsBtn(void* user_data); 83 static void onClickVoiceDeviceSettingsBtn(void* user_data);
85 84
86 LLPrefsVoiceLogic* mLogic; 85 LLPrefsVoiceLogic* mLogic;
87 LLFloaterDeviceSettings* mDeviceSettings; 86 LLFloaterVoiceDeviceSettings* mVoiceDeviceSettings;
88}; 87};
89 88
90#endif // LLPREFSVOICE_H 89#endif // LLPREFSVOICE_H
diff --git a/linden/indra/newview/llpreview.cpp b/linden/indra/newview/llpreview.cpp
index 8827598..39bdfd4 100644
--- a/linden/indra/newview/llpreview.cpp
+++ b/linden/indra/newview/llpreview.cpp
@@ -231,11 +231,11 @@ void LLPreview::onCommit()
231 LLViewerObject* obj = avatar->getWornAttachment( item->getUUID() ); 231 LLViewerObject* obj = avatar->getWornAttachment( item->getUUID() );
232 if( obj ) 232 if( obj )
233 { 233 {
234 gSelectMgr->deselectAll(); 234 LLSelectMgr::getInstance()->deselectAll();
235 gSelectMgr->addAsIndividual( obj, SELECT_ALL_TES, FALSE ); 235 LLSelectMgr::getInstance()->addAsIndividual( obj, SELECT_ALL_TES, FALSE );
236 gSelectMgr->selectionSetObjectDescription( childGetText("desc") ); 236 LLSelectMgr::getInstance()->selectionSetObjectDescription( childGetText("desc") );
237 237
238 gSelectMgr->deselectAll(); 238 LLSelectMgr::getInstance()->deselectAll();
239 } 239 }
240 } 240 }
241 } 241 }
@@ -374,7 +374,7 @@ BOOL LLPreview::handleMouseDown(S32 x, S32 y, MASK mask)
374 S32 screen_x; 374 S32 screen_x;
375 S32 screen_y; 375 S32 screen_y;
376 localPointToScreen(x, y, &screen_x, &screen_y ); 376 localPointToScreen(x, y, &screen_x, &screen_y );
377 gToolDragAndDrop->setDragStart(screen_x, screen_y); 377 LLToolDragAndDrop::getInstance()->setDragStart(screen_x, screen_y);
378 return TRUE; 378 return TRUE;
379 } 379 }
380 return LLFloater::handleMouseDown(x, y, mask); 380 return LLFloater::handleMouseDown(x, y, mask);
@@ -402,7 +402,7 @@ BOOL LLPreview::handleHover(S32 x, S32 y, MASK mask)
402 if(item 402 if(item
403 && item->getPermissions().allowCopyBy(gAgent.getID(), 403 && item->getPermissions().allowCopyBy(gAgent.getID(),
404 gAgent.getGroupID()) 404 gAgent.getGroupID())
405 && gToolDragAndDrop->isOverThreshold(screen_x, screen_y)) 405 && LLToolDragAndDrop::getInstance()->isOverThreshold(screen_x, screen_y))
406 { 406 {
407 EDragAndDropType type; 407 EDragAndDropType type;
408 type = LLAssetType::lookupDragAndDropType(item->getType()); 408 type = LLAssetType::lookupDragAndDropType(item->getType());
@@ -415,11 +415,11 @@ BOOL LLPreview::handleHover(S32 x, S32 y, MASK mask)
415 { 415 {
416 src = LLToolDragAndDrop::SOURCE_AGENT; 416 src = LLToolDragAndDrop::SOURCE_AGENT;
417 } 417 }
418 gToolDragAndDrop->beginDrag(type, 418 LLToolDragAndDrop::getInstance()->beginDrag(type,
419 item->getUUID(), 419 item->getUUID(),
420 src, 420 src,
421 mObjectUUID); 421 mObjectUUID);
422 return gToolDragAndDrop->handleHover(x, y, mask ); 422 return LLToolDragAndDrop::getInstance()->handleHover(x, y, mask );
423 } 423 }
424 } 424 }
425 return LLFloater::handleHover(x,y,mask); 425 return LLFloater::handleHover(x,y,mask);
diff --git a/linden/indra/newview/llpreviewanim.cpp b/linden/indra/newview/llpreviewanim.cpp
index ff8b3b5..c7b1dc7 100644
--- a/linden/indra/newview/llpreviewanim.cpp
+++ b/linden/indra/newview/llpreviewanim.cpp
@@ -42,14 +42,14 @@
42#include "llfilepicker.h" 42#include "llfilepicker.h"
43#include "lllineeditor.h" 43#include "lllineeditor.h"
44#include "lluictrlfactory.h" 44#include "lluictrlfactory.h"
45#include "llvieweruictrlfactory.h" 45#include "lluictrlfactory.h"
46 46
47extern LLAgent gAgent; 47extern LLAgent gAgent;
48 48
49LLPreviewAnim::LLPreviewAnim(const std::string& name, const LLRect& rect, const std::string& title, const LLUUID& item_uuid, const S32& activate, const LLUUID& object_uuid ) : 49LLPreviewAnim::LLPreviewAnim(const std::string& name, const LLRect& rect, const std::string& title, const LLUUID& item_uuid, const S32& activate, const LLUUID& object_uuid ) :
50 LLPreview( name, rect, title, item_uuid, object_uuid) 50 LLPreview( name, rect, title, item_uuid, object_uuid)
51{ 51{
52 gUICtrlFactory->buildFloater(this,"floater_preview_animation.xml"); 52 LLUICtrlFactory::getInstance()->buildFloater(this,"floater_preview_animation.xml");
53 53
54 childSetAction("Anim play btn",playAnim,this); 54 childSetAction("Anim play btn",playAnim,this);
55 childSetAction("Anim audition btn",auditionAnim,this); 55 childSetAction("Anim audition btn",auditionAnim,this);
@@ -116,7 +116,7 @@ void LLPreviewAnim::playAnim( void *userdata )
116 { 116 {
117 LLUUID itemID=item->getAssetUUID(); 117 LLUUID itemID=item->getAssetUUID();
118 118
119 LLButton* btn = LLUICtrlFactory::getButtonByName(self, "Anim play btn"); 119 LLButton* btn = self->getChild<LLButton>("Anim play btn");
120 if (btn) 120 if (btn)
121 { 121 {
122 btn->toggleState(); 122 btn->toggleState();
@@ -153,7 +153,7 @@ void LLPreviewAnim::auditionAnim( void *userdata )
153 { 153 {
154 LLUUID itemID=item->getAssetUUID(); 154 LLUUID itemID=item->getAssetUUID();
155 155
156 LLButton* btn = LLUICtrlFactory::getButtonByName(self, "Anim audition btn"); 156 LLButton* btn = self->getChild<LLButton>("Anim audition btn");
157 if (btn) 157 if (btn)
158 { 158 {
159 btn->toggleState(); 159 btn->toggleState();
diff --git a/linden/indra/newview/llpreviewgesture.cpp b/linden/indra/newview/llpreviewgesture.cpp
index 3594642..4ca6009 100644
--- a/linden/indra/newview/llpreviewgesture.cpp
+++ b/linden/indra/newview/llpreviewgesture.cpp
@@ -49,6 +49,7 @@
49#include "llbutton.h" 49#include "llbutton.h"
50#include "llcheckboxctrl.h" 50#include "llcheckboxctrl.h"
51#include "llcombobox.h" 51#include "llcombobox.h"
52#include "lldelayedgestureerror.h"
52#include "llfloatergesture.h" // for some label constants 53#include "llfloatergesture.h" // for some label constants
53#include "llgesturemgr.h" 54#include "llgesturemgr.h"
54#include "llinventorymodel.h" 55#include "llinventorymodel.h"
@@ -58,7 +59,7 @@
58#include "llradiogroup.h" 59#include "llradiogroup.h"
59#include "llscrolllistctrl.h" 60#include "llscrolllistctrl.h"
60#include "lltextbox.h" 61#include "lltextbox.h"
61#include "llvieweruictrlfactory.h" 62#include "lluictrlfactory.h"
62#include "llviewerinventory.h" 63#include "llviewerinventory.h"
63#include "llviewerobject.h" 64#include "llviewerobject.h"
64#include "llviewerobjectlist.h" 65#include "llviewerobjectlist.h"
@@ -133,7 +134,7 @@ LLPreviewGesture* LLPreviewGesture::show(const std::string& title, const LLUUID&
133 self->init(item_id, object_id); 134 self->init(item_id, object_id);
134 135
135 // Builds and adds to gFloaterView 136 // Builds and adds to gFloaterView
136 gUICtrlFactory->buildFloater(self, "floater_preview_gesture.xml"); 137 LLUICtrlFactory::getInstance()->buildFloater(self, "floater_preview_gesture.xml");
137 self->setTitle(title); 138 self->setTitle(title);
138 139
139 // Move window to top-left of screen 140 // Move window to top-left of screen
@@ -184,18 +185,15 @@ LLPreviewGesture* LLPreviewGesture::show(const std::string& title, const LLUUID&
184 185
185 186
186// virtual 187// virtual
187BOOL LLPreviewGesture::handleKeyHere(KEY key, MASK mask, 188BOOL LLPreviewGesture::handleKeyHere(KEY key, MASK mask)
188 BOOL called_from_parent)
189{ 189{
190 if(getVisible() && getEnabled()) 190 if(('S' == key) && (MASK_CONTROL == (mask & MASK_CONTROL)))
191 { 191 {
192 if(('S' == key) && (MASK_CONTROL == (mask & MASK_CONTROL))) 192 saveIfNeeded();
193 { 193 return TRUE;
194 saveIfNeeded();
195 return TRUE;
196 }
197 } 194 }
198 return LLPreview::handleKeyHere(key, mask, called_from_parent); 195
196 return LLPreview::handleKeyHere(key, mask);
199} 197}
200 198
201 199
@@ -396,7 +394,7 @@ BOOL LLPreviewGesture::postBuild()
396 LLTextBox* text; 394 LLTextBox* text;
397 LLCheckBoxCtrl* check; 395 LLCheckBoxCtrl* check;
398 396
399 edit = LLViewerUICtrlFactory::getLineEditorByName(this, "trigger_editor"); 397 edit = getChild<LLLineEditor>("trigger_editor");
400 edit->setKeystrokeCallback(onKeystrokeCommit); 398 edit->setKeystrokeCallback(onKeystrokeCommit);
401 edit->setCommitCallback(onCommitSetDirty); 399 edit->setCommitCallback(onCommitSetDirty);
402 edit->setCommitOnFocusLost(TRUE); 400 edit->setCommitOnFocusLost(TRUE);
@@ -404,11 +402,11 @@ BOOL LLPreviewGesture::postBuild()
404 edit->setIgnoreTab(TRUE); 402 edit->setIgnoreTab(TRUE);
405 mTriggerEditor = edit; 403 mTriggerEditor = edit;
406 404
407 text = LLViewerUICtrlFactory::getTextBoxByName(this, "replace_text"); 405 text = getChild<LLTextBox>("replace_text");
408 text->setEnabled(FALSE); 406 text->setEnabled(FALSE);
409 mReplaceText = text; 407 mReplaceText = text;
410 408
411 edit = LLViewerUICtrlFactory::getLineEditorByName(this, "replace_editor"); 409 edit = getChild<LLLineEditor>("replace_editor");
412 edit->setEnabled(FALSE); 410 edit->setEnabled(FALSE);
413 edit->setKeystrokeCallback(onKeystrokeCommit); 411 edit->setKeystrokeCallback(onKeystrokeCommit);
414 edit->setCommitCallback(onCommitSetDirty); 412 edit->setCommitCallback(onCommitSetDirty);
@@ -417,76 +415,76 @@ BOOL LLPreviewGesture::postBuild()
417 edit->setIgnoreTab(TRUE); 415 edit->setIgnoreTab(TRUE);
418 mReplaceEditor = edit; 416 mReplaceEditor = edit;
419 417
420 combo = LLViewerUICtrlFactory::getComboBoxByName(this, "modifier_combo"); 418 combo = getChild<LLComboBox>( "modifier_combo");
421 combo->setCommitCallback(onCommitSetDirty); 419 combo->setCommitCallback(onCommitSetDirty);
422 combo->setCallbackUserData(this); 420 combo->setCallbackUserData(this);
423 mModifierCombo = combo; 421 mModifierCombo = combo;
424 422
425 combo = LLViewerUICtrlFactory::getComboBoxByName(this, "key_combo"); 423 combo = getChild<LLComboBox>( "key_combo");
426 combo->setCommitCallback(onCommitSetDirty); 424 combo->setCommitCallback(onCommitSetDirty);
427 combo->setCallbackUserData(this); 425 combo->setCallbackUserData(this);
428 mKeyCombo = combo; 426 mKeyCombo = combo;
429 427
430 list = LLViewerUICtrlFactory::getScrollListByName(this, "library_list"); 428 list = getChild<LLScrollListCtrl>("library_list");
431 list->setCommitCallback(onCommitLibrary); 429 list->setCommitCallback(onCommitLibrary);
432 list->setDoubleClickCallback(onClickAdd); 430 list->setDoubleClickCallback(onClickAdd);
433 list->setCallbackUserData(this); 431 list->setCallbackUserData(this);
434 mLibraryList = list; 432 mLibraryList = list;
435 433
436 btn = LLViewerUICtrlFactory::getButtonByName(this, "add_btn"); 434 btn = getChild<LLButton>( "add_btn");
437 btn->setClickedCallback(onClickAdd); 435 btn->setClickedCallback(onClickAdd);
438 btn->setCallbackUserData(this); 436 btn->setCallbackUserData(this);
439 btn->setEnabled(FALSE); 437 btn->setEnabled(FALSE);
440 mAddBtn = btn; 438 mAddBtn = btn;
441 439
442 btn = LLViewerUICtrlFactory::getButtonByName(this, "up_btn"); 440 btn = getChild<LLButton>( "up_btn");
443 btn->setClickedCallback(onClickUp); 441 btn->setClickedCallback(onClickUp);
444 btn->setCallbackUserData(this); 442 btn->setCallbackUserData(this);
445 btn->setEnabled(FALSE); 443 btn->setEnabled(FALSE);
446 mUpBtn = btn; 444 mUpBtn = btn;
447 445
448 btn = LLViewerUICtrlFactory::getButtonByName(this, "down_btn"); 446 btn = getChild<LLButton>( "down_btn");
449 btn->setClickedCallback(onClickDown); 447 btn->setClickedCallback(onClickDown);
450 btn->setCallbackUserData(this); 448 btn->setCallbackUserData(this);
451 btn->setEnabled(FALSE); 449 btn->setEnabled(FALSE);
452 mDownBtn = btn; 450 mDownBtn = btn;
453 451
454 btn = LLViewerUICtrlFactory::getButtonByName(this, "delete_btn"); 452 btn = getChild<LLButton>( "delete_btn");
455 btn->setClickedCallback(onClickDelete); 453 btn->setClickedCallback(onClickDelete);
456 btn->setCallbackUserData(this); 454 btn->setCallbackUserData(this);
457 btn->setEnabled(FALSE); 455 btn->setEnabled(FALSE);
458 mDeleteBtn = btn; 456 mDeleteBtn = btn;
459 457
460 list = LLViewerUICtrlFactory::getScrollListByName(this, "step_list"); 458 list = getChild<LLScrollListCtrl>("step_list");
461 list->setCommitCallback(onCommitStep); 459 list->setCommitCallback(onCommitStep);
462 list->setCallbackUserData(this); 460 list->setCallbackUserData(this);
463 mStepList = list; 461 mStepList = list;
464 462
465 // Options 463 // Options
466 text = LLViewerUICtrlFactory::getTextBoxByName(this, "options_text"); 464 text = getChild<LLTextBox>("options_text");
467 text->setBorderVisible(TRUE); 465 text->setBorderVisible(TRUE);
468 mOptionsText = text; 466 mOptionsText = text;
469 467
470 combo = LLViewerUICtrlFactory::getComboBoxByName(this, "animation_list"); 468 combo = getChild<LLComboBox>( "animation_list");
471 combo->setVisible(FALSE); 469 combo->setVisible(FALSE);
472 combo->setCommitCallback(onCommitAnimation); 470 combo->setCommitCallback(onCommitAnimation);
473 combo->setCallbackUserData(this); 471 combo->setCallbackUserData(this);
474 mAnimationCombo = combo; 472 mAnimationCombo = combo;
475 473
476 LLRadioGroup* group; 474 LLRadioGroup* group;
477 group = LLViewerUICtrlFactory::getRadioGroupByName(this, "animation_trigger_type"); 475 group = getChild<LLRadioGroup>("animation_trigger_type");
478 group->setVisible(FALSE); 476 group->setVisible(FALSE);
479 group->setCommitCallback(onCommitAnimationTrigger); 477 group->setCommitCallback(onCommitAnimationTrigger);
480 group->setCallbackUserData(this); 478 group->setCallbackUserData(this);
481 mAnimationRadio = group; 479 mAnimationRadio = group;
482 480
483 combo = LLViewerUICtrlFactory::getComboBoxByName(this, "sound_list"); 481 combo = getChild<LLComboBox>( "sound_list");
484 combo->setVisible(FALSE); 482 combo->setVisible(FALSE);
485 combo->setCommitCallback(onCommitSound); 483 combo->setCommitCallback(onCommitSound);
486 combo->setCallbackUserData(this); 484 combo->setCallbackUserData(this);
487 mSoundCombo = combo; 485 mSoundCombo = combo;
488 486
489 edit = LLViewerUICtrlFactory::getLineEditorByName(this, "chat_editor"); 487 edit = getChild<LLLineEditor>("chat_editor");
490 edit->setVisible(FALSE); 488 edit->setVisible(FALSE);
491 edit->setCommitCallback(onCommitChat); 489 edit->setCommitCallback(onCommitChat);
492 //edit->setKeystrokeCallback(onKeystrokeCommit); 490 //edit->setKeystrokeCallback(onKeystrokeCommit);
@@ -495,19 +493,19 @@ BOOL LLPreviewGesture::postBuild()
495 edit->setIgnoreTab(TRUE); 493 edit->setIgnoreTab(TRUE);
496 mChatEditor = edit; 494 mChatEditor = edit;
497 495
498 check = LLViewerUICtrlFactory::getCheckBoxByName(this, "wait_anim_check"); 496 check = getChild<LLCheckBoxCtrl>( "wait_anim_check");
499 check->setVisible(FALSE); 497 check->setVisible(FALSE);
500 check->setCommitCallback(onCommitWait); 498 check->setCommitCallback(onCommitWait);
501 check->setCallbackUserData(this); 499 check->setCallbackUserData(this);
502 mWaitAnimCheck = check; 500 mWaitAnimCheck = check;
503 501
504 check = LLViewerUICtrlFactory::getCheckBoxByName(this, "wait_time_check"); 502 check = getChild<LLCheckBoxCtrl>( "wait_time_check");
505 check->setVisible(FALSE); 503 check->setVisible(FALSE);
506 check->setCommitCallback(onCommitWait); 504 check->setCommitCallback(onCommitWait);
507 check->setCallbackUserData(this); 505 check->setCallbackUserData(this);
508 mWaitTimeCheck = check; 506 mWaitTimeCheck = check;
509 507
510 edit = LLViewerUICtrlFactory::getLineEditorByName(this, "wait_time_editor"); 508 edit = getChild<LLLineEditor>("wait_time_editor");
511 edit->setEnabled(FALSE); 509 edit->setEnabled(FALSE);
512 edit->setVisible(FALSE); 510 edit->setVisible(FALSE);
513 edit->setPrevalidate(LLLineEditor::prevalidateFloat); 511 edit->setPrevalidate(LLLineEditor::prevalidateFloat);
@@ -519,17 +517,17 @@ BOOL LLPreviewGesture::postBuild()
519 mWaitTimeEditor = edit; 517 mWaitTimeEditor = edit;
520 518
521 // Buttons at the bottom 519 // Buttons at the bottom
522 check = LLViewerUICtrlFactory::getCheckBoxByName(this, "active_check"); 520 check = getChild<LLCheckBoxCtrl>( "active_check");
523 check->setCommitCallback(onCommitActive); 521 check->setCommitCallback(onCommitActive);
524 check->setCallbackUserData(this); 522 check->setCallbackUserData(this);
525 mActiveCheck = check; 523 mActiveCheck = check;
526 524
527 btn = LLViewerUICtrlFactory::getButtonByName(this, "save_btn"); 525 btn = getChild<LLButton>( "save_btn");
528 btn->setClickedCallback(onClickSave); 526 btn->setClickedCallback(onClickSave);
529 btn->setCallbackUserData(this); 527 btn->setCallbackUserData(this);
530 mSaveBtn = btn; 528 mSaveBtn = btn;
531 529
532 btn = LLViewerUICtrlFactory::getButtonByName(this, "preview_btn"); 530 btn = getChild<LLButton>( "preview_btn");
533 btn->setClickedCallback(onClickPreview); 531 btn->setClickedCallback(onClickPreview);
534 btn->setCallbackUserData(this); 532 btn->setCallbackUserData(this);
535 mPreviewBtn = btn; 533 mPreviewBtn = btn;
@@ -955,24 +953,16 @@ void LLPreviewGesture::onLoadComplete(LLVFS *vfs,
955 } 953 }
956 else 954 else
957 { 955 {
958 // Get missing gesture's name. Use UUID if name can't be found. 956 LLViewerStats::getInstance()->incStat( LLViewerStats::ST_DOWNLOAD_FAILED );
959 LLStringBase<char>::format_map_t args;
960 LLInventoryItem *item = gInventory.getItem( *item_idp );
961 args["[NAME]"] = item ? item->getName() : LLString( item_idp->asString() );
962
963 if( gViewerStats )
964 {
965 gViewerStats->incStat( LLViewerStats::ST_DOWNLOAD_FAILED );
966 }
967 957
968 if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status || 958 if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status ||
969 LL_ERR_FILE_EMPTY == status) 959 LL_ERR_FILE_EMPTY == status)
970 { 960 {
971 LLNotifyBox::showXml("GestureMissing", args); 961 LLDelayedGestureError::gestureMissing( *item_idp );
972 } 962 }
973 else 963 else
974 { 964 {
975 LLNotifyBox::showXml("UnableToLoadGesture", args); 965 LLDelayedGestureError::gestureFailedToLoad( *item_idp );
976 } 966 }
977 967
978 llwarns << "Problem loading gesture: " << status << llendl; 968 llwarns << "Problem loading gesture: " << status << llendl;
@@ -992,7 +982,7 @@ void LLPreviewGesture::loadUIFromGesture(LLMultiGesture* gesture)
992 982
993 if (item) 983 if (item)
994 { 984 {
995 LLLineEditor* descEditor = LLUICtrlFactory::getLineEditorByName(this, "desc"); 985 LLLineEditor* descEditor = getChild<LLLineEditor>("desc");
996 descEditor->setText(item->getDescription()); 986 descEditor->setText(item->getDescription());
997 }*/ 987 }*/
998 988
@@ -1183,7 +1173,7 @@ void LLPreviewGesture::saveIfNeeded()
1183 } 1173 }
1184 else if (gAssetStorage) 1174 else if (gAssetStorage)
1185 { 1175 {
1186 LLLineEditor* descEditor = LLUICtrlFactory::getLineEditorByName(this, "desc"); 1176 LLLineEditor* descEditor = getChild<LLLineEditor>("desc");
1187 LLSaveInfo* info = new LLSaveInfo(mItemUUID, mObjectUUID, descEditor->getText(), tid); 1177 LLSaveInfo* info = new LLSaveInfo(mItemUUID, mObjectUUID, descEditor->getText(), tid);
1188 gAssetStorage->storeAssetData(tid, LLAssetType::AT_GESTURE, onSaveComplete, info, FALSE); 1178 gAssetStorage->storeAssetData(tid, LLAssetType::AT_GESTURE, onSaveComplete, info, FALSE);
1189 } 1179 }
diff --git a/linden/indra/newview/llpreviewgesture.h b/linden/indra/newview/llpreviewgesture.h
index ea26769..ec80c45 100644
--- a/linden/indra/newview/llpreviewgesture.h
+++ b/linden/indra/newview/llpreviewgesture.h
@@ -53,7 +53,7 @@ public:
53 static LLPreviewGesture* show(const std::string& title, const LLUUID& item_id, const LLUUID& object_id, BOOL take_focus = TRUE); 53 static LLPreviewGesture* show(const std::string& title, const LLUUID& item_id, const LLUUID& object_id, BOOL take_focus = TRUE);
54 54
55 // LLView 55 // LLView
56 virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); 56 virtual BOOL handleKeyHere(KEY key, MASK mask);
57 virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, 57 virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
58 EDragAndDropType cargo_type, 58 EDragAndDropType cargo_type,
59 void* cargo_data, 59 void* cargo_data,
diff --git a/linden/indra/newview/llpreviewlandmark.cpp b/linden/indra/newview/llpreviewlandmark.cpp
index af49aee..adb6db1 100644
--- a/linden/indra/newview/llpreviewlandmark.cpp
+++ b/linden/indra/newview/llpreviewlandmark.cpp
@@ -56,7 +56,7 @@
56#include "llviewercontrol.h" 56#include "llviewercontrol.h"
57#include "llviewerregion.h" 57#include "llviewerregion.h"
58#include "llviewerstats.h" 58#include "llviewerstats.h"
59#include "llvieweruictrlfactory.h" 59#include "lluictrlfactory.h"
60 60
61 61
62 62
@@ -89,7 +89,7 @@ LLPreviewLandmark::LLPreviewLandmark(const std::string& name,
89{ 89{
90 90
91 mFactoryMap["place_details_panel"] = LLCallbackMap(LLPreviewLandmark::createPlaceDetail, this); 91 mFactoryMap["place_details_panel"] = LLCallbackMap(LLPreviewLandmark::createPlaceDetail, this);
92 gUICtrlFactory->buildFloater(this, "floater_preview_existing_landmark.xml", &getFactoryMap()); 92 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_preview_existing_landmark.xml", &getFactoryMap());
93 93
94 /* 94 /*
95 childSetCommitCallback("desc_editor", LLPreview::onText, this); 95 childSetCommitCallback("desc_editor", LLPreview::onText, this);
@@ -166,26 +166,23 @@ const LLColor4& LLPreviewLandmark::getMarkerColor() const
166 166
167void LLPreviewLandmark::draw() 167void LLPreviewLandmark::draw()
168{ 168{
169 if( getVisible() ) 169 const LLInventoryItem *item = getItem();
170 {
171 const LLInventoryItem *item = getItem();
172 170
173 if( item && !mLandmark ) 171 if( item && !mLandmark )
172 {
173 mLandmark = gLandmarkList.getAsset( item->getAssetUUID() );
174 if(mLandmark && mPlacePanel)
174 { 175 {
175 mLandmark = gLandmarkList.getAsset( item->getAssetUUID() ); 176 LLVector3 pos_region = mLandmark->getRegionPos(); // always have this
176 if(mLandmark && mPlacePanel) 177 LLUUID landmark_asset_id = item->getAssetUUID(); // always have this
177 { 178 LLUUID region_id;
178 LLVector3 pos_region = mLandmark->getRegionPos(); // always have this 179 mLandmark->getRegionID(region_id); // might find null?
179 LLUUID landmark_asset_id = item->getAssetUUID(); // always have this 180 LLVector3d pos_global = getPositionGlobal(); // might be 0
180 LLUUID region_id; 181 mPlacePanel->displayParcelInfo(pos_region, landmark_asset_id, region_id, pos_global);
181 mLandmark->getRegionID(region_id); // might find null?
182 LLVector3d pos_global = getPositionGlobal(); // might be 0
183 mPlacePanel->displayParcelInfo(pos_region, landmark_asset_id, region_id, pos_global);
184 }
185 } 182 }
186
187 LLPreview::draw();
188 } 183 }
184
185 LLPreview::draw();
189} 186}
190 187
191void LLPreviewLandmark::loadAsset() 188void LLPreviewLandmark::loadAsset()
@@ -213,7 +210,7 @@ void* LLPreviewLandmark::createPlaceDetail(void* userdata)
213{ 210{
214 LLPreviewLandmark *self = (LLPreviewLandmark*)userdata; 211 LLPreviewLandmark *self = (LLPreviewLandmark*)userdata;
215 self->mPlacePanel = new LLPanelPlace(); 212 self->mPlacePanel = new LLPanelPlace();
216 gUICtrlFactory->buildPanel(self->mPlacePanel, "panel_place.xml"); 213 LLUICtrlFactory::getInstance()->buildPanel(self->mPlacePanel, "panel_place.xml");
217 const LLInventoryItem* item = self->getItem(); 214 const LLInventoryItem* item = self->getItem();
218 self->mPlacePanel->displayItemInfo(item); 215 self->mPlacePanel->displayItemInfo(item);
219 216
diff --git a/linden/indra/newview/llpreviewnotecard.cpp b/linden/indra/newview/llpreviewnotecard.cpp
index 6d7884b..9e4272f 100644
--- a/linden/indra/newview/llpreviewnotecard.cpp
+++ b/linden/indra/newview/llpreviewnotecard.cpp
@@ -58,7 +58,7 @@
58#include "llviewercontrol.h" // gSavedSettings 58#include "llviewercontrol.h" // gSavedSettings
59#include "llappviewer.h" // app_abort_quit() 59#include "llappviewer.h" // app_abort_quit()
60#include "lllineeditor.h" 60#include "lllineeditor.h"
61#include "llvieweruictrlfactory.h" 61#include "lluictrlfactory.h"
62 62
63///---------------------------------------------------------------------------- 63///----------------------------------------------------------------------------
64/// Local function declarations, constants, enums, and typedefs 64/// Local function declarations, constants, enums, and typedefs
@@ -99,13 +99,13 @@ LLPreviewNotecard::LLPreviewNotecard(const std::string& name,
99 99
100 if (show_keep_discard) 100 if (show_keep_discard)
101 { 101 {
102 gUICtrlFactory->buildFloater(this,"floater_preview_notecard_keep_discard.xml"); 102 LLUICtrlFactory::getInstance()->buildFloater(this,"floater_preview_notecard_keep_discard.xml");
103 childSetAction("Keep",onKeepBtn,this); 103 childSetAction("Keep",onKeepBtn,this);
104 childSetAction("Discard",onDiscardBtn,this); 104 childSetAction("Discard",onDiscardBtn,this);
105 } 105 }
106 else 106 else
107 { 107 {
108 gUICtrlFactory->buildFloater(this,"floater_preview_notecard.xml"); 108 LLUICtrlFactory::getInstance()->buildFloater(this,"floater_preview_notecard.xml");
109 childSetAction("Save",onClickSave,this); 109 childSetAction("Save",onClickSave,this);
110 110
111 if( mAssetID.isNull() ) 111 if( mAssetID.isNull() )
@@ -136,7 +136,7 @@ LLPreviewNotecard::LLPreviewNotecard(const std::string& name,
136 136
137 setTitle(title); 137 setTitle(title);
138 138
139 LLViewerTextEditor* editor = LLViewerUICtrlFactory::getViewerTextEditorByName(this, "Notecard Editor"); 139 LLViewerTextEditor* editor = getChild<LLViewerTextEditor>("Notecard Editor");
140 140
141 if (editor) 141 if (editor)
142 { 142 {
@@ -154,7 +154,7 @@ LLPreviewNotecard::~LLPreviewNotecard()
154 154
155BOOL LLPreviewNotecard::postBuild() 155BOOL LLPreviewNotecard::postBuild()
156{ 156{
157 LLViewerTextEditor *ed = (LLViewerTextEditor *)gUICtrlFactory->getTextEditorByName(this, "Notecard Editor"); 157 LLViewerTextEditor *ed = getChild<LLViewerTextEditor>("Notecard Editor");
158 if (ed) 158 if (ed)
159 { 159 {
160 ed->setNotecardInfo(mNotecardItemID, mObjectID); 160 ed->setNotecardInfo(mNotecardItemID, mObjectID);
@@ -181,7 +181,7 @@ bool LLPreviewNotecard::saveItem(LLPointer<LLInventoryItem>* itemptr)
181void LLPreviewNotecard::setEnabled( BOOL enabled ) 181void LLPreviewNotecard::setEnabled( BOOL enabled )
182{ 182{
183 183
184 LLViewerTextEditor* editor = LLViewerUICtrlFactory::getViewerTextEditorByName(this, "Notecard Editor"); 184 LLViewerTextEditor* editor = getChild<LLViewerTextEditor>("Notecard Editor");
185 185
186 childSetEnabled("Notecard Editor", enabled); 186 childSetEnabled("Notecard Editor", enabled);
187 childSetVisible("lock", !enabled); 187 childSetVisible("lock", !enabled);
@@ -197,7 +197,7 @@ void LLPreviewNotecard::draw()
197 197
198 //childSetFocus("Save", FALSE); 198 //childSetFocus("Save", FALSE);
199 199
200 LLViewerTextEditor* editor = LLViewerUICtrlFactory::getViewerTextEditorByName(this, "Notecard Editor"); 200 LLViewerTextEditor* editor = getChild<LLViewerTextEditor>("Notecard Editor");
201 BOOL script_changed = !editor->isPristine(); 201 BOOL script_changed = !editor->isPristine();
202 202
203 childSetEnabled("Save", script_changed && getEnabled()); 203 childSetEnabled("Save", script_changed && getEnabled());
@@ -206,24 +206,21 @@ void LLPreviewNotecard::draw()
206} 206}
207 207
208// virtual 208// virtual
209BOOL LLPreviewNotecard::handleKeyHere(KEY key, MASK mask, 209BOOL LLPreviewNotecard::handleKeyHere(KEY key, MASK mask)
210 BOOL called_from_parent)
211{ 210{
212 if(getVisible() && getEnabled()) 211 if(('S' == key) && (MASK_CONTROL == (mask & MASK_CONTROL)))
213 { 212 {
214 if(('S' == key) && (MASK_CONTROL == (mask & MASK_CONTROL))) 213 saveIfNeeded();
215 { 214 return TRUE;
216 saveIfNeeded();
217 return TRUE;
218 }
219 } 215 }
220 return LLPreview::handleKeyHere(key, mask, called_from_parent); 216
217 return LLPreview::handleKeyHere(key, mask);
221} 218}
222 219
223// virtual 220// virtual
224BOOL LLPreviewNotecard::canClose() 221BOOL LLPreviewNotecard::canClose()
225{ 222{
226 LLViewerTextEditor* editor = LLViewerUICtrlFactory::getViewerTextEditorByName(this, "Notecard Editor"); 223 LLViewerTextEditor* editor = getChild<LLViewerTextEditor>("Notecard Editor");
227 224
228 if(mForceClose || editor->isPristine()) 225 if(mForceClose || editor->isPristine())
229 { 226 {
@@ -242,7 +239,7 @@ BOOL LLPreviewNotecard::canClose()
242 239
243const LLInventoryItem* LLPreviewNotecard::getDragItem() 240const LLInventoryItem* LLPreviewNotecard::getDragItem()
244{ 241{
245 LLViewerTextEditor* editor = LLViewerUICtrlFactory::getViewerTextEditorByName(this, "Notecard Editor"); 242 LLViewerTextEditor* editor = getChild<LLViewerTextEditor>("Notecard Editor");
246 243
247 if(editor) 244 if(editor)
248 { 245 {
@@ -254,9 +251,7 @@ const LLInventoryItem* LLPreviewNotecard::getDragItem()
254bool LLPreviewNotecard::hasEmbeddedInventory() 251bool LLPreviewNotecard::hasEmbeddedInventory()
255{ 252{
256 LLViewerTextEditor* editor = NULL; 253 LLViewerTextEditor* editor = NULL;
257 editor = LLViewerUICtrlFactory::getViewerTextEditorByName( 254 editor = getChild<LLViewerTextEditor>("Notecard Editor");
258 this,
259 "Notecard Editor");
260 if (!editor) return false; 255 if (!editor) return false;
261 return editor->hasEmbeddedInventory(); 256 return editor->hasEmbeddedInventory();
262} 257}
@@ -271,7 +266,7 @@ void LLPreviewNotecard::loadAsset()
271{ 266{
272 // request the asset. 267 // request the asset.
273 const LLInventoryItem* item = getItem(); 268 const LLInventoryItem* item = getItem();
274 LLViewerTextEditor* editor = LLViewerUICtrlFactory::getViewerTextEditorByName(this, "Notecard Editor"); 269 LLViewerTextEditor* editor = getChild<LLViewerTextEditor>("Notecard Editor");
275 270
276 if (!editor) 271 if (!editor)
277 return; 272 return;
@@ -377,7 +372,7 @@ void LLPreviewNotecard::onLoadComplete(LLVFS *vfs,
377 buffer[file_length] = 0; 372 buffer[file_length] = 0;
378 373
379 374
380 LLViewerTextEditor* previewEditor = LLViewerUICtrlFactory::getViewerTextEditorByName(preview, "Notecard Editor"); 375 LLViewerTextEditor* previewEditor = preview->getChild<LLViewerTextEditor>("Notecard Editor");
381 376
382 if( (file_length > 19) && !strncmp( buffer, "Linden text version", 19 ) ) 377 if( (file_length > 19) && !strncmp( buffer, "Linden text version", 19 ) )
383 { 378 {
@@ -403,10 +398,7 @@ void LLPreviewNotecard::onLoadComplete(LLVFS *vfs,
403 } 398 }
404 else 399 else
405 { 400 {
406 if( gViewerStats ) 401 LLViewerStats::getInstance()->incStat( LLViewerStats::ST_DOWNLOAD_FAILED );
407 {
408 gViewerStats->incStat( LLViewerStats::ST_DOWNLOAD_FAILED );
409 }
410 402
411 if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status || 403 if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status ||
412 LL_ERR_FILE_EMPTY == status) 404 LL_ERR_FILE_EMPTY == status)
@@ -475,7 +467,7 @@ bool LLPreviewNotecard::saveIfNeeded(LLInventoryItem* copyitem)
475 } 467 }
476 468
477 469
478 LLViewerTextEditor* editor = LLViewerUICtrlFactory::getViewerTextEditorByName(this, "Notecard Editor"); 470 LLViewerTextEditor* editor = getChild<LLViewerTextEditor>("Notecard Editor");
479 471
480 if(!editor->isPristine()) 472 if(!editor->isPristine())
481 { 473 {
@@ -592,7 +584,7 @@ void LLPreviewNotecard::onSaveComplete(const LLUUID& asset_uuid, void* user_data
592 // Perform item copy to inventory 584 // Perform item copy to inventory
593 if (info->mCopyItem.notNull()) 585 if (info->mCopyItem.notNull())
594 { 586 {
595 LLViewerTextEditor* editor = LLViewerUICtrlFactory::getViewerTextEditorByName(info->mSelf, "Notecard Editor"); 587 LLViewerTextEditor* editor = info->mSelf->getChild<LLViewerTextEditor>("Notecard Editor");
596 if (editor) 588 if (editor)
597 { 589 {
598 editor->copyInventory(info->mCopyItem); 590 editor->copyInventory(info->mCopyItem);
diff --git a/linden/indra/newview/llpreviewnotecard.h b/linden/indra/newview/llpreviewnotecard.h
index 6977da4..9e90f18 100644
--- a/linden/indra/newview/llpreviewnotecard.h
+++ b/linden/indra/newview/llpreviewnotecard.h
@@ -61,7 +61,7 @@ public:
61 61
62 // llview 62 // llview
63 virtual void draw(); 63 virtual void draw();
64 virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); 64 virtual BOOL handleKeyHere(KEY key, MASK mask);
65 virtual void setEnabled( BOOL enabled ); 65 virtual void setEnabled( BOOL enabled );
66 virtual void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE); 66 virtual void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
67 67
diff --git a/linden/indra/newview/llpreviewscript.cpp b/linden/indra/newview/llpreviewscript.cpp
index 2f3a8a2..6acd6bf 100644
--- a/linden/indra/newview/llpreviewscript.cpp
+++ b/linden/indra/newview/llpreviewscript.cpp
@@ -78,7 +78,7 @@
78#include "llviewerstats.h" 78#include "llviewerstats.h"
79#include "llviewertexteditor.h" 79#include "llviewertexteditor.h"
80#include "llviewerwindow.h" 80#include "llviewerwindow.h"
81#include "llvieweruictrlfactory.h" 81#include "lluictrlfactory.h"
82#include "llwebbrowserctrl.h" 82#include "llwebbrowserctrl.h"
83#include "lluictrlfactory.h" 83#include "lluictrlfactory.h"
84 84
@@ -176,7 +176,7 @@ LLFloaterScriptSearch::LLFloaterScriptSearch(std::string title, LLRect rect, LLS
176 : LLFloater("script search",rect,title), mEditorCore(editor_core) 176 : LLFloater("script search",rect,title), mEditorCore(editor_core)
177{ 177{
178 178
179 gUICtrlFactory->buildFloater(this,"floater_script_search.xml"); 179 LLUICtrlFactory::getInstance()->buildFloater(this,"floater_script_search.xml");
180 180
181 childSetAction("search_btn", onBtnSearch,this); 181 childSetAction("search_btn", onBtnSearch,this);
182 childSetAction("replace_btn", onBtnReplace,this); 182 childSetAction("replace_btn", onBtnReplace,this);
@@ -198,9 +198,10 @@ LLFloaterScriptSearch::LLFloaterScriptSearch(std::string title, LLRect rect, LLS
198 LLView* viewp = (LLView*)editor_core; 198 LLView* viewp = (LLView*)editor_core;
199 while(viewp) 199 while(viewp)
200 { 200 {
201 if (viewp->getWidgetType() == WIDGET_TYPE_FLOATER) 201 LLFloater* floaterp = dynamic_cast<LLFloater*>(viewp);
202 if (floaterp)
202 { 203 {
203 ((LLFloater*)viewp)->addDependentFloater(this); 204 floaterp->addDependentFloater(this);
204 break; 205 break;
205 } 206 }
206 viewp = viewp->getParent(); 207 viewp = viewp->getParent();
@@ -243,7 +244,7 @@ void LLFloaterScriptSearch::onBtnSearch(void *userdata)
243 244
244void LLFloaterScriptSearch::handleBtnSearch() 245void LLFloaterScriptSearch::handleBtnSearch()
245{ 246{
246 LLCheckBoxCtrl* caseChk = LLUICtrlFactory::getCheckBoxByName(this,"case_text"); 247 LLCheckBoxCtrl* caseChk = getChild<LLCheckBoxCtrl>("case_text");
247 mEditorCore->mEditor->selectNext(childGetText("search_text"), caseChk->get()); 248 mEditorCore->mEditor->selectNext(childGetText("search_text"), caseChk->get());
248} 249}
249 250
@@ -256,7 +257,7 @@ void LLFloaterScriptSearch::onBtnReplace(void *userdata)
256 257
257void LLFloaterScriptSearch::handleBtnReplace() 258void LLFloaterScriptSearch::handleBtnReplace()
258{ 259{
259 LLCheckBoxCtrl* caseChk = LLUICtrlFactory::getCheckBoxByName(this,"case_text"); 260 LLCheckBoxCtrl* caseChk = getChild<LLCheckBoxCtrl>("case_text");
260 mEditorCore->mEditor->replaceText(childGetText("search_text"), childGetText("replace_text"), caseChk->get()); 261 mEditorCore->mEditor->replaceText(childGetText("search_text"), childGetText("replace_text"), caseChk->get());
261} 262}
262 263
@@ -269,7 +270,7 @@ void LLFloaterScriptSearch::onBtnReplaceAll(void *userdata)
269 270
270void LLFloaterScriptSearch::handleBtnReplaceAll() 271void LLFloaterScriptSearch::handleBtnReplaceAll()
271{ 272{
272 LLCheckBoxCtrl* caseChk = LLUICtrlFactory::getCheckBoxByName(this,"case_text"); 273 LLCheckBoxCtrl* caseChk = getChild<LLCheckBoxCtrl>("case_text");
273 mEditorCore->mEditor->replaceTextAll(childGetText("search_text"), childGetText("replace_text"), caseChk->get()); 274 mEditorCore->mEditor->replaceTextAll(childGetText("search_text"), childGetText("replace_text"), caseChk->get());
274} 275}
275 276
@@ -311,16 +312,15 @@ LLScriptEdCore::LLScriptEdCore(
311 setBorderVisible(FALSE); 312 setBorderVisible(FALSE);
312 313
313 314
314 gUICtrlFactory->buildPanel(this, "floater_script_ed_panel.xml"); 315 LLUICtrlFactory::getInstance()->buildPanel(this, "floater_script_ed_panel.xml");
315 316
316 mErrorList = LLUICtrlFactory::getScrollListByName(this, "lsl errors"); 317 mErrorList = getChild<LLScrollListCtrl>("lsl errors");
317 318
318 mFunctions = LLUICtrlFactory::getComboBoxByName(this, "Insert..."); 319 mFunctions = getChild<LLComboBox>( "Insert...");
319 320
320 childSetCommitCallback("Insert...", &LLScriptEdCore::onBtnInsertFunction, this); 321 childSetCommitCallback("Insert...", &LLScriptEdCore::onBtnInsertFunction, this);
321 322
322 mEditor = LLViewerUICtrlFactory::getViewerTextEditorByName(this, "Script Editor"); 323 mEditor = getChild<LLViewerTextEditor>("Script Editor");
323 mEditor->setReadOnlyBgColor(gColors.getColor( "ScriptBgReadOnlyColor" ) );
324 mEditor->setFollowsAll(); 324 mEditor->setFollowsAll();
325 mEditor->setHandleEditKeysDirectly(TRUE); 325 mEditor->setHandleEditKeysDirectly(TRUE);
326 mEditor->setEnabled(TRUE); 326 mEditor->setEnabled(TRUE);
@@ -389,47 +389,47 @@ LLScriptEdCore::~LLScriptEdCore()
389void LLScriptEdCore::initMenu() 389void LLScriptEdCore::initMenu()
390{ 390{
391 391
392 LLMenuItemCallGL* menuItem = LLUICtrlFactory::getMenuItemCallByName(this, "Save"); 392 LLMenuItemCallGL* menuItem = getChild<LLMenuItemCallGL>("Save");
393 menuItem->setMenuCallback(onBtnSave, this); 393 menuItem->setMenuCallback(onBtnSave, this);
394 menuItem->setEnabledCallback(hasChanged); 394 menuItem->setEnabledCallback(hasChanged);
395 395
396 menuItem = LLUICtrlFactory::getMenuItemCallByName(this, "Revert All Changes"); 396 menuItem = getChild<LLMenuItemCallGL>("Revert All Changes");
397 menuItem->setMenuCallback(onBtnUndoChanges, this); 397 menuItem->setMenuCallback(onBtnUndoChanges, this);
398 menuItem->setEnabledCallback(hasChanged); 398 menuItem->setEnabledCallback(hasChanged);
399 399
400 menuItem = LLUICtrlFactory::getMenuItemCallByName(this, "Undo"); 400 menuItem = getChild<LLMenuItemCallGL>("Undo");
401 menuItem->setMenuCallback(onUndoMenu, this); 401 menuItem->setMenuCallback(onUndoMenu, this);
402 menuItem->setEnabledCallback(enableUndoMenu); 402 menuItem->setEnabledCallback(enableUndoMenu);
403 403
404 menuItem = LLUICtrlFactory::getMenuItemCallByName(this, "Redo"); 404 menuItem = getChild<LLMenuItemCallGL>("Redo");
405 menuItem->setMenuCallback(onRedoMenu, this); 405 menuItem->setMenuCallback(onRedoMenu, this);
406 menuItem->setEnabledCallback(enableRedoMenu); 406 menuItem->setEnabledCallback(enableRedoMenu);
407 407
408 menuItem = LLUICtrlFactory::getMenuItemCallByName(this, "Cut"); 408 menuItem = getChild<LLMenuItemCallGL>("Cut");
409 menuItem->setMenuCallback(onCutMenu, this); 409 menuItem->setMenuCallback(onCutMenu, this);
410 menuItem->setEnabledCallback(enableCutMenu); 410 menuItem->setEnabledCallback(enableCutMenu);
411 411
412 menuItem = LLUICtrlFactory::getMenuItemCallByName(this, "Copy"); 412 menuItem = getChild<LLMenuItemCallGL>("Copy");
413 menuItem->setMenuCallback(onCopyMenu, this); 413 menuItem->setMenuCallback(onCopyMenu, this);
414 menuItem->setEnabledCallback(enableCopyMenu); 414 menuItem->setEnabledCallback(enableCopyMenu);
415 415
416 menuItem = LLUICtrlFactory::getMenuItemCallByName(this, "Paste"); 416 menuItem = getChild<LLMenuItemCallGL>("Paste");
417 menuItem->setMenuCallback(onPasteMenu, this); 417 menuItem->setMenuCallback(onPasteMenu, this);
418 menuItem->setEnabledCallback(enablePasteMenu); 418 menuItem->setEnabledCallback(enablePasteMenu);
419 419
420 menuItem = LLUICtrlFactory::getMenuItemCallByName(this, "Select All"); 420 menuItem = getChild<LLMenuItemCallGL>("Select All");
421 menuItem->setMenuCallback(onSelectAllMenu, this); 421 menuItem->setMenuCallback(onSelectAllMenu, this);
422 menuItem->setEnabledCallback(enableSelectAllMenu); 422 menuItem->setEnabledCallback(enableSelectAllMenu);
423 423
424 menuItem = LLUICtrlFactory::getMenuItemCallByName(this, "Search / Replace..."); 424 menuItem = getChild<LLMenuItemCallGL>("Search / Replace...");
425 menuItem->setMenuCallback(onSearchMenu, this); 425 menuItem->setMenuCallback(onSearchMenu, this);
426 menuItem->setEnabledCallback(NULL); 426 menuItem->setEnabledCallback(NULL);
427 427
428 menuItem = LLUICtrlFactory::getMenuItemCallByName(this, "Help..."); 428 menuItem = getChild<LLMenuItemCallGL>("Help...");
429 menuItem->setMenuCallback(onBtnHelp, this); 429 menuItem->setMenuCallback(onBtnHelp, this);
430 menuItem->setEnabledCallback(NULL); 430 menuItem->setEnabledCallback(NULL);
431 431
432 menuItem = LLUICtrlFactory::getMenuItemCallByName(this, "LSL Wiki Help..."); 432 menuItem = getChild<LLMenuItemCallGL>("LSL Wiki Help...");
433 menuItem->setMenuCallback(onBtnDynamicHelp, this); 433 menuItem->setMenuCallback(onBtnDynamicHelp, this);
434 menuItem->setEnabledCallback(NULL); 434 menuItem->setEnabledCallback(NULL);
435} 435}
@@ -472,8 +472,8 @@ void LLScriptEdCore::updateDynamicHelp(BOOL immediate)
472 if (!help_floater) return; 472 if (!help_floater) return;
473 473
474 // update back and forward buttons 474 // update back and forward buttons
475 LLButton* fwd_button = LLUICtrlFactory::getButtonByName(help_floater, "fwd_btn"); 475 LLButton* fwd_button = help_floater->getChild<LLButton>("fwd_btn");
476 LLButton* back_button = LLUICtrlFactory::getButtonByName(help_floater, "back_btn"); 476 LLButton* back_button = help_floater->getChild<LLButton>("back_btn");
477 LLWebBrowserCtrl* browser = help_floater->getChild<LLWebBrowserCtrl>("lsl_guide_html"); 477 LLWebBrowserCtrl* browser = help_floater->getChild<LLWebBrowserCtrl>("lsl_guide_html");
478 back_button->setEnabled(browser->canNavigateBack()); 478 back_button->setEnabled(browser->canNavigateBack());
479 fwd_button->setEnabled(browser->canNavigateForward()); 479 fwd_button->setEnabled(browser->canNavigateForward());
@@ -536,7 +536,7 @@ void LLScriptEdCore::setHelpPage(const LLString& help_string)
536 LLWebBrowserCtrl* web_browser = help_floater->getChild<LLWebBrowserCtrl>("lsl_guide_html"); 536 LLWebBrowserCtrl* web_browser = help_floater->getChild<LLWebBrowserCtrl>("lsl_guide_html");
537 if (!web_browser) return; 537 if (!web_browser) return;
538 538
539 LLComboBox* history_combo = gUICtrlFactory->getComboBoxByName(help_floater, "history_combo"); 539 LLComboBox* history_combo = help_floater->getChild<LLComboBox>("history_combo");
540 if (!history_combo) return; 540 if (!history_combo) return;
541 541
542 LLUIString url_string = gSavedSettings.getString("LSLHelpURL"); 542 LLUIString url_string = gSavedSettings.getString("LSLHelpURL");
@@ -556,7 +556,7 @@ void LLScriptEdCore::addHelpItemToHistory(const LLString& help_string)
556 LLFloater* help_floater = mLiveHelpHandle.get(); 556 LLFloater* help_floater = mLiveHelpHandle.get();
557 if (!help_floater) return; 557 if (!help_floater) return;
558 558
559 LLComboBox* history_combo = gUICtrlFactory->getComboBoxByName(help_floater, "history_combo"); 559 LLComboBox* history_combo = help_floater->getChild<LLComboBox>("history_combo");
560 if (!history_combo) return; 560 if (!history_combo) return;
561 561
562 // separate history items from full item list 562 // separate history items from full item list
@@ -670,7 +670,7 @@ void LLScriptEdCore::onBtnDynamicHelp(void* userdata)
670 } 670 }
671 671
672 live_help_floater = new LLFloater("lsl_help"); 672 live_help_floater = new LLFloater("lsl_help");
673 gUICtrlFactory->buildFloater(live_help_floater, "floater_lsl_guide.xml"); 673 LLUICtrlFactory::getInstance()->buildFloater(live_help_floater, "floater_lsl_guide.xml");
674 ((LLFloater*)corep->getParent())->addDependentFloater(live_help_floater, TRUE); 674 ((LLFloater*)corep->getParent())->addDependentFloater(live_help_floater, TRUE);
675 live_help_floater->childSetCommitCallback("lock_check", onCheckLock, userdata); 675 live_help_floater->childSetCommitCallback("lock_check", onCheckLock, userdata);
676 live_help_floater->childSetValue("lock_check", gSavedSettings.getBOOL("ScriptHelpFollowsCursor")); 676 live_help_floater->childSetValue("lock_check", gSavedSettings.getBOOL("ScriptHelpFollowsCursor"));
@@ -681,7 +681,7 @@ void LLScriptEdCore::onBtnDynamicHelp(void* userdata)
681 LLWebBrowserCtrl* browser = live_help_floater->getChild<LLWebBrowserCtrl>("lsl_guide_html"); 681 LLWebBrowserCtrl* browser = live_help_floater->getChild<LLWebBrowserCtrl>("lsl_guide_html");
682 browser->setAlwaysRefresh(TRUE); 682 browser->setAlwaysRefresh(TRUE);
683 683
684 LLComboBox* help_combo = LLUICtrlFactory::getComboBoxByName(live_help_floater, "history_combo"); 684 LLComboBox* help_combo = live_help_floater->getChild<LLComboBox>("history_combo");
685 LLKeywordToken *token; 685 LLKeywordToken *token;
686 LLKeywords::keyword_iterator_t token_it; 686 LLKeywords::keyword_iterator_t token_it;
687 for (token_it = corep->mEditor->keywordsBegin(); 687 for (token_it = corep->mEditor->keywordsBegin();
@@ -789,10 +789,7 @@ void LLScriptEdCore::onBtnInsertFunction(LLUICtrl *ui, void* userdata)
789// static 789// static
790void LLScriptEdCore::doSave( void* userdata, BOOL close_after_save ) 790void LLScriptEdCore::doSave( void* userdata, BOOL close_after_save )
791{ 791{
792 if( gViewerStats ) 792 LLViewerStats::getInstance()->incStat( LLViewerStats::ST_LSL_SAVE_COUNT );
793 {
794 gViewerStats->incStat( LLViewerStats::ST_LSL_SAVE_COUNT );
795 }
796 793
797 LLScriptEdCore* self = (LLScriptEdCore*) userdata; 794 LLScriptEdCore* self = (LLScriptEdCore*) userdata;
798 795
@@ -1015,33 +1012,31 @@ void LLScriptEdCore::deleteBridges()
1015} 1012}
1016 1013
1017// virtual 1014// virtual
1018BOOL LLScriptEdCore::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent) 1015BOOL LLScriptEdCore::handleKeyHere(KEY key, MASK mask)
1019{ 1016{
1020 if(getVisible() && getEnabled()) 1017 bool just_control = MASK_CONTROL == (mask & MASK_MODIFIERS);
1021 {
1022 bool just_control = MASK_CONTROL == (mask & MASK_MODIFIERS);
1023 1018
1024 if(('S' == key) && just_control) 1019 if(('S' == key) && just_control)
1020 {
1021 if(mSaveCallback)
1025 { 1022 {
1026 if(mSaveCallback) 1023 // don't close after saving
1027 { 1024 mSaveCallback(mUserdata, FALSE);
1028 // don't close after saving
1029 mSaveCallback(mUserdata, FALSE);
1030 }
1031
1032 return TRUE;
1033 } 1025 }
1034 1026
1035 if(('F' == key) && just_control) 1027 return TRUE;
1028 }
1029
1030 if(('F' == key) && just_control)
1031 {
1032 if(mSearchReplaceCallback)
1036 { 1033 {
1037 if(mSearchReplaceCallback) 1034 mSearchReplaceCallback(mUserdata);
1038 {
1039 mSearchReplaceCallback(mUserdata);
1040 }
1041
1042 return TRUE;
1043 } 1035 }
1036
1037 return TRUE;
1044 } 1038 }
1039
1045 return FALSE; 1040 return FALSE;
1046} 1041}
1047 1042
@@ -1096,7 +1091,7 @@ LLPreviewLSL::LLPreviewLSL(const std::string& name, const LLRect& rect,
1096 factory_map["script panel"] = LLCallbackMap(LLPreviewLSL::createScriptEdPanel, this); 1091 factory_map["script panel"] = LLCallbackMap(LLPreviewLSL::createScriptEdPanel, this);
1097 1092
1098 1093
1099 gUICtrlFactory->buildFloater(this,"floater_script_preview.xml", &factory_map); 1094 LLUICtrlFactory::getInstance()->buildFloater(this,"floater_script_preview.xml", &factory_map);
1100 1095
1101 const LLInventoryItem* item = getItem(); 1096 const LLInventoryItem* item = getItem();
1102 1097
@@ -1316,7 +1311,7 @@ void LLPreviewLSL::uploadAssetLegacy(const std::string& filename,
1316 const LLUUID& item_id, 1311 const LLUUID& item_id,
1317 const LLTransactionID& tid) 1312 const LLTransactionID& tid)
1318{ 1313{
1319 LLLineEditor* descEditor = LLUICtrlFactory::getLineEditorByName(this, "desc"); 1314 LLLineEditor* descEditor = getChild<LLLineEditor>("desc");
1320 LLScriptSaveInfo* info = new LLScriptSaveInfo(item_id, 1315 LLScriptSaveInfo* info = new LLScriptSaveInfo(item_id,
1321 descEditor->getText(), 1316 descEditor->getText(),
1322 tid); 1317 tid);
@@ -1517,10 +1512,7 @@ void LLPreviewLSL::onLoadComplete( LLVFS *vfs, const LLUUID& asset_uuid, LLAsset
1517 } 1512 }
1518 else 1513 else
1519 { 1514 {
1520 if( gViewerStats ) 1515 LLViewerStats::getInstance()->incStat( LLViewerStats::ST_DOWNLOAD_FAILED );
1521 {
1522 gViewerStats->incStat( LLViewerStats::ST_DOWNLOAD_FAILED );
1523 }
1524 1516
1525 if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status || 1517 if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status ||
1526 LL_ERR_FILE_EMPTY == status) 1518 LL_ERR_FILE_EMPTY == status)
@@ -1627,7 +1619,7 @@ LLLiveLSLEditor::LLLiveLSLEditor(const std::string& name,
1627 LLCallbackMap::map_t factory_map; 1619 LLCallbackMap::map_t factory_map;
1628 factory_map["script ed panel"] = LLCallbackMap(LLLiveLSLEditor::createScriptEdPanel, this); 1620 factory_map["script ed panel"] = LLCallbackMap(LLLiveLSLEditor::createScriptEdPanel, this);
1629 1621
1630 gUICtrlFactory->buildFloater(this,"floater_live_lsleditor.xml", &factory_map); 1622 LLUICtrlFactory::getInstance()->buildFloater(this,"floater_live_lsleditor.xml", &factory_map);
1631 1623
1632 1624
1633 childSetCommitCallback("running", LLLiveLSLEditor::onRunningCheckboxClicked, this); 1625 childSetCommitCallback("running", LLLiveLSLEditor::onRunningCheckboxClicked, this);
@@ -1830,10 +1822,7 @@ void LLLiveLSLEditor::onLoadComplete(LLVFS *vfs, const LLUUID& asset_id,
1830 } 1822 }
1831 else 1823 else
1832 { 1824 {
1833 if( gViewerStats ) 1825 LLViewerStats::getInstance()->incStat( LLViewerStats::ST_DOWNLOAD_FAILED );
1834 {
1835 gViewerStats->incStat( LLViewerStats::ST_DOWNLOAD_FAILED );
1836 }
1837 1826
1838 if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status || 1827 if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status ||
1839 LL_ERR_FILE_EMPTY == status) 1828 LL_ERR_FILE_EMPTY == status)
@@ -1913,7 +1902,7 @@ void LLLiveLSLEditor::onRunningCheckboxClicked( LLUICtrl*, void* userdata )
1913{ 1902{
1914 LLLiveLSLEditor* self = (LLLiveLSLEditor*) userdata; 1903 LLLiveLSLEditor* self = (LLLiveLSLEditor*) userdata;
1915 LLViewerObject* object = gObjectList.findObject( self->mObjectID ); 1904 LLViewerObject* object = gObjectList.findObject( self->mObjectID );
1916 LLCheckBoxCtrl* runningCheckbox = LLUICtrlFactory::getCheckBoxByName(self, "running"); 1905 LLCheckBoxCtrl* runningCheckbox = self->getChild<LLCheckBoxCtrl>("running");
1917 BOOL running = runningCheckbox->get(); 1906 BOOL running = runningCheckbox->get();
1918 //self->mRunningCheckbox->get(); 1907 //self->mRunningCheckbox->get();
1919 if( object ) 1908 if( object )
@@ -1961,39 +1950,37 @@ void LLLiveLSLEditor::onReset(void *userdata)
1961 1950
1962void LLLiveLSLEditor::draw() 1951void LLLiveLSLEditor::draw()
1963{ 1952{
1964 if(getVisible()) 1953 LLViewerObject* object = gObjectList.findObject(mObjectID);
1954 LLCheckBoxCtrl* runningCheckbox = getChild<LLCheckBoxCtrl>( "running");
1955 if(object && mAskedForRunningInfo && mHaveRunningInfo)
1965 { 1956 {
1966 LLViewerObject* object = gObjectList.findObject(mObjectID); 1957 if(object->permAnyOwner())
1967 LLCheckBoxCtrl* runningCheckbox = LLUICtrlFactory::getCheckBoxByName(this, "running");
1968 if(object && mAskedForRunningInfo && mHaveRunningInfo)
1969 { 1958 {
1970 if(object->permAnyOwner()) 1959 runningCheckbox->setLabel(getString("script_running"));
1971 { 1960 runningCheckbox->setEnabled(TRUE);
1972 runningCheckbox->setLabel(getString("script_running"));
1973 runningCheckbox->setEnabled(TRUE);
1974 }
1975 else
1976 {
1977 runningCheckbox->setLabel(getString("public_objects_can_not_run"));
1978 runningCheckbox->setEnabled(FALSE);
1979 // *FIX: Set it to false so that the ui is correct for
1980 // a box that is released to public. It could be
1981 // incorrect after a release/claim cycle, but will be
1982 // correct after clicking on it.
1983 runningCheckbox->set(FALSE);
1984 }
1985 } 1961 }
1986 else if(!object) 1962 else
1987 { 1963 {
1988 // HACK: Display this information in the title bar. 1964 runningCheckbox->setLabel(getString("public_objects_can_not_run"));
1989 // Really ought to put in main window.
1990 setTitle("Script (object out of range)");
1991 runningCheckbox->setEnabled(FALSE); 1965 runningCheckbox->setEnabled(FALSE);
1992 // object may have fallen out of range. 1966 // *FIX: Set it to false so that the ui is correct for
1993 mHaveRunningInfo = FALSE; 1967 // a box that is released to public. It could be
1968 // incorrect after a release/claim cycle, but will be
1969 // correct after clicking on it.
1970 runningCheckbox->set(FALSE);
1994 } 1971 }
1995 LLFloater::draw();
1996 } 1972 }
1973 else if(!object)
1974 {
1975 // HACK: Display this information in the title bar.
1976 // Really ought to put in main window.
1977 setTitle("Script (object out of range)");
1978 runningCheckbox->setEnabled(FALSE);
1979 // object may have fallen out of range.
1980 mHaveRunningInfo = FALSE;
1981 }
1982
1983 LLFloater::draw();
1997} 1984}
1998 1985
1999 1986
@@ -2103,7 +2090,7 @@ void LLLiveLSLEditor::saveIfNeeded()
2103 std::string url = gAgent.getRegion()->getCapability("UpdateScriptTaskInventory"); 2090 std::string url = gAgent.getRegion()->getCapability("UpdateScriptTaskInventory");
2104 getWindow()->incBusyCount(); 2091 getWindow()->incBusyCount();
2105 mPendingUploads++; 2092 mPendingUploads++;
2106 BOOL is_running = LLUICtrlFactory::getCheckBoxByName(this, "running")->get(); 2093 BOOL is_running = getChild<LLCheckBoxCtrl>( "running")->get();
2107 if (!url.empty()) 2094 if (!url.empty())
2108 { 2095 {
2109 uploadAssetViaCaps(url, filename, mObjectID, 2096 uploadAssetViaCaps(url, filename, mObjectID,
@@ -2221,7 +2208,7 @@ void LLLiveLSLEditor::uploadAssetLegacy(const std::string& filename,
2221 LLFile::remove(dst_filename.c_str()); 2208 LLFile::remove(dst_filename.c_str());
2222 2209
2223 // If we successfully saved it, then we should be able to check/uncheck the running box! 2210 // If we successfully saved it, then we should be able to check/uncheck the running box!
2224 LLCheckBoxCtrl* runningCheckbox = LLUICtrlFactory::getCheckBoxByName(this, "running"); 2211 LLCheckBoxCtrl* runningCheckbox = getChild<LLCheckBoxCtrl>( "running");
2225 runningCheckbox->setLabel(getString("script_running")); 2212 runningCheckbox->setLabel(getString("script_running"));
2226 runningCheckbox->setEnabled(TRUE); 2213 runningCheckbox->setEnabled(TRUE);
2227} 2214}
@@ -2389,7 +2376,7 @@ void LLLiveLSLEditor::processScriptRunningReply(LLMessageSystem* msg, void**)
2389 instance->mHaveRunningInfo = TRUE; 2376 instance->mHaveRunningInfo = TRUE;
2390 BOOL running; 2377 BOOL running;
2391 msg->getBOOLFast(_PREHASH_Script, _PREHASH_Running, running); 2378 msg->getBOOLFast(_PREHASH_Script, _PREHASH_Running, running);
2392 LLCheckBoxCtrl* runningCheckbox = LLUICtrlFactory::getCheckBoxByName(instance, "running"); 2379 LLCheckBoxCtrl* runningCheckbox = instance->getChild<LLCheckBoxCtrl>("running");
2393 runningCheckbox->set(running); 2380 runningCheckbox->set(running);
2394 } 2381 }
2395} 2382}
diff --git a/linden/indra/newview/llpreviewscript.h b/linden/indra/newview/llpreviewscript.h
index 21b8844..e4c165f 100644
--- a/linden/indra/newview/llpreviewscript.h
+++ b/linden/indra/newview/llpreviewscript.h
@@ -52,12 +52,11 @@ class LLMenuBarGL;
52class LLFloaterScriptSearch; 52class LLFloaterScriptSearch;
53class LLKeywordToken; 53class LLKeywordToken;
54 54
55// Inner, implementation class. LLPreviewScript and LLLiveScriptEditor each own one of these. 55// Inner, implementation class. LLPreviewScript and LLLiveLSLEditor each own one of these.
56class LLScriptEdCore : public LLPanel 56class LLScriptEdCore : public LLPanel
57{ 57{
58 friend class LLPreviewScript; 58 friend class LLPreviewScript;
59 friend class LLPreviewLSL; 59 friend class LLPreviewLSL;
60 friend class LLLiveScriptEditor;
61 friend class LLLiveLSLEditor; 60 friend class LLLiveLSLEditor;
62 friend class LLFloaterScriptSearch; 61 friend class LLFloaterScriptSearch;
63 62
@@ -118,7 +117,7 @@ public:
118 117
119 void selectFirstError(); 118 void selectFirstError();
120 119
121 virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); 120 virtual BOOL handleKeyHere(KEY key, MASK mask);
122 121
123protected: 122protected:
124 void deleteBridges(); 123 void deleteBridges();
diff --git a/linden/indra/newview/llpreviewsound.cpp b/linden/indra/newview/llpreviewsound.cpp
index 212ceb9..9ba6fd5 100644
--- a/linden/indra/newview/llpreviewsound.cpp
+++ b/linden/indra/newview/llpreviewsound.cpp
@@ -41,7 +41,7 @@
41#include "llresmgr.h" 41#include "llresmgr.h"
42#include "llviewercontrol.h" 42#include "llviewercontrol.h"
43#include "llviewermessage.h" // send_guid_sound_trigger 43#include "llviewermessage.h" // send_guid_sound_trigger
44#include "llvieweruictrlfactory.h" 44#include "lluictrlfactory.h"
45 45
46extern LLAudioEngine* gAudiop; 46extern LLAudioEngine* gAudiop;
47extern LLAgent gAgent; 47extern LLAgent gAgent;
@@ -52,15 +52,15 @@ LLPreviewSound::LLPreviewSound(const std::string& name, const LLRect& rect, cons
52 LLPreview( name, rect, title, item_uuid, object_uuid) 52 LLPreview( name, rect, title, item_uuid, object_uuid)
53{ 53{
54 54
55 gUICtrlFactory->buildFloater(this,"floater_preview_sound.xml"); 55 LLUICtrlFactory::getInstance()->buildFloater(this,"floater_preview_sound.xml");
56 56
57 childSetAction("Sound play btn",&LLPreviewSound::playSound,this); 57 childSetAction("Sound play btn",&LLPreviewSound::playSound,this);
58 childSetAction("Sound audition btn",&LLPreviewSound::auditionSound,this); 58 childSetAction("Sound audition btn",&LLPreviewSound::auditionSound,this);
59 59
60 LLButton* button = LLUICtrlFactory::getButtonByName(this, "Sound play btn"); 60 LLButton* button = getChild<LLButton>("Sound play btn");
61 button->setSoundFlags(LLView::SILENT); 61 button->setSoundFlags(LLView::SILENT);
62 62
63 button = LLUICtrlFactory::getButtonByName(this, "Sound audition btn"); 63 button = getChild<LLButton>("Sound audition btn");
64 button->setSoundFlags(LLView::SILENT); 64 button->setSoundFlags(LLView::SILENT);
65 65
66 const LLInventoryItem* item = getItem(); 66 const LLInventoryItem* item = getItem();
diff --git a/linden/indra/newview/llpreviewtexture.cpp b/linden/indra/newview/llpreviewtexture.cpp
index 9f401f4..fe94fa4 100644
--- a/linden/indra/newview/llpreviewtexture.cpp
+++ b/linden/indra/newview/llpreviewtexture.cpp
@@ -45,7 +45,7 @@
45#include "llui.h" 45#include "llui.h"
46#include "llviewerimage.h" 46#include "llviewerimage.h"
47#include "llviewerimagelist.h" 47#include "llviewerimagelist.h"
48#include "llvieweruictrlfactory.h" 48#include "lluictrlfactory.h"
49#include "llviewerwindow.h" 49#include "llviewerwindow.h"
50#include "lllineeditor.h" 50#include "lllineeditor.h"
51 51
@@ -159,14 +159,14 @@ void LLPreviewTexture::init()
159 159
160 if (mCopyToInv) 160 if (mCopyToInv)
161 { 161 {
162 gUICtrlFactory->buildFloater(this,"floater_preview_embedded_texture.xml"); 162 LLUICtrlFactory::getInstance()->buildFloater(this,"floater_preview_embedded_texture.xml");
163 163
164 childSetAction("Copy To Inventory",LLPreview::onBtnCopyToInv,this); 164 childSetAction("Copy To Inventory",LLPreview::onBtnCopyToInv,this);
165 } 165 }
166 166
167 else if (mShowKeepDiscard) 167 else if (mShowKeepDiscard)
168 { 168 {
169 gUICtrlFactory->buildFloater(this,"floater_preview_texture_keep_discard.xml"); 169 LLUICtrlFactory::getInstance()->buildFloater(this,"floater_preview_texture_keep_discard.xml");
170 170
171 childSetAction("Keep",onKeepBtn,this); 171 childSetAction("Keep",onKeepBtn,this);
172 childSetAction("Discard",onDiscardBtn,this); 172 childSetAction("Discard",onDiscardBtn,this);
@@ -174,7 +174,7 @@ void LLPreviewTexture::init()
174 174
175 else 175 else
176 { 176 {
177 gUICtrlFactory->buildFloater(this,"floater_preview_texture.xml"); 177 LLUICtrlFactory::getInstance()->buildFloater(this,"floater_preview_texture.xml");
178 } 178 }
179 179
180 180
@@ -193,100 +193,97 @@ void LLPreviewTexture::init()
193 193
194void LLPreviewTexture::draw() 194void LLPreviewTexture::draw()
195{ 195{
196 if( getVisible() ) 196 updateDimensions();
197
198 LLPreview::draw();
199
200 if (!isMinimized())
197 { 201 {
198 updateAspectRatio(); 202 LLGLSUIDefault gls_ui;
203 LLGLSNoTexture gls_notex;
204
205 const LLRect& border = mClientRect;
206 LLRect interior = mClientRect;
207 interior.stretch( -PREVIEW_BORDER_WIDTH );
199 208
200 LLPreview::draw(); 209 // ...border
210 gl_rect_2d( border, LLColor4(0.f, 0.f, 0.f, 1.f));
211 gl_rect_2d_checkerboard( interior );
201 212
202 if (!isMinimized()) 213 if ( mImage.notNull() )
203 { 214 {
204 LLGLSUIDefault gls_ui; 215 // Draw the texture
205 LLGLSNoTexture gls_notex; 216 glColor3f( 1.f, 1.f, 1.f );
206 217 gl_draw_scaled_image(interior.mLeft,
207 const LLRect& border = mClientRect; 218 interior.mBottom,
208 LLRect interior = mClientRect; 219 interior.getWidth(),
209 interior.stretch( -PREVIEW_BORDER_WIDTH ); 220 interior.getHeight(),
210 221 mImage);
211 // ...border 222
212 gl_rect_2d( border, LLColor4(0.f, 0.f, 0.f, 1.f)); 223 // Pump the texture priority
213 gl_rect_2d_checkerboard( interior ); 224 F32 pixel_area = mLoadingFullImage ? (F32)MAX_IMAGE_AREA : (F32)(interior.getWidth() * interior.getHeight() );
214 225 mImage->addTextureStats( pixel_area );
215 if ( mImage.notNull() ) 226
227 // Don't bother decoding more than we can display, unless
228 // we're loading the full image.
229 if (!mLoadingFullImage)
216 { 230 {
217 // Draw the texture 231 S32 int_width = interior.getWidth();
218 glColor3f( 1.f, 1.f, 1.f ); 232 S32 int_height = interior.getHeight();
219 gl_draw_scaled_image(interior.mLeft, 233 mImage->setKnownDrawSize(int_width, int_height);
220 interior.mBottom, 234 }
221 interior.getWidth(), 235 else
222 interior.getHeight(), 236 {
223 mImage); 237 // Don't use this feature
224 238 mImage->setKnownDrawSize(0, 0);
225 // Pump the texture priority 239 }
226 F32 pixel_area = mLoadingFullImage ? (F32)MAX_IMAGE_AREA : (F32)(interior.getWidth() * interior.getHeight() );
227 mImage->addTextureStats( pixel_area );
228
229 // Don't bother decoding more than we can display, unless
230 // we're loading the full image.
231 if (!mLoadingFullImage)
232 {
233 S32 int_width = interior.getWidth();
234 S32 int_height = interior.getHeight();
235 mImage->setKnownDrawSize(int_width, int_height);
236 }
237 else
238 {
239 // Don't use this feature
240 mImage->setKnownDrawSize(0, 0);
241 }
242 240
243 if( mLoadingFullImage ) 241 if( mLoadingFullImage )
242 {
243 LLFontGL::sSansSerif->renderUTF8("Receiving:", 0,
244 interior.mLeft + 4,
245 interior.mBottom + 4,
246 LLColor4::white, LLFontGL::LEFT, LLFontGL::BOTTOM,
247 LLFontGL::DROP_SHADOW);
248
249 F32 data_progress = mImage->mDownloadProgress;
250
251 // Draw the progress bar.
252 const S32 BAR_HEIGHT = 12;
253 const S32 BAR_LEFT_PAD = 80;
254 S32 left = interior.mLeft + 4 + BAR_LEFT_PAD;
255 S32 bar_width = getRect().getWidth() - left - RESIZE_HANDLE_WIDTH - 2;
256 S32 top = interior.mBottom + 4 + BAR_HEIGHT;
257 S32 right = left + bar_width;
258 S32 bottom = top - BAR_HEIGHT;
259
260 LLColor4 background_color(0.f, 0.f, 0.f, 0.75f);
261 LLColor4 decoded_color(0.f, 1.f, 0.f, 1.0f);
262 LLColor4 downloaded_color(0.f, 0.5f, 0.f, 1.0f);
263
264 gl_rect_2d(left, top, right, bottom, background_color);
265
266 if (data_progress > 0.0f)
244 { 267 {
245 LLFontGL::sSansSerif->renderUTF8("Receiving:", 0, 268 // Downloaded bytes
246 interior.mLeft + 4, 269 right = left + llfloor(data_progress * (F32)bar_width);
247 interior.mBottom + 4, 270 if (right > left)
248 LLColor4::white, LLFontGL::LEFT, LLFontGL::BOTTOM,
249 LLFontGL::DROP_SHADOW);
250
251 F32 data_progress = mImage->mDownloadProgress;
252
253 // Draw the progress bar.
254 const S32 BAR_HEIGHT = 12;
255 const S32 BAR_LEFT_PAD = 80;
256 S32 left = interior.mLeft + 4 + BAR_LEFT_PAD;
257 S32 bar_width = getRect().getWidth() - left - RESIZE_HANDLE_WIDTH - 2;
258 S32 top = interior.mBottom + 4 + BAR_HEIGHT;
259 S32 right = left + bar_width;
260 S32 bottom = top - BAR_HEIGHT;
261
262 LLColor4 background_color(0.f, 0.f, 0.f, 0.75f);
263 LLColor4 decoded_color(0.f, 1.f, 0.f, 1.0f);
264 LLColor4 downloaded_color(0.f, 0.5f, 0.f, 1.0f);
265
266 gl_rect_2d(left, top, right, bottom, background_color);
267
268 if (data_progress > 0.0f)
269 { 271 {
270 // Downloaded bytes 272 gl_rect_2d(left, top, right, bottom, downloaded_color);
271 right = left + llfloor(data_progress * (F32)bar_width);
272 if (right > left)
273 {
274 gl_rect_2d(left, top, right, bottom, downloaded_color);
275 }
276 } 273 }
277 } 274 }
278 else
279 if( !mSavedFileTimer.hasExpired() )
280 {
281 LLFontGL::sSansSerif->renderUTF8("File Saved", 0,
282 interior.mLeft + 4,
283 interior.mBottom + 4,
284 LLColor4::white, LLFontGL::LEFT, LLFontGL::BOTTOM,
285 LLFontGL::DROP_SHADOW);
286 }
287 } 275 }
288 } 276 else
289 } 277 if( !mSavedFileTimer.hasExpired() )
278 {
279 LLFontGL::sSansSerif->renderUTF8("File Saved", 0,
280 interior.mLeft + 4,
281 interior.mBottom + 4,
282 LLColor4::white, LLFontGL::LEFT, LLFontGL::BOTTOM,
283 LLFontGL::DROP_SHADOW);
284 }
285 }
286 }
290} 287}
291 288
292 289
@@ -380,7 +377,7 @@ void LLPreviewTexture::onFileLoadedForSave(BOOL success,
380 377
381// It takes a while until we get height and width information. 378// It takes a while until we get height and width information.
382// When we receive it, reshape the window accordingly. 379// When we receive it, reshape the window accordingly.
383void LLPreviewTexture::updateAspectRatio() 380void LLPreviewTexture::updateDimensions()
384{ 381{
385 if (!mImage) return; 382 if (!mImage) return;
386 383
@@ -389,24 +386,21 @@ void LLPreviewTexture::updateAspectRatio()
389 // Attempt to make the image 1:1 on screen. 386 // Attempt to make the image 1:1 on screen.
390 // If that fails, cut width by half. 387 // If that fails, cut width by half.
391 S32 client_width = image_width; 388 S32 client_width = image_width;
389 S32 client_height = image_height;
392 S32 horiz_pad = 2 * (LLPANEL_BORDER_WIDTH + PREVIEW_PAD) + PREVIEW_RESIZE_HANDLE_SIZE; 390 S32 horiz_pad = 2 * (LLPANEL_BORDER_WIDTH + PREVIEW_PAD) + PREVIEW_RESIZE_HANDLE_SIZE;
393 S32 vert_pad = PREVIEW_HEADER_SIZE + 2 * CLIENT_RECT_VPAD + LLPANEL_BORDER_WIDTH; 391 S32 vert_pad = PREVIEW_HEADER_SIZE + 2 * CLIENT_RECT_VPAD + LLPANEL_BORDER_WIDTH;
394 S32 screen_width = gViewerWindow->getWindowWidth(); 392 S32 max_client_width = gViewerWindow->getWindowWidth() - horiz_pad;
395 S32 max_client_width = screen_width - horiz_pad;
396 S32 max_client_height = gViewerWindow->getWindowHeight() - vert_pad; 393 S32 max_client_height = gViewerWindow->getWindowHeight() - vert_pad;
397 F32 inv_aspect_ratio = (F32) image_height / (F32) image_width;
398 394
399 while ((client_width > max_client_width) || ( llround(client_width * inv_aspect_ratio) > max_client_height ) ) 395 while ((client_width > max_client_width) ||
396 (client_height > max_client_height ) )
400 { 397 {
401 client_width /= 2; 398 client_width /= 2;
399 client_height /= 2;
402 } 400 }
403 401
404 S32 view_width = client_width + horiz_pad; 402 S32 view_width = client_width + horiz_pad;
405
406 // Adjust the height based on the width computed above.
407 S32 client_height = llround(client_width * inv_aspect_ratio);
408 S32 view_height = client_height + vert_pad; 403 S32 view_height = client_height + vert_pad;
409
410 404
411 // set text on dimensions display (should be moved out of here and into a callback of some sort) 405 // set text on dimensions display (should be moved out of here and into a callback of some sort)
412 childSetTextArg("dimensions", "[WIDTH]", llformat("%d", mImage->mFullWidth)); 406 childSetTextArg("dimensions", "[WIDTH]", llformat("%d", mImage->mFullWidth));
@@ -465,26 +459,20 @@ void LLPreviewTexture::updateAspectRatio()
465 else 459 else
466 { 460 {
467 client_width = getRect().getWidth() - horiz_pad; 461 client_width = getRect().getWidth() - horiz_pad;
468 client_height = llround(client_width * inv_aspect_ratio); 462 client_height = getRect().getHeight() - vert_pad;
469 } 463 }
470 464
465 S32 max_height = getRect().getHeight() - PREVIEW_BORDER - button_height
466 - CLIENT_RECT_VPAD - info_height - CLIENT_RECT_VPAD - PREVIEW_HEADER_SIZE;
467 S32 max_width = getRect().getWidth() - horiz_pad;
471 468
472 S32 max_height = getRect().getHeight() - PREVIEW_BORDER - button_height 469 client_height = llclamp(client_height, 1, max_height);
473 - CLIENT_RECT_VPAD - info_height - CLIENT_RECT_VPAD - PREVIEW_HEADER_SIZE; 470 client_width = llclamp(client_width, 1, max_width);
474 max_height = llmax(max_height, 1);
475
476 if (client_height > max_height)
477 {
478 F32 aspect_ratio = (F32) image_width / (F32) image_height;
479 client_height = max_height;
480 client_width = llround(client_height * aspect_ratio);
481 }
482 471
483 LLRect window_rect(0, getRect().getHeight(), getRect().getWidth(), 0); 472 LLRect window_rect(0, getRect().getHeight(), getRect().getWidth(), 0);
484 window_rect.mTop -= (PREVIEW_HEADER_SIZE + CLIENT_RECT_VPAD); 473 window_rect.mTop -= (PREVIEW_HEADER_SIZE + CLIENT_RECT_VPAD);
485 window_rect.mBottom += PREVIEW_BORDER + button_height + CLIENT_RECT_VPAD + info_height + CLIENT_RECT_VPAD; 474 window_rect.mBottom += PREVIEW_BORDER + button_height + CLIENT_RECT_VPAD + info_height + CLIENT_RECT_VPAD;
486 475
487 // try to keep aspect ratio when hosted, as hosting view can resize without user input
488 mClientRect.setLeftTopAndSize(window_rect.getCenterX() - (client_width / 2), window_rect.mTop, client_width, client_height); 476 mClientRect.setLeftTopAndSize(window_rect.getCenterX() - (client_width / 2), window_rect.mTop, client_width, client_height);
489} 477}
490 478
diff --git a/linden/indra/newview/llpreviewtexture.h b/linden/indra/newview/llpreviewtexture.h
index d1e9bb0..5a649da 100644
--- a/linden/indra/newview/llpreviewtexture.h
+++ b/linden/indra/newview/llpreviewtexture.h
@@ -78,11 +78,11 @@ public:
78 78
79protected: 79protected:
80 void init(); 80 void init();
81 void updateAspectRatio();
82 81
83 virtual const char *getTitleName() const { return "Texture"; } 82 virtual const char *getTitleName() const { return "Texture"; }
84 83
85protected: 84private:
85 void updateDimensions();
86 LLUUID mImageID; 86 LLUUID mImageID;
87 LLPointer<LLViewerImage> mImage; 87 LLPointer<LLViewerImage> mImage;
88 BOOL mLoadingFullImage; 88 BOOL mLoadingFullImage;
diff --git a/linden/indra/newview/llprogressview.cpp b/linden/indra/newview/llprogressview.cpp
index 10b3115..b4f0704 100644
--- a/linden/indra/newview/llprogressview.cpp
+++ b/linden/indra/newview/llprogressview.cpp
@@ -51,6 +51,7 @@
51#include "llviewerimagelist.h" 51#include "llviewerimagelist.h"
52#include "llviewerwindow.h" 52#include "llviewerwindow.h"
53#include "llappviewer.h" 53#include "llappviewer.h"
54#include "llweb.h"
54 55
55LLProgressView* LLProgressView::sInstance = NULL; 56LLProgressView* LLProgressView::sInstance = NULL;
56 57
@@ -66,11 +67,10 @@ const S32 ANIMATION_FRAMES = 1; //13;
66 67
67// XUI:translate 68// XUI:translate
68LLProgressView::LLProgressView(const std::string& name, const LLRect &rect) 69LLProgressView::LLProgressView(const std::string& name, const LLRect &rect)
69: LLPanel(name, rect, FALSE) 70: LLPanel(name, rect, FALSE),
71 mPercentDone( 0.f ),
72 mMouseDownInActiveArea( false )
70{ 73{
71 mPercentDone = 0.f;
72 mDrawBackground = TRUE;
73
74 const S32 CANCEL_BTN_WIDTH = 70; 74 const S32 CANCEL_BTN_WIDTH = 70;
75 const S32 CANCEL_BTN_OFFSET = 16; 75 const S32 CANCEL_BTN_OFFSET = 16;
76 LLRect r; 76 LLRect r;
@@ -89,6 +89,8 @@ LLProgressView::LLProgressView(const std::string& name, const LLRect &rect)
89 mFadeTimer.stop(); 89 mFadeTimer.stop();
90 setVisible(FALSE); 90 setVisible(FALSE);
91 91
92 mOutlineRect.set( 0, 0, 0, 0 );
93
92 sInstance = this; 94 sInstance = this;
93} 95}
94 96
@@ -100,14 +102,44 @@ LLProgressView::~LLProgressView()
100 sInstance = NULL; 102 sInstance = NULL;
101} 103}
102 104
103EWidgetType LLProgressView::getWidgetType() const 105BOOL LLProgressView::handleMouseDown(S32 x, S32 y, MASK mask)
104{ 106{
105 return WIDGET_TYPE_PROGRESS_VIEW; 107 if ( mOutlineRect.pointInRect( x, y ) )
108 {
109 mMouseDownInActiveArea = TRUE;
110 return TRUE;
111 };
112
113 return LLPanel::handleMouseDown(x, y, mask);
106} 114}
107 115
108LLString LLProgressView::getWidgetTag() const 116BOOL LLProgressView::handleMouseUp(S32 x, S32 y, MASK mask)
109{ 117{
110 return LL_PROGRESS_VIEW_TAG; 118 if ( mOutlineRect.pointInRect( x, y ) )
119 {
120 if ( mMouseDownInActiveArea )
121 {
122 if ( ! mMessage.empty() )
123 {
124 std::string url_to_open( "" );
125
126 size_t start_pos = mMessage.find( "http://" );
127 if ( start_pos != std::string::npos )
128 {
129 size_t end_pos = mMessage.find_first_of( " \n\r\t", start_pos );
130 if ( end_pos != std::string::npos )
131 url_to_open = mMessage.substr( start_pos, end_pos - start_pos );
132 else
133 url_to_open = mMessage.substr( start_pos );
134
135 LLWeb::loadURLExternal( url_to_open );
136 };
137 };
138 return TRUE;
139 };
140 };
141
142 return LLPanel::handleMouseUp(x, y, mask);
111} 143}
112 144
113BOOL LLProgressView::handleHover(S32 x, S32 y, MASK mask) 145BOOL LLProgressView::handleHover(S32 x, S32 y, MASK mask)
@@ -115,24 +147,27 @@ BOOL LLProgressView::handleHover(S32 x, S32 y, MASK mask)
115 if( childrenHandleHover( x, y, mask ) == NULL ) 147 if( childrenHandleHover( x, y, mask ) == NULL )
116 { 148 {
117 lldebugst(LLERR_USER_INPUT) << "hover handled by LLProgressView" << llendl; 149 lldebugst(LLERR_USER_INPUT) << "hover handled by LLProgressView" << llendl;
118 gViewerWindow->setCursor(UI_CURSOR_WAIT); 150 if ( mOutlineRect.pointInRect( x, y ) )
151 {
152 gViewerWindow->setCursor(UI_CURSOR_ARROW);
153 }
154 else
155 {
156 gViewerWindow->setCursor(UI_CURSOR_WAIT);
157 }
119 } 158 }
120 return TRUE; 159 return TRUE;
121} 160}
122 161
123 162
124BOOL LLProgressView::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent) 163BOOL LLProgressView::handleKeyHere(KEY key, MASK mask)
125{ 164{
126 if( getVisible() ) 165 // Suck up all keystokes except CTRL-Q.
166 if( ('Q' == key) && (MASK_CONTROL == mask) )
127 { 167 {
128 // Suck up all keystokes except CTRL-Q. 168 LLAppViewer::instance()->userQuit();
129 if( ('Q' == key) && (MASK_CONTROL == mask) )
130 {
131 LLAppViewer::instance()->userQuit();
132 }
133 return TRUE;
134 } 169 }
135 return FALSE; 170 return TRUE;
136} 171}
137 172
138void LLProgressView::setVisible(BOOL visible) 173void LLProgressView::setVisible(BOOL visible)
@@ -144,6 +179,7 @@ void LLProgressView::setVisible(BOOL visible)
144 else if (!getVisible() && visible) 179 else if (!getVisible() && visible)
145 { 180 {
146 gFocusMgr.setTopCtrl(this); 181 gFocusMgr.setTopCtrl(this);
182 setFocus(TRUE);
147 mFadeTimer.stop(); 183 mFadeTimer.stop();
148 mProgressTimer.start(); 184 mProgressTimer.start();
149 LLView::setVisible(visible); 185 LLView::setVisible(visible);
@@ -169,39 +205,37 @@ void LLProgressView::draw()
169 } 205 }
170 206
171 // Paint bitmap if we've got one 207 // Paint bitmap if we've got one
172 if (mDrawBackground) 208 glPushMatrix();
209 if (gStartImageGL)
173 { 210 {
174 glPushMatrix(); 211 LLGLSUIDefault gls_ui;
175 if (gStartImageGL) 212 LLViewerImage::bindTexture(gStartImageGL);
213 gGL.color4f(1.f, 1.f, 1.f, mFadeTimer.getStarted() ? clamp_rescale(mFadeTimer.getElapsedTimeF32(), 0.f, FADE_IN_TIME, 1.f, 0.f) : 1.f);
214 F32 image_aspect = (F32)gStartImageWidth / (F32)gStartImageHeight;
215 F32 view_aspect = (F32)width / (F32)height;
216 // stretch image to maintain aspect ratio
217 if (image_aspect > view_aspect)
176 { 218 {
177 LLGLSUIDefault gls_ui; 219 glTranslatef(-0.5f * (image_aspect / view_aspect - 1.f) * width, 0.f, 0.f);
178 LLViewerImage::bindTexture(gStartImageGL); 220 glScalef(image_aspect / view_aspect, 1.f, 1.f);
179 gGL.color4f(1.f, 1.f, 1.f, mFadeTimer.getStarted() ? clamp_rescale(mFadeTimer.getElapsedTimeF32(), 0.f, FADE_IN_TIME, 1.f, 0.f) : 1.f);
180 F32 image_aspect = (F32)gStartImageWidth / (F32)gStartImageHeight;
181 F32 view_aspect = (F32)width / (F32)height;
182 // stretch image to maintain aspect ratio
183 if (image_aspect > view_aspect)
184 {
185 glTranslatef(-0.5f * (image_aspect / view_aspect - 1.f) * width, 0.f, 0.f);
186 glScalef(image_aspect / view_aspect, 1.f, 1.f);
187 }
188 else
189 {
190 glTranslatef(0.f, -0.5f * (view_aspect / image_aspect - 1.f) * height, 0.f);
191 glScalef(1.f, view_aspect / image_aspect, 1.f);
192 }
193 gl_rect_2d_simple_tex( getRect().getWidth(), getRect().getHeight() );
194 gStartImageGL->unbindTexture(0, GL_TEXTURE_2D);
195 } 221 }
196 else 222 else
197 { 223 {
198 LLGLSNoTexture gls_no_texture; 224 glTranslatef(0.f, -0.5f * (view_aspect / image_aspect - 1.f) * height, 0.f);
199 gGL.color4f(0.f, 0.f, 0.f, 1.f); 225 glScalef(1.f, view_aspect / image_aspect, 1.f);
200 gl_rect_2d(getRect());
201 } 226 }
202 glPopMatrix(); 227 gl_rect_2d_simple_tex( getRect().getWidth(), getRect().getHeight() );
228 gStartImageGL->unbindTexture(0, GL_TEXTURE_2D);
203 } 229 }
230 else
231 {
232 LLGLSNoTexture gls_no_texture;
233 gGL.color4f(0.f, 0.f, 0.f, 1.f);
234 gl_rect_2d(getRect());
235 }
236 glPopMatrix();
204 237
238 // Handle fade-in animation
205 if (mFadeTimer.getStarted()) 239 if (mFadeTimer.getStarted())
206 { 240 {
207 LLView::draw(); 241 LLView::draw();
@@ -220,63 +254,96 @@ void LLProgressView::draw()
220 S32 line_two_y = line_one_y - LINE_SPACING; 254 S32 line_two_y = line_one_y - LINE_SPACING;
221 const LLFontGL* font = LLFontGL::sSansSerif; 255 const LLFontGL* font = LLFontGL::sSansSerif;
222 256
223 LLViewerImage* shadow_imagep = gImageList.getImage(LLUUID(gViewerArt.getString("rounded_square_soft.tga")), MIPMAP_FALSE, TRUE); 257 LLUIImagePtr shadow_imagep = LLUI::getUIImage("rounded_square_soft.tga");
224 LLViewerImage* bar_imagep = gImageList.getImage(LLUUID(gViewerArt.getString("rounded_square.tga")), MIPMAP_FALSE, TRUE); 258 LLUIImagePtr bar_fg_imagep = LLUI::getUIImage("progressbar_fill.tga");
225 259 LLUIImagePtr bar_bg_imagep = LLUI::getUIImage("progressbar_track.tga");
226 //LLColor4 background_color = gColors.getColor("DefaultShadowLight"); 260 LLUIImagePtr bar_imagep = LLUI::getUIImage("rounded_square.tga");
227 LLColor4 background_color = LLColor4(0.3254f, 0.4f, 0.5058f, 1.0f); 261
262 LLColor4 background_color = gColors.getColor("LoginProgressBarBgColor");
228 263
229 F32 alpha = 0.5f + 0.5f*0.5f*(1.f + (F32)sin(3.f*timer.getElapsedTimeF32())); 264 F32 alpha = 0.5f + 0.5f*0.5f*(1.f + (F32)sin(3.f*timer.getElapsedTimeF32()));
230 // background_color.mV[3] = background_color.mV[3]*alpha; 265 // background_color.mV[3] = background_color.mV[3]*alpha;
231 266
232 LLString top_line = LLAppViewer::instance()->getSecondLifeTitle(); 267 LLString top_line = LLAppViewer::instance()->getSecondLifeTitle();
233 268
269 S32 bar_bottom = line_two_y - 30;
270 S32 bar_height = 18;
271 S32 bar_width = getRect().getWidth() * 2 / 3;
272 S32 bar_left = (getRect().getWidth() / 2) - (bar_width / 2);
273
274 // translucent outline box
275 S32 background_box_left = ( ( ( getRect().getWidth() / 2 ) - ( bar_width / 2 ) ) / 4 ) * 3;
276 S32 background_box_top = ( getRect().getHeight() / 2 ) + LINE_SPACING * 5;
277 S32 background_box_right = getRect().getWidth() - background_box_left;
278 S32 background_box_bottom = ( getRect().getHeight() / 2 ) - LINE_SPACING * 5;
279 S32 background_box_width = background_box_right - background_box_left + 1;
280 S32 background_box_height = background_box_top - background_box_bottom + 1;
281
282// shadow_imagep->draw( background_box_left + 2,
283// background_box_bottom - 2,
284// background_box_width,
285// background_box_height,
286// gColors.getColor( "LoginProgressBoxShadowColor" ) );
287// bar_outline_imagep->draw( background_box_left,
288// background_box_bottom,
289// background_box_width,
290// background_box_height,
291// gColors.getColor("LoginProgressBoxBorderColor") );
292
293 bar_imagep->draw( background_box_left + 1,
294 background_box_bottom + 1,
295 background_box_width - 2,
296 background_box_height - 2,
297 gColors.getColor("LoginProgressBoxCenterColor") );
298
299 // we'll need this later for catching a click if it looks like it contains a link
300 if ( mMessage.find( "http://" ) != std::string::npos )
301 mOutlineRect.set( background_box_left, background_box_top, background_box_right, background_box_bottom );
302 else
303 mOutlineRect.set( 0, 0, 0, 0 );
304
305 // draw loading bar
234 font->renderUTF8(top_line, 0, 306 font->renderUTF8(top_line, 0,
235 line_x, line_one_y, 307 line_x, line_one_y,
236 LLColor4::white, 308 //LLColor4::white,
309 gColors.getColor("LoginProgressBoxTextColor"),
237 LLFontGL::HCENTER, LLFontGL::BASELINE, 310 LLFontGL::HCENTER, LLFontGL::BASELINE,
238 LLFontGL::DROP_SHADOW); 311 LLFontGL::DROP_SHADOW);
239 font->renderUTF8(mText, 0, 312 font->renderUTF8(mText, 0,
240 line_x, line_two_y, 313 line_x, line_two_y,
241 LLColor4::white, 314 //LLColor4::white,
315 gColors.getColor("LoginProgressBoxTextColor"),
242 LLFontGL::HCENTER, LLFontGL::BASELINE, 316 LLFontGL::HCENTER, LLFontGL::BASELINE,
243 LLFontGL::DROP_SHADOW); 317 LLFontGL::DROP_SHADOW);
244 318
245 S32 bar_bottom = line_two_y - 30; 319// shadow_imagep->draw(
246 S32 bar_height = 18; 320// bar_left + 2,
247 S32 bar_width = getRect().getWidth() * 2 / 3; 321// bar_bottom - 2,
248 S32 bar_left = (getRect().getWidth() / 2) - (bar_width / 2); 322// bar_width,
249 323// bar_height,
250 gl_draw_scaled_image_with_border( 324// gColors.getColor("LoginProgressBoxShadowColor"));
325
326// bar_imagep->draw(
327// bar_left,
328// bar_bottom,
329// bar_width,
330// bar_height,
331// LLColor4(0.7f, 0.7f, 0.8f, 1.0f));
332
333 bar_bg_imagep->draw(
251 bar_left + 2, 334 bar_left + 2,
252 bar_bottom - 2, 335 bar_bottom + 2,
253 16, 336 bar_width - 4,
254 16, 337 bar_height - 4,
255 bar_width,
256 bar_height,
257 shadow_imagep,
258 gColors.getColor("ColorDropShadow"));
259
260 gl_draw_scaled_image_with_border(
261 bar_left,
262 bar_bottom,
263 16,
264 16,
265 bar_width,
266 bar_height,
267 bar_imagep,
268 LLColor4(0.7f, 0.7f, 0.8f, 1.0f));
269
270 gl_draw_scaled_image_with_border(bar_left + 2, bar_bottom + 2, 16, 16,
271 bar_width - 4, bar_height - 4,
272 bar_imagep,
273 background_color); 338 background_color);
274 339
275 LLColor4 bar_color = LLColor4(0.5764f, 0.6627f, 0.8352f, 1.0f); 340 LLColor4 bar_color = gColors.getColor("LoginProgressBarFgColor");
276 bar_color.mV[3] = alpha; 341 bar_color.mV[3] = alpha;
277 gl_draw_scaled_image_with_border(bar_left + 2, bar_bottom + 2, 16, 16, 342 bar_fg_imagep->draw(
278 llround((bar_width - 4) * (mPercentDone / 100.f)), bar_height - 4, 343 bar_left + 2,
279 bar_imagep, 344 bar_bottom + 2,
345 llround((bar_width - 4) * (mPercentDone / 100.f)),
346 bar_height - 4,
280 bar_color); 347 bar_color);
281 348
282 S32 line_three_y = line_two_y - LINE_SPACING * 3; 349 S32 line_three_y = line_two_y - LINE_SPACING * 3;
@@ -284,6 +351,7 @@ void LLProgressView::draw()
284 // draw the message if there is one 351 // draw the message if there is one
285 if(!mMessage.empty()) 352 if(!mMessage.empty())
286 { 353 {
354 LLColor4 text_message_color = gColors.getColor("LoginProgressBoxTextColor");
287 LLWString wmessage = utf8str_to_wstring(mMessage); 355 LLWString wmessage = utf8str_to_wstring(mMessage);
288 const F32 MAX_PIXELS = 640.0f; 356 const F32 MAX_PIXELS = 640.0f;
289 S32 chars_left = wmessage.length(); 357 S32 chars_left = wmessage.length();
@@ -298,7 +366,8 @@ void LLProgressView::draw()
298 LLWString wbuffer = wmessage.substr(msgidx, chars_this_time); 366 LLWString wbuffer = wmessage.substr(msgidx, chars_this_time);
299 font->render(wbuffer, 0, 367 font->render(wbuffer, 0,
300 (F32)line_x, (F32)line_three_y, 368 (F32)line_x, (F32)line_three_y,
301 LLColor4::white, 369 //LLColor4::white,
370 gColors.getColor("LoginProgressBoxTextColor"),
302 LLFontGL::HCENTER, LLFontGL::BASELINE, 371 LLFontGL::HCENTER, LLFontGL::BASELINE,
303 LLFontGL::DROP_SHADOW); 372 LLFontGL::DROP_SHADOW);
304 msgidx += chars_this_time; 373 msgidx += chars_this_time;
diff --git a/linden/indra/newview/llprogressview.h b/linden/indra/newview/llprogressview.h
index 2573bd1..853bab7 100644
--- a/linden/indra/newview/llprogressview.h
+++ b/linden/indra/newview/llprogressview.h
@@ -44,12 +44,12 @@ public:
44 LLProgressView(const std::string& name, const LLRect& rect); 44 LLProgressView(const std::string& name, const LLRect& rect);
45 virtual ~LLProgressView(); 45 virtual ~LLProgressView();
46 46
47 virtual EWidgetType getWidgetType() const;
48 virtual LLString getWidgetTag() const;
49
50 /*virtual*/ void draw(); 47 /*virtual*/ void draw();
48 /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask);
49 /*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask);
50
51 /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask); 51 /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask);
52 /*virtual*/ BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); 52 /*virtual*/ BOOL handleKeyHere(KEY key, MASK mask);
53 /*virtual*/ void setVisible(BOOL visible); 53 /*virtual*/ void setVisible(BOOL visible);
54 54
55 void setText(const LLString& text); 55 void setText(const LLString& text);
@@ -63,13 +63,14 @@ public:
63 static void onCancelButtonClicked( void* ); 63 static void onCancelButtonClicked( void* );
64 64
65protected: 65protected:
66 BOOL mDrawBackground;
67 F32 mPercentDone; 66 F32 mPercentDone;
68 LLString mText; 67 LLString mText;
69 LLString mMessage; 68 LLString mMessage;
70 LLButton* mCancelBtn; 69 LLButton* mCancelBtn;
71 LLFrameTimer mFadeTimer; 70 LLFrameTimer mFadeTimer;
72 LLFrameTimer mProgressTimer; 71 LLFrameTimer mProgressTimer;
72 LLRect mOutlineRect;
73 bool mMouseDownInActiveArea;
73 74
74 static LLProgressView* sInstance; 75 static LLProgressView* sInstance;
75}; 76};
diff --git a/linden/indra/newview/llregionposition.cpp b/linden/indra/newview/llregionposition.cpp
index 49a747e..de2c11d 100644
--- a/linden/indra/newview/llregionposition.cpp
+++ b/linden/indra/newview/llregionposition.cpp
@@ -85,7 +85,7 @@ LLVector3d LLRegionPosition::getPositionGlobal() const
85 85
86void LLRegionPosition::setPositionGlobal(const LLVector3d& position_global ) 86void LLRegionPosition::setPositionGlobal(const LLVector3d& position_global )
87{ 87{
88 mRegionp = gWorldPointer->getRegionFromPosGlobal(position_global); 88 mRegionp = LLWorld::getInstance()->getRegionFromPosGlobal(position_global);
89 if (mRegionp) 89 if (mRegionp)
90 { 90 {
91 mPositionRegion = mRegionp->getPosRegionFromGlobal(position_global); 91 mPositionRegion = mRegionp->getPosRegionFromGlobal(position_global);
diff --git a/linden/indra/newview/llsphere.cpp b/linden/indra/newview/llrendersphere.cpp
index 663537c..6e5c850 100644
--- a/linden/indra/newview/llsphere.cpp
+++ b/linden/indra/newview/llrendersphere.cpp
@@ -1,27 +1,17 @@
1/** 1/**
2 * @file llsphere.cpp 2 * @file llrendersphere.cpp
3 * @brief implementation of the LLSphere class. 3 * @brief implementation of the LLRenderSphere class.
4 * 4 *
5 * $LicenseInfo:firstyear=2001&license=viewergpl$ 5 * $LicenseInfo:firstyear=2001&license=internal$
6 * 6 *
7 * Copyright (c) 2001-2008, Linden Research, Inc. 7 * Copyright (c) 2001-2008, Linden Research, Inc.
8 * 8 *
9 * Second Life Viewer Source Code 9 * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
10 * The source code in this file ("Source Code") is provided by Linden Lab 10 * this source code is governed by the Linden Lab Source Code Disclosure
11 * to you under the terms of the GNU General Public License, version 2.0 11 * Agreement ("Agreement") previously entered between you and Linden
12 * ("GPL"), unless you have obtained a separate licensing agreement 12 * Lab. By accessing, using, copying, modifying or distributing this
13 * ("Other License"), formally executed by you and Linden Lab. Terms of 13 * software, you acknowledge that you have been informed of your
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or 14 * obligations under the Agreement and agree to abide by those obligations.
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 * 15 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO 16 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, 17 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
@@ -34,13 +24,13 @@
34// per viewer - then call the appropriate list. 24// per viewer - then call the appropriate list.
35 25
36#include "llviewerprecompiledheaders.h" 26#include "llviewerprecompiledheaders.h"
37#include "llsphere.h" 27#include "llrendersphere.h"
38#include "llerror.h" 28#include "llerror.h"
39#include "llvertexbuffer.h" 29
40#include "llglheaders.h" 30#include "llglheaders.h"
41 31
42GLUquadricObj *gQuadObj2 = NULL; 32GLUquadricObj *gQuadObj2 = NULL;
43LLSphere gSphere; 33LLRenderSphere gSphere;
44 34
45void drawSolidSphere(GLdouble radius, GLint slices, GLint stacks); 35void drawSolidSphere(GLdouble radius, GLint slices, GLint stacks);
46 36
@@ -108,7 +98,7 @@ void lat2xyz_rad(LLVector3 * result, F32 lat, F32 lon)
108// A couple thoughts on sphere drawing: 98// A couple thoughts on sphere drawing:
109// 1) You need more slices than stacks, but little less than 2:1 99// 1) You need more slices than stacks, but little less than 2:1
110// 2) At low LOD, setting stacks to an odd number avoids a "band" around the equator, making things look smoother 100// 2) At low LOD, setting stacks to an odd number avoids a "band" around the equator, making things look smoother
111void LLSphere::prerender() 101void LLRenderSphere::prerender()
112{ 102{
113 // Create a series of display lists for different LODs 103 // Create a series of display lists for different LODs
114 mDList[0] = glGenLists(1); 104 mDList[0] = glGenLists(1);
@@ -132,7 +122,7 @@ void LLSphere::prerender()
132 glEndList(); 122 glEndList();
133} 123}
134 124
135void LLSphere::cleanupGL() 125void LLRenderSphere::cleanupGL()
136{ 126{
137 for (S32 detail = 0; detail < 4; detail++) 127 for (S32 detail = 0; detail < 4; detail++)
138 { 128 {
@@ -151,7 +141,7 @@ void LLSphere::cleanupGL()
151// 141//
152// The toughest adjustment is the cutoff for the lowest LOD 142// The toughest adjustment is the cutoff for the lowest LOD
153// Maybe we should have more LODs at the low end? 143// Maybe we should have more LODs at the low end?
154void LLSphere::render(F32 pixel_area) 144void LLRenderSphere::render(F32 pixel_area)
155{ 145{
156 S32 level_of_detail; 146 S32 level_of_detail;
157 147
@@ -171,13 +161,11 @@ void LLSphere::render(F32 pixel_area)
171 { 161 {
172 level_of_detail = 3; 162 level_of_detail = 3;
173 } 163 }
174 LLVertexBuffer::unbind();
175 glCallList(mDList[level_of_detail]); 164 glCallList(mDList[level_of_detail]);
176} 165}
177 166
178 167
179void LLSphere::render() 168void LLRenderSphere::render()
180{ 169{
181 LLVertexBuffer::unbind();
182 glCallList(mDList[0]); 170 glCallList(mDList[0]);
183} 171}
diff --git a/linden/indra/newview/llrendersphere.h b/linden/indra/newview/llrendersphere.h
new file mode 100644
index 0000000..ace57e4
--- /dev/null
+++ b/linden/indra/newview/llrendersphere.h
@@ -0,0 +1,47 @@
1/**
2 * @file llrendersphere.h
3 * @brief interface for the LLRenderSphere class.
4 *
5 * $LicenseInfo:firstyear=2001&license=internal$
6 *
7 * Copyright (c) 2001-2008, Linden Research, Inc.
8 *
9 * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
10 * this source code is governed by the Linden Lab Source Code Disclosure
11 * Agreement ("Agreement") previously entered between you and Linden
12 * Lab. By accessing, using, copying, modifying or distributing this
13 * software, you acknowledge that you have been informed of your
14 * obligations under the Agreement and agree to abide by those obligations.
15 *
16 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
17 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
18 * COMPLETENESS OR PERFORMANCE.
19 * $/LicenseInfo$
20 */
21
22#ifndef LL_LLRENDERSPHERE_H
23#define LL_LLRENDERSPHERE_H
24
25#include "llmath.h"
26#include "v3math.h"
27#include "v4math.h"
28#include "m3math.h"
29#include "m4math.h"
30#include "v4color.h"
31#include "llgl.h"
32
33void lat2xyz(LLVector3 * result, F32 lat, F32 lon); // utility routine
34
35class LLRenderSphere
36{
37public:
38 LLGLuint mDList[5];
39
40 void prerender();
41 void cleanupGL();
42 void render(F32 pixel_area); // of a box of size 1.0 at that position
43 void render(); // render at highest LOD
44};
45
46extern LLRenderSphere gSphere;
47#endif
diff --git a/linden/indra/newview/llselectmgr.cpp b/linden/indra/newview/llselectmgr.cpp
index 366f770..e13d8ea 100644
--- a/linden/indra/newview/llselectmgr.cpp
+++ b/linden/indra/newview/llselectmgr.cpp
@@ -101,7 +101,6 @@ extern LLVector3d gLastHitObjectOffset;
101// 101//
102// Globals 102// Globals
103// 103//
104LLSelectMgr* gSelectMgr = NULL;
105 104
106BOOL gDebugSelectMgr = FALSE; 105BOOL gDebugSelectMgr = FALSE;
107 106
@@ -157,8 +156,6 @@ static LLPointer<LLObjectSelection> sNullSelection;
157 156
158void LLSelectMgr::cleanupGlobals() 157void LLSelectMgr::cleanupGlobals()
159{ 158{
160 delete gSelectMgr;
161 gSelectMgr = NULL;
162 sNullSelection = NULL; 159 sNullSelection = NULL;
163} 160}
164 161
@@ -507,7 +504,7 @@ BOOL LLSelectMgr::removeObjectFromSelections(const LLUUID &id)
507 LLTool *tool = NULL; 504 LLTool *tool = NULL;
508 if (!gNoRender) 505 if (!gNoRender)
509 { 506 {
510 tool = gToolMgr->getCurrentTool(); 507 tool = LLToolMgr::getInstance()->getCurrentTool();
511 508
512 // It's possible that the tool is editing an object that is not selected 509 // It's possible that the tool is editing an object that is not selected
513 LLViewerObject* tool_editing_object = tool->getEditingObject(); 510 LLViewerObject* tool_editing_object = tool->getEditingObject();
@@ -1432,7 +1429,7 @@ void LLSelectMgr::selectionSetImage(const LLUUID& imageid)
1432 { 1429 {
1433 object->sendTEUpdate(); 1430 object->sendTEUpdate();
1434 // 1 particle effect per object 1431 // 1 particle effect per object
1435 LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)gHUDManager->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE); 1432 LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE);
1436 effectp->setSourceObject(gAgent.getAvatarObject()); 1433 effectp->setSourceObject(gAgent.getAvatarObject());
1437 effectp->setTargetObject(object); 1434 effectp->setTargetObject(object);
1438 effectp->setDuration(LL_HUD_DUR_SHORT); 1435 effectp->setDuration(LL_HUD_DUR_SHORT);
@@ -2787,28 +2784,28 @@ void LLSelectMgr::confirmDelete(S32 option, void* data)
2787 LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); 2784 LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
2788 // attempt to derez into the trash. 2785 // attempt to derez into the trash.
2789 LLDeRezInfo* info = new LLDeRezInfo(DRD_TRASH, trash_id); 2786 LLDeRezInfo* info = new LLDeRezInfo(DRD_TRASH, trash_id);
2790 gSelectMgr->sendListToRegions("DeRezObject", 2787 LLSelectMgr::getInstance()->sendListToRegions("DeRezObject",
2791 packDeRezHeader, 2788 packDeRezHeader,
2792 packObjectLocalID, 2789 packObjectLocalID,
2793 (void*)info, 2790 (void*)info,
2794 SEND_ONLY_ROOTS); 2791 SEND_ONLY_ROOTS);
2795 // VEFFECT: Delete Object - one effect for all deletes 2792 // VEFFECT: Delete Object - one effect for all deletes
2796 if (gSelectMgr->mSelectedObjects->mSelectType != SELECT_TYPE_HUD) 2793 if (LLSelectMgr::getInstance()->mSelectedObjects->mSelectType != SELECT_TYPE_HUD)
2797 { 2794 {
2798 LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)gHUDManager->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINT, TRUE); 2795 LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINT, TRUE);
2799 effectp->setPositionGlobal( gSelectMgr->getSelectionCenterGlobal() ); 2796 effectp->setPositionGlobal( LLSelectMgr::getInstance()->getSelectionCenterGlobal() );
2800 effectp->setColor(LLColor4U(gAgent.getEffectColor())); 2797 effectp->setColor(LLColor4U(gAgent.getEffectColor()));
2801 F32 duration = 0.5f; 2798 F32 duration = 0.5f;
2802 duration += gSelectMgr->mSelectedObjects->getObjectCount() / 64.f; 2799 duration += LLSelectMgr::getInstance()->mSelectedObjects->getObjectCount() / 64.f;
2803 effectp->setDuration(duration); 2800 effectp->setDuration(duration);
2804 } 2801 }
2805 2802
2806 gAgent.setLookAt(LOOKAT_TARGET_CLEAR); 2803 gAgent.setLookAt(LOOKAT_TARGET_CLEAR);
2807 2804
2808 // Keep track of how many objects have been deleted. 2805 // Keep track of how many objects have been deleted.
2809 F64 obj_delete_count = gViewerStats->getStat(LLViewerStats::ST_OBJECT_DELETE_COUNT); 2806 F64 obj_delete_count = LLViewerStats::getInstance()->getStat(LLViewerStats::ST_OBJECT_DELETE_COUNT);
2810 obj_delete_count += gSelectMgr->mSelectedObjects->getObjectCount(); 2807 obj_delete_count += LLSelectMgr::getInstance()->mSelectedObjects->getObjectCount();
2811 gViewerStats->setStat(LLViewerStats::ST_OBJECT_DELETE_COUNT, obj_delete_count ); 2808 LLViewerStats::getInstance()->setStat(LLViewerStats::ST_OBJECT_DELETE_COUNT, obj_delete_count );
2812 } 2809 }
2813 break; 2810 break;
2814 case 1: 2811 case 1:
@@ -3360,6 +3357,36 @@ void LLSelectMgr::deselectAll()
3360 updatePointAt(); 3357 updatePointAt();
3361} 3358}
3362 3359
3360void LLSelectMgr::deselectAllForStandingUp()
3361{
3362 /*
3363 This function is similar deselectAll() except for the first if statement
3364 which was removed. This is needed as a workaround for DEV-2854
3365 */
3366
3367 // Zap the angular velocity, as the sim will set it to zero
3368 for (LLObjectSelection::iterator iter = mSelectedObjects->begin();
3369 iter != mSelectedObjects->end(); iter++ )
3370 {
3371 LLViewerObject *objectp = (*iter)->getObject();
3372 objectp->setAngularVelocity( 0,0,0 );
3373 objectp->setVelocity( 0,0,0 );
3374 }
3375
3376 sendListToRegions(
3377 "ObjectDeselect",
3378 packAgentAndSessionID,
3379 packObjectLocalID,
3380 NULL,
3381 SEND_INDIVIDUALS);
3382
3383 removeAll();
3384
3385 mLastSentSelectionCenterGlobal.clearVec();
3386
3387 updatePointAt();
3388}
3389
3363void LLSelectMgr::deselectUnused() 3390void LLSelectMgr::deselectUnused()
3364{ 3391{
3365 // no more outstanding references to this selection 3392 // no more outstanding references to this selection
@@ -3496,7 +3523,7 @@ void LLSelectMgr::sendAttach(U8 attachment_point)
3496 return; 3523 return;
3497 } 3524 }
3498 3525
3499 BOOL build_mode = gToolMgr->inEdit(); 3526 BOOL build_mode = LLToolMgr::getInstance()->inEdit();
3500 // Special case: Attach to default location for this object. 3527 // Special case: Attach to default location for this object.
3501 if (0 == attachment_point || 3528 if (0 == attachment_point ||
3502 get_if_there(gAgent.getAvatarObject()->mAttachmentPoints, (S32)attachment_point, (LLViewerJointAttachment*)NULL)) 3529 get_if_there(gAgent.getAvatarObject()->mAttachmentPoints, (S32)attachment_point, (LLViewerJointAttachment*)NULL))
@@ -4283,7 +4310,7 @@ void LLSelectMgr::processObjectProperties(LLMessageSystem* msg, void** user_data
4283 return (node->getObject() && node->getObject()->mID == mID); 4310 return (node->getObject() && node->getObject()->mID == mID);
4284 } 4311 }
4285 } func(id); 4312 } func(id);
4286 LLSelectNode* node = gSelectMgr->getSelection()->getFirstNode(&func); 4313 LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstNode(&func);
4287 4314
4288 if (node) 4315 if (node)
4289 { 4316 {
@@ -4426,7 +4453,7 @@ void LLSelectMgr::processObjectPropertiesFamily(LLMessageSystem* msg, void** use
4426 return (node->getObject() && node->getObject()->mID == mID); 4453 return (node->getObject() && node->getObject()->mID == mID);
4427 } 4454 }
4428 } func(id); 4455 } func(id);
4429 LLSelectNode* node = gSelectMgr->getHoverObjects()->getFirstNode(&func); 4456 LLSelectNode* node = LLSelectMgr::getInstance()->getHoverObjects()->getFirstNode(&func);
4430 4457
4431 if (node) 4458 if (node)
4432 { 4459 {
@@ -4452,7 +4479,7 @@ void LLSelectMgr::processForceObjectSelect(LLMessageSystem* msg, void**)
4452 4479
4453 if (reset_list) 4480 if (reset_list)
4454 { 4481 {
4455 gSelectMgr->deselectAll(); 4482 LLSelectMgr::getInstance()->deselectAll();
4456 } 4483 }
4457 4484
4458 LLUUID full_id; 4485 LLUUID full_id;
@@ -4478,7 +4505,7 @@ void LLSelectMgr::processForceObjectSelect(LLMessageSystem* msg, void**)
4478 } 4505 }
4479 4506
4480 // Don't select, just highlight 4507 // Don't select, just highlight
4481 gSelectMgr->highlightObjectAndFamily(objects); 4508 LLSelectMgr::getInstance()->highlightObjectAndFamily(objects);
4482} 4509}
4483 4510
4484 4511
@@ -4493,9 +4520,7 @@ void LLSelectMgr::updateSilhouettes()
4493 4520
4494 if (!mSilhouetteImagep) 4521 if (!mSilhouetteImagep)
4495 { 4522 {
4496 LLUUID id; 4523 mSilhouetteImagep = gImageList.getImageFromFile("silhouette.j2c", TRUE, TRUE);
4497 id.set( gViewerArt.getString("silhouette.tga") );
4498 mSilhouetteImagep = gImageList.getImage(id, TRUE, TRUE);
4499 } 4524 }
4500 4525
4501 mHighlightedObjects->cleanupNodes(); 4526 mHighlightedObjects->cleanupNodes();
@@ -4547,7 +4572,7 @@ void LLSelectMgr::updateSilhouettes()
4547 { 4572 {
4548 if (num_sils_genned++ < MAX_SILS_PER_FRAME)// && objectp->mDrawable->isVisible()) 4573 if (num_sils_genned++ < MAX_SILS_PER_FRAME)// && objectp->mDrawable->isVisible())
4549 { 4574 {
4550 generateSilhouette(node, gCamera->getOrigin()); 4575 generateSilhouette(node, LLViewerCamera::getInstance()->getOrigin());
4551 changed_objects.push_back(objectp); 4576 changed_objects.push_back(objectp);
4552 } 4577 }
4553 else if (objectp->isAttachment()) 4578 else if (objectp->isAttachment())
@@ -4712,7 +4737,7 @@ void LLSelectMgr::updateSilhouettes()
4712 { 4737 {
4713 if (num_sils_genned++ < MAX_SILS_PER_FRAME) 4738 if (num_sils_genned++ < MAX_SILS_PER_FRAME)
4714 { 4739 {
4715 generateSilhouette(node, gCamera->getOrigin()); 4740 generateSilhouette(node, LLViewerCamera::getInstance()->getOrigin());
4716 changed_objects.push_back(objectp); 4741 changed_objects.push_back(objectp);
4717 } 4742 }
4718 else if (objectp->isAttachment() && objectp->getRootEdit()->mDrawable.notNull()) 4743 else if (objectp->isAttachment() && objectp->getRootEdit()->mDrawable.notNull())
@@ -4782,7 +4807,7 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
4782 glPushMatrix(); 4807 glPushMatrix();
4783 glLoadIdentity(); 4808 glLoadIdentity();
4784 F32 depth = llmax(1.f, hud_bbox.getExtentLocal().mV[VX] * 1.1f); 4809 F32 depth = llmax(1.f, hud_bbox.getExtentLocal().mV[VX] * 1.1f);
4785 glOrtho(-0.5f * gCamera->getAspect(), 0.5f * gCamera->getAspect(), -0.5f, 0.5f, 0.f, depth); 4810 glOrtho(-0.5f * LLViewerCamera::getInstance()->getAspect(), 0.5f * LLViewerCamera::getInstance()->getAspect(), -0.5f, 0.5f, 0.f, depth);
4786 4811
4787 glMatrixMode(GL_MODELVIEW); 4812 glMatrixMode(GL_MODELVIEW);
4788 glPushMatrix(); 4813 glPushMatrix();
@@ -5225,8 +5250,8 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color)
5225 } 5250 }
5226 else 5251 else
5227 { 5252 {
5228 LLVector3 view_vector = gCamera->getOrigin() - objectp->getRenderPosition(); 5253 LLVector3 view_vector = LLViewerCamera::getInstance()->getOrigin() - objectp->getRenderPosition();
5229 silhouette_thickness = view_vector.magVec() * LLSelectMgr::sHighlightThickness * (gCamera->getView() / gCamera->getDefaultFOV()); 5254 silhouette_thickness = view_vector.magVec() * LLSelectMgr::sHighlightThickness * (LLViewerCamera::getInstance()->getView() / LLViewerCamera::getInstance()->getDefaultFOV());
5230 } 5255 }
5231 F32 animationTime = (F32)LLFrameTimer::getElapsedSeconds(); 5256 F32 animationTime = (F32)LLFrameTimer::getElapsedSeconds();
5232 5257
@@ -5240,10 +5265,10 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color)
5240 gGL.blendFunc(GL_SRC_COLOR, GL_ONE); 5265 gGL.blendFunc(GL_SRC_COLOR, GL_ONE);
5241 LLGLEnable fog(GL_FOG); 5266 LLGLEnable fog(GL_FOG);
5242 glFogi(GL_FOG_MODE, GL_LINEAR); 5267 glFogi(GL_FOG_MODE, GL_LINEAR);
5243 float d = (gCamera->getPointOfInterest()-gCamera->getOrigin()).magVec(); 5268 float d = (LLViewerCamera::getInstance()->getPointOfInterest()-LLViewerCamera::getInstance()->getOrigin()).magVec();
5244 LLColor4 fogCol = color * (F32)llclamp((gSelectMgr->getSelectionCenterGlobal()-gAgent.getCameraPositionGlobal()).magVec()/(gSelectMgr->getBBoxOfSelection().getExtentLocal().magVec()*4), 0.0, 1.0); 5269 LLColor4 fogCol = color * (F32)llclamp((LLSelectMgr::getInstance()->getSelectionCenterGlobal()-gAgent.getCameraPositionGlobal()).magVec()/(LLSelectMgr::getInstance()->getBBoxOfSelection().getExtentLocal().magVec()*4), 0.0, 1.0);
5245 glFogf(GL_FOG_START, d); 5270 glFogf(GL_FOG_START, d);
5246 glFogf(GL_FOG_END, d*(1 + (gCamera->getView() / gCamera->getDefaultFOV()))); 5271 glFogf(GL_FOG_END, d*(1 + (LLViewerCamera::getInstance()->getView() / LLViewerCamera::getInstance()->getDefaultFOV())));
5247 glFogfv(GL_FOG_COLOR, fogCol.mV); 5272 glFogfv(GL_FOG_COLOR, fogCol.mV);
5248 5273
5249 LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE, GL_GEQUAL); 5274 LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE, GL_GEQUAL);
@@ -5371,7 +5396,7 @@ S32 get_family_count(LLViewerObject *parent)
5371 } 5396 }
5372 else 5397 else
5373 { 5398 {
5374 if (gSelectMgr->canSelectObject(child)) 5399 if (LLSelectMgr::getInstance()->canSelectObject(child))
5375 { 5400 {
5376 count += get_family_count( child ); 5401 count += get_family_count( child );
5377 } 5402 }
@@ -5463,9 +5488,9 @@ void LLSelectMgr::updateSelectionCenter()
5463 5488
5464 } 5489 }
5465 5490
5466 if ( !(gAgentID == LLUUID::null) && gToolMgr) 5491 if ( !(gAgentID == LLUUID::null))
5467 { 5492 {
5468 LLTool *tool = gToolMgr->getCurrentTool(); 5493 LLTool *tool = LLToolMgr::getInstance()->getCurrentTool();
5469 if (mShowSelection) 5494 if (mShowSelection)
5470 { 5495 {
5471 LLVector3d select_center_global; 5496 LLVector3d select_center_global;
@@ -5654,9 +5679,9 @@ void LLSelectMgr::validateSelection()
5654 { 5679 {
5655 virtual bool apply(LLViewerObject* object) 5680 virtual bool apply(LLViewerObject* object)
5656 { 5681 {
5657 if (!gSelectMgr->canSelectObject(object)) 5682 if (!LLSelectMgr::getInstance()->canSelectObject(object))
5658 { 5683 {
5659 gSelectMgr->deselectObjectOnly(object); 5684 LLSelectMgr::getInstance()->deselectObjectOnly(object);
5660 } 5685 }
5661 return true; 5686 return true;
5662 } 5687 }
@@ -6216,4 +6241,199 @@ LLViewerObject* LLObjectSelection::getFirstMoveableObject(BOOL get_parent)
6216 return getFirstSelectedObject(&func, get_parent); 6241 return getFirstSelectedObject(&func, get_parent);
6217} 6242}
6218 6243
6244//-----------------------------------------------------------------------------
6245// Position + Rotation update methods called from LLViewerJoystick
6246//-----------------------------------------------------------------------------
6247bool LLSelectMgr::selectionMove(const LLVector3& displ,
6248 F32 roll, F32 pitch, F32 yaw, U32 update_type)
6249{
6250 if (update_type == UPD_NONE)
6251 {
6252 return false;
6253 }
6254
6255 LLVector3 displ_global;
6256 bool update_success = true;
6257 bool update_position = update_type & UPD_POSITION;
6258 bool update_rotation = update_type & UPD_ROTATION;
6259 const bool noedit_linked_parts = !gSavedSettings.getBOOL("EditLinkedParts");
6260
6261 if (update_position)
6262 {
6263 // calculate the distance of the object closest to the camera origin
6264 F32 min_dist = 1e+30f;
6265 LLVector3 obj_pos;
6266 for (LLObjectSelection::root_iterator it = getSelection()->root_begin();
6267 it != getSelection()->root_end(); ++it)
6268 {
6269 obj_pos = (*it)->getObject()->getPositionEdit();
6270
6271 F32 obj_dist = dist_vec(obj_pos, LLViewerCamera::getInstance()->getOrigin());
6272 if (obj_dist < min_dist)
6273 {
6274 min_dist = obj_dist;
6275 }
6276 }
6277
6278 // factor the distance inside the displacement vector. This will get us
6279 // equally visible movements for both close and far away selections.
6280 min_dist = sqrt(min_dist) / 2;
6281 displ_global.setVec(displ.mV[0]*min_dist,
6282 displ.mV[1]*min_dist,
6283 displ.mV[2]*min_dist);
6284
6285 // equates to: Displ_global = Displ * M_cam_axes_in_global_frame
6286 displ_global = LLViewerCamera::getInstance()->rotateToAbsolute(displ_global);
6287 }
6288
6289 LLQuaternion new_rot;
6290 if (update_rotation)
6291 {
6292 // let's calculate the rotation around each camera axes
6293 LLQuaternion qx(roll, LLViewerCamera::getInstance()->getAtAxis());
6294 LLQuaternion qy(pitch, LLViewerCamera::getInstance()->getLeftAxis());
6295 LLQuaternion qz(yaw, LLViewerCamera::getInstance()->getUpAxis());
6296 new_rot.setQuat(qx * qy * qz);
6297 }
6298
6299 LLViewerObject *obj;
6300 S32 obj_count = getSelection()->getObjectCount();
6301 for (LLObjectSelection::root_iterator it = getSelection()->root_begin();
6302 it != getSelection()->root_end(); ++it )
6303 {
6304 obj = (*it)->getObject();
6305 bool enable_pos = false, enable_rot = false;
6306 bool perm_move = obj->permMove();
6307 bool perm_mod = obj->permModify();
6308
6309 LLVector3d sel_center(getSelectionCenterGlobal());
6310
6311 if (update_rotation)
6312 {
6313 enable_rot = perm_move
6314 && ((perm_mod && !obj->isAttachment()) || noedit_linked_parts);
6315
6316 if (enable_rot)
6317 {
6318 int children_count = obj->getChildren().size();
6319 if (obj_count > 1 && children_count > 0)
6320 {
6321 // for linked sets, rotate around the group center
6322 const LLVector3 t(obj->getPositionGlobal() - sel_center);
6323
6324 // Ra = T x R x T^-1
6325 LLMatrix4 mt; mt.setTranslation(t);
6326 const LLMatrix4 mnew_rot(new_rot);
6327 LLMatrix4 mt_1; mt_1.setTranslation(-t);
6328 mt *= mnew_rot;
6329 mt *= mt_1;
6330
6331 // Rfin = Rcur * Ra
6332 obj->setRotation(obj->getRotationEdit() * mt.quaternion());
6333 displ_global += mt.getTranslation();
6334 }
6335 else
6336 {
6337 obj->setRotation(obj->getRotationEdit() * new_rot);
6338 }
6339 }
6340 else
6341 {
6342 update_success = false;
6343 }
6344 }
6345
6346 if (update_position)
6347 {
6348 // establish if object can be moved or not
6349 enable_pos = perm_move && !obj->isAttachment()
6350 && (perm_mod || noedit_linked_parts);
6351
6352 if (enable_pos)
6353 {
6354 obj->setPosition(obj->getPositionEdit() + displ_global);
6355 }
6356 else
6357 {
6358 update_success = false;
6359 }
6360 }
6361
6362 if (enable_pos && enable_rot && obj->mDrawable.notNull())
6363 {
6364 gPipeline.markMoved(obj->mDrawable, TRUE);
6365 }
6366 }
6367
6368 if (update_position && update_success && obj_count > 1)
6369 {
6370 updateSelectionCenter();
6371 }
6372
6373 return update_success;
6374}
6375
6376void LLSelectMgr::sendSelectionMove()
6377{
6378 LLSelectNode *node = mSelectedObjects->getFirstRootNode();
6379 if (node == NULL)
6380 {
6381 return;
6382 }
6383
6384 //saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK);
6385
6386 U32 update_type = UPD_POSITION | UPD_ROTATION;
6387 LLViewerRegion *last_region, *curr_region = node->getObject()->getRegion();
6388 S32 objects_in_this_packet = 0;
6389
6390 // apply to linked objects if unable to select their individual parts
6391 if (!gSavedSettings.getBOOL("EditLinkedParts") && !getTEMode())
6392 {
6393 // tell simulator to apply to whole linked sets
6394 update_type |= UPD_LINKED_SETS;
6395 }
6396
6397 // prepare first bulk message
6398 gMessageSystem->newMessage("MultipleObjectUpdate");
6399 packAgentAndSessionID(&update_type);
6400
6401 LLViewerObject *obj = NULL;
6402 for (LLObjectSelection::root_iterator it = getSelection()->root_begin();
6403 it != getSelection()->root_end(); ++it)
6404 {
6405 obj = (*it)->getObject();
6219 6406
6407 // note: following code adapted from sendListToRegions() (@3924)
6408 last_region = curr_region;
6409 curr_region = obj->getRegion();
6410
6411 // if not simulator or message too big
6412 if (curr_region != last_region
6413 || gMessageSystem->isSendFull(NULL)
6414 || objects_in_this_packet >= MAX_OBJECTS_PER_PACKET)
6415 {
6416 // send sim the current message and start new one
6417 gMessageSystem->sendReliable(last_region->getHost());
6418 objects_in_this_packet = 0;
6419 gMessageSystem->newMessage("MultipleObjectUpdate");
6420 packAgentAndSessionID(&update_type);
6421 }
6422
6423 // add another instance of the body of data
6424 packMultipleUpdate(*it, &update_type);
6425 ++objects_in_this_packet;
6426 }
6427
6428 // flush remaining messages
6429 if (gMessageSystem->getCurrentSendTotal() > 0)
6430 {
6431 gMessageSystem->sendReliable(curr_region->getHost());
6432 }
6433 else
6434 {
6435 gMessageSystem->clearMessage();
6436 }
6437
6438 //saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK);
6439}
diff --git a/linden/indra/newview/llselectmgr.h b/linden/indra/newview/llselectmgr.h
index 0f1ea4c..80ba192 100644
--- a/linden/indra/newview/llselectmgr.h
+++ b/linden/indra/newview/llselectmgr.h
@@ -321,7 +321,7 @@ public:
321 bool applyToRootNodes(LLSelectedNodeFunctor* func, bool firstonly = false); 321 bool applyToRootNodes(LLSelectedNodeFunctor* func, bool firstonly = false);
322 bool applyToNodes(LLSelectedNodeFunctor* func, bool firstonly = false); 322 bool applyToNodes(LLSelectedNodeFunctor* func, bool firstonly = false);
323 323
324 ESelectType getSelectType() { return mSelectType; } 324 ESelectType getSelectType() const { return mSelectType; }
325 325
326private: 326private:
327 const LLObjectSelection &operator=(const LLObjectSelection &); 327 const LLObjectSelection &operator=(const LLObjectSelection &);
@@ -333,7 +333,7 @@ private:
333 333
334typedef LLSafeHandle<LLObjectSelection> LLObjectSelectionHandle; 334typedef LLSafeHandle<LLObjectSelection> LLObjectSelectionHandle;
335 335
336class LLSelectMgr : public LLEditMenuHandler 336class LLSelectMgr : public LLEditMenuHandler, public LLSingleton<LLSelectMgr>
337{ 337{
338public: 338public:
339 static BOOL sRectSelectInclusive; // do we need to surround an object to pick it? 339 static BOOL sRectSelectInclusive; // do we need to surround an object to pick it?
@@ -419,6 +419,7 @@ public:
419 419
420 // Send deselect messages to simulator, then clear the list 420 // Send deselect messages to simulator, then clear the list
421 void deselectAll(); 421 void deselectAll();
422 void deselectAllForStandingUp();
422 423
423 // deselect only if nothing else currently referencing the selection 424 // deselect only if nothing else currently referencing the selection
424 void deselectUnused(); 425 void deselectUnused();
@@ -515,6 +516,10 @@ public:
515 516
516 void selectionResetRotation(); // sets rotation quat to identity 517 void selectionResetRotation(); // sets rotation quat to identity
517 void selectionRotateAroundZ(F32 degrees); 518 void selectionRotateAroundZ(F32 degrees);
519 bool selectionMove(const LLVector3& displ, F32 rx, F32 ry, F32 rz,
520 U32 update_type);
521 void sendSelectionMove();
522
518 void sendGodlikeRequest(const LLString& request, const LLString& parameter); 523 void sendGodlikeRequest(const LLString& request, const LLString& parameter);
519 524
520 525
@@ -707,8 +712,6 @@ private:
707 LLAnimPauseRequest mPauseRequest; 712 LLAnimPauseRequest mPauseRequest;
708}; 713};
709 714
710extern LLSelectMgr* gSelectMgr;
711
712// Utilities 715// Utilities
713void dialog_refresh_all(); // Update subscribers to the selection list 716void dialog_refresh_all(); // Update subscribers to the selection list
714 717
diff --git a/linden/indra/newview/llspatialpartition.cpp b/linden/indra/newview/llspatialpartition.cpp
index b6fbfbf..7d715be 100644
--- a/linden/indra/newview/llspatialpartition.cpp
+++ b/linden/indra/newview/llspatialpartition.cpp
@@ -1806,7 +1806,7 @@ S32 LLSpatialPartition::cull(LLCamera &camera, std::vector<LLDrawable *>* result
1806 1806
1807BOOL earlyFail(LLCamera* camera, LLSpatialGroup* group) 1807BOOL earlyFail(LLCamera* camera, LLSpatialGroup* group)
1808{ 1808{
1809 const F32 vel = (gCamera->getVelocityStat()->getCurrent()+0.2f); 1809 const F32 vel = (LLViewerCamera::getInstance()->getVelocityStat()->getCurrent()+0.2f);
1810 LLVector3 c = group->mBounds[0]; 1810 LLVector3 c = group->mBounds[0];
1811 LLVector3 r = group->mBounds[1]*SG_OCCLUSION_FUDGE + LLVector3(vel,vel,vel); 1811 LLVector3 r = group->mBounds[1]*SG_OCCLUSION_FUDGE + LLVector3(vel,vel,vel);
1812 1812
@@ -2497,7 +2497,7 @@ void LLSpatialPartition::renderDebug()
2497 if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_TEXTURE_PRIORITY)) 2497 if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_TEXTURE_PRIORITY))
2498 { 2498 {
2499 //sLastMaxTexPriority = lerp(sLastMaxTexPriority, sCurMaxTexPriority, gFrameIntervalSeconds); 2499 //sLastMaxTexPriority = lerp(sLastMaxTexPriority, sCurMaxTexPriority, gFrameIntervalSeconds);
2500 sLastMaxTexPriority = (F32) gCamera->getScreenPixelArea(); 2500 sLastMaxTexPriority = (F32) LLViewerCamera::getInstance()->getScreenPixelArea();
2501 sCurMaxTexPriority = 0.f; 2501 sCurMaxTexPriority = 0.f;
2502 } 2502 }
2503 2503
@@ -2510,7 +2510,7 @@ void LLSpatialPartition::renderDebug()
2510 gPipeline.disableLights(); 2510 gPipeline.disableLights();
2511 2511
2512 LLSpatialBridge* bridge = asBridge(); 2512 LLSpatialBridge* bridge = asBridge();
2513 LLCamera* camera = gCamera; 2513 LLCamera* camera = LLViewerCamera::getInstance();
2514 2514
2515 if (bridge) 2515 if (bridge)
2516 { 2516 {
@@ -2527,7 +2527,7 @@ void LLSpatialPartition::renderDebug()
2527 2527
2528BOOL LLSpatialPartition::isVisible(const LLVector3& v) 2528BOOL LLSpatialPartition::isVisible(const LLVector3& v)
2529{ 2529{
2530 if (!gCamera->sphereInFrustum(v, 4.0f)) 2530 if (!LLViewerCamera::getInstance()->sphereInFrustum(v, 4.0f))
2531 { 2531 {
2532 return FALSE; 2532 return FALSE;
2533 } 2533 }
@@ -2650,6 +2650,10 @@ void LLCullResult::clear()
2650 2650
2651 for (U32 i = 0; i < LLRenderPass::NUM_RENDER_TYPES; i++) 2651 for (U32 i = 0; i < LLRenderPass::NUM_RENDER_TYPES; i++)
2652 { 2652 {
2653 for (U32 j = 0; j < mRenderMapSize[i]; j++)
2654 {
2655 mRenderMap[i][j] = 0;
2656 }
2653 mRenderMapSize[i] = 0; 2657 mRenderMapSize[i] = 0;
2654 } 2658 }
2655} 2659}
diff --git a/linden/indra/newview/llsprite.cpp b/linden/indra/newview/llsprite.cpp
index 092d49f..624e03d 100644
--- a/linden/indra/newview/llsprite.cpp
+++ b/linden/indra/newview/llsprite.cpp
@@ -92,7 +92,7 @@ LLSprite::~LLSprite()
92 92
93void LLSprite::updateFace(LLFace &face) 93void LLSprite::updateFace(LLFace &face)
94{ 94{
95 LLViewerCamera &camera = *gCamera; 95 LLViewerCamera &camera = *LLViewerCamera::getInstance();
96 96
97 // First, figure out how many vertices/indices we need. 97 // First, figure out how many vertices/indices we need.
98 U32 num_vertices, num_indices; 98 U32 num_vertices, num_indices;
diff --git a/linden/indra/newview/llstartup.cpp b/linden/indra/newview/llstartup.cpp
index 36809ee..914b993 100644
--- a/linden/indra/newview/llstartup.cpp
+++ b/linden/indra/newview/llstartup.cpp
@@ -45,13 +45,10 @@
45#include "audioengine_fmod.h" 45#include "audioengine_fmod.h"
46#endif 46#endif
47 47
48#include "audiosettings.h"
49#include "llares.h" 48#include "llares.h"
50#include "llcachename.h" 49#include "llcachename.h"
51#include "llcameraview.h"
52#include "llviewercontrol.h" 50#include "llviewercontrol.h"
53#include "lldir.h" 51#include "lldir.h"
54#include "lleconomy.h"
55#include "llerrorcontrol.h" 52#include "llerrorcontrol.h"
56#include "llfiltersd2xmlrpc.h" 53#include "llfiltersd2xmlrpc.h"
57#include "llfocusmgr.h" 54#include "llfocusmgr.h"
@@ -84,6 +81,7 @@
84#include "llcolorscheme.h" 81#include "llcolorscheme.h"
85#include "llconsole.h" 82#include "llconsole.h"
86#include "llcontainerview.h" 83#include "llcontainerview.h"
84#include "llfloaterstats.h"
87#include "lldebugview.h" 85#include "lldebugview.h"
88#include "lldrawable.h" 86#include "lldrawable.h"
89#include "lleventnotifier.h" 87#include "lleventnotifier.h"
@@ -91,8 +89,10 @@
91#include "llfeaturemanager.h" 89#include "llfeaturemanager.h"
92#include "llfirstuse.h" 90#include "llfirstuse.h"
93#include "llfloateractivespeakers.h" 91#include "llfloateractivespeakers.h"
92#include "llfloatercamera.h"
94#include "llfloaterchat.h" 93#include "llfloaterchat.h"
95#include "llfloatergesture.h" 94#include "llfloatergesture.h"
95#include "llfloaterhud.h"
96#include "llfloaterland.h" 96#include "llfloaterland.h"
97#include "llfloatertopobjects.h" 97#include "llfloatertopobjects.h"
98#include "llfloatertos.h" 98#include "llfloatertos.h"
@@ -322,8 +322,6 @@ BOOL idle_startup()
322 static LLString password; 322 static LLString password;
323 static std::vector<const char*> requested_options; 323 static std::vector<const char*> requested_options;
324 324
325 static U32 region_size = 256;
326 static F32 region_scale = 1.f;
327 static U64 first_sim_handle = 0; 325 static U64 first_sim_handle = 0;
328 static LLHost first_sim; 326 static LLHost first_sim;
329 static std::string first_sim_seed_cap; 327 static std::string first_sim_seed_cap;
@@ -374,11 +372,11 @@ BOOL idle_startup()
374 // Initialize stuff that doesn't need data from simulators 372 // Initialize stuff that doesn't need data from simulators
375 // 373 //
376 374
377 if (gFeatureManagerp->isSafe()) 375 if (LLFeatureManager::getInstance()->isSafe())
378 { 376 {
379 gViewerWindow->alertXml("DisplaySetToSafe"); 377 gViewerWindow->alertXml("DisplaySetToSafe");
380 } 378 }
381 else if ((gSavedSettings.getS32("LastFeatureVersion") < gFeatureManagerp->getVersion()) && 379 else if ((gSavedSettings.getS32("LastFeatureVersion") < LLFeatureManager::getInstance()->getVersion()) &&
382 (gSavedSettings.getS32("LastFeatureVersion") != 0)) 380 (gSavedSettings.getS32("LastFeatureVersion") != 0))
383 { 381 {
384 gViewerWindow->alertXml("DisplaySetToRecommended"); 382 gViewerWindow->alertXml("DisplaySetToRecommended");
@@ -388,7 +386,7 @@ BOOL idle_startup()
388 gViewerWindow->alertXml(gViewerWindow->getInitAlert()); 386 gViewerWindow->alertXml(gViewerWindow->getInitAlert());
389 } 387 }
390 388
391 gSavedSettings.setS32("LastFeatureVersion", gFeatureManagerp->getVersion()); 389 gSavedSettings.setS32("LastFeatureVersion", LLFeatureManager::getInstance()->getVersion());
392 390
393 LLString xml_file = LLUI::locateSkin("xui_version.xml"); 391 LLString xml_file = LLUI::locateSkin("xui_version.xml");
394 LLXMLNodePtr root; 392 LLXMLNodePtr root;
@@ -445,7 +443,7 @@ BOOL idle_startup()
445 { 443 {
446 fclose(found_template); 444 fclose(found_template);
447 445
448 U32 port = gAgent.mViewerPort; 446 U32 port = gSavedSettings.getU32("UserConnectionPort");
449 447
450 if ((NET_USE_OS_ASSIGNED_PORT == port) && // if nothing specified on command line (-port) 448 if ((NET_USE_OS_ASSIGNED_PORT == port) && // if nothing specified on command line (-port)
451 (gSavedSettings.getBOOL("ConnectionPortEnabled"))) 449 (gSavedSettings.getBOOL("ConnectionPortEnabled")))
@@ -495,7 +493,7 @@ BOOL idle_startup()
495 invalid_message_callback, 493 invalid_message_callback,
496 NULL); 494 NULL);
497 495
498 if (gSavedSettings.getBOOL("LogMessages") || gLogMessages) 496 if (gSavedSettings.getBOOL("LogMessages"))
499 { 497 {
500 llinfos << "Message logging activated!" << llendl; 498 llinfos << "Message logging activated!" << llendl;
501 msg->startLogging(); 499 msg->startLogging();
@@ -514,32 +512,32 @@ BOOL idle_startup()
514 } 512 }
515 gAssetStorage = new LLViewerAssetStorage(msg, gXferManager, gVFS); 513 gAssetStorage = new LLViewerAssetStorage(msg, gXferManager, gVFS);
516 514
517 msg->mPacketRing.setDropPercentage(gPacketDropPercentage); 515
518 if (gInBandwidth != 0.f) 516 F32 dropPercent = gSavedSettings.getF32("PacketDropPercentage");
517 msg->mPacketRing.setDropPercentage(dropPercent);
518
519 F32 inBandwidth = gSavedSettings.getF32("InBandwidth");
520 F32 outBandwidth = gSavedSettings.getF32("OutBandwidth");
521 if (inBandwidth != 0.f)
519 { 522 {
520 llinfos << "Setting packetring incoming bandwidth to " << gInBandwidth << llendl; 523 llinfos << "Setting packetring incoming bandwidth to " << inBandwidth << llendl;
521 msg->mPacketRing.setUseInThrottle(TRUE); 524 msg->mPacketRing.setUseInThrottle(TRUE);
522 msg->mPacketRing.setInBandwidth(gInBandwidth); 525 msg->mPacketRing.setInBandwidth(inBandwidth);
523 } 526 }
524 if (gOutBandwidth != 0.f) 527 if (outBandwidth != 0.f)
525 { 528 {
526 llinfos << "Setting packetring outgoing bandwidth to " << gOutBandwidth << llendl; 529 llinfos << "Setting packetring outgoing bandwidth to " << outBandwidth << llendl;
527 msg->mPacketRing.setUseOutThrottle(TRUE); 530 msg->mPacketRing.setUseOutThrottle(TRUE);
528 msg->mPacketRing.setOutBandwidth(gOutBandwidth); 531 msg->mPacketRing.setOutBandwidth(outBandwidth);
529 } 532 }
530 } 533 }
531 534
532 // initialize the economy
533 gGlobalEconomy = new LLGlobalEconomy();
534
535
536
537 //------------------------------------------------- 535 //-------------------------------------------------
538 // Init audio, which may be needed for prefs dialog 536 // Init audio, which may be needed for prefs dialog
539 // or audio cues in connection UI. 537 // or audio cues in connection UI.
540 //------------------------------------------------- 538 //-------------------------------------------------
541 539
542 if (gUseAudio) 540 if (FALSE == gSavedSettings.getBOOL("NoAudio"))
543 { 541 {
544#if LL_FMOD 542#if LL_FMOD
545 gAudiop = (LLAudioEngine *) new LLAudioEngine_FMOD(); 543 gAudiop = (LLAudioEngine *) new LLAudioEngine_FMOD();
@@ -584,14 +582,13 @@ BOOL idle_startup()
584 582
585 show_connect_box = FALSE; 583 show_connect_box = FALSE;
586 } 584 }
587 else if( !gCmdLineFirstName.empty() 585 else if(gSavedSettings.getLLSD("UserLoginInfo").size() == 3)
588 && !gCmdLineLastName.empty() 586 {
589 && !gCmdLinePassword.empty()) 587 LLSD cmd_line_login = gSavedSettings.getLLSD("UserLoginInfo");
590 { 588 firstname = cmd_line_login[0].asString();
591 firstname = gCmdLineFirstName; 589 lastname = cmd_line_login[1].asString();
592 lastname = gCmdLineLastName;
593 590
594 LLMD5 pass((unsigned char*)gCmdLinePassword.c_str()); 591 LLMD5 pass((unsigned char*)cmd_line_login[2].asString().c_str());
595 char md5pass[33]; /* Flawfinder: ignore */ 592 char md5pass[33]; /* Flawfinder: ignore */
596 pass.hex_digest(md5pass); 593 pass.hex_digest(md5pass);
597 password = md5pass; 594 password = md5pass;
@@ -602,9 +599,9 @@ BOOL idle_startup()
602#else 599#else
603 show_connect_box = FALSE; 600 show_connect_box = FALSE;
604#endif 601#endif
605 gAutoLogin = TRUE; 602 gSavedSettings.setBOOL("AutoLogin", TRUE);
606 } 603 }
607 else if (gAutoLogin || gSavedSettings.getBOOL("AutoLogin")) 604 else if (gSavedSettings.getBOOL("AutoLogin"))
608 { 605 {
609 firstname = gSavedSettings.getString("FirstName"); 606 firstname = gSavedSettings.getString("FirstName");
610 lastname = gSavedSettings.getString("LastName"); 607 lastname = gSavedSettings.getString("LastName");
@@ -695,24 +692,19 @@ BOOL idle_startup()
695 // skip directly to message template verification 692 // skip directly to message template verification
696 LLStartUp::setStartupState( STATE_LOGIN_CLEANUP ); 693 LLStartUp::setStartupState( STATE_LOGIN_CLEANUP );
697 } 694 }
698 695
699 // Create selection manager 696 // *NOTE: This is where LLViewerParcelMgr::getInstance() used to get allocated before becoming LLViewerParcelMgr::getInstance().
700 // Must be done before menus created, because many enabled callbacks 697
701 // require its existance. 698 // *NOTE: This is where gHUDManager used to bet allocated before becoming LLHUDManager::getInstance().
702 gSelectMgr = new LLSelectMgr(); 699
703 gParcelMgr = new LLViewerParcelMgr(); 700 // *NOTE: This is where gMuteList used to get allocated before becoming LLMuteList::getInstance().
704 gHUDManager = new LLHUDManager();
705 gMuteListp = new LLMuteList();
706 701
707 // Initialize UI 702 // Initialize UI
708 if (!gNoRender) 703 if (!gNoRender)
709 { 704 {
710 // Initialize all our tools. Must be done after saved settings loaded. 705 // Initialize all our tools. Must be done after saved settings loaded.
711 if ( gToolMgr == NULL ) 706 // NOTE: This also is where gToolMgr used to be instantiated before being turned into a singleton.
712 { 707 LLToolMgr::getInstance()->initTools();
713 gToolMgr = new LLToolMgr();
714 gToolMgr->initTools();
715 }
716 708
717 // Quickly get something onscreen to look at. 709 // Quickly get something onscreen to look at.
718 gViewerWindow->initWorldUI(); 710 gViewerWindow->initWorldUI();
@@ -779,19 +771,17 @@ BOOL idle_startup()
779 // create necessary directories 771 // create necessary directories
780 // *FIX: these mkdir's should error check 772 // *FIX: these mkdir's should error check
781 gDirUtilp->setLindenUserDir(firstname.c_str(), lastname.c_str()); 773 gDirUtilp->setLindenUserDir(firstname.c_str(), lastname.c_str());
774 LLFile::mkdir(gDirUtilp->getLindenUserDir().c_str());
782 775
776 // Set PerAccountSettingsFile to the default value.
777 gSavedSettings.setString("PerAccountSettingsFile",
778 gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT,
779 LLAppViewer::instance()->getSettingsFileName("PerAccount")
780 )
781 );
783 782
784 LLFile::mkdir(gDirUtilp->getLindenUserDir().c_str()); 783 // Overwrite default user settings with user settings
785 784 LLAppViewer::instance()->loadSettingsFromDirectory(LL_PATH_PER_SL_ACCOUNT);
786 // the mute list is loaded in the llmutelist class.
787
788 gSavedSettings.loadFromFile(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT,"overrides.xml"));
789
790 // handle the per account settings setup
791 gPerAccountSettingsFileName = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, DEFAULT_SETTINGS_FILE);
792
793 // per account settings. Set defaults here if not found. If we get a bunch of these, eventually move to a function.
794 gSavedPerAccountSettings.loadFromFile(gPerAccountSettingsFileName);
795 785
796 // Need to set the LastLogoff time here if we don't have one. LastLogoff is used for "Recent Items" calculation 786 // Need to set the LastLogoff time here if we don't have one. LastLogoff is used for "Recent Items" calculation
797 // and startup time is close enough if we don't have a real value. 787 // and startup time is close enough if we don't have a real value.
@@ -826,7 +816,7 @@ BOOL idle_startup()
826 gSavedSettings.setS32("ServerChoice", gGridChoice); 816 gSavedSettings.setS32("ServerChoice", gGridChoice);
827 if (gGridChoice == GRID_INFO_OTHER) 817 if (gGridChoice == GRID_INFO_OTHER)
828 { 818 {
829 snprintf(gGridName, MAX_STRING, "%s", server_label.c_str());/* Flawfinder: ignore */ 819 gGridName = server_label;/* Flawfinder: ignore */
830 } 820 }
831 821
832 if ( user_picked_server ) 822 if ( user_picked_server )
@@ -919,18 +909,15 @@ BOOL idle_startup()
919//#define LL_MINIMIAL_REQUESTED_OPTIONS 909//#define LL_MINIMIAL_REQUESTED_OPTIONS
920 gDebugInfo["GridName"] = gGridInfo[gGridChoice].mLabel; 910 gDebugInfo["GridName"] = gGridInfo[gGridChoice].mLabel;
921 911
922 lldebugs << "STATE_LOGIN_AUTH_INIT" << llendl; 912 // *Note: this is where gUserAuth used to be created.
923 if (!gUserAuthp) 913
924 {
925 gUserAuthp = new LLUserAuth();
926 }
927 requested_options.clear(); 914 requested_options.clear();
928 requested_options.push_back("inventory-root"); 915 requested_options.push_back("inventory-root");
929 requested_options.push_back("inventory-skeleton"); 916 requested_options.push_back("inventory-skeleton");
930 //requested_options.push_back("inventory-meat"); 917 //requested_options.push_back("inventory-meat");
931 //requested_options.push_back("inventory-skel-targets"); 918 //requested_options.push_back("inventory-skel-targets");
932#if (!defined LL_MINIMIAL_REQUESTED_OPTIONS) 919#if (!defined LL_MINIMIAL_REQUESTED_OPTIONS)
933 if(gRequestInventoryLibrary) 920 if(FALSE == gSavedSettings.getBOOL("NoInventoryLibrary"))
934 { 921 {
935 requested_options.push_back("inventory-lib-root"); 922 requested_options.push_back("inventory-lib-root");
936 requested_options.push_back("inventory-lib-owner"); 923 requested_options.push_back("inventory-lib-owner");
@@ -947,9 +934,10 @@ BOOL idle_startup()
947 requested_options.push_back("buddy-list"); 934 requested_options.push_back("buddy-list");
948 requested_options.push_back("ui-config"); 935 requested_options.push_back("ui-config");
949#endif 936#endif
937 requested_options.push_back("tutorial_setting");
950 requested_options.push_back("login-flags"); 938 requested_options.push_back("login-flags");
951 requested_options.push_back("global-textures"); 939 requested_options.push_back("global-textures");
952 if(gGodConnect) 940 if(gSavedSettings.getBOOL("ConnectAsGod"))
953 { 941 {
954 gSavedSettings.setBOOL("UseDebugMenus", TRUE); 942 gSavedSettings.setBOOL("UseDebugMenus", TRUE);
955 requested_options.push_back("god-connect"); 943 requested_options.push_back("god-connect");
@@ -1008,7 +996,7 @@ BOOL idle_startup()
1008 996
1009 // TODO if statement here to use web_login_key 997 // TODO if statement here to use web_login_key
1010 sAuthUriNum = llclamp(sAuthUriNum, 0, (S32)sAuthUris.size()-1); 998 sAuthUriNum = llclamp(sAuthUriNum, 0, (S32)sAuthUris.size()-1);
1011 gUserAuthp->authenticate( 999 LLUserAuth::getInstance()->authenticate(
1012 sAuthUris[sAuthUriNum].c_str(), 1000 sAuthUris[sAuthUriNum].c_str(),
1013 auth_method.c_str(), 1001 auth_method.c_str(),
1014 firstname.c_str(), 1002 firstname.c_str(),
@@ -1019,7 +1007,6 @@ BOOL idle_startup()
1019 gSkipOptionalUpdate, 1007 gSkipOptionalUpdate,
1020 gAcceptTOS, 1008 gAcceptTOS,
1021 gAcceptCriticalMessage, 1009 gAcceptCriticalMessage,
1022 gViewerDigest,
1023 gLastExecEvent, 1010 gLastExecEvent,
1024 requested_options, 1011 requested_options,
1025 hashed_mac_string, 1012 hashed_mac_string,
@@ -1039,17 +1026,13 @@ BOOL idle_startup()
1039 // in curl, so take "may appear frozen" out of progress bar. JC 1026 // in curl, so take "may appear frozen" out of progress bar. JC
1040 auth_desc = "Logging in..."; 1027 auth_desc = "Logging in...";
1041 set_startup_status(progress, auth_desc.c_str(), auth_message.c_str()); 1028 set_startup_status(progress, auth_desc.c_str(), auth_message.c_str());
1042 if (!gUserAuthp)
1043 {
1044 llerrs << "No userauth in STATE_LOGIN_NO_DATA_YET!" << llendl;
1045 }
1046 // Process messages to keep from dropping circuit. 1029 // Process messages to keep from dropping circuit.
1047 LLMessageSystem* msg = gMessageSystem; 1030 LLMessageSystem* msg = gMessageSystem;
1048 while (msg->checkAllMessages(gFrameCount, gServicePump)) 1031 while (msg->checkAllMessages(gFrameCount, gServicePump))
1049 { 1032 {
1050 } 1033 }
1051 msg->processAcks(); 1034 msg->processAcks();
1052 LLUserAuth::UserAuthcode error = gUserAuthp->authResponse(); 1035 LLUserAuth::UserAuthcode error = LLUserAuth::getInstance()->authResponse();
1053 if(LLUserAuth::E_NO_RESPONSE_YET == error) 1036 if(LLUserAuth::E_NO_RESPONSE_YET == error)
1054 { 1037 {
1055 //llinfos << "waiting..." << llendl; 1038 //llinfos << "waiting..." << llendl;
@@ -1064,17 +1047,13 @@ BOOL idle_startup()
1064 if(STATE_LOGIN_DOWNLOADING == LLStartUp::getStartupState()) 1047 if(STATE_LOGIN_DOWNLOADING == LLStartUp::getStartupState())
1065 { 1048 {
1066 lldebugs << "STATE_LOGIN_DOWNLOADING" << llendl; 1049 lldebugs << "STATE_LOGIN_DOWNLOADING" << llendl;
1067 if (!gUserAuthp)
1068 {
1069 llerrs << "No userauth in STATE_LOGIN_DOWNLOADING!" << llendl;
1070 }
1071 // Process messages to keep from dropping circuit. 1050 // Process messages to keep from dropping circuit.
1072 LLMessageSystem* msg = gMessageSystem; 1051 LLMessageSystem* msg = gMessageSystem;
1073 while (msg->checkAllMessages(gFrameCount, gServicePump)) 1052 while (msg->checkAllMessages(gFrameCount, gServicePump))
1074 { 1053 {
1075 } 1054 }
1076 msg->processAcks(); 1055 msg->processAcks();
1077 LLUserAuth::UserAuthcode error = gUserAuthp->authResponse(); 1056 LLUserAuth::UserAuthcode error = LLUserAuth::getInstance()->authResponse();
1078 if(LLUserAuth::E_DOWNLOADING == error) 1057 if(LLUserAuth::E_DOWNLOADING == error)
1079 { 1058 {
1080 //llinfos << "downloading..." << llendl; 1059 //llinfos << "downloading..." << llendl;
@@ -1095,14 +1074,14 @@ BOOL idle_startup()
1095 const char* reason_response = NULL; 1074 const char* reason_response = NULL;
1096 const char* message_response = NULL; 1075 const char* message_response = NULL;
1097 BOOL successful_login = FALSE; 1076 BOOL successful_login = FALSE;
1098 LLUserAuth::UserAuthcode error = gUserAuthp->authResponse(); 1077 LLUserAuth::UserAuthcode error = LLUserAuth::getInstance()->authResponse();
1099 // reset globals 1078 // reset globals
1100 gAcceptTOS = FALSE; 1079 gAcceptTOS = FALSE;
1101 gAcceptCriticalMessage = FALSE; 1080 gAcceptCriticalMessage = FALSE;
1102 switch(error) 1081 switch(error)
1103 { 1082 {
1104 case LLUserAuth::E_OK: 1083 case LLUserAuth::E_OK:
1105 login_response = gUserAuthp->getResponse("login"); 1084 login_response = LLUserAuth::getInstance()->getResponse("login");
1106 if(login_response && (0 == strcmp(login_response, "true"))) 1085 if(login_response && (0 == strcmp(login_response, "true")))
1107 { 1086 {
1108 // Yay, login! 1087 // Yay, login!
@@ -1111,10 +1090,10 @@ BOOL idle_startup()
1111 else if(login_response && (0 == strcmp(login_response, "indeterminate"))) 1090 else if(login_response && (0 == strcmp(login_response, "indeterminate")))
1112 { 1091 {
1113 llinfos << "Indeterminate login..." << llendl; 1092 llinfos << "Indeterminate login..." << llendl;
1114 sAuthUris = LLSRV::rewriteURI(gUserAuthp->getResponse("next_url")); 1093 sAuthUris = LLSRV::rewriteURI(LLUserAuth::getInstance()->getResponse("next_url"));
1115 sAuthUriNum = 0; 1094 sAuthUriNum = 0;
1116 auth_method = gUserAuthp->getResponse("next_method"); 1095 auth_method = LLUserAuth::getInstance()->getResponse("next_method");
1117 auth_message = gUserAuthp->getResponse("message"); 1096 auth_message = LLUserAuth::getInstance()->getResponse("message");
1118 if(auth_method.substr(0, 5) == "login") 1097 if(auth_method.substr(0, 5) == "login")
1119 { 1098 {
1120 auth_desc.assign("Authenticating..."); 1099 auth_desc.assign("Authenticating...");
@@ -1131,8 +1110,8 @@ BOOL idle_startup()
1131 else 1110 else
1132 { 1111 {
1133 emsg << "Login failed.\n"; 1112 emsg << "Login failed.\n";
1134 reason_response = gUserAuthp->getResponse("reason"); 1113 reason_response = LLUserAuth::getInstance()->getResponse("reason");
1135 message_response = gUserAuthp->getResponse("message"); 1114 message_response = LLUserAuth::getInstance()->getResponse("message");
1136 1115
1137 if (gHideLinks && reason_response && (0 == strcmp(reason_response, "disabled"))) 1116 if (gHideLinks && reason_response && (0 == strcmp(reason_response, "disabled")))
1138 { 1117 {
@@ -1195,7 +1174,7 @@ BOOL idle_startup()
1195 } 1174 }
1196 if(reason_response && (0 == strcmp(reason_response, "update"))) 1175 if(reason_response && (0 == strcmp(reason_response, "update")))
1197 { 1176 {
1198 auth_message = gUserAuthp->getResponse("message"); 1177 auth_message = LLUserAuth::getInstance()->getResponse("message");
1199 if (show_connect_box) 1178 if (show_connect_box)
1200 { 1179 {
1201 update_app(TRUE, auth_message); 1180 update_app(TRUE, auth_message);
@@ -1210,7 +1189,7 @@ BOOL idle_startup()
1210 if(reason_response && (0 == strcmp(reason_response, "optional"))) 1189 if(reason_response && (0 == strcmp(reason_response, "optional")))
1211 { 1190 {
1212 llinfos << "Login got optional update" << llendl; 1191 llinfos << "Login got optional update" << llendl;
1213 auth_message = gUserAuthp->getResponse("message"); 1192 auth_message = LLUserAuth::getInstance()->getResponse("message");
1214 if (show_connect_box) 1193 if (show_connect_box)
1215 { 1194 {
1216 update_app(FALSE, auth_message); 1195 update_app(FALSE, auth_message);
@@ -1230,7 +1209,7 @@ BOOL idle_startup()
1230 if (sAuthUriNum >= (int) sAuthUris.size() - 1) 1209 if (sAuthUriNum >= (int) sAuthUris.size() - 1)
1231 { 1210 {
1232 emsg << "Unable to connect to " << LLAppViewer::instance()->getSecondLifeTitle() << ".\n"; 1211 emsg << "Unable to connect to " << LLAppViewer::instance()->getSecondLifeTitle() << ".\n";
1233 emsg << gUserAuthp->errorMessage(); 1212 emsg << LLUserAuth::getInstance()->errorMessage();
1234 } else { 1213 } else {
1235 sAuthUriNum++; 1214 sAuthUriNum++;
1236 std::ostringstream s; 1215 std::ostringstream s;
@@ -1238,7 +1217,6 @@ BOOL idle_startup()
1238 << (sAuthUriNum + 1) << ". "; 1217 << (sAuthUriNum + 1) << ". ";
1239 auth_desc = s.str(); 1218 auth_desc = s.str();
1240 LLStartUp::setStartupState( STATE_LOGIN_AUTHENTICATE ); 1219 LLStartUp::setStartupState( STATE_LOGIN_AUTHENTICATE );
1241 sAuthUriNum++;
1242 return do_normal_idle; 1220 return do_normal_idle;
1243 } 1221 }
1244 break; 1222 break;
@@ -1247,33 +1225,27 @@ BOOL idle_startup()
1247 // Version update and we're not showing the dialog 1225 // Version update and we're not showing the dialog
1248 if(quit) 1226 if(quit)
1249 { 1227 {
1250 delete gUserAuthp; 1228 LLUserAuth::getInstance()->reset();
1251 gUserAuthp = NULL;
1252 LLAppViewer::instance()->forceQuit(); 1229 LLAppViewer::instance()->forceQuit();
1253 return FALSE; 1230 return FALSE;
1254 } 1231 }
1255 1232
1256 if(successful_login) 1233 if(successful_login)
1257 { 1234 {
1258 if (!gUserAuthp)
1259 {
1260 llerrs << "No userauth on successful login!" << llendl;
1261 }
1262
1263 // unpack login data needed by the application 1235 // unpack login data needed by the application
1264 const char* text; 1236 const char* text;
1265 text = gUserAuthp->getResponse("agent_id"); 1237 text = LLUserAuth::getInstance()->getResponse("agent_id");
1266 if(text) gAgentID.set(text); 1238 if(text) gAgentID.set(text);
1267 gDebugInfo["AgentID"] = text; 1239 gDebugInfo["AgentID"] = text;
1268 1240
1269 text = gUserAuthp->getResponse("session_id"); 1241 text = LLUserAuth::getInstance()->getResponse("session_id");
1270 if(text) gAgentSessionID.set(text); 1242 if(text) gAgentSessionID.set(text);
1271 gDebugInfo["SessionID"] = text; 1243 gDebugInfo["SessionID"] = text;
1272 1244
1273 text = gUserAuthp->getResponse("secure_session_id"); 1245 text = LLUserAuth::getInstance()->getResponse("secure_session_id");
1274 if(text) gAgent.mSecureSessionID.set(text); 1246 if(text) gAgent.mSecureSessionID.set(text);
1275 1247
1276 text = gUserAuthp->getResponse("first_name"); 1248 text = LLUserAuth::getInstance()->getResponse("first_name");
1277 if(text) 1249 if(text)
1278 { 1250 {
1279 // Remove quotes from string. Login.cgi sends these to force 1251 // Remove quotes from string. Login.cgi sends these to force
@@ -1282,7 +1254,7 @@ BOOL idle_startup()
1282 LLString::replaceChar(firstname, '"', ' '); 1254 LLString::replaceChar(firstname, '"', ' ');
1283 LLString::trim(firstname); 1255 LLString::trim(firstname);
1284 } 1256 }
1285 text = gUserAuthp->getResponse("last_name"); 1257 text = LLUserAuth::getInstance()->getResponse("last_name");
1286 if(text) lastname.assign(text); 1258 if(text) lastname.assign(text);
1287 gSavedSettings.setString("FirstName", firstname); 1259 gSavedSettings.setString("FirstName", firstname);
1288 gSavedSettings.setString("LastName", lastname); 1260 gSavedSettings.setString("LastName", lastname);
@@ -1298,7 +1270,7 @@ BOOL idle_startup()
1298 gSavedSettings.setBOOL("RememberPassword", remember_password); 1270 gSavedSettings.setBOOL("RememberPassword", remember_password);
1299 gSavedSettings.setBOOL("LoginLastLocation", gSavedSettings.getBOOL("LoginLastLocation")); 1271 gSavedSettings.setBOOL("LoginLastLocation", gSavedSettings.getBOOL("LoginLastLocation"));
1300 1272
1301 text = gUserAuthp->getResponse("agent_access"); 1273 text = LLUserAuth::getInstance()->getResponse("agent_access");
1302 if(text && (text[0] == 'M')) 1274 if(text && (text[0] == 'M'))
1303 { 1275 {
1304 gAgent.setTeen(false); 1276 gAgent.setTeen(false);
@@ -1308,15 +1280,15 @@ BOOL idle_startup()
1308 gAgent.setTeen(true); 1280 gAgent.setTeen(true);
1309 } 1281 }
1310 1282
1311 text = gUserAuthp->getResponse("start_location"); 1283 text = LLUserAuth::getInstance()->getResponse("start_location");
1312 if(text) agent_start_location.assign(text); 1284 if(text) agent_start_location.assign(text);
1313 text = gUserAuthp->getResponse("circuit_code"); 1285 text = LLUserAuth::getInstance()->getResponse("circuit_code");
1314 if(text) 1286 if(text)
1315 { 1287 {
1316 gMessageSystem->mOurCircuitCode = strtoul(text, NULL, 10); 1288 gMessageSystem->mOurCircuitCode = strtoul(text, NULL, 10);
1317 } 1289 }
1318 const char* sim_ip_str = gUserAuthp->getResponse("sim_ip"); 1290 const char* sim_ip_str = LLUserAuth::getInstance()->getResponse("sim_ip");
1319 const char* sim_port_str = gUserAuthp->getResponse("sim_port"); 1291 const char* sim_port_str = LLUserAuth::getInstance()->getResponse("sim_port");
1320 if(sim_ip_str && sim_port_str) 1292 if(sim_ip_str && sim_port_str)
1321 { 1293 {
1322 U32 sim_port = strtoul(sim_port_str, NULL, 10); 1294 U32 sim_port = strtoul(sim_port_str, NULL, 10);
@@ -1326,8 +1298,8 @@ BOOL idle_startup()
1326 gMessageSystem->enableCircuit(first_sim, TRUE); 1298 gMessageSystem->enableCircuit(first_sim, TRUE);
1327 } 1299 }
1328 } 1300 }
1329 const char* region_x_str = gUserAuthp->getResponse("region_x"); 1301 const char* region_x_str = LLUserAuth::getInstance()->getResponse("region_x");
1330 const char* region_y_str = gUserAuthp->getResponse("region_y"); 1302 const char* region_y_str = LLUserAuth::getInstance()->getResponse("region_y");
1331 if(region_x_str && region_y_str) 1303 if(region_x_str && region_y_str)
1332 { 1304 {
1333 U32 region_x = strtoul(region_x_str, NULL, 10); 1305 U32 region_x = strtoul(region_x_str, NULL, 10);
@@ -1335,7 +1307,7 @@ BOOL idle_startup()
1335 first_sim_handle = to_region_handle(region_x, region_y); 1307 first_sim_handle = to_region_handle(region_x, region_y);
1336 } 1308 }
1337 1309
1338 const char* look_at_str = gUserAuthp->getResponse("look_at"); 1310 const char* look_at_str = LLUserAuth::getInstance()->getResponse("look_at");
1339 if (look_at_str) 1311 if (look_at_str)
1340 { 1312 {
1341#if !LL_WINDOWS && !LL_DARWIN 1313#if !LL_WINDOWS && !LL_DARWIN
@@ -1348,10 +1320,10 @@ BOOL idle_startup()
1348 agent_start_look_at = ll_vector3_from_sd(sd); 1320 agent_start_look_at = ll_vector3_from_sd(sd);
1349 } 1321 }
1350 1322
1351 text = gUserAuthp->getResponse("seed_capability"); 1323 text = LLUserAuth::getInstance()->getResponse("seed_capability");
1352 if (text) first_sim_seed_cap = text; 1324 if (text) first_sim_seed_cap = text;
1353 1325
1354 text = gUserAuthp->getResponse("seconds_since_epoch"); 1326 text = LLUserAuth::getInstance()->getResponse("seconds_since_epoch");
1355 if(text) 1327 if(text)
1356 { 1328 {
1357 U32 server_utc_time = strtoul(text, NULL, 10); 1329 U32 server_utc_time = strtoul(text, NULL, 10);
@@ -1362,7 +1334,7 @@ BOOL idle_startup()
1362 } 1334 }
1363 } 1335 }
1364 1336
1365 const char* home_location = gUserAuthp->getResponse("home"); 1337 const char* home_location = LLUserAuth::getInstance()->getResponse("home");
1366 if(home_location) 1338 if(home_location)
1367 { 1339 {
1368#if !LL_WINDOWS && !LL_DARWIN 1340#if !LL_WINDOWS && !LL_DARWIN
@@ -1379,9 +1351,9 @@ BOOL idle_startup()
1379 gAgent.setHomePosRegion(region_handle, position); 1351 gAgent.setHomePosRegion(region_handle, position);
1380 } 1352 }
1381 1353
1382 gAgent.mMOTD.assign(gUserAuthp->getResponse("message")); 1354 gAgent.mMOTD.assign(LLUserAuth::getInstance()->getResponse("message"));
1383 LLUserAuth::options_t options; 1355 LLUserAuth::options_t options;
1384 if(gUserAuthp->getOptions("inventory-root", options)) 1356 if(LLUserAuth::getInstance()->getOptions("inventory-root", options))
1385 { 1357 {
1386 LLUserAuth::response_t::iterator it; 1358 LLUserAuth::response_t::iterator it;
1387 it = options[0].find("folder_id"); 1359 it = options[0].find("folder_id");
@@ -1393,7 +1365,7 @@ BOOL idle_startup()
1393 } 1365 }
1394 1366
1395 options.clear(); 1367 options.clear();
1396 if(gUserAuthp->getOptions("login-flags", options)) 1368 if(LLUserAuth::getInstance()->getOptions("login-flags", options))
1397 { 1369 {
1398 LLUserAuth::response_t::iterator it; 1370 LLUserAuth::response_t::iterator it;
1399 LLUserAuth::response_t::iterator no_flag = options[0].end(); 1371 LLUserAuth::response_t::iterator no_flag = options[0].end();
@@ -1421,7 +1393,7 @@ BOOL idle_startup()
1421 } 1393 }
1422 } 1394 }
1423 options.clear(); 1395 options.clear();
1424 if (gUserAuthp->getOptions("initial-outfit", options) 1396 if (LLUserAuth::getInstance()->getOptions("initial-outfit", options)
1425 && !options.empty()) 1397 && !options.empty())
1426 { 1398 {
1427 LLUserAuth::response_t::iterator it; 1399 LLUserAuth::response_t::iterator it;
@@ -1439,7 +1411,7 @@ BOOL idle_startup()
1439 } 1411 }
1440 1412
1441 options.clear(); 1413 options.clear();
1442 if(gUserAuthp->getOptions("global-textures", options)) 1414 if(LLUserAuth::getInstance()->getOptions("global-textures", options))
1443 { 1415 {
1444 // Extract sun and moon texture IDs. These are used 1416 // Extract sun and moon texture IDs. These are used
1445 // in the LLVOSky constructor, but I can't figure out 1417 // in the LLVOSky constructor, but I can't figure out
@@ -1488,7 +1460,7 @@ BOOL idle_startup()
1488 args["[ERROR_MESSAGE]"] = emsg.str(); 1460 args["[ERROR_MESSAGE]"] = emsg.str();
1489 gViewerWindow->alertXml("ErrorMessage", args, login_alert_done); 1461 gViewerWindow->alertXml("ErrorMessage", args, login_alert_done);
1490 reset_login(); 1462 reset_login();
1491 gAutoLogin = FALSE; 1463 gSavedSettings.setBOOL("AutoLogin", FALSE);
1492 show_connect_box = TRUE; 1464 show_connect_box = TRUE;
1493 } 1465 }
1494 1466
@@ -1508,7 +1480,7 @@ BOOL idle_startup()
1508 args["[ERROR_MESSAGE]"] = emsg.str(); 1480 args["[ERROR_MESSAGE]"] = emsg.str();
1509 gViewerWindow->alertXml("ErrorMessage", args, login_alert_done); 1481 gViewerWindow->alertXml("ErrorMessage", args, login_alert_done);
1510 reset_login(); 1482 reset_login();
1511 gAutoLogin = FALSE; 1483 gSavedSettings.setBOOL("AutoLogin", FALSE);
1512 show_connect_box = TRUE; 1484 show_connect_box = TRUE;
1513 // Don't save an incorrect password to disk. 1485 // Don't save an incorrect password to disk.
1514 save_password_to_disk(NULL); 1486 save_password_to_disk(NULL);
@@ -1532,7 +1504,7 @@ BOOL idle_startup()
1532 1504
1533 // Since we connected, save off the settings so the user doesn't have to 1505 // Since we connected, save off the settings so the user doesn't have to
1534 // type the name/password again if we crash. 1506 // type the name/password again if we crash.
1535 gSavedSettings.saveToFile(gSettingsFileName, TRUE); 1507 gSavedSettings.saveToFile(gSavedSettings.getString("ClientSettingsFile"), TRUE);
1536 1508
1537 // 1509 //
1538 // Initialize classes w/graphics stuff. 1510 // Initialize classes w/graphics stuff.
@@ -1554,11 +1526,11 @@ BOOL idle_startup()
1554 1526
1555 display_startup(); 1527 display_startup();
1556 1528
1529 // This is where we used to initialize gWorldp. Original comment said:
1557 // World initialization must be done after above window init 1530 // World initialization must be done after above window init
1558 gWorldp = new LLWorld(region_size, region_scale);
1559 1531
1560 // User might have overridden far clip 1532 // User might have overridden far clip
1561 gWorldp->setLandFarClip( gAgent.mDrawDistance ); 1533 LLWorld::getInstance()->setLandFarClip( gAgent.mDrawDistance );
1562 1534
1563 // Before we create the first region, we need to set the agent's mOriginGlobal 1535 // Before we create the first region, we need to set the agent's mOriginGlobal
1564 // This is necessary because creating objects before this is set will result in a 1536 // This is necessary because creating objects before this is set will result in a
@@ -1566,9 +1538,9 @@ BOOL idle_startup()
1566 1538
1567 gAgent.initOriginGlobal(from_region_handle(first_sim_handle)); 1539 gAgent.initOriginGlobal(from_region_handle(first_sim_handle));
1568 1540
1569 gWorldp->addRegion(first_sim_handle, first_sim); 1541 LLWorld::getInstance()->addRegion(first_sim_handle, first_sim);
1570 1542
1571 LLViewerRegion *regionp = gWorldp->getRegionFromHandle(first_sim_handle); 1543 LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromHandle(first_sim_handle);
1572 llinfos << "Adding initial simulator " << regionp->getOriginGlobal() << llendl; 1544 llinfos << "Adding initial simulator " << regionp->getOriginGlobal() << llendl;
1573 1545
1574 LLStartUp::setStartupState( STATE_SEED_GRANTED_WAIT ); 1546 LLStartUp::setStartupState( STATE_SEED_GRANTED_WAIT );
@@ -1604,7 +1576,7 @@ BOOL idle_startup()
1604 { 1576 {
1605 update_texture_fetch(); 1577 update_texture_fetch();
1606 1578
1607 if ( gViewerWindow != NULL && gToolMgr != NULL ) 1579 if ( gViewerWindow != NULL)
1608 { // This isn't the first logon attempt, so show the UI 1580 { // This isn't the first logon attempt, so show the UI
1609 gViewerWindow->setNormalControlsVisible( TRUE ); 1581 gViewerWindow->setNormalControlsVisible( TRUE );
1610 } 1582 }
@@ -1615,11 +1587,16 @@ BOOL idle_startup()
1615 1587
1616 if (gSavedSettings.getBOOL("ShowCameraControls")) 1588 if (gSavedSettings.getBOOL("ShowCameraControls"))
1617 { 1589 {
1618 LLFloaterCamera::show(NULL); 1590 LLFloaterCamera::showInstance();
1619 } 1591 }
1620 if (gSavedSettings.getBOOL("ShowMovementControls")) 1592 if (gSavedSettings.getBOOL("ShowMovementControls"))
1621 { 1593 {
1622 LLFloaterMove::show(NULL); 1594 LLFloaterMove::showInstance();
1595 }
1596
1597 if (gSavedSettings.getBOOL("ShowActiveSpeakers"))
1598 {
1599 LLFloaterActiveSpeakers::showInstance();
1623 } 1600 }
1624 1601
1625 if (!gNoRender) 1602 if (!gNoRender)
@@ -1630,7 +1607,7 @@ BOOL idle_startup()
1630 LLError::logToFixedBuffer(gDebugView->mDebugConsolep); 1607 LLError::logToFixedBuffer(gDebugView->mDebugConsolep);
1631 // set initial visibility of debug console 1608 // set initial visibility of debug console
1632 gDebugView->mDebugConsolep->setVisible(gSavedSettings.getBOOL("ShowDebugConsole")); 1609 gDebugView->mDebugConsolep->setVisible(gSavedSettings.getBOOL("ShowDebugConsole"));
1633 gDebugView->mStatViewp->setVisible(gSavedSettings.getBOOL("ShowDebugStats")); 1610 gDebugView->mFloaterStatsp->setVisible(gSavedSettings.getBOOL("ShowDebugStats"));
1634 } 1611 }
1635 1612
1636 // 1613 //
@@ -1660,18 +1637,14 @@ BOOL idle_startup()
1660 LLAppViewer::instance()->loadNameCache(); 1637 LLAppViewer::instance()->loadNameCache();
1661 } 1638 }
1662 1639
1663 // Data storage for map of world. 1640 // *Note: this is where gWorldMap used to be initialized.
1664 if ( gWorldMap == NULL )
1665 {
1666 gWorldMap = new LLWorldMap();
1667 }
1668 1641
1669 // register null callbacks for audio until the audio system is initialized 1642 // register null callbacks for audio until the audio system is initialized
1670 gMessageSystem->setHandlerFuncFast(_PREHASH_SoundTrigger, null_message_callback, NULL); 1643 gMessageSystem->setHandlerFuncFast(_PREHASH_SoundTrigger, null_message_callback, NULL);
1671 gMessageSystem->setHandlerFuncFast(_PREHASH_AttachedSound, null_message_callback, NULL); 1644 gMessageSystem->setHandlerFuncFast(_PREHASH_AttachedSound, null_message_callback, NULL);
1672 1645
1673 //reset statistics 1646 //reset statistics
1674 gViewerStats->resetStats(); 1647 LLViewerStats::getInstance()->resetStats();
1675 1648
1676 if (!gNoRender) 1649 if (!gNoRender)
1677 { 1650 {
@@ -1701,14 +1674,14 @@ BOOL idle_startup()
1701 } 1674 }
1702 1675
1703 // Make sure agent knows correct aspect ratio 1676 // Make sure agent knows correct aspect ratio
1704 gCamera->setViewHeightInPixels(gViewerWindow->getWindowDisplayHeight()); 1677 LLViewerCamera::getInstance()->setViewHeightInPixels(gViewerWindow->getWindowDisplayHeight());
1705 if (gViewerWindow->mWindow->getFullscreen()) 1678 if (gViewerWindow->mWindow->getFullscreen())
1706 { 1679 {
1707 gCamera->setAspect(gViewerWindow->getDisplayAspectRatio()); 1680 LLViewerCamera::getInstance()->setAspect(gViewerWindow->getDisplayAspectRatio());
1708 } 1681 }
1709 else 1682 else
1710 { 1683 {
1711 gCamera->setAspect( (F32) gViewerWindow->getWindowWidth() / (F32) gViewerWindow->getWindowHeight()); 1684 LLViewerCamera::getInstance()->setAspect( (F32) gViewerWindow->getWindowWidth() / (F32) gViewerWindow->getWindowHeight());
1712 } 1685 }
1713 1686
1714 // Move agent to starting location. The position handed to us by 1687 // Move agent to starting location. The position handed to us by
@@ -1821,10 +1794,10 @@ BOOL idle_startup()
1821 // But not on first login, because you can't see your avatar then 1794 // But not on first login, because you can't see your avatar then
1822 if (!gAgent.isFirstLogin()) 1795 if (!gAgent.isFirstLogin())
1823 { 1796 {
1824 LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)gHUDManager->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINT, TRUE); 1797 LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINT, TRUE);
1825 effectp->setPositionGlobal(gAgent.getPositionGlobal()); 1798 effectp->setPositionGlobal(gAgent.getPositionGlobal());
1826 effectp->setColor(LLColor4U(gAgent.getEffectColor())); 1799 effectp->setColor(LLColor4U(gAgent.getEffectColor()));
1827 gHUDManager->sendEffects(); 1800 LLHUDManager::getInstance()->sendEffects();
1828 } 1801 }
1829 1802
1830 LLStartUp::setStartupState( STATE_AGENT_WAIT ); // Go to STATE_AGENT_WAIT 1803 LLStartUp::setStartupState( STATE_AGENT_WAIT ); // Go to STATE_AGENT_WAIT
@@ -1870,17 +1843,12 @@ BOOL idle_startup()
1870 //--------------------------------------------------------------------- 1843 //---------------------------------------------------------------------
1871 if (STATE_INVENTORY_SEND == LLStartUp::getStartupState()) 1844 if (STATE_INVENTORY_SEND == LLStartUp::getStartupState())
1872 { 1845 {
1873 if (!gUserAuthp)
1874 {
1875 llerrs << "No userauth in STATE_INVENTORY_SEND!" << llendl;
1876 }
1877
1878 // unpack thin inventory 1846 // unpack thin inventory
1879 LLUserAuth::options_t options; 1847 LLUserAuth::options_t options;
1880 options.clear(); 1848 options.clear();
1881 //bool dump_buffer = false; 1849 //bool dump_buffer = false;
1882 1850
1883 if(gUserAuthp->getOptions("inventory-lib-root", options) 1851 if(LLUserAuth::getInstance()->getOptions("inventory-lib-root", options)
1884 && !options.empty()) 1852 && !options.empty())
1885 { 1853 {
1886 // should only be one 1854 // should only be one
@@ -1892,7 +1860,7 @@ BOOL idle_startup()
1892 } 1860 }
1893 } 1861 }
1894 options.clear(); 1862 options.clear();
1895 if(gUserAuthp->getOptions("inventory-lib-owner", options) 1863 if(LLUserAuth::getInstance()->getOptions("inventory-lib-owner", options)
1896 && !options.empty()) 1864 && !options.empty())
1897 { 1865 {
1898 // should only be one 1866 // should only be one
@@ -1904,7 +1872,7 @@ BOOL idle_startup()
1904 } 1872 }
1905 } 1873 }
1906 options.clear(); 1874 options.clear();
1907 if(gUserAuthp->getOptions("inventory-skel-lib", options) 1875 if(LLUserAuth::getInstance()->getOptions("inventory-skel-lib", options)
1908 && gInventoryLibraryOwner.notNull()) 1876 && gInventoryLibraryOwner.notNull())
1909 { 1877 {
1910 if(!gInventory.loadSkeleton(options, gInventoryLibraryOwner)) 1878 if(!gInventory.loadSkeleton(options, gInventoryLibraryOwner))
@@ -1913,7 +1881,7 @@ BOOL idle_startup()
1913 } 1881 }
1914 } 1882 }
1915 options.clear(); 1883 options.clear();
1916 if(gUserAuthp->getOptions("inventory-skeleton", options)) 1884 if(LLUserAuth::getInstance()->getOptions("inventory-skeleton", options))
1917 { 1885 {
1918 if(!gInventory.loadSkeleton(options, gAgent.getID())) 1886 if(!gInventory.loadSkeleton(options, gAgent.getID()))
1919 { 1887 {
@@ -1923,7 +1891,7 @@ BOOL idle_startup()
1923 } 1891 }
1924 1892
1925 options.clear(); 1893 options.clear();
1926 if(gUserAuthp->getOptions("buddy-list", options)) 1894 if(LLUserAuth::getInstance()->getOptions("buddy-list", options))
1927 { 1895 {
1928 LLUserAuth::options_t::iterator it = options.begin(); 1896 LLUserAuth::options_t::iterator it = options.begin();
1929 LLUserAuth::options_t::iterator end = options.end(); 1897 LLUserAuth::options_t::iterator end = options.end();
@@ -1954,7 +1922,7 @@ BOOL idle_startup()
1954 } 1922 }
1955 1923
1956 options.clear(); 1924 options.clear();
1957 if(gUserAuthp->getOptions("ui-config", options)) 1925 if(LLUserAuth::getInstance()->getOptions("ui-config", options))
1958 { 1926 {
1959 LLUserAuth::options_t::iterator it = options.begin(); 1927 LLUserAuth::options_t::iterator it = options.begin();
1960 LLUserAuth::options_t::iterator end = options.end(); 1928 LLUserAuth::options_t::iterator end = options.end();
@@ -1971,18 +1939,41 @@ BOOL idle_startup()
1971 } 1939 }
1972 } 1940 }
1973 } 1941 }
1942 options.clear();
1943 if(LLUserAuth::getInstance()->getOptions("tutorial_setting", options))
1944 {
1945 LLUserAuth::options_t::iterator it = options.begin();
1946 LLUserAuth::options_t::iterator end = options.end();
1947 for (; it != end; ++it)
1948 {
1949 LLUserAuth::response_t::const_iterator option_it;
1950 option_it = (*it).find("tutorial_url");
1951 if(option_it != (*it).end())
1952 {
1953 LLFloaterHUD::sTutorialUrl = option_it->second;
1954 }
1955 option_it = (*it).find("use_tutorial");
1956 if(option_it != (*it).end())
1957 {
1958 if (option_it->second == "true")
1959 {
1960 LLFloaterHUD::show();
1961 }
1962 }
1963 }
1964 }
1974 1965
1975 options.clear(); 1966 options.clear();
1976 if(gUserAuthp->getOptions("event_categories", options)) 1967 if(LLUserAuth::getInstance()->getOptions("event_categories", options))
1977 { 1968 {
1978 LLEventInfo::loadCategories(options); 1969 LLEventInfo::loadCategories(options);
1979 } 1970 }
1980 if(gUserAuthp->getOptions("event_notifications", options)) 1971 if(LLUserAuth::getInstance()->getOptions("event_notifications", options))
1981 { 1972 {
1982 gEventNotifier.load(options); 1973 gEventNotifier.load(options);
1983 } 1974 }
1984 options.clear(); 1975 options.clear();
1985 if(gUserAuthp->getOptions("classified_categories", options)) 1976 if(LLUserAuth::getInstance()->getOptions("classified_categories", options))
1986 { 1977 {
1987 LLClassifiedInfo::loadCategories(options); 1978 LLClassifiedInfo::loadCategories(options);
1988 } 1979 }
@@ -1997,7 +1988,7 @@ BOOL idle_startup()
1997 LLLandmark::registerCallbacks(msg); 1988 LLLandmark::registerCallbacks(msg);
1998 1989
1999 // request mute list 1990 // request mute list
2000 gMuteListp->requestFromServer(gAgent.getID()); 1991 LLMuteList::getInstance()->requestFromServer(gAgent.getID());
2001 1992
2002 // Get L$ and ownership credit information 1993 // Get L$ and ownership credit information
2003 msg->newMessageFast(_PREHASH_MoneyBalanceRequest); 1994 msg->newMessageFast(_PREHASH_MoneyBalanceRequest);
@@ -2035,13 +2026,12 @@ BOOL idle_startup()
2035 // We have a region, and just did a big inventory download. 2026 // We have a region, and just did a big inventory download.
2036 // We can estimate the user's connection speed, and set their 2027 // We can estimate the user's connection speed, and set their
2037 // max bandwidth accordingly. JC 2028 // max bandwidth accordingly. JC
2038 if (gSavedSettings.getBOOL("FirstLoginThisInstall") 2029 if (gSavedSettings.getBOOL("FirstLoginThisInstall"))
2039 && gUserAuthp)
2040 { 2030 {
2041 // This is actually a pessimistic computation, because TCP may not have enough 2031 // This is actually a pessimistic computation, because TCP may not have enough
2042 // time to ramp up on the (small) default inventory file to truly measure max 2032 // time to ramp up on the (small) default inventory file to truly measure max
2043 // bandwidth. JC 2033 // bandwidth. JC
2044 F64 rate_bps = gUserAuthp->getLastTransferRateBPS(); 2034 F64 rate_bps = LLUserAuth::getInstance()->getLastTransferRateBPS();
2045 const F32 FAST_RATE_BPS = 600.f * 1024.f; 2035 const F32 FAST_RATE_BPS = 600.f * 1024.f;
2046 const F32 FASTER_RATE_BPS = 750.f * 1024.f; 2036 const F32 FASTER_RATE_BPS = 750.f * 1024.f;
2047 F32 max_bandwidth = gViewerThrottle.getMaxBandwidth(); 2037 F32 max_bandwidth = gViewerThrottle.getMaxBandwidth();
@@ -2076,7 +2066,7 @@ BOOL idle_startup()
2076 gSavedSettings.setString( "NextLoginLocation", "" ); 2066 gSavedSettings.setString( "NextLoginLocation", "" );
2077 2067
2078 // and make sure it's saved 2068 // and make sure it's saved
2079 gSavedSettings.saveToFile( gSettingsFileName, TRUE ); 2069 gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile") , TRUE );
2080 }; 2070 };
2081 2071
2082 if (!gNoRender) 2072 if (!gNoRender)
@@ -2088,7 +2078,7 @@ BOOL idle_startup()
2088 // many gesture downloads, if this is the user's first 2078 // many gesture downloads, if this is the user's first
2089 // time on this machine or -purge has been run. 2079 // time on this machine or -purge has been run.
2090 LLUserAuth::options_t gesture_options; 2080 LLUserAuth::options_t gesture_options;
2091 if (gUserAuthp->getOptions("gestures", gesture_options)) 2081 if (LLUserAuth::getInstance()->getOptions("gestures", gesture_options))
2092 { 2082 {
2093 llinfos << "Gesture Manager loading " << gesture_options.size() 2083 llinfos << "Gesture Manager loading " << gesture_options.size()
2094 << llendl; 2084 << llendl;
@@ -2228,8 +2218,9 @@ BOOL idle_startup()
2228 else 2218 else
2229 { 2219 {
2230 update_texture_fetch(); 2220 update_texture_fetch();
2231 set_startup_status(0.60f + 0.40f * timeout_frac, "Precaching...", 2221 set_startup_status(0.60f + 0.40f * timeout_frac,
2232 gAgent.mMOTD.c_str()); 2222 "Loading world...",
2223 gAgent.mMOTD.c_str());
2233 } 2224 }
2234 2225
2235 return do_normal_idle; 2226 return do_normal_idle;
@@ -2251,7 +2242,7 @@ BOOL idle_startup()
2251 else if (wearables_time > MAX_WEARABLES_TIME) 2242 else if (wearables_time > MAX_WEARABLES_TIME)
2252 { 2243 {
2253 gViewerWindow->alertXml("ClothingLoading"); 2244 gViewerWindow->alertXml("ClothingLoading");
2254 gViewerStats->incStat(LLViewerStats::ST_WEARABLES_TOO_LONG); 2245 LLViewerStats::getInstance()->incStat(LLViewerStats::ST_WEARABLES_TOO_LONG);
2255 LLStartUp::setStartupState( STATE_CLEANUP ); 2246 LLStartUp::setStartupState( STATE_CLEANUP );
2256 } 2247 }
2257 else 2248 else
@@ -2298,9 +2289,6 @@ BOOL idle_startup()
2298 // On first start, ask user for gender 2289 // On first start, ask user for gender
2299 dialog_choose_gender_first_start(); 2290 dialog_choose_gender_first_start();
2300 2291
2301 // setup voice
2302 LLFirstUse::useVoice();
2303
2304 // Start automatic replay if the flag is set. 2292 // Start automatic replay if the flag is set.
2305 if (gSavedSettings.getBOOL("StatsAutoRun")) 2293 if (gSavedSettings.getBOOL("StatsAutoRun"))
2306 { 2294 {
@@ -2311,13 +2299,9 @@ BOOL idle_startup()
2311 2299
2312 // If we've got a startup URL, dispatch it 2300 // If we've got a startup URL, dispatch it
2313 LLStartUp::dispatchURL(); 2301 LLStartUp::dispatchURL();
2314 2302
2315 // Clean up the userauth stuff. 2303 // Clean up the userauth stuff.
2316 if (gUserAuthp) 2304 LLUserAuth::getInstance()->reset();
2317 {
2318 delete gUserAuthp;
2319 gUserAuthp = NULL;
2320 }
2321 2305
2322 LLStartUp::setStartupState( STATE_STARTED ); 2306 LLStartUp::setStartupState( STATE_STARTED );
2323 2307
@@ -2367,7 +2351,7 @@ void login_show()
2367 2351
2368 if( GRID_INFO_OTHER == gGridChoice ) 2352 if( GRID_INFO_OTHER == gGridChoice )
2369 { 2353 {
2370 LLPanelLogin::addServer( gGridName, GRID_INFO_OTHER ); 2354 LLPanelLogin::addServer( gGridName.c_str(), GRID_INFO_OTHER );
2371 } 2355 }
2372 else 2356 else
2373 { 2357 {
@@ -2415,7 +2399,7 @@ void login_callback(S32 option, void *userdata)
2415 { 2399 {
2416 // turn off the setting and write out to disk 2400 // turn off the setting and write out to disk
2417 gSavedSettings.setBOOL("RememberPassword", FALSE); 2401 gSavedSettings.setBOOL("RememberPassword", FALSE);
2418 gSavedSettings.saveToFile(gSettingsFileName, TRUE); 2402 gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile") , TRUE );
2419 2403
2420 // stomp the saved password on disk 2404 // stomp the saved password on disk
2421 save_password_to_disk(NULL); 2405 save_password_to_disk(NULL);
@@ -2609,7 +2593,7 @@ void login_alert_status(S32 option, void* user_data)
2609void update_app(BOOL mandatory, const std::string& auth_msg) 2593void update_app(BOOL mandatory, const std::string& auth_msg)
2610{ 2594{
2611 // store off config state, as we might quit soon 2595 // store off config state, as we might quit soon
2612 gSavedSettings.saveToFile(gSettingsFileName, TRUE); 2596 gSavedSettings.saveToFile(gSavedSettings.getString("ClientSettingsFile"), TRUE);
2613 2597
2614 std::ostringstream message; 2598 std::ostringstream message;
2615 2599
@@ -2709,7 +2693,7 @@ void update_dialog_callback(S32 option, void *userdata)
2709 // *TODO change userserver to be grid on both viewer and sim, since 2693 // *TODO change userserver to be grid on both viewer and sim, since
2710 // userserver no longer exists. 2694 // userserver no longer exists.
2711 query_map["userserver"] = gGridName; 2695 query_map["userserver"] = gGridName;
2712 query_map["channel"] = gChannelName; 2696 query_map["channel"] = gSavedSettings.getString("VersionChannelName");
2713 // *TODO constantize this guy 2697 // *TODO constantize this guy
2714 LLURI update_url = LLURI::buildHTTP("secondlife.com", 80, "update.php", query_map); 2698 LLURI update_url = LLURI::buildHTTP("secondlife.com", 80, "update.php", query_map);
2715 2699
@@ -3037,7 +3021,7 @@ void init_stat_view()
3037 3021
3038 LLRect rect; 3022 LLRect rect;
3039 LLStatBar *stat_barp; 3023 LLStatBar *stat_barp;
3040 rect = gDebugView->mStatViewp->getRect(); 3024 rect = gDebugView->mFloaterStatsp->getRect();
3041 3025
3042 // 3026 //
3043 // Viewer advanced stats 3027 // Viewer advanced stats
@@ -3048,9 +3032,9 @@ void init_stat_view()
3048 // Viewer Basic 3032 // Viewer Basic
3049 // 3033 //
3050 stat_viewp = new LLStatView("basic stat view", "Basic", "OpenDebugStatBasic", rect); 3034 stat_viewp = new LLStatView("basic stat view", "Basic", "OpenDebugStatBasic", rect);
3051 gDebugView->mStatViewp->addChildAtEnd(stat_viewp); 3035 gDebugView->mFloaterStatsp->addStatView(stat_viewp);
3052 3036
3053 stat_barp = stat_viewp->addStat("FPS", &(gViewerStats->mFPSStat)); 3037 stat_barp = stat_viewp->addStat("FPS", &(LLViewerStats::getInstance()->mFPSStat));
3054 stat_barp->setUnitLabel(" fps"); 3038 stat_barp->setUnitLabel(" fps");
3055 stat_barp->mMinBar = 0.f; 3039 stat_barp->mMinBar = 0.f;
3056 stat_barp->mMaxBar = 45.f; 3040 stat_barp->mMaxBar = 45.f;
@@ -3060,7 +3044,7 @@ void init_stat_view()
3060 stat_barp->mDisplayBar = TRUE; 3044 stat_barp->mDisplayBar = TRUE;
3061 stat_barp->mDisplayHistory = TRUE; 3045 stat_barp->mDisplayHistory = TRUE;
3062 3046
3063 stat_barp = stat_viewp->addStat("Bandwidth", &(gViewerStats->mKBitStat)); 3047 stat_barp = stat_viewp->addStat("Bandwidth", &(LLViewerStats::getInstance()->mKBitStat));
3064 stat_barp->setUnitLabel(" kbps"); 3048 stat_barp->setUnitLabel(" kbps");
3065 stat_barp->mMinBar = 0.f; 3049 stat_barp->mMinBar = 0.f;
3066 stat_barp->mMaxBar = 900.f; 3050 stat_barp->mMaxBar = 900.f;
@@ -3069,7 +3053,7 @@ void init_stat_view()
3069 stat_barp->mDisplayBar = TRUE; 3053 stat_barp->mDisplayBar = TRUE;
3070 stat_barp->mDisplayHistory = FALSE; 3054 stat_barp->mDisplayHistory = FALSE;
3071 3055
3072 stat_barp = stat_viewp->addStat("Packet Loss", &(gViewerStats->mPacketsLostPercentStat)); 3056 stat_barp = stat_viewp->addStat("Packet Loss", &(LLViewerStats::getInstance()->mPacketsLostPercentStat));
3073 stat_barp->setUnitLabel(" %"); 3057 stat_barp->setUnitLabel(" %");
3074 stat_barp->mMinBar = 0.f; 3058 stat_barp->mMinBar = 0.f;
3075 stat_barp->mMaxBar = 5.f; 3059 stat_barp->mMaxBar = 5.f;
@@ -3080,7 +3064,7 @@ void init_stat_view()
3080 stat_barp->mDisplayMean = TRUE; 3064 stat_barp->mDisplayMean = TRUE;
3081 stat_barp->mPrecision = 1; 3065 stat_barp->mPrecision = 1;
3082 3066
3083 stat_barp = stat_viewp->addStat("Ping Sim", &(gViewerStats->mSimPingStat)); 3067 stat_barp = stat_viewp->addStat("Ping Sim", &(LLViewerStats::getInstance()->mSimPingStat));
3084 stat_barp->setUnitLabel(" msec"); 3068 stat_barp->setUnitLabel(" msec");
3085 stat_barp->mMinBar = 0.f; 3069 stat_barp->mMinBar = 0.f;
3086 stat_barp->mMaxBar = 1000.f; 3070 stat_barp->mMaxBar = 1000.f;
@@ -3092,7 +3076,7 @@ void init_stat_view()
3092 3076
3093 3077
3094 stat_viewp = new LLStatView("advanced stat view", "Advanced", "OpenDebugStatAdvanced", rect); 3078 stat_viewp = new LLStatView("advanced stat view", "Advanced", "OpenDebugStatAdvanced", rect);
3095 gDebugView->mStatViewp->addChildAtEnd(stat_viewp); 3079 gDebugView->mFloaterStatsp->addStatView(stat_viewp);
3096 3080
3097 3081
3098 LLStatView *render_statviewp; 3082 LLStatView *render_statviewp;
@@ -3200,31 +3184,31 @@ void init_stat_view()
3200 net_statviewp = new LLStatView("network stat view", "Network", "OpenDebugStatNet", rect); 3184 net_statviewp = new LLStatView("network stat view", "Network", "OpenDebugStatNet", rect);
3201 stat_viewp->addChildAtEnd(net_statviewp); 3185 stat_viewp->addChildAtEnd(net_statviewp);
3202 3186
3203 stat_barp = net_statviewp->addStat("Packets In", &(gViewerStats->mPacketsInStat)); 3187 stat_barp = net_statviewp->addStat("Packets In", &(LLViewerStats::getInstance()->mPacketsInStat));
3204 stat_barp->setUnitLabel("/sec"); 3188 stat_barp->setUnitLabel("/sec");
3205 stat_barp->mDisplayBar = FALSE; 3189 stat_barp->mDisplayBar = FALSE;
3206 3190
3207 stat_barp = net_statviewp->addStat("Packets Out", &(gViewerStats->mPacketsOutStat)); 3191 stat_barp = net_statviewp->addStat("Packets Out", &(LLViewerStats::getInstance()->mPacketsOutStat));
3208 stat_barp->setUnitLabel("/sec"); 3192 stat_barp->setUnitLabel("/sec");
3209 stat_barp->mDisplayBar = FALSE; 3193 stat_barp->mDisplayBar = FALSE;
3210 3194
3211 stat_barp = net_statviewp->addStat("Objects", &(gViewerStats->mObjectKBitStat)); 3195 stat_barp = net_statviewp->addStat("Objects", &(LLViewerStats::getInstance()->mObjectKBitStat));
3212 stat_barp->setUnitLabel(" kbps"); 3196 stat_barp->setUnitLabel(" kbps");
3213 stat_barp->mDisplayBar = FALSE; 3197 stat_barp->mDisplayBar = FALSE;
3214 3198
3215 stat_barp = net_statviewp->addStat("Texture", &(gViewerStats->mTextureKBitStat)); 3199 stat_barp = net_statviewp->addStat("Texture", &(LLViewerStats::getInstance()->mTextureKBitStat));
3216 stat_barp->setUnitLabel(" kbps"); 3200 stat_barp->setUnitLabel(" kbps");
3217 stat_barp->mDisplayBar = FALSE; 3201 stat_barp->mDisplayBar = FALSE;
3218 3202
3219 stat_barp = net_statviewp->addStat("Asset", &(gViewerStats->mAssetKBitStat)); 3203 stat_barp = net_statviewp->addStat("Asset", &(LLViewerStats::getInstance()->mAssetKBitStat));
3220 stat_barp->setUnitLabel(" kbps"); 3204 stat_barp->setUnitLabel(" kbps");
3221 stat_barp->mDisplayBar = FALSE; 3205 stat_barp->mDisplayBar = FALSE;
3222 3206
3223 stat_barp = net_statviewp->addStat("Layers", &(gViewerStats->mLayersKBitStat)); 3207 stat_barp = net_statviewp->addStat("Layers", &(LLViewerStats::getInstance()->mLayersKBitStat));
3224 stat_barp->setUnitLabel(" kbps"); 3208 stat_barp->setUnitLabel(" kbps");
3225 stat_barp->mDisplayBar = FALSE; 3209 stat_barp->mDisplayBar = FALSE;
3226 3210
3227 stat_barp = net_statviewp->addStat("Actual In", &(gViewerStats->mActualInKBitStat)); 3211 stat_barp = net_statviewp->addStat("Actual In", &(LLViewerStats::getInstance()->mActualInKBitStat));
3228 stat_barp->setUnitLabel(" kbps"); 3212 stat_barp->setUnitLabel(" kbps");
3229 stat_barp->mMinBar = 0.f; 3213 stat_barp->mMinBar = 0.f;
3230 stat_barp->mMaxBar = 1024.f; 3214 stat_barp->mMaxBar = 1024.f;
@@ -3233,7 +3217,7 @@ void init_stat_view()
3233 stat_barp->mDisplayBar = TRUE; 3217 stat_barp->mDisplayBar = TRUE;
3234 stat_barp->mDisplayHistory = FALSE; 3218 stat_barp->mDisplayHistory = FALSE;
3235 3219
3236 stat_barp = net_statviewp->addStat("Actual Out", &(gViewerStats->mActualOutKBitStat)); 3220 stat_barp = net_statviewp->addStat("Actual Out", &(LLViewerStats::getInstance()->mActualOutKBitStat));
3237 stat_barp->setUnitLabel(" kbps"); 3221 stat_barp->setUnitLabel(" kbps");
3238 stat_barp->mMinBar = 0.f; 3222 stat_barp->mMinBar = 0.f;
3239 stat_barp->mMaxBar = 512.f; 3223 stat_barp->mMaxBar = 512.f;
@@ -3242,7 +3226,7 @@ void init_stat_view()
3242 stat_barp->mDisplayBar = TRUE; 3226 stat_barp->mDisplayBar = TRUE;
3243 stat_barp->mDisplayHistory = FALSE; 3227 stat_barp->mDisplayHistory = FALSE;
3244 3228
3245 stat_barp = net_statviewp->addStat("VFS Pending Ops", &(gViewerStats->mVFSPendingOperations)); 3229 stat_barp = net_statviewp->addStat("VFS Pending Ops", &(LLViewerStats::getInstance()->mVFSPendingOperations));
3246 stat_barp->setUnitLabel(" "); 3230 stat_barp->setUnitLabel(" ");
3247 stat_barp->mPerSec = FALSE; 3231 stat_barp->mPerSec = FALSE;
3248 stat_barp->mDisplayBar = FALSE; 3232 stat_barp->mDisplayBar = FALSE;
@@ -3250,9 +3234,9 @@ void init_stat_view()
3250 3234
3251 // Simulator stats 3235 // Simulator stats
3252 LLStatView *sim_statviewp = new LLStatView("sim stat view", "Simulator", "OpenDebugStatSim", rect); 3236 LLStatView *sim_statviewp = new LLStatView("sim stat view", "Simulator", "OpenDebugStatSim", rect);
3253 gDebugView->mStatViewp->addChildAtEnd(sim_statviewp); 3237 gDebugView->mFloaterStatsp->addStatView(sim_statviewp);
3254 3238
3255 stat_barp = sim_statviewp->addStat("Time Dilation", &(gViewerStats->mSimTimeDilation)); 3239 stat_barp = sim_statviewp->addStat("Time Dilation", &(LLViewerStats::getInstance()->mSimTimeDilation));
3256 stat_barp->mPrecision = 2; 3240 stat_barp->mPrecision = 2;
3257 stat_barp->mMinBar = 0.f; 3241 stat_barp->mMinBar = 0.f;
3258 stat_barp->mMaxBar = 1.f; 3242 stat_barp->mMaxBar = 1.f;
@@ -3262,7 +3246,7 @@ void init_stat_view()
3262 stat_barp->mDisplayBar = FALSE; 3246 stat_barp->mDisplayBar = FALSE;
3263 stat_barp->mDisplayMean = FALSE; 3247 stat_barp->mDisplayMean = FALSE;
3264 3248
3265 stat_barp = sim_statviewp->addStat("Sim FPS", &(gViewerStats->mSimFPS)); 3249 stat_barp = sim_statviewp->addStat("Sim FPS", &(LLViewerStats::getInstance()->mSimFPS));
3266 stat_barp->mMinBar = 0.f; 3250 stat_barp->mMinBar = 0.f;
3267 stat_barp->mMaxBar = 200.f; 3251 stat_barp->mMaxBar = 200.f;
3268 stat_barp->mTickSpacing = 20.f; 3252 stat_barp->mTickSpacing = 20.f;
@@ -3271,7 +3255,7 @@ void init_stat_view()
3271 stat_barp->mDisplayBar = FALSE; 3255 stat_barp->mDisplayBar = FALSE;
3272 stat_barp->mDisplayMean = FALSE; 3256 stat_barp->mDisplayMean = FALSE;
3273 3257
3274 stat_barp = sim_statviewp->addStat("Physics FPS", &(gViewerStats->mSimPhysicsFPS)); 3258 stat_barp = sim_statviewp->addStat("Physics FPS", &(LLViewerStats::getInstance()->mSimPhysicsFPS));
3275 stat_barp->mPrecision = 1; 3259 stat_barp->mPrecision = 1;
3276 stat_barp->mMinBar = 0.f; 3260 stat_barp->mMinBar = 0.f;
3277 stat_barp->mMaxBar = 66.f; 3261 stat_barp->mMaxBar = 66.f;
@@ -3281,7 +3265,42 @@ void init_stat_view()
3281 stat_barp->mDisplayBar = FALSE; 3265 stat_barp->mDisplayBar = FALSE;
3282 stat_barp->mDisplayMean = FALSE; 3266 stat_barp->mDisplayMean = FALSE;
3283 3267
3284 stat_barp = sim_statviewp->addStat("Agent Updates/Sec", &(gViewerStats->mSimAgentUPS)); 3268 LLStatView *phys_details_viewp;
3269 phys_details_viewp = new LLStatView("phys detail view", "Physics Details", "", rect);
3270 sim_statviewp->addChildAtEnd(phys_details_viewp);
3271
3272 stat_barp = phys_details_viewp->addStat("Pinned Objects", &(LLViewerStats::getInstance()->mPhysicsPinnedTasks));
3273 stat_barp->mPrecision = 0;
3274 stat_barp->mMinBar = 0.f;
3275 stat_barp->mMaxBar = 500.f;
3276 stat_barp->mTickSpacing = 10.f;
3277 stat_barp->mLabelSpacing = 40.f;
3278 stat_barp->mPerSec = FALSE;
3279 stat_barp->mDisplayBar = FALSE;
3280 stat_barp->mDisplayMean = FALSE;
3281
3282 stat_barp = phys_details_viewp->addStat("Low LOD Objects", &(LLViewerStats::getInstance()->mPhysicsLODTasks));
3283 stat_barp->mPrecision = 0;
3284 stat_barp->mMinBar = 0.f;
3285 stat_barp->mMaxBar = 500.f;
3286 stat_barp->mTickSpacing = 10.f;
3287 stat_barp->mLabelSpacing = 40.f;
3288 stat_barp->mPerSec = FALSE;
3289 stat_barp->mDisplayBar = FALSE;
3290 stat_barp->mDisplayMean = FALSE;
3291
3292 stat_barp = phys_details_viewp->addStat("Memory Allocated", &(LLViewerStats::getInstance()->mPhysicsMemoryAllocated));
3293 stat_barp->setUnitLabel(" MB");
3294 stat_barp->mPrecision = 0;
3295 stat_barp->mMinBar = 0.f;
3296 stat_barp->mMaxBar = 1024.f;
3297 stat_barp->mTickSpacing = 128.f;
3298 stat_barp->mLabelSpacing = 256.f;
3299 stat_barp->mPerSec = FALSE;
3300 stat_barp->mDisplayBar = FALSE;
3301 stat_barp->mDisplayMean = FALSE;
3302
3303 stat_barp = sim_statviewp->addStat("Agent Updates/Sec", &(LLViewerStats::getInstance()->mSimAgentUPS));
3285 stat_barp->mPrecision = 1; 3304 stat_barp->mPrecision = 1;
3286 stat_barp->mMinBar = 0.f; 3305 stat_barp->mMinBar = 0.f;
3287 stat_barp->mMaxBar = 100.f; 3306 stat_barp->mMaxBar = 100.f;
@@ -3291,7 +3310,7 @@ void init_stat_view()
3291 stat_barp->mDisplayBar = FALSE; 3310 stat_barp->mDisplayBar = FALSE;
3292 stat_barp->mDisplayMean = FALSE; 3311 stat_barp->mDisplayMean = FALSE;
3293 3312
3294 stat_barp = sim_statviewp->addStat("Main Agents", &(gViewerStats->mSimMainAgents)); 3313 stat_barp = sim_statviewp->addStat("Main Agents", &(LLViewerStats::getInstance()->mSimMainAgents));
3295 stat_barp->mPrecision = 0; 3314 stat_barp->mPrecision = 0;
3296 stat_barp->mMinBar = 0.f; 3315 stat_barp->mMinBar = 0.f;
3297 stat_barp->mMaxBar = 80.f; 3316 stat_barp->mMaxBar = 80.f;
@@ -3301,7 +3320,7 @@ void init_stat_view()
3301 stat_barp->mDisplayBar = FALSE; 3320 stat_barp->mDisplayBar = FALSE;
3302 stat_barp->mDisplayMean = FALSE; 3321 stat_barp->mDisplayMean = FALSE;
3303 3322
3304 stat_barp = sim_statviewp->addStat("Child Agents", &(gViewerStats->mSimChildAgents)); 3323 stat_barp = sim_statviewp->addStat("Child Agents", &(LLViewerStats::getInstance()->mSimChildAgents));
3305 stat_barp->mPrecision = 0; 3324 stat_barp->mPrecision = 0;
3306 stat_barp->mMinBar = 0.f; 3325 stat_barp->mMinBar = 0.f;
3307 stat_barp->mMaxBar = 40.f; 3326 stat_barp->mMaxBar = 40.f;
@@ -3311,7 +3330,7 @@ void init_stat_view()
3311 stat_barp->mDisplayBar = FALSE; 3330 stat_barp->mDisplayBar = FALSE;
3312 stat_barp->mDisplayMean = FALSE; 3331 stat_barp->mDisplayMean = FALSE;
3313 3332
3314 stat_barp = sim_statviewp->addStat("Objects", &(gViewerStats->mSimObjects)); 3333 stat_barp = sim_statviewp->addStat("Objects", &(LLViewerStats::getInstance()->mSimObjects));
3315 stat_barp->mPrecision = 0; 3334 stat_barp->mPrecision = 0;
3316 stat_barp->mMinBar = 0.f; 3335 stat_barp->mMinBar = 0.f;
3317 stat_barp->mMaxBar = 30000.f; 3336 stat_barp->mMaxBar = 30000.f;
@@ -3321,7 +3340,7 @@ void init_stat_view()
3321 stat_barp->mDisplayBar = FALSE; 3340 stat_barp->mDisplayBar = FALSE;
3322 stat_barp->mDisplayMean = FALSE; 3341 stat_barp->mDisplayMean = FALSE;
3323 3342
3324 stat_barp = sim_statviewp->addStat("Active Objects", &(gViewerStats->mSimActiveObjects)); 3343 stat_barp = sim_statviewp->addStat("Active Objects", &(LLViewerStats::getInstance()->mSimActiveObjects));
3325 stat_barp->mPrecision = 0; 3344 stat_barp->mPrecision = 0;
3326 stat_barp->mMinBar = 0.f; 3345 stat_barp->mMinBar = 0.f;
3327 stat_barp->mMaxBar = 800.f; 3346 stat_barp->mMaxBar = 800.f;
@@ -3331,7 +3350,7 @@ void init_stat_view()
3331 stat_barp->mDisplayBar = FALSE; 3350 stat_barp->mDisplayBar = FALSE;
3332 stat_barp->mDisplayMean = FALSE; 3351 stat_barp->mDisplayMean = FALSE;
3333 3352
3334 stat_barp = sim_statviewp->addStat("Active Scripts", &(gViewerStats->mSimActiveScripts)); 3353 stat_barp = sim_statviewp->addStat("Active Scripts", &(LLViewerStats::getInstance()->mSimActiveScripts));
3335 stat_barp->mPrecision = 0; 3354 stat_barp->mPrecision = 0;
3336 stat_barp->mMinBar = 0.f; 3355 stat_barp->mMinBar = 0.f;
3337 stat_barp->mMaxBar = 800.f; 3356 stat_barp->mMaxBar = 800.f;
@@ -3341,7 +3360,7 @@ void init_stat_view()
3341 stat_barp->mDisplayBar = FALSE; 3360 stat_barp->mDisplayBar = FALSE;
3342 stat_barp->mDisplayMean = FALSE; 3361 stat_barp->mDisplayMean = FALSE;
3343 3362
3344 stat_barp = sim_statviewp->addStat("Script Perf", &(gViewerStats->mSimLSLIPS)); 3363 stat_barp = sim_statviewp->addStat("Script Perf", &(LLViewerStats::getInstance()->mSimLSLIPS));
3345 stat_barp->setUnitLabel(" ips"); 3364 stat_barp->setUnitLabel(" ips");
3346 stat_barp->mPrecision = 0; 3365 stat_barp->mPrecision = 0;
3347 stat_barp->mMinBar = 0.f; 3366 stat_barp->mMinBar = 0.f;
@@ -3352,7 +3371,7 @@ void init_stat_view()
3352 stat_barp->mDisplayBar = FALSE; 3371 stat_barp->mDisplayBar = FALSE;
3353 stat_barp->mDisplayMean = FALSE; 3372 stat_barp->mDisplayMean = FALSE;
3354 3373
3355 stat_barp = sim_statviewp->addStat("Packets In", &(gViewerStats->mSimInPPS)); 3374 stat_barp = sim_statviewp->addStat("Packets In", &(LLViewerStats::getInstance()->mSimInPPS));
3356 stat_barp->setUnitLabel(" pps"); 3375 stat_barp->setUnitLabel(" pps");
3357 stat_barp->mPrecision = 0; 3376 stat_barp->mPrecision = 0;
3358 stat_barp->mMinBar = 0.f; 3377 stat_barp->mMinBar = 0.f;
@@ -3363,7 +3382,7 @@ void init_stat_view()
3363 stat_barp->mDisplayBar = FALSE; 3382 stat_barp->mDisplayBar = FALSE;
3364 stat_barp->mDisplayMean = FALSE; 3383 stat_barp->mDisplayMean = FALSE;
3365 3384
3366 stat_barp = sim_statviewp->addStat("Packets Out", &(gViewerStats->mSimOutPPS)); 3385 stat_barp = sim_statviewp->addStat("Packets Out", &(LLViewerStats::getInstance()->mSimOutPPS));
3367 stat_barp->setUnitLabel(" pps"); 3386 stat_barp->setUnitLabel(" pps");
3368 stat_barp->mPrecision = 0; 3387 stat_barp->mPrecision = 0;
3369 stat_barp->mMinBar = 0.f; 3388 stat_barp->mMinBar = 0.f;
@@ -3374,7 +3393,7 @@ void init_stat_view()
3374 stat_barp->mDisplayBar = FALSE; 3393 stat_barp->mDisplayBar = FALSE;
3375 stat_barp->mDisplayMean = FALSE; 3394 stat_barp->mDisplayMean = FALSE;
3376 3395
3377 stat_barp = sim_statviewp->addStat("Pending Downloads", &(gViewerStats->mSimPendingDownloads)); 3396 stat_barp = sim_statviewp->addStat("Pending Downloads", &(LLViewerStats::getInstance()->mSimPendingDownloads));
3378 stat_barp->mPrecision = 0; 3397 stat_barp->mPrecision = 0;
3379 stat_barp->mMinBar = 0.f; 3398 stat_barp->mMinBar = 0.f;
3380 stat_barp->mMaxBar = 800.f; 3399 stat_barp->mMaxBar = 800.f;
@@ -3384,7 +3403,7 @@ void init_stat_view()
3384 stat_barp->mDisplayBar = FALSE; 3403 stat_barp->mDisplayBar = FALSE;
3385 stat_barp->mDisplayMean = FALSE; 3404 stat_barp->mDisplayMean = FALSE;
3386 3405
3387 stat_barp = sim_statviewp->addStat("Pending Uploads", &(gViewerStats->mSimPendingUploads)); 3406 stat_barp = sim_statviewp->addStat("Pending Uploads", &(LLViewerStats::getInstance()->mSimPendingUploads));
3388 stat_barp->mPrecision = 0; 3407 stat_barp->mPrecision = 0;
3389 stat_barp->mMinBar = 0.f; 3408 stat_barp->mMinBar = 0.f;
3390 stat_barp->mMaxBar = 100.f; 3409 stat_barp->mMaxBar = 100.f;
@@ -3394,7 +3413,7 @@ void init_stat_view()
3394 stat_barp->mDisplayBar = FALSE; 3413 stat_barp->mDisplayBar = FALSE;
3395 stat_barp->mDisplayMean = FALSE; 3414 stat_barp->mDisplayMean = FALSE;
3396 3415
3397 stat_barp = sim_statviewp->addStat("Total Unacked Bytes", &(gViewerStats->mSimTotalUnackedBytes)); 3416 stat_barp = sim_statviewp->addStat("Total Unacked Bytes", &(LLViewerStats::getInstance()->mSimTotalUnackedBytes));
3398 stat_barp->setUnitLabel(" kb"); 3417 stat_barp->setUnitLabel(" kb");
3399 stat_barp->mPrecision = 0; 3418 stat_barp->mPrecision = 0;
3400 stat_barp->mMinBar = 0.f; 3419 stat_barp->mMinBar = 0.f;
@@ -3409,7 +3428,7 @@ void init_stat_view()
3409 sim_time_viewp = new LLStatView("sim perf view", "Time (ms)", "", rect); 3428 sim_time_viewp = new LLStatView("sim perf view", "Time (ms)", "", rect);
3410 sim_statviewp->addChildAtEnd(sim_time_viewp); 3429 sim_statviewp->addChildAtEnd(sim_time_viewp);
3411 3430
3412 stat_barp = sim_time_viewp->addStat("Total Frame Time", &(gViewerStats->mSimFrameMsec)); 3431 stat_barp = sim_time_viewp->addStat("Total Frame Time", &(LLViewerStats::getInstance()->mSimFrameMsec));
3413 stat_barp->setUnitLabel("ms"); 3432 stat_barp->setUnitLabel("ms");
3414 stat_barp->mPrecision = 1; 3433 stat_barp->mPrecision = 1;
3415 stat_barp->mMinBar = 0.f; 3434 stat_barp->mMinBar = 0.f;
@@ -3420,7 +3439,7 @@ void init_stat_view()
3420 stat_barp->mDisplayBar = FALSE; 3439 stat_barp->mDisplayBar = FALSE;
3421 stat_barp->mDisplayMean = FALSE; 3440 stat_barp->mDisplayMean = FALSE;
3422 3441
3423 stat_barp = sim_time_viewp->addStat("Net Time", &(gViewerStats->mSimNetMsec)); 3442 stat_barp = sim_time_viewp->addStat("Net Time", &(LLViewerStats::getInstance()->mSimNetMsec));
3424 stat_barp->setUnitLabel("ms"); 3443 stat_barp->setUnitLabel("ms");
3425 stat_barp->mPrecision = 1; 3444 stat_barp->mPrecision = 1;
3426 stat_barp->mMinBar = 0.f; 3445 stat_barp->mMinBar = 0.f;
@@ -3431,7 +3450,7 @@ void init_stat_view()
3431 stat_barp->mDisplayBar = FALSE; 3450 stat_barp->mDisplayBar = FALSE;
3432 stat_barp->mDisplayMean = FALSE; 3451 stat_barp->mDisplayMean = FALSE;
3433 3452
3434 stat_barp = sim_time_viewp->addStat("Sim Time (Physics)", &(gViewerStats->mSimSimPhysicsMsec)); 3453 stat_barp = sim_time_viewp->addStat("Sim Time (Physics)", &(LLViewerStats::getInstance()->mSimSimPhysicsMsec));
3435 stat_barp->setUnitLabel("ms"); 3454 stat_barp->setUnitLabel("ms");
3436 stat_barp->mPrecision = 1; 3455 stat_barp->mPrecision = 1;
3437 stat_barp->mMinBar = 0.f; 3456 stat_barp->mMinBar = 0.f;
@@ -3442,7 +3461,45 @@ void init_stat_view()
3442 stat_barp->mDisplayBar = FALSE; 3461 stat_barp->mDisplayBar = FALSE;
3443 stat_barp->mDisplayMean = FALSE; 3462 stat_barp->mDisplayMean = FALSE;
3444 3463
3445 stat_barp = sim_time_viewp->addStat("Sim Time (Other)", &(gViewerStats->mSimSimOtherMsec)); 3464 LLStatView *physics_time_viewp;
3465 physics_time_viewp = new LLStatView("physics perf view", "Physics Details (ms)", "", rect);
3466 sim_time_viewp->addChildAtEnd(physics_time_viewp);
3467 {
3468 stat_barp = physics_time_viewp->addStat("Physics Step", &(LLViewerStats::getInstance()->mSimSimPhysicsStepMsec));
3469 stat_barp->setUnitLabel("ms");
3470 stat_barp->mPrecision = 1;
3471 stat_barp->mMinBar = 0.f;
3472 stat_barp->mMaxBar = 40.f;
3473 stat_barp->mTickSpacing = 10.f;
3474 stat_barp->mLabelSpacing = 20.f;
3475 stat_barp->mPerSec = FALSE;
3476 stat_barp->mDisplayBar = FALSE;
3477 stat_barp->mDisplayMean = FALSE;
3478
3479 stat_barp = physics_time_viewp->addStat("Update Shapes", &(LLViewerStats::getInstance()->mSimSimPhysicsShapeUpdateMsec));
3480 stat_barp->setUnitLabel("ms");
3481 stat_barp->mPrecision = 1;
3482 stat_barp->mMinBar = 0.f;
3483 stat_barp->mMaxBar = 40.f;
3484 stat_barp->mTickSpacing = 10.f;
3485 stat_barp->mLabelSpacing = 20.f;
3486 stat_barp->mPerSec = FALSE;
3487 stat_barp->mDisplayBar = FALSE;
3488 stat_barp->mDisplayMean = FALSE;
3489
3490 stat_barp = physics_time_viewp->addStat("Other", &(LLViewerStats::getInstance()->mSimSimPhysicsOtherMsec));
3491 stat_barp->setUnitLabel("ms");
3492 stat_barp->mPrecision = 1;
3493 stat_barp->mMinBar = 0.f;
3494 stat_barp->mMaxBar = 40.f;
3495 stat_barp->mTickSpacing = 10.f;
3496 stat_barp->mLabelSpacing = 20.f;
3497 stat_barp->mPerSec = FALSE;
3498 stat_barp->mDisplayBar = FALSE;
3499 stat_barp->mDisplayMean = FALSE;
3500 }
3501
3502 stat_barp = sim_time_viewp->addStat("Sim Time (Other)", &(LLViewerStats::getInstance()->mSimSimOtherMsec));
3446 stat_barp->setUnitLabel("ms"); 3503 stat_barp->setUnitLabel("ms");
3447 stat_barp->mPrecision = 1; 3504 stat_barp->mPrecision = 1;
3448 stat_barp->mMinBar = 0.f; 3505 stat_barp->mMinBar = 0.f;
@@ -3453,7 +3510,7 @@ void init_stat_view()
3453 stat_barp->mDisplayBar = FALSE; 3510 stat_barp->mDisplayBar = FALSE;
3454 stat_barp->mDisplayMean = FALSE; 3511 stat_barp->mDisplayMean = FALSE;
3455 3512
3456 stat_barp = sim_time_viewp->addStat("Agent Time", &(gViewerStats->mSimAgentMsec)); 3513 stat_barp = sim_time_viewp->addStat("Agent Time", &(LLViewerStats::getInstance()->mSimAgentMsec));
3457 stat_barp->setUnitLabel("ms"); 3514 stat_barp->setUnitLabel("ms");
3458 stat_barp->mPrecision = 1; 3515 stat_barp->mPrecision = 1;
3459 stat_barp->mMinBar = 0.f; 3516 stat_barp->mMinBar = 0.f;
@@ -3464,7 +3521,7 @@ void init_stat_view()
3464 stat_barp->mDisplayBar = FALSE; 3521 stat_barp->mDisplayBar = FALSE;
3465 stat_barp->mDisplayMean = FALSE; 3522 stat_barp->mDisplayMean = FALSE;
3466 3523
3467 stat_barp = sim_time_viewp->addStat("Images Time", &(gViewerStats->mSimImagesMsec)); 3524 stat_barp = sim_time_viewp->addStat("Images Time", &(LLViewerStats::getInstance()->mSimImagesMsec));
3468 stat_barp->setUnitLabel("ms"); 3525 stat_barp->setUnitLabel("ms");
3469 stat_barp->mPrecision = 1; 3526 stat_barp->mPrecision = 1;
3470 stat_barp->mMinBar = 0.f; 3527 stat_barp->mMinBar = 0.f;
@@ -3475,7 +3532,7 @@ void init_stat_view()
3475 stat_barp->mDisplayBar = FALSE; 3532 stat_barp->mDisplayBar = FALSE;
3476 stat_barp->mDisplayMean = FALSE; 3533 stat_barp->mDisplayMean = FALSE;
3477 3534
3478 stat_barp = sim_time_viewp->addStat("Script Time", &(gViewerStats->mSimScriptMsec)); 3535 stat_barp = sim_time_viewp->addStat("Script Time", &(LLViewerStats::getInstance()->mSimScriptMsec));
3479 stat_barp->setUnitLabel("ms"); 3536 stat_barp->setUnitLabel("ms");
3480 stat_barp->mPrecision = 1; 3537 stat_barp->mPrecision = 1;
3481 stat_barp->mMinBar = 0.f; 3538 stat_barp->mMinBar = 0.f;
@@ -3486,10 +3543,10 @@ void init_stat_view()
3486 stat_barp->mDisplayBar = FALSE; 3543 stat_barp->mDisplayBar = FALSE;
3487 stat_barp->mDisplayMean = FALSE; 3544 stat_barp->mDisplayMean = FALSE;
3488 3545
3489 LLRect r = gDebugView->mStatViewp->getRect(); 3546 LLRect r = gDebugView->mFloaterStatsp->getRect();
3490 3547
3491 // Reshape based on the parameters we set. 3548 // Reshape based on the parameters we set.
3492 gDebugView->mStatViewp->reshape(r.getWidth(), r.getHeight()); 3549 gDebugView->mFloaterStatsp->reshape(r.getWidth(), r.getHeight());
3493} 3550}
3494 3551
3495void asset_callback_nothing(LLVFS*, const LLUUID&, LLAssetType::EType, void*, S32) 3552void asset_callback_nothing(LLVFS*, const LLUUID&, LLAssetType::EType, void*, S32)
diff --git a/linden/indra/newview/llstatbar.cpp b/linden/indra/newview/llstatbar.cpp
index 15dcd75..13b8358 100644
--- a/linden/indra/newview/llstatbar.cpp
+++ b/linden/indra/newview/llstatbar.cpp
@@ -85,16 +85,6 @@ BOOL LLStatBar::handleMouseDown(S32 x, S32 y, MASK mask)
85 return FALSE; 85 return FALSE;
86} 86}
87 87
88EWidgetType LLStatBar::getWidgetType() const
89{
90 return WIDGET_TYPE_STAT_BAR;
91}
92
93LLString LLStatBar::getWidgetTag() const
94{
95 return LL_STAT_BAR_TAG;
96}
97
98void LLStatBar::draw() 88void LLStatBar::draw()
99{ 89{
100 if (!mStatp) 90 if (!mStatp)
diff --git a/linden/indra/newview/llstatbar.h b/linden/indra/newview/llstatbar.h
index 7969454..204a8da 100644
--- a/linden/indra/newview/llstatbar.h
+++ b/linden/indra/newview/llstatbar.h
@@ -42,9 +42,6 @@ class LLStatBar : public LLView
42public: 42public:
43 LLStatBar(const std::string& name, const LLRect& rect); 43 LLStatBar(const std::string& name, const LLRect& rect);
44 44
45 virtual EWidgetType getWidgetType() const;
46 virtual LLString getWidgetTag() const;
47
48 virtual void draw(); 45 virtual void draw();
49 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); 46 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
50 47
diff --git a/linden/indra/newview/llstatgraph.cpp b/linden/indra/newview/llstatgraph.cpp
index 3725228..c9969a2 100644
--- a/linden/indra/newview/llstatgraph.cpp
+++ b/linden/indra/newview/llstatgraph.cpp
@@ -63,75 +63,61 @@ LLStatGraph::LLStatGraph(const std::string& name, const LLRect& rect)
63 mPrecision = 0; 63 mPrecision = 0;
64} 64}
65 65
66EWidgetType LLStatGraph::getWidgetType() const
67{
68 return WIDGET_TYPE_STAT_GRAPH;
69}
70
71LLString LLStatGraph::getWidgetTag() const
72{
73 return LL_STAT_GRAPH_TAG;
74}
75
76void LLStatGraph::draw() 66void LLStatGraph::draw()
77{ 67{
78 if (getVisible()) 68 F32 range, frac;
69 range = mMax - mMin;
70 if (mStatp)
79 { 71 {
80 F32 range, frac; 72 if (mPerSec)
81 range = mMax - mMin;
82 if (mStatp)
83 { 73 {
84 if (mPerSec) 74 mValue = mStatp->getMeanPerSec();
85 {
86 mValue = mStatp->getMeanPerSec();
87 }
88 else
89 {
90 mValue = mStatp->getMean();
91 }
92 } 75 }
93 frac = (mValue - mMin) / range; 76 else
94 frac = llmax(0.f, frac);
95 frac = llmin(1.f, frac);
96
97 if (mUpdateTimer.getElapsedTimeF32() > 0.5f)
98 { 77 {
99 std::string format_str; 78 mValue = mStatp->getMean();
100 std::string tmp_str;
101 format_str = llformat("%%s%%.%df%%s", mPrecision);
102 tmp_str = llformat(format_str.c_str(), mLabel.c_str(), mValue, mUnits.c_str());
103 setToolTip(tmp_str);
104
105 mUpdateTimer.reset();
106 } 79 }
80 }
81 frac = (mValue - mMin) / range;
82 frac = llmax(0.f, frac);
83 frac = llmin(1.f, frac);
107 84
108 LLColor4 color; 85 if (mUpdateTimer.getElapsedTimeF32() > 0.5f)
86 {
87 std::string format_str;
88 std::string tmp_str;
89 format_str = llformat("%%s%%.%df%%s", mPrecision);
90 tmp_str = llformat(format_str.c_str(), mLabel.c_str(), mValue, mUnits.c_str());
91 setToolTip(tmp_str);
92
93 mUpdateTimer.reset();
94 }
109 95
110 S32 i; 96 LLColor4 color;
111 for (i = 0; i < mNumThresholds - 1; i++) 97
98 S32 i;
99 for (i = 0; i < mNumThresholds - 1; i++)
100 {
101 if (mThresholds[i] > mValue)
112 { 102 {
113 if (mThresholds[i] > mValue) 103 break;
114 {
115 break;
116 }
117 } 104 }
118
119 //gl_drop_shadow(0, getRect().getHeight(), getRect().getWidth(), 0,
120 // gColors.getColor("ColorDropShadow"),
121 // (S32) gSavedSettings.getF32("DropShadowFloater") );
122
123
124 color = gColors.getColor( "MenuDefaultBgColor" );
125 gGL.color4fv(color.mV);
126 gl_rect_2d(0, getRect().getHeight(), getRect().getWidth(), 0, TRUE);
127
128 gGL.color4fv(LLColor4::black.mV);
129 gl_rect_2d(0, getRect().getHeight(), getRect().getWidth(), 0, FALSE);
130
131 color = mThresholdColors[i];
132 gGL.color4fv(color.mV);
133 gl_rect_2d(1, llround(frac*getRect().getHeight()), getRect().getWidth() - 1, 0, TRUE);
134 } 105 }
106
107 //gl_drop_shadow(0, getRect().getHeight(), getRect().getWidth(), 0,
108 // gColors.getColor("ColorDropShadow"),
109 // (S32) gSavedSettings.getF32("DropShadowFloater") );
110
111 color = gColors.getColor( "MenuDefaultBgColor" );
112 gGL.color4fv(color.mV);
113 gl_rect_2d(0, getRect().getHeight(), getRect().getWidth(), 0, TRUE);
114
115 gGL.color4fv(LLColor4::black.mV);
116 gl_rect_2d(0, getRect().getHeight(), getRect().getWidth(), 0, FALSE);
117
118 color = mThresholdColors[i];
119 gGL.color4fv(color.mV);
120 gl_rect_2d(1, llround(frac*getRect().getHeight()), getRect().getWidth() - 1, 0, TRUE);
135} 121}
136 122
137void LLStatGraph::setValue(const LLSD& value) 123void LLStatGraph::setValue(const LLSD& value)
diff --git a/linden/indra/newview/llstatgraph.h b/linden/indra/newview/llstatgraph.h
index be44985..db0e1ca 100644
--- a/linden/indra/newview/llstatgraph.h
+++ b/linden/indra/newview/llstatgraph.h
@@ -43,8 +43,6 @@ class LLStatGraph : public LLView
43public: 43public:
44 LLStatGraph(const std::string& name, const LLRect& rect); 44 LLStatGraph(const std::string& name, const LLRect& rect);
45 45
46 virtual EWidgetType getWidgetType() const;
47 virtual LLString getWidgetTag() const;
48 virtual void draw(); 46 virtual void draw();
49 47
50 void setLabel(const char *label); 48 void setLabel(const char *label);
diff --git a/linden/indra/newview/llstatusbar.cpp b/linden/indra/newview/llstatusbar.cpp
index 4e31151..c11d46d 100644
--- a/linden/indra/newview/llstatusbar.cpp
+++ b/linden/indra/newview/llstatusbar.cpp
@@ -74,7 +74,7 @@
74#include "llviewermenu.h" // for gMenuBarView 74#include "llviewermenu.h" // for gMenuBarView
75#include "llviewerparcelmgr.h" 75#include "llviewerparcelmgr.h"
76#include "llviewerthrottle.h" 76#include "llviewerthrottle.h"
77#include "llvieweruictrlfactory.h" 77#include "lluictrlfactory.h"
78#include "llvoiceclient.h" // for gVoiceClient 78#include "llvoiceclient.h" // for gVoiceClient
79 79
80#include "lltoolmgr.h" 80#include "lltoolmgr.h"
@@ -137,7 +137,7 @@ LLStatusBar::LLStatusBar(const std::string& name, const LLRect& rect)
137 mBalanceTimer = new LLFrameTimer(); 137 mBalanceTimer = new LLFrameTimer();
138 mHealthTimer = new LLFrameTimer(); 138 mHealthTimer = new LLFrameTimer();
139 139
140 gUICtrlFactory->buildPanel(this,"panel_status_bar.xml"); 140 LLUICtrlFactory::getInstance()->buildPanel(this,"panel_status_bar.xml");
141 141
142 // status bar can never get a tab 142 // status bar can never get a tab
143 setFocusRoot(FALSE); 143 setFocusRoot(FALSE);
@@ -145,11 +145,11 @@ LLStatusBar::LLStatusBar(const std::string& name, const LLRect& rect)
145 // build date necessary data (must do after panel built) 145 // build date necessary data (must do after panel built)
146 setupDate(); 146 setupDate();
147 147
148 mTextParcelName = LLUICtrlFactory::getTextBoxByName( this, "ParcelNameText" ); 148 mTextParcelName = getChild<LLTextBox>("ParcelNameText" );
149 mTextBalance = LLUICtrlFactory::getTextBoxByName( this, "BalanceText" ); 149 mTextBalance = getChild<LLTextBox>("BalanceText" );
150 150
151 mTextHealth = LLUICtrlFactory::getTextBoxByName( this, "HealthText" ); 151 mTextHealth = getChild<LLTextBox>("HealthText" );
152 mTextTime = LLUICtrlFactory::getTextBoxByName( this, "TimeText" ); 152 mTextTime = getChild<LLTextBox>("TimeText" );
153 153
154 childSetAction("scriptout", onClickScriptDebug, this); 154 childSetAction("scriptout", onClickScriptDebug, this);
155 childSetAction("health", onClickHealth, this); 155 childSetAction("health", onClickHealth, this);
@@ -166,6 +166,7 @@ LLStatusBar::LLStatusBar(const std::string& name, const LLRect& rect)
166 166
167 childSetVisible("search_editor", gSavedSettings.getBOOL("ShowSearchBar")); 167 childSetVisible("search_editor", gSavedSettings.getBOOL("ShowSearchBar"));
168 childSetVisible("search_btn", gSavedSettings.getBOOL("ShowSearchBar")); 168 childSetVisible("search_btn", gSavedSettings.getBOOL("ShowSearchBar"));
169 childSetVisible("menubar_search_bevel_bg", gSavedSettings.getBOOL("ShowSearchBar"));
169 170
170 childSetActionTextbox("ParcelNameText", onClickParcelInfo ); 171 childSetActionTextbox("ParcelNameText", onClickParcelInfo );
171 childSetActionTextbox("BalanceText", onClickBalance ); 172 childSetActionTextbox("BalanceText", onClickBalance );
@@ -177,7 +178,7 @@ LLStatusBar::LLStatusBar(const std::string& name, const LLRect& rect)
177 r.set( x-SIM_STAT_WIDTH, y+MENU_BAR_HEIGHT-1, x, y+1); 178 r.set( x-SIM_STAT_WIDTH, y+MENU_BAR_HEIGHT-1, x, y+1);
178 mSGBandwidth = new LLStatGraph("BandwidthGraph", r); 179 mSGBandwidth = new LLStatGraph("BandwidthGraph", r);
179 mSGBandwidth->setFollows(FOLLOWS_BOTTOM | FOLLOWS_RIGHT); 180 mSGBandwidth->setFollows(FOLLOWS_BOTTOM | FOLLOWS_RIGHT);
180 mSGBandwidth->setStat(&gViewerStats->mKBitStat); 181 mSGBandwidth->setStat(&LLViewerStats::getInstance()->mKBitStat);
181 LLString text = childGetText("bandwidth_tooltip") + " "; 182 LLString text = childGetText("bandwidth_tooltip") + " ";
182 LLUIString bandwidth_tooltip = text; // get the text from XML until this widget is XML driven 183 LLUIString bandwidth_tooltip = text; // get the text from XML until this widget is XML driven
183 mSGBandwidth->setLabel(bandwidth_tooltip.getString().c_str()); 184 mSGBandwidth->setLabel(bandwidth_tooltip.getString().c_str());
@@ -190,7 +191,7 @@ LLStatusBar::LLStatusBar(const std::string& name, const LLRect& rect)
190 r.set( x-SIM_STAT_WIDTH, y+MENU_BAR_HEIGHT-1, x, y+1); 191 r.set( x-SIM_STAT_WIDTH, y+MENU_BAR_HEIGHT-1, x, y+1);
191 mSGPacketLoss = new LLStatGraph("PacketLossPercent", r); 192 mSGPacketLoss = new LLStatGraph("PacketLossPercent", r);
192 mSGPacketLoss->setFollows(FOLLOWS_BOTTOM | FOLLOWS_RIGHT); 193 mSGPacketLoss->setFollows(FOLLOWS_BOTTOM | FOLLOWS_RIGHT);
193 mSGPacketLoss->setStat(&gViewerStats->mPacketsLostPercentStat); 194 mSGPacketLoss->setStat(&LLViewerStats::getInstance()->mPacketsLostPercentStat);
194 text = childGetText("packet_loss_tooltip") + " "; 195 text = childGetText("packet_loss_tooltip") + " ";
195 LLUIString packet_loss_tooltip = text; // get the text from XML until this widget is XML driven 196 LLUIString packet_loss_tooltip = text; // get the text from XML until this widget is XML driven
196 mSGPacketLoss->setLabel(packet_loss_tooltip.getString().c_str()); 197 mSGPacketLoss->setLabel(packet_loss_tooltip.getString().c_str());
@@ -220,18 +221,6 @@ LLStatusBar::~LLStatusBar()
220 // LLView destructor cleans up children 221 // LLView destructor cleans up children
221} 222}
222 223
223//virtual
224EWidgetType LLStatusBar::getWidgetType() const
225{
226 return WIDGET_TYPE_STATUS_BAR;
227}
228
229//virtual
230LLString LLStatusBar::getWidgetTag() const
231{
232 return LL_STATUS_BAR_TAG;
233}
234
235//----------------------------------------------------------------------- 224//-----------------------------------------------------------------------
236// Overrides 225// Overrides
237//----------------------------------------------------------------------- 226//-----------------------------------------------------------------------
@@ -321,7 +310,7 @@ void LLStatusBar::refresh()
321 } 310 }
322 311
323 LLViewerRegion *region = gAgent.getRegion(); 312 LLViewerRegion *region = gAgent.getRegion();
324 LLParcel *parcel = gParcelMgr->getAgentParcel(); 313 LLParcel *parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
325 314
326 LLRect buttonRect; 315 LLRect buttonRect;
327 316
@@ -464,7 +453,7 @@ void LLStatusBar::refresh()
464 453
465 BOOL canBuyLand = parcel 454 BOOL canBuyLand = parcel
466 && !parcel->isPublic() 455 && !parcel->isPublic()
467 && gParcelMgr->canAgentBuyParcel(parcel, false); 456 && LLViewerParcelMgr::getInstance()->canAgentBuyParcel(parcel, false);
468 childSetVisible("buyland", canBuyLand); 457 childSetVisible("buyland", canBuyLand);
469 if (canBuyLand) 458 if (canBuyLand)
470 { 459 {
@@ -524,7 +513,7 @@ void LLStatusBar::refresh()
524 mRegionDetails.mZ = pos_z; 513 mRegionDetails.mZ = pos_z;
525 mRegionDetails.mArea = parcel->getArea(); 514 mRegionDetails.mArea = parcel->getArea();
526 mRegionDetails.mForSale = parcel->getForSale(); 515 mRegionDetails.mForSale = parcel->getForSale();
527 mRegionDetails.mTraffic = gParcelMgr->getDwelling(); 516 mRegionDetails.mTraffic = LLViewerParcelMgr::getInstance()->getDwelling();
528 517
529 if (parcel->isPublic()) 518 if (parcel->isPublic())
530 { 519 {
@@ -599,15 +588,14 @@ void LLStatusBar::refresh()
599 if (search_visible) 588 if (search_visible)
600 { 589 {
601 childGetRect("search_btn", r); 590 childGetRect("search_btn", r);
602 r.translate( new_right - r.mRight, 0); 591 //r.translate( new_right - r.mRight, 0);
603 childSetRect("search_btn", r); 592 //childSetRect("search_btn", r);
604 new_right -= r.getWidth(); 593 new_right -= r.getWidth();
605 594
606 childGetRect("search_editor", r); 595 childGetRect("search_editor", r);
607 r.translate( new_right - r.mRight, 0); 596 //r.translate( new_right - r.mRight, 0);
608 childSetRect("search_editor", r); 597 //childSetRect("search_editor", r);
609 new_right -= r.getWidth() + 6; 598 new_right -= r.getWidth() + 6;
610
611 } 599 }
612 else 600 else
613 { 601 {
@@ -645,6 +633,7 @@ void LLStatusBar::refresh()
645 // Set search bar visibility 633 // Set search bar visibility
646 childSetVisible("search_editor", search_visible); 634 childSetVisible("search_editor", search_visible);
647 childSetVisible("search_btn", search_visible); 635 childSetVisible("search_btn", search_visible);
636 childSetVisible("menubar_search_bevel_bg", search_visible);
648 mSGBandwidth->setVisible(! search_visible); 637 mSGBandwidth->setVisible(! search_visible);
649 mSGPacketLoss->setVisible(! search_visible); 638 mSGPacketLoss->setVisible(! search_visible);
650 childSetEnabled("stat_btn", ! search_visible); 639 childSetEnabled("stat_btn", ! search_visible);
@@ -674,7 +663,7 @@ void LLStatusBar::creditBalance(S32 credit)
674 663
675void LLStatusBar::setBalance(S32 balance) 664void LLStatusBar::setBalance(S32 balance)
676{ 665{
677 LLString money_str = gResMgr->getMonetaryString( balance ); 666 LLString money_str = LLResMgr::getInstance()->getMonetaryString( balance );
678 LLString balance_str = "L$"; 667 LLString balance_str = "L$";
679 balance_str += money_str; 668 balance_str += money_str;
680 mTextBalance->setText( balance_str ); 669 mTextBalance->setText( balance_str );
@@ -768,7 +757,7 @@ S32 LLStatusBar::getSquareMetersLeft() const
768 757
769static void onClickParcelInfo(void* data) 758static void onClickParcelInfo(void* data)
770{ 759{
771 gParcelMgr->selectParcelAt(gAgent.getPositionGlobal()); 760 LLViewerParcelMgr::getInstance()->selectParcelAt(gAgent.getPositionGlobal());
772 761
773 LLFloaterLand::showInstance(); 762 LLFloaterLand::showInstance();
774} 763}
@@ -832,8 +821,8 @@ static void onClickScripts(void*)
832 821
833static void onClickBuyLand(void*) 822static void onClickBuyLand(void*)
834{ 823{
835 gParcelMgr->selectParcelAt(gAgent.getPositionGlobal()); 824 LLViewerParcelMgr::getInstance()->selectParcelAt(gAgent.getPositionGlobal());
836 gParcelMgr->startBuyLand(); 825 LLViewerParcelMgr::getInstance()->startBuyLand();
837} 826}
838 827
839// sets the static variables necessary for the date 828// sets the static variables necessary for the date
@@ -917,7 +906,7 @@ void LLStatusBar::onClickSearch(void* data)
917// static 906// static
918void LLStatusBar::onClickStatGraph(void* data) 907void LLStatusBar::onClickStatGraph(void* data)
919{ 908{
920 LLFloaterLagMeter::show(data); 909 LLFloaterLagMeter::showInstance();
921} 910}
922 911
923BOOL can_afford_transaction(S32 cost) 912BOOL can_afford_transaction(S32 cost)
diff --git a/linden/indra/newview/llstatusbar.h b/linden/indra/newview/llstatusbar.h
index d6cf8de..ff898dc 100644
--- a/linden/indra/newview/llstatusbar.h
+++ b/linden/indra/newview/llstatusbar.h
@@ -88,9 +88,6 @@ public:
88 LLStatusBar(const std::string& name, const LLRect& rect ); 88 LLStatusBar(const std::string& name, const LLRect& rect );
89 /*virtual*/ ~LLStatusBar(); 89 /*virtual*/ ~LLStatusBar();
90 90
91 /*virtual*/ EWidgetType getWidgetType() const;
92 /*virtual*/ LLString getWidgetTag() const;
93
94 /*virtual*/ void draw(); 91 /*virtual*/ void draw();
95 92
96 // MANIPULATORS 93 // MANIPULATORS
diff --git a/linden/indra/newview/llstatview.cpp b/linden/indra/newview/llstatview.cpp
index 8a70508..221c4e1 100644
--- a/linden/indra/newview/llstatview.cpp
+++ b/linden/indra/newview/llstatview.cpp
@@ -67,16 +67,6 @@ LLStatView::~LLStatView()
67 } 67 }
68} 68}
69 69
70EWidgetType LLStatView::getWidgetType() const
71{
72 return WIDGET_TYPE_STAT_VIEW;
73}
74
75LLString LLStatView::getWidgetTag() const
76{
77 return LL_STAT_VIEW_TAG;
78}
79
80LLStatBar *LLStatView::addStat(const LLString& name, LLStat *statp) 70LLStatBar *LLStatView::addStat(const LLString& name, LLStat *statp)
81{ 71{
82 LLStatBar *stat_barp; 72 LLStatBar *stat_barp;
diff --git a/linden/indra/newview/llstatview.h b/linden/indra/newview/llstatview.h
index 523b2af..cff5809 100644
--- a/linden/indra/newview/llstatview.h
+++ b/linden/indra/newview/llstatview.h
@@ -44,8 +44,6 @@ public:
44 LLStatView(const LLString& name, const LLString& label, const LLString& setting, const LLRect& rect); 44 LLStatView(const LLString& name, const LLString& label, const LLString& setting, const LLRect& rect);
45 ~LLStatView(); 45 ~LLStatView();
46 46
47 virtual EWidgetType getWidgetType() const;
48 virtual LLString getWidgetTag() const;
49/* 47/*
50 virtual void draw(); 48 virtual void draw();
51 virtual void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE); 49 virtual void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
diff --git a/linden/indra/newview/llsurface.cpp b/linden/indra/newview/llsurface.cpp
index b5eb902..48e469b 100644
--- a/linden/indra/newview/llsurface.cpp
+++ b/linden/indra/newview/llsurface.cpp
@@ -175,7 +175,7 @@ void LLSurface::create(const S32 grids_per_edge,
175 175
176 mOriginGlobal.setVec(origin_global); 176 mOriginGlobal.setVec(origin_global);
177 177
178 mPVArray.create(mGridsPerEdge, mGridsPerPatchEdge, gWorldPointer->getRegionScale()); 178 mPVArray.create(mGridsPerEdge, mGridsPerPatchEdge, LLWorld::getInstance()->getRegionScale());
179 179
180 S32 number_of_grids = mGridsPerEdge * mGridsPerEdge; 180 S32 number_of_grids = mGridsPerEdge * mGridsPerEdge;
181 181
diff --git a/linden/indra/newview/llsurfacepatch.cpp b/linden/indra/newview/llsurfacepatch.cpp
index 432ca01..5b03c98 100644
--- a/linden/indra/newview/llsurfacepatch.cpp
+++ b/linden/indra/newview/llsurfacepatch.cpp
@@ -845,7 +845,7 @@ void LLSurfacePatch::updateVisibility()
845 LLVector3 radius = LLVector3(mRadius, mRadius, mRadius); 845 LLVector3 radius = LLVector3(mRadius, mRadius, mRadius);
846 846
847 // sphere in frustum on global coordinates 847 // sphere in frustum on global coordinates
848 if (gCamera->AABBInFrustumNoFarClip(center, radius)) 848 if (LLViewerCamera::getInstance()->AABBInFrustumNoFarClip(center, radius))
849 { 849 {
850 // We now need to calculate the render stride based on patchp's distance 850 // We now need to calculate the render stride based on patchp's distance
851 // from LLCamera render_stride is governed by a relation something like this... 851 // from LLCamera render_stride is governed by a relation something like this...
diff --git a/linden/indra/newview/lltexlayer.cpp b/linden/indra/newview/lltexlayer.cpp
index 78fb126..66d9a33 100644
--- a/linden/indra/newview/lltexlayer.cpp
+++ b/linden/indra/newview/lltexlayer.cpp
@@ -326,7 +326,7 @@ void LLTexLayerSetBuffer::readBackAndUpload(U8* baked_bump_data)
326 stop_glerror(); 326 stop_glerror();
327 327
328 llinfos << "Baked " << mTexLayerSet->getBodyRegion() << llendl; 328 llinfos << "Baked " << mTexLayerSet->getBodyRegion() << llendl;
329 gViewerStats->incStat(LLViewerStats::ST_TEX_BAKES); 329 LLViewerStats::getInstance()->incStat(LLViewerStats::ST_TEX_BAKES);
330 330
331 llassert( gAgent.getAvatarObject() == mTexLayerSet->getAvatar() ); 331 llassert( gAgent.getAvatarObject() == mTexLayerSet->getAvatar() );
332 332
diff --git a/linden/indra/newview/lltexturecache.cpp b/linden/indra/newview/lltexturecache.cpp
index 11fd348..c31fbba 100644
--- a/linden/indra/newview/lltexturecache.cpp
+++ b/linden/indra/newview/lltexturecache.cpp
@@ -50,15 +50,6 @@ class LLTextureCacheWorker : public LLWorkerClass
50 friend class LLTextureCache; 50 friend class LLTextureCache;
51 51
52private: 52private:
53 enum e_state
54 {
55 INIT = 0,
56 LOCAL = 1,
57 CACHE = 2,
58 HEADER = 3,
59 BODY = 4
60 };
61
62 class ReadResponder : public LLLFSThread::Responder 53 class ReadResponder : public LLLFSThread::Responder
63 { 54 {
64 public: 55 public:
@@ -97,10 +88,9 @@ public:
97 S32 imagesize, // for writes 88 S32 imagesize, // for writes
98 LLTextureCache::Responder* responder) 89 LLTextureCache::Responder* responder)
99 : LLWorkerClass(cache, "LLTextureCacheWorker"), 90 : LLWorkerClass(cache, "LLTextureCacheWorker"),
91 mID(id),
100 mCache(cache), 92 mCache(cache),
101 mPriority(priority), 93 mPriority(priority),
102 mID(id),
103 mState(INIT),
104 mReadData(NULL), 94 mReadData(NULL),
105 mWriteData(data), 95 mWriteData(data),
106 mDataSize(datasize), 96 mDataSize(datasize),
@@ -121,8 +111,10 @@ public:
121 delete[] mReadData; 111 delete[] mReadData;
122 } 112 }
123 113
124 bool doRead(); 114 // override this interface
125 bool doWrite(); 115 virtual bool doRead() = 0;
116 virtual bool doWrite() = 0;
117
126 virtual bool doWork(S32 param); // Called from LLWorkerThread::processRequest() 118 virtual bool doWork(S32 param); // Called from LLWorkerThread::processRequest()
127 119
128 handle_t read() { addWork(0, LLWorkerThread::PRIORITY_HIGH | mPriority); return mRequestHandle; } 120 handle_t read() { addWork(0, LLWorkerThread::PRIORITY_HIGH | mPriority); return mRequestHandle; }
@@ -133,24 +125,23 @@ public:
133 mBytesRead = bytes; 125 mBytesRead = bytes;
134 setPriority(LLWorkerThread::PRIORITY_HIGH | mPriority); 126 setPriority(LLWorkerThread::PRIORITY_HIGH | mPriority);
135 } 127 }
136 128
137private: 129private:
138 virtual void startWork(S32 param); // called from addWork() (MAIN THREAD) 130 virtual void startWork(S32 param); // called from addWork() (MAIN THREAD)
139 virtual void finishWork(S32 param, bool completed); // called from finishRequest() (WORK THREAD) 131 virtual void finishWork(S32 param, bool completed); // called from finishRequest() (WORK THREAD)
140 virtual void endWork(S32 param, bool aborted); // called from doWork() (MAIN THREAD) 132 virtual void endWork(S32 param, bool aborted); // called from doWork() (MAIN THREAD)
141 133
142private: 134protected:
143 LLTextureCache* mCache; 135 LLTextureCache* mCache;
144 U32 mPriority; 136 U32 mPriority;
145 LLUUID mID; 137 LLUUID mID;
146 e_state mState;
147 138
148 U8* mReadData; 139 U8* mReadData;
149 U8* mWriteData; 140 U8* mWriteData;
150 S32 mDataSize; 141 S32 mDataSize;
151 S32 mOffset; 142 S32 mOffset;
152 S32 mImageSize; 143 S32 mImageSize;
153 S32 mImageFormat; 144 EImageCodec mImageFormat;
154 BOOL mImageLocal; 145 BOOL mImageLocal;
155 LLPointer<LLTextureCache::Responder> mResponder; 146 LLPointer<LLTextureCache::Responder> mResponder;
156 LLLFSThread::handle_t mFileHandle; 147 LLLFSThread::handle_t mFileHandle;
@@ -158,19 +149,169 @@ private:
158 LLAtomicS32 mBytesRead; 149 LLAtomicS32 mBytesRead;
159}; 150};
160 151
152class LLTextureCacheLocalFileWorker : public LLTextureCacheWorker
153{
154public:
155 LLTextureCacheLocalFileWorker(LLTextureCache* cache, U32 priority, const LLString& filename, const LLUUID& id,
156 U8* data, S32 datasize, S32 offset,
157 S32 imagesize, // for writes
158 LLTextureCache::Responder* responder)
159 : LLTextureCacheWorker(cache, priority, id, data, datasize, offset, imagesize, responder),
160 mFileName(filename)
161
162 {
163 }
164
165 virtual bool doRead();
166 virtual bool doWrite();
167
168private:
169 LLString mFileName;
170};
171
172bool LLTextureCacheLocalFileWorker::doRead()
173{
174 S32 local_size = ll_apr_file_size(mFileName, mCache->getFileAPRPool());
175
176 if (local_size > 0 && mFileName.size() > 4)
177 {
178 mDataSize = local_size; // Only a complete file is valid
179
180 LLString extension = mFileName.substr(mFileName.size() - 3, 3);
181
182 mImageFormat = LLImageBase::getCodecFromExtension(extension);
183
184 if (mImageFormat == IMG_CODEC_INVALID)
185 {
186 llwarns << "Unrecognized file extension " << extension << " for local texture " << mFileName << llendl;
187 mDataSize = 0; // no data
188 return true;
189 }
190 }
191 else
192 {
193 // file doesn't exist
194 mDataSize = 0; // no data
195 return true;
196 }
197
198#if USE_LFS_READ
199 if (mFileHandle == LLLFSThread::nullHandle())
200 {
201 mImageLocal = TRUE;
202 mImageSize = local_size;
203 if (!mDataSize || mDataSize + mOffset > local_size)
204 {
205 mDataSize = local_size - mOffset;
206 }
207 if (mDataSize <= 0)
208 {
209 // no more data to read
210 mDataSize = 0;
211 return true;
212 }
213 mReadData = new U8[mDataSize];
214 mBytesRead = -1;
215 mBytesToRead = mDataSize;
216 setPriority(LLWorkerThread::PRIORITY_LOW | mPriority);
217 mFileHandle = LLLFSThread::sLocal->read(local_filename, mReadData, mOffset, mDataSize,
218 new ReadResponder(mCache, mRequestHandle));
219 return false;
220 }
221 else
222 {
223 if (mBytesRead >= 0)
224 {
225 if (mBytesRead != mBytesToRead)
226 {
227 llwarns << "Error reading file from local cache: " << local_filename
228 << " Bytes: " << mDataSize << " Offset: " << mOffset
229 << " / " << mDataSize << llendl;
230 mDataSize = 0; // failed
231 delete[] mReadData;
232 mReadData = NULL;
233 }
234 return true;
235 }
236 else
237 {
238 return false;
239 }
240 }
241#else
242 if (!mDataSize || mDataSize > local_size)
243 {
244 mDataSize = local_size;
245 }
246 mReadData = new U8[mDataSize];
247 S32 bytes_read = ll_apr_file_read_ex(mFileName, mCache->getFileAPRPool(),
248 mReadData, mOffset, mDataSize);
249 if (bytes_read != mDataSize)
250 {
251 llwarns << "Error reading file from local cache: " << mFileName
252 << " Bytes: " << mDataSize << " Offset: " << mOffset
253 << " / " << mDataSize << llendl;
254 mDataSize = 0;
255 delete[] mReadData;
256 mReadData = NULL;
257 }
258 else
259 {
260 mImageSize = local_size;
261 mImageLocal = TRUE;
262 }
263 return true;
264#endif
265}
266
267bool LLTextureCacheLocalFileWorker::doWrite()
268{
269 // no writes for local files
270 return false;
271}
272
273class LLTextureCacheRemoteWorker : public LLTextureCacheWorker
274{
275public:
276 LLTextureCacheRemoteWorker(LLTextureCache* cache, U32 priority, const LLUUID& id,
277 U8* data, S32 datasize, S32 offset,
278 S32 imagesize, // for writes
279 LLTextureCache::Responder* responder)
280 : LLTextureCacheWorker(cache, priority, id, data, datasize, offset, imagesize, responder),
281 mState(INIT)
282 {
283 }
284
285 virtual bool doRead();
286 virtual bool doWrite();
287
288private:
289 enum e_state
290 {
291 INIT = 0,
292 LOCAL = 1,
293 CACHE = 2,
294 HEADER = 3,
295 BODY = 4
296 };
297
298 e_state mState;
299};
300
301
161//virtual 302//virtual
162void LLTextureCacheWorker::startWork(S32 param) 303void LLTextureCacheWorker::startWork(S32 param)
163{ 304{
164} 305}
165 306
166bool LLTextureCacheWorker::doRead() 307bool LLTextureCacheRemoteWorker::doRead()
167{ 308{
168 S32 local_size = 0; 309 S32 local_size = 0;
169 std::string local_filename; 310 std::string local_filename;
170 311
171 if (mState == INIT) 312 if (mState == INIT)
172 { 313 {
173 std::string filename = mCache->getLocalFileName(mID); 314 std::string filename = mCache->getLocalFileName(mID);
174 local_filename = filename + ".j2c"; 315 local_filename = filename + ".j2c";
175 local_size = ll_apr_file_size(local_filename, mCache->getFileAPRPool()); 316 local_size = ll_apr_file_size(local_filename, mCache->getFileAPRPool());
176 if (local_size == 0) 317 if (local_size == 0)
@@ -468,19 +609,13 @@ bool LLTextureCacheWorker::doRead()
468 return false; 609 return false;
469} 610}
470 611
471bool LLTextureCacheWorker::doWrite() 612bool LLTextureCacheRemoteWorker::doWrite()
472{ 613{
473 S32 idx = -1; 614 S32 idx = -1;
474 615
475 if (mState == INIT)
476 {
477 llassert_always(mOffset == 0); // Currently don't support offsets
478 mState = CACHE;
479 }
480
481 // No LOCAL state for write() 616 // No LOCAL state for write()
482 617
483 if (mState == CACHE) 618 if (mState == INIT)
484 { 619 {
485 S32 cur_imagesize = 0; 620 S32 cur_imagesize = 0;
486 S32 offset = mOffset; 621 S32 offset = mOffset;
@@ -921,9 +1056,9 @@ struct lru_data
921 typedef const lru_data* lru_data_ptr; 1056 typedef const lru_data* lru_data_ptr;
922 bool operator()(const lru_data_ptr& a, const lru_data_ptr& b) const 1057 bool operator()(const lru_data_ptr& a, const lru_data_ptr& b) const
923 { 1058 {
924 if (!(a->time < b->time)) 1059 if (a->time > b->time)
925 return true; 1060 return true;
926 else if (!(b->time < a->time)) 1061 else if (b->time > a->time)
927 return false; 1062 return false;
928 else 1063 else
929 return a->index < b->index; 1064 return a->index < b->index;
@@ -1250,13 +1385,27 @@ S32 LLTextureCache::getHeaderCacheEntry(const LLUUID& id, bool touch, S32* image
1250 1385
1251// Calls from texture pipeline thread (i.e. LLTextureFetch) 1386// Calls from texture pipeline thread (i.e. LLTextureFetch)
1252 1387
1388LLTextureCache::handle_t LLTextureCache::readFromCache(const LLString& filename, const LLUUID& id, U32 priority,
1389 S32 offset, S32 size, ReadResponder* responder)
1390{
1391 // Note: checking to see if an entry exists can cause a stall,
1392 // so let the thread handle it
1393 LLMutexLock lock(&mWorkersMutex);
1394 LLTextureCacheWorker* worker = new LLTextureCacheLocalFileWorker(this, priority, filename, id,
1395 NULL, size, offset, 0,
1396 responder);
1397 handle_t handle = worker->read();
1398 mReaders[handle] = worker;
1399 return handle;
1400}
1401
1253LLTextureCache::handle_t LLTextureCache::readFromCache(const LLUUID& id, U32 priority, 1402LLTextureCache::handle_t LLTextureCache::readFromCache(const LLUUID& id, U32 priority,
1254 S32 offset, S32 size, ReadResponder* responder) 1403 S32 offset, S32 size, ReadResponder* responder)
1255{ 1404{
1256 // Note: checking to see if an entry exists can cause a stall, 1405 // Note: checking to see if an entry exists can cause a stall,
1257 // so let the thread handle it 1406 // so let the thread handle it
1258 LLMutexLock lock(&mWorkersMutex); 1407 LLMutexLock lock(&mWorkersMutex);
1259 LLTextureCacheWorker* worker = new LLTextureCacheWorker(this, priority, id, 1408 LLTextureCacheWorker* worker = new LLTextureCacheRemoteWorker(this, priority, id,
1260 NULL, size, offset, 0, 1409 NULL, size, offset, 0,
1261 responder); 1410 responder);
1262 handle_t handle = worker->read(); 1411 handle_t handle = worker->read();
@@ -1264,6 +1413,7 @@ LLTextureCache::handle_t LLTextureCache::readFromCache(const LLUUID& id, U32 pri
1264 return handle; 1413 return handle;
1265} 1414}
1266 1415
1416
1267bool LLTextureCache::readComplete(handle_t handle, bool abort) 1417bool LLTextureCache::readComplete(handle_t handle, bool abort)
1268{ 1418{
1269 lockWorkers(); 1419 lockWorkers();
@@ -1306,7 +1456,7 @@ LLTextureCache::handle_t LLTextureCache::writeToCache(const LLUUID& id, U32 prio
1306 { 1456 {
1307 LLMutexLock lock(&mWorkersMutex); 1457 LLMutexLock lock(&mWorkersMutex);
1308 llassert_always(imagesize > 0); 1458 llassert_always(imagesize > 0);
1309 LLTextureCacheWorker* worker = new LLTextureCacheWorker(this, priority, id, 1459 LLTextureCacheWorker* worker = new LLTextureCacheRemoteWorker(this, priority, id,
1310 data, datasize, 0, 1460 data, datasize, 0,
1311 imagesize, responder); 1461 imagesize, responder);
1312 handle_t handle = worker->write(); 1462 handle_t handle = worker->write();
diff --git a/linden/indra/newview/lltexturecache.h b/linden/indra/newview/lltexturecache.h
index c03576b..f083dd0 100644
--- a/linden/indra/newview/lltexturecache.h
+++ b/linden/indra/newview/lltexturecache.h
@@ -44,6 +44,8 @@ class LLTextureCacheWorker;
44class LLTextureCache : public LLWorkerThread 44class LLTextureCache : public LLWorkerThread
45{ 45{
46 friend class LLTextureCacheWorker; 46 friend class LLTextureCacheWorker;
47 friend class LLTextureCacheRemoteWorker;
48 friend class LLTextureCacheLocalFileWorker;
47 49
48public: 50public:
49 51
@@ -81,6 +83,9 @@ public:
81 void purgeCache(ELLPath location); 83 void purgeCache(ELLPath location);
82 S64 initCache(ELLPath location, S64 maxsize, BOOL read_only); 84 S64 initCache(ELLPath location, S64 maxsize, BOOL read_only);
83 85
86 handle_t readFromCache(const LLString& local_filename, const LLUUID& id, U32 priority, S32 offset, S32 size,
87 ReadResponder* responder);
88
84 handle_t readFromCache(const LLUUID& id, U32 priority, S32 offset, S32 size, 89 handle_t readFromCache(const LLUUID& id, U32 priority, S32 offset, S32 size,
85 ReadResponder* responder); 90 ReadResponder* responder);
86 bool readComplete(handle_t handle, bool abort); 91 bool readComplete(handle_t handle, bool abort);
diff --git a/linden/indra/newview/lltexturectrl.cpp b/linden/indra/newview/lltexturectrl.cpp
index ec8d91c..acf4a10 100644
--- a/linden/indra/newview/lltexturectrl.cpp
+++ b/linden/indra/newview/lltexturectrl.cpp
@@ -64,7 +64,7 @@
64#include "llviewerobject.h" 64#include "llviewerobject.h"
65#include "llviewercontrol.h" 65#include "llviewercontrol.h"
66#include "llglheaders.h" 66#include "llglheaders.h"
67#include "llvieweruictrlfactory.h" 67#include "lluictrlfactory.h"
68 68
69 69
70static const S32 CLOSE_BTN_WIDTH = 100; 70static const S32 CLOSE_BTN_WIDTH = 100;
@@ -119,7 +119,7 @@ public:
119 EAcceptance *accept, 119 EAcceptance *accept,
120 LLString& tooltip_msg); 120 LLString& tooltip_msg);
121 virtual void draw(); 121 virtual void draw();
122 virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); 122 virtual BOOL handleKeyHere(KEY key, MASK mask);
123 123
124 // LLFloater overrides 124 // LLFloater overrides
125 virtual void onClose(bool app_quitting); 125 virtual void onClose(bool app_quitting);
@@ -214,11 +214,11 @@ LLFloaterTexturePicker::LLFloaterTexturePicker(
214 mNonImmediateFilterPermMask(non_immediate_filter_perm_mask), 214 mNonImmediateFilterPermMask(non_immediate_filter_perm_mask),
215 mContextConeOpacity(0.f) 215 mContextConeOpacity(0.f)
216{ 216{
217 gUICtrlFactory->buildFloater(this,"floater_texture_ctrl.xml"); 217 LLUICtrlFactory::getInstance()->buildFloater(this,"floater_texture_ctrl.xml");
218 218
219 mTentativeLabel = LLUICtrlFactory::getTextBoxByName(this,"Multiple"); 219 mTentativeLabel = getChild<LLTextBox>("Multiple");
220 220
221 mResolutionLabel = LLUICtrlFactory::getTextBoxByName(this,"unknown"); 221 mResolutionLabel = getChild<LLTextBox>("unknown");
222 222
223 223
224 childSetAction("Default",LLFloaterTexturePicker::onBtnSetToDefault,this); 224 childSetAction("Default",LLFloaterTexturePicker::onBtnSetToDefault,this);
@@ -229,10 +229,10 @@ LLFloaterTexturePicker::LLFloaterTexturePicker(
229 childSetCommitCallback("show_folders_check", onShowFolders, this); 229 childSetCommitCallback("show_folders_check", onShowFolders, this);
230 childSetVisible("show_folders_check", FALSE); 230 childSetVisible("show_folders_check", FALSE);
231 231
232 mSearchEdit = (LLSearchEditor*)getCtrlByNameAndType("inventory search editor", WIDGET_TYPE_SEARCH_EDITOR); 232 mSearchEdit = getChild<LLSearchEditor>("inventory search editor");
233 mSearchEdit->setSearchCallback(onSearchEdit, this); 233 mSearchEdit->setSearchCallback(onSearchEdit, this);
234 234
235 mInventoryPanel = (LLInventoryPanel*)this->getCtrlByNameAndType("inventory panel", WIDGET_TYPE_INVENTORY_PANEL); 235 mInventoryPanel = getChild<LLInventoryPanel>("inventory panel");
236 236
237 if(mInventoryPanel) 237 if(mInventoryPanel)
238 { 238 {
@@ -332,9 +332,9 @@ void LLFloaterTexturePicker::setCanApplyImmediately(BOOL b)
332 332
333void LLFloaterTexturePicker::stopUsingPipette() 333void LLFloaterTexturePicker::stopUsingPipette()
334{ 334{
335 if (gToolMgr && gToolMgr->getCurrentTool() == gToolPipette) 335 if (LLToolMgr::getInstance()->getCurrentTool() == LLToolPipette::getInstance())
336 { 336 {
337 gToolMgr->clearTransientTool(); 337 LLToolMgr::getInstance()->clearTransientTool();
338 } 338 }
339} 339}
340 340
@@ -407,15 +407,15 @@ BOOL LLFloaterTexturePicker::handleDragAndDrop(
407 return handled; 407 return handled;
408} 408}
409 409
410BOOL LLFloaterTexturePicker::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent) 410BOOL LLFloaterTexturePicker::handleKeyHere(KEY key, MASK mask)
411{ 411{
412 LLFolderView* root_folder = mInventoryPanel->getRootFolder(); 412 LLFolderView* root_folder = mInventoryPanel->getRootFolder();
413 413
414 if (root_folder && mSearchEdit) 414 if (root_folder && mSearchEdit)
415 { 415 {
416 if (!called_from_parent && mSearchEdit->hasFocus() && 416 if (mSearchEdit->hasFocus()
417 (key == KEY_RETURN || key == KEY_DOWN) && 417 && (key == KEY_RETURN || key == KEY_DOWN)
418 mask == MASK_NONE) 418 && mask == MASK_NONE)
419 { 419 {
420 if (!root_folder->getCurSelectedItem()) 420 if (!root_folder->getCurSelectedItem())
421 { 421 {
@@ -442,7 +442,7 @@ BOOL LLFloaterTexturePicker::handleKeyHere(KEY key, MASK mask, BOOL called_from_
442 } 442 }
443 } 443 }
444 444
445 return LLFloater::handleKeyHere(key, mask, called_from_parent); 445 return LLFloater::handleKeyHere(key, mask);
446} 446}
447 447
448// virtual 448// virtual
@@ -533,14 +533,14 @@ void LLFloaterTexturePicker::draw()
533 // if we're inactive, gray out "apply immediate" checkbox 533 // if we're inactive, gray out "apply immediate" checkbox
534 childSetEnabled("show_folders_check", mActive && mCanApplyImmediately && !mNoCopyTextureSelected); 534 childSetEnabled("show_folders_check", mActive && mCanApplyImmediately && !mNoCopyTextureSelected);
535 childSetEnabled("Select", mActive); 535 childSetEnabled("Select", mActive);
536 childSetEnabled("Pipette", gToolMgr != NULL && mActive); 536 childSetEnabled("Pipette", mActive);
537 childSetValue("Pipette", gToolMgr && gToolMgr->getCurrentTool() == gToolPipette); 537 childSetValue("Pipette", LLToolMgr::getInstance()->getCurrentTool() == LLToolPipette::getInstance());
538 538
539 //RN: reset search bar to reflect actual search query (all caps, for example) 539 //RN: reset search bar to reflect actual search query (all caps, for example)
540 mSearchEdit->setText(mInventoryPanel->getFilterSubString()); 540 mSearchEdit->setText(mInventoryPanel->getFilterSubString());
541 541
542 //BOOL allow_copy = FALSE; 542 //BOOL allow_copy = FALSE;
543 if( getVisible() && mOwner) 543 if( mOwner )
544 { 544 {
545 mTexturep = NULL; 545 mTexturep = NULL;
546 if(mImageAssetID.notNull()) 546 if(mImageAssetID.notNull())
@@ -739,18 +739,18 @@ void LLFloaterTexturePicker::onBtnPipette( void* userdata )
739{ 739{
740 LLFloaterTexturePicker* self = (LLFloaterTexturePicker*) userdata; 740 LLFloaterTexturePicker* self = (LLFloaterTexturePicker*) userdata;
741 741
742 if ( self && gToolMgr) 742 if ( self)
743 { 743 {
744 BOOL pipette_active = self->childGetValue("Pipette").asBoolean(); 744 BOOL pipette_active = self->childGetValue("Pipette").asBoolean();
745 pipette_active = !pipette_active; 745 pipette_active = !pipette_active;
746 if (pipette_active) 746 if (pipette_active)
747 { 747 {
748 gToolPipette->setSelectCallback(onTextureSelect, self); 748 LLToolPipette::getInstance()->setSelectCallback(onTextureSelect, self);
749 gToolMgr->setTransientTool(gToolPipette); 749 LLToolMgr::getInstance()->setTransientTool(LLToolPipette::getInstance());
750 } 750 }
751 else 751 else
752 { 752 {
753 gToolMgr->clearTransientTool(); 753 LLToolMgr::getInstance()->clearTransientTool();
754 } 754 }
755 } 755 }
756 756
@@ -859,7 +859,7 @@ void LLFloaterTexturePicker::onTextureSelect( const LLTextureEntry& te, void *da
859 LLUUID inventory_item_id = self->findItemID(te.getID(), TRUE); 859 LLUUID inventory_item_id = self->findItemID(te.getID(), TRUE);
860 if (self && inventory_item_id.notNull()) 860 if (self && inventory_item_id.notNull())
861 { 861 {
862 gToolPipette->setResult(TRUE, ""); 862 LLToolPipette::getInstance()->setResult(TRUE, "");
863 self->setImageID(te.getID()); 863 self->setImageID(te.getID());
864 864
865 self->mNoCopyTextureSelected = FALSE; 865 self->mNoCopyTextureSelected = FALSE;
@@ -875,13 +875,15 @@ void LLFloaterTexturePicker::onTextureSelect( const LLTextureEntry& te, void *da
875 } 875 }
876 else 876 else
877 { 877 {
878 gToolPipette->setResult(FALSE, "You do not have a copy this \nof texture in your inventory"); 878 LLToolPipette::getInstance()->setResult(FALSE, "You do not have a copy this \nof texture in your inventory");
879 } 879 }
880} 880}
881 881
882/////////////////////////////////////////////////////////////////////// 882///////////////////////////////////////////////////////////////////////
883// LLTextureCtrl 883// LLTextureCtrl
884 884
885static LLRegisterWidget<LLTextureCtrl> r("texture_picker");
886
885LLTextureCtrl::LLTextureCtrl( 887LLTextureCtrl::LLTextureCtrl(
886 const std::string& name, 888 const std::string& name,
887 const LLRect &rect, 889 const LLRect &rect,
@@ -933,6 +935,7 @@ LLTextureCtrl::LLTextureCtrl(
933 LLRect border_rect(0, getRect().getHeight(), getRect().getWidth(), 0); 935 LLRect border_rect(0, getRect().getHeight(), getRect().getWidth(), 0);
934 border_rect.mBottom += BTN_HEIGHT_SMALL; 936 border_rect.mBottom += BTN_HEIGHT_SMALL;
935 mBorder = new LLViewBorder("border", border_rect, LLViewBorder::BEVEL_IN); 937 mBorder = new LLViewBorder("border", border_rect, LLViewBorder::BEVEL_IN);
938 mBorder->setFollowsAll();
936 addChild(mBorder); 939 addChild(mBorder);
937 940
938 setEnabled(TRUE); // for the tooltip 941 setEnabled(TRUE); // for the tooltip
@@ -1276,50 +1279,47 @@ BOOL LLTextureCtrl::handleDragAndDrop(S32 x, S32 y, MASK mask,
1276 1279
1277void LLTextureCtrl::draw() 1280void LLTextureCtrl::draw()
1278{ 1281{
1279 if( getVisible() ) 1282 mBorder->setKeyboardFocusHighlight(hasFocus());
1280 {
1281 mBorder->setKeyboardFocusHighlight(hasFocus());
1282 1283
1283 if (mImageAssetID.isNull() || !mValid) 1284 if (mImageAssetID.isNull() || !mValid)
1284 { 1285 {
1285 mTexturep = NULL; 1286 mTexturep = NULL;
1286 } 1287 }
1287 else 1288 else
1288 { 1289 {
1289 mTexturep = gImageList.getImage(mImageAssetID, MIPMAP_YES, IMMEDIATE_NO); 1290 mTexturep = gImageList.getImage(mImageAssetID, MIPMAP_YES, IMMEDIATE_NO);
1290 mTexturep->setBoostLevel(LLViewerImage::BOOST_PREVIEW); 1291 mTexturep->setBoostLevel(LLViewerImage::BOOST_PREVIEW);
1291 } 1292 }
1292 1293
1293 // Border 1294 // Border
1294 LLRect border( 0, getRect().getHeight(), getRect().getWidth(), BTN_HEIGHT_SMALL ); 1295 LLRect border( 0, getRect().getHeight(), getRect().getWidth(), BTN_HEIGHT_SMALL );
1295 gl_rect_2d( border, mBorderColor, FALSE ); 1296 gl_rect_2d( border, mBorderColor, FALSE );
1296 1297
1297 // Interior 1298 // Interior
1298 LLRect interior = border; 1299 LLRect interior = border;
1299 interior.stretch( -1 ); 1300 interior.stretch( -1 );
1300 1301
1301 if( mTexturep ) 1302 if( mTexturep )
1303 {
1304 if( mTexturep->getComponents() == 4 )
1302 { 1305 {
1303 if( mTexturep->getComponents() == 4 ) 1306 gl_rect_2d_checkerboard( interior );
1304 {
1305 gl_rect_2d_checkerboard( interior );
1306 }
1307
1308 gl_draw_scaled_image( interior.mLeft, interior.mBottom, interior.getWidth(), interior.getHeight(), mTexturep);
1309 mTexturep->addTextureStats( (F32)(interior.getWidth() * interior.getHeight()) );
1310 } 1307 }
1311 else 1308
1312 { 1309 gl_draw_scaled_image( interior.mLeft, interior.mBottom, interior.getWidth(), interior.getHeight(), mTexturep);
1313 gl_rect_2d( interior, LLColor4::grey, TRUE ); 1310 mTexturep->addTextureStats( (F32)(interior.getWidth() * interior.getHeight()) );
1311 }
1312 else
1313 {
1314 gl_rect_2d( interior, LLColor4::grey, TRUE );
1314 1315
1315 // Draw X 1316 // Draw X
1316 gl_draw_x( interior, LLColor4::black ); 1317 gl_draw_x( interior, LLColor4::black );
1317 } 1318 }
1318 1319
1319 mTentativeLabel->setVisible( !mTexturep.isNull() && getTentative() ); 1320 mTentativeLabel->setVisible( !mTexturep.isNull() && getTentative() );
1320 1321
1321 LLUICtrl::draw(); 1322 LLUICtrl::draw();
1322 }
1323} 1323}
1324 1324
1325BOOL LLTextureCtrl::allowDrop(LLInventoryItem* item) 1325BOOL LLTextureCtrl::allowDrop(LLInventoryItem* item)
@@ -1370,14 +1370,14 @@ BOOL LLTextureCtrl::doDrop(LLInventoryItem* item)
1370 return TRUE; 1370 return TRUE;
1371} 1371}
1372 1372
1373BOOL LLTextureCtrl::handleUnicodeCharHere(llwchar uni_char, BOOL called_from_parent) 1373BOOL LLTextureCtrl::handleUnicodeCharHere(llwchar uni_char)
1374{ 1374{
1375 if( getVisible() && getEnabled() && !called_from_parent && ' ' == uni_char ) 1375 if( ' ' == uni_char )
1376 { 1376 {
1377 showPicker(TRUE); 1377 showPicker(TRUE);
1378 return TRUE; 1378 return TRUE;
1379 } 1379 }
1380 return LLUICtrl::handleUnicodeCharHere(uni_char, called_from_parent); 1380 return LLUICtrl::handleUnicodeCharHere(uni_char);
1381} 1381}
1382 1382
1383void LLTextureCtrl::setValue( const LLSD& value ) 1383void LLTextureCtrl::setValue( const LLSD& value )
diff --git a/linden/indra/newview/lltexturectrl.h b/linden/indra/newview/lltexturectrl.h
index ec45159..36f6ea2 100644
--- a/linden/indra/newview/lltexturectrl.h
+++ b/linden/indra/newview/lltexturectrl.h
@@ -74,8 +74,6 @@ public:
74 virtual ~LLTextureCtrl(); 74 virtual ~LLTextureCtrl();
75 75
76 // LLView interface 76 // LLView interface
77 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_TEXTURE_PICKER; }
78 virtual LLString getWidgetTag() const { return LL_TEXTURE_CTRL_TAG; }
79 virtual LLXMLNodePtr getXML(bool save_children = true) const; 77 virtual LLXMLNodePtr getXML(bool save_children = true) const;
80 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); 78 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
81 79
@@ -85,7 +83,7 @@ public:
85 EAcceptance *accept, 83 EAcceptance *accept,
86 LLString& tooltip_msg); 84 LLString& tooltip_msg);
87 virtual BOOL handleHover(S32 x, S32 y, MASK mask); 85 virtual BOOL handleHover(S32 x, S32 y, MASK mask);
88 virtual BOOL handleUnicodeCharHere(llwchar uni_char, BOOL called_from_parent); 86 virtual BOOL handleUnicodeCharHere(llwchar uni_char);
89 87
90 virtual void draw(); 88 virtual void draw();
91 virtual void setVisible( BOOL visible ); 89 virtual void setVisible( BOOL visible );
diff --git a/linden/indra/newview/lltexturefetch.cpp b/linden/indra/newview/lltexturefetch.cpp
index 3201055..9399ed3 100644
--- a/linden/indra/newview/lltexturefetch.cpp
+++ b/linden/indra/newview/lltexturefetch.cpp
@@ -52,8 +52,8 @@
52//static 52//static
53class LLTextureFetchWorker : public LLWorkerClass 53class LLTextureFetchWorker : public LLWorkerClass
54{ 54{
55 friend class LLTextureFetch; 55friend class LLTextureFetch;
56 56
57private: 57private:
58#if 0 58#if 0
59 class URLResponder : public LLHTTPClient::Responder 59 class URLResponder : public LLHTTPClient::Responder
@@ -235,6 +235,7 @@ private:
235 /*virtual*/ void startWork(S32 param); // called from addWork() (MAIN THREAD) 235 /*virtual*/ void startWork(S32 param); // called from addWork() (MAIN THREAD)
236 /*virtual*/ void endWork(S32 param, bool aborted); // called from doWork() (MAIN THREAD) 236 /*virtual*/ void endWork(S32 param, bool aborted); // called from doWork() (MAIN THREAD)
237 237
238 virtual LLString getName() { return LLString::null; }
238 void resetFormattedData(); 239 void resetFormattedData();
239 240
240 void setImagePriority(F32 priority); 241 void setImagePriority(F32 priority);
@@ -339,6 +340,26 @@ private:
339 U8 mImageCodec; 340 U8 mImageCodec;
340}; 341};
341 342
343class LLTextureFetchLocalFileWorker : public LLTextureFetchWorker
344{
345friend class LLTextureFetch;
346
347protected:
348 LLTextureFetchLocalFileWorker(LLTextureFetch* fetcher, const LLString& filename, const LLUUID& id, const LLHost& host,
349 F32 priority, S32 discard, S32 size)
350 : LLTextureFetchWorker(fetcher, id, host, priority, discard, size),
351 mFileName(filename)
352 {}
353
354private:
355 /*virtual*/ LLString getName() { return mFileName; }
356
357
358private:
359 LLString mFileName;
360};
361
362
342//static 363//static
343const char* LLTextureFetchWorker::sStateDescs[] = { 364const char* LLTextureFetchWorker::sStateDescs[] = {
344 "INVALID", 365 "INVALID",
@@ -581,9 +602,19 @@ bool LLTextureFetchWorker::doWork(S32 param)
581 mFileSize = 0; 602 mFileSize = 0;
582 mLoaded = FALSE; 603 mLoaded = FALSE;
583 setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); // Set priority first since Responder may change it 604 setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); // Set priority first since Responder may change it
605
584 CacheReadResponder* responder = new CacheReadResponder(mFetcher, mID, mFormattedImage); 606 CacheReadResponder* responder = new CacheReadResponder(mFetcher, mID, mFormattedImage);
585 mCacheReadHandle = mFetcher->mTextureCache->readFromCache(mID, cache_priority, 607 if (getName().empty())
586 offset, size, responder); 608 {
609 mCacheReadHandle = mFetcher->mTextureCache->readFromCache(mID, cache_priority,
610 offset, size, responder);
611 }
612 else
613 {
614 // read file from local disk
615 mCacheReadHandle = mFetcher->mTextureCache->readFromCache(getName(), mID, cache_priority,
616 offset, size, responder);
617 }
587 } 618 }
588 619
589 if (mLoaded) 620 if (mLoaded)
@@ -608,6 +639,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
608 639
609 if (mState == CACHE_POST) 640 if (mState == CACHE_POST)
610 { 641 {
642 mDesiredSize = llmax(mDesiredSize, FIRST_PACKET_SIZE);
611 mCachedSize = mFormattedImage.notNull() ? mFormattedImage->getDataSize() : 0; 643 mCachedSize = mFormattedImage.notNull() ? mFormattedImage->getDataSize() : 0;
612 // Successfully loaded 644 // Successfully loaded
613 if ((mCachedSize >= mDesiredSize) || mHaveAllData) 645 if ((mCachedSize >= mDesiredSize) || mHaveAllData)
@@ -619,6 +651,11 @@ bool LLTextureFetchWorker::doWork(S32 param)
619 } 651 }
620 else 652 else
621 { 653 {
654 if (!getName().empty())
655 {
656 // failed to load local file, we're done.
657 return true;
658 }
622 // need more data 659 // need more data
623 mState = LOAD_FROM_NETWORK; 660 mState = LOAD_FROM_NETWORK;
624 // fall through 661 // fall through
@@ -1274,7 +1311,13 @@ LLTextureFetch::~LLTextureFetch()
1274} 1311}
1275 1312
1276bool LLTextureFetch::createRequest(const LLUUID& id, const LLHost& host, F32 priority, 1313bool LLTextureFetch::createRequest(const LLUUID& id, const LLHost& host, F32 priority,
1277 S32 w, S32 h, S32 c, S32 discard, bool needs_aux) 1314 S32 w, S32 h, S32 c, S32 desired_discard, bool needs_aux)
1315{
1316 return createRequest(LLString::null, id, host, priority, w, h, c, desired_discard, needs_aux);
1317}
1318
1319bool LLTextureFetch::createRequest(const LLString& filename, const LLUUID& id, const LLHost& host, F32 priority,
1320 S32 w, S32 h, S32 c, S32 desired_discard, bool needs_aux)
1278{ 1321{
1279 if (mDebugPause) 1322 if (mDebugPause)
1280 { 1323 {
@@ -1298,7 +1341,7 @@ bool LLTextureFetch::createRequest(const LLUUID& id, const LLHost& host, F32 pri
1298 } 1341 }
1299 1342
1300 S32 desired_size; 1343 S32 desired_size;
1301 if ((discard == 0) && worker && worker->mFileSize) 1344 if ((desired_discard == 0) && worker && worker->mFileSize)
1302 { 1345 {
1303 // 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
1304 // (calcDataSizeJ2C() below makes assumptions about how the image 1347 // (calcDataSizeJ2C() below makes assumptions about how the image
@@ -1311,12 +1354,20 @@ bool LLTextureFetch::createRequest(const LLUUID& id, const LLHost& host, F32 pri
1311 // If the requester knows the dimentions of the image, 1354 // If the requester knows the dimentions of the image,
1312 // this will calculate how much data we need without having to parse the header 1355 // this will calculate how much data we need without having to parse the header
1313 1356
1314 desired_size = LLImageJ2C::calcDataSizeJ2C(w, h, c, discard); 1357 desired_size = LLImageJ2C::calcDataSizeJ2C(w, h, c, desired_discard);
1315 } 1358 }
1316 else 1359 else
1317 { 1360 {
1318 desired_size = FIRST_PACKET_SIZE; 1361 if (desired_discard == 0)
1319 discard = MAX_DISCARD_LEVEL; 1362 {
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 }
1320 } 1371 }
1321 if (worker) 1372 if (worker)
1322 { 1373 {
@@ -1326,7 +1377,7 @@ bool LLTextureFetch::createRequest(const LLUUID& id, const LLHost& host, F32 pri
1326 } 1377 }
1327 worker->lockWorkData(); 1378 worker->lockWorkData();
1328 worker->setImagePriority(priority); 1379 worker->setImagePriority(priority);
1329 worker->setDesiredDiscard(discard, desired_size); 1380 worker->setDesiredDiscard(desired_discard, desired_size);
1330 worker->unlockWorkData(); 1381 worker->unlockWorkData();
1331 if (!worker->haveWork()) 1382 if (!worker->haveWork())
1332 { 1383 {
@@ -1336,12 +1387,21 @@ bool LLTextureFetch::createRequest(const LLUUID& id, const LLHost& host, F32 pri
1336 } 1387 }
1337 else 1388 else
1338 { 1389 {
1339 worker = new LLTextureFetchWorker(this, id, host, priority, discard, desired_size); 1390 if (filename.empty())
1391 {
1392 // do remote fetch
1393 worker = new LLTextureFetchWorker(this, id, host, priority, desired_discard, desired_size);
1394 }
1395 else
1396 {
1397 // do local file fetch
1398 worker = new LLTextureFetchLocalFileWorker(this, filename, id, host, priority, desired_discard, desired_size);
1399 }
1340 mRequestMap[id] = worker; 1400 mRequestMap[id] = worker;
1341 } 1401 }
1342 worker->mActiveCount++; 1402 worker->mActiveCount++;
1343 worker->mNeedsAux = needs_aux; 1403 worker->mNeedsAux = needs_aux;
1344// llinfos << "REQUESTED: " << id << " Discard: " << discard << llendl; 1404// llinfos << "REQUESTED: " << id << " Discard: " << desired_discard << llendl;
1345 return true; 1405 return true;
1346} 1406}
1347 1407
diff --git a/linden/indra/newview/lltexturefetch.h b/linden/indra/newview/lltexturefetch.h
index d196978..195cb98 100644
--- a/linden/indra/newview/lltexturefetch.h
+++ b/linden/indra/newview/lltexturefetch.h
@@ -55,6 +55,8 @@ public:
55 55
56 bool createRequest(const LLUUID& id, const LLHost& host, F32 priority, 56 bool createRequest(const LLUUID& id, const LLHost& host, F32 priority,
57 S32 w, S32 h, S32 c, S32 discard, bool needs_aux); 57 S32 w, S32 h, S32 c, S32 discard, bool needs_aux);
58 bool createRequest(const LLString& filename, const LLUUID& id, const LLHost& host, F32 priority,
59 S32 w, S32 h, S32 c, S32 discard, bool needs_aux);
58 void deleteRequest(const LLUUID& id, bool cancel); 60 void deleteRequest(const LLUUID& id, bool cancel);
59 bool getRequestFinished(const LLUUID& id, S32& discard_level, 61 bool getRequestFinished(const LLUUID& id, S32& discard_level,
60 LLPointer<LLImageRaw>& raw, LLPointer<LLImageRaw>& aux); 62 LLPointer<LLImageRaw>& raw, LLPointer<LLImageRaw>& aux);
diff --git a/linden/indra/newview/lltextureview.cpp b/linden/indra/newview/lltextureview.cpp
index 09392f4..db2853e 100644
--- a/linden/indra/newview/lltextureview.cpp
+++ b/linden/indra/newview/lltextureview.cpp
@@ -89,9 +89,6 @@ public:
89 { 89 {
90 } 90 }
91 91
92 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_TEXTURE_BAR; }
93 virtual LLString getWidgetTag() const { return LL_TEXTURE_BAR_TAG; }
94
95 virtual void draw(); 92 virtual void draw();
96 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); 93 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
97 virtual LLRect getRequiredRect(); // Return the height of this object, given the set options. 94 virtual LLRect getRequiredRect(); // Return the height of this object, given the set options.
@@ -376,9 +373,6 @@ public:
376 setRect(LLRect(0,0,100,line_height * 4)); 373 setRect(LLRect(0,0,100,line_height * 4));
377 } 374 }
378 375
379 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_TEX_MEM_BAR; };
380 virtual LLString getWidgetTag() const { return LL_GL_TEX_MEM_BAR_TAG; };
381
382 virtual void draw(); 376 virtual void draw();
383 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); 377 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
384 virtual LLRect getRequiredRect(); // Return the height of this object, given the set options. 378 virtual LLRect getRequiredRect(); // Return the height of this object, given the set options.
@@ -545,17 +539,6 @@ LLTextureView::~LLTextureView()
545 mGLTexMemBar = 0; 539 mGLTexMemBar = 0;
546} 540}
547 541
548EWidgetType LLTextureView::getWidgetType() const
549{
550 return WIDGET_TYPE_TEXTURE_VIEW;
551}
552
553LLString LLTextureView::getWidgetTag() const
554{
555 return LL_TEXTURE_VIEW_TAG;
556}
557
558
559typedef std::pair<F32,LLViewerImage*> decode_pair_t; 542typedef std::pair<F32,LLViewerImage*> decode_pair_t;
560struct compare_decode_pair 543struct compare_decode_pair
561{ 544{
@@ -637,7 +620,7 @@ void LLTextureView::draw()
637 if (!mOrderFetch) 620 if (!mOrderFetch)
638 { 621 {
639#if 1 622#if 1
640 if (pri < HIGH_PRIORITY && gSelectMgr) 623 if (pri < HIGH_PRIORITY && LLSelectMgr::getInstance())
641 { 624 {
642 struct f : public LLSelectedTEFunctor 625 struct f : public LLSelectedTEFunctor
643 { 626 {
@@ -649,7 +632,7 @@ void LLTextureView::draw()
649 } 632 }
650 } func(imagep); 633 } func(imagep);
651 const bool firstonly = true; 634 const bool firstonly = true;
652 bool match = gSelectMgr->getSelection()->applyToTEs(&func, firstonly); 635 bool match = LLSelectMgr::getInstance()->getSelection()->applyToTEs(&func, firstonly);
653 if (match) 636 if (match)
654 { 637 {
655 pri += 3*HIGH_PRIORITY; 638 pri += 3*HIGH_PRIORITY;
diff --git a/linden/indra/newview/lltextureview.h b/linden/indra/newview/lltextureview.h
index bf0c518..fd4b80d 100644
--- a/linden/indra/newview/lltextureview.h
+++ b/linden/indra/newview/lltextureview.h
@@ -46,9 +46,6 @@ public:
46 LLTextureView(const std::string& name, const LLRect& rect); 46 LLTextureView(const std::string& name, const LLRect& rect);
47 ~LLTextureView(); 47 ~LLTextureView();
48 48
49 virtual EWidgetType getWidgetType() const;
50 virtual LLString getWidgetTag() const;
51
52 /*virtual*/ void draw(); 49 /*virtual*/ void draw();
53 /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask); 50 /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask);
54 /*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask); 51 /*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask);
diff --git a/linden/indra/newview/lltool.cpp b/linden/indra/newview/lltool.cpp
index 394b64d..00395e2 100644
--- a/linden/indra/newview/lltool.cpp
+++ b/linden/indra/newview/lltool.cpp
@@ -162,7 +162,7 @@ LLTool* LLTool::getOverrideTool(MASK mask)
162{ 162{
163 if (mask & MASK_ALT) 163 if (mask & MASK_ALT)
164 { 164 {
165 return gToolCamera; 165 return LLToolCamera::getInstance();
166 } 166 }
167 return NULL; 167 return NULL;
168} 168}
diff --git a/linden/indra/newview/lltoolbar.cpp b/linden/indra/newview/lltoolbar.cpp
index 9edc469..8d103ce 100644
--- a/linden/indra/newview/lltoolbar.cpp
+++ b/linden/indra/newview/lltoolbar.cpp
@@ -57,7 +57,7 @@
57#include "llviewermenu.h" 57#include "llviewermenu.h"
58#include "llfirstuse.h" 58#include "llfirstuse.h"
59#include "llviewerparcelmgr.h" 59#include "llviewerparcelmgr.h"
60#include "llvieweruictrlfactory.h" 60#include "lluictrlfactory.h"
61#include "llviewerwindow.h" 61#include "llviewerwindow.h"
62#include "lltoolgrab.h" 62#include "lltoolgrab.h"
63#include "llcombobox.h" 63#include "llcombobox.h"
@@ -158,10 +158,10 @@ BOOL LLToolBar::postBuild()
158 child_iter != getChildList()->end(); ++child_iter) 158 child_iter != getChildList()->end(); ++child_iter)
159 { 159 {
160 LLView *view = *child_iter; 160 LLView *view = *child_iter;
161 if(view->getWidgetType() == WIDGET_TYPE_BUTTON) 161 LLButton* buttonp = dynamic_cast<LLButton*>(view);
162 if(buttonp)
162 { 163 {
163 LLButton* btn = (LLButton*)view; 164 buttonp->setSoundFlags(LLView::SILENT);
164 btn->setSoundFlags(LLView::SILENT);
165 } 165 }
166 } 166 }
167 167
@@ -171,6 +171,8 @@ BOOL LLToolBar::postBuild()
171 LLRect rect(0, 0, RESIZE_HANDLE_WIDTH, RESIZE_HANDLE_HEIGHT); 171 LLRect rect(0, 0, RESIZE_HANDLE_WIDTH, RESIZE_HANDLE_HEIGHT);
172 mResizeHandle = new LLFakeResizeHandle(LLString(""), rect, RESIZE_HANDLE_WIDTH, RESIZE_HANDLE_HEIGHT); 172 mResizeHandle = new LLFakeResizeHandle(LLString(""), rect, RESIZE_HANDLE_WIDTH, RESIZE_HANDLE_HEIGHT);
173 this->addChildAtEnd(mResizeHandle); 173 this->addChildAtEnd(mResizeHandle);
174 LLLayoutStack* toolbar_stack = getChild<LLLayoutStack>("toolbar_stack");
175 toolbar_stack->reshape(toolbar_stack->getRect().getWidth() - RESIZE_HANDLE_WIDTH, toolbar_stack->getRect().getHeight());
174 } 176 }
175#endif // LL_DARWIN 177#endif // LL_DARWIN
176 178
@@ -191,7 +193,7 @@ BOOL LLToolBar::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
191 EAcceptance* accept, 193 EAcceptance* accept,
192 LLString& tooltip_msg) 194 LLString& tooltip_msg)
193{ 195{
194 LLButton* inventory_btn = LLUICtrlFactory::getButtonByName(this, "inventory_btn"); 196 LLButton* inventory_btn = getChild<LLButton>("inventory_btn");
195 if (!inventory_btn) return FALSE; 197 if (!inventory_btn) return FALSE;
196 198
197 LLInventoryView* active_inventory = LLInventoryView::getActiveInventory(); 199 LLInventoryView* active_inventory = LLInventoryView::getActiveInventory();
@@ -238,19 +240,14 @@ BOOL LLToolBar::visible(void*)
238 240
239void LLToolBar::layoutButtons() 241void LLToolBar::layoutButtons()
240{ 242{
241 // Always spans whole window. JC 243#if LL_DARWIN
242 const S32 FUDGE_WIDTH_OF_SCREEN = 4; 244 const S32 FUDGE_WIDTH_OF_SCREEN = 4;
243 S32 width = gViewerWindow->getWindowWidth() + FUDGE_WIDTH_OF_SCREEN; 245 S32 width = gViewerWindow->getWindowWidth() + FUDGE_WIDTH_OF_SCREEN;
244 S32 count = getChildCount();
245 S32 pad = 2; 246 S32 pad = 2;
246 247
247#if LL_DARWIN
248 // this function may be called before postBuild(), in which case mResizeHandle won't have been set up yet. 248 // this function may be called before postBuild(), in which case mResizeHandle won't have been set up yet.
249 if(mResizeHandle != NULL) 249 if(mResizeHandle != NULL)
250 { 250 {
251 // a resize handle has been added as a child, increasing the count by one.
252 count--;
253
254 if(!gViewerWindow->getWindow()->getFullscreen()) 251 if(!gViewerWindow->getWindow()->getFullscreen())
255 { 252 {
256 // Only when running in windowed mode on the Mac, leave room for a resize widget on the right edge of the bar. 253 // Only when running in windowed mode on the Mac, leave room for a resize widget on the right edge of the bar.
@@ -270,51 +267,6 @@ void LLToolBar::layoutButtons()
270 } 267 }
271 } 268 }
272#endif // LL_DARWIN 269#endif // LL_DARWIN
273
274 LLButton* chat_button = LLUICtrlFactory::getButtonByName(this, "chat_btn");
275 if (chat_button)
276 {
277 width -= chat_button->getRect().getWidth() + pad;
278 }
279
280 // We actually want to extend "pad" pixels off the right edge of the
281 // screen, such that the rightmost button is aligned.
282 S32 segment_width = llround((F32)(width) / ((F32)count - 1.f)); // ignore chat button
283 S32 btn_width = segment_width - pad;
284
285 // Evenly space all views
286 S32 height = -1;
287 S32 i = count - 1;
288 S32 x = pad;
289 for (child_list_const_reverse_iter_t child_iter = getChildList()->rbegin();
290 child_iter != getChildList()->rend(); ++child_iter)
291 {
292 LLView *btn_view = *child_iter;
293 if(btn_view->getWidgetType() == WIDGET_TYPE_BUTTON || btn_view->getWidgetType() == WIDGET_TYPE_FLYOUT_BUTTON)
294 {
295 if (height < 0)
296 {
297 height = btn_view->getRect().getHeight();
298 }
299
300 LLRect r;
301
302 if (btn_view->getName() == "chat_btn")
303 {
304 r.setOriginAndSize(x, 0, btn_view->getRect().getWidth(), height);
305 x += btn_view->getRect().getWidth() + pad;
306 }
307 else
308 {
309 r.setOriginAndSize(x, 0, btn_width, height);
310 x += segment_width;
311 }
312
313 btn_view->setOrigin(r.mLeft, r.mBottom);
314 btn_view->reshape(r.getWidth(), r.getHeight());
315 i--;
316 }
317 }
318} 270}
319 271
320 272
@@ -338,13 +290,13 @@ void LLToolBar::refresh()
338 290
339 childSetEnabled("fly_btn", gAgent.canFly() || gAgent.getFlying() ); 291 childSetEnabled("fly_btn", gAgent.canFly() || gAgent.getFlying() );
340 292
341 childSetEnabled("build_btn", gParcelMgr->agentCanBuild() ); 293 childSetEnabled("build_btn", LLViewerParcelMgr::getInstance()->agentCanBuild() );
342 294
343 295
344 // Check to see if we're in build mode 296 // Check to see if we're in build mode
345 BOOL build_mode = gToolMgr->inEdit(); 297 BOOL build_mode = LLToolMgr::getInstance()->inEdit();
346 // And not just clicking on a scripted object 298 // And not just clicking on a scripted object
347 if (gToolGrab->getHideBuildHighlight()) 299 if (LLToolGrab::getInstance()->getHideBuildHighlight())
348 { 300 {
349 build_mode = FALSE; 301 build_mode = FALSE;
350 } 302 }
@@ -355,69 +307,66 @@ void LLToolBar::refresh()
355 307
356void LLToolBar::updateCommunicateList() 308void LLToolBar::updateCommunicateList()
357{ 309{
358 LLFlyoutButton* communicate_button = (LLFlyoutButton*)getChildByName("communicate_btn", TRUE); 310 LLFlyoutButton* communicate_button = getChild<LLFlyoutButton>("communicate_btn");
359 if (communicate_button) 311 LLSD selected = communicate_button->getValue();
360 {
361 LLSD selected = communicate_button->getValue();
362 312
363 communicate_button->removeall(); 313 communicate_button->removeall();
364 314
365 LLFloater* frontmost_floater = LLFloaterChatterBox::getInstance()->getActiveFloater(); 315 LLFloater* frontmost_floater = LLFloaterChatterBox::getInstance()->getActiveFloater();
366 LLScrollListItem* itemp = NULL; 316 LLScrollListItem* itemp = NULL;
367 317
368 itemp = communicate_button->add(LLFloaterMyFriends::getInstance()->getShortTitle(), LLSD("contacts"), ADD_TOP); 318 itemp = communicate_button->add(LLFloaterMyFriends::getInstance()->getShortTitle(), LLSD("contacts"), ADD_TOP);
369 if (LLFloaterMyFriends::getInstance() == frontmost_floater) 319 if (LLFloaterMyFriends::getInstance() == frontmost_floater)
320 {
321 ((LLScrollListText*)itemp->getColumn(0))->setFontStyle(LLFontGL::BOLD);
322 // make sure current tab is selected in list
323 if (selected.isUndefined())
370 { 324 {
371 ((LLScrollListText*)itemp->getColumn(0))->setFontStyle(LLFontGL::BOLD); 325 selected = itemp->getValue();
372 // make sure current tab is selected in list
373 if (selected.isUndefined())
374 {
375 selected = itemp->getValue();
376 }
377 } 326 }
378 itemp = communicate_button->add(LLFloaterChat::getInstance()->getShortTitle(), LLSD("local chat"), ADD_TOP); 327 }
379 if (LLFloaterChat::getInstance() == frontmost_floater) 328 itemp = communicate_button->add(LLFloaterChat::getInstance()->getShortTitle(), LLSD("local chat"), ADD_TOP);
329 if (LLFloaterChat::getInstance() == frontmost_floater)
330 {
331 ((LLScrollListText*)itemp->getColumn(0))->setFontStyle(LLFontGL::BOLD);
332 if (selected.isUndefined())
380 { 333 {
381 ((LLScrollListText*)itemp->getColumn(0))->setFontStyle(LLFontGL::BOLD); 334 selected = itemp->getValue();
382 if (selected.isUndefined())
383 {
384 selected = itemp->getValue();
385 }
386 } 335 }
387 communicate_button->addSeparator(ADD_TOP); 336 }
388 communicate_button->add(getUIString("Redock Windows"), LLSD("redock"), ADD_TOP); 337 communicate_button->addSeparator(ADD_TOP);
389 communicate_button->addSeparator(ADD_TOP); 338 communicate_button->add(getUIString("Redock Windows"), LLSD("redock"), ADD_TOP);
390 communicate_button->add(LLFloaterMute::getInstance()->getShortTitle(), LLSD("mute list"), ADD_TOP); 339 communicate_button->addSeparator(ADD_TOP);
391 340 communicate_button->add(LLFloaterMute::getInstance()->getShortTitle(), LLSD("mute list"), ADD_TOP);
392 std::set<LLHandle<LLFloater> >::const_iterator floater_handle_it; 341
342 std::set<LLHandle<LLFloater> >::const_iterator floater_handle_it;
393 343
394 if (gIMMgr->getIMFloaterHandles().size() > 0) 344 if (gIMMgr->getIMFloaterHandles().size() > 0)
395 { 345 {
396 communicate_button->addSeparator(ADD_TOP); 346 communicate_button->addSeparator(ADD_TOP);
397 } 347 }
398 348
399 for(floater_handle_it = gIMMgr->getIMFloaterHandles().begin(); floater_handle_it != gIMMgr->getIMFloaterHandles().end(); ++floater_handle_it) 349 for(floater_handle_it = gIMMgr->getIMFloaterHandles().begin(); floater_handle_it != gIMMgr->getIMFloaterHandles().end(); ++floater_handle_it)
350 {
351 LLFloaterIMPanel* im_floaterp = (LLFloaterIMPanel*)floater_handle_it->get();
352 if (im_floaterp)
400 { 353 {
401 LLFloaterIMPanel* im_floaterp = (LLFloaterIMPanel*)floater_handle_it->get(); 354 LLString floater_title = im_floaterp->getNumUnreadMessages() > 0 ? "*" : "";
402 if (im_floaterp) 355 floater_title.append(im_floaterp->getShortTitle());
356 itemp = communicate_button->add(floater_title, im_floaterp->getSessionID(), ADD_TOP);
357 if (im_floaterp == frontmost_floater)
403 { 358 {
404 LLString floater_title = im_floaterp->getNumUnreadMessages() > 0 ? "*" : ""; 359 ((LLScrollListText*)itemp->getColumn(0))->setFontStyle(LLFontGL::BOLD);
405 floater_title.append(im_floaterp->getShortTitle()); 360 if (selected.isUndefined())
406 itemp = communicate_button->add(floater_title, im_floaterp->getSessionID(), ADD_TOP);
407 if (im_floaterp == frontmost_floater)
408 { 361 {
409 ((LLScrollListText*)itemp->getColumn(0))->setFontStyle(LLFontGL::BOLD); 362 selected = itemp->getValue();
410 if (selected.isUndefined())
411 {
412 selected = itemp->getValue();
413 }
414 } 363 }
415 } 364 }
416 } 365 }
417
418 communicate_button->setToggleState(gSavedSettings.getBOOL("ShowCommunicate"));
419 communicate_button->setValue(selected);
420 } 366 }
367
368 communicate_button->setToggleState(gSavedSettings.getBOOL("ShowCommunicate"));
369 communicate_button->setValue(selected);
421} 370}
422 371
423 372
@@ -425,7 +374,7 @@ void LLToolBar::updateCommunicateList()
425void LLToolBar::onClickCommunicate(LLUICtrl* ctrl, void* user_data) 374void LLToolBar::onClickCommunicate(LLUICtrl* ctrl, void* user_data)
426{ 375{
427 LLToolBar* toolbar = (LLToolBar*)user_data; 376 LLToolBar* toolbar = (LLToolBar*)user_data;
428 LLFlyoutButton* communicate_button = (LLFlyoutButton*)toolbar->getChildByName("communicate_btn", TRUE); 377 LLFlyoutButton* communicate_button = toolbar->getChild<LLFlyoutButton>("communicate_btn");
429 378
430 LLSD selected_option = communicate_button->getValue(); 379 LLSD selected_option = communicate_button->getValue();
431 380
diff --git a/linden/indra/newview/lltoolbrush.cpp b/linden/indra/newview/lltoolbrush.cpp
index 2db1d5b..9572440 100644
--- a/linden/indra/newview/lltoolbrush.cpp
+++ b/linden/indra/newview/lltoolbrush.cpp
@@ -62,8 +62,6 @@
62const std::string REGION_BLOCKS_TERRAFORM_MSG = "This region does not allow terraforming.\n" 62const std::string REGION_BLOCKS_TERRAFORM_MSG = "This region does not allow terraforming.\n"
63 "You will need to buy land in another part of the world to terraform it."; 63 "You will need to buy land in another part of the world to terraform it.";
64 64
65// Globals
66LLToolBrushLand *gToolLand = NULL;
67 65
68///============================================================================ 66///============================================================================
69/// Local function declarations, constants, enums, and typedefs 67/// Local function declarations, constants, enums, and typedefs
@@ -182,12 +180,12 @@ void LLToolBrushLand::modifyLandAtPointGlobal(const LLVector3d &pos_global,
182 180
183void LLToolBrushLand::modifyLandInSelectionGlobal() 181void LLToolBrushLand::modifyLandInSelectionGlobal()
184{ 182{
185 if (gParcelMgr->selectionEmpty()) 183 if (LLViewerParcelMgr::getInstance()->selectionEmpty())
186 { 184 {
187 return; 185 return;
188 } 186 }
189 187
190 if (gToolMgr->getCurrentTool() == gToolParcel) 188 if (LLToolMgr::getInstance()->getCurrentTool() == LLToolSelectLand::getInstance())
191 { 189 {
192 // selecting land, don't do anything 190 // selecting land, don't do anything
193 return; 191 return;
@@ -196,7 +194,7 @@ void LLToolBrushLand::modifyLandInSelectionGlobal()
196 LLVector3d min; 194 LLVector3d min;
197 LLVector3d max; 195 LLVector3d max;
198 196
199 gParcelMgr->getSelection(min, max); 197 LLViewerParcelMgr::getInstance()->getSelection(min, max);
200 198
201 S32 radioAction = gSavedSettings.getS32("RadioLandBrushAction"); 199 S32 radioAction = gSavedSettings.getS32("RadioLandBrushAction");
202 200
@@ -306,8 +304,8 @@ void LLToolBrushLand::modifyLandInSelectionGlobal()
306 msg->addF32Fast(_PREHASH_Seconds, seconds); 304 msg->addF32Fast(_PREHASH_Seconds, seconds);
307 msg->addF32Fast(_PREHASH_Height, mStartingZ); 305 msg->addF32Fast(_PREHASH_Height, mStartingZ);
308 306
309 BOOL parcel_selected = gParcelMgr->getParcelSelection()->getWholeParcelSelected(); 307 BOOL parcel_selected = LLViewerParcelMgr::getInstance()->getParcelSelection()->getWholeParcelSelected();
310 LLParcel* selected_parcel = gParcelMgr->getParcelSelection()->getParcel(); 308 LLParcel* selected_parcel = LLViewerParcelMgr::getInstance()->getParcelSelection()->getParcel();
311 309
312 if (parcel_selected && selected_parcel) 310 if (parcel_selected && selected_parcel)
313 { 311 {
@@ -376,7 +374,7 @@ BOOL LLToolBrushLand::handleMouseDown(S32 x, S32 y, MASK mask)
376 gIdleCallbacks.addFunction( &LLToolBrushLand::onIdle, (void*)this ); 374 gIdleCallbacks.addFunction( &LLToolBrushLand::onIdle, (void*)this );
377 setMouseCapture( TRUE ); 375 setMouseCapture( TRUE );
378 376
379 gParcelMgr->setSelectionVisible(FALSE); 377 LLViewerParcelMgr::getInstance()->setSelectionVisible(FALSE);
380 handled = TRUE; 378 handled = TRUE;
381 } 379 }
382 380
@@ -404,7 +402,7 @@ BOOL LLToolBrushLand::handleMouseUp(S32 x, S32 y, MASK mask)
404 // Release the mouse 402 // Release the mouse
405 setMouseCapture( FALSE ); 403 setMouseCapture( FALSE );
406 404
407 gParcelMgr->setSelectionVisible(TRUE); 405 LLViewerParcelMgr::getInstance()->setSelectionVisible(TRUE);
408 406
409 gIdleCallbacks.deleteFunction( &LLToolBrushLand::onIdle, (void*)this ); 407 gIdleCallbacks.deleteFunction( &LLToolBrushLand::onIdle, (void*)this );
410 handled = TRUE; 408 handled = TRUE;
@@ -435,7 +433,7 @@ void LLToolBrushLand::handleDeselect()
435 } 433 }
436 mLastShowParcelOwners = gSavedSettings.getBOOL("ShowParcelOwners"); 434 mLastShowParcelOwners = gSavedSettings.getBOOL("ShowParcelOwners");
437 gSavedSettings.setBOOL("ShowParcelOwners", mLastShowParcelOwners); 435 gSavedSettings.setBOOL("ShowParcelOwners", mLastShowParcelOwners);
438 gParcelMgr->setSelectionVisible(TRUE); 436 LLViewerParcelMgr::getInstance()->setSelectionVisible(TRUE);
439 mBrushSelected = FALSE; 437 mBrushSelected = FALSE;
440} 438}
441 439
@@ -506,25 +504,25 @@ void LLToolBrushLand::determineAffectedRegions(region_list_t& regions,
506 corner.mdV[VX] -= (LAND_BRUSH_SIZE[mBrushIndex] / 2); 504 corner.mdV[VX] -= (LAND_BRUSH_SIZE[mBrushIndex] / 2);
507 corner.mdV[VY] -= (LAND_BRUSH_SIZE[mBrushIndex] / 2); 505 corner.mdV[VY] -= (LAND_BRUSH_SIZE[mBrushIndex] / 2);
508 LLViewerRegion* region = NULL; 506 LLViewerRegion* region = NULL;
509 region = gWorldPointer->getRegionFromPosGlobal(corner); 507 region = LLWorld::getInstance()->getRegionFromPosGlobal(corner);
510 if(region && regions.find(region) == regions.end()) 508 if(region && regions.find(region) == regions.end())
511 { 509 {
512 regions.insert(region); 510 regions.insert(region);
513 } 511 }
514 corner.mdV[VY] += LAND_BRUSH_SIZE[mBrushIndex]; 512 corner.mdV[VY] += LAND_BRUSH_SIZE[mBrushIndex];
515 region = gWorldPointer->getRegionFromPosGlobal(corner); 513 region = LLWorld::getInstance()->getRegionFromPosGlobal(corner);
516 if(region && regions.find(region) == regions.end()) 514 if(region && regions.find(region) == regions.end())
517 { 515 {
518 regions.insert(region); 516 regions.insert(region);
519 } 517 }
520 corner.mdV[VX] += LAND_BRUSH_SIZE[mBrushIndex]; 518 corner.mdV[VX] += LAND_BRUSH_SIZE[mBrushIndex];
521 region = gWorldPointer->getRegionFromPosGlobal(corner); 519 region = LLWorld::getInstance()->getRegionFromPosGlobal(corner);
522 if(region && regions.find(region) == regions.end()) 520 if(region && regions.find(region) == regions.end())
523 { 521 {
524 regions.insert(region); 522 regions.insert(region);
525 } 523 }
526 corner.mdV[VY] -= LAND_BRUSH_SIZE[mBrushIndex]; 524 corner.mdV[VY] -= LAND_BRUSH_SIZE[mBrushIndex];
527 region = gWorldPointer->getRegionFromPosGlobal(corner); 525 region = LLWorld::getInstance()->getRegionFromPosGlobal(corner);
528 if(region && regions.find(region) == regions.end()) 526 if(region && regions.find(region) == regions.end())
529 { 527 {
530 regions.insert(region); 528 regions.insert(region);
@@ -536,7 +534,7 @@ void LLToolBrushLand::onIdle( void* brush_tool )
536{ 534{
537 LLToolBrushLand* self = reinterpret_cast<LLToolBrushLand*>(brush_tool); 535 LLToolBrushLand* self = reinterpret_cast<LLToolBrushLand*>(brush_tool);
538 536
539 if( gToolMgr->getCurrentTool() == self ) 537 if( LLToolMgr::getInstance()->getCurrentTool() == self )
540 { 538 {
541 self->brush(); 539 self->brush();
542 } 540 }
diff --git a/linden/indra/newview/lltoolbrush.h b/linden/indra/newview/lltoolbrush.h
index 9a12a18..b3a5576 100644
--- a/linden/indra/newview/lltoolbrush.h
+++ b/linden/indra/newview/lltoolbrush.h
@@ -46,7 +46,7 @@ class LLViewerRegion;
46// A toolbrush that modifies the land. 46// A toolbrush that modifies the land.
47//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 47//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
48 48
49class LLToolBrushLand : public LLTool, public LLEditMenuHandler 49class LLToolBrushLand : public LLTool, public LLEditMenuHandler, public LLSingleton<LLToolBrushLand>
50{ 50{
51 typedef std::set<LLViewerRegion*> region_list_t; 51 typedef std::set<LLViewerRegion*> region_list_t;
52 52
@@ -103,6 +103,5 @@ protected:
103 region_list_t mLastAffectedRegions; 103 region_list_t mLastAffectedRegions;
104}; 104};
105 105
106extern LLToolBrushLand *gToolLand;
107 106
108#endif // LL_LLTOOLBRUSH_H 107#endif // LL_LLTOOLBRUSH_H
diff --git a/linden/indra/newview/lltoolcomp.cpp b/linden/indra/newview/lltoolcomp.cpp
index 055cbb7..f840a15 100644
--- a/linden/indra/newview/lltoolcomp.cpp
+++ b/linden/indra/newview/lltoolcomp.cpp
@@ -46,7 +46,6 @@
46#include "lltoolgrab.h" 46#include "lltoolgrab.h"
47#include "lltoolgun.h" 47#include "lltoolgun.h"
48#include "lltoolmgr.h" 48#include "lltoolmgr.h"
49#include "lltoolselect.h"
50#include "lltoolselectrect.h" 49#include "lltoolselectrect.h"
51#include "lltoolplacer.h" 50#include "lltoolplacer.h"
52#include "llviewermenu.h" 51#include "llviewermenu.h"
@@ -61,14 +60,6 @@ const S32 BUTTON_WIDTH_SMALL = 32;
61const S32 BUTTON_WIDTH_BIG = 48; 60const S32 BUTTON_WIDTH_BIG = 48;
62const S32 HPAD = 4; 61const S32 HPAD = 4;
63 62
64// Globals
65LLToolCompInspect *gToolInspect = NULL;
66LLToolCompTranslate *gToolTranslate = NULL;
67LLToolCompScale *gToolStretch = NULL;
68LLToolCompRotate *gToolRotate = NULL;
69LLToolCompCreate *gToolCreate = NULL;
70LLToolCompGun *gToolGun = NULL;
71
72extern LLControlGroup gSavedSettings; 63extern LLControlGroup gSavedSettings;
73 64
74 65
@@ -126,7 +117,7 @@ void LLToolComposite::handleSelect()
126{ 117{
127 if (!gSavedSettings.getBOOL("EditLinkedParts")) 118 if (!gSavedSettings.getBOOL("EditLinkedParts"))
128 { 119 {
129 gSelectMgr->promoteSelectionToRoot(); 120 LLSelectMgr::getInstance()->promoteSelectionToRoot();
130 } 121 }
131 mCur = mDefault; 122 mCur = mDefault;
132 mCur->handleSelect(); 123 mCur->handleSelect();
@@ -162,27 +153,27 @@ void LLToolCompInspect::pickCallback(S32 x, S32 y, MASK mask)
162{ 153{
163 LLViewerObject* hit_obj = gViewerWindow->lastObjectHit(); 154 LLViewerObject* hit_obj = gViewerWindow->lastObjectHit();
164 155
165 if (!gToolInspect->mMouseDown) 156 if (!LLToolCompInspect::getInstance()->mMouseDown)
166 { 157 {
167 // fast click on object, but mouse is already up...just do select 158 // fast click on object, but mouse is already up...just do select
168 gToolInspect->mSelectRect->handleObjectSelection(hit_obj, mask, gSavedSettings.getBOOL("EditLinkedParts"), FALSE); 159 LLToolCompInspect::getInstance()->mSelectRect->handleObjectSelection(hit_obj, mask, gSavedSettings.getBOOL("EditLinkedParts"), FALSE);
169 return; 160 return;
170 } 161 }
171 162
172 if( hit_obj ) 163 if( hit_obj )
173 { 164 {
174 if (gSelectMgr->getSelection()->getObjectCount()) 165 if (LLSelectMgr::getInstance()->getSelection()->getObjectCount())
175 { 166 {
176 LLEditMenuHandler::gEditMenuHandler = gSelectMgr; 167 LLEditMenuHandler::gEditMenuHandler = LLSelectMgr::getInstance();
177 } 168 }
178 gToolInspect->setCurrentTool( gToolInspect->mSelectRect ); 169 LLToolCompInspect::getInstance()->setCurrentTool( LLToolCompInspect::getInstance()->mSelectRect );
179 gToolInspect->mSelectRect->handleMouseDown( x, y, mask ); 170 LLToolCompInspect::getInstance()->mSelectRect->handleMouseDown( x, y, mask );
180 171
181 } 172 }
182 else 173 else
183 { 174 {
184 gToolInspect->setCurrentTool( gToolInspect->mSelectRect ); 175 LLToolCompInspect::getInstance()->setCurrentTool( LLToolCompInspect::getInstance()->mSelectRect );
185 gToolInspect->mSelectRect->handleMouseDown( x, y, mask); 176 LLToolCompInspect::getInstance()->mSelectRect->handleMouseDown( x, y, mask);
186 } 177 }
187} 178}
188 179
@@ -235,41 +226,41 @@ void LLToolCompTranslate::pickCallback(S32 x, S32 y, MASK mask)
235{ 226{
236 LLViewerObject* hit_obj = gViewerWindow->lastObjectHit(); 227 LLViewerObject* hit_obj = gViewerWindow->lastObjectHit();
237 228
238 gToolTranslate->mManip->highlightManipulators(x, y); 229 LLToolCompTranslate::getInstance()->mManip->highlightManipulators(x, y);
239 if (!gToolTranslate->mMouseDown) 230 if (!LLToolCompTranslate::getInstance()->mMouseDown)
240 { 231 {
241 // fast click on object, but mouse is already up...just do select 232 // fast click on object, but mouse is already up...just do select
242 gToolTranslate->mSelectRect->handleObjectSelection(hit_obj, mask, gSavedSettings.getBOOL("EditLinkedParts"), FALSE); 233 LLToolCompTranslate::getInstance()->mSelectRect->handleObjectSelection(hit_obj, mask, gSavedSettings.getBOOL("EditLinkedParts"), FALSE);
243 return; 234 return;
244 } 235 }
245 236
246 if( hit_obj || gToolTranslate->mManip->getHighlightedPart() != LLManip::LL_NO_PART ) 237 if( hit_obj || LLToolCompTranslate::getInstance()->mManip->getHighlightedPart() != LLManip::LL_NO_PART )
247 { 238 {
248 if (gToolTranslate->mManip->getSelection()->getObjectCount()) 239 if (LLToolCompTranslate::getInstance()->mManip->getSelection()->getObjectCount())
249 { 240 {
250 LLEditMenuHandler::gEditMenuHandler = gSelectMgr; 241 LLEditMenuHandler::gEditMenuHandler = LLSelectMgr::getInstance();
251 } 242 }
252 243
253 BOOL can_move = gToolTranslate->mManip->canAffectSelection(); 244 BOOL can_move = LLToolCompTranslate::getInstance()->mManip->canAffectSelection();
254 245
255 if( LLManip::LL_NO_PART != gToolTranslate->mManip->getHighlightedPart() && can_move) 246 if( LLManip::LL_NO_PART != LLToolCompTranslate::getInstance()->mManip->getHighlightedPart() && can_move)
256 { 247 {
257 gToolTranslate->setCurrentTool( gToolTranslate->mManip ); 248 LLToolCompTranslate::getInstance()->setCurrentTool( LLToolCompTranslate::getInstance()->mManip );
258 gToolTranslate->mManip->handleMouseDownOnPart( x, y, mask ); 249 LLToolCompTranslate::getInstance()->mManip->handleMouseDownOnPart( x, y, mask );
259 } 250 }
260 else 251 else
261 { 252 {
262 gToolTranslate->setCurrentTool( gToolTranslate->mSelectRect ); 253 LLToolCompTranslate::getInstance()->setCurrentTool( LLToolCompTranslate::getInstance()->mSelectRect );
263 gToolTranslate->mSelectRect->handleMouseDown( x, y, mask ); 254 LLToolCompTranslate::getInstance()->mSelectRect->handleMouseDown( x, y, mask );
264 255
265 // *TODO: add toggle to trigger old click-drag functionality 256 // *TODO: add toggle to trigger old click-drag functionality
266 // gToolTranslate->mManip->handleMouseDownOnPart( XY_part, x, y, mask); 257 // LLToolCompTranslate::getInstance()->mManip->handleMouseDownOnPart( XY_part, x, y, mask);
267 } 258 }
268 } 259 }
269 else 260 else
270 { 261 {
271 gToolTranslate->setCurrentTool( gToolTranslate->mSelectRect ); 262 LLToolCompTranslate::getInstance()->setCurrentTool( LLToolCompTranslate::getInstance()->mSelectRect );
272 gToolTranslate->mSelectRect->handleMouseDown( x, y, mask); 263 LLToolCompTranslate::getInstance()->mSelectRect->handleMouseDown( x, y, mask);
273 } 264 }
274} 265}
275 266
@@ -283,11 +274,11 @@ LLTool* LLToolCompTranslate::getOverrideTool(MASK mask)
283{ 274{
284 if (mask == MASK_CONTROL) 275 if (mask == MASK_CONTROL)
285 { 276 {
286 return gToolRotate; 277 return LLToolCompRotate::getInstance();
287 } 278 }
288 else if (mask == (MASK_CONTROL | MASK_SHIFT)) 279 else if (mask == (MASK_CONTROL | MASK_SHIFT))
289 { 280 {
290 return gToolStretch; 281 return LLToolCompScale::getInstance();
291 } 282 }
292 return LLToolComposite::getOverrideTool(mask); 283 return LLToolComposite::getOverrideTool(mask);
293} 284}
@@ -309,7 +300,7 @@ BOOL LLToolCompTranslate::handleDoubleClick(S32 x, S32 y, MASK mask)
309 300
310void LLToolCompTranslate::render() 301void LLToolCompTranslate::render()
311{ 302{
312 mCur->render(); 303 mCur->render(); // removing this will not draw the RGB arrows and guidelines
313 304
314 if( mCur != mManip ) 305 if( mCur != mManip )
315 { 306 {
@@ -359,36 +350,36 @@ void LLToolCompScale::pickCallback(S32 x, S32 y, MASK mask)
359{ 350{
360 LLViewerObject* hit_obj = gViewerWindow->lastObjectHit(); 351 LLViewerObject* hit_obj = gViewerWindow->lastObjectHit();
361 352
362 gToolStretch->mManip->highlightManipulators(x, y); 353 LLToolCompScale::getInstance()->mManip->highlightManipulators(x, y);
363 if (!gToolStretch->mMouseDown) 354 if (!LLToolCompScale::getInstance()->mMouseDown)
364 { 355 {
365 // fast click on object, but mouse is already up...just do select 356 // fast click on object, but mouse is already up...just do select
366 gToolStretch->mSelectRect->handleObjectSelection(hit_obj, mask, gSavedSettings.getBOOL("EditLinkedParts"), FALSE); 357 LLToolCompScale::getInstance()->mSelectRect->handleObjectSelection(hit_obj, mask, gSavedSettings.getBOOL("EditLinkedParts"), FALSE);
367 358
368 return; 359 return;
369 } 360 }
370 361
371 if( hit_obj || gToolStretch->mManip->getHighlightedPart() != LLManip::LL_NO_PART) 362 if( hit_obj || LLToolCompScale::getInstance()->mManip->getHighlightedPart() != LLManip::LL_NO_PART)
372 { 363 {
373 if (gToolStretch->mManip->getSelection()->getObjectCount()) 364 if (LLToolCompScale::getInstance()->mManip->getSelection()->getObjectCount())
374 { 365 {
375 LLEditMenuHandler::gEditMenuHandler = gSelectMgr; 366 LLEditMenuHandler::gEditMenuHandler = LLSelectMgr::getInstance();
376 } 367 }
377 if( LLManip::LL_NO_PART != gToolStretch->mManip->getHighlightedPart() ) 368 if( LLManip::LL_NO_PART != LLToolCompScale::getInstance()->mManip->getHighlightedPart() )
378 { 369 {
379 gToolStretch->setCurrentTool( gToolStretch->mManip ); 370 LLToolCompScale::getInstance()->setCurrentTool( LLToolCompScale::getInstance()->mManip );
380 gToolStretch->mManip->handleMouseDownOnPart( x, y, mask ); 371 LLToolCompScale::getInstance()->mManip->handleMouseDownOnPart( x, y, mask );
381 } 372 }
382 else 373 else
383 { 374 {
384 gToolStretch->setCurrentTool( gToolStretch->mSelectRect ); 375 LLToolCompScale::getInstance()->setCurrentTool( LLToolCompScale::getInstance()->mSelectRect );
385 gToolStretch->mSelectRect->handleMouseDown( x, y, mask ); 376 LLToolCompScale::getInstance()->mSelectRect->handleMouseDown( x, y, mask );
386 } 377 }
387 } 378 }
388 else 379 else
389 { 380 {
390 gToolStretch->setCurrentTool( gToolStretch->mSelectRect ); 381 LLToolCompScale::getInstance()->setCurrentTool( LLToolCompScale::getInstance()->mSelectRect );
391 gToolStretch->mCur->handleMouseDown( x, y, mask ); 382 LLToolCompScale::getInstance()->mCur->handleMouseDown( x, y, mask );
392 } 383 }
393} 384}
394 385
@@ -402,7 +393,7 @@ LLTool* LLToolCompScale::getOverrideTool(MASK mask)
402{ 393{
403 if (mask == MASK_CONTROL) 394 if (mask == MASK_CONTROL)
404 { 395 {
405 return gToolRotate; 396 return LLToolCompRotate::getInstance();
406 } 397 }
407 398
408 return LLToolComposite::getOverrideTool(mask); 399 return LLToolComposite::getOverrideTool(mask);
@@ -489,8 +480,8 @@ void LLToolCompCreate::pickCallback(S32 x, S32 y, MASK mask)
489 mask = (mask & ~MASK_SHIFT); 480 mask = (mask & ~MASK_SHIFT);
490 mask = (mask & ~MASK_CONTROL); 481 mask = (mask & ~MASK_CONTROL);
491 482
492 gToolCreate->setCurrentTool( gToolCreate->mSelectRect ); 483 LLToolCompCreate::getInstance()->setCurrentTool( LLToolCompCreate::getInstance()->mSelectRect );
493 gToolCreate->mSelectRect->handleMouseDown( x, y, mask); 484 LLToolCompCreate::getInstance()->mSelectRect->handleMouseDown( x, y, mask);
494} 485}
495 486
496BOOL LLToolCompCreate::handleDoubleClick(S32 x, S32 y, MASK mask) 487BOOL LLToolCompCreate::handleDoubleClick(S32 x, S32 y, MASK mask)
@@ -560,35 +551,35 @@ void LLToolCompRotate::pickCallback(S32 x, S32 y, MASK mask)
560{ 551{
561 LLViewerObject* hit_obj = gViewerWindow->lastObjectHit(); 552 LLViewerObject* hit_obj = gViewerWindow->lastObjectHit();
562 553
563 gToolRotate->mManip->highlightManipulators(x, y); 554 LLToolCompRotate::getInstance()->mManip->highlightManipulators(x, y);
564 if (!gToolRotate->mMouseDown) 555 if (!LLToolCompRotate::getInstance()->mMouseDown)
565 { 556 {
566 // fast click on object, but mouse is already up...just do select 557 // fast click on object, but mouse is already up...just do select
567 gToolRotate->mSelectRect->handleObjectSelection(hit_obj, mask, gSavedSettings.getBOOL("EditLinkedParts"), FALSE); 558 LLToolCompRotate::getInstance()->mSelectRect->handleObjectSelection(hit_obj, mask, gSavedSettings.getBOOL("EditLinkedParts"), FALSE);
568 return; 559 return;
569 } 560 }
570 561
571 if( hit_obj || gToolRotate->mManip->getHighlightedPart() != LLManip::LL_NO_PART) 562 if( hit_obj || LLToolCompRotate::getInstance()->mManip->getHighlightedPart() != LLManip::LL_NO_PART)
572 { 563 {
573 if (gToolRotate->mManip->getSelection()->getObjectCount()) 564 if (LLToolCompRotate::getInstance()->mManip->getSelection()->getObjectCount())
574 { 565 {
575 LLEditMenuHandler::gEditMenuHandler = gSelectMgr; 566 LLEditMenuHandler::gEditMenuHandler = LLSelectMgr::getInstance();
576 } 567 }
577 if( LLManip::LL_NO_PART != gToolRotate->mManip->getHighlightedPart() ) 568 if( LLManip::LL_NO_PART != LLToolCompRotate::getInstance()->mManip->getHighlightedPart() )
578 { 569 {
579 gToolRotate->setCurrentTool( gToolRotate->mManip ); 570 LLToolCompRotate::getInstance()->setCurrentTool( LLToolCompRotate::getInstance()->mManip );
580 gToolRotate->mManip->handleMouseDownOnPart( x, y, mask ); 571 LLToolCompRotate::getInstance()->mManip->handleMouseDownOnPart( x, y, mask );
581 } 572 }
582 else 573 else
583 { 574 {
584 gToolRotate->setCurrentTool( gToolRotate->mSelectRect ); 575 LLToolCompRotate::getInstance()->setCurrentTool( LLToolCompRotate::getInstance()->mSelectRect );
585 gToolRotate->mSelectRect->handleMouseDown( x, y, mask ); 576 LLToolCompRotate::getInstance()->mSelectRect->handleMouseDown( x, y, mask );
586 } 577 }
587 } 578 }
588 else 579 else
589 { 580 {
590 gToolRotate->setCurrentTool( gToolRotate->mSelectRect ); 581 LLToolCompRotate::getInstance()->setCurrentTool( LLToolCompRotate::getInstance()->mSelectRect );
591 gToolRotate->mCur->handleMouseDown( x, y, mask ); 582 LLToolCompRotate::getInstance()->mCur->handleMouseDown( x, y, mask );
592 } 583 }
593} 584}
594 585
@@ -602,7 +593,7 @@ LLTool* LLToolCompRotate::getOverrideTool(MASK mask)
602{ 593{
603 if (mask == (MASK_CONTROL | MASK_SHIFT)) 594 if (mask == (MASK_CONTROL | MASK_SHIFT))
604 { 595 {
605 return gToolStretch; 596 return LLToolCompScale::getInstance();
606 } 597 }
607 return LLToolComposite::getOverrideTool(mask); 598 return LLToolComposite::getOverrideTool(mask);
608} 599}
@@ -671,7 +662,7 @@ BOOL LLToolCompGun::handleHover(S32 x, S32 y, MASK mask)
671 // item selected from context menu. 662 // item selected from context menu.
672 if ( mCur == mNull && !gPopupMenuView->getVisible() ) 663 if ( mCur == mNull && !gPopupMenuView->getVisible() )
673 { 664 {
674 gSelectMgr->deselectAll(); 665 LLSelectMgr::getInstance()->deselectAll();
675 setCurrentTool( (LLTool*) mGrab ); 666 setCurrentTool( (LLTool*) mGrab );
676 } 667 }
677 668
@@ -712,9 +703,9 @@ BOOL LLToolCompGun::handleMouseDown(S32 x, S32 y, MASK mask)
712 703
713 // On mousedown, start grabbing 704 // On mousedown, start grabbing
714 gGrabTransientTool = this; 705 gGrabTransientTool = this;
715 gToolMgr->getCurrentToolset()->selectTool( (LLTool*) mGrab ); 706 LLToolMgr::getInstance()->getCurrentToolset()->selectTool( (LLTool*) mGrab );
716 707
717 return gToolGrab->handleMouseDown(x, y, mask); 708 return LLToolGrab::getInstance()->handleMouseDown(x, y, mask);
718} 709}
719 710
720 711
@@ -729,9 +720,9 @@ BOOL LLToolCompGun::handleDoubleClick(S32 x, S32 y, MASK mask)
729 720
730 // On mousedown, start grabbing 721 // On mousedown, start grabbing
731 gGrabTransientTool = this; 722 gGrabTransientTool = this;
732 gToolMgr->getCurrentToolset()->selectTool( (LLTool*) mGrab ); 723 LLToolMgr::getInstance()->getCurrentToolset()->selectTool( (LLTool*) mGrab );
733 724
734 return gToolGrab->handleDoubleClick(x, y, mask); 725 return LLToolGrab::getInstance()->handleDoubleClick(x, y, mask);
735} 726}
736 727
737 728
diff --git a/linden/indra/newview/lltoolcomp.h b/linden/indra/newview/lltoolcomp.h
index ce4aec9..929a7e6 100644
--- a/linden/indra/newview/lltoolcomp.h
+++ b/linden/indra/newview/lltoolcomp.h
@@ -104,7 +104,7 @@ public:
104//----------------------------------------------------------------------- 104//-----------------------------------------------------------------------
105// LLToolCompTranslate 105// LLToolCompTranslate
106 106
107class LLToolCompInspect : public LLToolComposite 107class LLToolCompInspect : public LLToolComposite, public LLSingleton<LLToolCompInspect>
108{ 108{
109public: 109public:
110 LLToolCompInspect(); 110 LLToolCompInspect();
@@ -120,7 +120,7 @@ public:
120//----------------------------------------------------------------------- 120//-----------------------------------------------------------------------
121// LLToolCompTranslate 121// LLToolCompTranslate
122 122
123class LLToolCompTranslate : public LLToolComposite 123class LLToolCompTranslate : public LLToolComposite, public LLSingleton<LLToolCompTranslate>
124{ 124{
125public: 125public:
126 LLToolCompTranslate(); 126 LLToolCompTranslate();
@@ -141,7 +141,7 @@ public:
141//----------------------------------------------------------------------- 141//-----------------------------------------------------------------------
142// LLToolCompScale 142// LLToolCompScale
143 143
144class LLToolCompScale : public LLToolComposite 144class LLToolCompScale : public LLToolComposite, public LLSingleton<LLToolCompScale>
145{ 145{
146public: 146public:
147 LLToolCompScale(); 147 LLToolCompScale();
@@ -163,7 +163,7 @@ public:
163//----------------------------------------------------------------------- 163//-----------------------------------------------------------------------
164// LLToolCompRotate 164// LLToolCompRotate
165 165
166class LLToolCompRotate : public LLToolComposite 166class LLToolCompRotate : public LLToolComposite, public LLSingleton<LLToolCompRotate>
167{ 167{
168public: 168public:
169 LLToolCompRotate(); 169 LLToolCompRotate();
@@ -186,7 +186,7 @@ protected:
186//----------------------------------------------------------------------- 186//-----------------------------------------------------------------------
187// LLToolCompCreate 187// LLToolCompCreate
188 188
189class LLToolCompCreate : public LLToolComposite 189class LLToolCompCreate : public LLToolComposite, public LLSingleton<LLToolCompCreate>
190{ 190{
191public: 191public:
192 LLToolCompCreate(); 192 LLToolCompCreate();
@@ -211,7 +211,7 @@ class LLToolGun;
211class LLToolGrab; 211class LLToolGrab;
212class LLToolSelect; 212class LLToolSelect;
213 213
214class LLToolCompGun : public LLToolComposite 214class LLToolCompGun : public LLToolComposite, public LLSingleton<LLToolCompGun>
215{ 215{
216public: 216public:
217 LLToolCompGun(); 217 LLToolCompGun();
@@ -234,11 +234,5 @@ protected:
234 LLTool* mNull; 234 LLTool* mNull;
235}; 235};
236 236
237extern LLToolCompInspect *gToolInspect;
238extern LLToolCompTranslate *gToolTranslate;
239extern LLToolCompScale *gToolStretch;
240extern LLToolCompRotate *gToolRotate;
241extern LLToolCompCreate *gToolCreate;
242extern LLToolCompGun *gToolGun;
243 237
244#endif // LL_TOOLCOMP_H 238#endif // LL_TOOLCOMP_H
diff --git a/linden/indra/newview/lltooldraganddrop.cpp b/linden/indra/newview/lltooldraganddrop.cpp
index 9524fd8..67a2153 100644
--- a/linden/indra/newview/lltooldraganddrop.cpp
+++ b/linden/indra/newview/lltooldraganddrop.cpp
@@ -64,7 +64,6 @@
64#include "llworld.h" 64#include "llworld.h"
65#include "object_flags.h" 65#include "object_flags.h"
66 66
67LLToolDragAndDrop *gToolDragAndDrop = NULL;
68 67
69// MAX ITEMS is based on (sizeof(uuid)+2) * count must be < MTUBYTES 68// MAX ITEMS is based on (sizeof(uuid)+2) * count must be < MTUBYTES
70// or 18 * count < 1200 => count < 1200/18 => 66. I've cut it down a 69// or 18 * count < 1200 => count < 1200/18 => 66. I've cut it down a
@@ -78,37 +77,6 @@ const char* FOLDER_INCLUDES_ATTACHMENTS_BEING_WORN =
78// syntactic sugar 77// syntactic sugar
79#define callMemberFunction(object,ptrToMember) ((object).*(ptrToMember)) 78#define callMemberFunction(object,ptrToMember) ((object).*(ptrToMember))
80 79
81/*
82const LLUUID MULTI_CONTAINER_TEXTURE("b2181ea2-1937-2ee1-78b8-bf05c43536b7");
83LLUUID CONTAINER_TEXTURES[LLAssetType::AT_COUNT];
84
85const char* CONTAINER_TEXTURE_NAMES[LLAssetType::AT_COUNT] =
86{
87 "container_texture.tga",
88 "container_sound.tga",
89 "container_many_things.tga",
90 "container_landmark.tga",
91 "container_script.tga",
92 "container_clothing.tga",
93 "container_object.tga",
94 "container_many_things.tga",
95 "container_many_things.tga",
96 "container_many_things.tga",
97 "container_script.tga",
98 "container_script.tga",
99 "container_texture.tga",
100 "container_bodypart.tga",
101 "container_many_things.tga",
102 "container_many_things.tga",
103 "container_many_things.tga",
104 "container_sound.tga",
105 "container_texture.tga",
106 "container_texture.tga",
107 "container_animation.tga",
108 "container_gesture.tga"
109};
110*/
111
112class LLNoPreferredType : public LLInventoryCollectFunctor 80class LLNoPreferredType : public LLInventoryCollectFunctor
113{ 81{
114public: 82public:
@@ -610,11 +578,7 @@ LLToolDragAndDrop::LLToolDragAndDrop()
610 mDrop(FALSE), 578 mDrop(FALSE),
611 mCurItemIndex(0) 579 mCurItemIndex(0)
612{ 580{
613 // setup container texture ids 581
614 //for (S32 i = 0; i < LLAssetType::AT_COUNT; i++)
615 //{
616 // CONTAINER_TEXTURES[i].set(gViewerArt.getString(CONTAINER_TEXTURE_NAMES[i]));
617 //}
618} 582}
619 583
620void LLToolDragAndDrop::setDragStart(S32 x, S32 y) 584void LLToolDragAndDrop::setDragStart(S32 x, S32 y)
@@ -650,7 +614,7 @@ void LLToolDragAndDrop::beginDrag(EDragAndDropType type,
650 mObjectID = object_id; 614 mObjectID = object_id;
651 615
652 setMouseCapture( TRUE ); 616 setMouseCapture( TRUE );
653 gToolMgr->setTransientTool( this ); 617 LLToolMgr::getInstance()->setTransientTool( this );
654 mCursor = UI_CURSOR_NO; 618 mCursor = UI_CURSOR_NO;
655 if((mCargoTypes[0] == DAD_CATEGORY) 619 if((mCargoTypes[0] == DAD_CATEGORY)
656 && ((mSource == SOURCE_AGENT) || (mSource == SOURCE_LIBRARY))) 620 && ((mSource == SOURCE_AGENT) || (mSource == SOURCE_LIBRARY)))
@@ -719,7 +683,7 @@ void LLToolDragAndDrop::beginMultiDrag(
719 mSourceID = source_id; 683 mSourceID = source_id;
720 684
721 setMouseCapture( TRUE ); 685 setMouseCapture( TRUE );
722 gToolMgr->setTransientTool( this ); 686 LLToolMgr::getInstance()->setTransientTool( this );
723 mCursor = UI_CURSOR_NO; 687 mCursor = UI_CURSOR_NO;
724 if((mSource == SOURCE_AGENT) || (mSource == SOURCE_LIBRARY)) 688 if((mSource == SOURCE_AGENT) || (mSource == SOURCE_LIBRARY))
725 { 689 {
@@ -766,14 +730,14 @@ void LLToolDragAndDrop::beginMultiDrag(
766 730
767void LLToolDragAndDrop::endDrag() 731void LLToolDragAndDrop::endDrag()
768{ 732{
769 gSelectMgr->unhighlightAll(); 733 LLSelectMgr::getInstance()->unhighlightAll();
770 setMouseCapture(FALSE); 734 setMouseCapture(FALSE);
771} 735}
772 736
773void LLToolDragAndDrop::onMouseCaptureLost() 737void LLToolDragAndDrop::onMouseCaptureLost()
774{ 738{
775 // Called whenever the drag ends or if mouse captue is simply lost 739 // Called whenever the drag ends or if mouse captue is simply lost
776 gToolMgr->clearTransientTool(); 740 LLToolMgr::getInstance()->clearTransientTool();
777 mCargoTypes.clear(); 741 mCargoTypes.clear();
778 mCargoIDs.clear(); 742 mCargoIDs.clear();
779 mSource = SOURCE_AGENT; 743 mSource = SOURCE_AGENT;
@@ -1045,7 +1009,7 @@ void LLToolDragAndDrop::pickCallback(S32 x, S32 y, MASK mask)
1045 S32 hit_face = -1; 1009 S32 hit_face = -1;
1046 1010
1047 LLViewerObject* hit_obj = gViewerWindow->lastNonFloraObjectHit(); 1011 LLViewerObject* hit_obj = gViewerWindow->lastNonFloraObjectHit();
1048 gSelectMgr->unhighlightAll(); 1012 LLSelectMgr::getInstance()->unhighlightAll();
1049 1013
1050 // Treat attachments as part of the avatar they are attached to. 1014 // Treat attachments as part of the avatar they are attached to.
1051 if (hit_obj) 1015 if (hit_obj)
@@ -1055,9 +1019,9 @@ void LLToolDragAndDrop::pickCallback(S32 x, S32 y, MASK mask)
1055 LLVOAvatar* avatar = LLVOAvatar::findAvatarFromAttachment( hit_obj ); 1019 LLVOAvatar* avatar = LLVOAvatar::findAvatarFromAttachment( hit_obj );
1056 if( !avatar ) 1020 if( !avatar )
1057 { 1021 {
1058 gToolDragAndDrop->mLastAccept = ACCEPT_NO; 1022 LLToolDragAndDrop::getInstance()->mLastAccept = ACCEPT_NO;
1059 gToolDragAndDrop->mCursor = UI_CURSOR_NO; 1023 LLToolDragAndDrop::getInstance()->mCursor = UI_CURSOR_NO;
1060 gViewerWindow->getWindow()->setCursor( gToolDragAndDrop->mCursor ); 1024 gViewerWindow->getWindow()->setCursor( LLToolDragAndDrop::getInstance()->mCursor );
1061 return; 1025 return;
1062 } 1026 }
1063 1027
@@ -1083,11 +1047,11 @@ void LLToolDragAndDrop::pickCallback(S32 x, S32 y, MASK mask)
1083 hit_face = gLastHitNonFloraObjectFace; 1047 hit_face = gLastHitNonFloraObjectFace;
1084 // if any item being dragged will be applied to the object under our cursor 1048 // if any item being dragged will be applied to the object under our cursor
1085 // highlight that object 1049 // highlight that object
1086 for (S32 i = 0; i < (S32)gToolDragAndDrop->mCargoIDs.size(); i++) 1050 for (S32 i = 0; i < (S32)LLToolDragAndDrop::getInstance()->mCargoIDs.size(); i++)
1087 { 1051 {
1088 if (gToolDragAndDrop->mCargoTypes[i] != DAD_OBJECT || (mask & MASK_CONTROL)) 1052 if (LLToolDragAndDrop::getInstance()->mCargoTypes[i] != DAD_OBJECT || (mask & MASK_CONTROL))
1089 { 1053 {
1090 gSelectMgr->highlightObjectAndFamily(hit_obj); 1054 LLSelectMgr::getInstance()->highlightObjectAndFamily(hit_obj);
1091 break; 1055 break;
1092 } 1056 }
1093 } 1057 }
@@ -1099,78 +1063,78 @@ void LLToolDragAndDrop::pickCallback(S32 x, S32 y, MASK mask)
1099 hit_face = -1; 1063 hit_face = -1;
1100 } 1064 }
1101 1065
1102 gToolDragAndDrop->mLastAccept = ACCEPT_YES_MULTI; 1066 LLToolDragAndDrop::getInstance()->mLastAccept = ACCEPT_YES_MULTI;
1103 1067
1104 for (gToolDragAndDrop->mCurItemIndex = 0; gToolDragAndDrop->mCurItemIndex < (S32)gToolDragAndDrop->mCargoIDs.size(); 1068 for (LLToolDragAndDrop::getInstance()->mCurItemIndex = 0; LLToolDragAndDrop::getInstance()->mCurItemIndex < (S32)LLToolDragAndDrop::getInstance()->mCargoIDs.size();
1105 gToolDragAndDrop->mCurItemIndex++) 1069 LLToolDragAndDrop::getInstance()->mCurItemIndex++)
1106 { 1070 {
1107 // Call the right implementation function 1071 // Call the right implementation function
1108 gToolDragAndDrop->mLastAccept = (EAcceptance)llmin( 1072 LLToolDragAndDrop::getInstance()->mLastAccept = (EAcceptance)llmin(
1109 (U32)gToolDragAndDrop->mLastAccept, 1073 (U32)LLToolDragAndDrop::getInstance()->mLastAccept,
1110 (U32)callMemberFunction((*gToolDragAndDrop), 1074 (U32)callMemberFunction((*LLToolDragAndDrop::getInstance()),
1111 gToolDragAndDrop->sDragAndDrop3d[gToolDragAndDrop->mCargoTypes[gToolDragAndDrop->mCurItemIndex]][target]) 1075 LLToolDragAndDrop::getInstance()->sDragAndDrop3d[LLToolDragAndDrop::getInstance()->mCargoTypes[LLToolDragAndDrop::getInstance()->mCurItemIndex]][target])
1112 (hit_obj, hit_face, mask, FALSE)); 1076 (hit_obj, hit_face, mask, FALSE));
1113 } 1077 }
1114 1078
1115 if (gToolDragAndDrop->mDrop && (U32)gToolDragAndDrop->mLastAccept >= ACCEPT_YES_COPY_SINGLE) 1079 if (LLToolDragAndDrop::getInstance()->mDrop && (U32)LLToolDragAndDrop::getInstance()->mLastAccept >= ACCEPT_YES_COPY_SINGLE)
1116 { 1080 {
1117 // if target allows multi-drop, go ahead and start iteration at beginning of cargo list 1081 // if target allows multi-drop, go ahead and start iteration at beginning of cargo list
1118 if (gToolDragAndDrop->mLastAccept >= ACCEPT_YES_COPY_MULTI) 1082 if (LLToolDragAndDrop::getInstance()->mLastAccept >= ACCEPT_YES_COPY_MULTI)
1119 { 1083 {
1120 gToolDragAndDrop->mCurItemIndex = 0; 1084 LLToolDragAndDrop::getInstance()->mCurItemIndex = 0;
1121 } 1085 }
1122 // otherwise start at end, to follow selection rules (last selected item is most current) 1086 // otherwise start at end, to follow selection rules (last selected item is most current)
1123 else 1087 else
1124 { 1088 {
1125 gToolDragAndDrop->mCurItemIndex = gToolDragAndDrop->mCargoIDs.size() - 1; 1089 LLToolDragAndDrop::getInstance()->mCurItemIndex = LLToolDragAndDrop::getInstance()->mCargoIDs.size() - 1;
1126 } 1090 }
1127 1091
1128 for (; gToolDragAndDrop->mCurItemIndex < (S32)gToolDragAndDrop->mCargoIDs.size(); 1092 for (; LLToolDragAndDrop::getInstance()->mCurItemIndex < (S32)LLToolDragAndDrop::getInstance()->mCargoIDs.size();
1129 gToolDragAndDrop->mCurItemIndex++) 1093 LLToolDragAndDrop::getInstance()->mCurItemIndex++)
1130 { 1094 {
1131 // Call the right implementation function 1095 // Call the right implementation function
1132 (U32)callMemberFunction((*gToolDragAndDrop), 1096 (U32)callMemberFunction((*LLToolDragAndDrop::getInstance()),
1133 gToolDragAndDrop->sDragAndDrop3d[gToolDragAndDrop->mCargoTypes[gToolDragAndDrop->mCurItemIndex]][target]) 1097 LLToolDragAndDrop::getInstance()->sDragAndDrop3d[LLToolDragAndDrop::getInstance()->mCargoTypes[LLToolDragAndDrop::getInstance()->mCurItemIndex]][target])
1134 (hit_obj, hit_face, mask, TRUE); 1098 (hit_obj, hit_face, mask, TRUE);
1135 } 1099 }
1136 } 1100 }
1137 1101
1138 switch( gToolDragAndDrop->mLastAccept ) 1102 switch( LLToolDragAndDrop::getInstance()->mLastAccept )
1139 { 1103 {
1140 case ACCEPT_YES_MULTI: 1104 case ACCEPT_YES_MULTI:
1141 if (gToolDragAndDrop->mCargoIDs.size() > 1) 1105 if (LLToolDragAndDrop::getInstance()->mCargoIDs.size() > 1)
1142 { 1106 {
1143 gToolDragAndDrop->mCursor = UI_CURSOR_ARROWDRAGMULTI; 1107 LLToolDragAndDrop::getInstance()->mCursor = UI_CURSOR_ARROWDRAGMULTI;
1144 } 1108 }
1145 else 1109 else
1146 { 1110 {
1147 gToolDragAndDrop->mCursor = UI_CURSOR_ARROWDRAG; 1111 LLToolDragAndDrop::getInstance()->mCursor = UI_CURSOR_ARROWDRAG;
1148 } 1112 }
1149 break; 1113 break;
1150 case ACCEPT_YES_SINGLE: 1114 case ACCEPT_YES_SINGLE:
1151 gToolDragAndDrop->mCursor = UI_CURSOR_ARROWDRAG; 1115 LLToolDragAndDrop::getInstance()->mCursor = UI_CURSOR_ARROWDRAG;
1152 break; 1116 break;
1153 1117
1154 case ACCEPT_NO_LOCKED: 1118 case ACCEPT_NO_LOCKED:
1155 gToolDragAndDrop->mCursor = UI_CURSOR_NOLOCKED; 1119 LLToolDragAndDrop::getInstance()->mCursor = UI_CURSOR_NOLOCKED;
1156 break; 1120 break;
1157 1121
1158 case ACCEPT_NO: 1122 case ACCEPT_NO:
1159 gToolDragAndDrop->mCursor = UI_CURSOR_NO; 1123 LLToolDragAndDrop::getInstance()->mCursor = UI_CURSOR_NO;
1160 break; 1124 break;
1161 1125
1162 case ACCEPT_YES_COPY_MULTI: 1126 case ACCEPT_YES_COPY_MULTI:
1163 if (gToolDragAndDrop->mCargoIDs.size() > 1) 1127 if (LLToolDragAndDrop::getInstance()->mCargoIDs.size() > 1)
1164 { 1128 {
1165 gToolDragAndDrop->mCursor = UI_CURSOR_ARROWCOPYMULTI; 1129 LLToolDragAndDrop::getInstance()->mCursor = UI_CURSOR_ARROWCOPYMULTI;
1166 } 1130 }
1167 else 1131 else
1168 { 1132 {
1169 gToolDragAndDrop->mCursor = UI_CURSOR_ARROWCOPY; 1133 LLToolDragAndDrop::getInstance()->mCursor = UI_CURSOR_ARROWCOPY;
1170 } 1134 }
1171 break; 1135 break;
1172 case ACCEPT_YES_COPY_SINGLE: 1136 case ACCEPT_YES_COPY_SINGLE:
1173 gToolDragAndDrop->mCursor = UI_CURSOR_ARROWCOPY; 1137 LLToolDragAndDrop::getInstance()->mCursor = UI_CURSOR_ARROWCOPY;
1174 break; 1138 break;
1175 case ACCEPT_POSTPONED: 1139 case ACCEPT_POSTPONED:
1176 break; 1140 break;
@@ -1178,10 +1142,10 @@ void LLToolDragAndDrop::pickCallback(S32 x, S32 y, MASK mask)
1178 llassert( FALSE ); 1142 llassert( FALSE );
1179 } 1143 }
1180 1144
1181 gToolDragAndDrop->mLastHitPos = gLastHitPosGlobal + gLastHitObjectOffset; 1145 LLToolDragAndDrop::getInstance()->mLastHitPos = gLastHitPosGlobal + gLastHitObjectOffset;
1182 gToolDragAndDrop->mLastCameraPos = gAgent.getCameraPositionGlobal(); 1146 LLToolDragAndDrop::getInstance()->mLastCameraPos = gAgent.getCameraPositionGlobal();
1183 1147
1184 gViewerWindow->getWindow()->setCursor( gToolDragAndDrop->mCursor ); 1148 gViewerWindow->getWindow()->setCursor( LLToolDragAndDrop::getInstance()->mCursor );
1185} 1149}
1186 1150
1187// static 1151// static
@@ -1294,7 +1258,7 @@ void LLToolDragAndDrop::dropTextureAllFaces(LLViewerObject* hit_obj,
1294 return; 1258 return;
1295 } 1259 }
1296 LLViewerImage* image = gImageList.getImage(asset_id); 1260 LLViewerImage* image = gImageList.getImage(asset_id);
1297 gViewerStats->incStat(LLViewerStats::ST_EDIT_TEXTURE_COUNT ); 1261 LLViewerStats::getInstance()->incStat(LLViewerStats::ST_EDIT_TEXTURE_COUNT );
1298 S32 num_faces = hit_obj->getNumTEs(); 1262 S32 num_faces = hit_obj->getNumTEs();
1299 for( S32 face = 0; face < num_faces; face++ ) 1263 for( S32 face = 0; face < num_faces; face++ )
1300 { 1264 {
@@ -1337,7 +1301,7 @@ void LLToolDragAndDrop::dropTextureOneFace(LLViewerObject* hit_obj,
1337 } 1301 }
1338 // update viewer side image in anticipation of update from simulator 1302 // update viewer side image in anticipation of update from simulator
1339 LLViewerImage* image = gImageList.getImage(asset_id); 1303 LLViewerImage* image = gImageList.getImage(asset_id);
1340 gViewerStats->incStat(LLViewerStats::ST_EDIT_TEXTURE_COUNT ); 1304 LLViewerStats::getInstance()->incStat(LLViewerStats::ST_EDIT_TEXTURE_COUNT );
1341 hit_obj->setTEImage(hit_face, image); 1305 hit_obj->setTEImage(hit_face, image);
1342 dialog_refresh_all(); 1306 dialog_refresh_all();
1343 1307
@@ -1354,8 +1318,8 @@ void LLToolDragAndDrop::dropScript(LLViewerObject* hit_obj,
1354{ 1318{
1355 // *HACK: In order to resolve SL-22177, we need to block drags 1319 // *HACK: In order to resolve SL-22177, we need to block drags
1356 // from notecards and objects onto other objects. 1320 // from notecards and objects onto other objects.
1357 if((SOURCE_WORLD == gToolDragAndDrop->mSource) 1321 if((SOURCE_WORLD == LLToolDragAndDrop::getInstance()->mSource)
1358 || (SOURCE_NOTECARD == gToolDragAndDrop->mSource)) 1322 || (SOURCE_NOTECARD == LLToolDragAndDrop::getInstance()->mSource))
1359 { 1323 {
1360 llwarns << "Call to LLToolDragAndDrop::dropScript() from world" 1324 llwarns << "Call to LLToolDragAndDrop::dropScript() from world"
1361 << " or notecard." << llendl; 1325 << " or notecard." << llendl;
@@ -1394,7 +1358,7 @@ void LLToolDragAndDrop::dropScript(LLViewerObject* hit_obj,
1394 gFloaterTools->dirty(); 1358 gFloaterTools->dirty();
1395 1359
1396 // VEFFECT: SetScript 1360 // VEFFECT: SetScript
1397 LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)gHUDManager->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE); 1361 LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE);
1398 effectp->setSourceObject(gAgent.getAvatarObject()); 1362 effectp->setSourceObject(gAgent.getAvatarObject());
1399 effectp->setTargetObject(hit_obj); 1363 effectp->setTargetObject(hit_obj);
1400 effectp->setDuration(LL_HUD_DUR_SHORT); 1364 effectp->setDuration(LL_HUD_DUR_SHORT);
@@ -1407,7 +1371,7 @@ void LLToolDragAndDrop::dropObject(LLViewerObject* raycast_target,
1407 BOOL from_task_inventory, 1371 BOOL from_task_inventory,
1408 BOOL remove_from_inventory) 1372 BOOL remove_from_inventory)
1409{ 1373{
1410 LLViewerRegion* regionp = gWorldp->getRegionFromPosGlobal(mLastHitPos); 1374 LLViewerRegion* regionp = LLWorld::getInstance()->getRegionFromPosGlobal(mLastHitPos);
1411 if (!regionp) 1375 if (!regionp)
1412 { 1376 {
1413 llwarns << "Couldn't find region to rez object" << llendl; 1377 llwarns << "Couldn't find region to rez object" << llendl;
@@ -1463,8 +1427,21 @@ void LLToolDragAndDrop::dropObject(LLViewerObject* raycast_target,
1463 LLUUID source_id = from_task_inventory ? mSourceID : LLUUID::null; 1427 LLUUID source_id = from_task_inventory ? mSourceID : LLUUID::null;
1464 1428
1465 // Select the object only if we're editing. 1429 // Select the object only if we're editing.
1466 BOOL rez_selected = gToolMgr->inEdit(); 1430 BOOL rez_selected = LLToolMgr::getInstance()->inEdit();
1467 1431
1432
1433 LLVector3 ray_start = regionp->getPosRegionFromGlobal(mLastCameraPos);
1434 LLVector3 ray_end = regionp->getPosRegionFromGlobal(mLastHitPos);
1435 // currently the ray's end point is an approximation,
1436 // and is sometimes too short (causing failure.) so we
1437 // double the ray's length:
1438 if (bypass_sim_raycast == FALSE)
1439 {
1440 LLVector3 ray_direction = ray_start - ray_end;
1441 ray_end = ray_end - ray_direction;
1442 }
1443
1444
1468 // Message packing code should be it's own uninterrupted block 1445 // Message packing code should be it's own uninterrupted block
1469 LLMessageSystem* msg = gMessageSystem; 1446 LLMessageSystem* msg = gMessageSystem;
1470 if (mSource == SOURCE_NOTECARD) 1447 if (mSource == SOURCE_NOTECARD)
@@ -1488,8 +1465,8 @@ void LLToolDragAndDrop::dropObject(LLViewerObject* raycast_target,
1488 // optimization. 1465 // optimization.
1489 msg->addUUIDFast(_PREHASH_FromTaskID, source_id); 1466 msg->addUUIDFast(_PREHASH_FromTaskID, source_id);
1490 msg->addU8Fast(_PREHASH_BypassRaycast, (U8) bypass_sim_raycast); 1467 msg->addU8Fast(_PREHASH_BypassRaycast, (U8) bypass_sim_raycast);
1491 msg->addVector3Fast(_PREHASH_RayStart, regionp->getPosRegionFromGlobal(mLastCameraPos)); 1468 msg->addVector3Fast(_PREHASH_RayStart, ray_start);
1492 msg->addVector3Fast(_PREHASH_RayEnd, regionp->getPosRegionFromGlobal(mLastHitPos)); 1469 msg->addVector3Fast(_PREHASH_RayEnd, ray_end);
1493 msg->addUUIDFast(_PREHASH_RayTargetID, ray_target_id ); 1470 msg->addUUIDFast(_PREHASH_RayTargetID, ray_target_id );
1494 msg->addBOOLFast(_PREHASH_RayEndIsIntersection, FALSE); 1471 msg->addBOOLFast(_PREHASH_RayEndIsIntersection, FALSE);
1495 msg->addBOOLFast(_PREHASH_RezSelected, rez_selected); 1472 msg->addBOOLFast(_PREHASH_RezSelected, rez_selected);
@@ -1529,7 +1506,7 @@ void LLToolDragAndDrop::dropObject(LLViewerObject* raycast_target,
1529 // selected object. 1506 // selected object.
1530 if (rez_selected) 1507 if (rez_selected)
1531 { 1508 {
1532 gSelectMgr->deselectAll(); 1509 LLSelectMgr::getInstance()->deselectAll();
1533 gViewerWindow->getWindow()->incBusyCount(); 1510 gViewerWindow->getWindow()->incBusyCount();
1534 } 1511 }
1535 1512
@@ -1543,13 +1520,13 @@ void LLToolDragAndDrop::dropObject(LLViewerObject* raycast_target,
1543 } 1520 }
1544 1521
1545 // VEFFECT: DropObject 1522 // VEFFECT: DropObject
1546 LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)gHUDManager->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE); 1523 LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE);
1547 effectp->setSourceObject(gAgent.getAvatarObject()); 1524 effectp->setSourceObject(gAgent.getAvatarObject());
1548 effectp->setPositionGlobal(mLastHitPos); 1525 effectp->setPositionGlobal(mLastHitPos);
1549 effectp->setDuration(LL_HUD_DUR_SHORT); 1526 effectp->setDuration(LL_HUD_DUR_SHORT);
1550 effectp->setColor(LLColor4U(gAgent.getEffectColor())); 1527 effectp->setColor(LLColor4U(gAgent.getEffectColor()));
1551 1528
1552 gViewerStats->incStat(LLViewerStats::ST_REZ_COUNT); 1529 LLViewerStats::getInstance()->incStat(LLViewerStats::ST_REZ_COUNT);
1553} 1530}
1554 1531
1555void LLToolDragAndDrop::dropInventory(LLViewerObject* hit_obj, 1532void LLToolDragAndDrop::dropInventory(LLViewerObject* hit_obj,
@@ -1559,8 +1536,8 @@ void LLToolDragAndDrop::dropInventory(LLViewerObject* hit_obj,
1559{ 1536{
1560 // *HACK: In order to resolve SL-22177, we need to block drags 1537 // *HACK: In order to resolve SL-22177, we need to block drags
1561 // from notecards and objects onto other objects. 1538 // from notecards and objects onto other objects.
1562 if((SOURCE_WORLD == gToolDragAndDrop->mSource) 1539 if((SOURCE_WORLD == LLToolDragAndDrop::getInstance()->mSource)
1563 || (SOURCE_NOTECARD == gToolDragAndDrop->mSource)) 1540 || (SOURCE_NOTECARD == LLToolDragAndDrop::getInstance()->mSource))
1564 { 1541 {
1565 llwarns << "Call to LLToolDragAndDrop::dropInventory() from world" 1542 llwarns << "Call to LLToolDragAndDrop::dropInventory() from world"
1566 << " or notecard." << llendl; 1543 << " or notecard." << llendl;
@@ -1606,7 +1583,7 @@ void LLToolDragAndDrop::dropInventory(LLViewerObject* hit_obj,
1606 } 1583 }
1607 1584
1608 // VEFFECT: AddToInventory 1585 // VEFFECT: AddToInventory
1609 LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)gHUDManager->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE); 1586 LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE);
1610 effectp->setSourceObject(gAgent.getAvatarObject()); 1587 effectp->setSourceObject(gAgent.getAvatarObject());
1611 effectp->setTargetObject(hit_obj); 1588 effectp->setTargetObject(hit_obj);
1612 effectp->setDuration(LL_HUD_DUR_SHORT); 1589 effectp->setDuration(LL_HUD_DUR_SHORT);
@@ -1710,7 +1687,7 @@ void LLToolDragAndDrop::commitGiveInventoryItem(const LLUUID& to_agent,
1710 gAgent.sendReliableMessage(); 1687 gAgent.sendReliableMessage();
1711 1688
1712 // VEFFECT: giveInventory 1689 // VEFFECT: giveInventory
1713 LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)gHUDManager->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE); 1690 LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE);
1714 effectp->setSourceObject(gAgent.getAvatarObject()); 1691 effectp->setSourceObject(gAgent.getAvatarObject());
1715 effectp->setTargetObject(gObjectList.findObject(to_agent)); 1692 effectp->setTargetObject(gObjectList.findObject(to_agent));
1716 effectp->setDuration(LL_HUD_DUR_SHORT); 1693 effectp->setDuration(LL_HUD_DUR_SHORT);
@@ -1912,7 +1889,7 @@ void LLToolDragAndDrop::commitGiveInventoryCategory(const LLUUID& to_agent,
1912 delete[] bucket; 1889 delete[] bucket;
1913 1890
1914 // VEFFECT: giveInventoryCategory 1891 // VEFFECT: giveInventoryCategory
1915 LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)gHUDManager->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE); 1892 LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE);
1916 effectp->setSourceObject(gAgent.getAvatarObject()); 1893 effectp->setSourceObject(gAgent.getAvatarObject());
1917 effectp->setTargetObject(gObjectList.findObject(to_agent)); 1894 effectp->setTargetObject(gObjectList.findObject(to_agent));
1918 effectp->setDuration(LL_HUD_DUR_SHORT); 1895 effectp->setDuration(LL_HUD_DUR_SHORT);
@@ -2365,7 +2342,7 @@ EAcceptance LLToolDragAndDrop::dad3dTextureObject(
2365 } 2342 }
2366 2343
2367 // VEFFECT: SetTexture 2344 // VEFFECT: SetTexture
2368 LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)gHUDManager->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE); 2345 LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE);
2369 effectp->setSourceObject(gAgent.getAvatarObject()); 2346 effectp->setSourceObject(gAgent.getAvatarObject());
2370 effectp->setTargetObject(obj); 2347 effectp->setTargetObject(obj);
2371 effectp->setDuration(LL_HUD_DUR_SHORT); 2348 effectp->setDuration(LL_HUD_DUR_SHORT);
diff --git a/linden/indra/newview/lltooldraganddrop.h b/linden/indra/newview/lltooldraganddrop.h
index 1d97c8f..eb99aa9 100644
--- a/linden/indra/newview/lltooldraganddrop.h
+++ b/linden/indra/newview/lltooldraganddrop.h
@@ -46,7 +46,7 @@ class LLToolDragAndDrop;
46class LLViewerRegion; 46class LLViewerRegion;
47class LLVOAvatar; 47class LLVOAvatar;
48 48
49class LLToolDragAndDrop : public LLTool 49class LLToolDragAndDrop : public LLTool, public LLSingleton<LLToolDragAndDrop>
50{ 50{
51public: 51public:
52 LLToolDragAndDrop(); 52 LLToolDragAndDrop();
@@ -253,9 +253,6 @@ public:
253 LLInventoryCategory* item); 253 LLInventoryCategory* item);
254}; 254};
255 255
256// Singleton
257extern LLToolDragAndDrop *gToolDragAndDrop;
258
259// utility functions 256// utility functions
260void pack_permissions_slam(LLMessageSystem* msg, U32 flags, const LLPermissions& perms); 257void pack_permissions_slam(LLMessageSystem* msg, U32 flags, const LLPermissions& perms);
261 258
diff --git a/linden/indra/newview/lltoolface.cpp b/linden/indra/newview/lltoolface.cpp
index bb2fc04..071d5d2 100644
--- a/linden/indra/newview/lltoolface.cpp
+++ b/linden/indra/newview/lltoolface.cpp
@@ -47,9 +47,6 @@
47#include "llviewerwindow.h" 47#include "llviewerwindow.h"
48#include "llfloatertools.h" 48#include "llfloatertools.h"
49 49
50// Globals
51LLToolFace *gToolFace = NULL;
52
53// 50//
54// Member functions 51// Member functions
55// 52//
@@ -65,7 +62,7 @@ LLToolFace::~LLToolFace()
65 62
66BOOL LLToolFace::handleDoubleClick(S32 x, S32 y, MASK mask) 63BOOL LLToolFace::handleDoubleClick(S32 x, S32 y, MASK mask)
67{ 64{
68 if (!gSelectMgr->getSelection()->isEmpty()) 65 if (!LLSelectMgr::getInstance()->getSelection()->isEmpty())
69 { 66 {
70 // You should already have an object selected from the mousedown. 67 // You should already have an object selected from the mousedown.
71 // If so, show its properties 68 // If so, show its properties
@@ -111,17 +108,17 @@ void LLToolFace::pickCallback(S32 x, S32 y, MASK mask)
111 if ( !hit_obj->isSelected() ) 108 if ( !hit_obj->isSelected() )
112 { 109 {
113 // object wasn't selected so add the object and face 110 // object wasn't selected so add the object and face
114 gSelectMgr->selectObjectOnly(hit_obj, hit_face); 111 LLSelectMgr::getInstance()->selectObjectOnly(hit_obj, hit_face);
115 } 112 }
116 else if (!gSelectMgr->getSelection()->contains(hit_obj, hit_face) ) 113 else if (!LLSelectMgr::getInstance()->getSelection()->contains(hit_obj, hit_face) )
117 { 114 {
118 // object is selected, but not this face, so add it. 115 // object is selected, but not this face, so add it.
119 gSelectMgr->addAsIndividual(hit_obj, hit_face); 116 LLSelectMgr::getInstance()->addAsIndividual(hit_obj, hit_face);
120 } 117 }
121 else 118 else
122 { 119 {
123 // object is selected, as is this face, so remove the face. 120 // object is selected, as is this face, so remove the face.
124 gSelectMgr->remove(hit_obj, hit_face); 121 LLSelectMgr::getInstance()->remove(hit_obj, hit_face);
125 122
126 // BUG: If you remove the last face, the simulator won't know about it. 123 // BUG: If you remove the last face, the simulator won't know about it.
127 } 124 }
@@ -130,15 +127,15 @@ void LLToolFace::pickCallback(S32 x, S32 y, MASK mask)
130 { 127 {
131 // clicked without modifiers, select only 128 // clicked without modifiers, select only
132 // this face 129 // this face
133 gSelectMgr->deselectAll(); 130 LLSelectMgr::getInstance()->deselectAll();
134 gSelectMgr->selectObjectOnly(hit_obj, hit_face); 131 LLSelectMgr::getInstance()->selectObjectOnly(hit_obj, hit_face);
135 } 132 }
136 } 133 }
137 else 134 else
138 { 135 {
139 if (!(mask == MASK_SHIFT)) 136 if (!(mask == MASK_SHIFT))
140 { 137 {
141 gSelectMgr->deselectAll(); 138 LLSelectMgr::getInstance()->deselectAll();
142 } 139 }
143 } 140 }
144} 141}
@@ -147,14 +144,14 @@ void LLToolFace::pickCallback(S32 x, S32 y, MASK mask)
147void LLToolFace::handleSelect() 144void LLToolFace::handleSelect()
148{ 145{
149 // From now on, draw faces 146 // From now on, draw faces
150 gSelectMgr->setTEMode(TRUE); 147 LLSelectMgr::getInstance()->setTEMode(TRUE);
151} 148}
152 149
153 150
154void LLToolFace::handleDeselect() 151void LLToolFace::handleDeselect()
155{ 152{
156 // Stop drawing faces 153 // Stop drawing faces
157 gSelectMgr->setTEMode(FALSE); 154 LLSelectMgr::getInstance()->setTEMode(FALSE);
158} 155}
159 156
160 157
diff --git a/linden/indra/newview/lltoolface.h b/linden/indra/newview/lltoolface.h
index 600d2a6..b16aedc 100644
--- a/linden/indra/newview/lltoolface.h
+++ b/linden/indra/newview/lltoolface.h
@@ -37,7 +37,7 @@
37class LLViewerObject; 37class LLViewerObject;
38 38
39class LLToolFace 39class LLToolFace
40: public LLTool 40: public LLTool, public LLSingleton<LLToolFace>
41{ 41{
42public: 42public:
43 LLToolFace(); 43 LLToolFace();
@@ -52,6 +52,4 @@ public:
52 static void pickCallback(S32 x, S32 y, MASK mask); 52 static void pickCallback(S32 x, S32 y, MASK mask);
53}; 53};
54 54
55extern LLToolFace *gToolFace;
56
57#endif 55#endif
diff --git a/linden/indra/newview/lltoolfocus.cpp b/linden/indra/newview/lltoolfocus.cpp
index 2e046c4..c526e6e 100644
--- a/linden/indra/newview/lltoolfocus.cpp
+++ b/linden/indra/newview/lltoolfocus.cpp
@@ -50,7 +50,6 @@
50#include "llselectmgr.h" 50#include "llselectmgr.h"
51#include "llstatusbar.h" 51#include "llstatusbar.h"
52#include "lltoolmgr.h" 52#include "lltoolmgr.h"
53#include "lltoolselect.h"
54#include "llviewercamera.h" 53#include "llviewercamera.h"
55#include "llviewerobject.h" 54#include "llviewerobject.h"
56#include "llviewerwindow.h" 55#include "llviewerwindow.h"
@@ -58,9 +57,9 @@
58#include "llmorphview.h" 57#include "llmorphview.h"
59 58
60// Globals 59// Globals
61LLToolCamera *gToolCamera = NULL;
62BOOL gCameraBtnOrbit = FALSE; 60BOOL gCameraBtnOrbit = FALSE;
63BOOL gCameraBtnPan = FALSE; 61BOOL gCameraBtnPan = FALSE;
62
64const S32 SLOP_RANGE = 4; 63const S32 SLOP_RANGE = 4;
65const F32 FOCUS_OFFSET_FACTOR = 1.f; 64const F32 FOCUS_OFFSET_FACTOR = 1.f;
66 65
@@ -133,13 +132,13 @@ BOOL LLToolCamera::handleMouseDown(S32 x, S32 y, MASK mask)
133 132
134void LLToolCamera::pickCallback(S32 x, S32 y, MASK mask) 133void LLToolCamera::pickCallback(S32 x, S32 y, MASK mask)
135{ 134{
136 if (!gToolCamera->hasMouseCapture()) 135 if (!LLToolCamera::getInstance()->hasMouseCapture())
137 { 136 {
138 return; 137 return;
139 } 138 }
140 139
141 gToolCamera->mMouseDownX = x; 140 LLToolCamera::getInstance()->mMouseDownX = x;
142 gToolCamera->mMouseDownY = y; 141 LLToolCamera::getInstance()->mMouseDownY = y;
143 142
144 gViewerWindow->moveCursorToCenter(); 143 gViewerWindow->moveCursorToCenter();
145 144
@@ -149,17 +148,17 @@ void LLToolCamera::pickCallback(S32 x, S32 y, MASK mask)
149 // Check for hit the sky, or some other invalid point 148 // Check for hit the sky, or some other invalid point
150 if (!hit_obj && gLastHitPosGlobal.isExactlyZero()) 149 if (!hit_obj && gLastHitPosGlobal.isExactlyZero())
151 { 150 {
152 gToolCamera->mValidClickPoint = FALSE; 151 LLToolCamera::getInstance()->mValidClickPoint = FALSE;
153 return; 152 return;
154 } 153 }
155 154
156 // check for hud attachments 155 // check for hud attachments
157 if (hit_obj && hit_obj->isHUDAttachment()) 156 if (hit_obj && hit_obj->isHUDAttachment())
158 { 157 {
159 LLObjectSelectionHandle selection = gSelectMgr->getSelection(); 158 LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
160 if (!selection->getObjectCount() || selection->getSelectType() != SELECT_TYPE_HUD) 159 if (!selection->getObjectCount() || selection->getSelectType() != SELECT_TYPE_HUD)
161 { 160 {
162 gToolCamera->mValidClickPoint = FALSE; 161 LLToolCamera::getInstance()->mValidClickPoint = FALSE;
163 return; 162 return;
164 } 163 }
165 } 164 }
@@ -185,7 +184,7 @@ void LLToolCamera::pickCallback(S32 x, S32 y, MASK mask)
185 184
186 if( !good_customize_avatar_hit ) 185 if( !good_customize_avatar_hit )
187 { 186 {
188 gToolCamera->mValidClickPoint = FALSE; 187 LLToolCamera::getInstance()->mValidClickPoint = FALSE;
189 return; 188 return;
190 } 189 }
191 190
@@ -196,7 +195,7 @@ void LLToolCamera::pickCallback(S32 x, S32 y, MASK mask)
196 } 195 }
197 //RN: check to see if this is mouse-driving as opposed to ALT-zoom or Focus tool 196 //RN: check to see if this is mouse-driving as opposed to ALT-zoom or Focus tool
198 else if (mask & MASK_ALT || 197 else if (mask & MASK_ALT ||
199 (gToolMgr->getCurrentTool()->getName() == "Camera")) 198 (LLToolMgr::getInstance()->getCurrentTool()->getName() == "Camera"))
200 { 199 {
201 LLViewerObject* hit_obj = gViewerWindow->lastObjectHit(); 200 LLViewerObject* hit_obj = gViewerWindow->lastObjectHit();
202 if (hit_obj) 201 if (hit_obj)
@@ -224,19 +223,19 @@ void LLToolCamera::pickCallback(S32 x, S32 y, MASK mask)
224 (hit_obj == gAgent.getAvatarObject() || 223 (hit_obj == gAgent.getAvatarObject() ||
225 (hit_obj && hit_obj->isAttachment() && LLVOAvatar::findAvatarFromAttachment(hit_obj)->mIsSelf))) 224 (hit_obj && hit_obj->isAttachment() && LLVOAvatar::findAvatarFromAttachment(hit_obj)->mIsSelf)))
226 { 225 {
227 gToolCamera->mMouseSteering = TRUE; 226 LLToolCamera::getInstance()->mMouseSteering = TRUE;
228 } 227 }
229 228
230 } 229 }
231 230
232 gToolCamera->mValidClickPoint = TRUE; 231 LLToolCamera::getInstance()->mValidClickPoint = TRUE;
233 232
234 if( CAMERA_MODE_CUSTOMIZE_AVATAR == gAgent.getCameraMode() ) 233 if( CAMERA_MODE_CUSTOMIZE_AVATAR == gAgent.getCameraMode() )
235 { 234 {
236 gAgent.setFocusOnAvatar(FALSE, FALSE); 235 gAgent.setFocusOnAvatar(FALSE, FALSE);
237 236
238 LLVector3d cam_pos = gAgent.getCameraPositionGlobal(); 237 LLVector3d cam_pos = gAgent.getCameraPositionGlobal();
239 cam_pos -= LLVector3d(gCamera->getLeftAxis() * gAgent.calcCustomizeAvatarUIOffset( cam_pos )); 238 cam_pos -= LLVector3d(LLViewerCamera::getInstance()->getLeftAxis() * gAgent.calcCustomizeAvatarUIOffset( cam_pos ));
240 239
241 gAgent.setCameraPosAndFocusGlobal( cam_pos, gLastHitObjectOffset + gLastHitPosGlobal, gLastHitObjectID); 240 gAgent.setCameraPosAndFocusGlobal( cam_pos, gLastHitObjectOffset + gLastHitPosGlobal, gLastHitObjectID);
242 } 241 }
@@ -255,7 +254,7 @@ void LLToolCamera::releaseMouse()
255 254
256 gViewerWindow->showCursor(); 255 gViewerWindow->showCursor();
257 256
258 gToolMgr->clearTransientTool(); 257 LLToolMgr::getInstance()->clearTransientTool();
259 258
260 mMouseSteering = FALSE; 259 mMouseSteering = FALSE;
261 mValidClickPoint = FALSE; 260 mValidClickPoint = FALSE;
@@ -279,7 +278,7 @@ BOOL LLToolCamera::handleMouseUp(S32 x, S32 y, MASK mask)
279 { 278 {
280 LLCoordGL mouse_pos; 279 LLCoordGL mouse_pos;
281 LLVector3 focus_pos = gAgent.getPosAgentFromGlobal(gAgent.getFocusGlobal()); 280 LLVector3 focus_pos = gAgent.getPosAgentFromGlobal(gAgent.getFocusGlobal());
282 BOOL success = gCamera->projectPosAgentToScreen(focus_pos, mouse_pos); 281 BOOL success = LLViewerCamera::getInstance()->projectPosAgentToScreen(focus_pos, mouse_pos);
283 if (success) 282 if (success)
284 { 283 {
285 LLUI::setCursorPositionScreen(mouse_pos.mX, mouse_pos.mY); 284 LLUI::setCursorPositionScreen(mouse_pos.mX, mouse_pos.mY);
diff --git a/linden/indra/newview/lltoolfocus.h b/linden/indra/newview/lltoolfocus.h
index 2881a10..3f5b04c 100644
--- a/linden/indra/newview/lltoolfocus.h
+++ b/linden/indra/newview/lltoolfocus.h
@@ -35,7 +35,7 @@
35#include "lltool.h" 35#include "lltool.h"
36 36
37class LLToolCamera 37class LLToolCamera
38: public LLTool 38: public LLTool, public LLSingleton<LLToolCamera>
39{ 39{
40public: 40public:
41 LLToolCamera(); 41 LLToolCamera();
@@ -75,8 +75,6 @@ protected:
75}; 75};
76 76
77 77
78extern LLToolCamera *gToolCamera;
79
80extern BOOL gCameraBtnOrbit; 78extern BOOL gCameraBtnOrbit;
81extern BOOL gCameraBtnPan; 79extern BOOL gCameraBtnPan;
82 80
diff --git a/linden/indra/newview/lltoolgrab.cpp b/linden/indra/newview/lltoolgrab.cpp
index a60046b..a8e789d 100644
--- a/linden/indra/newview/lltoolgrab.cpp
+++ b/linden/indra/newview/lltoolgrab.cpp
@@ -69,7 +69,6 @@ const S32 SLOP_DIST_SQ = 4;
69BOOL gGrabBtnVertical = FALSE; 69BOOL gGrabBtnVertical = FALSE;
70BOOL gGrabBtnSpin = FALSE; 70BOOL gGrabBtnSpin = FALSE;
71LLTool* gGrabTransientTool = NULL; 71LLTool* gGrabTransientTool = NULL;
72LLToolGrab *gToolGrab = NULL;
73extern BOOL gDebugClicks; 72extern BOOL gDebugClicks;
74 73
75// 74//
@@ -151,26 +150,26 @@ void LLToolGrab::pickCallback(S32 x, S32 y, MASK mask)
151 150
152 BOOL extend_select = (mask & MASK_SHIFT); 151 BOOL extend_select = (mask & MASK_SHIFT);
153 152
154 if (!extend_select && !gSelectMgr->getSelection()->isEmpty()) 153 if (!extend_select && !LLSelectMgr::getInstance()->getSelection()->isEmpty())
155 { 154 {
156 gSelectMgr->deselectAll(); 155 LLSelectMgr::getInstance()->deselectAll();
157 gToolGrab->mDeselectedThisClick = TRUE; 156 LLToolGrab::getInstance()->mDeselectedThisClick = TRUE;
158 } 157 }
159 else 158 else
160 { 159 {
161 gToolGrab->mDeselectedThisClick = FALSE; 160 LLToolGrab::getInstance()->mDeselectedThisClick = FALSE;
162 } 161 }
163 162
164 // if not over object, do nothing 163 // if not over object, do nothing
165 if (!objectp) 164 if (!objectp)
166 { 165 {
167 gToolGrab->setMouseCapture(TRUE); 166 LLToolGrab::getInstance()->setMouseCapture(TRUE);
168 gToolGrab->mMode = GRAB_NOOBJECT; 167 LLToolGrab::getInstance()->mMode = GRAB_NOOBJECT;
169 gToolGrab->mHitObjectID.setNull(); 168 LLToolGrab::getInstance()->mHitObjectID.setNull();
170 } 169 }
171 else 170 else
172 { 171 {
173 gToolGrab->handleObjectHit(objectp, x, y, mask); 172 LLToolGrab::getInstance()->handleObjectHit(objectp, x, y, mask);
174 } 173 }
175} 174}
176 175
@@ -273,7 +272,7 @@ BOOL LLToolGrab::handleObjectHit(LLViewerObject *objectp, S32 x, S32 y, MASK mas
273 startSpin(); 272 startSpin();
274 } 273 }
275 274
276 gSelectMgr->updateSelectionCenter(); // update selection beam 275 LLSelectMgr::getInstance()->updateSelectionCenter(); // update selection beam
277 276
278 // update point at 277 // update point at
279 LLViewerObject *edit_object = gObjectList.findObject(mHitObjectID); 278 LLViewerObject *edit_object = gObjectList.findObject(mHitObjectID);
@@ -505,7 +504,7 @@ void LLToolGrab::handleHoverActive(S32 x, S32 y, MASK mask)
505 LLQuaternion rotation_around_vertical( dx*RADIANS_PER_PIXEL_X, up ); 504 LLQuaternion rotation_around_vertical( dx*RADIANS_PER_PIXEL_X, up );
506 505
507 // y motion maps to rotation around left axis 506 // y motion maps to rotation around left axis
508 const LLVector3 &agent_left = gCamera->getLeftAxis(); 507 const LLVector3 &agent_left = LLViewerCamera::getInstance()->getLeftAxis();
509 LLQuaternion rotation_around_left( dy*RADIANS_PER_PIXEL_Y, agent_left ); 508 LLQuaternion rotation_around_left( dy*RADIANS_PER_PIXEL_Y, agent_left );
510 509
511 // compose with current rotation 510 // compose with current rotation
@@ -530,14 +529,14 @@ void LLToolGrab::handleHoverActive(S32 x, S32 y, MASK mask)
530 //------------------------------------------------------ 529 //------------------------------------------------------
531 530
532 LLVector3d x_part; 531 LLVector3d x_part;
533 x_part.setVec(gCamera->getLeftAxis()); 532 x_part.setVec(LLViewerCamera::getInstance()->getLeftAxis());
534 x_part.mdV[VZ] = 0.0; 533 x_part.mdV[VZ] = 0.0;
535 x_part.normVec(); 534 x_part.normVec();
536 535
537 LLVector3d y_part; 536 LLVector3d y_part;
538 if( mVerticalDragging ) 537 if( mVerticalDragging )
539 { 538 {
540 y_part.setVec(gCamera->getUpAxis()); 539 y_part.setVec(LLViewerCamera::getInstance()->getUpAxis());
541 // y_part.setVec(0.f, 0.f, 1.f); 540 // y_part.setVec(0.f, 0.f, 1.f);
542 } 541 }
543 else 542 else
@@ -579,7 +578,7 @@ void LLToolGrab::handleHoverActive(S32 x, S32 y, MASK mask)
579 */ 578 */
580 579
581 // Don't let object centers go underground. 580 // Don't let object centers go underground.
582 F32 land_height = gWorldPointer->resolveLandHeightGlobal(grab_point_global); 581 F32 land_height = LLWorld::getInstance()->resolveLandHeightGlobal(grab_point_global);
583 582
584 if (grab_point_global.mdV[VZ] < land_height) 583 if (grab_point_global.mdV[VZ] < land_height)
585 { 584 {
@@ -592,7 +591,7 @@ void LLToolGrab::handleHoverActive(S32 x, S32 y, MASK mask)
592 grab_point_global.mdV[VZ] = MAX_OBJECT_Z; 591 grab_point_global.mdV[VZ] = MAX_OBJECT_Z;
593 } 592 }
594 593
595 grab_point_global = gWorldp->clipToVisibleRegions(mDragStartPointGlobal, grab_point_global); 594 grab_point_global = LLWorld::getInstance()->clipToVisibleRegions(mDragStartPointGlobal, grab_point_global);
596 // propagate constrained grab point back to grab offset 595 // propagate constrained grab point back to grab offset
597 mGrabHiddenOffsetFromCamera = grab_point_global - gAgent.getCameraPositionGlobal(); 596 mGrabHiddenOffsetFromCamera = grab_point_global - gAgent.getCameraPositionGlobal();
598 597
@@ -600,7 +599,7 @@ void LLToolGrab::handleHoverActive(S32 x, S32 y, MASK mask)
600 LLVector3 grab_pos_agent = gAgent.getPosAgentFromGlobal( grab_point_global ); 599 LLVector3 grab_pos_agent = gAgent.getPosAgentFromGlobal( grab_point_global );
601 600
602 LLCoordGL grab_center_gl( gViewerWindow->getWindowWidth() / 2, gViewerWindow->getWindowHeight() / 2); 601 LLCoordGL grab_center_gl( gViewerWindow->getWindowWidth() / 2, gViewerWindow->getWindowHeight() / 2);
603 gCamera->projectPosAgentToScreen(grab_pos_agent, grab_center_gl); 602 LLViewerCamera::getInstance()->projectPosAgentToScreen(grab_pos_agent, grab_center_gl);
604 603
605 const S32 ROTATE_H_MARGIN = gViewerWindow->getWindowWidth() / 20; 604 const S32 ROTATE_H_MARGIN = gViewerWindow->getWindowWidth() / 20;
606 const F32 ROTATE_ANGLE_PER_SECOND = 30.f * DEG_TO_RAD; 605 const F32 ROTATE_ANGLE_PER_SECOND = 30.f * DEG_TO_RAD;
@@ -652,7 +651,7 @@ void LLToolGrab::handleHoverActive(S32 x, S32 y, MASK mask)
652 651
653 gViewerWindow->moveCursorToCenter(); 652 gViewerWindow->moveCursorToCenter();
654 653
655 gSelectMgr->updateSelectionCenter(); 654 LLSelectMgr::getInstance()->updateSelectionCenter();
656 655
657 } 656 }
658 657
@@ -804,7 +803,7 @@ void LLToolGrab::onMouseCaptureLost()
804 LLVector3 grab_point_agent = mGrabObject->getRenderPosition(); 803 LLVector3 grab_point_agent = mGrabObject->getRenderPosition();
805 804
806 LLCoordGL gl_point; 805 LLCoordGL gl_point;
807 if (gCamera->projectPosAgentToScreen(grab_point_agent, gl_point)) 806 if (LLViewerCamera::getInstance()->projectPosAgentToScreen(grab_point_agent, gl_point))
808 { 807 {
809 LLUI::setCursorPositionScreen(gl_point.mX, gl_point.mY); 808 LLUI::setCursorPositionScreen(gl_point.mX, gl_point.mY);
810 } 809 }
@@ -826,7 +825,7 @@ void LLToolGrab::onMouseCaptureLost()
826 825
827 mGrabObject = NULL; 826 mGrabObject = NULL;
828 827
829 gSelectMgr->updateSelectionCenter(); 828 LLSelectMgr::getInstance()->updateSelectionCenter();
830 gAgent.setPointAt(POINTAT_TARGET_CLEAR); 829 gAgent.setPointAt(POINTAT_TARGET_CLEAR);
831 gAgent.setLookAt(LOOKAT_TARGET_CLEAR); 830 gAgent.setLookAt(LOOKAT_TARGET_CLEAR);
832 831
diff --git a/linden/indra/newview/lltoolgrab.h b/linden/indra/newview/lltoolgrab.h
index 7b3114b..c54b0ff 100644
--- a/linden/indra/newview/lltoolgrab.h
+++ b/linden/indra/newview/lltoolgrab.h
@@ -42,7 +42,7 @@ class LLView;
42class LLTextBox; 42class LLTextBox;
43class LLViewerObject; 43class LLViewerObject;
44 44
45class LLToolGrab : public LLTool 45class LLToolGrab : public LLTool, public LLSingleton<LLToolGrab>
46{ 46{
47public: 47public:
48 LLToolGrab( LLToolComposite* composite = NULL ); 48 LLToolGrab( LLToolComposite* composite = NULL );
@@ -125,8 +125,6 @@ private:
125 BOOL mHideBuildHighlight; 125 BOOL mHideBuildHighlight;
126}; 126};
127 127
128extern LLToolGrab *gToolGrab;
129
130extern BOOL gGrabBtnVertical; 128extern BOOL gGrabBtnVertical;
131extern BOOL gGrabBtnSpin; 129extern BOOL gGrabBtnSpin;
132extern LLTool* gGrabTransientTool; 130extern LLTool* gGrabTransientTool;
diff --git a/linden/indra/newview/lltoolgun.cpp b/linden/indra/newview/lltoolgun.cpp
index 3385064..e4a7f6c 100644
--- a/linden/indra/newview/lltoolgun.cpp
+++ b/linden/indra/newview/lltoolgun.cpp
@@ -51,7 +51,6 @@ LLToolGun::LLToolGun( LLToolComposite* composite )
51 : 51 :
52 LLTool( "gun", composite ) 52 LLTool( "gun", composite )
53{ 53{
54 mCrosshairImg = gImageList.getImage( LLUUID( gSavedSettings.getString("UIImgCrosshairsUUID") ), MIPMAP_FALSE, TRUE );
55} 54}
56 55
57void LLToolGun::handleSelect() 56void LLToolGun::handleSelect()
@@ -71,23 +70,19 @@ void LLToolGun::handleDeselect()
71BOOL LLToolGun::handleMouseDown(S32 x, S32 y, MASK mask) 70BOOL LLToolGun::handleMouseDown(S32 x, S32 y, MASK mask)
72{ 71{
73 gGrabTransientTool = this; 72 gGrabTransientTool = this;
74 gToolMgr->getCurrentToolset()->selectTool( gToolGrab ); 73 LLToolMgr::getInstance()->getCurrentToolset()->selectTool( LLToolGrab::getInstance() );
75 74
76 return gToolGrab->handleMouseDown(x, y, mask); 75 return LLToolGrab::getInstance()->handleMouseDown(x, y, mask);
77} 76}
78 77
79BOOL LLToolGun::handleHover(S32 x, S32 y, MASK mask) 78BOOL LLToolGun::handleHover(S32 x, S32 y, MASK mask)
80{ 79{
81 if( gAgent.cameraMouselook() ) 80 if( gAgent.cameraMouselook() )
82 { 81 {
83 #if 1 //LL_WINDOWS || LL_DARWIN 82 const F32 NOMINAL_MOUSE_SENSITIVITY = 0.0025f;
84 const F32 NOMINAL_MOUSE_SENSITIVITY = 0.0025f;
85 #else
86 const F32 NOMINAL_MOUSE_SENSITIVITY = 0.025f;
87 #endif
88 83
89 84 F32 mouse_sensitivity = gSavedSettings.getF32("MouseSensitivity");
90 F32 mouse_sensitivity = clamp_rescale(gMouseSensitivity, 0.f, 15.f, 0.5f, 2.75f) * NOMINAL_MOUSE_SENSITIVITY; 85 mouse_sensitivity = clamp_rescale(mouse_sensitivity, 0.f, 15.f, 0.5f, 2.75f) * NOMINAL_MOUSE_SENSITIVITY;
91 86
92 // ...move the view with the mouse 87 // ...move the view with the mouse
93 88
@@ -98,7 +93,7 @@ BOOL LLToolGun::handleHover(S32 x, S32 y, MASK mask)
98 if (dx != 0 || dy != 0) 93 if (dx != 0 || dy != 0)
99 { 94 {
100 // ...actually moved off center 95 // ...actually moved off center
101 if (gInvertMouse) 96 if (gSavedSettings.getBOOL("InvertMouse"))
102 { 97 {
103 gAgent.pitch(mouse_sensitivity * -dy); 98 gAgent.pitch(mouse_sensitivity * -dy);
104 } 99 }
@@ -111,9 +106,9 @@ BOOL LLToolGun::handleHover(S32 x, S32 y, MASK mask)
111 106
112 if (gSavedSettings.getBOOL("MouseSun")) 107 if (gSavedSettings.getBOOL("MouseSun"))
113 { 108 {
114 gSky.setSunDirection(gCamera->getAtAxis(), LLVector3(0.f, 0.f, 0.f)); 109 gSky.setSunDirection(LLViewerCamera::getInstance()->getAtAxis(), LLVector3(0.f, 0.f, 0.f));
115 gSky.setOverrideSun(TRUE); 110 gSky.setOverrideSun(TRUE);
116 gSavedSettings.setVector3("SkySunDefaultPosition", gCamera->getAtAxis()); 111 gSavedSettings.setVector3("SkySunDefaultPosition", LLViewerCamera::getInstance()->getAtAxis());
117 } 112 }
118 113
119 gViewerWindow->moveCursorToCenter(); 114 gViewerWindow->moveCursorToCenter();
@@ -137,9 +132,9 @@ void LLToolGun::draw()
137{ 132{
138 if( gSavedSettings.getBOOL("ShowCrosshairs") ) 133 if( gSavedSettings.getBOOL("ShowCrosshairs") )
139 { 134 {
140 gl_draw_image( 135 LLUIImagePtr crosshair = LLUI::getUIImage("UIImgCrosshairsUUID");
141 ( gViewerWindow->getWindowWidth() - mCrosshairImg->getWidth() ) / 2, 136 crosshair->draw(
142 ( gViewerWindow->getWindowHeight() - mCrosshairImg->getHeight() ) / 2, 137 ( gViewerWindow->getWindowWidth() - crosshair->getWidth() ) / 2,
143 mCrosshairImg ); 138 ( gViewerWindow->getWindowHeight() - crosshair->getHeight() ) / 2);
144 } 139 }
145} 140}
diff --git a/linden/indra/newview/lltoolgun.h b/linden/indra/newview/lltoolgun.h
index 2a8ad1b..af8eed8 100644
--- a/linden/indra/newview/lltoolgun.h
+++ b/linden/indra/newview/lltoolgun.h
@@ -33,7 +33,7 @@
33#define LL_TOOLGUN_H 33#define LL_TOOLGUN_H
34 34
35#include "lltool.h" 35#include "lltool.h"
36#include "llviewerimage.h" 36#include "llui.h"
37 37
38 38
39class LLToolGun : public LLTool 39class LLToolGun : public LLTool
@@ -51,9 +51,6 @@ public:
51 51
52 virtual LLTool* getOverrideTool(MASK mask) { return NULL; } 52 virtual LLTool* getOverrideTool(MASK mask) { return NULL; }
53 virtual BOOL clipMouseWhenDown() { return FALSE; } 53 virtual BOOL clipMouseWhenDown() { return FALSE; }
54
55private:
56 LLPointer<LLViewerImage> mCrosshairImg;
57}; 54};
58 55
59#endif 56#endif
diff --git a/linden/indra/newview/lltoolindividual.cpp b/linden/indra/newview/lltoolindividual.cpp
index 946a546..d7f7b12 100644
--- a/linden/indra/newview/lltoolindividual.cpp
+++ b/linden/indra/newview/lltoolindividual.cpp
@@ -49,7 +49,6 @@
49/// Globals 49/// Globals
50///---------------------------------------------------------------------------- 50///----------------------------------------------------------------------------
51 51
52LLToolIndividual* gToolIndividual = NULL;
53 52
54///---------------------------------------------------------------------------- 53///----------------------------------------------------------------------------
55/// Local function declarations, constants, enums, and typedefs 54/// Local function declarations, constants, enums, and typedefs
@@ -80,16 +79,16 @@ BOOL LLToolIndividual::handleMouseDown(S32 x, S32 y, MASK mask)
80void LLToolIndividual::pickCallback(S32 x, S32 y, MASK mask) 79void LLToolIndividual::pickCallback(S32 x, S32 y, MASK mask)
81{ 80{
82 LLViewerObject* obj = gViewerWindow->lastObjectHit(); 81 LLViewerObject* obj = gViewerWindow->lastObjectHit();
83 gSelectMgr->deselectAll(); 82 LLSelectMgr::getInstance()->deselectAll();
84 if(obj) 83 if(obj)
85 { 84 {
86 gSelectMgr->selectObjectOnly(obj); 85 LLSelectMgr::getInstance()->selectObjectOnly(obj);
87 } 86 }
88} 87}
89 88
90BOOL LLToolIndividual::handleDoubleClick(S32 x, S32 y, MASK mask) 89BOOL LLToolIndividual::handleDoubleClick(S32 x, S32 y, MASK mask)
91{ 90{
92 if(!gSelectMgr->getSelection()->isEmpty()) 91 if(!LLSelectMgr::getInstance()->getSelection()->isEmpty())
93 { 92 {
94 // You should already have an object selected from the mousedown. 93 // You should already have an object selected from the mousedown.
95 // If so, show its inventory. 94 // If so, show its inventory.
@@ -109,11 +108,11 @@ BOOL LLToolIndividual::handleDoubleClick(S32 x, S32 y, MASK mask)
109void LLToolIndividual::handleSelect() 108void LLToolIndividual::handleSelect()
110{ 109{
111 const BOOL children_ok = TRUE; 110 const BOOL children_ok = TRUE;
112 LLViewerObject* obj = gSelectMgr->getSelection()->getFirstRootObject(children_ok); 111 LLViewerObject* obj = LLSelectMgr::getInstance()->getSelection()->getFirstRootObject(children_ok);
113 gSelectMgr->deselectAll(); 112 LLSelectMgr::getInstance()->deselectAll();
114 if(obj) 113 if(obj)
115 { 114 {
116 gSelectMgr->selectObjectOnly(obj); 115 LLSelectMgr::getInstance()->selectObjectOnly(obj);
117 } 116 }
118} 117}
119 118
diff --git a/linden/indra/newview/lltoolindividual.h b/linden/indra/newview/lltoolindividual.h
index 31c1235..12340fc 100644
--- a/linden/indra/newview/lltoolindividual.h
+++ b/linden/indra/newview/lltoolindividual.h
@@ -40,7 +40,7 @@
40// A tool to select individual objects rather than linked sets. 40// A tool to select individual objects rather than linked sets.
41//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 41//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
42 42
43class LLToolIndividual : public LLTool 43class LLToolIndividual : public LLTool, public LLSingleton<LLToolIndividual>
44{ 44{
45public: 45public:
46 LLToolIndividual(); 46 LLToolIndividual();
@@ -58,7 +58,5 @@ protected:
58 58
59}; 59};
60 60
61extern LLToolIndividual* gToolIndividual;
62
63 61
64#endif // LL_LLTOOLINDIVIDUAL_H 62#endif // LL_LLTOOLINDIVIDUAL_H
diff --git a/linden/indra/newview/lltoolmgr.cpp b/linden/indra/newview/lltoolmgr.cpp
index 0a4a99d..b7a5ab9 100644
--- a/linden/indra/newview/lltoolmgr.cpp
+++ b/linden/indra/newview/lltoolmgr.cpp
@@ -46,13 +46,12 @@
46#include "lltoolmorph.h" 46#include "lltoolmorph.h"
47#include "lltoolpie.h" 47#include "lltoolpie.h"
48#include "lltoolplacer.h" 48#include "lltoolplacer.h"
49#include "lltoolselect.h"
50#include "lltoolselectland.h" 49#include "lltoolselectland.h"
51#include "lltoolobjpicker.h" 50#include "lltoolobjpicker.h"
52#include "lltoolpipette.h" 51#include "lltoolpipette.h"
52#include "llagent.h"
53#include "llviewercontrol.h"
53 54
54// Globals (created and destroyed by LLAgent)
55LLToolMgr* gToolMgr = NULL;
56 55
57// Used when app not active to avoid processing hover. 56// Used when app not active to avoid processing hover.
58LLTool* gToolNull = NULL; 57LLTool* gToolNull = NULL;
@@ -87,179 +86,34 @@ LLToolMgr::LLToolMgr()
87 86
88void LLToolMgr::initTools() 87void LLToolMgr::initTools()
89{ 88{
90 // Initialize all the tools 89 static BOOL initialized = FALSE;
91 // Variables that are reused for each tool 90 if(initialized)
92 LLTool* tool = NULL; 91 {
93 92 return;
94 // 93 }
95 // Pie tool (not visible in UI, implicit) 94 initialized = TRUE;
96 // 95 gBasicToolset->addTool( LLToolPie::getInstance() );
97 gToolPie = new LLToolPie(); 96 gBasicToolset->addTool( LLToolCamera::getInstance() );
98 97 gCameraToolset->addTool( LLToolCamera::getInstance() );
99 gBasicToolset->addTool( gToolPie ); 98 gBasicToolset->addTool( LLToolGrab::getInstance() );
100// gCameraToolset->addTool( gToolPie ); 99 gBasicToolset->addTool( LLToolCompTranslate::getInstance() );
101// gLandToolset->addTool( gToolPie ); 100 gBasicToolset->addTool( LLToolCompCreate::getInstance() );
102 101 gBasicToolset->addTool( LLToolBrushLand::getInstance() );
103 // Camera tool 102 gMouselookToolset->addTool( LLToolCompGun::getInstance() );
104 gToolCamera = new LLToolCamera(); 103 gBasicToolset->addTool( LLToolCompInspect::getInstance() );
105 gBasicToolset ->addTool( gToolCamera ); 104 gFaceEditToolset->addTool( LLToolCamera::getInstance() );
106 gCameraToolset->addTool( gToolCamera );
107
108 //
109 // Grab tool
110 //
111 gToolGrab = new LLToolGrab();
112 tool = gToolGrab;
113
114 gBasicToolset->addTool( tool );
115
116 //
117 // Translation tool
118 //
119 gToolTranslate = new LLToolCompTranslate();
120 tool = gToolTranslate;
121
122 gBasicToolset->addTool( tool );
123
124 //
125 // Scale ("Stretch") tool
126 //
127 gToolStretch = new LLToolCompScale();
128 tool = gToolStretch;
129
130
131 //
132 // Rotation tool
133 //
134 gToolRotate = new LLToolCompRotate();
135 tool = gToolRotate;
136
137
138 //
139 // Face tool
140 //
141 gToolFace = new LLToolFace();
142 tool = gToolFace;
143
144 //
145 // Pipette tool
146 //
147 gToolPipette = new LLToolPipette();
148
149 //
150 // Individual object selector
151 //
152 gToolIndividual = new LLToolIndividual();
153
154
155 //
156 // Create object tool
157 //
158 gToolCreate = new LLToolCompCreate();
159 tool = gToolCreate;
160
161 gBasicToolset->addTool( tool );
162
163 //
164 // Land brush tool
165 //
166 gToolLand = new LLToolBrushLand();
167 tool = gToolLand;
168
169 gBasicToolset->addTool( tool );
170
171
172 //
173 // Land select tool
174 //
175 gToolParcel = new LLToolSelectLand();
176 tool = gToolParcel;
177
178 //
179 // Gun tool
180 //
181 gToolGun = new LLToolCompGun();
182 gMouselookToolset->addTool( gToolGun );
183
184 //
185 // Inspect tool
186 //
187 gToolInspect = new LLToolCompInspect();
188 gBasicToolset->addTool( gToolInspect );
189
190 //
191 // Face edit tool
192 //
193// gToolMorph = new LLToolMorph();
194// gFaceEditToolset->addTool( gToolMorph );
195 gFaceEditToolset->addTool( gToolCamera );
196
197 // Drag and drop tool
198 gToolDragAndDrop = new LLToolDragAndDrop();
199
200 gToolObjPicker = new LLToolObjPicker();
201 105
202 // On startup, use "select" tool 106 // On startup, use "select" tool
203 setCurrentToolset(gBasicToolset); 107 setCurrentToolset(gBasicToolset);
204 gBasicToolset->selectTool( gToolPie ); 108
109 gBasicToolset->selectTool( LLToolPie::getInstance() );
205} 110}
206 111
207LLToolMgr::~LLToolMgr() 112LLToolMgr::~LLToolMgr()
208{ 113{
209 delete gToolPie;
210 gToolPie = NULL;
211
212 delete gToolInspect;
213 gToolInspect = NULL;
214
215 delete gToolGun;
216 gToolGun = NULL;
217
218 delete gToolCamera;
219 gToolCamera = NULL;
220
221// delete gToolMorph;
222// gToolMorph = NULL;
223
224 delete gToolDragAndDrop;
225 gToolDragAndDrop = NULL;
226
227 delete gBasicToolset; 114 delete gBasicToolset;
228 gBasicToolset = NULL; 115 gBasicToolset = NULL;
229 116
230 delete gToolGrab;
231 gToolGrab = NULL;
232
233 delete gToolRotate;
234 gToolRotate = NULL;
235
236 delete gToolTranslate;
237 gToolTranslate = NULL;
238
239 delete gToolStretch;
240 gToolStretch = NULL;
241
242 delete gToolIndividual;
243 gToolIndividual = NULL;
244
245 delete gToolPipette;
246 gToolPipette = NULL;
247
248 delete gToolCreate;
249 gToolCreate = NULL;
250
251 delete gToolFace;
252 gToolFace = NULL;
253
254 delete gToolLand;
255 gToolLand = NULL;
256
257 delete gToolParcel;
258 gToolParcel = NULL;
259
260 delete gToolObjPicker;
261 gToolObjPicker = NULL;
262
263 delete gMouselookToolset; 117 delete gMouselookToolset;
264 gMouselookToolset = NULL; 118 gMouselookToolset = NULL;
265 119
@@ -372,7 +226,20 @@ void LLToolMgr::updateToolStatus()
372 226
373BOOL LLToolMgr::inEdit() 227BOOL LLToolMgr::inEdit()
374{ 228{
375 return mBaseTool != gToolPie && mBaseTool != gToolNull; 229 return mBaseTool != LLToolPie::getInstance() && mBaseTool != gToolNull;
230}
231
232bool LLToolMgr::inBuildMode()
233{
234 // when entering mouselook inEdit() immediately returns true before
235 // cameraMouselook() actually starts returning true. Also, appearance edit
236 // sets build mode to true, so let's exclude that.
237 bool b=(inEdit()
238 && gSavedSettings.getBOOL("BuildBtnState")
239 && !gAgent.cameraMouselook()
240 && mCurrentToolset != gFaceEditToolset);
241
242 return b;
376} 243}
377 244
378void LLToolMgr::setTransientTool(LLTool* tool) 245void LLToolMgr::setTransientTool(LLTool* tool)
@@ -449,7 +316,7 @@ void LLToolset::addTool(LLTool* tool)
449void LLToolset::selectTool(LLTool* tool) 316void LLToolset::selectTool(LLTool* tool)
450{ 317{
451 mSelectedTool = tool; 318 mSelectedTool = tool;
452 gToolMgr->setCurrentTool( mSelectedTool ); 319 LLToolMgr::getInstance()->setCurrentTool( mSelectedTool );
453} 320}
454 321
455 322
@@ -459,7 +326,7 @@ void LLToolset::selectToolByIndex( S32 index )
459 if (tool) 326 if (tool)
460 { 327 {
461 mSelectedTool = tool; 328 mSelectedTool = tool;
462 gToolMgr->setCurrentTool( tool ); 329 LLToolMgr::getInstance()->setCurrentTool( tool );
463 } 330 }
464} 331}
465 332
@@ -473,10 +340,7 @@ BOOL LLToolset::isToolSelected( S32 index )
473void LLToolset::selectFirstTool() 340void LLToolset::selectFirstTool()
474{ 341{
475 mSelectedTool = (0 < mToolList.size()) ? mToolList[0] : NULL; 342 mSelectedTool = (0 < mToolList.size()) ? mToolList[0] : NULL;
476 if (gToolMgr) 343 LLToolMgr::getInstance()->setCurrentTool( mSelectedTool );
477 {
478 gToolMgr->setCurrentTool( mSelectedTool );
479 }
480} 344}
481 345
482 346
@@ -497,7 +361,7 @@ void LLToolset::selectNextTool()
497 if( next ) 361 if( next )
498 { 362 {
499 mSelectedTool = next; 363 mSelectedTool = next;
500 gToolMgr->setCurrentTool( mSelectedTool ); 364 LLToolMgr::getInstance()->setCurrentTool( mSelectedTool );
501 } 365 }
502 else 366 else
503 { 367 {
@@ -522,17 +386,16 @@ void LLToolset::selectPrevTool()
522 if( prev ) 386 if( prev )
523 { 387 {
524 mSelectedTool = prev; 388 mSelectedTool = prev;
525 gToolMgr->setCurrentTool( mSelectedTool ); 389 LLToolMgr::getInstance()->setCurrentTool( mSelectedTool );
526 } 390 }
527 else if (mToolList.size() > 0) 391 else if (mToolList.size() > 0)
528 { 392 {
529 selectToolByIndex((S32)mToolList.size()-1); 393 selectToolByIndex((S32)mToolList.size()-1);
530 } 394 }
531
532} 395}
533 396
534void select_tool( void *tool_pointer ) 397void select_tool( void *tool_pointer )
535{ 398{
536 LLTool *tool = (LLTool *)tool_pointer; 399 LLTool *tool = (LLTool *)tool_pointer;
537 gToolMgr->getCurrentToolset()->selectTool( tool ); 400 LLToolMgr::getInstance()->getCurrentToolset()->selectTool( tool );
538} 401}
diff --git a/linden/indra/newview/lltoolmgr.h b/linden/indra/newview/lltoolmgr.h
index c193be3..10affff 100644
--- a/linden/indra/newview/lltoolmgr.h
+++ b/linden/indra/newview/lltoolmgr.h
@@ -45,7 +45,7 @@ const MASK MASK_ORBIT = MASK_CONTROL;
45const MASK MASK_PAN = MASK_CONTROL | MASK_SHIFT; 45const MASK MASK_PAN = MASK_CONTROL | MASK_SHIFT;
46const MASK MASK_COPY = MASK_SHIFT; 46const MASK MASK_COPY = MASK_SHIFT;
47 47
48class LLToolMgr 48class LLToolMgr : public LLSingleton<LLToolMgr>
49{ 49{
50public: 50public:
51 LLToolMgr(); 51 LLToolMgr();
@@ -58,6 +58,9 @@ public:
58 LLTool* getBaseTool(); // returns active tool when overrides are deactivated 58 LLTool* getBaseTool(); // returns active tool when overrides are deactivated
59 59
60 BOOL inEdit(); 60 BOOL inEdit();
61
62 /* Determines if we are in Build mode or not. */
63 bool inBuildMode();
61 64
62 void setTransientTool(LLTool* tool); 65 void setTransientTool(LLTool* tool);
63 void clearTransientTool(); 66 void clearTransientTool();
@@ -115,8 +118,7 @@ protected:
115void select_tool(void *tool); 118void select_tool(void *tool);
116 119
117 120
118// Globals (created and destroyed by LLViewerWindow) 121// Globals
119extern LLToolMgr* gToolMgr;
120 122
121extern LLToolset* gBasicToolset; 123extern LLToolset* gBasicToolset;
122extern LLToolset *gCameraToolset; 124extern LLToolset *gCameraToolset;
diff --git a/linden/indra/newview/lltoolmorph.cpp b/linden/indra/newview/lltoolmorph.cpp
index 7368439..5b3f1eb 100644
--- a/linden/indra/newview/lltoolmorph.cpp
+++ b/linden/indra/newview/lltoolmorph.cpp
@@ -64,7 +64,6 @@
64#include "llvoavatar.h" 64#include "llvoavatar.h"
65#include "pipeline.h" 65#include "pipeline.h"
66 66
67//LLToolMorph *gToolMorph = NULL;
68 67
69//static 68//static
70LLVisualParamHint::instance_list_t LLVisualParamHint::sInstances; 69LLVisualParamHint::instance_list_t LLVisualParamHint::sInstances;
@@ -94,9 +93,7 @@ LLVisualParamHint::LLVisualParamHint(
94 mLastParamWeight(0.f) 93 mLastParamWeight(0.f)
95{ 94{
96 LLVisualParamHint::sInstances.insert( this ); 95 LLVisualParamHint::sInstances.insert( this );
97 LLUUID id; 96 mBackgroundp = LLUI::getUIImage("avatar_thumb_bkgrnd.j2c");
98 id.set( gViewerArt.getString("avatar_thumb_bkgrnd.tga") );
99 mBackgroundp = gImageList.getImage(id, FALSE, TRUE);
100 97
101 98
102 llassert(width != 0); 99 llassert(width != 0);
@@ -180,10 +177,7 @@ BOOL LLVisualParamHint::render()
180 177
181 LLGLSUIDefault gls_ui; 178 LLGLSUIDefault gls_ui;
182 //LLGLState::verify(TRUE); 179 //LLGLState::verify(TRUE);
183 LLViewerImage::bindTexture(mBackgroundp); 180 mBackgroundp->draw(0, 0, mWidth, mHeight);
184 gGL.color4f(1.f, 1.f, 1.f, 1.f);
185 gl_rect_2d_simple_tex( mWidth, mHeight );
186 mBackgroundp->unbindTexture(0, GL_TEXTURE_2D);
187 181
188 glMatrixMode(GL_PROJECTION); 182 glMatrixMode(GL_PROJECTION);
189 glPopMatrix(); 183 glPopMatrix();
@@ -229,13 +223,13 @@ BOOL LLVisualParamHint::render()
229 LLVector3 camera_pos = target_joint_pos + (camera_snapshot_offset * avatar_rotation); 223 LLVector3 camera_pos = target_joint_pos + (camera_snapshot_offset * avatar_rotation);
230 224
231 gGL.stop(); 225 gGL.stop();
232 gCamera->setAspect((F32)mWidth / (F32)mHeight); 226 LLViewerCamera::getInstance()->setAspect((F32)mWidth / (F32)mHeight);
233 gCamera->setOriginAndLookAt( 227 LLViewerCamera::getInstance()->setOriginAndLookAt(
234 camera_pos, // camera 228 camera_pos, // camera
235 LLVector3(0.f, 0.f, 1.f), // up 229 LLVector3(0.f, 0.f, 1.f), // up
236 target_pos ); // point of interest 230 target_pos ); // point of interest
237 231
238 gCamera->setPerspective(FALSE, mOrigin.mX, mOrigin.mY, mWidth, mHeight, FALSE); 232 LLViewerCamera::getInstance()->setPerspective(FALSE, mOrigin.mX, mOrigin.mY, mWidth, mHeight, FALSE);
239 233
240 if (avatarp->mDrawable.notNull()) 234 if (avatarp->mDrawable.notNull())
241 { 235 {
diff --git a/linden/indra/newview/lltoolmorph.h b/linden/indra/newview/lltoolmorph.h
index b8f56d3..dbb2744 100644
--- a/linden/indra/newview/lltoolmorph.h
+++ b/linden/indra/newview/lltoolmorph.h
@@ -91,7 +91,7 @@ protected:
91 LLRect mRect; 91 LLRect mRect;
92 F32 mLastParamWeight; 92 F32 mLastParamWeight;
93 93
94 LLPointer<LLViewerImage> mBackgroundp; 94 LLUIImagePtr mBackgroundp;
95 95
96 typedef std::set<LLVisualParamHint*> instance_list_t; 96 typedef std::set<LLVisualParamHint*> instance_list_t;
97 static instance_list_t sInstances; 97 static instance_list_t sInstances;
diff --git a/linden/indra/newview/lltoolobjpicker.cpp b/linden/indra/newview/lltoolobjpicker.cpp
index 52469b7..f5d25d8 100644
--- a/linden/indra/newview/lltoolobjpicker.cpp
+++ b/linden/indra/newview/lltoolobjpicker.cpp
@@ -48,7 +48,6 @@
48#include "llviewerwindow.h" 48#include "llviewerwindow.h"
49#include "lldrawable.h" 49#include "lldrawable.h"
50 50
51LLToolObjPicker* gToolObjPicker = NULL;
52 51
53LLToolObjPicker::LLToolObjPicker() 52LLToolObjPicker::LLToolObjPicker()
54: LLTool( "ObjPicker", NULL ), 53: LLTool( "ObjPicker", NULL ),
@@ -98,8 +97,8 @@ void LLToolObjPicker::pickCallback(S32 x, S32 y, MASK mask)
98 objectp = gObjectList.findObject( gLastHitObjectID ); 97 objectp = gObjectList.findObject( gLastHitObjectID );
99 if (objectp) 98 if (objectp)
100 { 99 {
101 gToolObjPicker->mHitObjectID = objectp->mID; 100 LLToolObjPicker::getInstance()->mHitObjectID = objectp->mID;
102 gToolObjPicker->mPicked = TRUE; 101 LLToolObjPicker::getInstance()->mPicked = TRUE;
103 } 102 }
104} 103}
105 104
diff --git a/linden/indra/newview/lltoolobjpicker.h b/linden/indra/newview/lltoolobjpicker.h
index 3a3c628..e56b390 100644
--- a/linden/indra/newview/lltoolobjpicker.h
+++ b/linden/indra/newview/lltoolobjpicker.h
@@ -36,7 +36,7 @@
36#include "v3math.h" 36#include "v3math.h"
37#include "lluuid.h" 37#include "lluuid.h"
38 38
39class LLToolObjPicker : public LLTool 39class LLToolObjPicker : public LLTool, public LLSingleton<LLToolObjPicker>
40{ 40{
41public: 41public:
42 LLToolObjPicker(); 42 LLToolObjPicker();
@@ -63,6 +63,5 @@ protected:
63 void *mExitCallbackData; 63 void *mExitCallbackData;
64}; 64};
65 65
66extern LLToolObjPicker* gToolObjPicker;
67 66
68#endif 67#endif
diff --git a/linden/indra/newview/lltoolpie.cpp b/linden/indra/newview/lltoolpie.cpp
index ab60c67..a9e733a 100644
--- a/linden/indra/newview/lltoolpie.cpp
+++ b/linden/indra/newview/lltoolpie.cpp
@@ -67,8 +67,6 @@
67#include "llui.h" 67#include "llui.h"
68#include "llweb.h" 68#include "llweb.h"
69 69
70LLToolPie *gToolPie = NULL;
71
72LLPointer<LLViewerObject> LLToolPie::sClickActionObject; 70LLPointer<LLViewerObject> LLToolPie::sClickActionObject;
73LLSafeHandle<LLObjectSelection> LLToolPie::sLeftClickSelection = NULL; 71LLSafeHandle<LLObjectSelection> LLToolPie::sLeftClickSelection = NULL;
74U8 LLToolPie::sClickAction = 0; 72U8 LLToolPie::sClickAction = 0;
@@ -94,8 +92,6 @@ LLToolPie::LLToolPie()
94 92
95BOOL LLToolPie::handleMouseDown(S32 x, S32 y, MASK mask) 93BOOL LLToolPie::handleMouseDown(S32 x, S32 y, MASK mask)
96{ 94{
97 if (!gCamera) return FALSE;
98
99 gPickFaces = TRUE; 95 gPickFaces = TRUE;
100 //left mouse down always picks transparent 96 //left mouse down always picks transparent
101 gViewerWindow->hitObjectOrLandGlobalAsync(x, y, mask, leftMouseCallback, 97 gViewerWindow->hitObjectOrLandGlobalAsync(x, y, mask, leftMouseCallback,
@@ -107,7 +103,7 @@ BOOL LLToolPie::handleMouseDown(S32 x, S32 y, MASK mask)
107// static 103// static
108void LLToolPie::leftMouseCallback(S32 x, S32 y, MASK mask) 104void LLToolPie::leftMouseCallback(S32 x, S32 y, MASK mask)
109{ 105{
110 gToolPie->pickAndShowMenu(x, y, mask, FALSE); 106 LLToolPie::getInstance()->pickAndShowMenu(x, y, mask, FALSE);
111} 107}
112 108
113BOOL LLToolPie::handleRightMouseDown(S32 x, S32 y, MASK mask) 109BOOL LLToolPie::handleRightMouseDown(S32 x, S32 y, MASK mask)
@@ -125,7 +121,7 @@ BOOL LLToolPie::handleRightMouseDown(S32 x, S32 y, MASK mask)
125// static 121// static
126void LLToolPie::rightMouseCallback(S32 x, S32 y, MASK mask) 122void LLToolPie::rightMouseCallback(S32 x, S32 y, MASK mask)
127{ 123{
128 gToolPie->pickAndShowMenu(x, y, mask, TRUE); 124 LLToolPie::getInstance()->pickAndShowMenu(x, y, mask, TRUE);
129} 125}
130 126
131// True if you selected an object. 127// True if you selected an object.
@@ -133,12 +129,12 @@ BOOL LLToolPie::pickAndShowMenu(S32 x, S32 y, MASK mask, BOOL always_show)
133{ 129{
134 if (!always_show && gLastHitParcelWall) 130 if (!always_show && gLastHitParcelWall)
135 { 131 {
136 LLParcel* parcel = gParcelMgr->getCollisionParcel(); 132 LLParcel* parcel = LLViewerParcelMgr::getInstance()->getCollisionParcel();
137 if (parcel) 133 if (parcel)
138 { 134 {
139 gParcelMgr->selectCollisionParcel(); 135 LLViewerParcelMgr::getInstance()->selectCollisionParcel();
140 if (parcel->getParcelFlag(PF_USE_PASS_LIST) 136 if (parcel->getParcelFlag(PF_USE_PASS_LIST)
141 && !gParcelMgr->isCollisionBanned()) 137 && !LLViewerParcelMgr::getInstance()->isCollisionBanned())
142 { 138 {
143 // if selling passes, just buy one 139 // if selling passes, just buy one
144 void* deselect_when_done = (void*)TRUE; 140 void* deselect_when_done = (void*)TRUE;
@@ -161,7 +157,7 @@ BOOL LLToolPie::pickAndShowMenu(S32 x, S32 y, MASK mask, BOOL always_show)
161 mHitLand = !object && !gLastHitPosGlobal.isExactlyZero(); 157 mHitLand = !object && !gLastHitPosGlobal.isExactlyZero();
162 if (!mHitLand) 158 if (!mHitLand)
163 { 159 {
164 gParcelMgr->deselectLand(); 160 LLViewerParcelMgr::getInstance()->deselectLand();
165 } 161 }
166 162
167 if (object) 163 if (object)
@@ -198,8 +194,12 @@ BOOL LLToolPie::pickAndShowMenu(S32 x, S32 y, MASK mask, BOOL always_show)
198 // nothing 194 // nothing
199 break; 195 break;
200 case CLICK_ACTION_SIT: 196 case CLICK_ACTION_SIT:
201 handle_sit_or_stand(); 197 if ((gAgent.getAvatarObject() != NULL) && (!gAgent.getAvatarObject()->mIsSitting)) // agent not already sitting
202 return TRUE; 198 {
199 handle_sit_or_stand();
200 return TRUE;
201 } // else nothing (fall through to touch)
202
203 case CLICK_ACTION_PAY: 203 case CLICK_ACTION_PAY:
204 if (object && object->flagTakesMoney() 204 if (object && object->flagTakesMoney()
205 || parent && parent->flagTakesMoney()) 205 || parent && parent->flagTakesMoney())
@@ -238,8 +238,8 @@ BOOL LLToolPie::pickAndShowMenu(S32 x, S32 y, MASK mask, BOOL always_show)
238 !always_show) 238 !always_show)
239 { 239 {
240 gGrabTransientTool = this; 240 gGrabTransientTool = this;
241 gToolMgr->getCurrentToolset()->selectTool( gToolGrab ); 241 LLToolMgr::getInstance()->getCurrentToolset()->selectTool( LLToolGrab::getInstance() );
242 return gToolGrab->handleObjectHit( object, x, y, mask); 242 return LLToolGrab::getInstance()->handleObjectHit( object, x, y, mask);
243 } 243 }
244 244
245 if (!object && gLastHitHUDIcon && gLastHitHUDIcon->getSourceObject()) 245 if (!object && gLastHitHUDIcon && gLastHitHUDIcon->getSourceObject())
@@ -270,10 +270,10 @@ BOOL LLToolPie::pickAndShowMenu(S32 x, S32 y, MASK mask, BOOL always_show)
270 if (object && object == gAgent.getAvatarObject()) 270 if (object && object == gAgent.getAvatarObject())
271 { 271 {
272 // we left clicked on avatar, switch to focus mode 272 // we left clicked on avatar, switch to focus mode
273 gToolMgr->setTransientTool(gToolCamera); 273 LLToolMgr::getInstance()->setTransientTool(LLToolCamera::getInstance());
274 gViewerWindow->hideCursor(); 274 gViewerWindow->hideCursor();
275 gToolCamera->setMouseCapture(TRUE); 275 LLToolCamera::getInstance()->setMouseCapture(TRUE);
276 gToolCamera->pickCallback(gViewerWindow->getCurrentMouseX(), gViewerWindow->getCurrentMouseY(), mask); 276 LLToolCamera::getInstance()->pickCallback(gViewerWindow->getCurrentMouseX(), gViewerWindow->getCurrentMouseY(), mask);
277 gAgent.setFocusOnAvatar(TRUE, TRUE); 277 gAgent.setFocusOnAvatar(TRUE, TRUE);
278 278
279 return TRUE; 279 return TRUE;
@@ -297,12 +297,12 @@ BOOL LLToolPie::pickAndShowMenu(S32 x, S32 y, MASK mask, BOOL always_show)
297 // Spawn pie menu 297 // Spawn pie menu
298 if (mHitLand) 298 if (mHitLand)
299 { 299 {
300 LLParcelSelectionHandle selection = gParcelMgr->selectParcelAt( gLastHitPosGlobal ); 300 LLParcelSelectionHandle selection = LLViewerParcelMgr::getInstance()->selectParcelAt( gLastHitPosGlobal );
301 gMenuHolder->setParcelSelection(selection); 301 gMenuHolder->setParcelSelection(selection);
302 gPieLand->show(x, y, mPieMouseButtonDown); 302 gPieLand->show(x, y, mPieMouseButtonDown);
303 303
304 // VEFFECT: ShowPie 304 // VEFFECT: ShowPie
305 LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)gHUDManager->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_SPHERE, TRUE); 305 LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_SPHERE, TRUE);
306 effectp->setPositionGlobal(gLastHitPosGlobal); 306 effectp->setPositionGlobal(gLastHitPosGlobal);
307 effectp->setColor(LLColor4U(gAgent.getEffectColor())); 307 effectp->setColor(LLColor4U(gAgent.getEffectColor()));
308 effectp->setDuration(0.25f); 308 effectp->setDuration(0.25f);
@@ -313,7 +313,7 @@ BOOL LLToolPie::pickAndShowMenu(S32 x, S32 y, MASK mask, BOOL always_show)
313 } 313 }
314 else if (object) 314 else if (object)
315 { 315 {
316 gMenuHolder->setObjectSelection(gSelectMgr->getSelection()); 316 gMenuHolder->setObjectSelection(LLSelectMgr::getInstance()->getSelection());
317 317
318 if (object->isAvatar() 318 if (object->isAvatar()
319 || (object->isAttachment() && !object->isHUDAttachment() && !object->permYouOwner())) 319 || (object->isAttachment() && !object->isHUDAttachment() && !object->permYouOwner()))
@@ -327,7 +327,7 @@ BOOL LLToolPie::pickAndShowMenu(S32 x, S32 y, MASK mask, BOOL always_show)
327 // Object is an avatar, so check for mute by id. 327 // Object is an avatar, so check for mute by id.
328 LLVOAvatar* avatar = (LLVOAvatar*)object; 328 LLVOAvatar* avatar = (LLVOAvatar*)object;
329 LLString name = avatar->getFullname(); 329 LLString name = avatar->getFullname();
330 if (gMuteListp->isMuted(avatar->getID(), name)) 330 if (LLMuteList::getInstance()->isMuted(avatar->getID(), name))
331 { 331 {
332 gMenuHolder->childSetText("Avatar Mute", LLString("Unmute")); // *TODO:Translate 332 gMenuHolder->childSetText("Avatar Mute", LLString("Unmute")); // *TODO:Translate
333 //gMutePieMenu->setLabel("Unmute"); 333 //gMutePieMenu->setLabel("Unmute");
@@ -348,12 +348,12 @@ BOOL LLToolPie::pickAndShowMenu(S32 x, S32 y, MASK mask, BOOL always_show)
348 { 348 {
349 // BUG: What about chatting child objects? 349 // BUG: What about chatting child objects?
350 LLString name; 350 LLString name;
351 LLSelectNode* node = gSelectMgr->getSelection()->getFirstRootNode(); 351 LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode();
352 if (node) 352 if (node)
353 { 353 {
354 name = node->mName; 354 name = node->mName;
355 } 355 }
356 if (gMuteListp->isMuted(object->getID(), name)) 356 if (LLMuteList::getInstance()->isMuted(object->getID(), name))
357 { 357 {
358 gMenuHolder->childSetText("Object Mute", LLString("Unmute")); // *TODO:Translate 358 gMenuHolder->childSetText("Object Mute", LLString("Unmute")); // *TODO:Translate
359 //gMuteObjectPieMenu->setLabel("Unmute"); 359 //gMuteObjectPieMenu->setLabel("Unmute");
@@ -369,7 +369,7 @@ BOOL LLToolPie::pickAndShowMenu(S32 x, S32 y, MASK mask, BOOL always_show)
369 // VEFFECT: ShowPie object 369 // VEFFECT: ShowPie object
370 // Don't show when you click on someone else, it freaks them 370 // Don't show when you click on someone else, it freaks them
371 // out. 371 // out.
372 LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)gHUDManager->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_SPHERE, TRUE); 372 LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_SPHERE, TRUE);
373 effectp->setPositionGlobal(gLastHitPosGlobal); 373 effectp->setPositionGlobal(gLastHitPosGlobal);
374 effectp->setColor(LLColor4U(gAgent.getEffectColor())); 374 effectp->setColor(LLColor4U(gAgent.getEffectColor()));
375 effectp->setDuration(0.25f); 375 effectp->setDuration(0.25f);
@@ -440,7 +440,10 @@ ECursorType cursor_from_object(LLViewerObject* object)
440 switch(click_action) 440 switch(click_action)
441 { 441 {
442 case CLICK_ACTION_SIT: 442 case CLICK_ACTION_SIT:
443 cursor = UI_CURSOR_TOOLSIT; 443 if ((gAgent.getAvatarObject() != NULL) && (!gAgent.getAvatarObject()->mIsSitting)) // not already sitting?
444 {
445 cursor = UI_CURSOR_TOOLSIT;
446 }
444 break; 447 break;
445 case CLICK_ACTION_BUY: 448 case CLICK_ACTION_BUY:
446 cursor = UI_CURSOR_TOOLBUY; 449 cursor = UI_CURSOR_TOOLBUY;
@@ -476,7 +479,7 @@ void LLToolPie::selectionPropertiesReceived()
476{ 479{
477 // Make sure all data has been received. 480 // Make sure all data has been received.
478 // This function will be called repeatedly as the data comes in. 481 // This function will be called repeatedly as the data comes in.
479 if (!gSelectMgr->selectGetAllValid()) 482 if (!LLSelectMgr::getInstance()->selectGetAllValid())
480 { 483 {
481 return; 484 return;
482 } 485 }
@@ -594,7 +597,7 @@ BOOL LLToolPie::handleMouseUp(S32 x, S32 y, MASK mask)
594 } 597 }
595 } 598 }
596 mGrabMouseButtonDown = FALSE; 599 mGrabMouseButtonDown = FALSE;
597 gToolMgr->clearTransientTool(); 600 LLToolMgr::getInstance()->clearTransientTool();
598 gAgent.setLookAt(LOOKAT_TARGET_CONVERSATION, obj); // maybe look at object/person clicked on 601 gAgent.setLookAt(LOOKAT_TARGET_CONVERSATION, obj); // maybe look at object/person clicked on
599 return LLTool::handleMouseUp(x, y, mask); 602 return LLTool::handleMouseUp(x, y, mask);
600} 603}
@@ -602,7 +605,7 @@ BOOL LLToolPie::handleMouseUp(S32 x, S32 y, MASK mask)
602BOOL LLToolPie::handleRightMouseUp(S32 x, S32 y, MASK mask) 605BOOL LLToolPie::handleRightMouseUp(S32 x, S32 y, MASK mask)
603{ 606{
604 mPieMouseButtonDown = FALSE; 607 mPieMouseButtonDown = FALSE;
605 gToolMgr->clearTransientTool(); 608 LLToolMgr::getInstance()->clearTransientTool();
606 return LLTool::handleRightMouseUp(x, y, mask); 609 return LLTool::handleRightMouseUp(x, y, mask);
607} 610}
608 611
@@ -668,18 +671,18 @@ void LLToolPie::handleDeselect()
668 setMouseCapture( FALSE ); // Calls onMouseCaptureLost() indirectly 671 setMouseCapture( FALSE ); // Calls onMouseCaptureLost() indirectly
669 } 672 }
670 // remove temporary selection for pie menu 673 // remove temporary selection for pie menu
671 gSelectMgr->validateSelection(); 674 LLSelectMgr::getInstance()->validateSelection();
672} 675}
673 676
674LLTool* LLToolPie::getOverrideTool(MASK mask) 677LLTool* LLToolPie::getOverrideTool(MASK mask)
675{ 678{
676 if (mask == MASK_CONTROL) 679 if (mask == MASK_CONTROL)
677 { 680 {
678 return gToolGrab; 681 return LLToolGrab::getInstance();
679 } 682 }
680 else if (mask == (MASK_CONTROL | MASK_SHIFT)) 683 else if (mask == (MASK_CONTROL | MASK_SHIFT))
681 { 684 {
682 return gToolGrab; 685 return LLToolGrab::getInstance();
683 } 686 }
684 687
685 return LLTool::getOverrideTool(mask); 688 return LLTool::getOverrideTool(mask);
@@ -716,7 +719,7 @@ void LLToolPie::render()
716 719
717static void handle_click_action_play() 720static void handle_click_action_play()
718{ 721{
719 LLParcel* parcel = gParcelMgr->getAgentParcel(); 722 LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
720 if (!parcel) return; 723 if (!parcel) return;
721 724
722 LLMediaBase::EStatus status = LLViewerParcelMedia::getStatus(); 725 LLMediaBase::EStatus status = LLViewerParcelMedia::getStatus();
@@ -739,7 +742,7 @@ static void handle_click_action_play()
739static void handle_click_action_open_media(LLPointer<LLViewerObject> objectp) 742static void handle_click_action_open_media(LLPointer<LLViewerObject> objectp)
740{ 743{
741 //FIXME: how do we handle object in different parcel than us? 744 //FIXME: how do we handle object in different parcel than us?
742 LLParcel* parcel = gParcelMgr->getAgentParcel(); 745 LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
743 if (!parcel) return; 746 if (!parcel) return;
744 747
745 // did we hit an object? 748 // did we hit an object?
@@ -781,7 +784,7 @@ static ECursorType cursor_from_parcel_media(U8 click_action)
781 784
782 //FIXME: how do we handle object in different parcel than us? 785 //FIXME: how do we handle object in different parcel than us?
783 ECursorType open_cursor = UI_CURSOR_ARROW; 786 ECursorType open_cursor = UI_CURSOR_ARROW;
784 LLParcel* parcel = gParcelMgr->getAgentParcel(); 787 LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
785 if (!parcel) return open_cursor; 788 if (!parcel) return open_cursor;
786 789
787 std::string media_url = std::string ( parcel->getMediaURL () ); 790 std::string media_url = std::string ( parcel->getMediaURL () );
diff --git a/linden/indra/newview/lltoolpie.h b/linden/indra/newview/lltoolpie.h
index 37ca5ea..1b03ef8 100644
--- a/linden/indra/newview/lltoolpie.h
+++ b/linden/indra/newview/lltoolpie.h
@@ -38,8 +38,7 @@
38class LLViewerObject; 38class LLViewerObject;
39class LLObjectSelection; 39class LLObjectSelection;
40 40
41class LLToolPie 41class LLToolPie : public LLTool, public LLSingleton<LLToolPie>
42: public LLTool
43{ 42{
44public: 43public:
45 LLToolPie( ); 44 LLToolPie( );
@@ -81,6 +80,5 @@ protected:
81 static LLSafeHandle<LLObjectSelection> sLeftClickSelection; 80 static LLSafeHandle<LLObjectSelection> sLeftClickSelection;
82}; 81};
83 82
84extern LLToolPie *gToolPie;
85 83
86#endif 84#endif
diff --git a/linden/indra/newview/lltoolpipette.cpp b/linden/indra/newview/lltoolpipette.cpp
index 67499cc..eaae390 100644
--- a/linden/indra/newview/lltoolpipette.cpp
+++ b/linden/indra/newview/lltoolpipette.cpp
@@ -46,9 +46,6 @@
46#include "llselectmgr.h" 46#include "llselectmgr.h"
47#include "lltoolmgr.h" 47#include "lltoolmgr.h"
48 48
49// Globals
50LLToolPipette *gToolPipette = NULL;
51
52// 49//
53// Member functions 50// Member functions
54// 51//
@@ -79,9 +76,9 @@ BOOL LLToolPipette::handleMouseDown(S32 x, S32 y, MASK mask)
79BOOL LLToolPipette::handleMouseUp(S32 x, S32 y, MASK mask) 76BOOL LLToolPipette::handleMouseUp(S32 x, S32 y, MASK mask)
80{ 77{
81 mSuccess = TRUE; 78 mSuccess = TRUE;
82 gSelectMgr->unhighlightAll(); 79 LLSelectMgr::getInstance()->unhighlightAll();
83 // *NOTE: This assumes the pipette tool is a transient tool. 80 // *NOTE: This assumes the pipette tool is a transient tool.
84 gToolMgr->clearTransientTool(); 81 LLToolMgr::getInstance()->clearTransientTool();
85 setMouseCapture(FALSE); 82 setMouseCapture(FALSE);
86 return TRUE; 83 return TRUE;
87} 84}
@@ -113,7 +110,7 @@ BOOL LLToolPipette::handleToolTip(S32 x, S32 y, LLString& msg, LLRect *sticky_re
113void LLToolPipette::pickCallback(S32 x, S32 y, MASK mask) 110void LLToolPipette::pickCallback(S32 x, S32 y, MASK mask)
114{ 111{
115 LLViewerObject* hit_obj = gViewerWindow->lastObjectHit(); 112 LLViewerObject* hit_obj = gViewerWindow->lastObjectHit();
116 gSelectMgr->unhighlightAll(); 113 LLSelectMgr::getInstance()->unhighlightAll();
117 114
118 // if we clicked on a face of a valid prim, save off texture entry data 115 // if we clicked on a face of a valid prim, save off texture entry data
119 if (hit_obj && 116 if (hit_obj &&
@@ -121,11 +118,11 @@ void LLToolPipette::pickCallback(S32 x, S32 y, MASK mask)
121 gLastHitObjectFace != -1) 118 gLastHitObjectFace != -1)
122 { 119 {
123 //TODO: this should highlight the selected face only 120 //TODO: this should highlight the selected face only
124 gSelectMgr->highlightObjectOnly(hit_obj); 121 LLSelectMgr::getInstance()->highlightObjectOnly(hit_obj);
125 gToolPipette->mTextureEntry = *hit_obj->getTE(gLastHitObjectFace); 122 LLToolPipette::getInstance()->mTextureEntry = *hit_obj->getTE(gLastHitObjectFace);
126 if (gToolPipette->mSelectCallback) 123 if (LLToolPipette::getInstance()->mSelectCallback)
127 { 124 {
128 gToolPipette->mSelectCallback(gToolPipette->mTextureEntry, gToolPipette->mUserData); 125 LLToolPipette::getInstance()->mSelectCallback(LLToolPipette::getInstance()->mTextureEntry, LLToolPipette::getInstance()->mUserData);
129 } 126 }
130 } 127 }
131} 128}
diff --git a/linden/indra/newview/lltoolpipette.h b/linden/indra/newview/lltoolpipette.h
index db46769..28d0393 100644
--- a/linden/indra/newview/lltoolpipette.h
+++ b/linden/indra/newview/lltoolpipette.h
@@ -43,7 +43,7 @@
43class LLViewerObject; 43class LLViewerObject;
44 44
45class LLToolPipette 45class LLToolPipette
46: public LLTool 46: public LLTool, public LLSingleton<LLToolPipette>
47{ 47{
48public: 48public:
49 LLToolPipette(); 49 LLToolPipette();
@@ -68,6 +68,4 @@ protected:
68 void* mUserData; 68 void* mUserData;
69}; 69};
70 70
71extern LLToolPipette *gToolPipette;
72
73#endif //LL_LLTOOLPIPETTE_H 71#endif //LL_LLTOOLPIPETTE_H
diff --git a/linden/indra/newview/lltoolplacer.cpp b/linden/indra/newview/lltoolplacer.cpp
index bf8a400..a319236 100644
--- a/linden/indra/newview/lltoolplacer.cpp
+++ b/linden/indra/newview/lltoolplacer.cpp
@@ -117,7 +117,7 @@ BOOL LLToolPlacer::raycastForNewObjPos( S32 x, S32 y, LLViewerObject** hit_obj,
117 } 117 }
118 118
119 // Find the sim where the surface lives. 119 // Find the sim where the surface lives.
120 LLViewerRegion *regionp = gWorldp->getRegionFromPosGlobal(surface_pos_global); 120 LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromPosGlobal(surface_pos_global);
121 if (!regionp) 121 if (!regionp)
122 { 122 {
123 llwarns << "Trying to add object outside of all known regions!" << llendl; 123 llwarns << "Trying to add object outside of all known regions!" << llendl;
@@ -130,8 +130,8 @@ BOOL LLToolPlacer::raycastForNewObjPos( S32 x, S32 y, LLViewerObject** hit_obj,
130 130
131 *region = regionp; 131 *region = regionp;
132 *ray_start_region = regionp->getPosRegionFromGlobal( ray_start_global ); 132 *ray_start_region = regionp->getPosRegionFromGlobal( ray_start_global );
133 F32 near_clip = gCamera->getNear() + 0.01f; // Include an epsilon to avoid rounding issues. 133 F32 near_clip = LLViewerCamera::getInstance()->getNear() + 0.01f; // Include an epsilon to avoid rounding issues.
134 *ray_start_region += gCamera->getAtAxis() * near_clip; 134 *ray_start_region += LLViewerCamera::getInstance()->getAtAxis() * near_clip;
135 135
136 if( bypass_sim_raycast ) 136 if( bypass_sim_raycast )
137 { 137 {
@@ -415,18 +415,18 @@ BOOL LLToolPlacer::addObject( LLPCode pcode, S32 x, S32 y, U8 use_physics )
415 // Spawns a message, so must be after above send 415 // Spawns a message, so must be after above send
416 if (create_selected) 416 if (create_selected)
417 { 417 {
418 gSelectMgr->deselectAll(); 418 LLSelectMgr::getInstance()->deselectAll();
419 gViewerWindow->getWindow()->incBusyCount(); 419 gViewerWindow->getWindow()->incBusyCount();
420 } 420 }
421 421
422 // VEFFECT: AddObject 422 // VEFFECT: AddObject
423 LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)gHUDManager->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE); 423 LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE);
424 effectp->setSourceObject((LLViewerObject*)gAgent.getAvatarObject()); 424 effectp->setSourceObject((LLViewerObject*)gAgent.getAvatarObject());
425 effectp->setPositionGlobal(regionp->getPosGlobalFromRegion(ray_end_region)); 425 effectp->setPositionGlobal(regionp->getPosGlobalFromRegion(ray_end_region));
426 effectp->setDuration(LL_HUD_DUR_SHORT); 426 effectp->setDuration(LL_HUD_DUR_SHORT);
427 effectp->setColor(LLColor4U(gAgent.getEffectColor())); 427 effectp->setColor(LLColor4U(gAgent.getEffectColor()));
428 428
429 gViewerStats->incStat(LLViewerStats::ST_CREATE_COUNT); 429 LLViewerStats::getInstance()->incStat(LLViewerStats::ST_CREATE_COUNT);
430 430
431 return TRUE; 431 return TRUE;
432} 432}
@@ -468,7 +468,7 @@ BOOL LLToolPlacer::addDuplicate(S32 x, S32 y)
468 ray_target_id.setNull(); 468 ray_target_id.setNull();
469 } 469 }
470 470
471 gSelectMgr->selectDuplicateOnRay(ray_start_region, 471 LLSelectMgr::getInstance()->selectDuplicateOnRay(ray_start_region,
472 ray_end_region, 472 ray_end_region,
473 b_hit_land, // suppress raycast 473 b_hit_land, // suppress raycast
474 FALSE, // intersection 474 FALSE, // intersection
@@ -503,7 +503,7 @@ BOOL LLToolPlacer::placeObject(S32 x, S32 y, MASK mask)
503 // ...and go back to the default tool 503 // ...and go back to the default tool
504 if (added && !gSavedSettings.getBOOL("CreateToolKeepSelected")) 504 if (added && !gSavedSettings.getBOOL("CreateToolKeepSelected"))
505 { 505 {
506 gToolMgr->getCurrentToolset()->selectTool( gToolTranslate ); 506 LLToolMgr::getInstance()->getCurrentToolset()->selectTool( LLToolCompTranslate::getInstance() );
507 } 507 }
508 508
509 return added; 509 return added;
diff --git a/linden/indra/newview/lltoolselect.cpp b/linden/indra/newview/lltoolselect.cpp
index 4371cbe..d4a8153 100644
--- a/linden/indra/newview/lltoolselect.cpp
+++ b/linden/indra/newview/lltoolselect.cpp
@@ -51,7 +51,6 @@
51#include "llworld.h" 51#include "llworld.h"
52 52
53// Globals 53// Globals
54LLToolSelect *gToolSelect = NULL;
55extern BOOL gAllowSelectAvatar; 54extern BOOL gAllowSelectAvatar;
56 55
57const F32 SELECTION_ROTATION_TRESHOLD = 0.1f; 56const F32 SELECTION_ROTATION_TRESHOLD = 0.1f;
@@ -106,7 +105,7 @@ LLSafeHandle<LLObjectSelection> LLToolSelect::handleObjectSelection(LLViewerObje
106 { 105 {
107 gSavedSettings.setBOOL("SelectOwnedOnly", FALSE); 106 gSavedSettings.setBOOL("SelectOwnedOnly", FALSE);
108 gSavedSettings.setBOOL("SelectMovableOnly", FALSE); 107 gSavedSettings.setBOOL("SelectMovableOnly", FALSE);
109 gSelectMgr->setForceSelection(TRUE); 108 LLSelectMgr::getInstance()->setForceSelection(TRUE);
110 } 109 }
111 110
112 BOOL extend_select = (mask == MASK_SHIFT) || (mask == MASK_CONTROL); 111 BOOL extend_select = (mask == MASK_SHIFT) || (mask == MASK_CONTROL);
@@ -120,7 +119,7 @@ LLSafeHandle<LLObjectSelection> LLToolSelect::handleObjectSelection(LLViewerObje
120 } 119 }
121 else if (!extend_select) 120 else if (!extend_select)
122 { 121 {
123 gSelectMgr->deselectAll(); 122 LLSelectMgr::getInstance()->deselectAll();
124 } 123 }
125 } 124 }
126 else 125 else
@@ -133,22 +132,22 @@ LLSafeHandle<LLObjectSelection> LLToolSelect::handleObjectSelection(LLViewerObje
133 { 132 {
134 if ( ignore_group ) 133 if ( ignore_group )
135 { 134 {
136 gSelectMgr->deselectObjectOnly(object); 135 LLSelectMgr::getInstance()->deselectObjectOnly(object);
137 } 136 }
138 else 137 else
139 { 138 {
140 gSelectMgr->deselectObjectAndFamily(object, TRUE, TRUE); 139 LLSelectMgr::getInstance()->deselectObjectAndFamily(object, TRUE, TRUE);
141 } 140 }
142 } 141 }
143 else 142 else
144 { 143 {
145 if ( ignore_group ) 144 if ( ignore_group )
146 { 145 {
147 gSelectMgr->selectObjectOnly(object, SELECT_ALL_TES); 146 LLSelectMgr::getInstance()->selectObjectOnly(object, SELECT_ALL_TES);
148 } 147 }
149 else 148 else
150 { 149 {
151 gSelectMgr->selectObjectAndFamily(object); 150 LLSelectMgr::getInstance()->selectObjectAndFamily(object);
152 } 151 }
153 } 152 }
154 } 153 }
@@ -157,27 +156,27 @@ LLSafeHandle<LLObjectSelection> LLToolSelect::handleObjectSelection(LLViewerObje
157 // Save the current zoom values because deselect resets them. 156 // Save the current zoom values because deselect resets them.
158 F32 target_zoom; 157 F32 target_zoom;
159 F32 current_zoom; 158 F32 current_zoom;
160 gSelectMgr->getAgentHUDZoom(target_zoom, current_zoom); 159 LLSelectMgr::getInstance()->getAgentHUDZoom(target_zoom, current_zoom);
161 160
162 // JC - Change behavior to make it easier to select children 161 // JC - Change behavior to make it easier to select children
163 // of linked sets. 9/3/2002 162 // of linked sets. 9/3/2002
164 if( !already_selected || ignore_group) 163 if( !already_selected || ignore_group)
165 { 164 {
166 // ...lose current selection in favor of just this object 165 // ...lose current selection in favor of just this object
167 gSelectMgr->deselectAll(); 166 LLSelectMgr::getInstance()->deselectAll();
168 } 167 }
169 168
170 if ( ignore_group ) 169 if ( ignore_group )
171 { 170 {
172 gSelectMgr->selectObjectOnly(object, SELECT_ALL_TES); 171 LLSelectMgr::getInstance()->selectObjectOnly(object, SELECT_ALL_TES);
173 } 172 }
174 else 173 else
175 { 174 {
176 gSelectMgr->selectObjectAndFamily(object); 175 LLSelectMgr::getInstance()->selectObjectAndFamily(object);
177 } 176 }
178 177
179 // restore the zoom to the previously stored values. 178 // restore the zoom to the previously stored values.
180 gSelectMgr->setAgentHUDZoom(target_zoom, current_zoom); 179 LLSelectMgr::getInstance()->setAgentHUDZoom(target_zoom, current_zoom);
181 } 180 }
182 181
183 if (!gAgent.getFocusOnAvatar() && // if camera not glued to avatar 182 if (!gAgent.getFocusOnAvatar() && // if camera not glued to avatar
@@ -185,7 +184,7 @@ LLSafeHandle<LLObjectSelection> LLToolSelect::handleObjectSelection(LLViewerObje
185 object != gAgent.getAvatarObject()) // and it's not you 184 object != gAgent.getAvatarObject()) // and it's not you
186 { 185 {
187 // have avatar turn to face the selected object(s) 186 // have avatar turn to face the selected object(s)
188 LLVector3d selection_center = gSelectMgr->getSelectionCenterGlobal(); 187 LLVector3d selection_center = LLSelectMgr::getInstance()->getSelectionCenterGlobal();
189 selection_center = selection_center - gAgent.getPositionGlobal(); 188 selection_center = selection_center - gAgent.getPositionGlobal();
190 LLVector3 selection_dir; 189 LLVector3 selection_dir;
191 selection_dir.setVec(selection_center); 190 selection_dir.setVec(selection_center);
@@ -204,7 +203,7 @@ LLSafeHandle<LLObjectSelection> LLToolSelect::handleObjectSelection(LLViewerObje
204 if (!already_selected) 203 if (!already_selected)
205 { 204 {
206 LLViewerObject* root_object = (LLViewerObject*)object->getRootEdit(); 205 LLViewerObject* root_object = (LLViewerObject*)object->getRootEdit();
207 LLObjectSelectionHandle selection = gSelectMgr->getSelection(); 206 LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
208 207
209 // this is just a temporary selection 208 // this is just a temporary selection
210 LLSelectNode* select_node = selection->findNode(root_object); 209 LLSelectNode* select_node = selection->findNode(root_object);
@@ -231,10 +230,10 @@ LLSafeHandle<LLObjectSelection> LLToolSelect::handleObjectSelection(LLViewerObje
231 { 230 {
232 gSavedSettings.setBOOL("SelectOwnedOnly", select_owned); 231 gSavedSettings.setBOOL("SelectOwnedOnly", select_owned);
233 gSavedSettings.setBOOL("SelectMovableOnly", select_movable); 232 gSavedSettings.setBOOL("SelectMovableOnly", select_movable);
234 gSelectMgr->setForceSelection(FALSE); 233 LLSelectMgr::getInstance()->setForceSelection(FALSE);
235 } 234 }
236 235
237 return gSelectMgr->getSelection(); 236 return LLSelectMgr::getInstance()->getSelection();
238} 237}
239 238
240BOOL LLToolSelect::handleMouseUp(S32 x, S32 y, MASK mask) 239BOOL LLToolSelect::handleMouseUp(S32 x, S32 y, MASK mask)
@@ -268,7 +267,7 @@ void LLToolSelect::onMouseCaptureLost()
268{ 267{
269 // Finish drag 268 // Finish drag
270 269
271 gSelectMgr->enableSilhouette(TRUE); 270 LLSelectMgr::getInstance()->enableSilhouette(TRUE);
272 271
273 // Clean up drag-specific variables 272 // Clean up drag-specific variables
274 mIgnoreGroup = FALSE; 273 mIgnoreGroup = FALSE;
diff --git a/linden/indra/newview/lltoolselect.h b/linden/indra/newview/lltoolselect.h
index d9cb04b..a23729f 100644
--- a/linden/indra/newview/lltoolselect.h
+++ b/linden/indra/newview/lltoolselect.h
@@ -38,7 +38,7 @@
38 38
39class LLObjectSelection; 39class LLObjectSelection;
40 40
41class LLToolSelect : public LLTool 41class LLToolSelect : public LLTool, public LLSingleton<LLToolSelect>
42{ 42{
43public: 43public:
44 LLToolSelect( LLToolComposite* composite ); 44 LLToolSelect( LLToolComposite* composite );
@@ -59,6 +59,5 @@ protected:
59 LLUUID mSelectObjectID; 59 LLUUID mSelectObjectID;
60}; 60};
61 61
62extern LLToolSelect *gToolSelect;
63 62
64#endif // LL_TOOLSELECTION_H 63#endif // LL_TOOLSELECTION_H
diff --git a/linden/indra/newview/lltoolselectland.cpp b/linden/indra/newview/lltoolselectland.cpp
index 11943cc..96e0de1 100644
--- a/linden/indra/newview/lltoolselectland.cpp
+++ b/linden/indra/newview/lltoolselectland.cpp
@@ -46,9 +46,6 @@
46#include "llviewerparcelmgr.h" 46#include "llviewerparcelmgr.h"
47#include "llviewerwindow.h" 47#include "llviewerwindow.h"
48 48
49// Globals
50LLToolSelectLand *gToolParcel = NULL;
51
52// 49//
53// Member functions 50// Member functions
54// 51//
@@ -98,7 +95,7 @@ BOOL LLToolSelectLand::handleMouseDown(S32 x, S32 y, MASK mask)
98 95
99 mMouseOutsideSlop = TRUE; //FALSE; 96 mMouseOutsideSlop = TRUE; //FALSE;
100 97
101 gParcelMgr->deselectLand(); 98 LLViewerParcelMgr::getInstance()->deselectLand();
102 } 99 }
103 100
104 return hit_land; 101 return hit_land;
@@ -112,7 +109,7 @@ BOOL LLToolSelectLand::handleDoubleClick(S32 x, S32 y, MASK mask)
112 if (hit_land) 109 if (hit_land)
113 { 110 {
114 // Auto-select this parcel 111 // Auto-select this parcel
115 gParcelMgr->selectParcelAt( pos_global ); 112 LLViewerParcelMgr::getInstance()->selectParcelAt( pos_global );
116 return TRUE; 113 return TRUE;
117 } 114 }
118 return FALSE; 115 return FALSE;
@@ -140,7 +137,7 @@ BOOL LLToolSelectLand::handleMouseUp(S32 x, S32 y, MASK mask)
140 roundXY(mEastNorthTop); 137 roundXY(mEastNorthTop);
141 138
142 // Don't auto-select entire parcel. 139 // Don't auto-select entire parcel.
143 mSelection = gParcelMgr->selectLand( mWestSouthBottom, mEastNorthTop, FALSE ); 140 mSelection = LLViewerParcelMgr::getInstance()->selectLand( mWestSouthBottom, mEastNorthTop, FALSE );
144 } 141 }
145 142
146 mMouseOutsideSlop = FALSE; 143 mMouseOutsideSlop = FALSE;
@@ -212,7 +209,7 @@ void LLToolSelectLand::render()
212{ 209{
213 if( hasMouseCapture() && /*mMouseOutsideSlop &&*/ mDragEndValid) 210 if( hasMouseCapture() && /*mMouseOutsideSlop &&*/ mDragEndValid)
214 { 211 {
215 gParcelMgr->renderRect( mWestSouthBottom, mEastNorthTop ); 212 LLViewerParcelMgr::getInstance()->renderRect( mWestSouthBottom, mEastNorthTop );
216 } 213 }
217} 214}
218 215
@@ -228,7 +225,7 @@ void LLToolSelectLand::handleDeselect()
228{ 225{
229 mSelection = NULL; 226 mSelection = NULL;
230 mLastShowParcelOwners = gSavedSettings.getBOOL("ShowParcelOwners"); 227 mLastShowParcelOwners = gSavedSettings.getBOOL("ShowParcelOwners");
231 //gParcelMgr->deselectLand(); 228 //LLViewerParcelMgr::getInstance()->deselectLand();
232 gSavedSettings.setBOOL("ShowParcelOwners", mLastShowParcelOwners); 229 gSavedSettings.setBOOL("ShowParcelOwners", mLastShowParcelOwners);
233} 230}
234 231
diff --git a/linden/indra/newview/lltoolselectland.h b/linden/indra/newview/lltoolselectland.h
index dafec66..1e1462b 100644
--- a/linden/indra/newview/lltoolselectland.h
+++ b/linden/indra/newview/lltoolselectland.h
@@ -38,7 +38,7 @@
38class LLParcelSelection; 38class LLParcelSelection;
39 39
40class LLToolSelectLand 40class LLToolSelectLand
41: public LLTool 41: public LLTool, public LLSingleton<LLToolSelectLand>
42{ 42{
43public: 43public:
44 LLToolSelectLand( ); 44 LLToolSelectLand( );
@@ -78,6 +78,5 @@ protected:
78 LLSafeHandle<LLParcelSelection> mSelection; // hold on to a parcel selection 78 LLSafeHandle<LLParcelSelection> mSelection; // hold on to a parcel selection
79}; 79};
80 80
81extern LLToolSelectLand *gToolParcel;
82 81
83#endif 82#endif
diff --git a/linden/indra/newview/lltoolselectrect.cpp b/linden/indra/newview/lltoolselectrect.cpp
index 6adca35..11cdf4b 100644
--- a/linden/indra/newview/lltoolselectrect.cpp
+++ b/linden/indra/newview/lltoolselectrect.cpp
@@ -106,11 +106,11 @@ BOOL LLToolSelectRect::handleMouseUp(S32 x, S32 y, MASK mask)
106 106
107 if (mask == MASK_CONTROL) 107 if (mask == MASK_CONTROL)
108 { 108 {
109 gSelectMgr->deselectHighlightedObjects(); 109 LLSelectMgr::getInstance()->deselectHighlightedObjects();
110 } 110 }
111 else 111 else
112 { 112 {
113 gSelectMgr->selectHighlightedObjects(); 113 LLSelectMgr::getInstance()->selectHighlightedObjects();
114 } 114 }
115 return TRUE; 115 return TRUE;
116 } 116 }
@@ -130,7 +130,7 @@ BOOL LLToolSelectRect::handleHover(S32 x, S32 y, MASK mask)
130 if (!mMouseOutsideSlop && !(mask & MASK_SHIFT) && !(mask & MASK_CONTROL)) 130 if (!mMouseOutsideSlop && !(mask & MASK_SHIFT) && !(mask & MASK_CONTROL))
131 { 131 {
132 // just started rect select, and not adding to current selection 132 // just started rect select, and not adding to current selection
133 gSelectMgr->deselectAll(); 133 LLSelectMgr::getInstance()->deselectAll();
134 } 134 }
135 mMouseOutsideSlop = TRUE; 135 mMouseOutsideSlop = TRUE;
136 mDragEndX = x; 136 mDragEndX = x;
diff --git a/linden/indra/newview/lltoolview.cpp b/linden/indra/newview/lltoolview.cpp
index ebdbcbb..13b6e2a 100644
--- a/linden/indra/newview/lltoolview.cpp
+++ b/linden/indra/newview/lltoolview.cpp
@@ -101,7 +101,7 @@ void LLToolView::addTool(const LLString& icon_off, const LLString& icon_on, LLPa
101 mButtonCount++; 101 mButtonCount++;
102 102
103 const S32 LABEL_TOP_SPACING = 0; 103 const S32 LABEL_TOP_SPACING = 0;
104 const LLFontGL* font = gResMgr->getRes( LLFONT_SANSSERIF_SMALL ); 104 const LLFontGL* font = LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF_SMALL );
105 S32 label_width = font->getWidth( label ); 105 S32 label_width = font->getWidth( label );
106 LLRect label_rect; 106 LLRect label_rect;
107 label_rect.setLeftTopAndSize( 107 label_rect.setLeftTopAndSize(
@@ -153,7 +153,7 @@ void LLToolView::draw()
153{ 153{
154 // turn off highlighting for all containers 154 // turn off highlighting for all containers
155 // and hide all option panels except for the selected one. 155 // and hide all option panels except for the selected one.
156 LLTool* selected = gToolMgr->getCurrentToolset()->getSelectedTool(); 156 LLTool* selected = LLToolMgr::getInstance()->getCurrentToolset()->getSelectedTool();
157 for (contain_list_t::iterator iter = mContainList.begin(); 157 for (contain_list_t::iterator iter = mContainList.begin();
158 iter != mContainList.end(); ++iter) 158 iter != mContainList.end(); ++iter)
159 { 159 {
@@ -194,7 +194,7 @@ void LLToolView::onClickToolButton(void* userdata)
194 LLToolContainer* clicked = (LLToolContainer*) userdata; 194 LLToolContainer* clicked = (LLToolContainer*) userdata;
195 195
196 // Switch to this one 196 // Switch to this one
197 gToolMgr->getCurrentToolset()->selectTool( clicked->mTool ); 197 LLToolMgr::getInstance()->getCurrentToolset()->selectTool( clicked->mTool );
198} 198}
199 199
200 200
diff --git a/linden/indra/newview/lltracker.cpp b/linden/indra/newview/lltracker.cpp
index c1c060c..9ff2e97 100644
--- a/linden/indra/newview/lltracker.cpp
+++ b/linden/indra/newview/lltracker.cpp
@@ -135,18 +135,14 @@ void LLTracker::drawHUDArrow()
135 break; 135 break;
136 136
137 case TRACKING_LOCATION: 137 case TRACKING_LOCATION:
138 if (!gWorldp)
139 {
140 break;
141 }
142 // HACK -- try to keep the location just above the terrain 138 // HACK -- try to keep the location just above the terrain
143#if 0 139#if 0
144 // UNHACKED by CRO - keep location where the location is 140 // UNHACKED by CRO - keep location where the location is
145 instance()->mTrackedPositionGlobal.mdV[VZ] = 141 instance()->mTrackedPositionGlobal.mdV[VZ] =
146 0.9f * instance()->mTrackedPositionGlobal.mdV[VZ] 142 0.9f * instance()->mTrackedPositionGlobal.mdV[VZ]
147 + 0.1f * (gWorldp->resolveLandHeightGlobal(getTrackedPositionGlobal()) + 1.5f); 143 + 0.1f * (LLWorld::getInstance()->resolveLandHeightGlobal(getTrackedPositionGlobal()) + 1.5f);
148#endif 144#endif
149 instance()->mTrackedPositionGlobal.mdV[VZ] = llclamp((F32)instance()->mTrackedPositionGlobal.mdV[VZ], gWorldp->resolveLandHeightGlobal(getTrackedPositionGlobal()) + 1.5f, (F32)instance()->getTrackedPositionGlobal().mdV[VZ]); 145 instance()->mTrackedPositionGlobal.mdV[VZ] = llclamp((F32)instance()->mTrackedPositionGlobal.mdV[VZ], LLWorld::getInstance()->resolveLandHeightGlobal(getTrackedPositionGlobal()) + 1.5f, (F32)instance()->getTrackedPositionGlobal().mdV[VZ]);
150 instance()->drawMarker( getTrackedPositionGlobal(), gTrackColor ); 146 instance()->drawMarker( getTrackedPositionGlobal(), gTrackColor );
151 break; 147 break;
152 148
@@ -480,14 +476,14 @@ void LLTracker::renderBeacon(LLVector3d pos_global,
480 476
481 F32 dist = (F32)to_vec.magVec(); 477 F32 dist = (F32)to_vec.magVec();
482 F32 color_frac = 1.f; 478 F32 color_frac = 1.f;
483 if (dist > 0.99f * gCamera->getFar()) 479 if (dist > 0.99f * LLViewerCamera::getInstance()->getFar())
484 { 480 {
485 color_frac = 0.4f; 481 color_frac = 0.4f;
486 // pos_global = gAgent.getCameraPositionGlobal() + 0.99f*(gCamera->getFar()/dist)*to_vec; 482 // pos_global = gAgent.getCameraPositionGlobal() + 0.99f*(LLViewerCamera::getInstance()->getFar()/dist)*to_vec;
487 } 483 }
488 else 484 else
489 { 485 {
490 color_frac = 1.f - 0.6f*(dist/gCamera->getFar()); 486 color_frac = 1.f - 0.6f*(dist/LLViewerCamera::getInstance()->getFar());
491 } 487 }
492 488
493 LLColor4 fogged_color = color_frac * color + (1 - color_frac)*gSky.getFogColor(); 489 LLColor4 fogged_color = color_frac * color + (1 - color_frac)*gSky.getFogColor();
@@ -512,9 +508,9 @@ void LLTracker::renderBeacon(LLVector3d pos_global,
512 const U32 BEACON_VERTS = 256; 508 const U32 BEACON_VERTS = 256;
513 const F32 step = 1024.0f/BEACON_VERTS; 509 const F32 step = 1024.0f/BEACON_VERTS;
514 510
515 LLVector3 x_axis = gCamera->getLeftAxis(); 511 LLVector3 x_axis = LLViewerCamera::getInstance()->getLeftAxis();
516 F32 t = gRenderStartTime.getElapsedTimeF32(); 512 F32 t = gRenderStartTime.getElapsedTimeF32();
517 F32 dr = dist/gCamera->getFar(); 513 F32 dr = dist/LLViewerCamera::getInstance()->getFar();
518 514
519 for (U32 i = 0; i < BEACON_VERTS; i++) 515 for (U32 i = 0; i < BEACON_VERTS; i++)
520 { 516 {
@@ -645,11 +641,6 @@ void LLTracker::clearFocus()
645 641
646void LLTracker::drawMarker(const LLVector3d& pos_global, const LLColor4& color) 642void LLTracker::drawMarker(const LLVector3d& pos_global, const LLColor4& color)
647{ 643{
648 if (!gCamera)
649 {
650 return;
651 }
652
653 // get position 644 // get position
654 LLVector3 pos_local = gAgent.getPosAgentFromGlobal(pos_global); 645 LLVector3 pos_local = gAgent.getPosAgentFromGlobal(pos_global);
655 646
@@ -659,8 +650,8 @@ void LLTracker::drawMarker(const LLVector3d& pos_global, const LLColor4& color)
659 S32 y = 0; 650 S32 y = 0;
660 const BOOL CLAMP = TRUE; 651 const BOOL CLAMP = TRUE;
661 652
662 if (gCamera->projectPosAgentToScreen(pos_local, screen, CLAMP) 653 if (LLViewerCamera::getInstance()->projectPosAgentToScreen(pos_local, screen, CLAMP)
663 || gCamera->projectPosAgentToScreenEdge(pos_local, screen) ) 654 || LLViewerCamera::getInstance()->projectPosAgentToScreenEdge(pos_local, screen) )
664 { 655 {
665 gHUDView->screenPointToLocal(screen.mX, screen.mY, &x, &y); 656 gHUDView->screenPointToLocal(screen.mX, screen.mY, &x, &y);
666 657
@@ -727,7 +718,7 @@ void LLTracker::drawMarker(const LLVector3d& pos_global, const LLColor4& color)
727 mHUDArrowCenterY - half_arrow_size, 718 mHUDArrowCenterY - half_arrow_size,
728 HUD_ARROW_SIZE, HUD_ARROW_SIZE, 719 HUD_ARROW_SIZE, HUD_ARROW_SIZE,
729 RAD_TO_DEG * angle, 720 RAD_TO_DEG * angle,
730 LLWorldMapView::sTrackArrowImage, 721 LLWorldMapView::sTrackArrowImage->getImage(),
731 color); 722 color);
732 } 723 }
733} 724}
diff --git a/linden/indra/newview/lluploaddialog.cpp b/linden/indra/newview/lluploaddialog.cpp
index 14128ee..edf5505 100644
--- a/linden/indra/newview/lluploaddialog.cpp
+++ b/linden/indra/newview/lluploaddialog.cpp
@@ -74,7 +74,7 @@ LLUploadDialog::LLUploadDialog( const std::string& msg)
74 } 74 }
75 LLUploadDialog::sDialog = this; 75 LLUploadDialog::sDialog = this;
76 76
77 const LLFontGL* font = gResMgr->getRes( LLFONT_SANSSERIF ); 77 const LLFontGL* font = LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF );
78 LLRect msg_rect; 78 LLRect msg_rect;
79 for (int line_num=0; line_num<16; ++line_num) 79 for (int line_num=0; line_num<16; ++line_num)
80 { 80 {
@@ -90,7 +90,7 @@ LLUploadDialog::LLUploadDialog( const std::string& msg)
90 90
91void LLUploadDialog::setMessage( const std::string& msg) 91void LLUploadDialog::setMessage( const std::string& msg)
92{ 92{
93 const LLFontGL* font = gResMgr->getRes( LLFONT_SANSSERIF ); 93 const LLFontGL* font = LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF );
94 94
95 const S32 VPAD = 16; 95 const S32 VPAD = 16;
96 const S32 HPAD = 25; 96 const S32 HPAD = 25;
diff --git a/linden/indra/newview/llurldispatcher.cpp b/linden/indra/newview/llurldispatcher.cpp
index 6c1514c..658cf39 100644
--- a/linden/indra/newview/llurldispatcher.cpp
+++ b/linden/indra/newview/llurldispatcher.cpp
@@ -89,6 +89,11 @@ private:
89 89
90 static void regionHandleCallback(U64 handle, const std::string& url, 90 static void regionHandleCallback(U64 handle, const std::string& url,
91 const LLUUID& snapshot_id, bool teleport); 91 const LLUUID& snapshot_id, bool teleport);
92 // Called by LLWorldMap when a location has been resolved to a
93 // region name
94
95 static void regionNameCallback(U64 handle, const std::string& url,
96 const LLUUID& snapshot_id, bool teleport);
92 // Called by LLWorldMap when a region name has been resolved to a 97 // Called by LLWorldMap when a region name has been resolved to a
93 // location in-world, used by places-panel display. 98 // location in-world, used by places-panel display.
94 99
@@ -219,15 +224,15 @@ bool LLURLDispatcherImpl::dispatchRegion(const std::string& url, BOOL right_mous
219 url_displayp->setName(region_name); 224 url_displayp->setName(region_name);
220 225
221 // Request a region handle by name 226 // Request a region handle by name
222 gWorldMap->sendNamedRegionRequest(region_name, 227 LLWorldMap::getInstance()->sendNamedRegionRequest(region_name,
223 LLURLDispatcherImpl::regionHandleCallback, 228 LLURLDispatcherImpl::regionNameCallback,
224 url, 229 url,
225 false); // don't teleport 230 false); // don't teleport
226 return true; 231 return true;
227} 232}
228 233
229/*static*/ 234/*static*/
230void LLURLDispatcherImpl::regionHandleCallback(U64 region_handle, const std::string& url, const LLUUID& snapshot_id, bool teleport) 235void LLURLDispatcherImpl::regionNameCallback(U64 region_handle, const std::string& url, const LLUUID& snapshot_id, bool teleport)
231{ 236{
232 std::string sim_string = stripProtocol(url); 237 std::string sim_string = stripProtocol(url);
233 std::string region_name; 238 std::string region_name;
@@ -241,6 +246,54 @@ void LLURLDispatcherImpl::regionHandleCallback(U64 region_handle, const std::str
241 local_pos.mV[VY] = (F32)y; 246 local_pos.mV[VY] = (F32)y;
242 local_pos.mV[VZ] = (F32)z; 247 local_pos.mV[VZ] = (F32)z;
243 248
249
250 // determine whether the point is in this region
251 if ((x >= 0) && (x < REGION_WIDTH_UNITS) &&
252 (y >= 0) && (y < REGION_WIDTH_UNITS))
253 {
254 // if so, we're done
255 regionHandleCallback(region_handle, url, snapshot_id, teleport);
256 }
257
258 else
259 {
260 // otherwise find the new region from the location
261
262 // add the position to get the new region
263 LLVector3d global_pos = from_region_handle(region_handle) + LLVector3d(local_pos);
264
265 U64 new_region_handle = to_region_handle(global_pos);
266 LLWorldMap::getInstance()->sendHandleRegionRequest(new_region_handle,
267 LLURLDispatcherImpl::regionHandleCallback,
268 url, teleport);
269 }
270}
271
272/* static */
273void LLURLDispatcherImpl::regionHandleCallback(U64 region_handle, const std::string& url, const LLUUID& snapshot_id, bool teleport)
274{
275 std::string sim_string = stripProtocol(url);
276 std::string region_name;
277 S32 x = 128;
278 S32 y = 128;
279 S32 z = 0;
280 LLURLSimString::parse(sim_string, &region_name, &x, &y, &z);
281
282 // remap x and y to local coordinates
283 S32 local_x = x % REGION_WIDTH_UNITS;
284 S32 local_y = y % REGION_WIDTH_UNITS;
285 if (local_x < 0)
286 local_x += REGION_WIDTH_UNITS;
287 if (local_y < 0)
288 local_y += REGION_WIDTH_UNITS;
289
290 LLVector3 local_pos;
291 local_pos.mV[VX] = (F32)local_x;
292 local_pos.mV[VY] = (F32)local_y;
293 local_pos.mV[VZ] = (F32)z;
294
295
296
244 if (teleport) 297 if (teleport)
245 { 298 {
246 LLVector3d global_pos = from_region_handle(region_handle); 299 LLVector3d global_pos = from_region_handle(region_handle);
@@ -322,7 +375,7 @@ public:
322 { 375 {
323 url += tokens[i].asString() + "/"; 376 url += tokens[i].asString() + "/";
324 } 377 }
325 gWorldMap->sendNamedRegionRequest(region_name, 378 LLWorldMap::getInstance()->sendNamedRegionRequest(region_name,
326 LLURLDispatcherImpl::regionHandleCallback, 379 LLURLDispatcherImpl::regionHandleCallback,
327 url, 380 url,
328 true); // teleport 381 true); // teleport
diff --git a/linden/indra/newview/llurlsimstring.cpp b/linden/indra/newview/llurlsimstring.cpp
index 931cf7b..07669db 100644
--- a/linden/indra/newview/llurlsimstring.cpp
+++ b/linden/indra/newview/llurlsimstring.cpp
@@ -73,7 +73,7 @@ void LLURLSimString::setString(const LLString& sim_string)
73 73
74// "/100" -> 100 74// "/100" -> 100
75// static 75// static
76S32 LLURLSimString::parseGridIdx(const LLString& in_string, S32 idx0, S32* res, S32 max) 76S32 LLURLSimString::parseGridIdx(const LLString& in_string, S32 idx0, S32* res)
77{ 77{
78 if (idx0 == LLString::npos || in_string[idx0] != '/') 78 if (idx0 == LLString::npos || in_string[idx0] != '/')
79 { 79 {
@@ -86,7 +86,7 @@ S32 LLURLSimString::parseGridIdx(const LLString& in_string, S32 idx0, S32* res,
86 if (!tstring.empty()) 86 if (!tstring.empty())
87 { 87 {
88 S32 val = atoi(tstring.c_str()); 88 S32 val = atoi(tstring.c_str());
89 *res = llclamp(val,0,max); 89 *res = val;
90 } 90 }
91 return idx1; 91 return idx1;
92} 92}
@@ -132,9 +132,9 @@ bool LLURLSimString::parse(const LLString& sim_string, std::string *region_name,
132 { 132 {
133 if (idx1 != std::string::npos) 133 if (idx1 != std::string::npos)
134 { 134 {
135 idx1 = parseGridIdx(sim_string, idx1, x, 255); 135 idx1 = parseGridIdx(sim_string, idx1, x);
136 idx1 = parseGridIdx(sim_string, idx1, y, 255); 136 idx1 = parseGridIdx(sim_string, idx1, y);
137 idx1 = parseGridIdx(sim_string, idx1, z, 1000); 137 idx1 = parseGridIdx(sim_string, idx1, z);
138 } 138 }
139 return true; 139 return true;
140 } 140 }
diff --git a/linden/indra/newview/llurlsimstring.h b/linden/indra/newview/llurlsimstring.h
index 4d3c1ec..420030f 100644
--- a/linden/indra/newview/llurlsimstring.h
+++ b/linden/indra/newview/llurlsimstring.h
@@ -64,7 +64,7 @@ public:
64 LLURLSimString() : mX(128), mY(128), mZ(0), mParseState(NOT_PARSED) {} 64 LLURLSimString() : mX(128), mY(128), mZ(0), mParseState(NOT_PARSED) {}
65 65
66private: 66private:
67 static S32 parseGridIdx(const LLString& in_string, S32 idx0, S32* res, S32 max); 67 static S32 parseGridIdx(const LLString& in_string, S32 idx0, S32* res);
68 68
69public: 69public:
70 static LLURLSimString sInstance; 70 static LLURLSimString sInstance;
diff --git a/linden/indra/newview/lluserauth.cpp b/linden/indra/newview/lluserauth.cpp
index 44df12c..9e040d2 100644
--- a/linden/indra/newview/lluserauth.cpp
+++ b/linden/indra/newview/lluserauth.cpp
@@ -66,8 +66,6 @@ static const char* PLATFORM_STRING = "Sol";
66#error("Unknown platform defined!") 66#error("Unknown platform defined!")
67#endif 67#endif
68 68
69LLUserAuth *gUserAuthp = NULL;
70
71 69
72LLUserAuth::LLUserAuth() : 70LLUserAuth::LLUserAuth() :
73 mTransaction(NULL), 71 mTransaction(NULL),
@@ -78,8 +76,15 @@ LLUserAuth::LLUserAuth() :
78 76
79LLUserAuth::~LLUserAuth() 77LLUserAuth::~LLUserAuth()
80{ 78{
79 reset();
80}
81
82void LLUserAuth::reset()
83{
81 delete mTransaction; 84 delete mTransaction;
82 mTransaction = NULL; 85 mTransaction = NULL;
86 mResponses.clear();
87 mOptions.clear();
83} 88}
84 89
85 90
@@ -93,7 +98,6 @@ void LLUserAuth::authenticate(
93 BOOL skip_optional, 98 BOOL skip_optional,
94 BOOL accept_tos, 99 BOOL accept_tos,
95 BOOL accept_critical_message, 100 BOOL accept_critical_message,
96 const LLUUID& viewer_digest,
97 BOOL last_exec_froze, 101 BOOL last_exec_froze,
98 const std::vector<const char*>& requested_options, 102 const std::vector<const char*>& requested_options,
99 const std::string& hashed_mac, 103 const std::string& hashed_mac,
@@ -123,7 +127,7 @@ void LLUserAuth::authenticate(
123 XMLRPC_VectorAppendString(params, "web_login_key", web_login_key.getString().c_str(), 0); 127 XMLRPC_VectorAppendString(params, "web_login_key", web_login_key.getString().c_str(), 0);
124 XMLRPC_VectorAppendString(params, "start", start, 0); 128 XMLRPC_VectorAppendString(params, "start", start, 0);
125 XMLRPC_VectorAppendString(params, "version", gCurrentVersion.c_str(), 0); // Includes channel name 129 XMLRPC_VectorAppendString(params, "version", gCurrentVersion.c_str(), 0); // Includes channel name
126 XMLRPC_VectorAppendString(params, "channel", gChannelName.c_str(), 0); 130 XMLRPC_VectorAppendString(params, "channel", gSavedSettings.getString("VersionChannelName").c_str(), 0);
127 XMLRPC_VectorAppendString(params, "platform", PLATFORM_STRING, 0); 131 XMLRPC_VectorAppendString(params, "platform", PLATFORM_STRING, 0);
128 XMLRPC_VectorAppendString(params, "mac", hashed_mac.c_str(), 0); 132 XMLRPC_VectorAppendString(params, "mac", hashed_mac.c_str(), 0);
129 // A bit of security through obscurity: id0 is volume_serial 133 // A bit of security through obscurity: id0 is volume_serial
@@ -140,7 +144,6 @@ void LLUserAuth::authenticate(
140 { 144 {
141 XMLRPC_VectorAppendString(params, "read_critical", "true", 0); 145 XMLRPC_VectorAppendString(params, "read_critical", "true", 0);
142 } 146 }
143 XMLRPC_VectorAppendString(params, "viewer_digest", viewer_digest.asString().c_str(), 0);
144 XMLRPC_VectorAppendInt(params, "last_exec_event", (int) last_exec_froze); 147 XMLRPC_VectorAppendInt(params, "last_exec_event", (int) last_exec_froze);
145 148
146 // append optional requests in an array 149 // append optional requests in an array
@@ -178,7 +181,6 @@ void LLUserAuth::authenticate(
178 BOOL skip_optional, 181 BOOL skip_optional,
179 BOOL accept_tos, 182 BOOL accept_tos,
180 BOOL accept_critical_message, 183 BOOL accept_critical_message,
181 const LLUUID& viewer_digest,
182 BOOL last_exec_froze, 184 BOOL last_exec_froze,
183 const std::vector<const char*>& requested_options, 185 const std::vector<const char*>& requested_options,
184 const std::string& hashed_mac, 186 const std::string& hashed_mac,
@@ -210,7 +212,7 @@ void LLUserAuth::authenticate(
210 XMLRPC_VectorAppendString(params, "passwd", dpasswd.c_str(), 0); 212 XMLRPC_VectorAppendString(params, "passwd", dpasswd.c_str(), 0);
211 XMLRPC_VectorAppendString(params, "start", start, 0); 213 XMLRPC_VectorAppendString(params, "start", start, 0);
212 XMLRPC_VectorAppendString(params, "version", gCurrentVersion.c_str(), 0); // Includes channel name 214 XMLRPC_VectorAppendString(params, "version", gCurrentVersion.c_str(), 0); // Includes channel name
213 XMLRPC_VectorAppendString(params, "channel", gChannelName.c_str(), 0); 215 XMLRPC_VectorAppendString(params, "channel", gSavedSettings.getString("VersionChannelName").c_str(), 0);
214 XMLRPC_VectorAppendString(params, "platform", PLATFORM_STRING, 0); 216 XMLRPC_VectorAppendString(params, "platform", PLATFORM_STRING, 0);
215 XMLRPC_VectorAppendString(params, "mac", hashed_mac.c_str(), 0); 217 XMLRPC_VectorAppendString(params, "mac", hashed_mac.c_str(), 0);
216 // A bit of security through obscurity: id0 is volume_serial 218 // A bit of security through obscurity: id0 is volume_serial
@@ -227,7 +229,6 @@ void LLUserAuth::authenticate(
227 { 229 {
228 XMLRPC_VectorAppendString(params, "read_critical", "true", 0); 230 XMLRPC_VectorAppendString(params, "read_critical", "true", 0);
229 } 231 }
230 XMLRPC_VectorAppendString(params, "viewer_digest", viewer_digest.asString().c_str(), 0);
231 XMLRPC_VectorAppendInt(params, "last_exec_event", (int) last_exec_froze); 232 XMLRPC_VectorAppendInt(params, "last_exec_event", (int) last_exec_froze);
232 233
233 // append optional requests in an array 234 // append optional requests in an array
@@ -432,3 +433,4 @@ BOOL LLUserAuth::getOptions(const char* name, options_t& options) const
432} 433}
433 434
434 435
436
diff --git a/linden/indra/newview/lluserauth.h b/linden/indra/newview/lluserauth.h
index 869b235..b59c3f3 100644
--- a/linden/indra/newview/lluserauth.h
+++ b/linden/indra/newview/lluserauth.h
@@ -70,7 +70,7 @@ class LLXMLRPCTransaction;
70// session-id = auth key 70// session-id = auth key
71//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 71//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
72 72
73class LLUserAuth 73class LLUserAuth : public LLSingleton<LLUserAuth>
74{ 74{
75public: 75public:
76 LLUserAuth(); 76 LLUserAuth();
@@ -104,7 +104,6 @@ public:
104 BOOL skip_optional_update, 104 BOOL skip_optional_update,
105 BOOL accept_tos, 105 BOOL accept_tos,
106 BOOL accept_critical_message, 106 BOOL accept_critical_message,
107 const LLUUID& viewer_digest,
108 BOOL last_exec_froze, 107 BOOL last_exec_froze,
109 const std::vector<const char*>& requested_options, 108 const std::vector<const char*>& requested_options,
110 const std::string& hashed_mac, 109 const std::string& hashed_mac,
@@ -121,13 +120,15 @@ public:
121 BOOL skip_optional_update, 120 BOOL skip_optional_update,
122 BOOL accept_tos, 121 BOOL accept_tos,
123 BOOL accept_critical_message, 122 BOOL accept_critical_message,
124 const LLUUID& viewer_digest,
125 BOOL last_exec_froze, 123 BOOL last_exec_froze,
126 const std::vector<const char*>& requested_options, 124 const std::vector<const char*>& requested_options,
127 const std::string& hashed_mac, 125 const std::string& hashed_mac,
128 const std::string& hashed_volume_serial); 126 const std::string& hashed_volume_serial);
129 127
130 UserAuthcode authResponse(); 128 UserAuthcode authResponse();
129
130 // clears out internal data cache.
131 void reset();
131 132
132 std::string errorMessage() const { return mErrorMessage; } 133 std::string errorMessage() const { return mErrorMessage; }
133 134
@@ -154,6 +155,4 @@ private:
154 F64 mLastTransferRateBPS; // bits per second, only valid after a big transfer like inventory 155 F64 mLastTransferRateBPS; // bits per second, only valid after a big transfer like inventory
155}; 156};
156 157
157extern LLUserAuth *gUserAuthp;
158
159#endif /* LLUSERAUTH_H */ 158#endif /* LLUSERAUTH_H */
diff --git a/linden/indra/newview/llvectorperfoptions.cpp b/linden/indra/newview/llvectorperfoptions.cpp
index b228ed5..bb2ef99 100644
--- a/linden/indra/newview/llvectorperfoptions.cpp
+++ b/linden/indra/newview/llvectorperfoptions.cpp
@@ -31,101 +31,4 @@
31 31
32#include "llviewerprecompiledheaders.h" 32#include "llviewerprecompiledheaders.h"
33 33
34#include "llvectorperfoptions.h" 34// Deprecated - moved into llviewerjointmesh
35#include "llviewerjointmesh.h"
36#include "llviewercontrol.h"
37
38// Initially, we test the performance of the vectorization code, then
39// turn it off if it ends up being slower. JC
40BOOL gVectorizePerfTest = TRUE;
41BOOL gVectorizeEnable = FALSE;
42U32 gVectorizeProcessor = 0;
43BOOL gVectorizeSkin = FALSE;
44
45void update_vector_performances(void)
46{
47 char *vp;
48
49 switch(gVectorizeProcessor)
50 {
51 case 2: vp = "SSE2"; break; // *TODO: replace the magic #s
52 case 1: vp = "SSE"; break;
53 default: vp = "COMPILER DEFAULT"; break;
54 }
55 llinfos << "Vectorization : " << ( gVectorizeEnable ? "ENABLED" : "DISABLED" ) << llendl ;
56 llinfos << "Vector Processor : " << vp << llendl ;
57 llinfos << "Vectorized Skinning : " << ( gVectorizeSkin ? "ENABLED" : "DISABLED" ) << llendl ;
58
59 if(gVectorizeEnable && gVectorizeSkin)
60 {
61 switch(gVectorizeProcessor)
62 {
63 case 2:
64 LLViewerJointMesh::sUpdateGeometryFunc = &LLViewerJointMesh::updateGeometrySSE2;
65 break;
66 case 1:
67 LLViewerJointMesh::sUpdateGeometryFunc = &LLViewerJointMesh::updateGeometrySSE;
68 break;
69 default:
70 LLViewerJointMesh::sUpdateGeometryFunc = &LLViewerJointMesh::updateGeometryVectorized;
71 break;
72 }
73 }
74 else
75 {
76 LLViewerJointMesh::sUpdateGeometryFunc = &LLViewerJointMesh::updateGeometryOriginal;
77 }
78}
79
80
81class LLVectorizationEnableListener: public LLSimpleListener
82{
83 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
84 {
85 gVectorizeEnable = event->getValue().asBoolean();
86 update_vector_performances();
87 return true;
88 }
89};
90static LLVectorizationEnableListener vectorization_enable_listener;
91
92class LLVectorizeSkinListener: public LLSimpleListener
93{
94 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
95 {
96 gVectorizeSkin = event->getValue().asBoolean();
97 update_vector_performances();
98 return true;
99 }
100};
101static LLVectorizeSkinListener vectorize_skin_listener;
102
103class LLVectorProcessorListener: public LLSimpleListener
104{
105 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
106 {
107 gVectorizeProcessor = event->getValue().asInteger();
108 update_vector_performances();
109 return true;
110 }
111};
112static LLVectorProcessorListener vector_processor_listener;
113
114void LLVectorPerformanceOptions::initClass()
115{
116 gVectorizePerfTest = gSavedSettings.getBOOL("VectorizePerfTest");
117 gVectorizeEnable = gSavedSettings.getBOOL("VectorizeEnable");
118 gVectorizeProcessor = gSavedSettings.getU32("VectorizeProcessor");
119 gVectorizeSkin = gSavedSettings.getBOOL("VectorizeSkin");
120 update_vector_performances();
121
122 // these are currently static in this file, so they can't move to settings_setup_listeners
123 gSavedSettings.getControl("VectorizeEnable")->addListener(&vectorization_enable_listener);
124 gSavedSettings.getControl("VectorizeProcessor")->addListener(&vector_processor_listener);
125 gSavedSettings.getControl("VectorizeSkin")->addListener(&vectorize_skin_listener);
126}
127
128void LLVectorPerformanceOptions::cleanupClass()
129{
130}
131
diff --git a/linden/indra/newview/llvectorperfoptions.h b/linden/indra/newview/llvectorperfoptions.h
index da168ef..623cca6 100644
--- a/linden/indra/newview/llvectorperfoptions.h
+++ b/linden/indra/newview/llvectorperfoptions.h
@@ -32,10 +32,6 @@
32#ifndef LL_VECTORPERFOPTIONS_H 32#ifndef LL_VECTORPERFOPTIONS_H
33#define LL_VECTORPERFOPTIONS_H 33#define LL_VECTORPERFOPTIONS_H
34 34
35namespace LLVectorPerformanceOptions 35// Deprecated - moved into llviewerjointmesh
36{
37 void initClass(); // Run after configuration files are read.
38 void cleanupClass();
39};
40 36
41#endif 37#endif
diff --git a/linden/indra/newview/llvelocitybar.cpp b/linden/indra/newview/llvelocitybar.cpp
index 5073aea..169ecac 100644
--- a/linden/indra/newview/llvelocitybar.cpp
+++ b/linden/indra/newview/llvelocitybar.cpp
@@ -39,16 +39,6 @@
39 39
40#include "llvelocitybar.h" 40#include "llvelocitybar.h"
41 41
42EWidgetType LLVelocityBar::getWidgetType() const
43{
44 return WIDGET_TYPE_VELOCITY_BAR;
45}
46
47LLString LLVelocityBar::getWidgetTag() const
48{
49 return LL_VELOCITY_BAR_TAG;
50}
51
52const char tab = '\t'; 42const char tab = '\t';
53 43
54void LLVelocityBar::draw() 44void LLVelocityBar::draw()
@@ -61,11 +51,6 @@ void LLVelocityBar::draw()
61 51
62 S32 left, top, right, bottom; 52 S32 left, top, right, bottom;
63 53
64 if (!getVisible())
65 {
66 return;
67 }
68
69// const F32 MS_TO_SECONDS = 0.001f; 54// const F32 MS_TO_SECONDS = 0.001f;
70// const S32 WIDTH_IN_MS = 66; 55// const S32 WIDTH_IN_MS = 66;
71// const F32 WIDGET_TIME_FOR_WIDTH = WIDTH_IN_MS * MS_TO_SECONDS; 56// const F32 WIDGET_TIME_FOR_WIDTH = WIDTH_IN_MS * MS_TO_SECONDS;
diff --git a/linden/indra/newview/llvelocitybar.h b/linden/indra/newview/llvelocitybar.h
index ab73d51..667ae1c 100644
--- a/linden/indra/newview/llvelocitybar.h
+++ b/linden/indra/newview/llvelocitybar.h
@@ -47,9 +47,6 @@ public:
47 setVisible(FALSE); 47 setVisible(FALSE);
48 }; 48 };
49 49
50 virtual EWidgetType getWidgetType() const;
51 virtual LLString getWidgetTag() const;
52
53 virtual void draw(); 50 virtual void draw();
54}; 51};
55 52
diff --git a/linden/indra/newview/llviewchildren.cpp b/linden/indra/newview/llviewchildren.cpp
index 5f579f9..b19a336 100644
--- a/linden/indra/newview/llviewchildren.cpp
+++ b/linden/indra/newview/llviewchildren.cpp
@@ -65,7 +65,7 @@ void LLViewChildren::enable(const char* id, bool enabled)
65void LLViewChildren::setText( 65void LLViewChildren::setText(
66 const char* id, const std::string& text, bool visible) 66 const char* id, const std::string& text, bool visible)
67{ 67{
68 LLTextBox* child = LLUICtrlFactory::getTextBoxByName(&mParent, id); 68 LLTextBox* child = mParent.getChild<LLTextBox>(id);
69 if (child) 69 if (child)
70 { 70 {
71 child->setVisible(visible); 71 child->setVisible(visible);
@@ -76,7 +76,7 @@ void LLViewChildren::setText(
76void LLViewChildren::setWrappedText( 76void LLViewChildren::setWrappedText(
77 const char* id, const std::string& text, bool visible) 77 const char* id, const std::string& text, bool visible)
78{ 78{
79 LLTextBox* child = LLUICtrlFactory::getTextBoxByName(&mParent, id); 79 LLTextBox* child = mParent.getChild<LLTextBox>(id);
80 if (child) 80 if (child)
81 { 81 {
82 child->setVisible(visible); 82 child->setVisible(visible);
@@ -86,33 +86,25 @@ void LLViewChildren::setWrappedText(
86 86
87void LLViewChildren::setBadge(const char* id, Badge badge, bool visible) 87void LLViewChildren::setBadge(const char* id, Badge badge, bool visible)
88{ 88{
89 static LLUUID badgeOK(gViewerArt.getString("badge_ok.tga")); 89 LLIconCtrl* child = mParent.getChild<LLIconCtrl>(id);
90 static LLUUID badgeNote(gViewerArt.getString("badge_note.tga"));
91 static LLUUID badgeWarn(gViewerArt.getString("badge_warn.tga"));
92 static LLUUID badgeError(gViewerArt.getString("badge_error.tga"));
93
94 LLUUID badgeUUID;
95 switch (badge)
96 {
97 default:
98 case BADGE_OK: badgeUUID = badgeOK; break;
99 case BADGE_NOTE: badgeUUID = badgeNote; break;
100 case BADGE_WARN: badgeUUID = badgeWarn; break;
101 case BADGE_ERROR: badgeUUID = badgeError; break;
102 }
103
104 LLIconCtrl* child = LLUICtrlFactory::getIconByName(&mParent, id);
105 if (child) 90 if (child)
106 { 91 {
107 child->setVisible(visible); 92 child->setVisible(visible);
108 child->setImage(badgeUUID); 93 switch (badge)
94 {
95 default:
96 case BADGE_OK: child->setImage("badge_ok.j2c"); break;
97 case BADGE_NOTE: child->setImage("badge_note.j2c"); break;
98 case BADGE_WARN: child->setImage("badge_warn.j2c"); break;
99 case BADGE_ERROR: child->setImage("badge_error.j2c"); break;
100 }
109 } 101 }
110} 102}
111 103
112void LLViewChildren::setAction(const char* id, 104void LLViewChildren::setAction(const char* id,
113 void(*function)(void*), void* value) 105 void(*function)(void*), void* value)
114{ 106{
115 LLButton* button = LLUICtrlFactory::getButtonByName(&mParent, id); 107 LLButton* button = mParent.getChild<LLButton>(id);
116 if (button) 108 if (button)
117 { 109 {
118 button->setClickedCallback(function, value); 110 button->setClickedCallback(function, value);
diff --git a/linden/indra/newview/llvieweraudio.cpp b/linden/indra/newview/llvieweraudio.cpp
index 499673f..122a0bc 100644
--- a/linden/indra/newview/llvieweraudio.cpp
+++ b/linden/indra/newview/llvieweraudio.cpp
@@ -32,7 +32,6 @@
32#include "llviewerprecompiledheaders.h" 32#include "llviewerprecompiledheaders.h"
33 33
34#include "audioengine.h" 34#include "audioengine.h"
35#include "audiosettings.h"
36#include "llagent.h" 35#include "llagent.h"
37#include "llappviewer.h" 36#include "llappviewer.h"
38#include "llvieweraudio.h" 37#include "llvieweraudio.h"
@@ -57,15 +56,15 @@ void init_audio()
57 lpos_global_f.setVec(lpos_global); 56 lpos_global_f.setVec(lpos_global);
58 57
59 gAudiop->setListener(lpos_global_f, 58 gAudiop->setListener(lpos_global_f,
60 LLVector3::zero, // gCamera->getVelocity(), // !!! BUG need to replace this with smoothed velocity! 59 LLVector3::zero, // LLViewerCamera::getInstance()->getVelocity(), // !!! BUG need to replace this with smoothed velocity!
61 gCamera->getUpAxis(), 60 LLViewerCamera::getInstance()->getUpAxis(),
62 gCamera->getAtAxis()); 61 LLViewerCamera::getInstance()->getAtAxis());
63 62
64// load up our initial set of sounds we'll want so they're in memory and ready to be played 63// load up our initial set of sounds we'll want so they're in memory and ready to be played
65 64
66 BOOL mute_audio = gSavedSettings.getBOOL("MuteAudio"); 65 BOOL mute_audio = gSavedSettings.getBOOL("MuteAudio");
67 66
68 if (!mute_audio && gPreloadSounds) 67 if (!mute_audio && FALSE == gSavedSettings.getBOOL("NoPreload"))
69 { 68 {
70 gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndAlert"))); 69 gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndAlert")));
71 gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndBadKeystroke"))); 70 gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndBadKeystroke")));
@@ -188,11 +187,11 @@ void audio_update_listener()
188 lpos_global_f.setVec(lpos_global); 187 lpos_global_f.setVec(lpos_global);
189 188
190 gAudiop->setListener(lpos_global_f, 189 gAudiop->setListener(lpos_global_f,
191 // gCameraVelocitySmoothed, 190 // LLViewerCamera::getInstance()VelocitySmoothed,
192 // LLVector3::zero, 191 // LLVector3::zero,
193 gAgent.getVelocity(), // !!! *TODO: need to replace this with smoothed velocity! 192 gAgent.getVelocity(), // !!! *TODO: need to replace this with smoothed velocity!
194 gCamera->getUpAxis(), 193 LLViewerCamera::getInstance()->getUpAxis(),
195 gCamera->getAtAxis()); 194 LLViewerCamera::getInstance()->getAtAxis());
196 } 195 }
197} 196}
198 197
diff --git a/linden/indra/newview/llvieweraudio.h b/linden/indra/newview/llvieweraudio.h
index 9b81058..6ab7c7f 100644
--- a/linden/indra/newview/llvieweraudio.h
+++ b/linden/indra/newview/llvieweraudio.h
@@ -32,6 +32,12 @@
32#ifndef LL_VIEWERAUDIO_H 32#ifndef LL_VIEWERAUDIO_H
33#define LL_VIEWERAUDIO_H 33#define LL_VIEWERAUDIO_H
34 34
35// comment out to turn off wind
36#define kAUDIO_ENABLE_WIND
37//#define kAUDIO_ENABLE_WATER 1 // comment out to turn off water
38#define kAUDIO_NUM_BUFFERS 30
39#define kAUDIO_NUM_SOURCES 30
40
35void init_audio(); 41void init_audio();
36void audio_update_volume(bool force_update = true); 42void audio_update_volume(bool force_update = true);
37void audio_update_listener(); 43void audio_update_listener();
diff --git a/linden/indra/newview/llviewercamera.cpp b/linden/indra/newview/llviewercamera.cpp
index 7c4271a..07e3109 100644
--- a/linden/indra/newview/llviewercamera.cpp
+++ b/linden/indra/newview/llviewercamera.cpp
@@ -47,12 +47,12 @@
47#include "llviewerwindow.h" 47#include "llviewerwindow.h"
48#include "llvovolume.h" 48#include "llvovolume.h"
49#include "llworld.h" 49#include "llworld.h"
50#include "lltoolmgr.h"
51#include "llviewerjoystick.h"
50 52
51GLfloat gGLZFar; 53GLfloat gGLZFar;
52GLfloat gGLZNear; 54GLfloat gGLZNear;
53 55
54LLViewerCamera *gCamera = NULL;
55
56//glu pick matrix implementation borrowed from Mesa3D 56//glu pick matrix implementation borrowed from Mesa3D
57glh::matrix4f gl_pick_matrix(GLfloat x, GLfloat y, GLfloat width, GLfloat height, GLint* viewport) 57glh::matrix4f gl_pick_matrix(GLfloat x, GLfloat y, GLfloat width, GLfloat height, GLint* viewport)
58{ 58{
@@ -99,6 +99,13 @@ void LLViewerCamera::updateCameraLocation(const LLVector3 &center,
99 const LLVector3 &up_direction, 99 const LLVector3 &up_direction,
100 const LLVector3 &point_of_interest) 100 const LLVector3 &point_of_interest)
101{ 101{
102 // do not update if we are in build mode AND avatar didn't move
103 if (LLToolMgr::getInstance()->inBuildMode()
104 && !LLViewerJoystick::getInstance()->getCameraNeedsUpdate())
105 {
106 return;
107 }
108
102 LLVector3 last_position; 109 LLVector3 last_position;
103 LLVector3 last_axis; 110 LLVector3 last_axis;
104 last_position = getOrigin(); 111 last_position = getOrigin();
@@ -170,7 +177,7 @@ void LLViewerCamera::calcProjection(const F32 far_distance) const
170 177
171 f = 1/tan(fov_y*0.5f); 178 f = 1/tan(fov_y*0.5f);
172 179
173 mProjectionMatrix.zero(); 180 mProjectionMatrix.setZero();
174 mProjectionMatrix.mMatrix[0][0] = f/aspect; 181 mProjectionMatrix.mMatrix[0][0] = f/aspect;
175 mProjectionMatrix.mMatrix[1][1] = f; 182 mProjectionMatrix.mMatrix[1][1] = f;
176 mProjectionMatrix.mMatrix[2][2] = (z_far + z_near)/(z_near - z_far); 183 mProjectionMatrix.mMatrix[2][2] = (z_far + z_near)/(z_near - z_far);
diff --git a/linden/indra/newview/llviewercamera.h b/linden/indra/newview/llviewercamera.h
index df89c19..1f61ca9 100644
--- a/linden/indra/newview/llviewercamera.h
+++ b/linden/indra/newview/llviewercamera.h
@@ -50,7 +50,7 @@ const F32 OGL_TO_CFR_ROTATION[16] = { 0.f, 0.f, -1.f, 0.f, // -Z becomes X
50const BOOL FOR_SELECTION = TRUE; 50const BOOL FOR_SELECTION = TRUE;
51const BOOL NOT_FOR_SELECTION = FALSE; 51const BOOL NOT_FOR_SELECTION = FALSE;
52 52
53class LLViewerCamera : public LLCamera 53class LLViewerCamera : public LLCamera, public LLSingleton<LLViewerCamera>
54{ 54{
55public: 55public:
56 LLViewerCamera(); 56 LLViewerCamera();
@@ -111,7 +111,6 @@ protected:
111public: 111public:
112}; 112};
113 113
114extern LLViewerCamera *gCamera;
115extern F64 gGLModelView[16]; 114extern F64 gGLModelView[16];
116extern F64 gGLLastModelView[16]; 115extern F64 gGLLastModelView[16];
117extern F64 gGLProjection[16]; 116extern F64 gGLProjection[16];
diff --git a/linden/indra/newview/llviewercontrol.cpp b/linden/indra/newview/llviewercontrol.cpp
index 3a82c05..203f9c7 100644
--- a/linden/indra/newview/llviewercontrol.cpp
+++ b/linden/indra/newview/llviewercontrol.cpp
@@ -36,490 +36,524 @@
36 36
37#include "indra_constants.h" 37#include "indra_constants.h"
38 38
39#include "v3math.h" 39// For Listeners
40#include "v3dmath.h" 40#include "audioengine.h"
41#include "llrect.h" 41#include "llagent.h"
42#include "v4color.h" 42#include "llconsole.h"
43#include "v4coloru.h" 43#include "lldrawpoolterrain.h"
44#include "v3color.h" 44#include "llflexibleobject.h"
45 45#include "llfeaturemanager.h"
46#include "llfloater.h" 46#include "llglslshader.h"
47#include "llvieweruictrlfactory.h" 47#include "llnetmap.h"
48#include "llfirstuse.h" 48#include "llpanelgeneral.h"
49#include "llcombobox.h" 49#include "llpanelinput.h"
50#include "llspinctrl.h" 50#include "llsky.h"
51#include "llcolorswatch.h" 51#include "llvieweraudio.h"
52#include "llviewerimagelist.h"
53#include "llviewerthrottle.h"
54#include "llviewerwindow.h"
55#include "llvoavatar.h"
56#include "llvoiceclient.h"
57#include "llvosky.h"
58#include "llvotree.h"
59#include "llvovolume.h"
60#include "llworld.h"
61#include "pipeline.h"
62#include "llviewerjoystick.h"
63#include "llviewerparcelmgr.h"
64#include "llparcel.h"
65#include "llnotify.h"
66#include "llkeyboard.h"
67#include "llerrorcontrol.h"
68#include "llversionviewer.h"
69#include "llappviewer.h"
70#include "llvosurfacepatch.h"
71#include "llvowlsky.h"
72#include "llglimmediate.h"
52 73
53#ifdef TOGGLE_HACKED_GODLIKE_VIEWER 74#ifdef TOGGLE_HACKED_GODLIKE_VIEWER
54BOOL gHackGodmode = FALSE; 75BOOL gHackGodmode = FALSE;
55#endif 76#endif
56 77
57LLFloaterSettingsDebug* LLFloaterSettingsDebug::sInstance = NULL;
58 78
79std::map<LLString, LLControlGroup*> gSettings;
59LLControlGroup gSavedSettings; // saved at end of session 80LLControlGroup gSavedSettings; // saved at end of session
60LLControlGroup gSavedPerAccountSettings; // saved at end of session 81LLControlGroup gSavedPerAccountSettings; // saved at end of session
61LLControlGroup gViewerArt; // read-only
62LLControlGroup gColors; // read-only 82LLControlGroup gColors; // read-only
63LLControlGroup gCrashSettings; // saved at end of session 83LLControlGroup gCrashSettings; // saved at end of session
64 84
65LLString gLastRunVersion; 85LLString gLastRunVersion;
66LLString gCurrentVersion; 86LLString gCurrentVersion;
67 87
68LLString gSettingsFileName; 88extern BOOL gResizeScreenTexture;
69LLString gPerAccountSettingsFileName;
70 89
71LLFloaterSettingsDebug::LLFloaterSettingsDebug() : LLFloater("Configuration Editor") 90////////////////////////////////////////////////////////////////////////////
91// Listeners
92
93static bool handleRenderAvatarMouselookChanged(const LLSD& newvalue)
94{
95 LLVOAvatar::sVisibleInFirstPerson = newvalue.asBoolean();
96 return true;
97}
98
99static bool handleRenderFarClipChanged(const LLSD& newvalue)
72{ 100{
101 F32 draw_distance = (F32) newvalue.asReal();
102 gAgent.mDrawDistance = draw_distance;
103 LLWorld::getInstance()->setLandFarClip(draw_distance);
104 return true;
73} 105}
74 106
75LLFloaterSettingsDebug::~LLFloaterSettingsDebug() 107static bool handleTerrainDetailChanged(const LLSD& newvalue)
76{ 108{
77 sInstance = NULL; 109 LLDrawPoolTerrain::sDetailMode = newvalue.asInteger();
110 return true;
78} 111}
79 112
80BOOL LLFloaterSettingsDebug::postBuild() 113
114static bool handleSetShaderChanged(const LLSD& newvalue)
81{ 115{
82 LLComboBox* settings_combo = LLUICtrlFactory::getComboBoxByName(this, "settings_combo"); 116 LLShaderMgr::setShaders();
117 return true;
118}
83 119
84 LLControlGroup::ctrl_name_table_t::iterator name_it; 120static bool handleReleaseGLBufferChanged(const LLSD& newvalue)
85 for(name_it = gSavedSettings.mNameTable.begin(); name_it != gSavedSettings.mNameTable.end(); ++name_it) 121{
122 if (gPipeline.isInit())
86 { 123 {
87 settings_combo->add(name_it->first, (void*)name_it->second); 124 gPipeline.releaseGLBuffers();
125 gPipeline.createGLBuffers();
88 } 126 }
89 for(name_it = gSavedPerAccountSettings.mNameTable.begin(); name_it != gSavedPerAccountSettings.mNameTable.end(); ++name_it) 127 return true;
128}
129
130static bool handleVolumeLODChanged(const LLSD& newvalue)
131{
132 LLVOVolume::sLODFactor = (F32) newvalue.asReal();
133 LLVOVolume::sDistanceFactor = 1.f-LLVOVolume::sLODFactor * 0.1f;
134 return true;
135}
136
137static bool handleAvatarLODChanged(const LLSD& newvalue)
138{
139 LLVOAvatar::sLODFactor = (F32) newvalue.asReal();
140 return true;
141}
142
143static bool handleTerrainLODChanged(const LLSD& newvalue)
144{
145 LLVOSurfacePatch::sLODFactor = (F32)newvalue.asReal();
146 //sqaure lod factor to get exponential range of [0,4] and keep
147 //a value of 1 in the middle of the detail slider for consistency
148 //with other detail sliders (see panel_preferences_graphics1.xml)
149 LLVOSurfacePatch::sLODFactor *= LLVOSurfacePatch::sLODFactor;
150 return true;
151}
152
153static bool handleTreeLODChanged(const LLSD& newvalue)
154{
155 LLVOTree::sTreeFactor = (F32) newvalue.asReal();
156 return true;
157}
158
159static bool handleFlexLODChanged(const LLSD& newvalue)
160{
161 LLVolumeImplFlexible::sUpdateFactor = (F32) newvalue.asReal();
162 return true;
163}
164
165static bool handleGammaChanged(const LLSD& newvalue)
166{
167 F32 gamma = (F32) newvalue.asReal();
168 if (gamma == 0.0f)
90 { 169 {
91 settings_combo->add(name_it->first, (void*)name_it->second); 170 gamma = 1.0f; // restore normal gamma
92 } 171 }
93 for(name_it = gColors.mNameTable.begin(); name_it != gColors.mNameTable.end(); ++name_it) 172 if (gViewerWindow && gViewerWindow->getWindow() && gamma != gViewerWindow->getWindow()->getGamma())
94 { 173 {
95 settings_combo->add(name_it->first, (void*)name_it->second); 174 // Only save it if it's changed
175 if (!gViewerWindow->getWindow()->setGamma(gamma))
176 {
177 llwarns << "setGamma failed!" << llendl;
178 }
96 } 179 }
97 settings_combo->sortByName();
98 settings_combo->setCommitCallback(onSettingSelect);
99 settings_combo->setCallbackUserData(this);
100 settings_combo->updateSelection();
101
102 childSetCommitCallback("val_spinner_1", onCommitSettings);
103 childSetUserData("val_spinner_1", this);
104 childSetCommitCallback("val_spinner_2", onCommitSettings);
105 childSetUserData("val_spinner_2", this);
106 childSetCommitCallback("val_spinner_3", onCommitSettings);
107 childSetUserData("val_spinner_3", this);
108 childSetCommitCallback("val_spinner_4", onCommitSettings);
109 childSetUserData("val_spinner_4", this);
110 childSetCommitCallback("val_text", onCommitSettings);
111 childSetUserData("val_text", this);
112 childSetCommitCallback("boolean_combo", onCommitSettings);
113 childSetUserData("boolean_combo", this);
114 childSetCommitCallback("color_swatch", onCommitSettings);
115 childSetUserData("color_swatch", this);
116 childSetAction("default_btn", onClickDefault, this);
117 mComment = getChild<LLTextEditor>("comment_text");
118 return TRUE;
119}
120
121void LLFloaterSettingsDebug::draw()
122{
123 LLComboBox* settings_combo = getChild<LLComboBox>("settings_combo");
124 LLControlBase* controlp = (LLControlBase*)settings_combo->getCurrentUserdata();
125 updateControl(controlp);
126
127 LLFloater::draw();
128}
129
130//static
131void LLFloaterSettingsDebug::show(void*)
132{
133 if (sInstance == NULL)
134 {
135 sInstance = new LLFloaterSettingsDebug();
136 180
137 gUICtrlFactory->buildFloater(sInstance, "floater_settings_debug.xml"); 181 return true;
138 } 182}
139 183
140 sInstance->open(); /* Flawfinder: ignore */ 184const F32 MAX_USER_FOG_RATIO = 10.f;
141} 185const F32 MIN_USER_FOG_RATIO = 0.5f;
142 186
143//static 187static bool handleFogRatioChanged(const LLSD& newvalue)
144void LLFloaterSettingsDebug::onSettingSelect(LLUICtrl* ctrl, void* user_data) 188{
145{ 189 F32 fog_ratio = llmax(MIN_USER_FOG_RATIO, llmin((F32) newvalue.asReal(), MAX_USER_FOG_RATIO));
146 LLFloaterSettingsDebug* floaterp = (LLFloaterSettingsDebug*)user_data; 190 gSky.setFogRatio(fog_ratio);
147 LLComboBox* combo_box = (LLComboBox*)ctrl; 191 return true;
148 LLControlBase* controlp = (LLControlBase*)combo_box->getCurrentUserdata();
149
150 floaterp->updateControl(controlp);
151}
152
153//static
154void LLFloaterSettingsDebug::onCommitSettings(LLUICtrl* ctrl, void* user_data)
155{
156 LLFloaterSettingsDebug* floaterp = (LLFloaterSettingsDebug*)user_data;
157
158 LLComboBox* settings_combo = floaterp->getChild<LLComboBox>("settings_combo");
159 LLControlBase* controlp = (LLControlBase*)settings_combo->getCurrentUserdata();
160
161 LLVector3 vector;
162 LLVector3d vectord;
163 LLRect rect;
164 LLColor4 col4;
165 LLColor3 col3;
166 LLColor4U col4U;
167 LLColor4 color_with_alpha;
168
169 switch(controlp->type())
170 {
171 case TYPE_U32:
172 controlp->set(floaterp->childGetValue("val_spinner_1"));
173 break;
174 case TYPE_S32:
175 controlp->set(floaterp->childGetValue("val_spinner_1"));
176 break;
177 case TYPE_F32:
178 controlp->set(LLSD(floaterp->childGetValue("val_spinner_1").asReal()));
179 break;
180 case TYPE_BOOLEAN:
181 controlp->set(floaterp->childGetValue("boolean_combo"));
182 break;
183 case TYPE_STRING:
184 controlp->set(LLSD(floaterp->childGetValue("val_text").asString()));
185 break;
186 case TYPE_VEC3:
187 vector.mV[VX] = (F32)floaterp->childGetValue("val_spinner_1").asReal();
188 vector.mV[VY] = (F32)floaterp->childGetValue("val_spinner_2").asReal();
189 vector.mV[VZ] = (F32)floaterp->childGetValue("val_spinner_3").asReal();
190 controlp->set(vector.getValue());
191 break;
192 case TYPE_VEC3D:
193 vectord.mdV[VX] = floaterp->childGetValue("val_spinner_1").asReal();
194 vectord.mdV[VY] = floaterp->childGetValue("val_spinner_2").asReal();
195 vectord.mdV[VZ] = floaterp->childGetValue("val_spinner_3").asReal();
196 controlp->set(vectord.getValue());
197 break;
198 case TYPE_RECT:
199 rect.mLeft = floaterp->childGetValue("val_spinner_1").asInteger();
200 rect.mRight = floaterp->childGetValue("val_spinner_2").asInteger();
201 rect.mBottom = floaterp->childGetValue("val_spinner_3").asInteger();
202 rect.mTop = floaterp->childGetValue("val_spinner_4").asInteger();
203 controlp->set(rect.getValue());
204 break;
205 case TYPE_COL4:
206 col3.setValue(floaterp->childGetValue("color_swatch"));
207 col4 = LLColor4(col3, (F32)floaterp->childGetValue("val_spinner_4").asReal());
208 controlp->set(col4.getValue());
209 break;
210 case TYPE_COL3:
211 controlp->set(floaterp->childGetValue("color_swatch"));
212 //col3.mV[VRED] = (F32)floaterp->childGetValue("val_spinner_1").asC();
213 //col3.mV[VGREEN] = (F32)floaterp->childGetValue("val_spinner_2").asReal();
214 //col3.mV[VBLUE] = (F32)floaterp->childGetValue("val_spinner_3").asReal();
215 //controlp->set(col3.getValue());
216 break;
217 case TYPE_COL4U:
218 col3.setValue(floaterp->childGetValue("color_swatch"));
219 col4U.setVecScaleClamp(col3);
220 col4U.mV[VALPHA] = floaterp->childGetValue("val_spinner_4").asInteger();
221 controlp->set(col4U.getValue());
222 break;
223 default:
224 break;
225 }
226} 192}
227 193
228// static 194static bool handleMaxPartCountChanged(const LLSD& newvalue)
229void LLFloaterSettingsDebug::onClickDefault(void* user_data)
230{ 195{
231 LLFloaterSettingsDebug* floaterp = (LLFloaterSettingsDebug*)user_data; 196 LLViewerPartSim::setMaxPartCount(newvalue.asInteger());
232 LLComboBox* settings_combo = floaterp->getChild<LLComboBox>("settings_combo"); 197 return true;
233 LLControlBase* controlp = (LLControlBase*)settings_combo->getCurrentUserdata(); 198}
199
200const S32 MAX_USER_COMPOSITE_LIMIT = 100;
201const S32 MIN_USER_COMPOSITE_LIMIT = 0;
202
203static bool handleCompositeLimitChanged(const LLSD& newvalue)
204{
205 S32 composite_limit = llmax(MIN_USER_COMPOSITE_LIMIT, llmin((S32)newvalue.asInteger(), MAX_USER_COMPOSITE_LIMIT));
206 LLVOAvatar::sMaxOtherAvatarsToComposite = composite_limit;
207 return true;
208}
209
210static bool handleVideoMemoryChanged(const LLSD& newvalue)
211{
212 gImageList.updateMaxResidentTexMem(newvalue.asInteger());
213 return true;
214}
215
216static bool handleBandwidthChanged(const LLSD& newvalue)
217{
218 gViewerThrottle.setMaxBandwidth((F32) newvalue.asReal());
219 return true;
220}
234 221
235 if (controlp) 222static bool handleChatFontSizeChanged(const LLSD& newvalue)
223{
224 if(gConsole)
236 { 225 {
237 controlp->resetToDefault(); 226 gConsole->setFontSize(newvalue.asInteger());
238 floaterp->updateControl(controlp);
239 } 227 }
228 return true;
240} 229}
241 230
242// we've switched controls, or doing per-frame update, so update spinners, etc. 231static bool handleChatPersistTimeChanged(const LLSD& newvalue)
243void LLFloaterSettingsDebug::updateControl(LLControlBase* controlp)
244{ 232{
245 LLSpinCtrl* spinner1 = LLUICtrlFactory::getSpinnerByName(this, "val_spinner_1"); 233 if(gConsole)
246 LLSpinCtrl* spinner2 = LLUICtrlFactory::getSpinnerByName(this, "val_spinner_2"); 234 {
247 LLSpinCtrl* spinner3 = LLUICtrlFactory::getSpinnerByName(this, "val_spinner_3"); 235 gConsole->setLinePersistTime((F32) newvalue.asReal());
248 LLSpinCtrl* spinner4 = LLUICtrlFactory::getSpinnerByName(this, "val_spinner_4"); 236 }
249 LLColorSwatchCtrl* color_swatch = getChild<LLColorSwatchCtrl>("color_swatch"); 237 return true;
238}
250 239
251 if (!spinner1 || !spinner2 || !spinner3 || !spinner4 || !color_swatch) 240static bool handleConsoleMaxLinesChanged(const LLSD& newvalue)
241{
242 if(gConsole)
252 { 243 {
253 llwarns << "Could not find all desired controls by name" 244 gConsole->setMaxLines(newvalue.asInteger());
254 << llendl;
255 return;
256 } 245 }
246 return true;
247}
257 248
258 spinner1->setVisible(FALSE); 249static void handleAudioVolumeChanged(const LLSD& newvalue)
259 spinner2->setVisible(FALSE); 250{
260 spinner3->setVisible(FALSE); 251 audio_update_volume(true);
261 spinner4->setVisible(FALSE); 252}
262 color_swatch->setVisible(FALSE);
263 childSetVisible("val_text", FALSE);
264 mComment->setText(LLString::null);
265 253
266 if (controlp) 254static bool handleJoystickChanged(const LLSD& newvalue)
267 { 255{
268 eControlType type = controlp->type(); 256 LLViewerJoystick::getInstance()->setCameraNeedsUpdate(TRUE);
269 mComment->setText(controlp->getComment()); 257 return true;
270 spinner1->setMaxValue(F32_MAX); 258}
271 spinner2->setMaxValue(F32_MAX);
272 spinner3->setMaxValue(F32_MAX);
273 spinner4->setMaxValue(F32_MAX);
274 spinner1->setMinValue(-F32_MAX);
275 spinner2->setMinValue(-F32_MAX);
276 spinner3->setMinValue(-F32_MAX);
277 spinner4->setMinValue(-F32_MAX);
278 if (!spinner1->hasFocus())
279 {
280 spinner1->setIncrement(0.1f);
281 }
282 if (!spinner2->hasFocus())
283 {
284 spinner2->setIncrement(0.1f);
285 }
286 if (!spinner3->hasFocus())
287 {
288 spinner3->setIncrement(0.1f);
289 }
290 if (!spinner4->hasFocus())
291 {
292 spinner4->setIncrement(0.1f);
293 }
294 259
295 LLSD sd = controlp->get(); 260static bool handleAudioStreamMusicChanged(const LLSD& newvalue)
296 switch(type) 261{
262 if (gAudiop)
263 {
264 if ( newvalue.asBoolean() )
297 { 265 {
298 case TYPE_U32: 266 if (LLViewerParcelMgr::getInstance()->getAgentParcel()
299 spinner1->setVisible(TRUE); 267 && !LLViewerParcelMgr::getInstance()->getAgentParcel()->getMusicURL().empty())
300 spinner1->setLabel(LLString("value")); // Debug, don't translate
301 childSetVisible("boolean_combo", FALSE);
302 if (!spinner1->hasFocus())
303 {
304 spinner1->setValue(sd);
305 spinner1->setMinValue((F32)U32_MIN);
306 spinner1->setMaxValue((F32)U32_MAX);
307 spinner1->setIncrement(1.f);
308 spinner1->setPrecision(0);
309 }
310 break;
311 case TYPE_S32:
312 spinner1->setVisible(TRUE);
313 spinner1->setLabel(LLString("value")); // Debug, don't translate
314 childSetVisible("boolean_combo", FALSE);
315 if (!spinner1->hasFocus())
316 {
317 spinner1->setValue(sd);
318 spinner1->setMinValue((F32)S32_MIN);
319 spinner1->setMaxValue((F32)S32_MAX);
320 spinner1->setIncrement(1.f);
321 spinner1->setPrecision(0);
322 }
323 break;
324 case TYPE_F32:
325 spinner1->setVisible(TRUE);
326 spinner1->setLabel(LLString("value")); // Debug, don't translate
327 childSetVisible("boolean_combo", FALSE);
328 if (!spinner1->hasFocus())
329 { 268 {
330 spinner1->setPrecision(3); 269 // if stream is already playing, don't call this
331 spinner1->setValue(sd); 270 // otherwise music will briefly stop
332 } 271 if ( !gAudiop->isInternetStreamPlaying() )
333 break;
334 case TYPE_BOOLEAN:
335 childSetVisible("boolean_combo", TRUE);
336
337 if (!childHasFocus("boolean_combo"))
338 {
339 if (sd.asBoolean())
340 { 272 {
341 childSetValue("boolean_combo", LLSD("true")); 273 gAudiop->startInternetStream(LLViewerParcelMgr::getInstance()->getAgentParcel()->getMusicURL().c_str());
342 } 274 }
343 else
344 {
345 childSetValue("boolean_combo", LLSD(""));
346 }
347 }
348 break;
349 case TYPE_STRING:
350 childSetVisible("val_text", TRUE);
351 childSetVisible("boolean_combo", FALSE);
352 if (!childHasFocus("val_text"))
353 {
354 childSetValue("val_text", sd);
355 }
356 break;
357 case TYPE_VEC3:
358 {
359 childSetVisible("boolean_combo", FALSE);
360 LLVector3 v;
361 v.setValue(sd);
362 spinner1->setVisible(TRUE);
363 spinner1->setLabel(LLString("X"));
364 spinner2->setVisible(TRUE);
365 spinner2->setLabel(LLString("Y"));
366 spinner3->setVisible(TRUE);
367 spinner3->setLabel(LLString("Z"));
368 if (!spinner1->hasFocus())
369 {
370 spinner1->setPrecision(3);
371 spinner1->setValue(v[VX]);
372 }
373 if (!spinner2->hasFocus())
374 {
375 spinner2->setPrecision(3);
376 spinner2->setValue(v[VY]);
377 }
378 if (!spinner3->hasFocus())
379 {
380 spinner3->setPrecision(3);
381 spinner3->setValue(v[VZ]);
382 }
383 break;
384 }
385 case TYPE_VEC3D:
386 {
387 childSetVisible("boolean_combo", FALSE);
388 LLVector3d v;
389 v.setValue(sd);
390 spinner1->setVisible(TRUE);
391 spinner1->setLabel(LLString("X"));
392 spinner2->setVisible(TRUE);
393 spinner2->setLabel(LLString("Y"));
394 spinner3->setVisible(TRUE);
395 spinner3->setLabel(LLString("Z"));
396 if (!spinner1->hasFocus())
397 {
398 spinner1->setPrecision(3);
399 spinner1->setValue(v[VX]);
400 }
401 if (!spinner2->hasFocus())
402 {
403 spinner2->setPrecision(3);
404 spinner2->setValue(v[VY]);
405 }
406 if (!spinner3->hasFocus())
407 {
408 spinner3->setPrecision(3);
409 spinner3->setValue(v[VZ]);
410 }
411 break;
412 }
413 case TYPE_RECT:
414 {
415 childSetVisible("boolean_combo", FALSE);
416 LLRect r;
417 r.setValue(sd);
418 spinner1->setVisible(TRUE);
419 spinner1->setLabel(LLString("Left"));
420 spinner2->setVisible(TRUE);
421 spinner2->setLabel(LLString("Right"));
422 spinner3->setVisible(TRUE);
423 spinner3->setLabel(LLString("Bottom"));
424 spinner4->setVisible(TRUE);
425 spinner4->setLabel(LLString("Top"));
426 if (!spinner1->hasFocus())
427 {
428 spinner1->setPrecision(0);
429 spinner1->setValue(r.mLeft);
430 }
431 if (!spinner2->hasFocus())
432 {
433 spinner2->setPrecision(0);
434 spinner2->setValue(r.mRight);
435 }
436 if (!spinner3->hasFocus())
437 {
438 spinner3->setPrecision(0);
439 spinner3->setValue(r.mBottom);
440 }
441 if (!spinner4->hasFocus())
442 {
443 spinner4->setPrecision(0);
444 spinner4->setValue(r.mTop);
445 } 275 }
276 }
277 else
278 {
279 gAudiop->stopInternetStream();
280 }
281 }
282 return true;
283}
446 284
447 spinner1->setMinValue((F32)S32_MIN); 285static bool handleUseOcclusionChanged(const LLSD& newvalue)
448 spinner1->setMaxValue((F32)S32_MAX); 286{
449 spinner1->setIncrement(1.f); 287 LLPipeline::sUseOcclusion = (newvalue.asBoolean() && gGLManager.mHasOcclusionQuery
450 288 && LLFeatureManager::getInstance()->isFeatureAvailable("UseOcclusion") && !gUseWireframe) ? 2 : 0;
451 spinner2->setMinValue((F32)S32_MIN); 289 return true;
452 spinner2->setMaxValue((F32)S32_MAX); 290}
453 spinner2->setIncrement(1.f);
454
455 spinner3->setMinValue((F32)S32_MIN);
456 spinner3->setMaxValue((F32)S32_MAX);
457 spinner3->setIncrement(1.f);
458
459 spinner4->setMinValue((F32)S32_MIN);
460 spinner4->setMaxValue((F32)S32_MAX);
461 spinner4->setIncrement(1.f);
462 break;
463 }
464 case TYPE_COL4:
465 {
466 childSetVisible("boolean_combo", FALSE);
467 LLColor4 clr;
468 clr.setValue(sd);
469 color_swatch->setVisible(TRUE);
470 // only set if changed so color picker doesn't update
471 if(clr != LLColor4(color_swatch->getValue()))
472 {
473 color_swatch->set(LLColor4(sd), TRUE, FALSE);
474 }
475 spinner4->setVisible(TRUE);
476 spinner4->setLabel(LLString("Alpha"));
477 if (!spinner4->hasFocus())
478 {
479 spinner4->setPrecision(3);
480 spinner4->setMinValue(0.0);
481 spinner4->setMaxValue(1.f);
482 spinner4->setValue(clr.mV[VALPHA]);
483 }
484 break;
485 }
486 case TYPE_COL3:
487 {
488 childSetVisible("boolean_combo", FALSE);
489 LLColor3 clr;
490 clr.setValue(sd);
491 color_swatch->setVisible(TRUE);
492 color_swatch->setValue(sd);
493 break;
494 }
495 case TYPE_COL4U:
496 {
497 childSetVisible("boolean_combo", FALSE);
498 LLColor4U clr;
499 clr.setValue(sd);
500 color_swatch->setVisible(TRUE);
501 if(LLColor4(clr) != LLColor4(color_swatch->getValue()))
502 {
503 color_swatch->set(LLColor4(clr), TRUE, FALSE);
504 }
505 spinner4->setVisible(TRUE);
506 spinner4->setLabel(LLString("Alpha"));
507 if(!spinner4->hasFocus())
508 {
509 spinner4->setPrecision(0);
510 spinner4->setValue(clr.mV[VALPHA]);
511 }
512 291
513 spinner4->setMinValue(0); 292static bool handleNumpadControlChanged(const LLSD& newvalue)
514 spinner4->setMaxValue(255); 293{
515 spinner4->setIncrement(1.f); 294 if (gKeyboard)
295 {
296 gKeyboard->setNumpadDistinct(static_cast<LLKeyboard::e_numpad_distinct>(newvalue.asInteger()));
297 }
298 return true;
299}
516 300
517 break; 301static bool handleRenderUseVBOChanged(const LLSD& newvalue)
518 } 302{
519 default: 303 if (gPipeline.isInit())
520 mComment->setText(LLString("unknown")); 304 {
521 break; 305 gPipeline.setUseVBO(newvalue.asBoolean());
522 } 306 }
307 return true;
308}
309
310static bool handleWLSkyDetailChanged(const LLSD&)
311{
312 if (gSky.mVOWLSkyp.notNull())
313 {
314 gSky.mVOWLSkyp->updateGeometry(gSky.mVOWLSkyp->mDrawable);
315 }
316 return true;
317}
318
319static bool handleRenderLightingDetailChanged(const LLSD& newvalue)
320{
321 if (gPipeline.isInit())
322 {
323 gPipeline.setLightingDetail(newvalue.asInteger());
324 }
325 return true;
326}
327
328static bool handleResetVertexBuffersChanged(const LLSD&)
329{
330 if (gPipeline.isInit())
331 {
332 gPipeline.resetVertexBuffers();
523 } 333 }
334 return true;
335}
336
337static bool handleRenderDynamicLODChanged(const LLSD& newvalue)
338{
339 LLPipeline::sDynamicLOD = newvalue.asBoolean();
340 return true;
341}
342
343static bool handleRenderUseFBOChanged(const LLSD& newvalue)
344{
345 LLRenderTarget::sUseFBO = newvalue.asBoolean();
346 if (gPipeline.isInit())
347 {
348 gPipeline.releaseGLBuffers();
349 gPipeline.createGLBuffers();
350 }
351 return true;
352}
353
354static bool handleRenderUseImpostorsChanged(const LLSD& newvalue)
355{
356 LLVOAvatar::sUseImpostors = FALSE; //newvalue.asBoolean();
357 return true;
358}
359
360static bool handleRenderUseCleverUIChanged(const LLSD& newvalue)
361{
362 gGL.setClever(newvalue.asBoolean());
363 return true;
364}
365
366static bool handleRenderResolutionDivisorChanged(const LLSD&)
367{
368 gResizeScreenTexture = TRUE;
369 return true;
370}
371
372static bool handleDebugViewsChanged(const LLSD& newvalue)
373{
374 LLView::sDebugRects = newvalue.asBoolean();
375 return true;
376}
377
378static bool handleLogFileChanged(const LLSD& newvalue)
379{
380 std::string log_filename = newvalue.asString();
381 LLFile::remove(log_filename.c_str());
382 LLError::logToFile(log_filename);
383 return true;
384}
385
386bool handleHideGroupTitleChanged(const LLSD& newvalue)
387{
388 gAgent.setHideGroupTitle(newvalue);
389 return true;
390}
391
392bool handleEffectColorChanged(const LLSD& newvalue)
393{
394 gAgent.setEffectColor(LLColor4(newvalue));
395 return true;
396}
397
398bool handleRotateNetMapChanged(const LLSD& newvalue)
399{
400 LLNetMap::setRotateMap(newvalue.asBoolean());
401 return true;
402}
524 403
404bool handleVectorizeChanged(const LLSD& newvalue)
405{
406 LLViewerJointMesh::updateVectorize();
407 return true;
408}
409
410bool handleVoiceClientPrefsChanged(const LLSD& newvalue)
411{
412 if(gVoiceClient)
413 {
414 // Note: Ignore the specific event value, look up the ones we want
415
416 gVoiceClient->setVoiceEnabled(gSavedSettings.getBOOL("EnableVoiceChat"));
417 gVoiceClient->setUsePTT(gSavedSettings.getBOOL("PTTCurrentlyEnabled"));
418 std::string keyString = gSavedSettings.getString("PushToTalkButton");
419 gVoiceClient->setPTTKey(keyString);
420 gVoiceClient->setPTTIsToggle(gSavedSettings.getBOOL("PushToTalkToggle"));
421 gVoiceClient->setEarLocation(gSavedSettings.getS32("VoiceEarLocation"));
422 std::string serverName = gSavedSettings.getString("VivoxDebugServerName");
423 gVoiceClient->setVivoxDebugServerName(serverName);
424
425 std::string inputDevice = gSavedSettings.getString("VoiceInputAudioDevice");
426 gVoiceClient->setCaptureDevice(inputDevice);
427 std::string outputDevice = gSavedSettings.getString("VoiceOutputAudioDevice");
428 gVoiceClient->setRenderDevice(outputDevice);
429 }
430 return true;
525} 431}
432
433////////////////////////////////////////////////////////////////////////////
434
435void settings_setup_listeners()
436{
437 gSavedSettings.getControl("FirstPersonAvatarVisible")->getSignal()->connect(boost::bind(&handleRenderAvatarMouselookChanged, _1));
438 gSavedSettings.getControl("RenderFarClip")->getSignal()->connect(boost::bind(&handleRenderFarClipChanged, _1));
439 gSavedSettings.getControl("RenderTerrainDetail")->getSignal()->connect(boost::bind(&handleTerrainDetailChanged, _1));
440 gSavedSettings.getControl("RenderAvatarVP")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
441 gSavedSettings.getControl("VertexShaderEnable")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
442 gSavedSettings.getControl("RenderDynamicReflections")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
443 gSavedSettings.getControl("RenderGlow")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _1));
444 gSavedSettings.getControl("RenderGlow")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
445 gSavedSettings.getControl("EnableRippleWater")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
446 gSavedSettings.getControl("RenderGlowResolutionPow")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _1));
447 gSavedSettings.getControl("RenderAvatarCloth")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
448 gSavedSettings.getControl("WindLightUseAtmosShaders")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
449 gSavedSettings.getControl("RenderGammaFull")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
450 gSavedSettings.getControl("RenderVolumeLODFactor")->getSignal()->connect(boost::bind(&handleVolumeLODChanged, _1));
451 gSavedSettings.getControl("RenderAvatarLODFactor")->getSignal()->connect(boost::bind(&handleAvatarLODChanged, _1));
452 gSavedSettings.getControl("RenderTerrainLODFactor")->getSignal()->connect(boost::bind(&handleTerrainLODChanged, _1));
453 gSavedSettings.getControl("RenderTreeLODFactor")->getSignal()->connect(boost::bind(&handleTreeLODChanged, _1));
454 gSavedSettings.getControl("RenderFlexTimeFactor")->getSignal()->connect(boost::bind(&handleFlexLODChanged, _1));
455 gSavedSettings.getControl("ThrottleBandwidthKBPS")->getSignal()->connect(boost::bind(&handleBandwidthChanged, _1));
456 gSavedSettings.getControl("RenderGamma")->getSignal()->connect(boost::bind(&handleGammaChanged, _1));
457 gSavedSettings.getControl("RenderFogRatio")->getSignal()->connect(boost::bind(&handleFogRatioChanged, _1));
458 gSavedSettings.getControl("RenderMaxPartCount")->getSignal()->connect(boost::bind(&handleMaxPartCountChanged, _1));
459 gSavedSettings.getControl("RenderDynamicLOD")->getSignal()->connect(boost::bind(&handleRenderDynamicLODChanged, _1));
460 gSavedSettings.getControl("RenderDebugTextureBind")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _1));
461 gSavedSettings.getControl("RenderFastAlpha")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _1));
462 gSavedSettings.getControl("RenderObjectBump")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _1));
463 gSavedSettings.getControl("RenderMaxVBOSize")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _1));
464 gSavedSettings.getControl("RenderUseFBO")->getSignal()->connect(boost::bind(&handleRenderUseFBOChanged, _1));
465 gSavedSettings.getControl("RenderUseImpostors")->getSignal()->connect(boost::bind(&handleRenderUseImpostorsChanged, _1));
466 gSavedSettings.getControl("RenderUseCleverUI")->getSignal()->connect(boost::bind(&handleRenderUseCleverUIChanged, _1));
467 gSavedSettings.getControl("RenderResolutionDivisor")->getSignal()->connect(boost::bind(&handleRenderResolutionDivisorChanged, _1));
468 gSavedSettings.getControl("RenderDeferred")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
469 gSavedSettings.getControl("AvatarCompositeLimit")->getSignal()->connect(boost::bind(&handleCompositeLimitChanged, _1));
470 gSavedSettings.getControl("TextureMemory")->getSignal()->connect(boost::bind(&handleVideoMemoryChanged, _1));
471 gSavedSettings.getControl("ChatFontSize")->getSignal()->connect(boost::bind(&handleChatFontSizeChanged, _1));
472 gSavedSettings.getControl("ChatPersistTime")->getSignal()->connect(boost::bind(&handleChatPersistTimeChanged, _1));
473 gSavedSettings.getControl("ConsoleMaxLines")->getSignal()->connect(boost::bind(&handleConsoleMaxLinesChanged, _1));
474 gSavedSettings.getControl("UseOcclusion")->getSignal()->connect(boost::bind(&handleUseOcclusionChanged, _1));
475 gSavedSettings.getControl("AudioLevelMaster")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
476 gSavedSettings.getControl("AudioLevelSFX")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
477 gSavedSettings.getControl("AudioLevelUI")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
478 gSavedSettings.getControl("AudioLevelAmbient")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
479 gSavedSettings.getControl("AudioLevelMusic")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
480 gSavedSettings.getControl("AudioLevelMedia")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
481 gSavedSettings.getControl("AudioLevelVoice")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
482 gSavedSettings.getControl("AudioLevelDistance")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
483 gSavedSettings.getControl("AudioLevelDoppler")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
484 gSavedSettings.getControl("AudioLevelRolloff")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
485 gSavedSettings.getControl("AudioStreamingMusic")->getSignal()->connect(boost::bind(&handleAudioStreamMusicChanged, _1));
486 gSavedSettings.getControl("MuteAudio")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
487 gSavedSettings.getControl("MuteMusic")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
488 gSavedSettings.getControl("MuteMedia")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
489 gSavedSettings.getControl("MuteVoice")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
490 gSavedSettings.getControl("MuteAmbient")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
491 gSavedSettings.getControl("MuteUI")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
492 gSavedSettings.getControl("RenderVBOEnable")->getSignal()->connect(boost::bind(&handleRenderUseVBOChanged, _1));
493 gSavedSettings.getControl("WLSkyDetail")->getSignal()->connect(boost::bind(&handleWLSkyDetailChanged, _1));
494 gSavedSettings.getControl("RenderLightingDetail")->getSignal()->connect(boost::bind(&handleRenderLightingDetailChanged, _1));
495 gSavedSettings.getControl("NumpadControl")->getSignal()->connect(boost::bind(&handleNumpadControlChanged, _1));
496 gSavedSettings.getControl("JoystickAxis0")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
497 gSavedSettings.getControl("JoystickAxis1")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
498 gSavedSettings.getControl("JoystickAxis2")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
499 gSavedSettings.getControl("JoystickAxis3")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
500 gSavedSettings.getControl("JoystickAxis4")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
501 gSavedSettings.getControl("JoystickAxis5")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
502 gSavedSettings.getControl("JoystickAxis6")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
503 gSavedSettings.getControl("FlycamAxisScale0")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
504 gSavedSettings.getControl("FlycamAxisScale1")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
505 gSavedSettings.getControl("FlycamAxisScale2")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
506 gSavedSettings.getControl("FlycamAxisScale3")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
507 gSavedSettings.getControl("FlycamAxisScale4")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
508 gSavedSettings.getControl("FlycamAxisScale5")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
509 gSavedSettings.getControl("FlycamAxisScale6")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
510 gSavedSettings.getControl("FlycamAxisDeadZone0")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
511 gSavedSettings.getControl("FlycamAxisDeadZone1")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
512 gSavedSettings.getControl("FlycamAxisDeadZone2")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
513 gSavedSettings.getControl("FlycamAxisDeadZone3")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
514 gSavedSettings.getControl("FlycamAxisDeadZone4")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
515 gSavedSettings.getControl("FlycamAxisDeadZone5")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
516 gSavedSettings.getControl("FlycamAxisDeadZone6")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
517 gSavedSettings.getControl("AvatarAxisScale0")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
518 gSavedSettings.getControl("AvatarAxisScale1")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
519 gSavedSettings.getControl("AvatarAxisScale2")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
520 gSavedSettings.getControl("AvatarAxisScale3")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
521 gSavedSettings.getControl("AvatarAxisScale4")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
522 gSavedSettings.getControl("AvatarAxisScale5")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
523 gSavedSettings.getControl("AvatarAxisDeadZone0")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
524 gSavedSettings.getControl("AvatarAxisDeadZone1")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
525 gSavedSettings.getControl("AvatarAxisDeadZone2")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
526 gSavedSettings.getControl("AvatarAxisDeadZone3")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
527 gSavedSettings.getControl("AvatarAxisDeadZone4")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
528 gSavedSettings.getControl("AvatarAxisDeadZone5")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
529 gSavedSettings.getControl("BuildAxisScale0")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
530 gSavedSettings.getControl("BuildAxisScale1")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
531 gSavedSettings.getControl("BuildAxisScale2")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
532 gSavedSettings.getControl("BuildAxisScale3")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
533 gSavedSettings.getControl("BuildAxisScale4")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
534 gSavedSettings.getControl("BuildAxisScale5")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
535 gSavedSettings.getControl("BuildAxisDeadZone0")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
536 gSavedSettings.getControl("BuildAxisDeadZone1")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
537 gSavedSettings.getControl("BuildAxisDeadZone2")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
538 gSavedSettings.getControl("BuildAxisDeadZone3")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
539 gSavedSettings.getControl("BuildAxisDeadZone4")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
540 gSavedSettings.getControl("BuildAxisDeadZone5")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
541 gSavedSettings.getControl("DebugViews")->getSignal()->connect(boost::bind(&handleDebugViewsChanged, _1));
542 gSavedSettings.getControl("UserLogFile")->getSignal()->connect(boost::bind(&handleLogFileChanged, _1));
543 gSavedSettings.getControl("RenderHideGroupTitle")->getSignal()->connect(boost::bind(handleHideGroupTitleChanged, _1));
544 gSavedSettings.getControl("EffectColor")->getSignal()->connect(boost::bind(handleEffectColorChanged, _1));
545 gSavedSettings.getControl("MiniMapRotate")->getSignal()->connect(boost::bind(handleRotateNetMapChanged, _1));
546 gSavedSettings.getControl("VectorizePerfTest")->getSignal()->connect(boost::bind(&handleVectorizeChanged, _1));
547 gSavedSettings.getControl("VectorizeEnable")->getSignal()->connect(boost::bind(&handleVectorizeChanged, _1));
548 gSavedSettings.getControl("VectorizeProcessor")->getSignal()->connect(boost::bind(&handleVectorizeChanged, _1));
549 gSavedSettings.getControl("VectorizeSkin")->getSignal()->connect(boost::bind(&handleVectorizeChanged, _1));
550 gSavedSettings.getControl("EnableVoiceChat")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
551 gSavedSettings.getControl("PTTCurrentlyEnabled")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
552 gSavedSettings.getControl("PushToTalkButton")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
553 gSavedSettings.getControl("PushToTalkToggle")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
554 gSavedSettings.getControl("VoiceEarLocation")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
555 gSavedSettings.getControl("VivoxDebugServerName")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
556 gSavedSettings.getControl("VoiceInputAudioDevice")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
557 gSavedSettings.getControl("VoiceOutputAudioDevice")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
558}
559
diff --git a/linden/indra/newview/llviewercontrol.h b/linden/indra/newview/llviewercontrol.h
index bcea8db..c827f37 100644
--- a/linden/indra/newview/llviewercontrol.h
+++ b/linden/indra/newview/llviewercontrol.h
@@ -32,9 +32,8 @@
32#ifndef LL_LLVIEWERCONTROL_H 32#ifndef LL_LLVIEWERCONTROL_H
33#define LL_LLVIEWERCONTROL_H 33#define LL_LLVIEWERCONTROL_H
34 34
35#include <map>
35#include "llcontrol.h" 36#include "llcontrol.h"
36#include "llfloater.h"
37#include "lltexteditor.h"
38 37
39// Enabled this definition to compile a 'hacked' viewer that 38// Enabled this definition to compile a 'hacked' viewer that
40// allows a hacked godmode to be toggled on and off. 39// allows a hacked godmode to be toggled on and off.
@@ -43,33 +42,12 @@
43extern BOOL gHackGodmode; 42extern BOOL gHackGodmode;
44#endif 43#endif
45 44
46class LLFloaterSettingsDebug : public LLFloater
47{
48public:
49 LLFloaterSettingsDebug();
50 virtual ~LLFloaterSettingsDebug();
51
52 virtual BOOL postBuild();
53 virtual void draw();
54
55 void updateControl(LLControlBase* control);
56
57 static void show(void*);
58 static void onSettingSelect(LLUICtrl* ctrl, void* user_data);
59 static void onCommitSettings(LLUICtrl* ctrl, void* user_data);
60 static void onClickDefault(void* user_data);
61
62protected:
63 static LLFloaterSettingsDebug* sInstance;
64 LLTextEditor* mComment;
65};
66
67// These functions found in llcontroldef.cpp *TODO: clean this up! 45// These functions found in llcontroldef.cpp *TODO: clean this up!
68//setting variables are declared in this function 46//setting variables are declared in this function
69void declare_settings();
70void fixup_settings();
71void settings_setup_listeners(); 47void settings_setup_listeners();
72 48
49extern std::map<LLString, LLControlGroup*> gSettings;
50
73// for the graphics settings 51// for the graphics settings
74void create_graphics_group(LLControlGroup& group); 52void create_graphics_group(LLControlGroup& group);
75 53
@@ -78,9 +56,6 @@ extern LLControlGroup gSavedSettings;
78extern LLControlGroup gSavedPerAccountSettings; 56extern LLControlGroup gSavedPerAccountSettings;
79 57
80// Read-only 58// Read-only
81extern LLControlGroup gViewerArt;
82
83// Read-only
84extern LLControlGroup gColors; 59extern LLControlGroup gColors;
85 60
86// Saved at end of session 61// Saved at end of session
@@ -90,7 +65,4 @@ extern LLControlGroup gCrashSettings;
90extern LLString gLastRunVersion; 65extern LLString gLastRunVersion;
91extern LLString gCurrentVersion; 66extern LLString gCurrentVersion;
92 67
93extern LLString gSettingsFileName;
94extern LLString gPerAccountSettingsFileName;
95
96#endif // LL_LLVIEWERCONTROL_H 68#endif // LL_LLVIEWERCONTROL_H
diff --git a/linden/indra/newview/llviewerdisplay.cpp b/linden/indra/newview/llviewerdisplay.cpp
index 9395b97..b4d6f27 100644
--- a/linden/indra/newview/llviewerdisplay.cpp
+++ b/linden/indra/newview/llviewerdisplay.cpp
@@ -75,6 +75,7 @@
75#include "llcubemap.h" 75#include "llcubemap.h"
76#include "llviewerregion.h" 76#include "llviewerregion.h"
77#include "lldrawpoolwater.h" 77#include "lldrawpoolwater.h"
78#include "lldrawpoolbump.h"
78#include "llwlparammanager.h" 79#include "llwlparammanager.h"
79#include "llwaterparammanager.h" 80#include "llwaterparammanager.h"
80#include "llpostprocess.h" 81#include "llpostprocess.h"
@@ -82,6 +83,7 @@
82extern LLPointer<LLImageGL> gStartImageGL; 83extern LLPointer<LLImageGL> gStartImageGL;
83extern BOOL gDisplaySwapBuffers; 84extern BOOL gDisplaySwapBuffers;
84 85
86
85LLPointer<LLImageGL> gDisconnectedImagep = NULL; 87LLPointer<LLImageGL> gDisconnectedImagep = NULL;
86 88
87// used to toggle renderer back on after teleport 89// used to toggle renderer back on after teleport
@@ -171,18 +173,15 @@ void display_update_camera()
171 { 173 {
172 final_far *= 0.5f; 174 final_far *= 0.5f;
173 } 175 }
174 gCamera->setFar(final_far); 176 LLViewerCamera::getInstance()->setFar(final_far);
175 gViewerWindow->setup3DRender(); 177 gViewerWindow->setup3DRender();
176 178
177 // update all the sky/atmospheric/water settings 179 // update all the sky/atmospheric/water settings
178 LLWLParamManager::instance()->update(gCamera); 180 LLWLParamManager::instance()->update(LLViewerCamera::getInstance());
179 LLWaterParamManager::instance()->update(gCamera); 181 LLWaterParamManager::instance()->update(LLViewerCamera::getInstance());
180 182
181 // Update land visibility too 183 // Update land visibility too
182 if (gWorldp) 184 LLWorld::getInstance()->setLandFarClip(final_far);
183 {
184 gWorldp->setLandFarClip(final_far);
185 }
186} 185}
187 186
188 187
@@ -284,7 +283,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
284 LLImageGL::updateStats(gFrameTimeSeconds); 283 LLImageGL::updateStats(gFrameTimeSeconds);
285 284
286 LLVOAvatar::sRenderName = gSavedSettings.getS32("RenderName"); 285 LLVOAvatar::sRenderName = gSavedSettings.getS32("RenderName");
287 LLVOAvatar::sRenderGroupTitles = gSavedSettings.getBOOL("RenderGroupTitleAll"); 286 LLVOAvatar::sRenderGroupTitles = !gSavedSettings.getBOOL("RenderHideGroupTitleAll");
287
288 gPipeline.mBackfaceCull = TRUE; 288 gPipeline.mBackfaceCull = TRUE;
289 gFrameCount++; 289 gFrameCount++;
290 if (gFocusMgr.getAppHasFocus()) 290 if (gFocusMgr.getAppHasFocus())
@@ -422,8 +422,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
422 // 422 //
423 // 423 //
424 424
425 gCamera->setZoomParameters(zoom_factor, subfield); 425 LLViewerCamera::getInstance()->setZoomParameters(zoom_factor, subfield);
426 gCamera->setNear(MIN_NEAR_PLANE); 426 LLViewerCamera::getInstance()->setNear(MIN_NEAR_PLANE);
427 427
428 ////////////////////////// 428 //////////////////////////
429 // 429 //
@@ -497,7 +497,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
497 stop_glerror(); 497 stop_glerror();
498 498
499 // *TODO: merge these two methods 499 // *TODO: merge these two methods
500 gHUDManager->updateEffects(); 500 LLHUDManager::getInstance()->updateEffects();
501 LLHUDObject::updateAll(); 501 LLHUDObject::updateAll();
502 stop_glerror(); 502 stop_glerror();
503 503
@@ -508,9 +508,10 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
508 508
509 gFrameStats.start(LLFrameStats::UPDATE_CULL); 509 gFrameStats.start(LLFrameStats::UPDATE_CULL);
510 S32 water_clip = 0; 510 S32 water_clip = 0;
511 if (LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_ENVIRONMENT) > 1) 511 if ((LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_ENVIRONMENT) > 1) &&
512 gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_WATER))
512 { 513 {
513 if (gCamera->cameraUnderWater()) 514 if (LLViewerCamera::getInstance()->cameraUnderWater())
514 { 515 {
515 water_clip = -1; 516 water_clip = -1;
516 } 517 }
@@ -525,7 +526,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
525 526
526 LLPipeline::sUseOcclusion = 527 LLPipeline::sUseOcclusion =
527 (!gUseWireframe 528 (!gUseWireframe
528 && gFeatureManagerp->isFeatureAvailable("UseOcclusion") 529 && LLFeatureManager::getInstance()->isFeatureAvailable("UseOcclusion")
529 && gSavedSettings.getBOOL("UseOcclusion") 530 && gSavedSettings.getBOOL("UseOcclusion")
530 && gGLManager.mHasOcclusionQuery) ? 2 : 0; 531 && gGLManager.mHasOcclusionQuery) ? 2 : 0;
531 LLPipeline::sFastAlpha = gSavedSettings.getBOOL("RenderFastAlpha"); 532 LLPipeline::sFastAlpha = gSavedSettings.getBOOL("RenderFastAlpha");
@@ -539,7 +540,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
539 } 540 }
540 541
541 static LLCullResult result; 542 static LLCullResult result;
542 gPipeline.updateCull(*gCamera, result, water_clip); 543 gPipeline.updateCull(*LLViewerCamera::getInstance(), result, water_clip);
543 stop_glerror(); 544 stop_glerror();
544 545
545 BOOL to_texture = !for_snapshot && 546 BOOL to_texture = !for_snapshot &&
@@ -570,7 +571,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
570 571
571 glh::matrix4f proj = glh_get_current_projection(); 572 glh::matrix4f proj = glh_get_current_projection();
572 glh::matrix4f mod = glh_get_current_modelview(); 573 glh::matrix4f mod = glh_get_current_modelview();
573 glViewport(0,0,128,256); 574 glViewport(0,0,512,512);
575 LLVOAvatar::updateFreezeCounter() ;
574 LLVOAvatar::updateImpostors(); 576 LLVOAvatar::updateImpostors();
575 glh_set_current_projection(proj); 577 glh_set_current_projection(proj);
576 glh_set_current_modelview(mod); 578 glh_set_current_modelview(mod);
@@ -585,8 +587,30 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
585 587
586 if (!for_snapshot) 588 if (!for_snapshot)
587 { 589 {
588 gPipeline.processImagery(*gCamera); 590 gPipeline.processImagery(*LLViewerCamera::getInstance());
589 gPipeline.generateWaterReflection(*gCamera); 591 gPipeline.generateWaterReflection(*LLViewerCamera::getInstance());
592 }
593
594 //////////////////////////////////////
595 //
596 // Update images, using the image stats generated during object update/culling
597 //
598 // Can put objects onto the retextured list.
599 //
600 // Doing this here gives hardware occlusion queries extra time to complete
601 gFrameStats.start(LLFrameStats::IMAGE_UPDATE);
602
603 {
604 LLFastTimer t(LLFastTimer::FTM_IMAGE_UPDATE);
605
606 LLViewerImage::updateClass(LLViewerCamera::getInstance()->getVelocityStat()->getMean(),
607 LLViewerCamera::getInstance()->getAngularVelocityStat()->getMean());
608
609 gBumpImageList.updateImages(); // must be called before gImageList version so that it's textures are thrown out first.
610
611 const F32 max_image_decode_time = llmin(0.005f, 0.005f*10.f*gFrameIntervalSeconds); // 50 ms/second decode time (no more than 5ms/frame)
612 gImageList.updateImages(max_image_decode_time);
613 stop_glerror();
590 } 614 }
591 615
592 /////////////////////////////////// 616 ///////////////////////////////////
@@ -599,7 +623,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
599 // 623 //
600 { 624 {
601 gFrameStats.start(LLFrameStats::STATE_SORT); 625 gFrameStats.start(LLFrameStats::STATE_SORT);
602 gPipeline.stateSort(*gCamera, result); 626 gPipeline.stateSort(*LLViewerCamera::getInstance(), result);
603 stop_glerror(); 627 stop_glerror();
604 628
605 if (rebuild) 629 if (rebuild)
@@ -650,8 +674,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
650 // (F32)floater_rect.mRight / (F32)gViewerWindow->getWindowWidth(), 674 // (F32)floater_rect.mRight / (F32)gViewerWindow->getWindowWidth(),
651 // (F32)floater_rect.mBottom / (F32)gViewerWindow->getWindowHeight()); 675 // (F32)floater_rect.mBottom / (F32)gViewerWindow->getWindowHeight());
652 // floater_3d_rect.translate(-0.5f, -0.5f); 676 // floater_3d_rect.translate(-0.5f, -0.5f);
653 // glTranslatef(0.f, 0.f, -gCamera->getNear()); 677 // glTranslatef(0.f, 0.f, -LLViewerCamera::getInstance()->getNear());
654 // glScalef(gCamera->getNear() * gCamera->getAspect() / sinf(gCamera->getView()), gCamera->getNear() / sinf(gCamera->getView()), 1.f); 678 // glScalef(LLViewerCamera::getInstance()->getNear() * LLViewerCamera::getInstance()->getAspect() / sinf(LLViewerCamera::getInstance()->getView()), LLViewerCamera::getInstance()->getNear() / sinf(LLViewerCamera::getInstance()->getView()), 1.f);
655 // gGL.color4fv(LLColor4::white.mV); 679 // gGL.color4fv(LLColor4::white.mV);
656 // gGL.begin(GL_QUADS); 680 // gGL.begin(GL_QUADS);
657 // { 681 // {
@@ -678,8 +702,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
678 && !gRestoreGL) 702 && !gRestoreGL)
679 { 703 {
680 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); 704 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
681 LLPipeline::sUnderWaterRender = gCamera->cameraUnderWater() ? TRUE : FALSE; 705 LLPipeline::sUnderWaterRender = LLViewerCamera::getInstance()->cameraUnderWater() ? TRUE : FALSE;
682 gPipeline.renderGeom(*gCamera, TRUE); 706 gPipeline.renderGeom(*LLViewerCamera::getInstance(), TRUE);
683 LLPipeline::sUnderWaterRender = FALSE; 707 LLPipeline::sUnderWaterRender = FALSE;
684 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 708 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
685 709
@@ -691,8 +715,6 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
691 } 715 }
692 stop_glerror(); 716 stop_glerror();
693 } 717 }
694
695 render_hud_attachments();
696 718
697 if (to_texture) 719 if (to_texture)
698 { 720 {
@@ -735,7 +757,7 @@ void render_hud_attachments()
735 757
736 if (LLPipeline::sShowHUDAttachments && !gDisconnected && setup_hud_matrices(FALSE)) 758 if (LLPipeline::sShowHUDAttachments && !gDisconnected && setup_hud_matrices(FALSE))
737 { 759 {
738 LLCamera hud_cam = *gCamera; 760 LLCamera hud_cam = *LLViewerCamera::getInstance();
739 LLVector3 origin = hud_cam.getOrigin(); 761 LLVector3 origin = hud_cam.getOrigin();
740 hud_cam.setOrigin(-1.f,0,0); 762 hud_cam.setOrigin(-1.f,0,0);
741 hud_cam.setAxes(LLVector3(1,0,0), LLVector3(0,1,0), LLVector3(0,0,1)); 763 hud_cam.setAxes(LLVector3(1,0,0), LLVector3(0,1,0), LLVector3(0,0,1));
@@ -763,13 +785,13 @@ void render_hud_attachments()
763 gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_BUMP); 785 gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_BUMP);
764 gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_SIMPLE); 786 gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_SIMPLE);
765 gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_VOLUME); 787 gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_VOLUME);
766 gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_GLOW);
767 gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_ALPHA); 788 gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_ALPHA);
768 789
769 gPipeline.stateSort(hud_cam, result); 790 gPipeline.stateSort(hud_cam, result);
770 791
771 gPipeline.renderGeom(hud_cam); 792 gPipeline.renderGeom(hud_cam);
772 793
794 render_hud_elements();
773 //restore type mask 795 //restore type mask
774 gPipeline.setRenderTypeMask(mask); 796 gPipeline.setRenderTypeMask(mask);
775 if (has_ui) 797 if (has_ui)
@@ -818,12 +840,12 @@ BOOL setup_hud_matrices(BOOL for_select)
818 //RN: reset viewport to window extents so ortho screen is calculated with proper reference frame 840 //RN: reset viewport to window extents so ortho screen is calculated with proper reference frame
819 gViewerWindow->setupViewport(); 841 gViewerWindow->setupViewport();
820 } 842 }
821 glh::matrix4f proj = gl_ortho(-0.5f * gCamera->getAspect(), 0.5f * gCamera->getAspect(), -0.5f, 0.5f, 0.f, hud_depth); 843 glh::matrix4f proj = gl_ortho(-0.5f * LLViewerCamera::getInstance()->getAspect(), 0.5f * LLViewerCamera::getInstance()->getAspect(), -0.5f, 0.5f, 0.f, hud_depth);
822 proj.element(2,2) = -0.01f; 844 proj.element(2,2) = -0.01f;
823 845
824 // apply camera zoom transform (for high res screenshots) 846 // apply camera zoom transform (for high res screenshots)
825 F32 zoom_factor = gCamera->getZoomFactor(); 847 F32 zoom_factor = LLViewerCamera::getInstance()->getZoomFactor();
826 S16 sub_region = gCamera->getZoomSubRegion(); 848 S16 sub_region = LLViewerCamera::getInstance()->getZoomSubRegion();
827 if (zoom_factor > 1.f) 849 if (zoom_factor > 1.f)
828 { 850 {
829 float offset = zoom_factor - 1.f; 851 float offset = zoom_factor - 1.f;
@@ -831,7 +853,7 @@ BOOL setup_hud_matrices(BOOL for_select)
831 int pos_x = sub_region - (pos_y*llceil(zoom_factor)); 853 int pos_x = sub_region - (pos_y*llceil(zoom_factor));
832 glh::matrix4f mat; 854 glh::matrix4f mat;
833 mat.set_scale(glh::vec3f(zoom_factor, zoom_factor, 1.f)); 855 mat.set_scale(glh::vec3f(zoom_factor, zoom_factor, 1.f));
834 mat.set_translate(glh::vec3f(gCamera->getAspect() * 0.5f * (offset - (F32)pos_x * 2.f), 0.5f * (offset - (F32)pos_y * 2.f), 0.f)); 856 mat.set_translate(glh::vec3f(LLViewerCamera::getInstance()->getAspect() * 0.5f * (offset - (F32)pos_x * 2.f), 0.5f * (offset - (F32)pos_y * 2.f), 0.f));
835 proj *= mat; 857 proj *= mat;
836 } 858 }
837 859
@@ -873,6 +895,9 @@ void render_ui_and_swap()
873 { 895 {
874 gPipeline.renderBloom(gSnapshot); 896 gPipeline.renderBloom(gSnapshot);
875 } 897 }
898
899 render_hud_elements();
900 render_hud_attachments();
876 } 901 }
877 902
878 LLGLSDefault gls_default; 903 LLGLSDefault gls_default;
@@ -1049,8 +1074,8 @@ void render_ui_2d()
1049 // Menu overlays, HUD, etc 1074 // Menu overlays, HUD, etc
1050 gViewerWindow->setup2DRender(); 1075 gViewerWindow->setup2DRender();
1051 1076
1052 F32 zoom_factor = gCamera->getZoomFactor(); 1077 F32 zoom_factor = LLViewerCamera::getInstance()->getZoomFactor();
1053 S16 sub_region = gCamera->getZoomSubRegion(); 1078 S16 sub_region = LLViewerCamera::getInstance()->getZoomSubRegion();
1054 1079
1055 if (zoom_factor > 1.f) 1080 if (zoom_factor > 1.f)
1056 { 1081 {
diff --git a/linden/indra/newview/llviewerimage.cpp b/linden/indra/newview/llviewerimage.cpp
index 7cac905..0316c10 100644
--- a/linden/indra/newview/llviewerimage.cpp
+++ b/linden/indra/newview/llviewerimage.cpp
@@ -206,6 +206,16 @@ LLViewerImage::LLViewerImage(const LLUUID& id, BOOL usemipmaps)
206 sImageCount++; 206 sImageCount++;
207} 207}
208 208
209LLViewerImage::LLViewerImage(const LLString& filename, const LLUUID& id, BOOL usemipmaps)
210 : LLImageGL(usemipmaps),
211 mID(id)
212{
213 mLocalFileName = gDirUtilp->getExpandedFilename(LL_PATH_SKINS, "textures", filename);
214 init(true);
215 sImageCount++;
216}
217
218
209LLViewerImage::LLViewerImage(const U32 width, const U32 height, const U8 components, BOOL usemipmaps) 219LLViewerImage::LLViewerImage(const U32 width, const U32 height, const U8 components, BOOL usemipmaps)
210 : LLImageGL(width, height, components, usemipmaps) 220 : LLImageGL(width, height, components, usemipmaps)
211{ 221{
@@ -232,6 +242,8 @@ void LLViewerImage::init(bool firstinit)
232{ 242{
233 mFullWidth = 0; 243 mFullWidth = 0;
234 mFullHeight = 0; 244 mFullHeight = 0;
245 mOrigWidth = 0;
246 mOrigHeight = 0;
235 mNeedsAux = FALSE; 247 mNeedsAux = FALSE;
236 mTexelsPerImage = 64.f*64.f; 248 mTexelsPerImage = 64.f*64.f;
237 mMaxVirtualSize = 0.f; 249 mMaxVirtualSize = 0.f;
@@ -290,6 +302,8 @@ void LLViewerImage::dump()
290 << " mIsMissingAsset " << (S32)mIsMissingAsset 302 << " mIsMissingAsset " << (S32)mIsMissingAsset
291 << " mFullWidth " << mFullWidth 303 << " mFullWidth " << mFullWidth
292 << " mFullHeight " << mFullHeight 304 << " mFullHeight " << mFullHeight
305 << " mOrigWidth" << mOrigWidth
306 << " mOrigHeight" << mOrigHeight
293 << llendl; 307 << llendl;
294} 308}
295 309
@@ -359,6 +373,22 @@ BOOL LLViewerImage::createTexture(S32 usename/*= 0*/)
359 BOOL res = TRUE; 373 BOOL res = TRUE;
360 if (!gNoRender) 374 if (!gNoRender)
361 { 375 {
376 // store original size only for locally-sourced images
377 if (!mLocalFileName.empty())
378 {
379 mOrigWidth = mRawImage->getWidth();
380 mOrigHeight = mRawImage->getHeight();
381
382 // leave black border, do not scale image content
383 mRawImage->expandToPowerOfTwo(MAX_IMAGE_SIZE, FALSE);
384 }
385 else
386 {
387 mOrigWidth = mFullWidth;
388 mOrigHeight = mFullHeight;
389 }
390
391
362 if (LLImageGL::checkSize(mRawImage->getWidth(), mRawImage->getHeight())) 392 if (LLImageGL::checkSize(mRawImage->getWidth(), mRawImage->getHeight()))
363 { 393 {
364 res = LLImageGL::createGLTexture(mRawDiscardLevel, mRawImage, usename); 394 res = LLImageGL::createGLTexture(mRawDiscardLevel, mRawImage, usename);
@@ -592,6 +622,10 @@ F32 LLViewerImage::calcDecodePriority()
592 // Don't decode anything we don't need 622 // Don't decode anything we don't need
593 priority = -1.0f; 623 priority = -1.0f;
594 } 624 }
625 else if (mBoostLevel == LLViewerImage::BOOST_UI)
626 {
627 priority = 1.f;
628 }
595 else if (pixel_priority <= 0.f && (cur_discard < 0 || mDesiredDiscardLevel < cur_discard)) 629 else if (pixel_priority <= 0.f && (cur_discard < 0 || mDesiredDiscardLevel < cur_discard))
596 { 630 {
597 // Not on screen but we might want some data 631 // Not on screen but we might want some data
@@ -782,12 +816,11 @@ bool LLViewerImage::updateFetch()
782 816
783 if (!mIsFetching) 817 if (!mIsFetching)
784 { 818 {
785 if (mRawDiscardLevel < 0) 819 if (mRawDiscardLevel < 0 || mRawDiscardLevel == INVALID_DISCARD_LEVEL)
786 { 820 {
787 // We finished but received no data 821 // We finished but received no data
788 if (current_discard < 0) 822 if (current_discard < 0)
789 { 823 {
790 llwarns << mID << ": Marking image as missing" << llendl;
791 setIsMissingAsset(); 824 setIsMissingAsset();
792 desired_discard = -1; 825 desired_discard = -1;
793 } 826 }
@@ -864,9 +897,23 @@ bool LLViewerImage::updateFetch()
864 desired_discard = llmax(desired_discard, current_discard-2); 897 desired_discard = llmax(desired_discard, current_discard-2);
865 } 898 }
866 } 899 }
867 if (LLAppViewer::getTextureFetch()->createRequest(getID(),getTargetHost(), decode_priority, 900
868 w, h, c, desired_discard, 901 // bypass texturefetch directly by pulling from LLTextureCache
869 needsAux())) 902 bool fetch_request_created = false;
903 if (mLocalFileName.empty())
904 {
905 fetch_request_created = LLAppViewer::getTextureFetch()->createRequest(getID(), getTargetHost(), decode_priority,
906 w, h, c, desired_discard,
907 needsAux());
908 }
909 else
910 {
911 fetch_request_created = LLAppViewer::getTextureFetch()->createRequest(mLocalFileName, getID(),getTargetHost(), decode_priority,
912 w, h, c, desired_discard,
913 needsAux());
914 }
915
916 if (fetch_request_created)
870 { 917 {
871 mHasFetcher = TRUE; 918 mHasFetcher = TRUE;
872 mIsFetching = TRUE; 919 mIsFetching = TRUE;
@@ -874,6 +921,7 @@ bool LLViewerImage::updateFetch()
874 mFetchState = LLAppViewer::getTextureFetch()->getFetchState(mID, mDownloadProgress, mRequestedDownloadPriority, 921 mFetchState = LLAppViewer::getTextureFetch()->getFetchState(mID, mDownloadProgress, mRequestedDownloadPriority,
875 mFetchPriority, mFetchDeltaTime, mRequestDeltaTime); 922 mFetchPriority, mFetchDeltaTime, mRequestDeltaTime);
876 } 923 }
924
877 // if createRequest() failed, we're finishing up a request for this UUID, 925 // if createRequest() failed, we're finishing up a request for this UUID,
878 // wait for it to complete 926 // wait for it to complete
879 } 927 }
@@ -896,6 +944,7 @@ bool LLViewerImage::updateFetch()
896 944
897void LLViewerImage::setIsMissingAsset() 945void LLViewerImage::setIsMissingAsset()
898{ 946{
947 llwarns << mLocalFileName << " " << mID << ": Marking image as missing" << llendl;
899 if (mHasFetcher) 948 if (mHasFetcher)
900 { 949 {
901 LLAppViewer::getTextureFetch()->deleteRequest(getID(), true); 950 LLAppViewer::getTextureFetch()->deleteRequest(getID(), true);
diff --git a/linden/indra/newview/llviewerimage.h b/linden/indra/newview/llviewerimage.h
index c90a672..a84cb72 100644
--- a/linden/indra/newview/llviewerimage.h
+++ b/linden/indra/newview/llviewerimage.h
@@ -182,6 +182,7 @@ protected:
182 /*virtual*/ ~LLViewerImage(); 182 /*virtual*/ ~LLViewerImage();
183 183
184public: 184public:
185 LLViewerImage(const LLString& filename, const LLUUID& id, BOOL usemipmaps = TRUE);
185 LLViewerImage(const LLUUID& id, BOOL usemipmaps = TRUE); 186 LLViewerImage(const LLUUID& id, BOOL usemipmaps = TRUE);
186 LLViewerImage(const U32 width, const U32 height, const U8 components, BOOL usemipmaps); 187 LLViewerImage(const U32 width, const U32 height, const U8 components, BOOL usemipmaps);
187 LLViewerImage(const LLImageRaw* raw, BOOL usemipmaps); 188 LLViewerImage(const LLImageRaw* raw, BOOL usemipmaps);
@@ -291,6 +292,11 @@ public:
291 292
292 bool doLoadedCallbacks(); 293 bool doLoadedCallbacks();
293 294
295 // returns dimensions of original image for local files (before power of two scaling)
296 // and returns 0 for all asset system images
297 S32 getOriginalWidth() { return mOrigWidth; }
298 S32 getOriginalHeight() { return mOrigHeight; }
299
294private: 300private:
295 /*virtual*/ void cleanup(); // Cleanup the LLViewerImage (so we can reinitialize it) 301 /*virtual*/ void cleanup(); // Cleanup the LLViewerImage (so we can reinitialize it)
296 302
@@ -304,6 +310,10 @@ public:
304 S32 mFullWidth; 310 S32 mFullWidth;
305 S32 mFullHeight; 311 S32 mFullHeight;
306 312
313 S32 mOrigWidth;
314 S32 mOrigHeight;
315 LLString mLocalFileName;
316
307 // Data used for calculating required image priority/quality level/decimation 317 // Data used for calculating required image priority/quality level/decimation
308 mutable F32 mMaxVirtualSize; // The largest virtual size of the image, in pixels - how much data to we need? 318 mutable F32 mMaxVirtualSize; // The largest virtual size of the image, in pixels - how much data to we need?
309 mutable F32 mMaxCosAngle; // The largest cos of the angle between camera X vector and the object 319 mutable F32 mMaxCosAngle; // The largest cos of the angle between camera X vector and the object
diff --git a/linden/indra/newview/llviewerimagelist.cpp b/linden/indra/newview/llviewerimagelist.cpp
index faa0afb..88759af 100644
--- a/linden/indra/newview/llviewerimagelist.cpp
+++ b/linden/indra/newview/llviewerimagelist.cpp
@@ -86,10 +86,9 @@ LLStat LLViewerImageList::sFormattedMemStat(32, TRUE);
86/////////////////////////////////////////////////////////////////////////////// 86///////////////////////////////////////////////////////////////////////////////
87 87
88LLViewerImageList::LLViewerImageList() 88LLViewerImageList::LLViewerImageList()
89 : LLImageProviderInterface(), 89 : mForceResetTextureStats(FALSE),
90 mForceResetTextureStats(FALSE), 90 mUpdateStats(FALSE),
91 mUpdateStats(FALSE), 91 mMaxResidentTexMem(0)
92 mMaxResidentTexMem(0)
93{ 92{
94} 93}
95 94
@@ -118,228 +117,42 @@ void LLViewerImageList::doPreloadImages()
118 llinfos << "Preloading images..." << llendl; 117 llinfos << "Preloading images..." << llendl;
119 118
120 // Set the "missing asset" image 119 // Set the "missing asset" image
121 LLViewerImage::sMissingAssetImagep = preloadUIImage("missing_asset.tga" , LLUUID::null, TRUE); 120 LLViewerImage::sMissingAssetImagep = getImageFromFile("missing_asset.tga");
122 121
123 // Set the "white" image 122 // Set the "white" image
124 LLViewerImage::sWhiteImagep = preloadUIImage("white.tga", LLUUID::null, TRUE);; 123 LLViewerImage::sWhiteImagep = getImageFromFile("white.tga");
125 124
126 // Speeds up startup by 4-5 seconds. JC 125 LLUIImageList* image_list = LLUIImageList::getInstance();
127 if (!gPreloadImages) return; 126
128 127 image_list->initFromFile(gDirUtilp->getExpandedFilename(LL_PATH_SKINS, "textures", "textures.xml"));
129 LLViewerImage* image; 128
130 // Images listed here are immediately decoded, before the login screen. 129 // prefetch specific UUIDs
131 // Since this slows down perceived viewer startup time, only include 130 getImage(IMG_SHOT, TRUE);
132 // images here for buttons/checkboxes/etc. that are immediately visible. 131 getImage(IMG_SMOKE_POOF, TRUE);
133 preloadUIImage("button_disabled_32x128.tga", LLUUID::null, FALSE, LLRectf(.125f, 0.5f, .875f, 0.5f )); 132 LLViewerImage* image = getImageFromFile("silhouette.j2c", MIPMAP_YES, IMMEDIATE_YES);
134 preloadUIImage("button_enabled_32x128.tga", LLUUID::null, FALSE, LLRectf(.125f, 0.5f, .875f, 0.5f )); 133 if (image)
135 preloadUIImage("button_enabled_selected_32x128.tga", LLUUID::null, FALSE, LLRectf(.125f, 0.5f, .875f, 0.5f )); 134 {
136 preloadUIImage("checkbox_disabled_false.tga", LLUUID::null, FALSE); 135 image->setClamp(FALSE, FALSE);
137 preloadUIImage("checkbox_disabled_true.tga", LLUUID::null, FALSE); 136 mImagePreloads.insert(image);
138 preloadUIImage("checkbox_enabled_false.tga", LLUUID::null, FALSE); 137 }
139 preloadUIImage("checkbox_enabled_true.tga", LLUUID::null, FALSE); 138 image = getImageFromFile("noentrylines.j2c", MIPMAP_YES, IMMEDIATE_YES);
140 preloadUIImage("close_in_blue.tga", LLUUID::null, FALSE); 139 if (image)
141 preloadUIImage("combobox_arrow.tga", LLUUID::null, FALSE); 140 {
142 preloadUIImage("minimize.tga", LLUUID::null, FALSE); 141 image->setClamp(FALSE, FALSE);
143 preloadUIImage("minimize_pressed.tga", LLUUID::null, FALSE); 142 mImagePreloads.insert(image);
144 preloadUIImage("radio_active_false.tga", LLUUID::null, FALSE); 143 }
145 preloadUIImage("radio_active_true.tga", LLUUID::null, FALSE); 144 image = getImageFromFile("noentrypasslines.j2c", MIPMAP_YES, IMMEDIATE_YES);
146 preloadUIImage("radio_inactive_false.tga", LLUUID::null, FALSE); 145 if (image)
147 preloadUIImage("radio_inactive_true.tga", LLUUID::null, FALSE); 146 {
148 preloadUIImage("resize_handle_bottom_right_blue.tga", LLUUID::null, FALSE); 147 image->setClamp(FALSE, FALSE);
149 preloadUIImage("rounded_square.tga", LLUUID::null, FALSE, LLRectf(.125f, 0.5f, .875f, 0.5f )); 148 mImagePreloads.insert(image);
150 preloadUIImage("rounded_square_soft.tga", LLUUID::null, FALSE, LLRectf(.125f, 0.5f, .875f, 0.5f )); 149 }
151 preloadUIImage("scrollbutton_down_in_blue.tga", LLUUID::null, FALSE); 150 image = getImage(DEFAULT_WATER_NORMAL, MIPMAP_YES, IMMEDIATE_YES);
152 preloadUIImage("scrollbutton_down_out_blue.tga", LLUUID::null, FALSE); 151 if (image)
153 preloadUIImage("scrollbutton_left_in_blue.tga", LLUUID::null, FALSE); 152 {
154 preloadUIImage("scrollbutton_left_out_blue.tga", LLUUID::null, FALSE); 153 image->setClamp(FALSE, FALSE);
155 preloadUIImage("scrollbutton_right_in_blue.tga", LLUUID::null, FALSE); 154 mImagePreloads.insert(image);
156 preloadUIImage("scrollbutton_right_out_blue.tga", LLUUID::null, FALSE); 155 }
157 preloadUIImage("scrollbutton_up_in_blue.tga", LLUUID::null, FALSE);
158 preloadUIImage("scrollbutton_up_out_blue.tga", LLUUID::null, FALSE);
159 preloadUIImage("spin_down_in_blue.tga", LLUUID::null, FALSE);
160 preloadUIImage("spin_down_out_blue.tga", LLUUID::null, FALSE);
161 preloadUIImage("spin_up_in_blue.tga", LLUUID::null, FALSE);
162 preloadUIImage("spin_up_out_blue.tga", LLUUID::null, FALSE);
163 preloadUIImage("square_btn_32x128.tga", LLUUID::null, FALSE, LLRectf(.125f, 0.5f, .875f, 0.5f ));
164 preloadUIImage("square_btn_selected_32x128.tga", LLUUID::null, FALSE, LLRectf(.125f, 0.5f, .875f, 0.5f ));
165 preloadUIImage("startup_logo.tga", LLUUID::null, FALSE); // -- needed?
166 preloadUIImage("tab_bottom_blue.tga", LLUUID::null, FALSE, LLRectf(0.109375f, 1.f - 0.4375f, 1.f - 0.109375f, 0.4375f));
167 preloadUIImage("tab_bottom_selected_blue.tga", LLUUID::null, FALSE, LLRectf(0.109375f, 1.f - 0.4375f, 1.f - 0.109375f, 0.4375f));
168 preloadUIImage("tab_left.tga", LLUUID::null, FALSE, LLRectf(.125f, 0.5f, .875f, 0.5f ));
169 preloadUIImage("tab_left_selected.tga", LLUUID::null, FALSE, LLRectf(.125f, 0.5f, .875f, 0.5f ));
170 preloadUIImage("tab_top_blue.tga", LLUUID::null, FALSE, LLRectf(0.109375f, 1.f - 0.4375f, 1.f - 0.109375f, 0.4375f));
171 preloadUIImage("tab_top_selected_blue.tga", LLUUID::null, FALSE, LLRectf(0.109375f, 1.f - 0.4375f, 1.f - 0.109375f, 0.4375f));
172
173 decodeAllImages(2.f); // decode preloaded images
174
175 // These images are queued for decode during the login sequence, when
176 // we have a progress bar.
177 preloadUIImage("active_voice_tab.tga", LLUUID::null, FALSE);
178 preloadUIImage("button_anim_pause.tga", LLUUID::null, FALSE);
179 preloadUIImage("button_anim_pause_selected.tga", LLUUID::null, FALSE);
180 preloadUIImage("button_anim_play.tga", LLUUID::null, FALSE);
181 preloadUIImage("button_anim_play_selected.tga", LLUUID::null, FALSE);
182 preloadUIImage("button_anim_stop.tga", LLUUID::null, FALSE);
183 preloadUIImage("button_anim_stop_selected.tga", LLUUID::null, FALSE);
184 preloadUIImage("crosshairs.tga", LLUUID::null, FALSE);
185 preloadUIImage("direction_arrow.tga", LLUUID::null, FALSE);
186 preloadUIImage("eyes.tga", LLUUID::null, TRUE);
187 preloadUIImage("foot_shadow.tga", LLUUID::null, TRUE);
188 preloadUIImage("hair.tga", LLUUID::null, TRUE);
189 preloadUIImage("icon_diurnal.tga", LLUUID::null, TRUE);
190 preloadUIImage("icon_for_sale.tga", LLUUID::null, FALSE);
191 preloadUIImage("icon_popular.tga", LLUUID::null, FALSE);
192 preloadUIImage("icon_top_pick.tga", LLUUID::null, FALSE);
193 preloadUIImage("icon_group.tga", LLUUID::null, FALSE);
194 preloadUIImage("icon_lock.tga", LLUUID::null, FALSE);
195 preloadUIImage("img_shot.tga", IMG_SHOT, TRUE);
196 preloadUIImage("img_smoke_poof.tga", IMG_SMOKE_POOF, TRUE);
197 preloadUIImage("inv_folder_animation.tga", LLUUID::null, FALSE);
198 preloadUIImage("inv_folder_bodypart.tga", LLUUID::null, FALSE);
199 preloadUIImage("inv_folder_callingcard.tga", LLUUID::null, FALSE);
200 preloadUIImage("inv_folder_clothing.tga", LLUUID::null, FALSE);
201 preloadUIImage("inv_folder_gesture.tga", LLUUID::null, FALSE);
202 preloadUIImage("inv_folder_landmark.tga", LLUUID::null, FALSE);
203 preloadUIImage("inv_folder_lostandfound.tga", LLUUID::null, FALSE);
204 preloadUIImage("inv_folder_notecard.tga", LLUUID::null, FALSE);
205 preloadUIImage("inv_folder_object.tga", LLUUID::null, FALSE);
206 preloadUIImage("inv_folder_plain_closed.tga", LLUUID::null, FALSE);
207 preloadUIImage("inv_folder_script.tga", LLUUID::null, FALSE);
208 preloadUIImage("inv_folder_snapshot.tga", LLUUID::null, FALSE);
209 preloadUIImage("inv_folder_sound.tga", LLUUID::null, FALSE);
210 preloadUIImage("inv_folder_texture.tga", LLUUID::null, FALSE);
211 preloadUIImage("inv_folder_trash.tga", LLUUID::null, FALSE);
212 preloadUIImage("inv_item_animation.tga", LLUUID::null, FALSE);
213 preloadUIImage("inv_item_bodypart.tga", LLUUID::null, FALSE);
214 preloadUIImage("inv_item_callingcard_offline.tga", LLUUID::null, FALSE);
215 preloadUIImage("inv_item_callingcard_online.tga", LLUUID::null, FALSE);
216 preloadUIImage("inv_item_eyes.tga", LLUUID::null, FALSE);
217 preloadUIImage("inv_item_gesture.tga", LLUUID::null, FALSE);
218 preloadUIImage("inv_item_gloves.tga", LLUUID::null, FALSE);
219 preloadUIImage("inv_item_hair.tga", LLUUID::null, FALSE);
220 preloadUIImage("inv_item_jacket.tga", LLUUID::null, FALSE);
221 preloadUIImage("inv_item_landmark.tga", LLUUID::null, FALSE);
222 preloadUIImage("inv_item_landmark_visited.tga", LLUUID::null, FALSE);
223 preloadUIImage("inv_item_notecard.tga", LLUUID::null, FALSE);
224 preloadUIImage("inv_item_object.tga", LLUUID::null, FALSE);
225 preloadUIImage("inv_item_object_multi.tga", LLUUID::null, FALSE);
226 preloadUIImage("inv_item_pants.tga", LLUUID::null, FALSE);
227 preloadUIImage("inv_item_script.tga", LLUUID::null, FALSE);
228 preloadUIImage("inv_item_shape.tga", LLUUID::null, FALSE);
229 preloadUIImage("inv_item_shirt.tga", LLUUID::null, FALSE);
230 preloadUIImage("inv_item_shoes.tga", LLUUID::null, FALSE);
231 preloadUIImage("inv_item_skirt.tga", LLUUID::null, FALSE);
232 preloadUIImage("inv_item_snapshot.tga", LLUUID::null, FALSE);
233 preloadUIImage("inv_item_socks.tga", LLUUID::null, FALSE);
234 preloadUIImage("inv_item_sound.tga", LLUUID::null, FALSE);
235 preloadUIImage("inv_item_texture.tga", LLUUID::null, FALSE);
236 preloadUIImage("inv_item_underpants.tga", LLUUID::null, FALSE);
237 preloadUIImage("inv_item_undershirt.tga", LLUUID::null, FALSE);
238 preloadUIImage("lag_status_critical.tga", LLUUID::null, FALSE);
239 preloadUIImage("lag_status_good.tga", LLUUID::null, FALSE);
240 preloadUIImage("lag_status_warning.tga", LLUUID::null, FALSE);
241 preloadUIImage("legend.tga", LLUUID::null, FALSE);
242 preloadUIImage("map_avatar_16.tga", LLUUID::null, FALSE);
243 preloadUIImage("map_avatar_8.tga", LLUUID::null, FALSE);
244 preloadUIImage("map_avatar_you_8.tga", LLUUID::null, FALSE);
245 preloadUIImage("map_event.tga", LLUUID::null, FALSE);
246 preloadUIImage("map_event_mature.tga", LLUUID::null, FALSE);
247 preloadUIImage("map_home.tga", LLUUID::null, FALSE);
248 preloadUIImage("map_infohub.tga", LLUUID::null, FALSE);
249 preloadUIImage("map_telehub.tga", LLUUID::null, FALSE);
250 preloadUIImage("map_track_16.tga", LLUUID::null, FALSE);
251 preloadUIImage("media_icon.tga", LLUUID::null, FALSE);
252 preloadUIImage("music_icon.tga", LLUUID::null, FALSE);
253 image = preloadUIImage("noentrylines.tga", LLUUID::null, TRUE);
254 if (image) image->setClamp(FALSE, FALSE);
255 image = preloadUIImage("noentrypasslines.tga", LLUUID::null, TRUE);
256 if (image) image->setClamp(FALSE, FALSE);
257 preloadUIImage("notify_tip_icon.tga", LLUUID::null, FALSE);
258 preloadUIImage("notify_caution_icon.tga", LLUUID::null, FALSE);
259 preloadUIImage("notify_box_icon.tga", LLUUID::null, FALSE);
260 preloadUIImage("object_cone.tga", LLUUID::null, FALSE);
261 preloadUIImage("object_cone_active.tga", LLUUID::null, FALSE);
262 preloadUIImage("object_cube.tga", LLUUID::null, FALSE);
263 preloadUIImage("object_cube_active.tga", LLUUID::null, FALSE);
264 preloadUIImage("object_cylinder.tga", LLUUID::null, FALSE);
265 preloadUIImage("object_cylinder_active.tga", LLUUID::null, FALSE);
266 preloadUIImage("object_grass.tga", LLUUID::null, FALSE);
267 preloadUIImage("object_grass_active.tga", LLUUID::null, FALSE);
268 preloadUIImage("object_hemi_cone.tga", LLUUID::null, FALSE);
269 preloadUIImage("object_hemi_cone_active.tga", LLUUID::null, FALSE);
270 preloadUIImage("object_hemi_cylinder.tga", LLUUID::null, FALSE);
271 preloadUIImage("object_hemi_cylinder_active.tga", LLUUID::null, FALSE);
272 preloadUIImage("object_hemi_sphere.tga", LLUUID::null, FALSE);
273 preloadUIImage("object_hemi_sphere_active.tga", LLUUID::null, FALSE);
274 preloadUIImage("object_prism.tga", LLUUID::null, FALSE);
275 preloadUIImage("object_prism_active.tga", LLUUID::null, FALSE);
276 preloadUIImage("object_pyramid.tga", LLUUID::null, FALSE);
277 preloadUIImage("object_pyramid_active.tga", LLUUID::null, FALSE);
278 preloadUIImage("object_ring.tga", LLUUID::null, FALSE);
279 preloadUIImage("object_ring_active.tga", LLUUID::null, FALSE);
280 preloadUIImage("object_sphere.tga", LLUUID::null, FALSE);
281 preloadUIImage("object_sphere_active.tga", LLUUID::null, FALSE);
282 preloadUIImage("object_tetrahedron.tga", LLUUID::null, FALSE);
283 preloadUIImage("object_tetrahedron_active.tga", LLUUID::null, FALSE);
284 preloadUIImage("object_torus.tga", LLUUID::null, FALSE);
285 preloadUIImage("object_torus_active.tga", LLUUID::null, FALSE);
286 preloadUIImage("object_tree.tga", LLUUID::null, FALSE);
287 preloadUIImage("object_tree_active.tga", LLUUID::null, FALSE);
288 preloadUIImage("object_tube.tga", LLUUID::null, FALSE);
289 preloadUIImage("object_tube_active.tga", LLUUID::null, FALSE);
290 preloadUIImage("pixiesmall.tga", LLUUID::null, TRUE);
291 preloadUIImage("script_error.tga", LLUUID::null, TRUE);
292 image = preloadUIImage("silhouette.tga", LLUUID::null, TRUE);
293 if (image) image->setClamp(FALSE, FALSE);
294 preloadUIImage("status_no_build.tga", LLUUID::null, FALSE);
295 preloadUIImage("status_buy_currency.tga", LLUUID::null, FALSE);
296 preloadUIImage("status_buy_currency_pressed.tga", LLUUID::null, FALSE);
297 preloadUIImage("status_buy_land.tga", LLUUID::null, FALSE);
298 preloadUIImage("status_buy_land_pressed.tga", LLUUID::null, FALSE);
299 preloadUIImage("status_no_fly.tga", LLUUID::null, FALSE);
300 preloadUIImage("status_health.tga", LLUUID::null, FALSE);
301 preloadUIImage("status_no_push.tga", LLUUID::null, FALSE);
302 preloadUIImage("status_no_scripts.tga", LLUUID::null, FALSE);
303 preloadUIImage("tool_dozer.tga", LLUUID::null, FALSE);
304 preloadUIImage("tool_dozer_active.tga", LLUUID::null, FALSE);
305 preloadUIImage("tool_zoom.tga", LLUUID::null, FALSE);
306 preloadUIImage("tool_zoom_active.tga", LLUUID::null, FALSE);
307 preloadUIImage("icn-overlay_volume-panel.tga", LLUUID::null, FALSE);
308 preloadUIImage("icn_active-speakers-dot-lvl0.tga", LLUUID::null, FALSE);
309 preloadUIImage("icn_active-speakers-dot-lvl1.tga", LLUUID::null, FALSE);
310 preloadUIImage("icn_active-speakers-dot-lvl2.tga", LLUUID::null, FALSE);
311 preloadUIImage("icn_active-speakers-typing1.tga", LLUUID::null, FALSE);
312 preloadUIImage("icn_active-speakers-typing2.tga", LLUUID::null, FALSE);
313 preloadUIImage("icn_active-speakers-typing3.tga", LLUUID::null, FALSE);
314 preloadUIImage("icn_voice_ptt-off.tga", LLUUID::null, FALSE);
315 preloadUIImage("icn_voice_ptt-on.tga", LLUUID::null, FALSE);
316 preloadUIImage("icn_voice_ptt-on-lvl1.tga", LLUUID::null, FALSE);
317 preloadUIImage("icn_voice_ptt-on-lvl2.tga", LLUUID::null, FALSE);
318 preloadUIImage("icn_voice_ptt-on-lvl3.tga", LLUUID::null, FALSE);
319 preloadUIImage("lag_status_good.tga", LLUUID::null, FALSE);
320 preloadUIImage("lag_status_warning.tga", LLUUID::null, FALSE);
321 preloadUIImage("lag_status_critical.tga", LLUUID::null, FALSE);
322 preloadUIImage("icn_voice-call-end.tga", LLUUID::null, FALSE);
323 preloadUIImage("icn_voice-call-start.tga", LLUUID::null, FALSE);
324 preloadUIImage("mute_icon.tga", LLUUID::null, FALSE);
325 preloadUIImage("icn-overlay_volume-panel.tga", LLUUID::null, FALSE);
326 preloadUIImage("icn_slide-groove_dark.tga", LLUUID::null, FALSE);
327 preloadUIImage("icn_slide-highlight.tga", LLUUID::null, FALSE);
328 preloadUIImage("icn_slide-thumb_dark.tga", LLUUID::null, FALSE);
329 preloadUIImage("icn_speaker-muted_dark.tga", LLUUID::null, FALSE);
330 preloadUIImage("icn_speaker_dark.tga", LLUUID::null, FALSE);
331 preloadUIImage("icn_voice-localchat.tga", LLUUID::null, FALSE);
332 preloadUIImage("icn_voice-groupfocus.tga", LLUUID::null, FALSE);
333 preloadUIImage("icn_voice-pvtfocus.tga", LLUUID::null, FALSE);
334 // TODO: Add images for media remote
335 preloadUIImage("icn_chatbar.tga", LLUUID::null, FALSE);
336 preloadUIImage("btn_chatbar.tga", LLUUID::null, FALSE, LLRectf(0.5f, 0.5f, 0.5f, 0.5f));
337 preloadUIImage("btn_chatbar_selected.tga", LLUUID::null, FALSE, LLRectf(0.5f, 0.5f, 0.5f, 0.5f));
338 preloadUIImage("icn_rounded-text-field.tga", LLUUID::null, FALSE);
339 preloadUIImage("flyout_btn_right_selected.tga", LLUUID::null, FALSE, LLRectf(0.125f, 0.5f, 0.2f, 0.5f));
340 preloadUIImage("flyout_btn_right.tga", LLUUID::null, FALSE, LLRectf(0.125f, 0.5f, 0.2f, 0.5f));
341 preloadUIImage("flyout_btn_left_selected.tga", LLUUID::null, FALSE, LLRectf(0.8f, 0.5f, 0.875f, 0.5f));
342 preloadUIImage("flyout_btn_left.tga", LLUUID::null, FALSE, LLRectf(0.8f, 0.5f, 0.875f, 0.5f));
343} 156}
344 157
345static std::string get_texture_list_name() 158static std::string get_texture_list_name()
@@ -390,6 +203,9 @@ LLViewerImageList::~LLViewerImageList()
390 203
391void LLViewerImageList::shutdown() 204void LLViewerImageList::shutdown()
392{ 205{
206 // clear out preloads
207 mImagePreloads.clear();
208
393 // Write out list of currently loaded textures for precaching on startup 209 // Write out list of currently loaded textures for precaching on startup
394 typedef std::set<std::pair<S32,LLViewerImage*> > image_area_list_t; 210 typedef std::set<std::pair<S32,LLViewerImage*> > image_area_list_t;
395 image_area_list_t image_area_list; 211 image_area_list_t image_area_list;
@@ -438,9 +254,6 @@ void LLViewerImageList::shutdown()
438 mCallbackList.clear(); 254 mCallbackList.clear();
439 mIRCallbackData.clear(); 255 mIRCallbackData.clear();
440 256
441 // Clean up preloaded images
442 mUIImages.clear();
443
444 // Flush all of the references 257 // Flush all of the references
445 mLoadingStreamList.clear(); 258 mLoadingStreamList.clear();
446 mCreateTextureList.clear(); 259 mCreateTextureList.clear();
@@ -484,66 +297,14 @@ void LLViewerImageList::restoreGL()
484 const LLUUID BAD_IMG_TWO("bea77041-5835-1661-f298-47e2d32b7a70"); 297 const LLUUID BAD_IMG_TWO("bea77041-5835-1661-f298-47e2d32b7a70");
485 */ 298 */
486 299
487LLImageGL* LLViewerImageList::getImageByID(const LLUUID& image_id, BOOL clamped)
488{
489 LLViewerImage* imagep = getImage(image_id, MIPMAP_FALSE, TRUE);
490 // force a high resolution decode for all UI images (pulled this from LLTextEditor)
491 // this might not make any difference
492 imagep->setBoostLevel(LLViewerImage::BOOST_UI);
493 LLViewerImage::bindTexture(imagep);
494 imagep->setClamp(clamped, clamped);
495 imagep->unbindTexture(0, GL_TEXTURE_2D);
496
497 return (LLImageGL*)imagep;
498}
499
500LLUIImage* LLViewerImageList::getUIImageByID(const LLUUID& image_id, BOOL clamped)
501{
502 uuid_ui_image_map_t::iterator found_it = mUIImages.find(image_id);
503 if (found_it != mUIImages.end())
504 {
505 return found_it->second;
506 }
507
508 // otherwise create new ui image wrapper
509 LLImageGL* image = getImageByID(image_id, clamped);
510 image->dontDiscard();
511 LLPointer<LLUIImage> new_imagep = new LLUIImage(image);
512 mUIImages.insert(std::make_pair(image_id, new_imagep));
513
514 return new_imagep;
515}
516
517
518///////////////////////////////////////////////////////////////////////////////
519
520LLViewerImage* LLViewerImageList::preloadUIImage(const LLString& filename, const LLUUID &image_set_id, BOOL use_mips, const LLRectf& scale_rect)
521{
522 LLViewerImage* image = getImage(filename, image_set_id, use_mips, TRUE);
523 image->dontDiscard();
524 image->setClamp(TRUE, TRUE);
525 LLUIImage* ui_imagep = new LLUIImage(image);
526 ui_imagep->setScaleRegion(scale_rect);
527 mUIImages.insert(std::make_pair(image->getID(), LLPointer<LLUIImage>(ui_imagep)));
528 return image;
529}
530
531/////////////////////////////////////////////////////////////////////////////// 300///////////////////////////////////////////////////////////////////////////////
532 301
533LLViewerImage* LLViewerImageList::getImage(const LLString& filename,
534 const LLUUID &image_set_id,
535 BOOL usemipmaps,
536 BOOL level_immediate)
537{
538 return getImageFromFile(filename, image_set_id, usemipmaps, level_immediate, 0, 0);
539}
540
541LLViewerImage* LLViewerImageList::getImageFromFile(const LLString& filename, 302LLViewerImage* LLViewerImageList::getImageFromFile(const LLString& filename,
542 const LLUUID &image_set_id,
543 BOOL usemipmaps, 303 BOOL usemipmaps,
544 BOOL level_immediate, 304 BOOL level_immediate,
545 LLGLint internal_format, 305 LLGLint internal_format,
546 LLGLenum primary_format) 306 LLGLenum primary_format,
307 const LLUUID& force_id)
547{ 308{
548 if (gNoRender) 309 if (gNoRender)
549 { 310 {
@@ -551,56 +312,48 @@ LLViewerImage* LLViewerImageList::getImageFromFile(const LLString& filename,
551 // getImage() will handle that later. 312 // getImage() will handle that later.
552 return getImage(IMG_DEFAULT, TRUE, TRUE); 313 return getImage(IMG_DEFAULT, TRUE, TRUE);
553 } 314 }
315
316 if (filename.empty())
317 {
318 return getImage(IMG_DEFAULT, TRUE, TRUE);
319 }
320
321 // generate UUID based on hash of filename
322 LLUUID new_id;
323 if (force_id.notNull())
324 {
325 new_id = force_id;
326 }
327 else
328 {
329 new_id.generate(std::string(filename));
330 }
331
332 LLPointer<LLViewerImage> imagep = hasImage(new_id);
554 333
555 // Try to load an image from the skins directory. 334 if (imagep.isNull())
556 // Fall back to loading from the VFS if not found.
557
558 // First verify that the image exists in gViewerArt
559 LLUUID image_id = LLUUID( gViewerArt.getString(filename.c_str()) );
560 if (image_id.isNull())
561 { 335 {
562 llwarns << "Unable to find image " << filename << " in gViewerArt" << llendl; 336 imagep = new LLViewerImage(filename, new_id, usemipmaps);
563 if (image_set_id.notNull()) 337
338 if (internal_format && primary_format)
564 { 339 {
565 // We *know* that missing_asset.tga exists, 340 imagep->setExplicitFormat(internal_format, primary_format);
566 // but for paranoia's sake and to avoid infinite recursion, check anyway
567 image_id = LLUUID(gViewerArt.getString("missing_asset.tga"));
568 if (image_id.isNull())
569 {
570 llerrs << "Missing missing_asset.tga!" << llendl;
571 }
572 return getImageFromFile(LLString("missing_asset.tga"), image_set_id,
573 usemipmaps, level_immediate,
574 internal_format, primary_format);
575 } 341 }
576 else 342
343 addImage(imagep);
344
345 if (level_immediate)
577 { 346 {
578 return (getImage(IMG_DEFAULT, TRUE, TRUE)); 347 imagep->dontDiscard();
348 imagep->setBoostLevel(LLViewerImage::BOOST_UI);
579 } 349 }
580 } 350 }
581 351
582 // Now that we have verified that filename exists, load it and assign it to
583 // the filename's UUID, or image_set_id if non null.
584 if (image_set_id.notNull())
585 {
586 image_id = image_set_id;
587 }
588
589 // Load the image
590 LLViewerImage* imagep = getImageFromUUID(image_id, usemipmaps, level_immediate,
591 internal_format, primary_format, LLHost());
592
593 return imagep; 352 return imagep;
594} 353}
595 354
596LLViewerImage* LLViewerImageList::getImage(const LLUUID &image_id,
597 BOOL usemipmaps,
598 BOOL level_immediate)
599{
600 return getImageFromUUID(image_id, usemipmaps, level_immediate, 0, 0, LLHost());
601}
602 355
603LLViewerImage* LLViewerImageList::getImageFromUUID(const LLUUID &image_id, 356LLViewerImage* LLViewerImageList::getImage(const LLUUID &image_id,
604 BOOL usemipmaps, 357 BOOL usemipmaps,
605 BOOL level_immediate, 358 BOOL level_immediate,
606 LLGLint internal_format, 359 LLGLint internal_format,
@@ -700,6 +453,7 @@ void LLViewerImageList::deleteImage(LLViewerImage *image)
700 { 453 {
701 mCallbackList.erase((LLViewerImage*)image); 454 mCallbackList.erase((LLViewerImage*)image);
702 } 455 }
456
703 llverify(mUUIDMap.erase(image->getID()) == 1); 457 llverify(mUUIDMap.erase(image->getID()) == 1);
704 sNumImages--; 458 sNumImages--;
705 removeImageFromList(image); 459 removeImageFromList(image);
@@ -739,20 +493,25 @@ void LLViewerImageList::updateImages(F32 max_time)
739 gPipeline.dirtyPoolObjectTextures(mDirtyTextureList); 493 gPipeline.dirtyPoolObjectTextures(mDirtyTextureList);
740 mDirtyTextureList.clear(); 494 mDirtyTextureList.clear();
741 } 495 }
742 496
497 bool didone = false;
743 for (image_list_t::iterator iter = mCallbackList.begin(); 498 for (image_list_t::iterator iter = mCallbackList.begin();
744 iter != mCallbackList.end(); ) 499 iter != mCallbackList.end(); )
745 { 500 {
501 //trigger loaded callbacks on local textures immediately
746 LLViewerImage* image = *iter++; 502 LLViewerImage* image = *iter++;
747 // Do stuff to handle callbacks, update priorities, etc. 503 if (!image->mLocalFileName.empty())
748 bool res = image->doLoadedCallbacks(); 504 {
749 if (res) 505 // Do stuff to handle callbacks, update priorities, etc.
506 didone = image->doLoadedCallbacks();
507 }
508 else if (!didone)
750 { 509 {
751 break; // only actually do one callback per frame 510 // Do stuff to handle callbacks, update priorities, etc.
511 didone = image->doLoadedCallbacks();
752 } 512 }
753 } 513 }
754 514
755
756 if (!gNoRender && !gGLManager.mIsDisabled) 515 if (!gNoRender && !gGLManager.mIsDisabled)
757 { 516 {
758 LLViewerMedia::updateImagesMediaStreams(); 517 LLViewerMedia::updateImagesMediaStreams();
@@ -777,7 +536,7 @@ void LLViewerImageList::updateImagesDecodePriorities()
777 mLastUpdateUUID = iter->first; 536 mLastUpdateUUID = iter->first;
778 LLPointer<LLViewerImage> imagep = iter->second; 537 LLPointer<LLViewerImage> imagep = iter->second;
779 ++iter; // safe to incrament now 538 ++iter; // safe to incrament now
780 539
781 // 540 //
782 // Flush formatted images using a lazy flush 541 // Flush formatted images using a lazy flush
783 // 542 //
@@ -1187,6 +946,7 @@ void LLViewerImageList::updateMaxResidentTexMem(S32 mem)
1187{ 946{
1188 // Initialize the image pipeline VRAM settings 947 // Initialize the image pipeline VRAM settings
1189 S32 cur_mem = gSavedSettings.getS32("TextureMemory"); 948 S32 cur_mem = gSavedSettings.getS32("TextureMemory");
949 F32 mem_multiplier = gSavedSettings.getF32("RenderTextureMemoryMultiple");
1190 S32 default_mem = getMaxVideoRamSetting(true); // recommended default 950 S32 default_mem = getMaxVideoRamSetting(true); // recommended default
1191 if (mem == 0) 951 if (mem == 0)
1192 { 952 {
@@ -1197,6 +957,9 @@ void LLViewerImageList::updateMaxResidentTexMem(S32 mem)
1197 mem = default_mem; 957 mem = default_mem;
1198 } 958 }
1199 959
960 // limit the texture memory to a multiple of the default if we've found some cards to behave poorly otherwise
961 mem = llmin(mem, (S32) (mem_multiplier * (F32) default_mem));
962
1200 mem = llclamp(mem, getMinVideoRamSetting(), getMaxVideoRamSetting()); 963 mem = llclamp(mem, getMinVideoRamSetting(), getMaxVideoRamSetting());
1201 if (mem != cur_mem) 964 if (mem != cur_mem)
1202 { 965 {
@@ -1211,8 +974,8 @@ void LLViewerImageList::updateMaxResidentTexMem(S32 mem)
1211 S32 fb_mem = llmax(VIDEO_CARD_FRAMEBUFFER_MEM, vb_mem/4); 974 S32 fb_mem = llmax(VIDEO_CARD_FRAMEBUFFER_MEM, vb_mem/4);
1212 mMaxResidentTexMem = (vb_mem - fb_mem)<<20; 975 mMaxResidentTexMem = (vb_mem - fb_mem)<<20;
1213 976
1214 // llinfos << "Graphics Card memory set to " << (VIDEO_CARD_MEM_SIZES[cur_setting]>>20) 977 llinfos << "Total Video Memory set to: " << vb_mem << " MB" << llendl;
1215 // << " MB" << llendl; 978 llinfos << "Available Texture Memory set to: " << (vb_mem - fb_mem) << " MB" << llendl;
1216} 979}
1217 980
1218/////////////////////////////////////////////////////////////////////////////// 981///////////////////////////////////////////////////////////////////////////////
@@ -1379,3 +1142,209 @@ S32 LLViewerImageList::calcMaxTextureRAM()
1379} 1142}
1380 1143
1381/////////////////////////////////////////////////////////////////////////////// 1144///////////////////////////////////////////////////////////////////////////////
1145
1146// explicitly cleanup resources, as this is a singleton class with process
1147// lifetime so ability to perform std::map operations in destructor is not
1148// guaranteed.
1149void LLUIImageList::cleanUp()
1150{
1151 mUIImages.clear();
1152}
1153
1154LLUIImagePtr LLUIImageList::getUIImageByID(const LLUUID& image_id)
1155{
1156 // use id as image name
1157 LLString image_name = image_id.asString();
1158
1159 // look for existing image
1160 uuid_ui_image_map_t::iterator found_it = mUIImages.find(image_name);
1161 if (found_it != mUIImages.end())
1162 {
1163 return found_it->second;
1164 }
1165
1166 return loadUIImageByID(image_id);
1167}
1168
1169LLUIImagePtr LLUIImageList::getUIImage(const LLString& image_name)
1170{
1171 // look for existing image
1172 uuid_ui_image_map_t::iterator found_it = mUIImages.find(image_name);
1173 if (found_it != mUIImages.end())
1174 {
1175 return found_it->second;
1176 }
1177
1178 return loadUIImageByName(image_name, image_name);
1179}
1180
1181LLUIImagePtr LLUIImageList::loadUIImageByName(const LLString& name, const LLString& filename, BOOL use_mips, const LLRect& scale_rect)
1182{
1183 LLViewerImage* imagep = gImageList.getImageFromFile(filename, MIPMAP_NO, IMMEDIATE_YES);
1184 return loadUIImage(imagep, name, use_mips, scale_rect);
1185}
1186
1187LLUIImagePtr LLUIImageList::loadUIImageByID(const LLUUID& id, BOOL use_mips, const LLRect& scale_rect)
1188{
1189 LLViewerImage* imagep = gImageList.getImage(id, MIPMAP_NO, IMMEDIATE_YES);
1190 return loadUIImage(imagep, id.asString(), use_mips, scale_rect);
1191}
1192
1193LLUIImagePtr LLUIImageList::loadUIImage(LLViewerImage* imagep, const LLString& name, BOOL use_mips, const LLRect& scale_rect)
1194{
1195 if (!imagep) return NULL;
1196
1197 imagep->setClamp(TRUE, TRUE);
1198
1199 LLUIImagePtr new_imagep = new LLUIImage(name, imagep);
1200 mUIImages.insert(std::make_pair(name, new_imagep));
1201
1202 LLUIImageLoadData* datap = new LLUIImageLoadData;
1203 datap->mImageName = name;
1204 datap->mImageScaleRegion = scale_rect;
1205
1206 imagep->setLoadedCallback(onUIImageLoaded, 0, FALSE, datap);
1207
1208 return new_imagep;
1209}
1210
1211LLUIImagePtr LLUIImageList::preloadUIImage(const LLString& name, const LLString& filename, BOOL use_mips, const LLRect& scale_rect)
1212{
1213 // look for existing image
1214 uuid_ui_image_map_t::iterator found_it = mUIImages.find(name);
1215 if (found_it != mUIImages.end())
1216 {
1217 // image already loaded!
1218 llerrs << "UI Image " << name << " already loaded." << llendl;
1219 }
1220
1221 return loadUIImageByName(name, filename, use_mips, scale_rect);
1222}
1223
1224//static
1225void LLUIImageList::onUIImageLoaded( BOOL success, LLViewerImage *src_vi, LLImageRaw* src, LLImageRaw* src_aux, S32 discard_level, BOOL final, void* user_data )
1226{
1227 if(!success || !user_data)
1228 {
1229 return;
1230 }
1231
1232 LLString ui_image_name ;
1233 LLRect scale_rect ;
1234 {
1235 LLUIImageLoadData* image_datap = (LLUIImageLoadData*)user_data;
1236
1237 ui_image_name = image_datap->mImageName;
1238 scale_rect = image_datap->mImageScaleRegion;
1239 if(final)
1240 {
1241 delete image_datap;
1242 }
1243 }
1244
1245 LLUIImageList* instance = getInstance();
1246
1247 uuid_ui_image_map_t::iterator found_it = instance->mUIImages.find(ui_image_name);
1248 if (found_it != instance->mUIImages.end())
1249 {
1250 LLUIImagePtr imagep = found_it->second;
1251
1252 // for images grabbed from local files, apply clipping rectangle to restore original dimensions
1253 // from power-of-2 gl image
1254 if (success && imagep.notNull() && src_vi && !src_vi->mLocalFileName.empty())
1255 {
1256 F32 clip_x = (F32)src_vi->getOriginalWidth() / (F32)src_vi->getWidth(0);
1257 F32 clip_y = (F32)src_vi->getOriginalHeight() / (F32)src_vi->getHeight(0);
1258 imagep->setClipRegion(LLRectf(0.f, clip_y, clip_x, 0.f));
1259 if (scale_rect != LLRect::null)
1260 {
1261 imagep->setScaleRegion(
1262 LLRectf(llclamp((F32)scale_rect.mLeft / (F32)imagep->getWidth(), 0.f, 1.f),
1263 llclamp((F32)scale_rect.mTop / (F32)imagep->getHeight(), 0.f, 1.f),
1264 llclamp((F32)scale_rect.mRight / (F32)imagep->getWidth(), 0.f, 1.f),
1265 llclamp((F32)scale_rect.mBottom / (F32)imagep->getHeight(), 0.f, 1.f)));
1266 }
1267 }
1268 }
1269}
1270
1271bool LLUIImageList::initFromFile(const LLString& filename)
1272{
1273 LLXmlTree xml_tree;
1274
1275 if (!xml_tree.parseFile(filename))
1276 {
1277 llwarns << "Unable to parse UI image list file " << filename << llendl;
1278 return false;
1279 }
1280
1281 LLXmlTreeNode* rootp = xml_tree.getRoot();
1282 if (!rootp || !rootp->hasAttribute("version"))
1283 {
1284 llwarns << "No valid version number in UI image list file " << filename << llendl;
1285 return false;
1286 }
1287
1288 enum
1289 {
1290 PASS_DECODE_NOW,
1291 PASS_DECODE_LATER,
1292 NUM_PASSES
1293 };
1294
1295 for (S32 pass = PASS_DECODE_NOW; pass < NUM_PASSES; pass++)
1296 {
1297 LLXmlTreeNode* child_nodep = rootp->getFirstChild();
1298 while(child_nodep)
1299 {
1300 LLString image_name = child_nodep->getName();
1301 LLString file_name = image_name;
1302 LLRect scale_rect;
1303 BOOL use_mip_maps = FALSE;
1304
1305 BOOL preload = FALSE;
1306 child_nodep->getAttributeBOOL("preload", preload);
1307
1308 // load high priority textures on first pass (to kick off decode)
1309 if (preload)
1310 {
1311 if (pass == PASS_DECODE_LATER)
1312 {
1313 child_nodep = rootp->getNextChild();
1314 continue;
1315 }
1316 }
1317 else
1318 {
1319 if (pass == PASS_DECODE_NOW)
1320 {
1321 child_nodep = rootp->getNextChild();
1322 continue;
1323 }
1324 }
1325
1326 child_nodep->getAttributeString("file_name", file_name);
1327 child_nodep->getAttributeBOOL("use_mips", use_mip_maps);
1328
1329 LLXmlTreeNode* rect_node = child_nodep->getChildByName("scale_rect");
1330 if (rect_node)
1331 {
1332 rect_node->getAttributeS32("left", scale_rect.mLeft);
1333 rect_node->getAttributeS32("right", scale_rect.mRight);
1334 rect_node->getAttributeS32("bottom", scale_rect.mBottom);
1335 rect_node->getAttributeS32("top", scale_rect.mTop);
1336 }
1337
1338 preloadUIImage(image_name, file_name, use_mip_maps, scale_rect);
1339
1340 child_nodep = rootp->getNextChild();
1341 }
1342
1343 if (pass == PASS_DECODE_NOW && !gSavedSettings.getBOOL("NoPreload"))
1344 {
1345 gImageList.decodeAllImages(2.f); // decode preloaded images
1346 }
1347 }
1348 return true;
1349}
1350
diff --git a/linden/indra/newview/llviewerimagelist.h b/linden/indra/newview/llviewerimagelist.h
index 8a39405..24d91fa 100644
--- a/linden/indra/newview/llviewerimagelist.h
+++ b/linden/indra/newview/llviewerimagelist.h
@@ -64,7 +64,7 @@ typedef void (*LLImageCallback)(BOOL success,
64 BOOL final, 64 BOOL final,
65 void* userdata); 65 void* userdata);
66 66
67class LLViewerImageList : public LLImageProviderInterface 67class LLViewerImageList
68{ 68{
69 LOG_CLASS(LLViewerImageList); 69 LOG_CLASS(LLViewerImageList);
70 70
@@ -82,46 +82,32 @@ public:
82 LLViewerImageList(); 82 LLViewerImageList();
83 ~LLViewerImageList(); 83 ~LLViewerImageList();
84 84
85 // LLImageProviderInterface
86 LLImageGL* getImageByID(const LLUUID& id, BOOL clamped = TRUE);
87 LLUIImage* getUIImageByID(const LLUUID& id, BOOL clamped = TRUE);
88
89 void init(); 85 void init();
90 void shutdown(); 86 void shutdown();
91 void dump(); 87 void dump();
92 void destroyGL(BOOL save_state = TRUE); 88 void destroyGL(BOOL save_state = TRUE);
93 void restoreGL(); 89 void restoreGL();
94 90
95 LLViewerImage * getImage(const LLString& filename,
96 const LLUUID &image_id,
97 BOOL usemipmap = TRUE,
98 BOOL level_immediate = FALSE // Get the requested level immediately upon creation.
99 );
100 LLViewerImage * getImage(const LLUUID &image_id, 91 LLViewerImage * getImage(const LLUUID &image_id,
101 BOOL usemipmap = TRUE, 92 BOOL usemipmap = TRUE,
102 BOOL level_immediate = FALSE // Get the requested level immediately upon creation. 93 BOOL level_immediate = FALSE, // Get the requested level immediately upon creation.
103 ); 94 LLGLint internal_format = 0,
95 LLGLenum primary_format = 0,
96 LLHost request_from_host = LLHost()
97 );
104 98
105 LLViewerImage * getImageFromFile(const LLString& filename, 99 LLViewerImage * getImageFromFile(const LLString& filename,
106 const LLUUID &image_id, 100 BOOL usemipmap = TRUE,
107 BOOL usemipmap, 101 BOOL level_immediate = FALSE, // Get the requested level immediately upon creation.
108 BOOL level_immediate, // Get the requested level immediately upon creation. 102 LLGLint internal_format = 0,
109 LLGLint internal_format, 103 LLGLenum primary_format = 0,
110 LLGLenum primary_format 104 const LLUUID& force_id = LLUUID::null
111 ); 105 );
112 106
113 LLViewerImage * getImageFromUUID(const LLUUID &image_id,
114 BOOL usemipmap,
115 BOOL level_immediate, // Get the requested level immediately upon creation.
116 LLGLint internal_format,
117 LLGLenum primary_format,
118 LLHost request_from_host = LLHost()
119 );
120
121 // Request image from a specific host, used for baked avatar textures. 107 // Request image from a specific host, used for baked avatar textures.
122 // Implemented in header in case someone changes default params above. JC 108 // Implemented in header in case someone changes default params above. JC
123 LLViewerImage* getImageFromHost(const LLUUID& image_id, LLHost host) 109 LLViewerImage* getImageFromHost(const LLUUID& image_id, LLHost host)
124 { return getImageFromUUID(image_id, TRUE, FALSE, 0, 0, host); } 110 { return getImage(image_id, TRUE, FALSE, 0, 0, host); }
125 111
126 LLViewerImage *hasImage(const LLUUID &image_id); 112 LLViewerImage *hasImage(const LLUUID &image_id);
127 void addImage(LLViewerImage *image); 113 void addImage(LLViewerImage *image);
@@ -154,7 +140,6 @@ public:
154 static S32 getMaxVideoRamSetting(bool get_recommended = false); 140 static S32 getMaxVideoRamSetting(bool get_recommended = false);
155 141
156private: 142private:
157 LLViewerImage* preloadUIImage(const LLString& filename, const LLUUID &image_set_id, BOOL use_mips, const LLRectf& scale_rect = LLRectf(0.f, 1.f, 1.f, 0.f));
158 void updateImagesDecodePriorities(); 143 void updateImagesDecodePriorities();
159 F32 updateImagesCreateTextures(F32 max_time); 144 F32 updateImagesCreateTextures(F32 max_time);
160 F32 updateImagesFetchTextures(F32 max_time); 145 F32 updateImagesFetchTextures(F32 max_time);
@@ -180,6 +165,9 @@ private:
180 typedef std::set<LLPointer<LLViewerImage>, LLViewerImage::Compare> image_priority_list_t; 165 typedef std::set<LLPointer<LLViewerImage>, LLViewerImage::Compare> image_priority_list_t;
181 image_priority_list_t mImageList; 166 image_priority_list_t mImageList;
182 167
168 // simply holds on to LLViewerImage references to stop them from being purged too soon
169 std::set<LLPointer<LLViewerImage> > mImagePreloads;
170
183 typedef std::vector<LLPointer<LLViewerImage> > callback_data_t; 171 typedef std::vector<LLPointer<LLViewerImage> > callback_data_t;
184 typedef std::set< callback_data_t* > callback_data_list_t; 172 typedef std::set< callback_data_t* > callback_data_list_t;
185 callback_data_list_t mIRCallbackData; 173 callback_data_list_t mIRCallbackData;
@@ -188,9 +176,6 @@ private:
188 S32 mMaxResidentTexMem; 176 S32 mMaxResidentTexMem;
189 LLFrameTimer mForceDecodeTimer; 177 LLFrameTimer mForceDecodeTimer;
190 178
191 typedef std::map< LLUUID, LLPointer<LLUIImage> > uuid_ui_image_map_t;
192 uuid_ui_image_map_t mUIImages;
193
194public: 179public:
195 static U32 sTextureBits; 180 static U32 sTextureBits;
196 static U32 sTexturePackets; 181 static U32 sTexturePackets;
@@ -207,6 +192,36 @@ private:
207 static void (*sUUIDCallback)(void**, const LLUUID &); 192 static void (*sUUIDCallback)(void**, const LLUUID &);
208}; 193};
209 194
195class LLUIImageList : public LLImageProviderInterface, public LLSingleton<LLUIImageList>
196{
197public:
198 // LLImageProviderInterface
199 LLUIImagePtr getUIImageByID(const LLUUID& id);
200 LLUIImagePtr getUIImage(const LLString& name);
201 void cleanUp();
202
203 bool initFromFile(const LLString& filename);
204
205 LLUIImagePtr preloadUIImage(const LLString& name, const LLString& filename, BOOL use_mips, const LLRect& scale_rect);
206
207 static void onUIImageLoaded( BOOL success, LLViewerImage *src_vi, LLImageRaw* src, LLImageRaw* src_aux, S32 discard_level, BOOL final, void* userdata );
208private:
209 LLUIImagePtr loadUIImageByName(const LLString& name, const LLString& filename, BOOL use_mips = FALSE, const LLRect& scale_rect = LLRect::null);
210 LLUIImagePtr loadUIImageByID(const LLUUID& id, BOOL use_mips = FALSE, const LLRect& scale_rect = LLRect::null);
211
212 LLUIImagePtr loadUIImage(LLViewerImage* imagep, const LLString& name, BOOL use_mips = FALSE, const LLRect& scale_rect = LLRect::null);
213
214
215 struct LLUIImageLoadData
216 {
217 LLString mImageName;
218 LLRect mImageScaleRegion;
219 };
220
221 typedef std::map< LLString, LLPointer<LLUIImage> > uuid_ui_image_map_t;
222 uuid_ui_image_map_t mUIImages;
223};
224
210const BOOL GLTEXTURE_TRUE = TRUE; 225const BOOL GLTEXTURE_TRUE = TRUE;
211const BOOL GLTEXTURE_FALSE = FALSE; 226const BOOL GLTEXTURE_FALSE = FALSE;
212const BOOL MIPMAP_TRUE = TRUE; 227const BOOL MIPMAP_TRUE = TRUE;
diff --git a/linden/indra/newview/llviewerjoint.cpp b/linden/indra/newview/llviewerjoint.cpp
index 9e243a0..bea90e6 100644
--- a/linden/indra/newview/llviewerjoint.cpp
+++ b/linden/indra/newview/llviewerjoint.cpp
@@ -40,7 +40,7 @@
40#include "llglimmediate.h" 40#include "llglimmediate.h"
41#include "llmath.h" 41#include "llmath.h"
42#include "llglheaders.h" 42#include "llglheaders.h"
43#include "llsphere.h" 43#include "llrendersphere.h"
44#include "llvoavatar.h" 44#include "llvoavatar.h"
45#include "pipeline.h" 45#include "pipeline.h"
46 46
diff --git a/linden/indra/newview/llviewerjointmesh.cpp b/linden/indra/newview/llviewerjointmesh.cpp
index 5c73319..b87d564 100644
--- a/linden/indra/newview/llviewerjointmesh.cpp
+++ b/linden/indra/newview/llviewerjointmesh.cpp
@@ -866,13 +866,53 @@ static F64 sUpdateGeometryRunAvgOn[10];
866static U32 sUpdateGeometryRunCount = 0 ; 866static U32 sUpdateGeometryRunCount = 0 ;
867static U32 sUpdateGeometryCalls = 0 ; 867static U32 sUpdateGeometryCalls = 0 ;
868static U32 sUpdateGeometryLastProcessor = 0 ; 868static U32 sUpdateGeometryLastProcessor = 0 ;
869static BOOL sVectorizePerfTest = FALSE;
870static U32 sVectorizeProcessor = 0;
871
872//static
869void (*LLViewerJointMesh::sUpdateGeometryFunc)(LLFace* face, LLPolyMesh* mesh); 873void (*LLViewerJointMesh::sUpdateGeometryFunc)(LLFace* face, LLPolyMesh* mesh);
870 874
871void LLViewerJointMesh::updateGeometry() 875//static
876void LLViewerJointMesh::updateVectorize()
872{ 877{
873 extern BOOL gVectorizePerfTest; 878 sVectorizePerfTest = gSavedSettings.getBOOL("VectorizePerfTest");
874 extern U32 gVectorizeProcessor; 879 sVectorizeProcessor = gSavedSettings.getU32("VectorizeProcessor");
880 BOOL vectorizeEnable = gSavedSettings.getBOOL("VectorizeEnable");
881 BOOL vectorizeSkin = gSavedSettings.getBOOL("VectorizeSkin");
875 882
883 std::string vp;
884 switch(sVectorizeProcessor)
885 {
886 case 2: vp = "SSE2"; break; // *TODO: replace the magic #s
887 case 1: vp = "SSE"; break;
888 default: vp = "COMPILER DEFAULT"; break;
889 }
890 llinfos << "Vectorization : " << ( vectorizeEnable ? "ENABLED" : "DISABLED" ) << llendl ;
891 llinfos << "Vector Processor : " << vp << llendl ;
892 llinfos << "Vectorized Skinning : " << ( vectorizeSkin ? "ENABLED" : "DISABLED" ) << llendl ;
893 if(vectorizeEnable && vectorizeSkin)
894 {
895 switch(sVectorizeProcessor)
896 {
897 case 2:
898 sUpdateGeometryFunc = &updateGeometrySSE2;
899 break;
900 case 1:
901 sUpdateGeometryFunc = &updateGeometrySSE;
902 break;
903 default:
904 sUpdateGeometryFunc = &updateGeometryVectorized;
905 break;
906 }
907 }
908 else
909 {
910 sUpdateGeometryFunc = &updateGeometryOriginal;
911 }
912}
913
914void LLViewerJointMesh::updateGeometry()
915{
876 if (!(mValid 916 if (!(mValid
877 && mMesh 917 && mMesh
878 && mFace 918 && mFace
@@ -883,7 +923,7 @@ void LLViewerJointMesh::updateGeometry()
883 return; 923 return;
884 } 924 }
885 925
886 if (!gVectorizePerfTest) 926 if (!sVectorizePerfTest)
887 { 927 {
888 // Once we've measured performance, just run the specified 928 // Once we've measured performance, just run the specified
889 // code version. 929 // code version.
@@ -916,13 +956,13 @@ void LLViewerJointMesh::updateGeometry()
916 { 956 {
917 F64 time_since_app_start = ug_timer.getElapsedSeconds(); 957 F64 time_since_app_start = ug_timer.getElapsedSeconds();
918 if(sUpdateGeometryGlobalTime == 0.0 958 if(sUpdateGeometryGlobalTime == 0.0
919 || sUpdateGeometryLastProcessor != gVectorizeProcessor) 959 || sUpdateGeometryLastProcessor != sVectorizeProcessor)
920 { 960 {
921 sUpdateGeometryGlobalTime = time_since_app_start; 961 sUpdateGeometryGlobalTime = time_since_app_start;
922 sUpdateGeometryElapsedTime = 0; 962 sUpdateGeometryElapsedTime = 0;
923 sUpdateGeometryCalls = 0; 963 sUpdateGeometryCalls = 0;
924 sUpdateGeometryRunCount = 0; 964 sUpdateGeometryRunCount = 0;
925 sUpdateGeometryLastProcessor = gVectorizeProcessor; 965 sUpdateGeometryLastProcessor = sVectorizeProcessor;
926 sUpdateGeometryCallPointer = false; 966 sUpdateGeometryCallPointer = false;
927 return; 967 return;
928 } 968 }
@@ -969,7 +1009,7 @@ void LLViewerJointMesh::updateGeometry()
969 F64 perf_boost = ( sUpdateGeometryElapsedTimeOff - sUpdateGeometryElapsedTimeOn ) / sUpdateGeometryElapsedTimeOn; 1009 F64 perf_boost = ( sUpdateGeometryElapsedTimeOff - sUpdateGeometryElapsedTimeOn ) / sUpdateGeometryElapsedTimeOn;
970 llinfos << "run averages (" << (F64)sUpdateGeometryRunCount 1010 llinfos << "run averages (" << (F64)sUpdateGeometryRunCount
971 << "/10) vectorize off " << a 1011 << "/10) vectorize off " << a
972 << "% : vectorize type " << gVectorizeProcessor 1012 << "% : vectorize type " << sVectorizeProcessor
973 << " " << b 1013 << " " << b
974 << "% : performance boost " 1014 << "% : performance boost "
975 << perf_boost * 100.0 1015 << perf_boost * 100.0
@@ -983,7 +1023,6 @@ void LLViewerJointMesh::updateGeometry()
983 1023
984 // We have data now on which version is faster. Switch to that 1024 // We have data now on which version is faster. Switch to that
985 // code and save the data for next run. 1025 // code and save the data for next run.
986 gVectorizePerfTest = FALSE;
987 gSavedSettings.setBOOL("VectorizePerfTest", FALSE); 1026 gSavedSettings.setBOOL("VectorizePerfTest", FALSE);
988 1027
989 if (perf_boost > 0.0) 1028 if (perf_boost > 0.0)
diff --git a/linden/indra/newview/llviewerjointmesh.h b/linden/indra/newview/llviewerjointmesh.h
index c02275a..85f8e97 100644
--- a/linden/indra/newview/llviewerjointmesh.h
+++ b/linden/indra/newview/llviewerjointmesh.h
@@ -149,6 +149,9 @@ public:
149 149
150 /*virtual*/ BOOL isAnimatable() { return FALSE; } 150 /*virtual*/ BOOL isAnimatable() { return FALSE; }
151 151
152 static void updateVectorize(); // Update globals when settings variables change
153
154private:
152 // Avatar vertex skinning is a significant performance issue on computers 155 // Avatar vertex skinning is a significant performance issue on computers
153 // with avatar vertex programs turned off (for example, most Macs). We 156 // with avatar vertex programs turned off (for example, most Macs). We
154 // therefore have custom versions that use SIMD instructions. 157 // therefore have custom versions that use SIMD instructions.
diff --git a/linden/indra/newview/llviewerjoystick.cpp b/linden/indra/newview/llviewerjoystick.cpp
index e3db0f2..e9690f8 100644
--- a/linden/indra/newview/llviewerjoystick.cpp
+++ b/linden/indra/newview/llviewerjoystick.cpp
@@ -1,6 +1,6 @@
1/** 1/**
2 * @file llviewerjoystick.cpp 2 * @file llviewerjoystick.cpp
3 * @brief Joystick functionality. 3 * @brief Joystick / NDOF device functionality.
4 * 4 *
5 * $LicenseInfo:firstyear=2002&license=viewergpl$ 5 * $LicenseInfo:firstyear=2002&license=viewergpl$
6 * 6 *
@@ -30,39 +30,701 @@
30 */ 30 */
31 31
32#include "llviewerprecompiledheaders.h" 32#include "llviewerprecompiledheaders.h"
33
34#include "llviewerjoystick.h"
35
33#include "llviewercontrol.h" 36#include "llviewercontrol.h"
34#include "llviewerwindow.h" 37#include "llviewerwindow.h"
35#include "llviewercamera.h" 38#include "llviewercamera.h"
36#include "llviewerjoystick.h"
37#include "llappviewer.h" 39#include "llappviewer.h"
38#include "llkeyboard.h" 40#include "llkeyboard.h"
41#include "lltoolmgr.h"
42#include "llselectmgr.h"
43#include "llviewermenu.h"
44#include "llagent.h"
45#include "llfocusmgr.h"
46
47
48// ----------------------------------------------------------------------------
49// Constants
50
51#define X_I 1
52#define Y_I 2
53#define Z_I 0
54#define RX_I 4
55#define RY_I 5
56#define RZ_I 3
39 57
40static LLQuaternion sFlycamRotation; 58// flycam translations in build mode should be reduced
41static LLVector3 sFlycamPosition; 59const F32 BUILDMODE_FLYCAM_T_SCALE = 3.f;
42static F32 sFlycamZoom;
43 60
44BOOL LLViewerJoystick::sOverrideCamera = FALSE; 61F32 LLViewerJoystick::sLastDelta[] = {0,0,0,0,0,0,0};
62F32 LLViewerJoystick::sDelta[] = {0,0,0,0,0,0,0};
45 63
46void LLViewerJoystick::updateCamera(BOOL reset) 64// These constants specify the maximum absolute value coming in from the device.
65// HACK ALERT! the value of MAX_JOYSTICK_INPUT_VALUE is not arbitrary as it
66// should be. It has to be equal to 3000 because the SpaceNavigator on Windows
67// refuses to respond to the DirectInput SetProperty call; it always returns
68// values in the [-3000, 3000] range.
69#define MAX_SPACENAVIGATOR_INPUT 3000.0f
70#define MAX_JOYSTICK_INPUT_VALUE MAX_SPACENAVIGATOR_INPUT
71
72// -----------------------------------------------------------------------------
73void LLViewerJoystick::updateEnabled(bool autoenable)
47{ 74{
48 static F32 last_delta[] = {0,0,0,0,0,0,0}; 75 if (mDriverState == JDS_UNINITIALIZED)
49 static F32 delta[] = { 0,0,0,0,0,0,0 }; 76 {
77 gSavedSettings.setBOOL("JoystickEnabled", FALSE );
78 }
79 else
80 {
81 if (isLikeSpaceNavigator() && autoenable)
82 {
83 gSavedSettings.setBOOL("JoystickEnabled", TRUE );
84 }
85 }
86 if (!gSavedSettings.getBOOL("JoystickEnabled"))
87 {
88 mOverrideCamera = FALSE;
89 }
90}
50 91
51 LLWindow* window = gViewerWindow->getWindow(); 92void LLViewerJoystick::setOverrideCamera(bool val)
93{
94 if (!gSavedSettings.getBOOL("JoystickEnabled"))
95 {
96 mOverrideCamera = FALSE;
97 }
98 else
99 {
100 mOverrideCamera = val;
101 }
102}
103
104// -----------------------------------------------------------------------------
105#if LIB_NDOF
106NDOF_HotPlugResult LLViewerJoystick::HotPlugAddCallback(NDOF_Device *dev)
107{
108 NDOF_HotPlugResult res = NDOF_DISCARD_HOTPLUGGED;
109 LLViewerJoystick* joystick(LLViewerJoystick::getInstance());
110 if (joystick->mDriverState == JDS_UNINITIALIZED)
111 {
112 llinfos << "HotPlugAddCallback: will use device:" << llendl;
113 ndof_dump(dev);
114 joystick->mNdofDev = dev;
115 joystick->mDriverState = JDS_INITIALIZED;
116 res = NDOF_KEEP_HOTPLUGGED;
117 }
118 joystick->updateEnabled(true);
119 return res;
120}
121#endif
122
123// -----------------------------------------------------------------------------
124#if LIB_NDOF
125void LLViewerJoystick::HotPlugRemovalCallback(NDOF_Device *dev)
126{
127 LLViewerJoystick* joystick(LLViewerJoystick::getInstance());
128 if (joystick->mNdofDev == dev)
129 {
130 llinfos << "HotPlugRemovalCallback: joystick->mNdofDev="
131 << joystick->mNdofDev << "; removed device:" << llendl;
132 ndof_dump(dev);
133 joystick->mDriverState = JDS_UNINITIALIZED;
134 }
135 joystick->updateEnabled(true);
136}
137#endif
138
139// -----------------------------------------------------------------------------
140LLViewerJoystick::LLViewerJoystick()
141: mDriverState(JDS_UNINITIALIZED),
142 mNdofDev(NULL),
143 mResetFlag(false),
144 mCameraUpdated(true),
145 mOverrideCamera(false)
146{
147 for (int i = 0; i < 6; i++)
148 {
149 mAxes[i] = sDelta[i] = sLastDelta[i] = 0.0f;
150 }
151
152 memset(mBtn, 0, sizeof(mBtn));
153
154 // factor in bandwidth? bandwidth = gViewerStats->mKBitStat
155 mPerfScale = 4000.f / gSysCPU.getMhz();
156}
157
158// -----------------------------------------------------------------------------
159LLViewerJoystick::~LLViewerJoystick()
160{
161 if (mDriverState == JDS_INITIALIZED)
162 {
163 terminate();
164 }
165}
166
167// -----------------------------------------------------------------------------
168void LLViewerJoystick::init(bool autoenable)
169{
170#if LIB_NDOF
171 static bool libinit = false;
172 mDriverState = JDS_INITIALIZING;
52 173
174 if (libinit == false)
175 {
176 // Note: The HotPlug callbacks are not actually getting called on Windows
177 if (ndof_libinit(HotPlugAddCallback,
178 HotPlugRemovalCallback,
179 NULL))
180 {
181 mDriverState = JDS_UNINITIALIZED;
182 }
183 else
184 {
185 // NB: ndof_libinit succeeds when there's no device
186 libinit = true;
187
188 // allocate memory once for an eventual device
189 mNdofDev = ndof_create();
190 }
191 }
192
193 if (libinit)
194 {
195 if (mNdofDev)
196 {
197 // Different joysticks will return different ranges of raw values.
198 // Since we want to handle every device in the same uniform way,
199 // we initialize the mNdofDev struct and we set the range
200 // of values we would like to receive.
201 //
202 // HACK: On Windows, libndofdev passes our range to DI with a
203 // SetProperty call. This works but with one notable exception, the
204 // SpaceNavigator, who doesn't seem to care about the SetProperty
205 // call. In theory, we should handle this case inside libndofdev.
206 // However, the range we're setting here is arbitrary anyway,
207 // so let's just use the SpaceNavigator range for our purposes.
208 mNdofDev->axes_min = (long)-MAX_JOYSTICK_INPUT_VALUE;
209 mNdofDev->axes_max = (long)+MAX_JOYSTICK_INPUT_VALUE;
210
211 // libndofdev could be used to return deltas. Here we choose to
212 // just have the absolute values instead.
213 mNdofDev->absolute = 1;
214
215 // init & use the first suitable NDOF device found on the USB chain
216 if (ndof_init_first(mNdofDev, NULL))
217 {
218 mDriverState = JDS_UNINITIALIZED;
219 llwarns << "ndof_init_first FAILED" << llendl;
220 }
221 else
222 {
223 mDriverState = JDS_INITIALIZED;
224 }
225 }
226 else
227 {
228 mDriverState = JDS_UNINITIALIZED;
229 }
230 }
231 updateEnabled(autoenable);
232
233 llinfos << "ndof: mDriverState=" << mDriverState << "; mNdofDev="
234 << mNdofDev << "; libinit=" << libinit << llendl;
235#endif
236}
237
238// -----------------------------------------------------------------------------
239void LLViewerJoystick::terminate()
240{
241#if LIB_NDOF
242
243 ndof_libcleanup();
244 llinfos << "Terminated connection with NDOF device." << llendl;
245
246#endif
247}
248
249// -----------------------------------------------------------------------------
250void LLViewerJoystick::updateStatus()
251{
252#if LIB_NDOF
253
254 ndof_update(mNdofDev);
255
256 for (int i=0; i<6; i++)
257 {
258 mAxes[i] = (F32) mNdofDev->axes[i] / mNdofDev->axes_max;
259 }
260
261 for (int i=0; i<16; i++)
262 {
263 mBtn[i] = mNdofDev->buttons[i];
264 }
265
266#endif
267}
268
269// -----------------------------------------------------------------------------
270F32 LLViewerJoystick::getJoystickAxis(U32 axis) const
271{
272 if (axis < 6)
273 {
274 return mAxes[axis];
275 }
276 return 0.f;
277}
278
279// -----------------------------------------------------------------------------
280U32 LLViewerJoystick::getJoystickButton(U32 button) const
281{
282 if (button < 16)
283 {
284 return mBtn[button];
285 }
286 return 0;
287}
288
289// -----------------------------------------------------------------------------
290void LLViewerJoystick::agentJump()
291{
292 gAgent.moveUp(1);
293}
294
295// -----------------------------------------------------------------------------
296void LLViewerJoystick::agentSlide(F32 inc)
297{
298 if (inc < 0)
299 {
300 gAgent.moveLeft(1);
301 }
302 else if (inc > 0)
303 {
304 gAgent.moveLeft(-1);
305 }
306}
307
308// -----------------------------------------------------------------------------
309void LLViewerJoystick::agentPush(F32 inc)
310{
311 if (inc < 0) // forward
312 {
313 gAgent.moveAt(1, false);
314 }
315 else if (inc > 0) // backward
316 {
317 gAgent.moveAt(-1, false);
318 }
319}
320
321// -----------------------------------------------------------------------------
322void LLViewerJoystick::agentFly(F32 inc)
323{
324 if (inc < 0)
325 {
326 if (gAgent.getFlying())
327 {
328 gAgent.moveUp(1);
329 }
330 else
331 {
332 gAgent.setFlying(true);
333 }
334 }
335 else if (inc > 0)
336 {
337 // crouch
338 gAgent.moveUp(-1);
339 }
340}
341
342// -----------------------------------------------------------------------------
343void LLViewerJoystick::agentRotate(F32 pitch_inc, F32 yaw_inc)
344{
345 LLQuaternion new_rot;
346 pitch_inc = gAgent.clampPitchToLimits(-pitch_inc);
347 const LLQuaternion qx(pitch_inc, gAgent.getLeftAxis());
348 const LLQuaternion qy(-yaw_inc, gAgent.getReferenceUpVector());
349 new_rot.setQuat(qx * qy);
350 gAgent.rotate(new_rot);
351}
352
353// -----------------------------------------------------------------------------
354void LLViewerJoystick::resetDeltas(S32 axis[], bool flycam_and_build_mode)
355{
356 for (U32 i = 0; i < 6; i++)
357 {
358 sLastDelta[i] = -mAxes[axis[i]];
359 sDelta[i] = 0.f;
360 }
361
362 if (flycam_and_build_mode)
363 {
364 sLastDelta[X_I] /= BUILDMODE_FLYCAM_T_SCALE;
365 sLastDelta[Y_I] /= BUILDMODE_FLYCAM_T_SCALE;
366 sLastDelta[Z_I] /= BUILDMODE_FLYCAM_T_SCALE;
367 }
368
369 sLastDelta[6] = sDelta[6] = 0.f;
370 mResetFlag = false;
371}
372
373// -----------------------------------------------------------------------------
374void LLViewerJoystick::moveObjects(bool reset)
375{
376 static bool toggle_send_to_sim = false;
377
378 if (!gFocusMgr.getAppHasFocus() || mDriverState != JDS_INITIALIZED
379 || !gSavedSettings.getBOOL("JoystickEnabled") || !gSavedSettings.getBOOL("JoystickBuildEnabled"))
380 {
381 return;
382 }
383
384 S32 axis[] =
385 {
386 gSavedSettings.getS32("JoystickAxis0"),
387 gSavedSettings.getS32("JoystickAxis1"),
388 gSavedSettings.getS32("JoystickAxis2"),
389 gSavedSettings.getS32("JoystickAxis3"),
390 gSavedSettings.getS32("JoystickAxis4"),
391 gSavedSettings.getS32("JoystickAxis5"),
392 };
393
394 if (reset || mResetFlag)
395 {
396 resetDeltas(axis);
397 return;
398 }
399
400 F32 axis_scale[] =
401 {
402 gSavedSettings.getF32("BuildAxisScale0"),
403 gSavedSettings.getF32("BuildAxisScale1"),
404 gSavedSettings.getF32("BuildAxisScale2"),
405 gSavedSettings.getF32("BuildAxisScale3"),
406 gSavedSettings.getF32("BuildAxisScale4"),
407 gSavedSettings.getF32("BuildAxisScale5"),
408 };
409
410 F32 dead_zone[] =
411 {
412 gSavedSettings.getF32("BuildAxisDeadZone0"),
413 gSavedSettings.getF32("BuildAxisDeadZone1"),
414 gSavedSettings.getF32("BuildAxisDeadZone2"),
415 gSavedSettings.getF32("BuildAxisDeadZone3"),
416 gSavedSettings.getF32("BuildAxisDeadZone4"),
417 gSavedSettings.getF32("BuildAxisDeadZone5"),
418 };
419
420 F32 cur_delta[6];
53 F32 time = gFrameIntervalSeconds; 421 F32 time = gFrameIntervalSeconds;
54 422
423 // avoid making ridicously big movements if there's a big drop in fps
424 if (time > .2f)
425 {
426 time = .2f;
427 }
428
429 // max feather is 32
430 F32 feather = gSavedSettings.getF32("BuildFeathering");
431 bool is_zero = true, absolute = gSavedSettings.getBOOL("Cursor3D");
432
433 for (U32 i = 0; i < 6; i++)
434 {
435 cur_delta[i] = -mAxes[axis[i]];
436 F32 tmp = cur_delta[i];
437 if (absolute)
438 {
439 cur_delta[i] = cur_delta[i] - sLastDelta[i];
440 }
441 sLastDelta[i] = tmp;
442 is_zero = is_zero && (cur_delta[i] == 0.f);
443
444 if (cur_delta[i] > 0)
445 {
446 cur_delta[i] = llmax(cur_delta[i]-dead_zone[i], 0.f);
447 }
448 else
449 {
450 cur_delta[i] = llmin(cur_delta[i]+dead_zone[i], 0.f);
451 }
452 cur_delta[i] *= axis_scale[i];
453
454 if (!absolute)
455 {
456 cur_delta[i] *= time;
457 }
458
459 sDelta[i] = sDelta[i] + (cur_delta[i]-sDelta[i])*time*feather;
460 }
461
462 U32 upd_type = UPD_NONE;
463 LLVector3 v;
464
465 if (!is_zero)
466 {
467 if (sDelta[0] || sDelta[1] || sDelta[2])
468 {
469 upd_type |= UPD_POSITION;
470 v.setVec(sDelta[0], sDelta[1], sDelta[2]);
471 }
472
473 if (sDelta[3] || sDelta[4] || sDelta[5])
474 {
475 upd_type |= UPD_ROTATION;
476 }
477
478 // the selection update could fail, so we won't send
479 if (LLSelectMgr::getInstance()->selectionMove(v, sDelta[3],sDelta[4],sDelta[5], upd_type))
480 {
481 toggle_send_to_sim = true;
482 }
483 }
484 else if (toggle_send_to_sim)
485 {
486 LLSelectMgr::getInstance()->sendSelectionMove();
487 toggle_send_to_sim = false;
488 }
489}
490
491// -----------------------------------------------------------------------------
492void LLViewerJoystick::moveAvatar(bool reset)
493{
494 if (!gFocusMgr.getAppHasFocus() || mDriverState != JDS_INITIALIZED
495 || !gSavedSettings.getBOOL("JoystickEnabled") || !gSavedSettings.getBOOL("JoystickAvatarEnabled"))
496 {
497 return;
498 }
499
500 S32 axis[] =
501 {
502 // [1 0 2 4 3 5]
503 // [Z X Y RZ RX RY]
504 gSavedSettings.getS32("JoystickAxis0"),
505 gSavedSettings.getS32("JoystickAxis1"),
506 gSavedSettings.getS32("JoystickAxis2"),
507 gSavedSettings.getS32("JoystickAxis3"),
508 gSavedSettings.getS32("JoystickAxis4"),
509 gSavedSettings.getS32("JoystickAxis5")
510 };
511
512 if (reset || mResetFlag)
513 {
514 resetDeltas(axis);
515 if (reset)
516 {
517 // Note: moving the agent triggers agent camera mode;
518 // don't do this every time we set mResetFlag (e.g. because we gained focus)
519 gAgent.moveAt(0, true);
520 }
521 return;
522 }
523
524 if (mBtn[1] == 1)
525 {
526 agentJump();
527 return;
528 }
529
530 F32 axis_scale[] =
531 {
532 gSavedSettings.getF32("AvatarAxisScale0"),
533 gSavedSettings.getF32("AvatarAxisScale1"),
534 gSavedSettings.getF32("AvatarAxisScale2"),
535 gSavedSettings.getF32("AvatarAxisScale3"),
536 gSavedSettings.getF32("AvatarAxisScale4"),
537 gSavedSettings.getF32("AvatarAxisScale5")
538 };
539
540 F32 dead_zone[] =
541 {
542 gSavedSettings.getF32("AvatarAxisDeadZone0"),
543 gSavedSettings.getF32("AvatarAxisDeadZone1"),
544 gSavedSettings.getF32("AvatarAxisDeadZone2"),
545 gSavedSettings.getF32("AvatarAxisDeadZone3"),
546 gSavedSettings.getF32("AvatarAxisDeadZone4"),
547 gSavedSettings.getF32("AvatarAxisDeadZone5")
548 };
549
550 // time interval in seconds between this frame and the previous
551 F32 time = gFrameIntervalSeconds;
552
553 // avoid making ridicously big movements if there's a big drop in fps
554 if (time > .2f)
555 {
556 time = .2f;
557 }
558
559 // note: max feather is 32.0
560 F32 feather = gSavedSettings.getF32("AvatarFeathering");
561
562 F32 cur_delta[6];
563 F32 val, dom_mov = 0.f;
564 U32 dom_axis = Z_I;
565#if LIB_NDOF
566 bool absolute = (gSavedSettings.getBOOL("Cursor3D") && mNdofDev->absolute);
567#else
568 bool absolute = false;
569#endif
570 // remove dead zones and determine biggest movement on the joystick
571 for (U32 i = 0; i < 6; i++)
572 {
573 cur_delta[i] = -mAxes[axis[i]];
574 if (absolute)
575 {
576 F32 tmp = cur_delta[i];
577 cur_delta[i] = cur_delta[i] - sLastDelta[i];
578 sLastDelta[i] = tmp;
579 }
580
581 if (cur_delta[i] > 0)
582 {
583 cur_delta[i] = llmax(cur_delta[i]-dead_zone[i], 0.f);
584 }
585 else
586 {
587 cur_delta[i] = llmin(cur_delta[i]+dead_zone[i], 0.f);
588 }
589
590 // we don't care about Roll (RZ) and Z is calculated after the loop
591 if (i != Z_I && i != RZ_I)
592 {
593 // find out the axis with the biggest joystick motion
594 val = fabs(cur_delta[i]);
595 if (val > dom_mov)
596 {
597 dom_axis = i;
598 dom_mov = val;
599 }
600 }
601 }
602
603 // forward|backward movements overrule the real dominant movement if
604 // they're bigger than its 20%. This is what you want cos moving forward
605 // is what you do most. We also added a special (even more lenient) case
606 // for RX|RY to allow walking while pitching n' turning
607 if (fabs(cur_delta[Z_I]) > .2f * dom_mov
608 || ((dom_axis == RX_I || dom_axis == RY_I)
609 && fabs(cur_delta[Z_I]) > .05f * dom_mov))
610 {
611 dom_axis = Z_I;
612 }
613
614 sDelta[X_I] = -cur_delta[X_I] * axis_scale[X_I];
615 sDelta[Y_I] = -cur_delta[Y_I] * axis_scale[Y_I];
616 sDelta[Z_I] = -cur_delta[Z_I] * axis_scale[Z_I];
617 cur_delta[RX_I] *= -axis_scale[RX_I] * mPerfScale;
618 cur_delta[RY_I] *= -axis_scale[RY_I] * mPerfScale;
619
620 if (!absolute)
621 {
622 cur_delta[RX_I] *= time;
623 cur_delta[RY_I] *= time;
624 }
625 sDelta[RX_I] += (cur_delta[RX_I] - sDelta[RX_I]) * time * feather;
626 sDelta[RY_I] += (cur_delta[RY_I] - sDelta[RY_I]) * time * feather;
627
628 switch (dom_axis)
629 {
630 case X_I: // move sideways
631 agentSlide(sDelta[X_I]);
632 break;
633
634 case Z_I: // forward/back
635 {
636 agentPush(sDelta[Z_I]);
637
638 if (fabs(sDelta[Y_I]) > .1f)
639 {
640 agentFly(sDelta[Y_I]);
641 }
642
643 // too many rotations during walking can be confusing, so apply
644 // the deadzones one more time (quick & dirty), at 50%|30% power
645 F32 eff_rx = .3f * dead_zone[RX_I];
646 F32 eff_ry = .3f * dead_zone[RY_I];
647
648 if (sDelta[RX_I] > 0)
649 {
650 eff_rx = llmax(sDelta[RX_I] - eff_rx, 0.f);
651 }
652 else
653 {
654 eff_rx = llmin(sDelta[RX_I] + eff_rx, 0.f);
655 }
656
657 if (sDelta[RY_I] > 0)
658 {
659 eff_ry = llmax(sDelta[RY_I] - eff_ry, 0.f);
660 }
661 else
662 {
663 eff_ry = llmin(sDelta[RY_I] + eff_ry, 0.f);
664 }
665
666
667 if (fabs(eff_rx) > 0.f || fabs(eff_ry) > 0.f)
668 {
669 if (gAgent.getFlying())
670 {
671 agentRotate(eff_rx, eff_ry);
672 }
673 else
674 {
675 agentRotate(eff_rx, 2.f * eff_ry);
676 }
677 }
678 break;
679 }
680 case Y_I: // up/crouch
681 agentFly(sDelta[Y_I]);
682 break;
683
684 case RX_I: // pitch
685 case RY_I: // turn
686 agentRotate(sDelta[RX_I], sDelta[RY_I]);
687 break;
688 // case RZ_I: roll is unused in avatar mode
689 }// switch
690}
691
692// -----------------------------------------------------------------------------
693void LLViewerJoystick::moveFlycam(bool reset)
694{
695 static LLQuaternion sFlycamRotation;
696 static LLVector3 sFlycamPosition;
697 static F32 sFlycamZoom;
698
699 if (!gFocusMgr.getAppHasFocus() || mDriverState != JDS_INITIALIZED
700 || !gSavedSettings.getBOOL("JoystickEnabled") || !gSavedSettings.getBOOL("JoystickFlycamEnabled"))
701 {
702 return;
703 }
704
55 S32 axis[] = 705 S32 axis[] =
56 { 706 {
57 gSavedSettings.getS32("FlycamAxis0"), 707 gSavedSettings.getS32("JoystickAxis0"),
58 gSavedSettings.getS32("FlycamAxis1"), 708 gSavedSettings.getS32("JoystickAxis1"),
59 gSavedSettings.getS32("FlycamAxis2"), 709 gSavedSettings.getS32("JoystickAxis2"),
60 gSavedSettings.getS32("FlycamAxis3"), 710 gSavedSettings.getS32("JoystickAxis3"),
61 gSavedSettings.getS32("FlycamAxis4"), 711 gSavedSettings.getS32("JoystickAxis4"),
62 gSavedSettings.getS32("FlycamAxis5"), 712 gSavedSettings.getS32("JoystickAxis5"),
63 gSavedSettings.getS32("FlycamAxis6") 713 gSavedSettings.getS32("JoystickAxis6")
64 }; 714 };
65 715
716 bool in_build_mode = LLToolMgr::getInstance()->inBuildMode();
717 if (reset || mResetFlag)
718 {
719 sFlycamPosition = LLViewerCamera::getInstance()->getOrigin();
720 sFlycamRotation = LLViewerCamera::getInstance()->getQuaternion();
721 sFlycamZoom = LLViewerCamera::getInstance()->getView();
722
723 resetDeltas(axis, in_build_mode);
724
725 return;
726 }
727
66 F32 axis_scale[] = 728 F32 axis_scale[] =
67 { 729 {
68 gSavedSettings.getF32("FlycamAxisScale0"), 730 gSavedSettings.getF32("FlycamAxisScale0"),
@@ -85,33 +747,37 @@ void LLViewerJoystick::updateCamera(BOOL reset)
85 gSavedSettings.getF32("FlycamAxisDeadZone6") 747 gSavedSettings.getF32("FlycamAxisDeadZone6")
86 }; 748 };
87 749
88 if (reset) 750 F32 time = gFrameIntervalSeconds;
89 {
90 sFlycamPosition = gCamera->getOrigin();
91 sFlycamRotation = gCamera->getQuaternion();
92 sFlycamZoom = gCamera->getView();
93 751
94 for (U32 i = 0; i < 7; i++) 752 // avoid making ridicously big movements if there's a big drop in fps
95 { 753 if (time > .2f)
96 last_delta[i] = -window->getJoystickAxis(axis[i]); 754 {
97 delta[i] = 0.f; 755 time = .2f;
98 }
99 return;
100 } 756 }
101 757
102 F32 cur_delta[7]; 758 F32 cur_delta[7];
103 F32 feather = gSavedSettings.getF32("FlycamFeathering"); 759 F32 feather = gSavedSettings.getF32("FlycamFeathering");
104 BOOL absolute = gSavedSettings.getBOOL("FlycamAbsolute"); 760 bool absolute = gSavedSettings.getBOOL("Cursor3D");
105 761
106 for (U32 i = 0; i < 7; i++) 762 for (U32 i = 0; i < 7; i++)
107 { 763 {
108 cur_delta[i] = -window->getJoystickAxis(axis[i]); 764 cur_delta[i] = -getJoystickAxis(axis[i]);
765
766 // we need smaller camera movements in build mode
767 if (in_build_mode)
768 {
769 if (i == X_I || i == Y_I || i == Z_I)
770 {
771 cur_delta[i] /= BUILDMODE_FLYCAM_T_SCALE;
772 }
773 }
774
109 F32 tmp = cur_delta[i]; 775 F32 tmp = cur_delta[i];
110 if (absolute) 776 if (absolute)
111 { 777 {
112 cur_delta[i] = cur_delta[i] - last_delta[i]; 778 cur_delta[i] = cur_delta[i] - sLastDelta[i];
113 } 779 }
114 last_delta[i] = tmp; 780 sLastDelta[i] = tmp;
115 781
116 if (cur_delta[i] > 0) 782 if (cur_delta[i] > 0)
117 { 783 {
@@ -128,18 +794,15 @@ void LLViewerJoystick::updateCamera(BOOL reset)
128 cur_delta[i] *= time; 794 cur_delta[i] *= time;
129 } 795 }
130 796
131 delta[i] = delta[i] + (cur_delta[i]-delta[i])*time*feather; 797 sDelta[i] = sDelta[i] + (cur_delta[i]-sDelta[i])*time*feather;
132 } 798 }
133 799
134 sFlycamPosition += LLVector3(delta) * sFlycamRotation; 800 sFlycamPosition += LLVector3(sDelta) * sFlycamRotation;
135 801
136 LLMatrix3 rot_mat(delta[3], 802 LLMatrix3 rot_mat(sDelta[3], sDelta[4], sDelta[5]);
137 delta[4],
138 delta[5]);
139
140 sFlycamRotation = LLQuaternion(rot_mat)*sFlycamRotation; 803 sFlycamRotation = LLQuaternion(rot_mat)*sFlycamRotation;
141 804
142 if (gSavedSettings.getBOOL("FlycamAutoLeveling")) 805 if (gSavedSettings.getBOOL("AutoLeveling"))
143 { 806 {
144 LLMatrix3 level(sFlycamRotation); 807 LLMatrix3 level(sFlycamRotation);
145 808
@@ -153,123 +816,185 @@ void LLViewerJoystick::updateCamera(BOOL reset)
153 level.setRows(x,y,z); 816 level.setRows(x,y,z);
154 level.orthogonalize(); 817 level.orthogonalize();
155 818
156 LLQuaternion quat = LLQuaternion(level); 819 LLQuaternion quat(level);
157 sFlycamRotation = nlerp(llmin(feather*time,1.f), sFlycamRotation, quat); 820 sFlycamRotation = nlerp(llmin(feather*time,1.f), sFlycamRotation, quat);
158 } 821 }
159 822
160 if (gSavedSettings.getBOOL("FlycamZoomDirect")) 823 if (gSavedSettings.getBOOL("ZoomDirect"))
161 { 824 {
162 sFlycamZoom = last_delta[6]*axis_scale[6]+dead_zone[6]; 825 sFlycamZoom = sLastDelta[6]*axis_scale[6]+dead_zone[6];
163 } 826 }
164 else 827 else
165 { 828 {
166 sFlycamZoom += delta[6]; 829 sFlycamZoom += sDelta[6];
167 } 830 }
168 831
169 LLMatrix3 mat(sFlycamRotation); 832 LLMatrix3 mat(sFlycamRotation);
170 833
171 gCamera->setView(sFlycamZoom); 834 LLViewerCamera::getInstance()->setView(sFlycamZoom);
172 gCamera->setOrigin(sFlycamPosition); 835 LLViewerCamera::getInstance()->setOrigin(sFlycamPosition);
173 gCamera->mXAxis = LLVector3(mat.mMatrix[0]); 836 LLViewerCamera::getInstance()->mXAxis = LLVector3(mat.mMatrix[0]);
174 gCamera->mYAxis = LLVector3(mat.mMatrix[1]); 837 LLViewerCamera::getInstance()->mYAxis = LLVector3(mat.mMatrix[1]);
175 gCamera->mZAxis = LLVector3(mat.mMatrix[2]); 838 LLViewerCamera::getInstance()->mZAxis = LLVector3(mat.mMatrix[2]);
176} 839}
177 840
841// -----------------------------------------------------------------------------
842bool LLViewerJoystick::toggleFlycam()
843{
844 if (!gSavedSettings.getBOOL("JoystickEnabled") || !gSavedSettings.getBOOL("JoystickFlycamEnabled"))
845 {
846 return false;
847 }
848 mOverrideCamera = !mOverrideCamera;
849 if (mOverrideCamera)
850 {
851 moveFlycam(true);
852 }
853 else if (!LLToolMgr::getInstance()->inBuildMode())
854 {
855 moveAvatar(true);
856 }
857 else
858 {
859 // we are in build mode, exiting from the flycam mode: since we are
860 // going to keep the flycam POV for the main camera until the avatar
861 // moves, we need to track this situation.
862 setCameraNeedsUpdate(false);
863 setNeedsReset(true);
864 }
865 return true;
866}
178 867
179void LLViewerJoystick::scanJoystick() 868void LLViewerJoystick::scanJoystick()
180{ 869{
181 if (!sOverrideCamera) 870 if (mDriverState != JDS_INITIALIZED || !gSavedSettings.getBOOL("JoystickEnabled"))
182 { 871 {
183 static U32 joystick_state = 0; 872 return;
184 static U32 button_state = 0; 873 }
185 874
186 F32 xval = gViewerWindow->getWindow()->getJoystickAxis(0); 875#if LL_WINDOWS
187 F32 yval = gViewerWindow->getWindow()->getJoystickAxis(1); 876 // On windows, the flycam is updated syncronously with a timer, so there is
877 // no need to update the status of the joystick here.
878 if (!mOverrideCamera)
879#endif
880 updateStatus();
188 881
189 if (xval <= -0.5f) 882 static long toggle_flycam = 0;
190 {
191 if (!(joystick_state & 0x1))
192 {
193 gKeyboard->handleTranslatedKeyDown(KEY_PAD_LEFT, 0);
194 joystick_state |= 0x1;
195 }
196 }
197 else
198 {
199 if (joystick_state & 0x1)
200 {
201 gKeyboard->handleTranslatedKeyUp(KEY_PAD_LEFT, 0);
202 joystick_state &= ~0x1;
203 }
204 }
205 if (xval >= 0.5f)
206 {
207 if (!(joystick_state & 0x2))
208 {
209 gKeyboard->handleTranslatedKeyDown(KEY_PAD_RIGHT, 0);
210 joystick_state |= 0x2;
211 }
212 }
213 else
214 {
215 if (joystick_state & 0x2)
216 {
217 gKeyboard->handleTranslatedKeyUp(KEY_PAD_RIGHT, 0);
218 joystick_state &= ~0x2;
219 }
220 }
221 if (yval <= -0.5f)
222 {
223 if (!(joystick_state & 0x4))
224 {
225 gKeyboard->handleTranslatedKeyDown(KEY_PAD_UP, 0);
226 joystick_state |= 0x4;
227 }
228 }
229 else
230 {
231 if (joystick_state & 0x4)
232 {
233 gKeyboard->handleTranslatedKeyUp(KEY_PAD_UP, 0);
234 joystick_state &= ~0x4;
235 }
236 }
237 if (yval >= 0.5f)
238 {
239 if (!(joystick_state & 0x8))
240 {
241 gKeyboard->handleTranslatedKeyDown(KEY_PAD_DOWN, 0);
242 joystick_state |= 0x8;
243 }
244 }
245 else
246 {
247 if (joystick_state & 0x8)
248 {
249 gKeyboard->handleTranslatedKeyUp(KEY_PAD_DOWN, 0);
250 joystick_state &= ~0x8;
251 }
252 }
253 883
254 for( int i = 0; i < 15; i++ ) 884 if (mBtn[0] == 1)
885 {
886 if (mBtn[0] != toggle_flycam)
255 { 887 {
256 if ( gViewerWindow->getWindow()->getJoystickButton(i) & 0x80 ) 888 toggle_flycam = toggleFlycam() ? 1 : 0;
257 {
258 if (!(button_state & (1<<i)))
259 {
260 gKeyboard->handleTranslatedKeyDown(KEY_BUTTON1+i, 0);
261 button_state |= (1<<i);
262 }
263 }
264 else
265 {
266 if (button_state & (1<<i))
267 {
268 gKeyboard->handleTranslatedKeyUp(KEY_BUTTON1+i, 0);
269 button_state &= ~(1<<i);
270 }
271 }
272 } 889 }
273 } 890 }
891 else
892 {
893 toggle_flycam = 0;
894 }
895
896 if (!mOverrideCamera && !LLToolMgr::getInstance()->inBuildMode())
897 {
898 moveAvatar();
899 }
900}
901
902// -----------------------------------------------------------------------------
903std::string LLViewerJoystick::getDescription()
904{
905 std::string res;
906#if LIB_NDOF
907 if (mDriverState == JDS_INITIALIZED && mNdofDev)
908 {
909 res = ll_safe_string(mNdofDev->product);
910 }
911#endif
912 return res;
913}
914
915bool LLViewerJoystick::isLikeSpaceNavigator() const
916{
917#if LIB_NDOF
918 return (isJoystickInitialized()
919 && (strncmp(mNdofDev->product, "SpaceNavigator", 14) == 0
920 || strncmp(mNdofDev->product, "SpaceExplorer", 13) == 0
921 || strncmp(mNdofDev->product, "SpaceTraveler", 13) == 0
922 || strncmp(mNdofDev->product, "SpacePilot", 10) == 0));
923#else
924 return false;
925#endif
274} 926}
275 927
928// -----------------------------------------------------------------------------
929void LLViewerJoystick::setSNDefaults()
930{
931#if LL_DARWIN
932#define kPlatformScale 20.f
933#else
934#define kPlatformScale 1.f
935#endif
936
937 //gViewerWindow->alertXml("CacheWillClear");
938 llinfos << "restoring SpaceNavigator defaults..." << llendl;
939
940 gSavedSettings.setS32("JoystickAxis0", 1); // z (at)
941 gSavedSettings.setS32("JoystickAxis1", 0); // x (slide)
942 gSavedSettings.setS32("JoystickAxis2", 2); // y (up)
943 gSavedSettings.setS32("JoystickAxis3", 4); // pitch
944 gSavedSettings.setS32("JoystickAxis4", 3); // roll
945 gSavedSettings.setS32("JoystickAxis5", 5); // yaw
946 gSavedSettings.setS32("JoystickAxis6", -1);
947
948#if LL_DARWIN
949 // The SpaceNavigator doesn't act as a 3D cursor on OS X.
950 gSavedSettings.setBOOL("Cursor3D", false);
951#else
952 gSavedSettings.setBOOL("Cursor3D", true);
953#endif
954 gSavedSettings.setBOOL("AutoLeveling", true);
955 gSavedSettings.setBOOL("ZoomDirect", false);
956
957 gSavedSettings.setF32("AvatarAxisScale0", 1.f);
958 gSavedSettings.setF32("AvatarAxisScale1", 1.f);
959 gSavedSettings.setF32("AvatarAxisScale2", 1.f);
960 gSavedSettings.setF32("AvatarAxisScale4", .1f * kPlatformScale);
961 gSavedSettings.setF32("AvatarAxisScale5", .1f * kPlatformScale);
962 gSavedSettings.setF32("AvatarAxisScale3", 0.f * kPlatformScale);
963 gSavedSettings.setF32("BuildAxisScale1", .3f * kPlatformScale);
964 gSavedSettings.setF32("BuildAxisScale2", .3f * kPlatformScale);
965 gSavedSettings.setF32("BuildAxisScale0", .3f * kPlatformScale);
966 gSavedSettings.setF32("BuildAxisScale4", .3f * kPlatformScale);
967 gSavedSettings.setF32("BuildAxisScale5", .3f * kPlatformScale);
968 gSavedSettings.setF32("BuildAxisScale3", .3f * kPlatformScale);
969 gSavedSettings.setF32("FlycamAxisScale1", 2.f * kPlatformScale);
970 gSavedSettings.setF32("FlycamAxisScale2", 2.f * kPlatformScale);
971 gSavedSettings.setF32("FlycamAxisScale0", 2.1f * kPlatformScale);
972 gSavedSettings.setF32("FlycamAxisScale4", .1f * kPlatformScale);
973 gSavedSettings.setF32("FlycamAxisScale5", .15f * kPlatformScale);
974 gSavedSettings.setF32("FlycamAxisScale3", 0.f * kPlatformScale);
975 gSavedSettings.setF32("FlycamAxisScale6", 0.f * kPlatformScale);
976
977 gSavedSettings.setF32("AvatarAxisDeadZone0", .1f);
978 gSavedSettings.setF32("AvatarAxisDeadZone1", .1f);
979 gSavedSettings.setF32("AvatarAxisDeadZone2", .1f);
980 gSavedSettings.setF32("AvatarAxisDeadZone3", 1.f);
981 gSavedSettings.setF32("AvatarAxisDeadZone4", .02f);
982 gSavedSettings.setF32("AvatarAxisDeadZone5", .01f);
983 gSavedSettings.setF32("BuildAxisDeadZone0", .01f);
984 gSavedSettings.setF32("BuildAxisDeadZone1", .01f);
985 gSavedSettings.setF32("BuildAxisDeadZone2", .01f);
986 gSavedSettings.setF32("BuildAxisDeadZone3", .01f);
987 gSavedSettings.setF32("BuildAxisDeadZone4", .01f);
988 gSavedSettings.setF32("BuildAxisDeadZone5", .01f);
989 gSavedSettings.setF32("FlycamAxisDeadZone0", .01f);
990 gSavedSettings.setF32("FlycamAxisDeadZone1", .01f);
991 gSavedSettings.setF32("FlycamAxisDeadZone2", .01f);
992 gSavedSettings.setF32("FlycamAxisDeadZone3", .01f);
993 gSavedSettings.setF32("FlycamAxisDeadZone4", .01f);
994 gSavedSettings.setF32("FlycamAxisDeadZone5", .01f);
995 gSavedSettings.setF32("FlycamAxisDeadZone6", 1.f);
996
997 gSavedSettings.setF32("AvatarFeathering", 6.f);
998 gSavedSettings.setF32("BuildFeathering", 12.f);
999 gSavedSettings.setF32("FlycamFeathering", 5.f);
1000}
diff --git a/linden/indra/newview/llviewerjoystick.h b/linden/indra/newview/llviewerjoystick.h
index b4107bb..c7c78f3 100644
--- a/linden/indra/newview/llviewerjoystick.h
+++ b/linden/indra/newview/llviewerjoystick.h
@@ -1,6 +1,6 @@
1/** 1/**
2 * @file llviewerjoystick.h 2 * @file llviewerjoystick.h
3 * @brief Viewer joystick functionality. 3 * @brief Viewer joystick / NDOF device functionality.
4 * 4 *
5 * $LicenseInfo:firstyear=2001&license=viewergpl$ 5 * $LicenseInfo:firstyear=2001&license=viewergpl$
6 * 6 *
@@ -32,12 +32,75 @@
32#ifndef LL_LLVIEWERJOYSTICK_H 32#ifndef LL_LLVIEWERJOYSTICK_H
33#define LL_LLVIEWERJOYSTICK_H 33#define LL_LLVIEWERJOYSTICK_H
34 34
35class LLViewerJoystick 35#include "stdtypes.h"
36
37#define LIB_NDOF (LL_WINDOWS || LL_DARWIN)
38
39#if LIB_NDOF
40#include "ndofdev_external.h"
41#else
42#define NDOF_Device void
43#define NDOF_HotPlugResult S32
44#endif
45
46typedef enum e_joystick_driver_state
47{
48 JDS_UNINITIALIZED,
49 JDS_INITIALIZED,
50 JDS_INITIALIZING
51} EJoystickDriverState;
52
53class LLViewerJoystick : public LLSingleton<LLViewerJoystick>
36{ 54{
37public: 55public:
38 static BOOL sOverrideCamera; 56 LLViewerJoystick();
39 static void scanJoystick(); 57 virtual ~LLViewerJoystick();
40 static void updateCamera(BOOL reset = FALSE); 58
59 void init(bool autoenable);
60 void updateStatus();
61 void scanJoystick();
62 void moveObjects(bool reset = false);
63 void moveAvatar(bool reset = false);
64 void moveFlycam(bool reset = false);
65 F32 getJoystickAxis(U32 axis) const;
66 U32 getJoystickButton(U32 button) const;
67 bool isJoystickInitialized() const {return (mDriverState==JDS_INITIALIZED);}
68 bool isLikeSpaceNavigator() const;
69 void setNeedsReset(bool reset = true) { mResetFlag = reset; }
70 void setCameraNeedsUpdate(bool b) { mCameraUpdated = b; }
71 bool getCameraNeedsUpdate() const { return mCameraUpdated; }
72 bool getOverrideCamera() { return mOverrideCamera; }
73 void setOverrideCamera(bool val);
74 bool toggleFlycam();
75 void setSNDefaults();
76 std::string getDescription();
77
78protected:
79 void updateEnabled(bool autoenable);
80 void terminate();
81 void agentSlide(F32 inc);
82 void agentPush(F32 inc);
83 void agentFly(F32 inc);
84 void agentRotate(F32 pitch_inc, F32 turn_inc);
85 void agentJump();
86 void resetDeltas(S32 axis[], bool flycam_and_build = false);
87#if LIB_NDOF
88 static NDOF_HotPlugResult HotPlugAddCallback(NDOF_Device *dev);
89 static void HotPlugRemovalCallback(NDOF_Device *dev);
90#endif
91
92private:
93 F32 mAxes[6];
94 long mBtn[16];
95 EJoystickDriverState mDriverState;
96 NDOF_Device *mNdofDev;
97 bool mResetFlag;
98 F32 mPerfScale;
99 bool mCameraUpdated;
100 bool mOverrideCamera;
101
102 static F32 sLastDelta[7];
103 static F32 sDelta[7];
41}; 104};
42 105
43#endif 106#endif
diff --git a/linden/indra/newview/llviewerkeyboard.cpp b/linden/indra/newview/llviewerkeyboard.cpp
index 6fe1052..1c5d870 100644
--- a/linden/indra/newview/llviewerkeyboard.cpp
+++ b/linden/indra/newview/llviewerkeyboard.cpp
@@ -31,6 +31,7 @@
31 31
32#include "llviewerprecompiledheaders.h" 32#include "llviewerprecompiledheaders.h"
33 33
34#include "llappviewer.h"
34#include "llviewerkeyboard.h" 35#include "llviewerkeyboard.h"
35#include "llmath.h" 36#include "llmath.h"
36#include "llagent.h" 37#include "llagent.h"
@@ -83,82 +84,102 @@ void agent_push_down( EKeystate s )
83 gAgent.moveUp(-1); 84 gAgent.moveUp(-1);
84} 85}
85 86
86void agent_push_forward( EKeystate s ) 87static void agent_handle_doubletap_run(EKeystate s, LLAgent::EDoubleTapRunMode mode)
87{ 88{
88 if( KEYSTATE_UP == s ) return; 89 if (KEYSTATE_UP == s)
89 F32 time = gKeyboard->getCurKeyElapsedTime();
90 S32 frame_count = llround(gKeyboard->getCurKeyElapsedFrameCount());
91
92 if( time < NUDGE_TIME || frame_count <= NUDGE_FRAMES)
93 { 90 {
94 gAgent.moveAtNudge(1); 91 // Releasing a walk-key resets the double-tap timer
92 gAgent.mDoubleTapRunTimer.reset();
93 if (gAgent.mDoubleTapRunMode == mode &&
94 gAgent.getRunning() &&
95 !gAgent.getAlwaysRun())
96 {
97 // Turn off temporary running.
98 gAgent.clearRunning();
99 gAgent.sendWalkRun(gAgent.getRunning());
100 }
101 gAgent.mDoubleTapRunMode = mode;
95 } 102 }
96 else 103 else if (gAllowTapTapHoldRun &&
104 KEYSTATE_DOWN == s &&
105 gAgent.mDoubleTapRunMode == mode &&
106 gAgent.mDoubleTapRunTimer.getElapsedTimeF32() < NUDGE_TIME)
97 { 107 {
98 gAgent.moveAt(1); 108 // Same walk-key was pushed again quickly; this is a double-tap
109 // so engage temporary running.
110 gAgent.setRunning();
111 gAgent.sendWalkRun(gAgent.getRunning());
99 } 112 }
100} 113}
101 114
102 115static void agent_push_forwardbackward( EKeystate s, S32 direction, LLAgent::EDoubleTapRunMode mode )
103void agent_push_backward( EKeystate s )
104{ 116{
105 if( KEYSTATE_UP == s ) return; 117 agent_handle_doubletap_run(s, mode);
106 S32 frame_count = llround(gKeyboard->getCurKeyElapsedFrameCount()); 118 if (KEYSTATE_UP == s) return;
119
107 F32 time = gKeyboard->getCurKeyElapsedTime(); 120 F32 time = gKeyboard->getCurKeyElapsedTime();
121 S32 frame_count = llround(gKeyboard->getCurKeyElapsedFrameCount());
108 122
109 if( time < NUDGE_TIME || frame_count <= NUDGE_FRAMES) 123 if( time < NUDGE_TIME || frame_count <= NUDGE_FRAMES)
110 { 124 {
111 gAgent.moveAtNudge(-1); 125 gAgent.moveAtNudge(direction);
112 } 126 }
113 else 127 else
114 { 128 {
115 gAgent.moveAt(-1); 129 gAgent.moveAt(direction);
116 } 130 }
117} 131}
118 132
119void agent_slide_left( EKeystate s ) 133void agent_push_forward( EKeystate s )
120{ 134{
121 if( KEYSTATE_UP == s ) return; 135 agent_push_forwardbackward(s, 1, LLAgent::DOUBLETAP_FORWARD);
136}
137
138
139void agent_push_backward( EKeystate s )
140{
141 agent_push_forwardbackward(s, -1, LLAgent::DOUBLETAP_BACKWARD);
142}
143
144static void agent_slide_leftright( EKeystate s, S32 direction, LLAgent::EDoubleTapRunMode mode )
145{
146 agent_handle_doubletap_run(s, mode);
147 if( KEYSTATE_UP == s ) return;
122 F32 time = gKeyboard->getCurKeyElapsedTime(); 148 F32 time = gKeyboard->getCurKeyElapsedTime();
123 S32 frame_count = llround(gKeyboard->getCurKeyElapsedFrameCount()); 149 S32 frame_count = llround(gKeyboard->getCurKeyElapsedFrameCount());
124 150
125 if( time < NUDGE_TIME || frame_count <= NUDGE_FRAMES) 151 if( time < NUDGE_TIME || frame_count <= NUDGE_FRAMES)
126 { 152 {
127 gAgent.moveLeftNudge(1); 153 gAgent.moveLeftNudge(direction);
128 } 154 }
129 else 155 else
130 { 156 {
131 gAgent.moveLeft(1); 157 gAgent.moveLeft(direction);
132 } 158 }
133} 159}
134 160
135 161
136void agent_slide_right( EKeystate s ) 162void agent_slide_left( EKeystate s )
137{ 163{
138 if( KEYSTATE_UP == s ) return; 164 agent_slide_leftright(s, 1, LLAgent::DOUBLETAP_SLIDELEFT);
139 F32 time = gKeyboard->getCurKeyElapsedTime(); 165}
140 S32 frame_count = llround(gKeyboard->getCurKeyElapsedFrameCount());
141 166
142 if( time < NUDGE_TIME || frame_count <= NUDGE_FRAMES) 167
143 { 168void agent_slide_right( EKeystate s )
144 gAgent.moveLeftNudge(-1); 169{
145 } 170 agent_slide_leftright(s, -1, LLAgent::DOUBLETAP_SLIDERIGHT);
146 else
147 {
148 gAgent.moveLeft(-1);
149 }
150} 171}
151 172
152void agent_turn_left( EKeystate s ) 173void agent_turn_left( EKeystate s )
153{ 174{
154 if( KEYSTATE_UP == s ) return; 175 if (LLToolCamera::getInstance()->mouseSteerMode())
155 F32 time = gKeyboard->getCurKeyElapsedTime();
156 if (gToolCamera->mouseSteerMode())
157 { 176 {
158 agent_slide_left(s); 177 agent_slide_left(s);
159 } 178 }
160 else 179 else
161 { 180 {
181 if (KEYSTATE_UP == s) return;
182 F32 time = gKeyboard->getCurKeyElapsedTime();
162 gAgent.moveYaw( LLFloaterMove::getYawRate( time ) ); 183 gAgent.moveYaw( LLFloaterMove::getYawRate( time ) );
163 } 184 }
164} 185}
@@ -166,14 +187,14 @@ void agent_turn_left( EKeystate s )
166 187
167void agent_turn_right( EKeystate s ) 188void agent_turn_right( EKeystate s )
168{ 189{
169 if( KEYSTATE_UP == s ) return; 190 if (LLToolCamera::getInstance()->mouseSteerMode())
170 F32 time = gKeyboard->getCurKeyElapsedTime();
171 if (gToolCamera->mouseSteerMode())
172 { 191 {
173 agent_slide_right(s); 192 agent_slide_right(s);
174 } 193 }
175 else 194 else
176 { 195 {
196 if (KEYSTATE_UP == s) return;
197 F32 time = gKeyboard->getCurKeyElapsedTime();
177 gAgent.moveYaw( -LLFloaterMove::getYawRate( time ) ); 198 gAgent.moveYaw( -LLFloaterMove::getYawRate( time ) );
178 } 199 }
179} 200}
@@ -477,6 +498,24 @@ void start_chat( EKeystate s )
477 gChatBar->startChat(NULL); 498 gChatBar->startChat(NULL);
478} 499}
479 500
501void start_gesture( EKeystate s )
502{
503 if (KEYSTATE_UP == s &&
504 !(gFocusMgr.getKeyboardFocus() && gFocusMgr.getKeyboardFocus()->acceptsTextInput()))
505 {
506 if (gChatBar->getCurrentChat().empty())
507 {
508 // No existing chat in chat editor, insert '/'
509 gChatBar->startChat("/");
510 }
511 else
512 {
513 // Don't overwrite existing text in chat editor
514 gChatBar->startChat(NULL);
515 }
516 }
517}
518
480void bind_keyboard_functions() 519void bind_keyboard_functions()
481{ 520{
482 gViewerKeyboard.bindNamedFunction("jump", agent_jump); 521 gViewerKeyboard.bindNamedFunction("jump", agent_jump);
@@ -518,6 +557,7 @@ void bind_keyboard_functions()
518 gViewerKeyboard.bindNamedFunction("edit_avatar_move_backward", edit_avatar_move_backward); 557 gViewerKeyboard.bindNamedFunction("edit_avatar_move_backward", edit_avatar_move_backward);
519 gViewerKeyboard.bindNamedFunction("stop_moving", stop_moving); 558 gViewerKeyboard.bindNamedFunction("stop_moving", stop_moving);
520 gViewerKeyboard.bindNamedFunction("start_chat", start_chat); 559 gViewerKeyboard.bindNamedFunction("start_chat", start_chat);
560 gViewerKeyboard.bindNamedFunction("start_gesture", start_gesture);
521} 561}
522 562
523LLViewerKeyboard::LLViewerKeyboard() 563LLViewerKeyboard::LLViewerKeyboard()
diff --git a/linden/indra/newview/llviewerkeyboard.h b/linden/indra/newview/llviewerkeyboard.h
index 97f0f67..2013125 100644
--- a/linden/indra/newview/llviewerkeyboard.h
+++ b/linden/indra/newview/llviewerkeyboard.h
@@ -55,10 +55,9 @@ typedef enum e_keyboard_mode
55} EKeyboardMode; 55} EKeyboardMode;
56 56
57 57
58void agent_push_forward( EKeystate s );
59void agent_turn_right( EKeystate s );
60void bind_keyboard_functions(); 58void bind_keyboard_functions();
61 59
60
62class LLViewerKeyboard 61class LLViewerKeyboard
63{ 62{
64public: 63public:
diff --git a/linden/indra/newview/llviewermedia.cpp b/linden/indra/newview/llviewermedia.cpp
index 0429a3c..f318d07 100644
--- a/linden/indra/newview/llviewermedia.cpp
+++ b/linden/indra/newview/llviewermedia.cpp
@@ -44,9 +44,6 @@
44#include "llmediamanager.h" 44#include "llmediamanager.h"
45#include "lluuid.h" 45#include "lluuid.h"
46 46
47// don't want to include llappviewer.h
48extern std::string gChannelName;
49
50// Implementation functions not exported into header file 47// Implementation functions not exported into header file
51class LLViewerMediaImpl 48class LLViewerMediaImpl
52 : public LLMediaObserver 49 : public LLMediaObserver
@@ -456,7 +453,7 @@ void LLViewerMedia::initClass()
456 // append our magic version number string to the browser user agent id 453 // append our magic version number string to the browser user agent id
457 std::ostringstream codec; 454 std::ostringstream codec;
458 codec << "[Second Life "; 455 codec << "[Second Life ";
459 codec << "(" << gChannelName << ")"; 456 codec << "(" << gSavedSettings.getString("VersionChannelName") << ")";
460 codec << " - " << LL_VERSION_MAJOR << "." << LL_VERSION_MINOR << "." << LL_VERSION_PATCH << "." << LL_VERSION_BUILD; 457 codec << " - " << LL_VERSION_MAJOR << "." << LL_VERSION_MINOR << "." << LL_VERSION_PATCH << "." << LL_VERSION_BUILD;
461 codec << "]"; 458 codec << "]";
462 init_data->setBrowserUserAgentId( codec.str() ); 459 init_data->setBrowserUserAgentId( codec.str() );
diff --git a/linden/indra/newview/llviewermenu.cpp b/linden/indra/newview/llviewermenu.cpp
index b35abe6..6ee80a6 100644
--- a/linden/indra/newview/llviewermenu.cpp
+++ b/linden/indra/newview/llviewermenu.cpp
@@ -67,7 +67,6 @@
67#include "llagentpilot.h" 67#include "llagentpilot.h"
68#include "llbox.h" 68#include "llbox.h"
69#include "llcallingcard.h" 69#include "llcallingcard.h"
70#include "llcameraview.h"
71#include "llclipboard.h" 70#include "llclipboard.h"
72#include "llcompilequeue.h" 71#include "llcompilequeue.h"
73#include "llconsole.h" 72#include "llconsole.h"
@@ -92,6 +91,7 @@
92#include "llfloaterbuycontents.h" 91#include "llfloaterbuycontents.h"
93#include "llfloaterbuycurrency.h" 92#include "llfloaterbuycurrency.h"
94#include "llfloaterbuyland.h" 93#include "llfloaterbuyland.h"
94#include "llfloatercamera.h"
95#include "llfloaterchat.h" 95#include "llfloaterchat.h"
96#include "llfloatercustomize.h" 96#include "llfloatercustomize.h"
97#include "llfloaterdaycycle.h" 97#include "llfloaterdaycycle.h"
@@ -106,6 +106,7 @@
106#include "llfloatergroups.h" 106#include "llfloatergroups.h"
107#include "llfloaterhtml.h" 107#include "llfloaterhtml.h"
108#include "llfloaterhtmlhelp.h" 108#include "llfloaterhtmlhelp.h"
109#include "llfloaterhud.h"
109#include "llfloaterinspect.h" 110#include "llfloaterinspect.h"
110#include "llfloaterlagmeter.h" 111#include "llfloaterlagmeter.h"
111#include "llfloaterland.h" 112#include "llfloaterland.h"
@@ -119,7 +120,9 @@
119#include "llfloaterregioninfo.h" 120#include "llfloaterregioninfo.h"
120#include "llfloaterreporter.h" 121#include "llfloaterreporter.h"
121#include "llfloaterscriptdebug.h" 122#include "llfloaterscriptdebug.h"
123#include "llfloatersettingsdebug.h"
122#include "llfloaterenvsettings.h" 124#include "llfloaterenvsettings.h"
125#include "llfloaterstats.h"
123#include "llfloatertest.h" 126#include "llfloatertest.h"
124#include "llfloatertools.h" 127#include "llfloatertools.h"
125#include "llfloaterwater.h" 128#include "llfloaterwater.h"
@@ -170,7 +173,7 @@
170#include "lltoolpie.h" 173#include "lltoolpie.h"
171#include "lltoolplacer.h" 174#include "lltoolplacer.h"
172#include "lltoolselectland.h" 175#include "lltoolselectland.h"
173#include "llvieweruictrlfactory.h" 176#include "lluictrlfactory.h"
174#include "lluploaddialog.h" 177#include "lluploaddialog.h"
175#include "lluserauth.h" 178#include "lluserauth.h"
176#include "lluuid.h" 179#include "lluuid.h"
@@ -374,6 +377,11 @@ void toggle_cull_small(void *);
374void toggle_show_xui_names(void *); 377void toggle_show_xui_names(void *);
375BOOL check_show_xui_names(void *); 378BOOL check_show_xui_names(void *);
376 379
380void run_vectorize_perf_test(void *)
381{
382 gSavedSettings.setBOOL("VectorizePerfTest", TRUE);
383}
384
377// Debug UI 385// Debug UI
378void handle_web_search_demo(void*); 386void handle_web_search_demo(void*);
379void handle_slurl_test(void*); 387void handle_slurl_test(void*);
@@ -457,8 +465,6 @@ void handle_dump_image_list(void*);
457 465
458void handle_crash(void*); 466void handle_crash(void*);
459void handle_dump_followcam(void*); 467void handle_dump_followcam(void*);
460void handle_toggle_flycam(void*);
461BOOL check_flycam(void*);
462void handle_viewer_enable_message_log(void*); 468void handle_viewer_enable_message_log(void*);
463void handle_viewer_disable_message_log(void*); 469void handle_viewer_disable_message_log(void*);
464void handle_send_postcard(void*); 470void handle_send_postcard(void*);
@@ -563,12 +569,12 @@ static LLLandmarkObserver* gLandmarkObserver = NULL;
563 569
564LLMenuParcelObserver::LLMenuParcelObserver() 570LLMenuParcelObserver::LLMenuParcelObserver()
565{ 571{
566 gParcelMgr->addObserver(this); 572 LLViewerParcelMgr::getInstance()->addObserver(this);
567} 573}
568 574
569LLMenuParcelObserver::~LLMenuParcelObserver() 575LLMenuParcelObserver::~LLMenuParcelObserver()
570{ 576{
571 gParcelMgr->removeObserver(this); 577 LLViewerParcelMgr::getInstance()->removeObserver(this);
572} 578}
573 579
574void LLMenuParcelObserver::changed() 580void LLMenuParcelObserver::changed()
@@ -660,23 +666,23 @@ void init_menus()
660 /// 666 ///
661 /// Pie menus 667 /// Pie menus
662 /// 668 ///
663 gPieSelf = gUICtrlFactory->buildPieMenu("menu_pie_self.xml", gMenuHolder); 669 gPieSelf = LLUICtrlFactory::getInstance()->buildPieMenu("menu_pie_self.xml", gMenuHolder);
664 670
665 // TomY TODO: what shall we do about these? 671 // TomY TODO: what shall we do about these?
666 gDetachScreenPieMenu = gMenuHolder->getChild<LLPieMenu>("Object Detach HUD", true); 672 gDetachScreenPieMenu = gMenuHolder->getChild<LLPieMenu>("Object Detach HUD", true);
667 gDetachPieMenu = gMenuHolder->getChild<LLPieMenu>("Object Detach", true); 673 gDetachPieMenu = gMenuHolder->getChild<LLPieMenu>("Object Detach", true);
668 674
669 gPieAvatar = gUICtrlFactory->buildPieMenu("menu_pie_avatar.xml", gMenuHolder); 675 gPieAvatar = LLUICtrlFactory::getInstance()->buildPieMenu("menu_pie_avatar.xml", gMenuHolder);
670 676
671 gPieObject = gUICtrlFactory->buildPieMenu("menu_pie_object.xml", gMenuHolder); 677 gPieObject = LLUICtrlFactory::getInstance()->buildPieMenu("menu_pie_object.xml", gMenuHolder);
672 678
673 gAttachScreenPieMenu = gMenuHolder->getChild<LLPieMenu>("Object Attach HUD"); 679 gAttachScreenPieMenu = gMenuHolder->getChild<LLPieMenu>("Object Attach HUD");
674 gAttachPieMenu = gMenuHolder->getChild<LLPieMenu>("Object Attach"); 680 gAttachPieMenu = gMenuHolder->getChild<LLPieMenu>("Object Attach");
675 gPieRate = gMenuHolder->getChild<LLPieMenu>("Rate Menu"); 681 gPieRate = gMenuHolder->getChild<LLPieMenu>("Rate Menu");
676 682
677 gPieAttachment = gUICtrlFactory->buildPieMenu("menu_pie_attachment.xml", gMenuHolder); 683 gPieAttachment = LLUICtrlFactory::getInstance()->buildPieMenu("menu_pie_attachment.xml", gMenuHolder);
678 684
679 gPieLand = gUICtrlFactory->buildPieMenu("menu_pie_land.xml", gMenuHolder); 685 gPieLand = LLUICtrlFactory::getInstance()->buildPieMenu("menu_pie_land.xml", gMenuHolder);
680 686
681 /// 687 ///
682 /// set up the colors 688 /// set up the colors
@@ -702,10 +708,13 @@ void init_menus()
702 { 708 {
703 color = gColors.getColor( "MenuNonProductionBgColor" ); 709 color = gColors.getColor( "MenuNonProductionBgColor" );
704 } 710 }
705 gMenuBarView = (LLMenuBarGL*)gUICtrlFactory->buildMenu("menu_viewer.xml", gMenuHolder); 711 gMenuBarView = (LLMenuBarGL*)LLUICtrlFactory::getInstance()->buildMenu("menu_viewer.xml", gMenuHolder);
706 gMenuBarView->setRect(LLRect(0, top, 0, top - MENU_BAR_HEIGHT)); 712 gMenuBarView->setRect(LLRect(0, top, 0, top - MENU_BAR_HEIGHT));
707 gMenuBarView->setBackgroundColor( color ); 713 gMenuBarView->setBackgroundColor( color );
708 714
715 gMenuBarView->setItemVisible("Tools", FALSE);
716 gMenuBarView->arrange();
717
709 gMenuHolder->addChild(gMenuBarView); 718 gMenuHolder->addChild(gMenuBarView);
710 719
711 // menu holder appears on top of menu bar so you can see the menu title 720 // menu holder appears on top of menu bar so you can see the menu title
@@ -764,7 +773,7 @@ void init_menus()
764 // 773 //
765 show_debug_menus(); 774 show_debug_menus();
766 775
767 gLoginMenuBarView = (LLMenuBarGL*)gUICtrlFactory->buildMenu("menu_login.xml", gMenuHolder); 776 gLoginMenuBarView = (LLMenuBarGL*)LLUICtrlFactory::getInstance()->buildMenu("menu_login.xml", gMenuHolder);
768 LLRect menuBarRect = gLoginMenuBarView->getRect(); 777 LLRect menuBarRect = gLoginMenuBarView->getRect();
769 gLoginMenuBarView->setRect(LLRect(menuBarRect.mLeft, menuBarRect.mTop, gViewerWindow->getRootView()->getRect().getWidth() - menuBarRect.mLeft, menuBarRect.mBottom)); 778 gLoginMenuBarView->setRect(LLRect(menuBarRect.mLeft, menuBarRect.mTop, gViewerWindow->getRootView()->getRect().getWidth() - menuBarRect.mLeft, menuBarRect.mBottom));
770 779
@@ -821,14 +830,12 @@ void clear_landmark_menu(LLMenuGL* menu)
821 for ( ; it != child_list->end(); ++it) 830 for ( ; it != child_list->end(); ++it)
822 { 831 {
823 LLView* view = *it; 832 LLView* view = *it;
824 if (view->getWidgetType() == WIDGET_TYPE_MENU_ITEM_CALL) 833 LLMenuItemCallGL* menu_item = dynamic_cast<LLMenuItemCallGL*>(view);
834
835 if (menu_item && menu_item->getMenuCallback() == landmark_menu_action)
825 { 836 {
826 LLMenuItemCallGL* menu_item = (LLMenuItemCallGL*)view; 837 void* user_data = menu_item->getUserData();
827 if (menu_item->getMenuCallback() == landmark_menu_action) 838 delete (LLUUID*)user_data;
828 {
829 void* user_data = menu_item->getUserData();
830 delete (LLUUID*)user_data;
831 }
832 } 839 }
833 } 840 }
834 841
@@ -1072,9 +1079,6 @@ void init_client_menu(LLMenuGL* menu)
1072 &menu_check_control, 1079 &menu_check_control,
1073 (void*)"DisableCameraConstraints")); 1080 (void*)"DisableCameraConstraints"));
1074 1081
1075 menu->append(new LLMenuItemCheckGL("Joystick Flycam",
1076 &handle_toggle_flycam,NULL,&check_flycam,NULL));
1077
1078 menu->append(new LLMenuItemCheckGL("Mouse Smoothing", 1082 menu->append(new LLMenuItemCheckGL("Mouse Smoothing",
1079 &menu_toggle_control, 1083 &menu_toggle_control,
1080 NULL, 1084 NULL,
@@ -1088,7 +1092,7 @@ void init_client_menu(LLMenuGL* menu)
1088 &menu_check_control, 1092 &menu_check_control,
1089 (void*)"ShowConsoleWindow")); 1093 (void*)"ShowConsoleWindow"));
1090 1094
1091 if(gQAMode) 1095 if(gSavedSettings.getBOOL("QAMode"))
1092 { 1096 {
1093 LLMenuGL* sub = NULL; 1097 LLMenuGL* sub = NULL;
1094 sub = new LLMenuGL("Debugging"); 1098 sub = new LLMenuGL("Debugging");
@@ -1174,7 +1178,6 @@ extern BOOL gDebugClicks;
1174extern BOOL gDebugWindowProc; 1178extern BOOL gDebugWindowProc;
1175extern BOOL gDebugTextEditorTips; 1179extern BOOL gDebugTextEditorTips;
1176extern BOOL gDebugSelectMgr; 1180extern BOOL gDebugSelectMgr;
1177extern BOOL gVectorizePerfTest;
1178 1181
1179void init_debug_ui_menu(LLMenuGL* menu) 1182void init_debug_ui_menu(LLMenuGL* menu)
1180{ 1183{
@@ -1184,7 +1187,6 @@ void init_debug_ui_menu(LLMenuGL* menu)
1184 menu->append(new LLMenuItemCallGL( "Dump SelectMgr", &dump_select_mgr)); 1187 menu->append(new LLMenuItemCallGL( "Dump SelectMgr", &dump_select_mgr));
1185 menu->append(new LLMenuItemCallGL( "Dump Inventory", &dump_inventory)); 1188 menu->append(new LLMenuItemCallGL( "Dump Inventory", &dump_inventory));
1186 menu->append(new LLMenuItemCallGL( "Dump Focus Holder", &handle_dump_focus, NULL, NULL, 'F', MASK_ALT | MASK_CONTROL)); 1189 menu->append(new LLMenuItemCallGL( "Dump Focus Holder", &handle_dump_focus, NULL, NULL, 'F', MASK_ALT | MASK_CONTROL));
1187 menu->append(new LLMenuItemCallGL( "Dump VolumeMgr", &dump_volume_mgr, NULL, NULL));
1188 menu->append(new LLMenuItemCallGL( "Print Selected Object Info", &print_object_info, NULL, NULL, 'P', MASK_CONTROL|MASK_SHIFT )); 1190 menu->append(new LLMenuItemCallGL( "Print Selected Object Info", &print_object_info, NULL, NULL, 'P', MASK_CONTROL|MASK_SHIFT ));
1189 menu->append(new LLMenuItemCallGL( "Print Agent Info", &print_agent_nvpairs, NULL, NULL, 'P', MASK_SHIFT )); 1191 menu->append(new LLMenuItemCallGL( "Print Agent Info", &print_agent_nvpairs, NULL, NULL, 'P', MASK_SHIFT ));
1190 menu->append(new LLMenuItemCallGL( "Texture Memory Stats", &output_statistics, NULL, NULL, 'M', MASK_SHIFT | MASK_ALT | MASK_CONTROL)); 1192 menu->append(new LLMenuItemCallGL( "Texture Memory Stats", &output_statistics, NULL, NULL, 'M', MASK_SHIFT | MASK_ALT | MASK_CONTROL));
@@ -1357,6 +1359,9 @@ void init_debug_rendering_menu(LLMenuGL* menu)
1357 sub_menu->append(new LLMenuItemCheckGL("Texture Priority", &LLPipeline::toggleRenderDebug, NULL, 1359 sub_menu->append(new LLMenuItemCheckGL("Texture Priority", &LLPipeline::toggleRenderDebug, NULL,
1358 &LLPipeline::toggleRenderDebugControl, 1360 &LLPipeline::toggleRenderDebugControl,
1359 (void*)LLPipeline::RENDER_DEBUG_TEXTURE_PRIORITY)); 1361 (void*)LLPipeline::RENDER_DEBUG_TEXTURE_PRIORITY));
1362 sub_menu->append(new LLMenuItemCheckGL("Avatar Rendering Cost", &LLPipeline::toggleRenderDebug, NULL,
1363 &LLPipeline::toggleRenderDebugControl,
1364 (void*)LLPipeline::RENDER_DEBUG_SHAME));
1360 sub_menu->append(new LLMenuItemCheckGL("Texture Area (sqrt(A))",&LLPipeline::toggleRenderDebug, NULL, 1365 sub_menu->append(new LLMenuItemCheckGL("Texture Area (sqrt(A))",&LLPipeline::toggleRenderDebug, NULL,
1361 &LLPipeline::toggleRenderDebugControl, 1366 &LLPipeline::toggleRenderDebugControl,
1362 (void*)LLPipeline::RENDER_DEBUG_TEXTURE_AREA)); 1367 (void*)LLPipeline::RENDER_DEBUG_TEXTURE_AREA));
@@ -1386,7 +1391,7 @@ void init_debug_rendering_menu(LLMenuGL* menu)
1386 (void*)"ShowDepthBuffer")); 1391 (void*)"ShowDepthBuffer"));
1387 sub_menu->append(new LLMenuItemToggleGL("Show Select Buffer", &gDebugSelect)); 1392 sub_menu->append(new LLMenuItemToggleGL("Show Select Buffer", &gDebugSelect));
1388 1393
1389 sub_menu->append(new LLMenuItemToggleGL("Vectorize Perf Test", &gVectorizePerfTest)); 1394 sub_menu->append(new LLMenuItemCallGL("Vectorize Perf Test", &run_vectorize_perf_test));
1390 1395
1391 sub_menu = new LLMenuGL("Render Tests"); 1396 sub_menu = new LLMenuGL("Render Tests");
1392 1397
@@ -1422,7 +1427,7 @@ void init_debug_rendering_menu(LLMenuGL* menu)
1422 1427
1423 LLMenuItemCheckGL* item; 1428 LLMenuItemCheckGL* item;
1424 item = new LLMenuItemCheckGL("Object-Object Occlusion", menu_toggle_control, NULL, menu_check_control, (void*)"UseOcclusion", 'O', MASK_CONTROL|MASK_SHIFT); 1429 item = new LLMenuItemCheckGL("Object-Object Occlusion", menu_toggle_control, NULL, menu_check_control, (void*)"UseOcclusion", 'O', MASK_CONTROL|MASK_SHIFT);
1425 item->setEnabled(gGLManager.mHasOcclusionQuery && gFeatureManagerp->isFeatureAvailable("UseOcclusion")); 1430 item->setEnabled(gGLManager.mHasOcclusionQuery && LLFeatureManager::getInstance()->isFeatureAvailable("UseOcclusion"));
1426 menu->append(item); 1431 menu->append(item);
1427 1432
1428 item = new LLMenuItemCheckGL("Fast Alpha", menu_toggle_control, NULL, menu_check_control, (void*)"RenderFastAlpha"); 1433 item = new LLMenuItemCheckGL("Fast Alpha", menu_toggle_control, NULL, menu_check_control, (void*)"RenderFastAlpha");
@@ -1485,6 +1490,7 @@ void init_debug_avatar_menu(LLMenuGL* menu)
1485 1490
1486 menu->appendMenu(sub_menu); 1491 menu->appendMenu(sub_menu);
1487 1492
1493 menu->append(new LLMenuItemToggleGL("Tap-Tap-Hold To Run", &gAllowTapTapHoldRun));
1488 menu->append(new LLMenuItemCallGL("Force Params to Default", &LLAgent::clearVisualParams, NULL)); 1494 menu->append(new LLMenuItemCallGL("Force Params to Default", &LLAgent::clearVisualParams, NULL));
1489 menu->append(new LLMenuItemCallGL("Reload Vertex Shader", &reload_vertex_shader, NULL)); 1495 menu->append(new LLMenuItemCallGL("Reload Vertex Shader", &reload_vertex_shader, NULL));
1490 menu->append(new LLMenuItemToggleGL("Animation Info", &LLVOAvatar::sShowAnimationDebug)); 1496 menu->append(new LLMenuItemToggleGL("Animation Info", &LLVOAvatar::sShowAnimationDebug));
@@ -1734,7 +1740,7 @@ class LLObjectEnableTouch : public view_listener_t
1734 gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); 1740 gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value);
1735 1741
1736 // Update label based on the node touch name if available. 1742 // Update label based on the node touch name if available.
1737 LLSelectNode* node = gSelectMgr->getSelection()->getFirstRootNode(); 1743 LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode();
1738 if (node && node->mValid && !node->mTouchName.empty()) 1744 if (node && node->mValid && !node->mTouchName.empty())
1739 { 1745 {
1740 gMenuHolder->childSetText("Object Touch", node->mTouchName); 1746 gMenuHolder->childSetText("Object Touch", node->mTouchName);
@@ -1750,7 +1756,7 @@ class LLObjectEnableTouch : public view_listener_t
1750 1756
1751void label_touch(LLString& label, void*) 1757void label_touch(LLString& label, void*)
1752{ 1758{
1753 LLSelectNode* node = gSelectMgr->getSelection()->getFirstRootNode(); 1759 LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode();
1754 if (node && node->mValid && !node->mTouchName.empty()) 1760 if (node && node->mValid && !node->mTouchName.empty())
1755 { 1761 {
1756 label.assign(node->mTouchName); 1762 label.assign(node->mTouchName);
@@ -1802,7 +1808,7 @@ class LLViewCheckBuildMode : public view_listener_t
1802{ 1808{
1803 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 1809 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1804 { 1810 {
1805 bool new_value = gToolMgr->inEdit(); 1811 bool new_value = LLToolMgr::getInstance()->inEdit();
1806 gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); 1812 gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value);
1807 return true; 1813 return true;
1808 } 1814 }
@@ -1810,13 +1816,21 @@ class LLViewCheckBuildMode : public view_listener_t
1810 1816
1811bool toggle_build_mode() 1817bool toggle_build_mode()
1812{ 1818{
1813 if (gToolMgr->inEdit()) 1819 if (LLToolMgr::getInstance()->inEdit())
1814 { 1820 {
1815 // just reset the view, will pull us out of edit mode 1821 // just reset the view, will pull us out of edit mode
1816 handle_reset_view(); 1822 handle_reset_view();
1823
1824 // avoid spurious avatar movements pulling out of edit mode
1825 LLViewerJoystick::getInstance()->moveAvatar(true);
1817 } 1826 }
1818 else 1827 else
1819 { 1828 {
1829 if (LLViewerJoystick::getInstance()->getOverrideCamera())
1830 {
1831 handle_toggle_flycam();
1832 }
1833
1820 if (gAgent.getFocusOnAvatar() && gSavedSettings.getBOOL("EditCameraMovement") ) 1834 if (gAgent.getFocusOnAvatar() && gSavedSettings.getBOOL("EditCameraMovement") )
1821 { 1835 {
1822 // zoom in if we're looking at the avatar 1836 // zoom in if we're looking at the avatar
@@ -1826,8 +1840,8 @@ bool toggle_build_mode()
1826 gAgent.cameraOrbitOver( 30.f * DEG_TO_RAD ); 1840 gAgent.cameraOrbitOver( 30.f * DEG_TO_RAD );
1827 } 1841 }
1828 1842
1829 gToolMgr->setCurrentToolset(gBasicToolset); 1843 LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
1830 gToolMgr->getCurrentToolset()->selectTool( gToolCreate ); 1844 LLToolMgr::getInstance()->getCurrentToolset()->selectTool( LLToolCompCreate::getInstance() );
1831 1845
1832 // Could be first use 1846 // Could be first use
1833 LLFirstUse::useBuild(); 1847 LLFirstUse::useBuild();
@@ -1844,11 +1858,35 @@ class LLViewBuildMode : public view_listener_t
1844}; 1858};
1845 1859
1846 1860
1861class LLViewJoystickFlycam : public view_listener_t
1862{
1863 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1864 {
1865 handle_toggle_flycam();
1866 return true;
1867 }
1868};
1869
1870class LLViewCheckJoystickFlycam : public view_listener_t
1871{
1872 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1873 {
1874 bool new_val = LLViewerJoystick::getInstance()->getOverrideCamera();
1875 gMenuHolder->findControl(userdata["control"].asString())->setValue(new_val);
1876 return true;
1877 }
1878};
1879
1880void handle_toggle_flycam()
1881{
1882 LLViewerJoystick::getInstance()->toggleFlycam();
1883}
1884
1847class LLObjectBuild : public view_listener_t 1885class LLObjectBuild : public view_listener_t
1848{ 1886{
1849 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 1887 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1850 { 1888 {
1851 if (gAgent.getFocusOnAvatar() && !gToolMgr->inEdit() && gSavedSettings.getBOOL("EditCameraMovement") ) 1889 if (gAgent.getFocusOnAvatar() && !LLToolMgr::getInstance()->inEdit() && gSavedSettings.getBOOL("EditCameraMovement") )
1852 { 1890 {
1853 // zoom in if we're looking at the avatar 1891 // zoom in if we're looking at the avatar
1854 gAgent.setFocusOnAvatar(FALSE, ANIMATE); 1892 gAgent.setFocusOnAvatar(FALSE, ANIMATE);
@@ -1863,8 +1901,8 @@ class LLObjectBuild : public view_listener_t
1863 gViewerWindow->moveCursorToCenter(); 1901 gViewerWindow->moveCursorToCenter();
1864 } 1902 }
1865 1903
1866 gToolMgr->setCurrentToolset(gBasicToolset); 1904 LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
1867 gToolMgr->getCurrentToolset()->selectTool( gToolCreate ); 1905 LLToolMgr::getInstance()->getCurrentToolset()->selectTool( LLToolCompCreate::getInstance() );
1868 1906
1869 // Could be first use 1907 // Could be first use
1870 LLFirstUse::useBuild(); 1908 LLFirstUse::useBuild();
@@ -1876,11 +1914,11 @@ class LLObjectEdit : public view_listener_t
1876{ 1914{
1877 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 1915 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1878 { 1916 {
1879 gParcelMgr->deselectLand(); 1917 LLViewerParcelMgr::getInstance()->deselectLand();
1880 1918
1881 if (gAgent.getFocusOnAvatar() && !gToolMgr->inEdit()) 1919 if (gAgent.getFocusOnAvatar() && !LLToolMgr::getInstance()->inEdit())
1882 { 1920 {
1883 LLObjectSelectionHandle selection = gSelectMgr->getSelection(); 1921 LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
1884 1922
1885 if (selection->getSelectType() == SELECT_TYPE_HUD || !gSavedSettings.getBOOL("EditCameraMovement")) 1923 if (selection->getSelectType() == SELECT_TYPE_HUD || !gSavedSettings.getBOOL("EditCameraMovement"))
1886 { 1924 {
@@ -1902,8 +1940,11 @@ class LLObjectEdit : public view_listener_t
1902 1940
1903 gFloaterTools->open(); /* Flawfinder: ignore */ 1941 gFloaterTools->open(); /* Flawfinder: ignore */
1904 1942
1905 gToolMgr->setCurrentToolset(gBasicToolset); 1943 LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
1906 gFloaterTools->setEditTool( gToolTranslate ); 1944 gFloaterTools->setEditTool( LLToolCompTranslate::getInstance() );
1945
1946 LLViewerJoystick::getInstance()->moveObjects(true);
1947 LLViewerJoystick::getInstance()->setNeedsReset(true);
1907 1948
1908 // Could be first use 1949 // Could be first use
1909 LLFirstUse::useBuild(); 1950 LLFirstUse::useBuild();
@@ -1928,9 +1969,9 @@ class LLLandBuild : public view_listener_t
1928{ 1969{
1929 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 1970 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
1930 { 1971 {
1931 gParcelMgr->deselectLand(); 1972 LLViewerParcelMgr::getInstance()->deselectLand();
1932 1973
1933 if (gAgent.getFocusOnAvatar() && !gToolMgr->inEdit() && gSavedSettings.getBOOL("EditCameraMovement") ) 1974 if (gAgent.getFocusOnAvatar() && !LLToolMgr::getInstance()->inEdit() && gSavedSettings.getBOOL("EditCameraMovement") )
1934 { 1975 {
1935 // zoom in if we're looking at the avatar 1976 // zoom in if we're looking at the avatar
1936 gAgent.setFocusOnAvatar(FALSE, ANIMATE); 1977 gAgent.setFocusOnAvatar(FALSE, ANIMATE);
@@ -1947,8 +1988,8 @@ class LLLandBuild : public view_listener_t
1947 } 1988 }
1948 1989
1949 1990
1950 gToolMgr->setCurrentToolset(gBasicToolset); 1991 LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
1951 gToolMgr->getCurrentToolset()->selectTool( gToolCreate ); 1992 LLToolMgr::getInstance()->getCurrentToolset()->selectTool( LLToolCompCreate::getInstance() );
1952 1993
1953 // Could be first use 1994 // Could be first use
1954 LLFirstUse::useBuild(); 1995 LLFirstUse::useBuild();
@@ -1982,7 +2023,7 @@ BOOL enable_land_build(void*)
1982 if (gAgent.inPrelude()) return FALSE; 2023 if (gAgent.inPrelude()) return FALSE;
1983 2024
1984 BOOL can_build = FALSE; 2025 BOOL can_build = FALSE;
1985 LLParcel* agent_parcel = gParcelMgr->getAgentParcel(); 2026 LLParcel* agent_parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
1986 if (agent_parcel) 2027 if (agent_parcel)
1987 { 2028 {
1988 can_build = agent_parcel->getAllowModify(); 2029 can_build = agent_parcel->getAllowModify();
@@ -1997,7 +2038,7 @@ BOOL enable_object_build(void*)
1997 if (gAgent.inPrelude()) return FALSE; 2038 if (gAgent.inPrelude()) return FALSE;
1998 2039
1999 BOOL can_build = FALSE; 2040 BOOL can_build = FALSE;
2000 LLParcel* agent_parcel = gParcelMgr->getAgentParcel(); 2041 LLParcel* agent_parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
2001 if (agent_parcel) 2042 if (agent_parcel)
2002 { 2043 {
2003 can_build = agent_parcel->getAllowModify(); 2044 can_build = agent_parcel->getAllowModify();
@@ -2118,7 +2159,7 @@ class LLObjectMute : public view_listener_t
2118 // it's an object 2159 // it's an object
2119 id = object->getID(); 2160 id = object->getID();
2120 2161
2121 LLSelectNode* node = gSelectMgr->getSelection()->getFirstRootNode(); 2162 LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode();
2122 if (node) 2163 if (node)
2123 { 2164 {
2124 name = node->mName; 2165 name = node->mName;
@@ -2128,13 +2169,13 @@ class LLObjectMute : public view_listener_t
2128 } 2169 }
2129 2170
2130 LLMute mute(id, name, type); 2171 LLMute mute(id, name, type);
2131 if (gMuteListp->isMuted(mute.mID, mute.mName)) 2172 if (LLMuteList::getInstance()->isMuted(mute.mID, mute.mName))
2132 { 2173 {
2133 gMuteListp->remove(mute); 2174 LLMuteList::getInstance()->remove(mute);
2134 } 2175 }
2135 else 2176 else
2136 { 2177 {
2137 gMuteListp->add(mute); 2178 LLMuteList::getInstance()->add(mute);
2138 LLFloaterMute::showInstance(); 2179 LLFloaterMute::showInstance();
2139 } 2180 }
2140 2181
@@ -2155,7 +2196,7 @@ bool handle_go_to()
2155 strings.push_back(val); 2196 strings.push_back(val);
2156 send_generic_message("autopilot", strings); 2197 send_generic_message("autopilot", strings);
2157 2198
2158 gParcelMgr->deselectLand(); 2199 LLViewerParcelMgr::getInstance()->deselectLand();
2159 2200
2160 if (gAgent.getAvatarObject() && !gSavedSettings.getBOOL("AutoPilotLocksCamera")) 2201 if (gAgent.getAvatarObject() && !gSavedSettings.getBOOL("AutoPilotLocksCamera"))
2161 { 2202 {
@@ -2224,10 +2265,23 @@ class LLAvatarFreeze : public view_listener_t
2224 if( avatar ) 2265 if( avatar )
2225 { 2266 {
2226 LLUUID* avatar_id = new LLUUID( avatar->getID() ); 2267 LLUUID* avatar_id = new LLUUID( avatar->getID() );
2268 LLString fullname = avatar->getFullname();
2227 2269
2228 gViewerWindow->alertXml("FreezeAvatar", 2270 if (!fullname.empty())
2229 callback_freeze, (void*)avatar_id); 2271 {
2230 2272 LLString::format_map_t args;
2273 args["[AVATAR_NAME]"] = fullname;
2274 gViewerWindow->alertXml("FreezeAvatarFullname",
2275 args,
2276 callback_freeze,
2277 (void*)avatar_id);
2278 }
2279 else
2280 {
2281 gViewerWindow->alertXml("FreezeAvatar",
2282 callback_freeze,
2283 (void*)avatar_id);
2284 }
2231 } 2285 }
2232 return true; 2286 return true;
2233 } 2287 }
@@ -2313,9 +2367,23 @@ class LLAvatarEject : public view_listener_t
2313 if( avatar ) 2367 if( avatar )
2314 { 2368 {
2315 LLUUID* avatar_id = new LLUUID( avatar->getID() ); 2369 LLUUID* avatar_id = new LLUUID( avatar->getID() );
2316 gViewerWindow->alertXml("EjectAvatar", 2370 LLString fullname = avatar->getFullname();
2317 callback_eject, (void*)avatar_id); 2371
2318 2372 if (!fullname.empty())
2373 {
2374 LLString::format_map_t args;
2375 args["[AVATAR_NAME]"] = fullname;
2376 gViewerWindow->alertXml("EjectAvatarFullname",
2377 args,
2378 callback_eject,
2379 (void*)avatar_id);
2380 }
2381 else
2382 {
2383 gViewerWindow->alertXml("EjectAvatar",
2384 callback_eject,
2385 (void*)avatar_id);
2386 }
2319 } 2387 }
2320 return true; 2388 return true;
2321 } 2389 }
@@ -2484,9 +2552,9 @@ BOOL enable_buy(void*)
2484{ 2552{
2485 // In order to buy, there must only be 1 purchaseable object in 2553 // In order to buy, there must only be 1 purchaseable object in
2486 // the selection manger. 2554 // the selection manger.
2487 if(gSelectMgr->getSelection()->getRootObjectCount() != 1) return FALSE; 2555 if(LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() != 1) return FALSE;
2488 LLViewerObject* obj = NULL; 2556 LLViewerObject* obj = NULL;
2489 LLSelectNode* node = gSelectMgr->getSelection()->getFirstRootNode(); 2557 LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode();
2490 if(node) 2558 if(node)
2491 { 2559 {
2492 obj = node->getObject(); 2560 obj = node->getObject();
@@ -2515,7 +2583,7 @@ class LLObjectEnableBuy : public view_listener_t
2515// received by the viewer and cached in the selection manager. 2583// received by the viewer and cached in the selection manager.
2516void handle_buy_object(LLSaleInfo sale_info) 2584void handle_buy_object(LLSaleInfo sale_info)
2517{ 2585{
2518 if(!gSelectMgr->selectGetAllRootsValid()) 2586 if(!LLSelectMgr::getInstance()->selectGetAllRootsValid())
2519 { 2587 {
2520 LLNotifyBox::showXml("UnableToBuyWhileDownloading"); 2588 LLNotifyBox::showXml("UnableToBuyWhileDownloading");
2521 return; 2589 return;
@@ -2523,7 +2591,7 @@ void handle_buy_object(LLSaleInfo sale_info)
2523 2591
2524 LLUUID owner_id; 2592 LLUUID owner_id;
2525 LLString owner_name; 2593 LLString owner_name;
2526 BOOL owners_identical = gSelectMgr->selectGetOwner(owner_id, owner_name); 2594 BOOL owners_identical = LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name);
2527 if (!owners_identical) 2595 if (!owners_identical)
2528 { 2596 {
2529 LLNotifyBox::showXml("CannotBuyObjectsFromDifferentOwners"); 2597 LLNotifyBox::showXml("CannotBuyObjectsFromDifferentOwners");
@@ -2531,9 +2599,9 @@ void handle_buy_object(LLSaleInfo sale_info)
2531 } 2599 }
2532 2600
2533 LLPermissions perm; 2601 LLPermissions perm;
2534 BOOL valid = gSelectMgr->selectGetPermissions(perm); 2602 BOOL valid = LLSelectMgr::getInstance()->selectGetPermissions(perm);
2535 LLAggregatePermissions ag_perm; 2603 LLAggregatePermissions ag_perm;
2536 valid &= gSelectMgr->selectGetAggregatePermissions(ag_perm); 2604 valid &= LLSelectMgr::getInstance()->selectGetAggregatePermissions(ag_perm);
2537 if(!valid || !sale_info.isForSale() || !perm.allowTransferTo(gAgent.getID())) 2605 if(!valid || !sale_info.isForSale() || !perm.allowTransferTo(gAgent.getID()))
2538 { 2606 {
2539 LLNotifyBox::showXml("ObjectNotForSale"); 2607 LLNotifyBox::showXml("ObjectNotForSale");
@@ -2670,14 +2738,14 @@ void set_god_level(U8 god_level)
2670 U8 old_god_level = gAgent.getGodLevel(); 2738 U8 old_god_level = gAgent.getGodLevel();
2671 gAgent.setGodLevel( god_level ); 2739 gAgent.setGodLevel( god_level );
2672 gIMMgr->refresh(); 2740 gIMMgr->refresh();
2673 gParcelMgr->notifyObservers(); 2741 LLViewerParcelMgr::getInstance()->notifyObservers();
2674 2742
2675 // Some classifieds change visibility on god mode 2743 // Some classifieds change visibility on god mode
2676 LLFloaterDirectory::requestClassifieds(); 2744 LLFloaterDirectory::requestClassifieds();
2677 2745
2678 // God mode changes sim visibility 2746 // God mode changes sim visibility
2679 gWorldMap->reset(); 2747 LLWorldMap::getInstance()->reset();
2680 gWorldMap->setCurrentLayer(0); 2748 LLWorldMap::getInstance()->setCurrentLayer(0);
2681 2749
2682 // inventory in items may change in god mode 2750 // inventory in items may change in god mode
2683 gObjectList.dirtyAllObjectInventory(); 2751 gObjectList.dirtyAllObjectInventory();
@@ -2943,7 +3011,7 @@ class LLLandSit : public view_listener_t
2943 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 3011 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
2944 { 3012 {
2945 gAgent.setControlFlags(AGENT_CONTROL_STAND_UP); 3013 gAgent.setControlFlags(AGENT_CONTROL_STAND_UP);
2946 gParcelMgr->deselectLand(); 3014 LLViewerParcelMgr::getInstance()->deselectLand();
2947 3015
2948 LLVector3d posGlobal = gLastHitPosGlobal; 3016 LLVector3d posGlobal = gLastHitPosGlobal;
2949 3017
@@ -3043,7 +3111,7 @@ void create_new_landmark(void*)
3043 llwarns << "No agent region" << llendl; 3111 llwarns << "No agent region" << llendl;
3044 return; 3112 return;
3045 } 3113 }
3046 LLParcel* agent_parcel = gParcelMgr->getAgentParcel(); 3114 LLParcel* agent_parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
3047 if (!agent_parcel) 3115 if (!agent_parcel)
3048 { 3116 {
3049 llwarns << "No agent parcel" << llendl; 3117 llwarns << "No agent parcel" << llendl;
@@ -3083,7 +3151,7 @@ void landmark_menu_action(void* userdata)
3083 3151
3084void reload_ui(void *) 3152void reload_ui(void *)
3085{ 3153{
3086 gUICtrlFactory->rebuild(); 3154 LLUICtrlFactory::getInstance()->rebuild();
3087} 3155}
3088 3156
3089class LLWorldFly : public view_listener_t 3157class LLWorldFly : public view_listener_t
@@ -3106,7 +3174,7 @@ void handle_agent_stop_moving(void*)
3106 3174
3107void print_packets_lost(void*) 3175void print_packets_lost(void*)
3108{ 3176{
3109 gWorldPointer->printPacketsLost(); 3177 LLWorld::getInstance()->printPacketsLost();
3110} 3178}
3111 3179
3112 3180
@@ -3155,7 +3223,7 @@ void velocity_interpolate( void* data )
3155 3223
3156void update_fov(S32 increments) 3224void update_fov(S32 increments)
3157{ 3225{
3158 F32 old_fov = gCamera->getDefaultFOV(); 3226 F32 old_fov = LLViewerCamera::getInstance()->getDefaultFOV();
3159 // for each increment, FoV is 20% bigger 3227 // for each increment, FoV is 20% bigger
3160 F32 new_fov = old_fov * pow(1.2f, increments); 3228 F32 new_fov = old_fov * pow(1.2f, increments);
3161 3229
@@ -3178,8 +3246,8 @@ void update_fov(S32 increments)
3178 gAgent.sendReliableMessage(); 3246 gAgent.sendReliableMessage();
3179 3247
3180 // force agent to update dirty patches 3248 // force agent to update dirty patches
3181 gCamera->setDefaultFOV(new_fov); 3249 LLViewerCamera::getInstance()->setDefaultFOV(new_fov);
3182 gCamera->setView(new_fov); 3250 LLViewerCamera::getInstance()->setView(new_fov);
3183 } 3251 }
3184} 3252}
3185 3253
@@ -3205,7 +3273,7 @@ class LLViewZoomDefault : public view_listener_t
3205{ 3273{
3206 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 3274 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
3207 { 3275 {
3208 F32 old_fov = gCamera->getView(); 3276 F32 old_fov = LLViewerCamera::getInstance()->getView();
3209 // for each increment, FoV is 20% bigger 3277 // for each increment, FoV is 20% bigger
3210 F32 new_fov = DEFAULT_FIELD_OF_VIEW; 3278 F32 new_fov = DEFAULT_FIELD_OF_VIEW;
3211 3279
@@ -3224,8 +3292,8 @@ class LLViewZoomDefault : public view_listener_t
3224 gAgent.sendReliableMessage(); 3292 gAgent.sendReliableMessage();
3225 3293
3226 // force agent to update dirty patches 3294 // force agent to update dirty patches
3227 gCamera->setDefaultFOV(new_fov); 3295 LLViewerCamera::getInstance()->setDefaultFOV(new_fov);
3228 gCamera->setView(new_fov); 3296 LLViewerCamera::getInstance()->setView(new_fov);
3229 } 3297 }
3230 return true; 3298 return true;
3231 } 3299 }
@@ -3262,17 +3330,6 @@ void handle_show_newest_map(void*)
3262// Help menu functions 3330// Help menu functions
3263//------------------------------------------------------------------- 3331//-------------------------------------------------------------------
3264 3332
3265class LLHelpMOTD : public view_listener_t
3266{
3267 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
3268 {
3269 LLString::format_map_t args;
3270 args["[MOTD]"] = gAgent.mMOTD;
3271 gViewerWindow->alertXml("MOTD", args, NULL, NULL);
3272 return true;
3273 }
3274};
3275
3276// 3333//
3277// Major mode switching 3334// Major mode switching
3278// 3335//
@@ -3310,9 +3367,15 @@ void reset_view_final( BOOL proceed, void* )
3310 3367
3311 gAgent.changeCameraToDefault(); 3368 gAgent.changeCameraToDefault();
3312 3369
3313 if (LLViewerJoystick::sOverrideCamera) 3370 if (LLViewerJoystick::getInstance()->getOverrideCamera())
3314 { 3371 {
3315 handle_toggle_flycam(NULL); 3372 handle_toggle_flycam();
3373 }
3374
3375 // reset avatar mode from eventual residual motion
3376 if (LLToolMgr::getInstance()->inBuildMode())
3377 {
3378 LLViewerJoystick::getInstance()->moveAvatar(true);
3316 } 3379 }
3317 3380
3318 gAgent.resetView(!gFloaterTools->getVisible()); 3381 gAgent.resetView(!gFloaterTools->getVisible());
@@ -3321,7 +3384,7 @@ void reset_view_final( BOOL proceed, void* )
3321 gViewerWindow->showCursor(); 3384 gViewerWindow->showCursor();
3322 3385
3323 // Switch back to basic toolset 3386 // Switch back to basic toolset
3324 gToolMgr->setCurrentToolset(gBasicToolset); 3387 LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
3325} 3388}
3326 3389
3327class LLViewLookAtLastChatter : public view_listener_t 3390class LLViewLookAtLastChatter : public view_listener_t
@@ -3394,7 +3457,7 @@ class LLEditEnableDuplicate : public view_listener_t
3394 3457
3395void disabled_duplicate(void*) 3458void disabled_duplicate(void*)
3396{ 3459{
3397 if (gSelectMgr->getSelection()->getFirstObject()) 3460 if (LLSelectMgr::getInstance()->getSelection()->getFirstObject())
3398 { 3461 {
3399 LLNotifyBox::showXml("CopyFailed"); 3462 LLNotifyBox::showXml("CopyFailed");
3400 } 3463 }
@@ -3405,32 +3468,32 @@ void handle_duplicate_in_place(void*)
3405 llinfos << "handle_duplicate_in_place" << llendl; 3468 llinfos << "handle_duplicate_in_place" << llendl;
3406 3469
3407 LLVector3 offset(0.f, 0.f, 0.f); 3470 LLVector3 offset(0.f, 0.f, 0.f);
3408 gSelectMgr->selectDuplicate(offset, TRUE); 3471 LLSelectMgr::getInstance()->selectDuplicate(offset, TRUE);
3409} 3472}
3410 3473
3411void handle_repeat_duplicate(void*) 3474void handle_repeat_duplicate(void*)
3412{ 3475{
3413 gSelectMgr->repeatDuplicate(); 3476 LLSelectMgr::getInstance()->repeatDuplicate();
3414} 3477}
3415 3478
3416void handle_deed_object_to_group(void*) 3479void handle_deed_object_to_group(void*)
3417{ 3480{
3418 LLUUID group_id; 3481 LLUUID group_id;
3419 3482
3420 gSelectMgr->selectGetGroup(group_id); 3483 LLSelectMgr::getInstance()->selectGetGroup(group_id);
3421 gSelectMgr->sendOwner(LLUUID::null, group_id, FALSE); 3484 LLSelectMgr::getInstance()->sendOwner(LLUUID::null, group_id, FALSE);
3422 gViewerStats->incStat(LLViewerStats::ST_RELEASE_COUNT); 3485 LLViewerStats::getInstance()->incStat(LLViewerStats::ST_RELEASE_COUNT);
3423} 3486}
3424 3487
3425BOOL enable_deed_object_to_group(void*) 3488BOOL enable_deed_object_to_group(void*)
3426{ 3489{
3427 if(gSelectMgr->getSelection()->isEmpty()) return FALSE; 3490 if(LLSelectMgr::getInstance()->getSelection()->isEmpty()) return FALSE;
3428 LLPermissions perm; 3491 LLPermissions perm;
3429 LLUUID group_id; 3492 LLUUID group_id;
3430 3493
3431 if (gSelectMgr->selectGetGroup(group_id) && 3494 if (LLSelectMgr::getInstance()->selectGetGroup(group_id) &&
3432 gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED) && 3495 gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED) &&
3433 gSelectMgr->selectGetPermissions(perm) && 3496 LLSelectMgr::getInstance()->selectGetPermissions(perm) &&
3434 perm.deedToGroup(gAgent.getID(), group_id)) 3497 perm.deedToGroup(gAgent.getID(), group_id))
3435 { 3498 {
3436 return TRUE; 3499 return TRUE;
@@ -3483,8 +3546,8 @@ void handle_object_owner_permissive(void*)
3483 if(gAgent.isGodlike()) 3546 if(gAgent.isGodlike())
3484 { 3547 {
3485 // do the objects. 3548 // do the objects.
3486 gSelectMgr->selectionSetObjectPermissions(PERM_BASE, TRUE, PERM_ALL, TRUE); 3549 LLSelectMgr::getInstance()->selectionSetObjectPermissions(PERM_BASE, TRUE, PERM_ALL, TRUE);
3487 gSelectMgr->selectionSetObjectPermissions(PERM_OWNER, TRUE, PERM_ALL, TRUE); 3550 LLSelectMgr::getInstance()->selectionSetObjectPermissions(PERM_OWNER, TRUE, PERM_ALL, TRUE);
3488 } 3551 }
3489} 3552}
3490 3553
@@ -3493,14 +3556,14 @@ void handle_object_owner_self(void*)
3493 // only send this if they're a god. 3556 // only send this if they're a god.
3494 if(gAgent.isGodlike()) 3557 if(gAgent.isGodlike())
3495 { 3558 {
3496 gSelectMgr->sendOwner(gAgent.getID(), gAgent.getGroupID(), TRUE); 3559 LLSelectMgr::getInstance()->sendOwner(gAgent.getID(), gAgent.getGroupID(), TRUE);
3497 } 3560 }
3498} 3561}
3499 3562
3500// Shortcut to set owner permissions to not editable. 3563// Shortcut to set owner permissions to not editable.
3501void handle_object_lock(void*) 3564void handle_object_lock(void*)
3502{ 3565{
3503 gSelectMgr->selectionSetObjectPermissions(PERM_OWNER, FALSE, PERM_MODIFY); 3566 LLSelectMgr::getInstance()->selectionSetObjectPermissions(PERM_OWNER, FALSE, PERM_MODIFY);
3504} 3567}
3505 3568
3506void handle_object_asset_ids(void*) 3569void handle_object_asset_ids(void*)
@@ -3508,23 +3571,23 @@ void handle_object_asset_ids(void*)
3508 // only send this if they're a god. 3571 // only send this if they're a god.
3509 if (gAgent.isGodlike()) 3572 if (gAgent.isGodlike())
3510 { 3573 {
3511 gSelectMgr->sendGodlikeRequest("objectinfo", "assetids"); 3574 LLSelectMgr::getInstance()->sendGodlikeRequest("objectinfo", "assetids");
3512 } 3575 }
3513} 3576}
3514 3577
3515void handle_force_parcel_owner_to_me(void*) 3578void handle_force_parcel_owner_to_me(void*)
3516{ 3579{
3517 gParcelMgr->sendParcelGodForceOwner( gAgent.getID() ); 3580 LLViewerParcelMgr::getInstance()->sendParcelGodForceOwner( gAgent.getID() );
3518} 3581}
3519 3582
3520void handle_force_parcel_to_content(void*) 3583void handle_force_parcel_to_content(void*)
3521{ 3584{
3522 gParcelMgr->sendParcelGodForceToContent(); 3585 LLViewerParcelMgr::getInstance()->sendParcelGodForceToContent();
3523} 3586}
3524 3587
3525void handle_claim_public_land(void*) 3588void handle_claim_public_land(void*)
3526{ 3589{
3527 if (gParcelMgr->getSelectionRegion() != gAgent.getRegion()) 3590 if (LLViewerParcelMgr::getInstance()->getSelectionRegion() != gAgent.getRegion())
3528 { 3591 {
3529 LLNotifyBox::showXml("ClaimPublicLand"); 3592 LLNotifyBox::showXml("ClaimPublicLand");
3530 return; 3593 return;
@@ -3532,7 +3595,7 @@ void handle_claim_public_land(void*)
3532 3595
3533 LLVector3d west_south_global; 3596 LLVector3d west_south_global;
3534 LLVector3d east_north_global; 3597 LLVector3d east_north_global;
3535 gParcelMgr->getSelection(west_south_global, east_north_global); 3598 LLViewerParcelMgr::getInstance()->getSelection(west_south_global, east_north_global);
3536 LLVector3 west_south = gAgent.getPosAgentFromGlobal(west_south_global); 3599 LLVector3 west_south = gAgent.getPosAgentFromGlobal(west_south_global);
3537 LLVector3 east_north = gAgent.getPosAgentFromGlobal(east_north_global); 3600 LLVector3 east_north = gAgent.getPosAgentFromGlobal(east_north_global);
3538 3601
@@ -3565,7 +3628,7 @@ void handle_god_request_havok(void *)
3565{ 3628{
3566 if (gAgent.isGodlike()) 3629 if (gAgent.isGodlike())
3567 { 3630 {
3568 gSelectMgr->sendGodlikeRequest("havok", "infoverbose"); 3631 LLSelectMgr::getInstance()->sendGodlikeRequest("havok", "infoverbose");
3569 } 3632 }
3570} 3633}
3571 3634
@@ -3573,7 +3636,7 @@ void handle_god_request_havok(void *)
3573//{ 3636//{
3574// if (gAgent.isGodlike()) 3637// if (gAgent.isGodlike())
3575// { 3638// {
3576// gSelectMgr->sendGodlikeRequest(GOD_WANTS_FOO); 3639// LLSelectMgr::getInstance()->sendGodlikeRequest(GOD_WANTS_FOO);
3577// } 3640// }
3578//} 3641//}
3579 3642
@@ -3581,7 +3644,7 @@ void handle_god_request_havok(void *)
3581//{ 3644//{
3582// if (gAgent.isGodlike()) 3645// if (gAgent.isGodlike())
3583// { 3646// {
3584// gSelectMgr->sendGodlikeRequest("terrain", "save"); 3647// LLSelectMgr::getInstance()->sendGodlikeRequest("terrain", "save");
3585// } 3648// }
3586//} 3649//}
3587 3650
@@ -3589,7 +3652,7 @@ void handle_god_request_havok(void *)
3589//{ 3652//{
3590// if (gAgent.isGodlike()) 3653// if (gAgent.isGodlike())
3591// { 3654// {
3592// gSelectMgr->sendGodlikeRequest("terrain", "load"); 3655// LLSelectMgr::getInstance()->sendGodlikeRequest("terrain", "load");
3593// } 3656// }
3594//} 3657//}
3595 3658
@@ -3599,7 +3662,7 @@ void handle_god_request_avatar_geometry(void *)
3599{ 3662{
3600 if (gAgent.isGodlike()) 3663 if (gAgent.isGodlike())
3601 { 3664 {
3602 gSelectMgr->sendGodlikeRequest("avatar toggle", NULL); 3665 LLSelectMgr::getInstance()->sendGodlikeRequest("avatar toggle", NULL);
3603 } 3666 }
3604} 3667}
3605 3668
@@ -3624,8 +3687,8 @@ void derez_objects(EDeRezDestination dest, const LLUUID& dest_id)
3624 // Check conditions that we can't deal with, building a list of 3687 // Check conditions that we can't deal with, building a list of
3625 // everything that we'll actually be derezzing. 3688 // everything that we'll actually be derezzing.
3626 LLViewerRegion* first_region = NULL; 3689 LLViewerRegion* first_region = NULL;
3627 for (LLObjectSelection::valid_root_iterator iter = gSelectMgr->getSelection()->valid_root_begin(); 3690 for (LLObjectSelection::valid_root_iterator iter = LLSelectMgr::getInstance()->getSelection()->valid_root_begin();
3628 iter != gSelectMgr->getSelection()->valid_root_end(); iter++) 3691 iter != LLSelectMgr::getInstance()->getSelection()->valid_root_end(); iter++)
3629 { 3692 {
3630 LLSelectNode* node = *iter; 3693 LLSelectNode* node = *iter;
3631 LLViewerObject* object = node->getObject(); 3694 LLViewerObject* object = node->getObject();
@@ -3742,7 +3805,7 @@ void derez_objects(EDeRezDestination dest, const LLUUID& dest_id)
3742 msg->nextBlockFast(_PREHASH_ObjectData); 3805 msg->nextBlockFast(_PREHASH_ObjectData);
3743 msg->addU32Fast(_PREHASH_ObjectLocalID, object->getLocalID()); 3806 msg->addU32Fast(_PREHASH_ObjectLocalID, object->getLocalID());
3744 // VEFFECT: DerezObject 3807 // VEFFECT: DerezObject
3745 LLHUDEffectSpiral* effectp = (LLHUDEffectSpiral*)gHUDManager->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINT, TRUE); 3808 LLHUDEffectSpiral* effectp = (LLHUDEffectSpiral*)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINT, TRUE);
3746 effectp->setPositionGlobal(object->getPositionGlobal()); 3809 effectp->setPositionGlobal(object->getPositionGlobal());
3747 effectp->setColor(LLColor4U(gAgent.getEffectColor())); 3810 effectp->setColor(LLColor4U(gAgent.getEffectColor()));
3748 } 3811 }
@@ -3767,7 +3830,7 @@ class LLToolsTakeCopy : public view_listener_t
3767{ 3830{
3768 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 3831 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
3769 { 3832 {
3770 if (gSelectMgr->getSelection()->isEmpty()) return true; 3833 if (LLSelectMgr::getInstance()->getSelection()->isEmpty()) return true;
3771 3834
3772 const LLUUID& category_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT); 3835 const LLUUID& category_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT);
3773 derez_objects(DRD_ACQUIRE_TO_AGENT_INVENTORY, category_id); 3836 derez_objects(DRD_ACQUIRE_TO_AGENT_INVENTORY, category_id);
@@ -3782,9 +3845,9 @@ class LLObjectReturn : public view_listener_t
3782{ 3845{
3783 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 3846 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
3784 { 3847 {
3785 if (gSelectMgr->getSelection()->isEmpty()) return true; 3848 if (LLSelectMgr::getInstance()->getSelection()->isEmpty()) return true;
3786 3849
3787 mObjectSelection = gSelectMgr->getEditSelection(); 3850 mObjectSelection = LLSelectMgr::getInstance()->getEditSelection();
3788 3851
3789 gViewerWindow->alertXml("ReturnToOwner", 3852 gViewerWindow->alertXml("ReturnToOwner",
3790 onReturnToOwner, 3853 onReturnToOwner,
@@ -3847,7 +3910,7 @@ class LLObjectEnableReturn : public view_listener_t
3847 } 3910 }
3848 } func; 3911 } func;
3849 const bool firstonly = true; 3912 const bool firstonly = true;
3850 new_value = gSelectMgr->getSelection()->applyToRootObjects(&func, firstonly); 3913 new_value = LLSelectMgr::getInstance()->getSelection()->applyToRootObjects(&func, firstonly);
3851 } 3914 }
3852 } 3915 }
3853 } 3916 }
@@ -3859,7 +3922,7 @@ class LLObjectEnableReturn : public view_listener_t
3859 3922
3860void force_take_copy(void*) 3923void force_take_copy(void*)
3861{ 3924{
3862 if (gSelectMgr->getSelection()->isEmpty()) return; 3925 if (LLSelectMgr::getInstance()->getSelection()->isEmpty()) return;
3863 const LLUUID& category_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT); 3926 const LLUUID& category_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT);
3864 derez_objects(DRD_FORCE_TO_GOD_INVENTORY, category_id); 3927 derez_objects(DRD_FORCE_TO_GOD_INVENTORY, category_id);
3865} 3928}
@@ -3868,7 +3931,7 @@ void handle_take()
3868{ 3931{
3869 // we want to use the folder this was derezzed from if it's 3932 // we want to use the folder this was derezzed from if it's
3870 // available. Otherwise, derez to the normal place. 3933 // available. Otherwise, derez to the normal place.
3871 if(gSelectMgr->getSelection()->isEmpty()) 3934 if(LLSelectMgr::getInstance()->getSelection()->isEmpty())
3872 { 3935 {
3873 return; 3936 return;
3874 } 3937 }
@@ -3877,8 +3940,8 @@ void handle_take()
3877 BOOL locked_but_takeable_object = FALSE; 3940 BOOL locked_but_takeable_object = FALSE;
3878 LLUUID category_id; 3941 LLUUID category_id;
3879 3942
3880 for (LLObjectSelection::root_iterator iter = gSelectMgr->getSelection()->root_begin(); 3943 for (LLObjectSelection::root_iterator iter = LLSelectMgr::getInstance()->getSelection()->root_begin();
3881 iter != gSelectMgr->getSelection()->root_end(); iter++) 3944 iter != LLSelectMgr::getInstance()->getSelection()->root_end(); iter++)
3882 { 3945 {
3883 LLSelectNode* node = *iter; 3946 LLSelectNode* node = *iter;
3884 LLViewerObject* object = node->getObject(); 3947 LLViewerObject* object = node->getObject();
@@ -3994,8 +4057,8 @@ BOOL enable_take()
3994 return FALSE; 4057 return FALSE;
3995 } 4058 }
3996 4059
3997 for (LLObjectSelection::valid_root_iterator iter = gSelectMgr->getSelection()->valid_root_begin(); 4060 for (LLObjectSelection::valid_root_iterator iter = LLSelectMgr::getInstance()->getSelection()->valid_root_begin();
3998 iter != gSelectMgr->getSelection()->valid_root_end(); iter++) 4061 iter != LLSelectMgr::getInstance()->getSelection()->valid_root_end(); iter++)
3999 { 4062 {
4000 LLSelectNode* node = *iter; 4063 LLSelectNode* node = *iter;
4001 LLViewerObject* object = node->getObject(); 4064 LLViewerObject* object = node->getObject();
@@ -4030,7 +4093,7 @@ class LLToolsBuyOrTake : public view_listener_t
4030{ 4093{
4031 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 4094 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
4032 { 4095 {
4033 if (gSelectMgr->getSelection()->isEmpty()) 4096 if (LLSelectMgr::getInstance()->getSelection()->isEmpty())
4034 { 4097 {
4035 return true; 4098 return true;
4036 } 4099 }
@@ -4109,8 +4172,8 @@ class LLToolsEnableBuyOrTake : public view_listener_t
4109// FALSE if selection is a 'take' 4172// FALSE if selection is a 'take'
4110BOOL is_selection_buy_not_take() 4173BOOL is_selection_buy_not_take()
4111{ 4174{
4112 for (LLObjectSelection::root_iterator iter = gSelectMgr->getSelection()->root_begin(); 4175 for (LLObjectSelection::root_iterator iter = LLSelectMgr::getInstance()->getSelection()->root_begin();
4113 iter != gSelectMgr->getSelection()->root_end(); iter++) 4176 iter != LLSelectMgr::getInstance()->getSelection()->root_end(); iter++)
4114 { 4177 {
4115 LLSelectNode* node = *iter; 4178 LLSelectNode* node = *iter;
4116 LLViewerObject* obj = node->getObject(); 4179 LLViewerObject* obj = node->getObject();
@@ -4127,8 +4190,8 @@ BOOL is_selection_buy_not_take()
4127S32 selection_price() 4190S32 selection_price()
4128{ 4191{
4129 S32 total_price = 0; 4192 S32 total_price = 0;
4130 for (LLObjectSelection::root_iterator iter = gSelectMgr->getSelection()->root_begin(); 4193 for (LLObjectSelection::root_iterator iter = LLSelectMgr::getInstance()->getSelection()->root_begin();
4131 iter != gSelectMgr->getSelection()->root_end(); iter++) 4194 iter != LLSelectMgr::getInstance()->getSelection()->root_end(); iter++)
4132 { 4195 {
4133 LLSelectNode* node = *iter; 4196 LLSelectNode* node = *iter;
4134 LLViewerObject* obj = node->getObject(); 4197 LLViewerObject* obj = node->getObject();
@@ -4181,10 +4244,10 @@ void handle_buy_currency(void*)
4181 4244
4182void handle_buy(void*) 4245void handle_buy(void*)
4183{ 4246{
4184 if (gSelectMgr->getSelection()->isEmpty()) return; 4247 if (LLSelectMgr::getInstance()->getSelection()->isEmpty()) return;
4185 4248
4186 LLSaleInfo sale_info; 4249 LLSaleInfo sale_info;
4187 BOOL valid = gSelectMgr->selectGetSaleInfo(sale_info); 4250 BOOL valid = LLSelectMgr::getInstance()->selectGetSaleInfo(sale_info);
4188 if (!valid) return; 4251 if (!valid) return;
4189 4252
4190 if (sale_info.getSaleType() == LLSaleInfo::FS_CONTENTS) 4253 if (sale_info.getSaleType() == LLSaleInfo::FS_CONTENTS)
@@ -4208,7 +4271,7 @@ class LLObjectBuy : public view_listener_t
4208 4271
4209BOOL sitting_on_selection() 4272BOOL sitting_on_selection()
4210{ 4273{
4211 LLSelectNode* node = gSelectMgr->getSelection()->getFirstRootNode(); 4274 LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode();
4212 if (!node) 4275 if (!node)
4213 { 4276 {
4214 return FALSE; 4277 return FALSE;
@@ -4251,14 +4314,11 @@ class LLToolsSaveToObjectInventory : public view_listener_t
4251{ 4314{
4252 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 4315 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
4253 { 4316 {
4254 if(gSelectMgr) 4317 LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode();
4318 if(node && (node->mValid) && (!node->mFromTaskID.isNull()))
4255 { 4319 {
4256 LLSelectNode* node = gSelectMgr->getSelection()->getFirstRootNode(); 4320 // *TODO: check to see if the fromtaskid object exists.
4257 if(node && (node->mValid) && (!node->mFromTaskID.isNull())) 4321 derez_objects(DRD_SAVE_INTO_TASK_INVENTORY, node->mFromTaskID);
4258 {
4259 // *TODO: check to see if the fromtaskid object exists.
4260 derez_objects(DRD_SAVE_INTO_TASK_INVENTORY, node->mFromTaskID);
4261 }
4262 } 4322 }
4263 return true; 4323 return true;
4264 } 4324 }
@@ -4271,8 +4331,8 @@ class LLToolsSnapObjectXY : public view_listener_t
4271 { 4331 {
4272 F64 snap_size = (F64)gSavedSettings.getF32("GridResolution"); 4332 F64 snap_size = (F64)gSavedSettings.getF32("GridResolution");
4273 4333
4274 for (LLObjectSelection::root_iterator iter = gSelectMgr->getSelection()->root_begin(); 4334 for (LLObjectSelection::root_iterator iter = LLSelectMgr::getInstance()->getSelection()->root_begin();
4275 iter != gSelectMgr->getSelection()->root_end(); iter++) 4335 iter != LLSelectMgr::getInstance()->getSelection()->root_end(); iter++)
4276 { 4336 {
4277 LLSelectNode* node = *iter; 4337 LLSelectNode* node = *iter;
4278 LLViewerObject* obj = node->getObject(); 4338 LLViewerObject* obj = node->getObject();
@@ -4306,7 +4366,7 @@ class LLToolsSnapObjectXY : public view_listener_t
4306 obj->setPositionGlobal(pos_global, FALSE); 4366 obj->setPositionGlobal(pos_global, FALSE);
4307 } 4367 }
4308 } 4368 }
4309 gSelectMgr->sendMultipleUpdate(UPD_POSITION); 4369 LLSelectMgr::getInstance()->sendMultipleUpdate(UPD_POSITION);
4310 return true; 4370 return true;
4311 } 4371 }
4312}; 4372};
@@ -4330,7 +4390,7 @@ class LLToolsEnableLink : public view_listener_t
4330 // in component mode, can't link 4390 // in component mode, can't link
4331 if (!gSavedSettings.getBOOL("EditLinkedParts")) 4391 if (!gSavedSettings.getBOOL("EditLinkedParts"))
4332 { 4392 {
4333 if(gSelectMgr->selectGetAllRootsValid() && gSelectMgr->getSelection()->getRootObjectCount() >= 2) 4393 if(LLSelectMgr::getInstance()->selectGetAllRootsValid() && LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() >= 2)
4334 { 4394 {
4335 struct f : public LLSelectedObjectFunctor 4395 struct f : public LLSelectedObjectFunctor
4336 { 4396 {
@@ -4340,7 +4400,7 @@ class LLToolsEnableLink : public view_listener_t
4340 } 4400 }
4341 } func; 4401 } func;
4342 const bool firstonly = true; 4402 const bool firstonly = true;
4343 new_value = gSelectMgr->getSelection()->applyToRootObjects(&func, firstonly); 4403 new_value = LLSelectMgr::getInstance()->getSelection()->applyToRootObjects(&func, firstonly);
4344 } 4404 }
4345 } 4405 }
4346 gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); 4406 gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value);
@@ -4352,13 +4412,13 @@ class LLToolsLink : public view_listener_t
4352{ 4412{
4353 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 4413 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
4354 { 4414 {
4355 if(!gSelectMgr->selectGetAllRootsValid()) 4415 if(!LLSelectMgr::getInstance()->selectGetAllRootsValid())
4356 { 4416 {
4357 LLNotifyBox::showXml("UnableToLinkWhileDownloading"); 4417 LLNotifyBox::showXml("UnableToLinkWhileDownloading");
4358 return true; 4418 return true;
4359 } 4419 }
4360 4420
4361 S32 object_count = gSelectMgr->getSelection()->getObjectCount(); 4421 S32 object_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount();
4362 if (object_count > MAX_CHILDREN_PER_TASK + 1) 4422 if (object_count > MAX_CHILDREN_PER_TASK + 1)
4363 { 4423 {
4364 LLStringBase<char>::format_map_t args; 4424 LLStringBase<char>::format_map_t args;
@@ -4369,19 +4429,19 @@ class LLToolsLink : public view_listener_t
4369 return true; 4429 return true;
4370 } 4430 }
4371 4431
4372 if(gSelectMgr->getSelection()->getRootObjectCount() < 2) 4432 if(LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() < 2)
4373 { 4433 {
4374 gViewerWindow->alertXml("CannotLinkIncompleteSet"); 4434 gViewerWindow->alertXml("CannotLinkIncompleteSet");
4375 return true; 4435 return true;
4376 } 4436 }
4377 if(!gSelectMgr->selectGetRootsModify()) 4437 if(!LLSelectMgr::getInstance()->selectGetRootsModify())
4378 { 4438 {
4379 gViewerWindow->alertXml("CannotLinkModify"); 4439 gViewerWindow->alertXml("CannotLinkModify");
4380 return true; 4440 return true;
4381 } 4441 }
4382 LLUUID owner_id; 4442 LLUUID owner_id;
4383 LLString owner_name; 4443 LLString owner_name;
4384 if(!gSelectMgr->selectGetOwner(owner_id, owner_name)) 4444 if(!LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name))
4385 { 4445 {
4386 // we don't actually care if you're the owner, but novices are 4446 // we don't actually care if you're the owner, but novices are
4387 // the most likely to be stumped by this one, so offer the 4447 // the most likely to be stumped by this one, so offer the
@@ -4389,7 +4449,7 @@ class LLToolsLink : public view_listener_t
4389 gViewerWindow->alertXml("CannotLinkDifferentOwners"); 4449 gViewerWindow->alertXml("CannotLinkDifferentOwners");
4390 return true; 4450 return true;
4391 } 4451 }
4392 gSelectMgr->sendLink(); 4452 LLSelectMgr::getInstance()->sendLink();
4393 return true; 4453 return true;
4394 } 4454 }
4395}; 4455};
@@ -4398,9 +4458,9 @@ class LLToolsEnableUnlink : public view_listener_t
4398{ 4458{
4399 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 4459 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
4400 { 4460 {
4401 bool new_value = gSelectMgr->selectGetAllRootsValid() && 4461 bool new_value = LLSelectMgr::getInstance()->selectGetAllRootsValid() &&
4402 gSelectMgr->getSelection()->getFirstEditableObject() && 4462 LLSelectMgr::getInstance()->getSelection()->getFirstEditableObject() &&
4403 !gSelectMgr->getSelection()->getFirstEditableObject()->isAttachment(); 4463 !LLSelectMgr::getInstance()->getSelection()->getFirstEditableObject()->isAttachment();
4404 gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); 4464 gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value);
4405 return true; 4465 return true;
4406 } 4466 }
@@ -4410,7 +4470,7 @@ class LLToolsUnlink : public view_listener_t
4410{ 4470{
4411 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 4471 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
4412 { 4472 {
4413 gSelectMgr->sendDelink(); 4473 LLSelectMgr::getInstance()->sendDelink();
4414 return true; 4474 return true;
4415 } 4475 }
4416}; 4476};
@@ -4433,32 +4493,32 @@ class LLToolsStopAllAnimations : public view_listener_t
4433 4493
4434//void handle_hinge(void*) 4494//void handle_hinge(void*)
4435//{ 4495//{
4436// gSelectMgr->sendHinge(1); 4496// LLSelectMgr::getInstance()->sendHinge(1);
4437//} 4497//}
4438 4498
4439//void handle_ptop(void*) 4499//void handle_ptop(void*)
4440//{ 4500//{
4441// gSelectMgr->sendHinge(2); 4501// LLSelectMgr::getInstance()->sendHinge(2);
4442//} 4502//}
4443 4503
4444//void handle_lptop(void*) 4504//void handle_lptop(void*)
4445//{ 4505//{
4446// gSelectMgr->sendHinge(3); 4506// LLSelectMgr::getInstance()->sendHinge(3);
4447//} 4507//}
4448 4508
4449//void handle_wheel(void*) 4509//void handle_wheel(void*)
4450//{ 4510//{
4451// gSelectMgr->sendHinge(4); 4511// LLSelectMgr::getInstance()->sendHinge(4);
4452//} 4512//}
4453 4513
4454//void handle_dehinge(void*) 4514//void handle_dehinge(void*)
4455//{ 4515//{
4456// gSelectMgr->sendDehinge(); 4516// LLSelectMgr::getInstance()->sendDehinge();
4457//} 4517//}
4458 4518
4459//BOOL enable_dehinge(void*) 4519//BOOL enable_dehinge(void*)
4460//{ 4520//{
4461// LLViewerObject* obj = gSelectMgr->getSelection()->getFirstEditableObject(); 4521// LLViewerObject* obj = LLSelectMgr::getInstance()->getSelection()->getFirstEditableObject();
4462// return obj && !obj->isAttachment(); 4522// return obj && !obj->isAttachment();
4463//} 4523//}
4464 4524
@@ -4572,7 +4632,7 @@ class LLObjectEnableDelete : public view_listener_t
4572 (!LLAppViewer::instance()->isInProductionGrid() 4632 (!LLAppViewer::instance()->isInProductionGrid()
4573 && gAgent.isGodlike()) || 4633 && gAgent.isGodlike()) ||
4574# endif 4634# endif
4575 (gSelectMgr && gSelectMgr->canDoDelete()); 4635 LLSelectMgr::getInstance()->canDoDelete();
4576#endif 4636#endif
4577 gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); 4637 gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value);
4578 return true; 4638 return true;
@@ -4592,9 +4652,9 @@ class LLObjectDelete : public view_listener_t
4592{ 4652{
4593 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 4653 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
4594 { 4654 {
4595 if (gSelectMgr) 4655 if (LLSelectMgr::getInstance())
4596 { 4656 {
4597 gSelectMgr->doDelete(); 4657 LLSelectMgr::getInstance()->doDelete();
4598 } 4658 }
4599 4659
4600 // and close any pie/context menus when done 4660 // and close any pie/context menus when done
@@ -4609,7 +4669,7 @@ class LLObjectDelete : public view_listener_t
4609 4669
4610void handle_force_delete(void*) 4670void handle_force_delete(void*)
4611{ 4671{
4612 gSelectMgr->selectForceDelete(); 4672 LLSelectMgr::getInstance()->selectForceDelete();
4613} 4673}
4614 4674
4615class LLViewEnableLastChatter : public view_listener_t 4675class LLViewEnableLastChatter : public view_listener_t
@@ -4717,7 +4777,7 @@ class LLEditRedo : public view_listener_t
4717 4777
4718void print_object_info(void*) 4778void print_object_info(void*)
4719{ 4779{
4720 gSelectMgr->selectionDump(); 4780 LLSelectMgr::getInstance()->selectionDump();
4721} 4781}
4722 4782
4723void print_agent_nvpairs(void*) 4783void print_agent_nvpairs(void*)
@@ -4761,6 +4821,8 @@ void show_debug_menus()
4761 4821
4762 //gMenuBarView->setItemVisible(LLString("DebugOptions"), visible); 4822 //gMenuBarView->setItemVisible(LLString("DebugOptions"), visible);
4763 //gMenuBarView->setItemVisible(LLString(AVI_TOOLS), visible); 4823 //gMenuBarView->setItemVisible(LLString(AVI_TOOLS), visible);
4824
4825 gMenuBarView->arrange(); // clean-up positioning
4764 }; 4826 };
4765} 4827}
4766 4828
@@ -4795,7 +4857,7 @@ LLUploadDialog *gExportDialog = NULL;
4795 4857
4796void handle_export_selected( void * ) 4858void handle_export_selected( void * )
4797{ 4859{
4798 LLObjectSelectionHandle selection = gSelectMgr->getSelection(); 4860 LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
4799 if (selection->isEmpty()) 4861 if (selection->isEmpty())
4800 { 4862 {
4801 return; 4863 return;
@@ -4829,13 +4891,13 @@ void handle_export_selected( void * )
4829BOOL menu_check_build_tool( void* user_data ) 4891BOOL menu_check_build_tool( void* user_data )
4830{ 4892{
4831 S32 index = (intptr_t) user_data; 4893 S32 index = (intptr_t) user_data;
4832 return gToolMgr->getCurrentToolset()->isToolSelected( index ); 4894 return LLToolMgr::getInstance()->getCurrentToolset()->isToolSelected( index );
4833} 4895}
4834 4896
4835void handle_reload_settings(void*) 4897void handle_reload_settings(void*)
4836{ 4898{
4837 gSavedSettings.resetToDefaults(); 4899 gSavedSettings.resetToDefaults();
4838 gSavedSettings.loadFromFile(gSettingsFileName, TRUE); 4900 gSavedSettings.loadFromFile(gSavedSettings.getString("ClientSettingsFile"), TRUE);
4839 4901
4840 llinfos << "Loading colors from colors.xml" << llendl; 4902 llinfos << "Loading colors from colors.xml" << llendl;
4841 std::string color_file = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"colors.xml"); 4903 std::string color_file = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"colors.xml");
@@ -4868,23 +4930,22 @@ class LLWorldAlwaysRun : public view_listener_t
4868{ 4930{
4869 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 4931 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
4870 { 4932 {
4933 // as well as altering the default walk-vs-run state,
4934 // we also change the *current* walk-vs-run state.
4871 if (gAgent.getAlwaysRun()) 4935 if (gAgent.getAlwaysRun())
4872 { 4936 {
4873 gAgent.clearAlwaysRun(); 4937 gAgent.clearAlwaysRun();
4938 gAgent.clearRunning();
4874 } 4939 }
4875 else 4940 else
4876 { 4941 {
4877 gAgent.setAlwaysRun(); 4942 gAgent.setAlwaysRun();
4943 gAgent.setRunning();
4878 } 4944 }
4879 LLMessageSystem *msg = gMessageSystem;
4880 4945
4946 // tell the simulator.
4947 gAgent.sendWalkRun(gAgent.getAlwaysRun());
4881 4948
4882 msg->newMessageFast(_PREHASH_SetAlwaysRun);
4883 msg->nextBlockFast(_PREHASH_AgentData);
4884 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
4885 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
4886 msg->addBOOLFast(_PREHASH_AlwaysRun, gAgent.getAlwaysRun() );
4887 gAgent.sendReliableMessage();
4888 return true; 4949 return true;
4889 } 4950 }
4890}; 4951};
@@ -4943,7 +5004,7 @@ class LLWorldCreateLandmark : public view_listener_t
4943 llwarns << "No agent region" << llendl; 5004 llwarns << "No agent region" << llendl;
4944 return true; 5005 return true;
4945 } 5006 }
4946 LLParcel* agent_parcel = gParcelMgr->getAgentParcel(); 5007 LLParcel* agent_parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
4947 if (!agent_parcel) 5008 if (!agent_parcel)
4948 { 5009 {
4949 llwarns << "No agent parcel" << llendl; 5010 llwarns << "No agent parcel" << llendl;
@@ -4978,24 +5039,24 @@ class LLToolsLookAtSelection : public view_listener_t
4978 { 5039 {
4979 const F32 PADDING_FACTOR = 2.f; 5040 const F32 PADDING_FACTOR = 2.f;
4980 BOOL zoom = (userdata.asString() == "zoom"); 5041 BOOL zoom = (userdata.asString() == "zoom");
4981 if (!gSelectMgr->getSelection()->isEmpty()) 5042 if (!LLSelectMgr::getInstance()->getSelection()->isEmpty())
4982 { 5043 {
4983 gAgent.setFocusOnAvatar(FALSE, ANIMATE); 5044 gAgent.setFocusOnAvatar(FALSE, ANIMATE);
4984 5045
4985 LLBBox selection_bbox = gSelectMgr->getBBoxOfSelection(); 5046 LLBBox selection_bbox = LLSelectMgr::getInstance()->getBBoxOfSelection();
4986 F32 angle_of_view = llmax(0.1f, gCamera->getAspect() > 1.f ? gCamera->getView() * gCamera->getAspect() : gCamera->getView()); 5047 F32 angle_of_view = llmax(0.1f, LLViewerCamera::getInstance()->getAspect() > 1.f ? LLViewerCamera::getInstance()->getView() * LLViewerCamera::getInstance()->getAspect() : LLViewerCamera::getInstance()->getView());
4987 F32 distance = selection_bbox.getExtentLocal().magVec() * PADDING_FACTOR / atan(angle_of_view); 5048 F32 distance = selection_bbox.getExtentLocal().magVec() * PADDING_FACTOR / atan(angle_of_view);
4988 5049
4989 LLVector3 obj_to_cam = gCamera->getOrigin() - selection_bbox.getCenterAgent(); 5050 LLVector3 obj_to_cam = LLViewerCamera::getInstance()->getOrigin() - selection_bbox.getCenterAgent();
4990 obj_to_cam.normVec(); 5051 obj_to_cam.normVec();
4991 5052
4992 if (zoom) 5053 if (zoom)
4993 { 5054 {
4994 gAgent.setCameraPosAndFocusGlobal(gSelectMgr->getSelectionCenterGlobal() + LLVector3d(obj_to_cam * distance), gSelectMgr->getSelectionCenterGlobal(), gSelectMgr->getSelection()->getFirstObject()->mID ); 5055 gAgent.setCameraPosAndFocusGlobal(LLSelectMgr::getInstance()->getSelectionCenterGlobal() + LLVector3d(obj_to_cam * distance), LLSelectMgr::getInstance()->getSelectionCenterGlobal(), LLSelectMgr::getInstance()->getSelection()->getFirstObject()->mID );
4995 } 5056 }
4996 else 5057 else
4997 { 5058 {
4998 gAgent.setFocusGlobal( gSelectMgr->getSelectionCenterGlobal(), gSelectMgr->getSelection()->getFirstObject()->mID ); 5059 gAgent.setFocusGlobal( LLSelectMgr::getInstance()->getSelectionCenterGlobal(), LLSelectMgr::getInstance()->getSelection()->getFirstObject()->mID );
4999 } 5060 }
5000 } 5061 }
5001 return true; 5062 return true;
@@ -5091,7 +5152,7 @@ void complete_give_money(S32 option, void* user_data)
5091 5152
5092bool handle_give_money_dialog() 5153bool handle_give_money_dialog()
5093{ 5154{
5094 LLObjectSelectionHandle* handlep = new LLObjectSelectionHandle(gSelectMgr->getSelection()); 5155 LLObjectSelectionHandle* handlep = new LLObjectSelectionHandle(LLSelectMgr::getInstance()->getSelection());
5095 if (gAgent.getBusy()) 5156 if (gAgent.getBusy())
5096 { 5157 {
5097 // warn users of being in busy mode during a transaction 5158 // warn users of being in busy mode during a transaction
@@ -5167,7 +5228,7 @@ class LLObjectEnableSitOrStand : public view_listener_t
5167 } 5228 }
5168 else 5229 else
5169 { 5230 {
5170 LLSelectNode* node = gSelectMgr->getSelection()->getFirstRootNode(); 5231 LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode();
5171 if (node && node->mValid && !node->mSitName.empty()) 5232 if (node && node->mValid && !node->mSitName.empty())
5172 { 5233 {
5173 label.assign(node->mSitName); 5234 label.assign(node->mSitName);
@@ -5190,12 +5251,7 @@ void edit_ui(void*)
5190 5251
5191void dump_select_mgr(void*) 5252void dump_select_mgr(void*)
5192{ 5253{
5193 gSelectMgr->dump(); 5254 LLSelectMgr::getInstance()->dump();
5194}
5195
5196void dump_volume_mgr(void*)
5197{
5198 gVolumeMgr->dump();
5199} 5255}
5200 5256
5201void dump_inventory(void*) 5257void dump_inventory(void*)
@@ -5207,7 +5263,7 @@ void dump_inventory(void*)
5207void handle_force_unlock(void*) 5263void handle_force_unlock(void*)
5208{ 5264{
5209 // First, make it public. 5265 // First, make it public.
5210 gSelectMgr->sendOwner(LLUUID::null, LLUUID::null, TRUE); 5266 LLSelectMgr::getInstance()->sendOwner(LLUUID::null, LLUUID::null, TRUE);
5211 5267
5212 // Second, lie to the viewer and mark it editable and unowned 5268 // Second, lie to the viewer and mark it editable and unowned
5213 5269
@@ -5224,7 +5280,7 @@ void handle_force_unlock(void*)
5224 return true; 5280 return true;
5225 } 5281 }
5226 } func; 5282 } func;
5227 gSelectMgr->getSelection()->applyToObjects(&func); 5283 LLSelectMgr::getInstance()->getSelection()->applyToObjects(&func);
5228} 5284}
5229 5285
5230void handle_dump_followcam(void*) 5286void handle_dump_followcam(void*)
@@ -5232,21 +5288,6 @@ void handle_dump_followcam(void*)
5232 LLFollowCamMgr::dump(); 5288 LLFollowCamMgr::dump();
5233} 5289}
5234 5290
5235BOOL check_flycam(void*)
5236{
5237 return LLViewerJoystick::sOverrideCamera;
5238}
5239
5240void handle_toggle_flycam(void*)
5241{
5242 LLViewerJoystick::sOverrideCamera = !LLViewerJoystick::sOverrideCamera;
5243 if (LLViewerJoystick::sOverrideCamera)
5244 {
5245 LLViewerJoystick::updateCamera(TRUE);
5246 LLFloaterJoystick::show(NULL);
5247 }
5248}
5249
5250void handle_viewer_enable_message_log(void*) 5291void handle_viewer_enable_message_log(void*)
5251{ 5292{
5252 gMessageSystem->startLogging(); 5293 gMessageSystem->startLogging();
@@ -5304,11 +5345,11 @@ class LLShowFloater : public view_listener_t
5304 } 5345 }
5305 else if (floater_name == "camera controls") 5346 else if (floater_name == "camera controls")
5306 { 5347 {
5307 LLFloaterCamera::toggle(NULL); 5348 LLFloaterCamera::toggleInstance();
5308 } 5349 }
5309 else if (floater_name == "movement controls") 5350 else if (floater_name == "movement controls")
5310 { 5351 {
5311 LLFloaterMove::show(NULL); 5352 LLFloaterMove::toggleInstance();
5312 } 5353 }
5313 else if (floater_name == "world map") 5354 else if (floater_name == "world map")
5314 { 5355 {
@@ -5320,7 +5361,7 @@ class LLShowFloater : public view_listener_t
5320 } 5361 }
5321 else if (floater_name == "stat bar") 5362 else if (floater_name == "stat bar")
5322 { 5363 {
5323 gDebugView->mStatViewp->setVisible(!gDebugView->mStatViewp->getVisible()); 5364 gDebugView->mFloaterStatsp->setVisible(!gDebugView->mFloaterStatsp->getVisible());
5324 } 5365 }
5325 else if (floater_name == "my land") 5366 else if (floater_name == "my land")
5326 { 5367 {
@@ -5328,21 +5369,21 @@ class LLShowFloater : public view_listener_t
5328 } 5369 }
5329 else if (floater_name == "about land") 5370 else if (floater_name == "about land")
5330 { 5371 {
5331 if (gParcelMgr->selectionEmpty()) 5372 if (LLViewerParcelMgr::getInstance()->selectionEmpty())
5332 { 5373 {
5333 gParcelMgr->selectParcelAt(gAgent.getPositionGlobal()); 5374 LLViewerParcelMgr::getInstance()->selectParcelAt(gAgent.getPositionGlobal());
5334 } 5375 }
5335 5376
5336 LLFloaterLand::showInstance(); 5377 LLFloaterLand::showInstance();
5337 } 5378 }
5338 else if (floater_name == "buy land") 5379 else if (floater_name == "buy land")
5339 { 5380 {
5340 if (gParcelMgr->selectionEmpty()) 5381 if (LLViewerParcelMgr::getInstance()->selectionEmpty())
5341 { 5382 {
5342 gParcelMgr->selectParcelAt(gAgent.getPositionGlobal()); 5383 LLViewerParcelMgr::getInstance()->selectParcelAt(gAgent.getPositionGlobal());
5343 } 5384 }
5344 5385
5345 gParcelMgr->startBuyLand(); 5386 LLViewerParcelMgr::getInstance()->startBuyLand();
5346 } 5387 }
5347 else if (floater_name == "about region") 5388 else if (floater_name == "about region")
5348 { 5389 {
@@ -5360,6 +5401,10 @@ class LLShowFloater : public view_listener_t
5360 { 5401 {
5361 gViewerHtmlHelp.show(); 5402 gViewerHtmlHelp.show();
5362 } 5403 }
5404 else if (floater_name == "help tutorial")
5405 {
5406 LLFloaterHUD::show();
5407 }
5363 else if (floater_name == "complaint reporter") 5408 else if (floater_name == "complaint reporter")
5364 { 5409 {
5365 // Prevent menu from appearing in screen shot. 5410 // Prevent menu from appearing in screen shot.
@@ -5375,7 +5420,7 @@ class LLShowFloater : public view_listener_t
5375 } 5420 }
5376 else if (floater_name == "lag meter") 5421 else if (floater_name == "lag meter")
5377 { 5422 {
5378 LLFloaterLagMeter::show(NULL); 5423 LLFloaterLagMeter::showInstance();
5379 } 5424 }
5380 else if (floater_name == "bug reporter") 5425 else if (floater_name == "bug reporter")
5381 { 5426 {
@@ -5428,15 +5473,15 @@ class LLFloaterVisible : public view_listener_t
5428 } 5473 }
5429 else if (floater_name == "camera controls") 5474 else if (floater_name == "camera controls")
5430 { 5475 {
5431 new_value = LLFloaterCamera::visible(NULL); 5476 new_value = LLFloaterCamera::instanceVisible();
5432 } 5477 }
5433 else if (floater_name == "movement controls") 5478 else if (floater_name == "movement controls")
5434 { 5479 {
5435 new_value = LLFloaterMove::visible(NULL); 5480 new_value = LLFloaterMove::instanceVisible();
5436 } 5481 }
5437 else if (floater_name == "stat bar") 5482 else if (floater_name == "stat bar")
5438 { 5483 {
5439 new_value = gDebugView->mStatViewp->getVisible(); 5484 new_value = gDebugView->mFloaterStatsp->getVisible();
5440 } 5485 }
5441 else if (floater_name == "active speakers") 5486 else if (floater_name == "active speakers")
5442 { 5487 {
@@ -5585,8 +5630,8 @@ void handle_focus(void *)
5585 gViewerWindow->moveCursorToCenter(); 5630 gViewerWindow->moveCursorToCenter();
5586 5631
5587 // Switch to camera toolset 5632 // Switch to camera toolset
5588// gToolMgr->setCurrentToolset(gCameraToolset); 5633// LLToolMgr::getInstance()->setCurrentToolset(gCameraToolset);
5589 gToolMgr->getCurrentToolset()->selectTool( gToolCamera ); 5634 LLToolMgr::getInstance()->getCurrentToolset()->selectTool( LLToolCamera::getInstance() );
5590} 5635}
5591 5636
5592class LLLandEdit : public view_listener_t 5637class LLLandEdit : public view_listener_t
@@ -5609,13 +5654,13 @@ class LLLandEdit : public view_listener_t
5609 } 5654 }
5610 5655
5611 5656
5612 gParcelMgr->selectParcelAt( gLastHitPosGlobal ); 5657 LLViewerParcelMgr::getInstance()->selectParcelAt( gLastHitPosGlobal );
5613 5658
5614 gFloaterTools->showMore(TRUE); 5659 gFloaterTools->showMore(TRUE);
5615 gFloaterView->bringToFront( gFloaterTools ); 5660 gFloaterView->bringToFront( gFloaterTools );
5616 5661
5617 // Switch to land edit toolset 5662 // Switch to land edit toolset
5618 gToolMgr->getCurrentToolset()->selectTool( gToolParcel ); 5663 LLToolMgr::getInstance()->getCurrentToolset()->selectTool( LLToolSelectLand::getInstance() );
5619 return true; 5664 return true;
5620 } 5665 }
5621}; 5666};
@@ -5624,10 +5669,10 @@ class LLWorldEnableBuyLand : public view_listener_t
5624{ 5669{
5625 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 5670 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
5626 { 5671 {
5627 bool new_value = gParcelMgr->canAgentBuyParcel( 5672 bool new_value = LLViewerParcelMgr::getInstance()->canAgentBuyParcel(
5628 gParcelMgr->selectionEmpty() 5673 LLViewerParcelMgr::getInstance()->selectionEmpty()
5629 ? gParcelMgr->getAgentParcel() 5674 ? LLViewerParcelMgr::getInstance()->getAgentParcel()
5630 : gParcelMgr->getParcelSelection()->getParcel(), 5675 : LLViewerParcelMgr::getInstance()->getParcelSelection()->getParcel(),
5631 false); 5676 false);
5632 gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); 5677 gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value);
5633 return true; 5678 return true;
@@ -5636,8 +5681,8 @@ class LLWorldEnableBuyLand : public view_listener_t
5636 5681
5637BOOL enable_buy_land(void*) 5682BOOL enable_buy_land(void*)
5638{ 5683{
5639 return gParcelMgr->canAgentBuyParcel( 5684 return LLViewerParcelMgr::getInstance()->canAgentBuyParcel(
5640 gParcelMgr->getParcelSelection()->getParcel(), false); 5685 LLViewerParcelMgr::getInstance()->getParcelSelection()->getParcel(), false);
5641} 5686}
5642 5687
5643 5688
@@ -5658,8 +5703,8 @@ void handle_move(void*)
5658 5703
5659 gViewerWindow->moveCursorToCenter(); 5704 gViewerWindow->moveCursorToCenter();
5660 5705
5661 gToolMgr->setCurrentToolset(gBasicToolset); 5706 LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
5662 gToolMgr->getCurrentToolset()->selectTool( gToolGrab ); 5707 LLToolMgr::getInstance()->getCurrentToolset()->selectTool( LLToolGrab::getInstance() );
5663} 5708}
5664 5709
5665class LLObjectAttachToAvatar : public view_listener_t 5710class LLObjectAttachToAvatar : public view_listener_t
@@ -5670,7 +5715,7 @@ public:
5670private: 5715private:
5671 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 5716 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
5672 { 5717 {
5673 setObjectSelection(gSelectMgr->getSelection()); 5718 setObjectSelection(LLSelectMgr::getInstance()->getSelection());
5674 LLViewerObject* selectedObject = sObjectSelection->getFirstRootObject(); 5719 LLViewerObject* selectedObject = sObjectSelection->getFirstRootObject();
5675 if (selectedObject) 5720 if (selectedObject)
5676 { 5721 {
@@ -5713,7 +5758,7 @@ void near_attach_object(BOOL success, void *user_data)
5713 // interpret 0 as "default location" 5758 // interpret 0 as "default location"
5714 attachment_id = 0; 5759 attachment_id = 0;
5715 } 5760 }
5716 gSelectMgr->sendAttach(attachment_id); 5761 LLSelectMgr::getInstance()->sendAttach(attachment_id);
5717 } 5762 }
5718 LLObjectAttachToAvatar::setObjectSelection(NULL); 5763 LLObjectAttachToAvatar::setObjectSelection(NULL);
5719} 5764}
@@ -5722,7 +5767,7 @@ void confirm_replace_attachment(S32 option, void* user_data)
5722{ 5767{
5723 if (option == 0/*YES*/) 5768 if (option == 0/*YES*/)
5724 { 5769 {
5725 LLViewerObject* selectedObject = gSelectMgr->getSelection()->getFirstRootObject(); 5770 LLViewerObject* selectedObject = LLSelectMgr::getInstance()->getSelection()->getFirstRootObject();
5726 if (selectedObject) 5771 if (selectedObject)
5727 { 5772 {
5728 const F32 MIN_STOP_DISTANCE = 1.f; // meters 5773 const F32 MIN_STOP_DISTANCE = 1.f; // meters
@@ -5789,7 +5834,7 @@ class LLAttachmentDrop : public view_listener_t
5789 // objects. Thus we need to clear the list, make sure it only 5834 // objects. Thus we need to clear the list, make sure it only
5790 // contains the object the user clicked, send the message, 5835 // contains the object the user clicked, send the message,
5791 // then clear the list. 5836 // then clear the list.
5792 gSelectMgr->sendDropAttachment(); 5837 LLSelectMgr::getInstance()->sendDropAttachment();
5793 return true; 5838 return true;
5794 } 5839 }
5795}; 5840};
@@ -5892,9 +5937,9 @@ class LLAttachmentDetach : public view_listener_t
5892 // We use deselectAll to update the simulator's notion of what's 5937 // We use deselectAll to update the simulator's notion of what's
5893 // selected, and removeAll just to change things locally. 5938 // selected, and removeAll just to change things locally.
5894 //RN: I thought it was more useful to detach everything that was selected 5939 //RN: I thought it was more useful to detach everything that was selected
5895 if (gSelectMgr->getSelection()->isAttachment()) 5940 if (LLSelectMgr::getInstance()->getSelection()->isAttachment())
5896 { 5941 {
5897 gSelectMgr->sendDetach(); 5942 LLSelectMgr::getInstance()->sendDetach();
5898 } 5943 }
5899 return true; 5944 return true;
5900 } 5945 }
@@ -5922,7 +5967,7 @@ class LLAttachmentEnableDrop : public view_listener_t
5922{ 5967{
5923 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 5968 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
5924 { 5969 {
5925 LLParcel* parcel = gParcelMgr->getAgentParcel(); 5970 LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
5926 BOOL can_build = gAgent.isGodlike() || (parcel && parcel->getAllowModify()); 5971 BOOL can_build = gAgent.isGodlike() || (parcel && parcel->getAllowModify());
5927 5972
5928 //Add an inventory observer to only allow dropping the newly attached item 5973 //Add an inventory observer to only allow dropping the newly attached item
@@ -6011,11 +6056,7 @@ class LLAttachmentEnableDetach : public view_listener_t
6011BOOL object_selected_and_point_valid(void *user_data) 6056BOOL object_selected_and_point_valid(void *user_data)
6012{ 6057{
6013 //LLViewerJointAttachment *attachment = (LLViewerJointAttachment *)user_data; 6058 //LLViewerJointAttachment *attachment = (LLViewerJointAttachment *)user_data;
6014 if (gSelectMgr == NULL) 6059 LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
6015 {
6016 return FALSE;
6017 }
6018 LLObjectSelectionHandle selection = gSelectMgr->getSelection();
6019 for (LLObjectSelection::root_iterator iter = selection->root_begin(); 6060 for (LLObjectSelection::root_iterator iter = selection->root_begin();
6020 iter != selection->root_end(); iter++) 6061 iter != selection->root_end(); iter++)
6021 { 6062 {
@@ -6048,9 +6089,9 @@ BOOL object_is_wearable()
6048 { 6089 {
6049 return FALSE; 6090 return FALSE;
6050 } 6091 }
6051 LLObjectSelectionHandle selection = gSelectMgr->getSelection(); 6092 LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
6052 for (LLObjectSelection::valid_root_iterator iter = gSelectMgr->getSelection()->valid_root_begin(); 6093 for (LLObjectSelection::valid_root_iterator iter = LLSelectMgr::getInstance()->getSelection()->valid_root_begin();
6053 iter != gSelectMgr->getSelection()->valid_root_end(); iter++) 6094 iter != LLSelectMgr::getInstance()->getSelection()->valid_root_end(); iter++)
6054 { 6095 {
6055 LLSelectNode* node = *iter; 6096 LLSelectNode* node = *iter;
6056 if (node->mPermissions->getOwner() == gAgent.getID()) 6097 if (node->mPermissions->getOwner() == gAgent.getID())
@@ -6150,7 +6191,7 @@ void queue_actions(LLFloaterScriptQueue* q, const std::string& noscriptmsg, cons
6150 // Apply until an object fails 6191 // Apply until an object fails
6151 QueueObjects func(q); 6192 QueueObjects func(q);
6152 const bool firstonly = true; 6193 const bool firstonly = true;
6153 bool fail = gSelectMgr->getSelection()->applyToObjects(&func, firstonly); 6194 bool fail = LLSelectMgr::getInstance()->getSelection()->applyToObjects(&func, firstonly);
6154 if(fail) 6195 if(fail)
6155 { 6196 {
6156 if ( !func.scripted ) 6197 if ( !func.scripted )
@@ -6228,8 +6269,8 @@ void handle_set_not_run_selection(void*)
6228 6269
6229void handle_selected_texture_info(void*) 6270void handle_selected_texture_info(void*)
6230{ 6271{
6231 for (LLObjectSelection::valid_iterator iter = gSelectMgr->getSelection()->valid_begin(); 6272 for (LLObjectSelection::valid_iterator iter = LLSelectMgr::getInstance()->getSelection()->valid_begin();
6232 iter != gSelectMgr->getSelection()->valid_end(); iter++) 6273 iter != LLSelectMgr::getInstance()->getSelection()->valid_end(); iter++)
6233 { 6274 {
6234 LLSelectNode* node = *iter; 6275 LLSelectNode* node = *iter;
6235 6276
@@ -6397,14 +6438,14 @@ BOOL menu_check_variable( void* user_data)
6397 6438
6398BOOL enable_land_selected( void* ) 6439BOOL enable_land_selected( void* )
6399{ 6440{
6400 return gParcelMgr && !(gParcelMgr->selectionEmpty()); 6441 return !(LLViewerParcelMgr::getInstance()->selectionEmpty());
6401} 6442}
6402 6443
6403class LLSomethingSelected : public view_listener_t 6444class LLSomethingSelected : public view_listener_t
6404{ 6445{
6405 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 6446 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
6406 { 6447 {
6407 bool new_value = !(gSelectMgr->getSelection()->isEmpty()); 6448 bool new_value = !(LLSelectMgr::getInstance()->getSelection()->isEmpty());
6408 gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); 6449 gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value);
6409 return true; 6450 return true;
6410 } 6451 }
@@ -6414,7 +6455,7 @@ class LLSomethingSelectedNoHUD : public view_listener_t
6414{ 6455{
6415 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 6456 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
6416 { 6457 {
6417 LLObjectSelectionHandle selection = gSelectMgr->getSelection(); 6458 LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
6418 bool new_value = !(selection->isEmpty()) && !(selection->getSelectType() == SELECT_TYPE_HUD); 6459 bool new_value = !(selection->isEmpty()) && !(selection->getSelectType() == SELECT_TYPE_HUD);
6419 gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); 6460 gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value);
6420 return true; 6461 return true;
@@ -6423,14 +6464,14 @@ class LLSomethingSelectedNoHUD : public view_listener_t
6423 6464
6424BOOL enable_more_than_one_selected(void* ) 6465BOOL enable_more_than_one_selected(void* )
6425{ 6466{
6426 return (gSelectMgr->getSelection()->getObjectCount() > 1); 6467 return (LLSelectMgr::getInstance()->getSelection()->getObjectCount() > 1);
6427} 6468}
6428 6469
6429class LLEditableSelected : public view_listener_t 6470class LLEditableSelected : public view_listener_t
6430{ 6471{
6431 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 6472 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
6432 { 6473 {
6433 bool new_value = (gSelectMgr->getSelection()->getFirstEditableObject() != NULL); 6474 bool new_value = (LLSelectMgr::getInstance()->getSelection()->getFirstEditableObject() != NULL);
6434 gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); 6475 gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value);
6435 return true; 6476 return true;
6436 } 6477 }
@@ -6441,7 +6482,7 @@ class LLToolsEnableTakeCopy : public view_listener_t
6441 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 6482 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
6442 { 6483 {
6443 bool all_valid = false; 6484 bool all_valid = false;
6444 if (gSelectMgr) 6485 if (LLSelectMgr::getInstance())
6445 { 6486 {
6446 all_valid = true; 6487 all_valid = true;
6447#ifndef HACKED_GODLIKE_VIEWER 6488#ifndef HACKED_GODLIKE_VIEWER
@@ -6458,7 +6499,7 @@ class LLToolsEnableTakeCopy : public view_listener_t
6458 } 6499 }
6459 } func; 6500 } func;
6460 const bool firstonly = true; 6501 const bool firstonly = true;
6461 bool any_invalid = gSelectMgr->getSelection()->applyToRootObjects(&func, firstonly); 6502 bool any_invalid = LLSelectMgr::getInstance()->getSelection()->applyToRootObjects(&func, firstonly);
6462 all_valid = !any_invalid; 6503 all_valid = !any_invalid;
6463 } 6504 }
6464#endif // HACKED_GODLIKE_VIEWER 6505#endif // HACKED_GODLIKE_VIEWER
@@ -6471,7 +6512,7 @@ class LLToolsEnableTakeCopy : public view_listener_t
6471 6512
6472BOOL enable_selection_you_own_all(void*) 6513BOOL enable_selection_you_own_all(void*)
6473{ 6514{
6474 if (gSelectMgr) 6515 if (LLSelectMgr::getInstance())
6475 { 6516 {
6476 struct f : public LLSelectedObjectFunctor 6517 struct f : public LLSelectedObjectFunctor
6477 { 6518 {
@@ -6481,7 +6522,7 @@ BOOL enable_selection_you_own_all(void*)
6481 } 6522 }
6482 } func; 6523 } func;
6483 const bool firstonly = true; 6524 const bool firstonly = true;
6484 bool no_perms = gSelectMgr->getSelection()->applyToRootObjects(&func, firstonly); 6525 bool no_perms = LLSelectMgr::getInstance()->getSelection()->applyToRootObjects(&func, firstonly);
6485 if (no_perms) 6526 if (no_perms)
6486 { 6527 {
6487 return FALSE; 6528 return FALSE;
@@ -6492,7 +6533,7 @@ BOOL enable_selection_you_own_all(void*)
6492 6533
6493BOOL enable_selection_you_own_one(void*) 6534BOOL enable_selection_you_own_one(void*)
6494{ 6535{
6495 if (gSelectMgr) 6536 if (LLSelectMgr::getInstance())
6496 { 6537 {
6497 struct f : public LLSelectedObjectFunctor 6538 struct f : public LLSelectedObjectFunctor
6498 { 6539 {
@@ -6502,7 +6543,7 @@ BOOL enable_selection_you_own_one(void*)
6502 } 6543 }
6503 } func; 6544 } func;
6504 const bool firstonly = true; 6545 const bool firstonly = true;
6505 bool any_perms = gSelectMgr->getSelection()->applyToRootObjects(&func, firstonly); 6546 bool any_perms = LLSelectMgr::getInstance()->getSelection()->applyToRootObjects(&func, firstonly);
6506 if (!any_perms) 6547 if (!any_perms)
6507 { 6548 {
6508 return FALSE; 6549 return FALSE;
@@ -6537,40 +6578,37 @@ bool LLHasAsset::operator()(LLInventoryCategory* cat,
6537 6578
6538BOOL enable_save_into_inventory(void*) 6579BOOL enable_save_into_inventory(void*)
6539{ 6580{
6540 if(gSelectMgr) 6581 // *TODO: clean this up
6582 // find the last root
6583 LLSelectNode* last_node = NULL;
6584 for (LLObjectSelection::root_iterator iter = LLSelectMgr::getInstance()->getSelection()->root_begin();
6585 iter != LLSelectMgr::getInstance()->getSelection()->root_end(); iter++)
6541 { 6586 {
6542 // *TODO: clean this up 6587 last_node = *iter;
6543 // find the last root 6588 }
6544 LLSelectNode* last_node = NULL;
6545 for (LLObjectSelection::root_iterator iter = gSelectMgr->getSelection()->root_begin();
6546 iter != gSelectMgr->getSelection()->root_end(); iter++)
6547 {
6548 last_node = *iter;
6549 }
6550 6589
6551#ifdef HACKED_GODLIKE_VIEWER 6590#ifdef HACKED_GODLIKE_VIEWER
6552 return TRUE; 6591 return TRUE;
6553#else 6592#else
6554# ifdef TOGGLE_HACKED_GODLIKE_VIEWER 6593# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
6555 if (!LLAppViewer::instance()->isInProductionGrid() 6594 if (!LLAppViewer::instance()->isInProductionGrid()
6556 && gAgent.isGodlike()) 6595 && gAgent.isGodlike())
6557 { 6596 {
6558 return TRUE; 6597 return TRUE;
6559 } 6598 }
6560# endif 6599# endif
6561 // check all pre-req's for save into inventory. 6600 // check all pre-req's for save into inventory.
6562 if(last_node && last_node->mValid && !last_node->mItemID.isNull() 6601 if(last_node && last_node->mValid && !last_node->mItemID.isNull()
6563 && (last_node->mPermissions->getOwner() == gAgent.getID()) 6602 && (last_node->mPermissions->getOwner() == gAgent.getID())
6564 && (gInventory.getItem(last_node->mItemID) != NULL)) 6603 && (gInventory.getItem(last_node->mItemID) != NULL))
6604 {
6605 LLViewerObject* obj = last_node->getObject();
6606 if( obj && !obj->isAttachment() )
6565 { 6607 {
6566 LLViewerObject* obj = last_node->getObject(); 6608 return TRUE;
6567 if( obj && !obj->isAttachment() )
6568 {
6569 return TRUE;
6570 }
6571 } 6609 }
6572#endif
6573 } 6610 }
6611#endif
6574 return FALSE; 6612 return FALSE;
6575} 6613}
6576 6614
@@ -6586,17 +6624,14 @@ class LLToolsEnableSaveToInventory : public view_listener_t
6586 6624
6587BOOL enable_save_into_task_inventory(void*) 6625BOOL enable_save_into_task_inventory(void*)
6588{ 6626{
6589 if(gSelectMgr) 6627 LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode();
6628 if(node && (node->mValid) && (!node->mFromTaskID.isNull()))
6590 { 6629 {
6591 LLSelectNode* node = gSelectMgr->getSelection()->getFirstRootNode(); 6630 // *TODO: check to see if the fromtaskid object exists.
6592 if(node && (node->mValid) && (!node->mFromTaskID.isNull())) 6631 LLViewerObject* obj = node->getObject();
6632 if( obj && !obj->isAttachment() )
6593 { 6633 {
6594 // *TODO: check to see if the fromtaskid object exists. 6634 return TRUE;
6595 LLViewerObject* obj = node->getObject();
6596 if( obj && !obj->isAttachment() )
6597 {
6598 return TRUE;
6599 }
6600 } 6635 }
6601 } 6636 }
6602 return FALSE; 6637 return FALSE;
@@ -6620,7 +6655,7 @@ BOOL enable_not_thirdperson(void*)
6620 6655
6621BOOL enable_export_selected(void *) 6656BOOL enable_export_selected(void *)
6622{ 6657{
6623 if (gSelectMgr->getSelection()->isEmpty()) 6658 if (LLSelectMgr::getInstance()->getSelection()->isEmpty())
6624 { 6659 {
6625 return FALSE; 6660 return FALSE;
6626 } 6661 }
@@ -6651,7 +6686,7 @@ class LLToolsEnableToolNotPie : public view_listener_t
6651{ 6686{
6652 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 6687 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
6653 { 6688 {
6654 bool new_value = ( gToolMgr->getBaseTool() != gToolPie ); 6689 bool new_value = ( LLToolMgr::getInstance()->getBaseTool() != LLToolPie::getInstance() );
6655 gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); 6690 gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value);
6656 return true; 6691 return true;
6657 } 6692 }
@@ -6819,11 +6854,11 @@ class LLToolsEditLinkedParts : public view_listener_t
6819 BOOL select_individuals = gSavedSettings.getBOOL("EditLinkedParts"); 6854 BOOL select_individuals = gSavedSettings.getBOOL("EditLinkedParts");
6820 if (select_individuals) 6855 if (select_individuals)
6821 { 6856 {
6822 gSelectMgr->demoteSelectionToIndividuals(); 6857 LLSelectMgr::getInstance()->demoteSelectionToIndividuals();
6823 } 6858 }
6824 else 6859 else
6825 { 6860 {
6826 gSelectMgr->promoteSelectionToRoot(); 6861 LLSelectMgr::getInstance()->promoteSelectionToRoot();
6827 } 6862 }
6828 return true; 6863 return true;
6829 } 6864 }
@@ -7043,17 +7078,17 @@ class LLToolsUseSelectionForGrid : public view_listener_t
7043{ 7078{
7044 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 7079 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
7045 { 7080 {
7046 gSelectMgr->clearGridObjects(); 7081 LLSelectMgr::getInstance()->clearGridObjects();
7047 struct f : public LLSelectedObjectFunctor 7082 struct f : public LLSelectedObjectFunctor
7048 { 7083 {
7049 virtual bool apply(LLViewerObject* objectp) 7084 virtual bool apply(LLViewerObject* objectp)
7050 { 7085 {
7051 gSelectMgr->addGridObject(objectp); 7086 LLSelectMgr::getInstance()->addGridObject(objectp);
7052 return true; 7087 return true;
7053 } 7088 }
7054 } func; 7089 } func;
7055 gSelectMgr->getSelection()->applyToRootObjects(&func); 7090 LLSelectMgr::getInstance()->getSelection()->applyToRootObjects(&func);
7056 gSelectMgr->setGridMode(GRID_MODE_REF_OBJECT); 7091 LLSelectMgr::getInstance()->setGridMode(GRID_MODE_REF_OBJECT);
7057 if (gFloaterTools) 7092 if (gFloaterTools)
7058 { 7093 {
7059 gFloaterTools->mComboGridMode->setCurrentByIndex((S32)GRID_MODE_REF_OBJECT); 7094 gFloaterTools->mComboGridMode->setCurrentByIndex((S32)GRID_MODE_REF_OBJECT);
@@ -7131,7 +7166,7 @@ void handle_save_to_xml(void*)
7131 if (picker.getSaveFile(LLFilePicker::FFSAVE_XML, default_name.c_str())) 7166 if (picker.getSaveFile(LLFilePicker::FFSAVE_XML, default_name.c_str()))
7132 { 7167 {
7133 LLString filename = picker.getFirstFile(); 7168 LLString filename = picker.getFirstFile();
7134 gUICtrlFactory->saveToXML(frontmost, filename); 7169 LLUICtrlFactory::getInstance()->saveToXML(frontmost, filename);
7135 } 7170 }
7136} 7171}
7137 7172
@@ -7142,15 +7177,19 @@ void handle_load_from_xml(void*)
7142 { 7177 {
7143 LLString filename = picker.getFirstFile(); 7178 LLString filename = picker.getFirstFile();
7144 LLFloater* floater = new LLFloater("sample_floater"); 7179 LLFloater* floater = new LLFloater("sample_floater");
7145 gUICtrlFactory->buildFloater(floater, filename); 7180 LLUICtrlFactory::getInstance()->buildFloater(floater, filename);
7146 } 7181 }
7147} 7182}
7148 7183
7149void handle_slurl_test(void*) 7184void handle_slurl_test(void*)
7150{ 7185{
7151 bool open_app_slurls = true; 7186 const bool open_links_externally = false;
7152 bool open_links_externally = false; 7187 const bool open_app_slurls = true;
7153 LLFloaterHtml::getInstance()->show("http://secondlife.com/app/search/slurls.html", "SLURL Test", open_app_slurls, open_links_externally); 7188 LLFloaterHtml::getInstance()->show(
7189 "http://secondlife.com/app/search/slurls.html",
7190 "SLURL Test",
7191 open_links_externally,
7192 open_app_slurls);
7154} 7193}
7155 7194
7156void handle_rebake_textures(void*) 7195void handle_rebake_textures(void*)
@@ -7510,15 +7549,6 @@ class LLWorldChat : public view_listener_t
7510 } 7549 }
7511}; 7550};
7512 7551
7513class LLWorldStartGesture : public view_listener_t
7514{
7515 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
7516 {
7517 handle_slash_key(NULL);
7518 return true;
7519 }
7520};
7521
7522class LLToolsSelectTool : public view_listener_t 7552class LLToolsSelectTool : public view_listener_t
7523{ 7553{
7524 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 7554 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
@@ -7526,23 +7556,23 @@ class LLToolsSelectTool : public view_listener_t
7526 LLString tool_name = userdata.asString(); 7556 LLString tool_name = userdata.asString();
7527 if (tool_name == "focus") 7557 if (tool_name == "focus")
7528 { 7558 {
7529 gToolMgr->getCurrentToolset()->selectToolByIndex(1); 7559 LLToolMgr::getInstance()->getCurrentToolset()->selectToolByIndex(1);
7530 } 7560 }
7531 else if (tool_name == "move") 7561 else if (tool_name == "move")
7532 { 7562 {
7533 gToolMgr->getCurrentToolset()->selectToolByIndex(2); 7563 LLToolMgr::getInstance()->getCurrentToolset()->selectToolByIndex(2);
7534 } 7564 }
7535 else if (tool_name == "edit") 7565 else if (tool_name == "edit")
7536 { 7566 {
7537 gToolMgr->getCurrentToolset()->selectToolByIndex(3); 7567 LLToolMgr::getInstance()->getCurrentToolset()->selectToolByIndex(3);
7538 } 7568 }
7539 else if (tool_name == "create") 7569 else if (tool_name == "create")
7540 { 7570 {
7541 gToolMgr->getCurrentToolset()->selectToolByIndex(4); 7571 LLToolMgr::getInstance()->getCurrentToolset()->selectToolByIndex(4);
7542 } 7572 }
7543 else if (tool_name == "land") 7573 else if (tool_name == "land")
7544 { 7574 {
7545 gToolMgr->getCurrentToolset()->selectToolByIndex(5); 7575 LLToolMgr::getInstance()->getCurrentToolset()->selectToolByIndex(5);
7546 } 7576 }
7547 return true; 7577 return true;
7548 } 7578 }
@@ -7706,6 +7736,7 @@ void initialize_menus()
7706 // View menu 7736 // View menu
7707 addMenu(new LLViewMouselook(), "View.Mouselook"); 7737 addMenu(new LLViewMouselook(), "View.Mouselook");
7708 addMenu(new LLViewBuildMode(), "View.BuildMode"); 7738 addMenu(new LLViewBuildMode(), "View.BuildMode");
7739 addMenu(new LLViewJoystickFlycam(), "View.JoystickFlycam");
7709 addMenu(new LLViewResetView(), "View.ResetView"); 7740 addMenu(new LLViewResetView(), "View.ResetView");
7710 addMenu(new LLViewLookAtLastChatter(), "View.LookAtLastChatter"); 7741 addMenu(new LLViewLookAtLastChatter(), "View.LookAtLastChatter");
7711 addMenu(new LLViewShowHoverTips(), "View.ShowHoverTips"); 7742 addMenu(new LLViewShowHoverTips(), "View.ShowHoverTips");
@@ -7724,6 +7755,7 @@ void initialize_menus()
7724 addMenu(new LLViewEnableLastChatter(), "View.EnableLastChatter"); 7755 addMenu(new LLViewEnableLastChatter(), "View.EnableLastChatter");
7725 7756
7726 addMenu(new LLViewCheckBuildMode(), "View.CheckBuildMode"); 7757 addMenu(new LLViewCheckBuildMode(), "View.CheckBuildMode");
7758 addMenu(new LLViewCheckJoystickFlycam(), "View.CheckJoystickFlycam");
7727 addMenu(new LLViewCheckShowHoverTips(), "View.CheckShowHoverTips"); 7759 addMenu(new LLViewCheckShowHoverTips(), "View.CheckShowHoverTips");
7728 addMenu(new LLViewCheckHighlightTransparent(), "View.CheckHighlightTransparent"); 7760 addMenu(new LLViewCheckHighlightTransparent(), "View.CheckHighlightTransparent");
7729 addMenu(new LLViewCheckBeaconEnabled(), "View.CheckBeaconEnabled"); 7761 addMenu(new LLViewCheckBeaconEnabled(), "View.CheckBeaconEnabled");
@@ -7732,7 +7764,6 @@ void initialize_menus()
7732 7764
7733 // World menu 7765 // World menu
7734 addMenu(new LLWorldChat(), "World.Chat"); 7766 addMenu(new LLWorldChat(), "World.Chat");
7735 addMenu(new LLWorldStartGesture(), "World.StartGesture");
7736 addMenu(new LLWorldAlwaysRun(), "World.AlwaysRun"); 7767 addMenu(new LLWorldAlwaysRun(), "World.AlwaysRun");
7737 addMenu(new LLWorldFly(), "World.Fly"); 7768 addMenu(new LLWorldFly(), "World.Fly");
7738 addMenu(new LLWorldCreateLandmark(), "World.CreateLandmark"); 7769 addMenu(new LLWorldCreateLandmark(), "World.CreateLandmark");
@@ -7785,7 +7816,6 @@ void initialize_menus()
7785 addMenu(new LLToolsVisibleTakeObject(), "Tools.VisibleTakeObject");*/ 7816 addMenu(new LLToolsVisibleTakeObject(), "Tools.VisibleTakeObject");*/
7786 7817
7787 // Help menu 7818 // Help menu
7788 addMenu(new LLHelpMOTD(), "Help.MOTD");
7789 // most items use the ShowFloater method 7819 // most items use the ShowFloater method
7790 7820
7791 // Self pie menu 7821 // Self pie menu
diff --git a/linden/indra/newview/llviewermenu.h b/linden/indra/newview/llviewermenu.h
index 5565c7f..384c1cc 100644
--- a/linden/indra/newview/llviewermenu.h
+++ b/linden/indra/newview/llviewermenu.h
@@ -102,6 +102,7 @@ void handle_sit_down(void*);
102bool toggle_build_mode(); 102bool toggle_build_mode();
103void handle_object_build(void*); 103void handle_object_build(void*);
104void handle_save_snapshot(void *); 104void handle_save_snapshot(void *);
105void handle_toggle_flycam();
105 106
106bool handle_sit_or_stand(); 107bool handle_sit_or_stand();
107bool handle_give_money_dialog(); 108bool handle_give_money_dialog();
diff --git a/linden/indra/newview/llviewermenufile.cpp b/linden/indra/newview/llviewermenufile.cpp
index a4c55f7..ab77b53 100644
--- a/linden/indra/newview/llviewermenufile.cpp
+++ b/linden/indra/newview/llviewermenufile.cpp
@@ -46,7 +46,7 @@
46#include "llstatusbar.h" 46#include "llstatusbar.h"
47#include "llviewercontrol.h" // gSavedSettings 47#include "llviewercontrol.h" // gSavedSettings
48#include "llviewerimagelist.h" 48#include "llviewerimagelist.h"
49#include "llvieweruictrlfactory.h" 49#include "lluictrlfactory.h"
50#include "llviewermenu.h" // gMenuHolder 50#include "llviewermenu.h" // gMenuHolder
51#include "llviewerregion.h" 51#include "llviewerregion.h"
52#include "llviewerstats.h" 52#include "llviewerstats.h"
@@ -86,7 +86,7 @@ class LLFileEnableUpload : public view_listener_t
86{ 86{
87 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 87 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
88 { 88 {
89 bool new_value = gStatusBar && gGlobalEconomy && (gStatusBar->getBalance() >= gGlobalEconomy->getPriceUpload()); 89 bool new_value = gStatusBar && LLGlobalEconomy::Singleton::getInstance() && (gStatusBar->getBalance() >= LLGlobalEconomy::Singleton::getInstance()->getPriceUpload());
90 gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); 90 gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value);
91 return true; 91 return true;
92 } 92 }
@@ -218,7 +218,7 @@ class LLFileUploadImage : public view_listener_t
218 if (filename) 218 if (filename)
219 { 219 {
220 LLFloaterImagePreview* floaterp = new LLFloaterImagePreview(filename); 220 LLFloaterImagePreview* floaterp = new LLFloaterImagePreview(filename);
221 gUICtrlFactory->buildFloater(floaterp, "floater_image_preview.xml"); 221 LLUICtrlFactory::getInstance()->buildFloater(floaterp, "floater_image_preview.xml");
222 } 222 }
223 return TRUE; 223 return TRUE;
224 } 224 }
@@ -232,7 +232,7 @@ class LLFileUploadSound : public view_listener_t
232 if (filename) 232 if (filename)
233 { 233 {
234 LLFloaterNameDesc* floaterp = new LLFloaterNameDesc(filename); 234 LLFloaterNameDesc* floaterp = new LLFloaterNameDesc(filename);
235 gUICtrlFactory->buildFloater(floaterp, "floater_sound_preview.xml"); 235 LLUICtrlFactory::getInstance()->buildFloater(floaterp, "floater_sound_preview.xml");
236 } 236 }
237 return true; 237 return true;
238 } 238 }
@@ -246,7 +246,7 @@ class LLFileUploadAnim : public view_listener_t
246 if (filename) 246 if (filename)
247 { 247 {
248 LLFloaterAnimPreview* floaterp = new LLFloaterAnimPreview(filename); 248 LLFloaterAnimPreview* floaterp = new LLFloaterAnimPreview(filename);
249 gUICtrlFactory->buildFloater(floaterp, "floater_animation_preview.xml"); 249 LLUICtrlFactory::getInstance()->buildFloater(floaterp, "floater_animation_preview.xml");
250 } 250 }
251 return true; 251 return true;
252 } 252 }
@@ -414,15 +414,6 @@ class LLFileTakeSnapshotToDisk : public view_listener_t
414 } 414 }
415}; 415};
416 416
417class LLFileSaveMovie : public view_listener_t
418{
419 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
420 {
421 LLViewerWindow::saveMovieNumbered(NULL);
422 return true;
423 }
424};
425
426class LLFileSetWindowSize : public view_listener_t 417class LLFileSetWindowSize : public view_listener_t
427{ 418{
428 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 419 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
@@ -450,7 +441,7 @@ void handle_upload(void* data)
450 if (filename) 441 if (filename)
451 { 442 {
452 LLFloaterNameDesc* floaterp = new LLFloaterNameDesc(filename); 443 LLFloaterNameDesc* floaterp = new LLFloaterNameDesc(filename);
453 gUICtrlFactory->buildFloater(floaterp, "floater_name_description.xml"); 444 LLUICtrlFactory::getInstance()->buildFloater(floaterp, "floater_name_description.xml");
454 } 445 }
455} 446}
456 447
@@ -808,7 +799,7 @@ void upload_done_callback(const LLUUID& uuid, void* user_data, S32 result, LLExt
808 { 799 {
809 // Charge the user for the upload. 800 // Charge the user for the upload.
810 LLViewerRegion* region = gAgent.getRegion(); 801 LLViewerRegion* region = gAgent.getRegion();
811 S32 upload_cost = gGlobalEconomy->getPriceUpload(); 802 S32 upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
812 803
813 if(!(can_afford_transaction(upload_cost))) 804 if(!(can_afford_transaction(upload_cost)))
814 { 805 {
@@ -920,17 +911,17 @@ void upload_new_resource(const LLTransactionID &tid, LLAssetType::EType asset_ty
920 911
921 if( LLAssetType::AT_SOUND == asset_type ) 912 if( LLAssetType::AT_SOUND == asset_type )
922 { 913 {
923 gViewerStats->incStat(LLViewerStats::ST_UPLOAD_SOUND_COUNT ); 914 LLViewerStats::getInstance()->incStat(LLViewerStats::ST_UPLOAD_SOUND_COUNT );
924 } 915 }
925 else 916 else
926 if( LLAssetType::AT_TEXTURE == asset_type ) 917 if( LLAssetType::AT_TEXTURE == asset_type )
927 { 918 {
928 gViewerStats->incStat(LLViewerStats::ST_UPLOAD_TEXTURE_COUNT ); 919 LLViewerStats::getInstance()->incStat(LLViewerStats::ST_UPLOAD_TEXTURE_COUNT );
929 } 920 }
930 else 921 else
931 if( LLAssetType::AT_ANIMATION == asset_type) 922 if( LLAssetType::AT_ANIMATION == asset_type)
932 { 923 {
933 gViewerStats->incStat(LLViewerStats::ST_UPLOAD_ANIM_COUNT ); 924 LLViewerStats::getInstance()->incStat(LLViewerStats::ST_UPLOAD_ANIM_COUNT );
934 } 925 }
935 926
936 if(LLInventoryType::IT_NONE == inv_type) 927 if(LLInventoryType::IT_NONE == inv_type)
@@ -985,7 +976,7 @@ void upload_new_resource(const LLTransactionID &tid, LLAssetType::EType asset_ty
985 LLAssetType::AT_TEXTURE == asset_type || 976 LLAssetType::AT_TEXTURE == asset_type ||
986 LLAssetType::AT_ANIMATION == asset_type) 977 LLAssetType::AT_ANIMATION == asset_type)
987 { 978 {
988 S32 upload_cost = gGlobalEconomy->getPriceUpload(); 979 S32 upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
989 S32 balance = gStatusBar->getBalance(); 980 S32 balance = gStatusBar->getBalance();
990 if (balance < upload_cost) 981 if (balance < upload_cost)
991 { 982 {
@@ -1033,7 +1024,6 @@ void init_menu_file()
1033 (new LLFileSaveTexture())->registerListener(gMenuHolder, "File.SaveTexture"); 1024 (new LLFileSaveTexture())->registerListener(gMenuHolder, "File.SaveTexture");
1034 (new LLFileTakeSnapshot())->registerListener(gMenuHolder, "File.TakeSnapshot"); 1025 (new LLFileTakeSnapshot())->registerListener(gMenuHolder, "File.TakeSnapshot");
1035 (new LLFileTakeSnapshotToDisk())->registerListener(gMenuHolder, "File.TakeSnapshotToDisk"); 1026 (new LLFileTakeSnapshotToDisk())->registerListener(gMenuHolder, "File.TakeSnapshotToDisk");
1036 (new LLFileSaveMovie())->registerListener(gMenuHolder, "File.SaveMovie");
1037 (new LLFileSetWindowSize())->registerListener(gMenuHolder, "File.SetWindowSize"); 1027 (new LLFileSetWindowSize())->registerListener(gMenuHolder, "File.SetWindowSize");
1038 (new LLFileQuit())->registerListener(gMenuHolder, "File.Quit"); 1028 (new LLFileQuit())->registerListener(gMenuHolder, "File.Quit");
1039 1029
diff --git a/linden/indra/newview/llviewermessage.cpp b/linden/indra/newview/llviewermessage.cpp
index 37bd350..592ef39 100644
--- a/linden/indra/newview/llviewermessage.cpp
+++ b/linden/indra/newview/llviewermessage.cpp
@@ -36,7 +36,6 @@
36#include <deque> 36#include <deque>
37 37
38#include "audioengine.h" 38#include "audioengine.h"
39#include "audiosettings.h"
40#include "indra_constants.h" 39#include "indra_constants.h"
41#include "lscript_byteformat.h" 40#include "lscript_byteformat.h"
42#include "mean_collision_data.h" 41#include "mean_collision_data.h"
@@ -68,6 +67,7 @@
68#include "llagent.h" 67#include "llagent.h"
69#include "llcallingcard.h" 68#include "llcallingcard.h"
70#include "llconsole.h" 69#include "llconsole.h"
70#include "llvieweraudio.h"
71#include "llviewercontrol.h" 71#include "llviewercontrol.h"
72#include "lldrawpool.h" 72#include "lldrawpool.h"
73#include "llfirstuse.h" 73#include "llfirstuse.h"
@@ -81,6 +81,7 @@
81#include "llfloaterregioninfo.h" 81#include "llfloaterregioninfo.h"
82#include "llfloaterlandholdings.h" 82#include "llfloaterlandholdings.h"
83#include "llfloatermap.h" 83#include "llfloatermap.h"
84#include "llurldispatcher.h"
84#include "llfloatermute.h" 85#include "llfloatermute.h"
85#include "llfloaterpostcard.h" 86#include "llfloaterpostcard.h"
86#include "llfloaterpreference.h" 87#include "llfloaterpreference.h"
@@ -284,8 +285,7 @@ void process_logout_reply(LLMessageSystem* msg, void**)
284 285
285void process_layer_data(LLMessageSystem *mesgsys, void **user_data) 286void process_layer_data(LLMessageSystem *mesgsys, void **user_data)
286{ 287{
287 if(!gWorldp) return; 288 LLViewerRegion *regionp = LLWorld::getInstance()->getRegion(mesgsys->getSender());
288 LLViewerRegion *regionp = gWorldp->getRegion(mesgsys->getSender());
289 289
290 if (!regionp || gNoRender) 290 if (!regionp || gNoRender)
291 { 291 {
@@ -912,10 +912,10 @@ void inventory_offer_mute_callback(const LLUUID& blocked_id,
912 } 912 }
913 913
914 LLMute mute(blocked_id, from_name, type); 914 LLMute mute(blocked_id, from_name, type);
915 if (gMuteListp->add(mute)) 915 if (LLMuteList::getInstance()->add(mute))
916 { 916 {
917 LLFloaterMute::showInstance(); 917 LLFloaterMute::showInstance();
918 gFloaterMute->selectMute(blocked_id); 918 LLFloaterMute::getInstance()->selectMute(blocked_id);
919 } 919 }
920 920
921 // purge the message queue of any previously queued inventory offers from the same source. 921 // purge the message queue of any previously queued inventory offers from the same source.
@@ -1100,7 +1100,7 @@ void inventory_offer_callback(S32 button, void* user_data)
1100 1100
1101 log_message = "You decline " + info->mDesc + " from " + info->mFromName + "."; 1101 log_message = "You decline " + info->mDesc + " from " + info->mFromName + ".";
1102 chat.mText = log_message; 1102 chat.mText = log_message;
1103 if( gMuteListp->isMuted(info->mFromID ) && ! gMuteListp->isLinden(info->mFromName) ) // muting for SL-42269 1103 if( LLMuteList::getInstance()->isMuted(info->mFromID ) && ! LLMuteList::getInstance()->isLinden(info->mFromName) ) // muting for SL-42269
1104 { 1104 {
1105 chat.mMuted = TRUE; 1105 chat.mMuted = TRUE;
1106 } 1106 }
@@ -1159,7 +1159,7 @@ void inventory_offer_handler(LLOfferInfo* info, BOOL from_task)
1159 } 1159 }
1160 1160
1161 //If muted, don't even go through the messaging stuff. Just curtail the offer here. 1161 //If muted, don't even go through the messaging stuff. Just curtail the offer here.
1162 if (gMuteListp->isMuted(info->mFromID, info->mFromName)) 1162 if (LLMuteList::getInstance()->isMuted(info->mFromID, info->mFromName))
1163 { 1163 {
1164 inventory_offer_callback(IOR_MUTE, info); 1164 inventory_offer_callback(IOR_MUTE, info);
1165 return; 1165 return;
@@ -1351,13 +1351,14 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1351 time_t timestamp = (time_t)t; 1351 time_t timestamp = (time_t)t;
1352 1352
1353 BOOL is_busy = gAgent.getBusy(); 1353 BOOL is_busy = gAgent.getBusy();
1354 BOOL is_muted = gMuteListp->isMuted(from_id, name, LLMute::flagTextChat); 1354 BOOL is_muted = LLMuteList::getInstance()->isMuted(from_id, name, LLMute::flagTextChat);
1355 BOOL is_linden = gMuteListp->isLinden(name); 1355 BOOL is_linden = LLMuteList::getInstance()->isLinden(name);
1356 BOOL is_owned_by_me = FALSE; 1356 BOOL is_owned_by_me = FALSE;
1357 1357
1358 chat.mMuted = is_muted && !is_linden; 1358 chat.mMuted = is_muted && !is_linden;
1359 chat.mFromID = from_id; 1359 chat.mFromID = from_id;
1360 chat.mFromName = name; 1360 chat.mFromName = name;
1361 chat.mSourceType = (from_id.isNull() || !strcmp(name, SYSTEM_FROM)) ? CHAT_SOURCE_SYSTEM : CHAT_SOURCE_AGENT;
1361 1362
1362 LLViewerObject *source = gObjectList.findObject(session_id); //Session ID is probably the wrong thing. 1363 LLViewerObject *source = gObjectList.findObject(session_id); //Session ID is probably the wrong thing.
1363 if (source) 1364 if (source)
@@ -1448,7 +1449,8 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1448 } 1449 }
1449 else if (from_id.isNull()) 1450 else if (from_id.isNull())
1450 { 1451 {
1451 // Messages from "Second Life" don't go to IM history 1452 // Messages from "Second Life" ID don't go to IM history
1453 // messages which should be routed to IM window come from a user ID with name=SYSTEM_NAME
1452 snprintf(buffer, sizeof(buffer), "%s: %s", name, message); /* Flawfinder: ignore */ 1454 snprintf(buffer, sizeof(buffer), "%s: %s", name, message); /* Flawfinder: ignore */
1453 chat.mText = buffer; 1455 chat.mText = buffer;
1454 LLFloaterChat::addChat(chat, FALSE, FALSE); 1456 LLFloaterChat::addChat(chat, FALSE, FALSE);
@@ -2099,7 +2101,7 @@ void process_offer_callingcard(LLMessageSystem* msg, void**)
2099 if(!source_name.empty()) 2101 if(!source_name.empty())
2100 { 2102 {
2101 if (gAgent.getBusy() 2103 if (gAgent.getBusy()
2102 || gMuteListp->isMuted(source_id, source_name, LLMute::flagTextChat)) 2104 || LLMuteList::getInstance()->isMuted(source_id, source_name, LLMute::flagTextChat))
2103 { 2105 {
2104 // automatically decline offer 2106 // automatically decline offer
2105 callingcard_offer_callback(1, (void*)offerdata); 2107 callingcard_offer_callback(1, (void*)offerdata);
@@ -2169,20 +2171,15 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
2169 BOOL is_self = (from_id == gAgent.getID()); 2171 BOOL is_self = (from_id == gAgent.getID());
2170 BOOL is_busy = gAgent.getBusy(); 2172 BOOL is_busy = gAgent.getBusy();
2171 2173
2172 // Apparently you can receive chat before app is fully initialized, hence
2173 // gMuteListp can be null. JC
2174 BOOL is_muted = FALSE; 2174 BOOL is_muted = FALSE;
2175 BOOL is_linden = FALSE; 2175 BOOL is_linden = FALSE;
2176 if (gMuteListp) 2176 is_muted = LLMuteList::getInstance()->isMuted(
2177 { 2177 from_id,
2178 is_muted = gMuteListp->isMuted( 2178 from_name,
2179 from_id, 2179 LLMute::flagTextChat)
2180 from_name, 2180 || LLMuteList::getInstance()->isMuted(owner_id, LLMute::flagTextChat);
2181 LLMute::flagTextChat) 2181 is_linden = chat.mSourceType != CHAT_SOURCE_OBJECT &&
2182 || gMuteListp->isMuted(owner_id, LLMute::flagTextChat); 2182 LLMuteList::getInstance()->isLinden(from_name);
2183 is_linden = chat.mSourceType != CHAT_SOURCE_OBJECT &&
2184 gMuteListp->isLinden(from_name);
2185 }
2186 2183
2187 BOOL is_audible = (CHAT_AUDIBLE_FULLY == chat.mAudible); 2184 BOOL is_audible = (CHAT_AUDIBLE_FULLY == chat.mAudible);
2188 chatter = gObjectList.findObject(from_id); 2185 chatter = gObjectList.findObject(from_id);
@@ -2200,7 +2197,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
2200 //We set the particles to be owned by the object's owner, 2197 //We set the particles to be owned by the object's owner,
2201 //just in case they should be muted by the mute list 2198 //just in case they should be muted by the mute list
2202 psc->setOwnerUUID(owner_id); 2199 psc->setOwnerUUID(owner_id);
2203 gWorldPointer->mPartSim.addPartSource(psc); 2200 LLViewerPartSim::getInstance()->addPartSource(psc);
2204 } 2201 }
2205 2202
2206 // record last audible utterance 2203 // record last audible utterance
@@ -2242,7 +2239,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
2242 // Look for the start of typing so we can put "..." in the bubbles. 2239 // Look for the start of typing so we can put "..." in the bubbles.
2243 if (CHAT_TYPE_START == chat.mChatType) 2240 if (CHAT_TYPE_START == chat.mChatType)
2244 { 2241 {
2245 gLocalSpeakerMgr->setSpeakerTyping(from_id, TRUE); 2242 LLLocalSpeakerMgr::getInstance()->setSpeakerTyping(from_id, TRUE);
2246 2243
2247 // Might not have the avatar constructed yet, eg on login. 2244 // Might not have the avatar constructed yet, eg on login.
2248 if (chatter && chatter->isAvatar()) 2245 if (chatter && chatter->isAvatar())
@@ -2253,7 +2250,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
2253 } 2250 }
2254 else if (CHAT_TYPE_STOP == chat.mChatType) 2251 else if (CHAT_TYPE_STOP == chat.mChatType)
2255 { 2252 {
2256 gLocalSpeakerMgr->setSpeakerTyping(from_id, FALSE); 2253 LLLocalSpeakerMgr::getInstance()->setSpeakerTyping(from_id, FALSE);
2257 2254
2258 // Might not have the avatar constructed yet, eg on login. 2255 // Might not have the avatar constructed yet, eg on login.
2259 if (chatter && chatter->isAvatar()) 2256 if (chatter && chatter->isAvatar())
@@ -2266,7 +2263,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
2266 // We have a real utterance now, so can stop showing "..." and proceed. 2263 // We have a real utterance now, so can stop showing "..." and proceed.
2267 if (chatter && chatter->isAvatar()) 2264 if (chatter && chatter->isAvatar())
2268 { 2265 {
2269 gLocalSpeakerMgr->setSpeakerTyping(from_id, FALSE); 2266 LLLocalSpeakerMgr::getInstance()->setSpeakerTyping(from_id, FALSE);
2270 ((LLVOAvatar*)chatter)->stopTyping(); 2267 ((LLVOAvatar*)chatter)->stopTyping();
2271 2268
2272 if (!is_muted && !is_busy) 2269 if (!is_muted && !is_busy)
@@ -2558,10 +2555,10 @@ void process_teleport_finish(LLMessageSystem* msg, void**)
2558 2555
2559 // Do teleport effect for where you're leaving 2556 // Do teleport effect for where you're leaving
2560 // VEFFECT: TeleportStart 2557 // VEFFECT: TeleportStart
2561 LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)gHUDManager->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINT, TRUE); 2558 LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINT, TRUE);
2562 effectp->setPositionGlobal(gAgent.getPositionGlobal()); 2559 effectp->setPositionGlobal(gAgent.getPositionGlobal());
2563 effectp->setColor(LLColor4U(gAgent.getEffectColor())); 2560 effectp->setColor(LLColor4U(gAgent.getEffectColor()));
2564 gHUDManager->sendEffects(); 2561 LLHUDManager::getInstance()->sendEffects();
2565 2562
2566 U32 location_id; 2563 U32 location_id;
2567 U32 sim_ip; 2564 U32 sim_ip;
@@ -2597,8 +2594,7 @@ void process_teleport_finish(LLMessageSystem* msg, void**)
2597 2594
2598 // Viewer trusts the simulator. 2595 // Viewer trusts the simulator.
2599 gMessageSystem->enableCircuit(sim_host, TRUE); 2596 gMessageSystem->enableCircuit(sim_host, TRUE);
2600 if(!gWorldp) return; 2597 LLViewerRegion* regionp = LLWorld::getInstance()->addRegion(region_handle, sim_host);
2601 LLViewerRegion* regionp = gWorldp->addRegion(region_handle, sim_host);
2602 2598
2603/* 2599/*
2604 // send camera update to new region 2600 // send camera update to new region
@@ -2642,11 +2638,11 @@ void process_teleport_finish(LLMessageSystem* msg, void**)
2642 2638
2643 // Now do teleport effect for where you're going. 2639 // Now do teleport effect for where you're going.
2644 // VEFFECT: TeleportEnd 2640 // VEFFECT: TeleportEnd
2645 effectp = (LLHUDEffectSpiral *)gHUDManager->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINT, TRUE); 2641 effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINT, TRUE);
2646 effectp->setPositionGlobal(gAgent.getPositionGlobal()); 2642 effectp->setPositionGlobal(gAgent.getPositionGlobal());
2647 2643
2648 effectp->setColor(LLColor4U(gAgent.getEffectColor())); 2644 effectp->setColor(LLColor4U(gAgent.getEffectColor()));
2649 gHUDManager->sendEffects(); 2645 LLHUDManager::getInstance()->sendEffects();
2650 2646
2651// gTeleportDisplay = TRUE; 2647// gTeleportDisplay = TRUE;
2652// gTeleportDisplayTimer.reset(); 2648// gTeleportDisplayTimer.reset();
@@ -2712,8 +2708,7 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
2712 2708
2713 F32 x, y; 2709 F32 x, y;
2714 from_region_handle(region_handle, &x, &y); 2710 from_region_handle(region_handle, &x, &y);
2715 if(!gWorldp) return; 2711 LLViewerRegion* regionp = LLWorld::getInstance()->getRegionFromHandle(region_handle);
2716 LLViewerRegion* regionp = gWorldp->getRegionFromHandle(region_handle);
2717 if (!regionp) 2712 if (!regionp)
2718 { 2713 {
2719 if (gAgent.getRegion()) 2714 if (gAgent.getRegion())
@@ -2833,13 +2828,8 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
2833 avatarp->mFootPlane.clearVec(); 2828 avatarp->mFootPlane.clearVec();
2834 } 2829 }
2835 2830
2836 // reset always run status 2831 // send walk-vs-run status
2837 msg->newMessageFast(_PREHASH_SetAlwaysRun); 2832 gAgent.sendWalkRun(gAgent.getRunning() || gAgent.getAlwaysRun());
2838 msg->nextBlockFast(_PREHASH_AgentData);
2839 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
2840 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
2841 msg->addBOOLFast(_PREHASH_AlwaysRun, gAgent.getAlwaysRun());
2842 gAgent.sendReliableMessage();
2843 2833
2844 if (LLFloaterReleaseMsg::checkVersion(version_channel_char)) 2834 if (LLFloaterReleaseMsg::checkVersion(version_channel_char))
2845 { 2835 {
@@ -2874,8 +2864,7 @@ void process_crossed_region(LLMessageSystem* msg, void**)
2874 2864
2875 send_complete_agent_movement(sim_host); 2865 send_complete_agent_movement(sim_host);
2876 2866
2877 if(!gWorldp) return; 2867 LLViewerRegion* regionp = LLWorld::getInstance()->addRegion(region_handle, sim_host);
2878 LLViewerRegion* regionp = gWorldp->addRegion(region_handle, sim_host);
2879 regionp->setSeedCapability(std::string(seedCap)); 2868 regionp->setSeedCapability(std::string(seedCap));
2880} 2869}
2881 2870
@@ -2904,6 +2893,12 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
2904 return; 2893 return;
2905 } 2894 }
2906 2895
2896 // no region to send update to
2897 if(gAgent.getRegion() == NULL)
2898 {
2899 return;
2900 }
2901
2907 const F32 TRANSLATE_THRESHOLD = 0.01f; 2902 const F32 TRANSLATE_THRESHOLD = 0.01f;
2908 2903
2909 // NOTA BENE: This is (intentionally?) using the small angle sine approximation to test for rotation 2904 // NOTA BENE: This is (intentionally?) using the small angle sine approximation to test for rotation
@@ -2944,7 +2939,7 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
2944 U8 flag_change = 0; 2939 U8 flag_change = 0;
2945 2940
2946 cam_center_chg = last_camera_pos_agent - camera_pos_agent; 2941 cam_center_chg = last_camera_pos_agent - camera_pos_agent;
2947 cam_rot_chg = last_camera_at - gCamera->getAtAxis(); 2942 cam_rot_chg = last_camera_at - LLViewerCamera::getInstance()->getAtAxis();
2948 2943
2949 // If a modifier key is held down, turn off 2944 // If a modifier key is held down, turn off
2950 // LBUTTON and ML_LBUTTON so that using the camera (alt-key) doesn't 2945 // LBUTTON and ML_LBUTTON so that using the camera (alt-key) doesn't
@@ -3052,9 +3047,9 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
3052// } 3047// }
3053 3048
3054 msg->addVector3Fast(_PREHASH_CameraCenter, camera_pos_agent); 3049 msg->addVector3Fast(_PREHASH_CameraCenter, camera_pos_agent);
3055 msg->addVector3Fast(_PREHASH_CameraAtAxis, gCamera->getAtAxis()); 3050 msg->addVector3Fast(_PREHASH_CameraAtAxis, LLViewerCamera::getInstance()->getAtAxis());
3056 msg->addVector3Fast(_PREHASH_CameraLeftAxis, gCamera->getLeftAxis()); 3051 msg->addVector3Fast(_PREHASH_CameraLeftAxis, LLViewerCamera::getInstance()->getLeftAxis());
3057 msg->addVector3Fast(_PREHASH_CameraUpAxis, gCamera->getUpAxis()); 3052 msg->addVector3Fast(_PREHASH_CameraUpAxis, LLViewerCamera::getInstance()->getUpAxis());
3058 msg->addF32Fast(_PREHASH_Far, gAgent.mDrawDistance); 3053 msg->addF32Fast(_PREHASH_Far, gAgent.mDrawDistance);
3059 3054
3060 msg->addU32Fast(_PREHASH_ControlFlags, control_flags); 3055 msg->addU32Fast(_PREHASH_ControlFlags, control_flags);
@@ -3089,9 +3084,9 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
3089 last_head_rot = head_rotation; 3084 last_head_rot = head_rotation;
3090 last_render_state = render_state; 3085 last_render_state = render_state;
3091 last_camera_pos_agent = camera_pos_agent; 3086 last_camera_pos_agent = camera_pos_agent;
3092 last_camera_at = gCamera->getAtAxis(); 3087 last_camera_at = LLViewerCamera::getInstance()->getAtAxis();
3093 last_camera_left = gCamera->getLeftAxis(); 3088 last_camera_left = LLViewerCamera::getInstance()->getLeftAxis();
3094 last_camera_up = gCamera->getUpAxis(); 3089 last_camera_up = LLViewerCamera::getInstance()->getUpAxis();
3095 last_control_flags = control_flags; 3090 last_control_flags = control_flags;
3096 last_flags = flags; 3091 last_flags = flags;
3097 } 3092 }
@@ -3205,7 +3200,7 @@ void process_kill_object(LLMessageSystem *mesgsys, void **user_data)
3205 //llinfos << "Kill message for local " << local_id << llendl; 3200 //llinfos << "Kill message for local " << local_id << llendl;
3206 } 3201 }
3207 3202
3208 gSelectMgr->removeObjectFromSelections(id); 3203 LLSelectMgr::getInstance()->removeObjectFromSelections(id);
3209 3204
3210 // ...don't kill the avatar 3205 // ...don't kill the avatar
3211 if (!(id == gAgentID)) 3206 if (!(id == gAgentID))
@@ -3259,8 +3254,7 @@ void process_time_synch(LLMessageSystem *mesgsys, void **user_data)
3259 mesgsys->getVector3Fast(_PREHASH_TimeInfo, _PREHASH_SunDirection, sun_direction); 3254 mesgsys->getVector3Fast(_PREHASH_TimeInfo, _PREHASH_SunDirection, sun_direction);
3260 mesgsys->getVector3Fast(_PREHASH_TimeInfo, _PREHASH_SunAngVelocity, sun_ang_velocity); 3255 mesgsys->getVector3Fast(_PREHASH_TimeInfo, _PREHASH_SunAngVelocity, sun_ang_velocity);
3261 3256
3262 if(!gWorldp) return; 3257 LLWorld::getInstance()->setSpaceTimeUSec(space_time_usec);
3263 gWorldp->setSpaceTimeUSec(space_time_usec);
3264 3258
3265 //lldebugs << "time_synch() - " << sun_direction << ", " << sun_ang_velocity 3259 //lldebugs << "time_synch() - " << sun_direction << ", " << sun_ang_velocity
3266 // << ", " << phase << llendl; 3260 // << ", " << phase << llendl;
@@ -3276,8 +3270,6 @@ void process_time_synch(LLMessageSystem *mesgsys, void **user_data)
3276void process_sound_trigger(LLMessageSystem *msg, void **) 3270void process_sound_trigger(LLMessageSystem *msg, void **)
3277{ 3271{
3278 if (!gAudiop) return; 3272 if (!gAudiop) return;
3279 if (!gParcelMgr) return;
3280 if (!gMuteListp) return;
3281 3273
3282 U64 region_handle = 0; 3274 U64 region_handle = 0;
3283 F32 gain = 0; 3275 F32 gain = 0;
@@ -3303,17 +3295,17 @@ void process_sound_trigger(LLMessageSystem *msg, void **)
3303 3295
3304 // Don't play a trigger sound if you can't hear it due 3296 // Don't play a trigger sound if you can't hear it due
3305 // to parcel "local audio only" settings. 3297 // to parcel "local audio only" settings.
3306 if (!gParcelMgr->canHearSound(pos_global)) return; 3298 if (!LLViewerParcelMgr::getInstance()->canHearSound(pos_global)) return;
3307 3299
3308 // Don't play sounds triggered by someone you muted. 3300 // Don't play sounds triggered by someone you muted.
3309 if (gMuteListp->isMuted(owner_id, LLMute::flagObjectSounds)) return; 3301 if (LLMuteList::getInstance()->isMuted(owner_id, LLMute::flagObjectSounds)) return;
3310 3302
3311 // Don't play sounds from an object you muted 3303 // Don't play sounds from an object you muted
3312 if (gMuteListp->isMuted(object_id)) return; 3304 if (LLMuteList::getInstance()->isMuted(object_id)) return;
3313 3305
3314 // Don't play sounds from an object whose parent you muted 3306 // Don't play sounds from an object whose parent you muted
3315 if (parent_id.notNull() 3307 if (parent_id.notNull()
3316 && gMuteListp->isMuted(parent_id)) 3308 && LLMuteList::getInstance()->isMuted(parent_id))
3317 { 3309 {
3318 return; 3310 return;
3319 } 3311 }
@@ -3340,8 +3332,8 @@ void process_preload_sound(LLMessageSystem *msg, void **user_data)
3340 LLViewerObject *objectp = gObjectList.findObject(object_id); 3332 LLViewerObject *objectp = gObjectList.findObject(object_id);
3341 if (!objectp) return; 3333 if (!objectp) return;
3342 3334
3343 if (gMuteListp->isMuted(object_id)) return; 3335 if (LLMuteList::getInstance()->isMuted(object_id)) return;
3344 if (gMuteListp->isMuted(owner_id, LLMute::flagObjectSounds)) return; 3336 if (LLMuteList::getInstance()->isMuted(owner_id, LLMute::flagObjectSounds)) return;
3345 3337
3346 LLAudioSource *sourcep = objectp->getAudioSource(owner_id); 3338 LLAudioSource *sourcep = objectp->getAudioSource(owner_id);
3347 if (!sourcep) return; 3339 if (!sourcep) return;
@@ -3377,9 +3369,9 @@ void process_attached_sound(LLMessageSystem *msg, void **user_data)
3377 return; 3369 return;
3378 } 3370 }
3379 3371
3380 if (gMuteListp->isMuted(object_id)) return; 3372 if (LLMuteList::getInstance()->isMuted(object_id)) return;
3381 3373
3382 if (gMuteListp->isMuted(owner_id, LLMute::flagObjectSounds)) return; 3374 if (LLMuteList::getInstance()->isMuted(owner_id, LLMute::flagObjectSounds)) return;
3383 3375
3384 objectp->setAttachedSound(sound_id, owner_id, gain, flags); 3376 objectp->setAttachedSound(sound_id, owner_id, gain, flags);
3385} 3377}
@@ -3430,73 +3422,91 @@ void process_sim_stats(LLMessageSystem *msg, void **user_data)
3430 switch (stat_id) 3422 switch (stat_id)
3431 { 3423 {
3432 case LL_SIM_STAT_TIME_DILATION: 3424 case LL_SIM_STAT_TIME_DILATION:
3433 gViewerStats->mSimTimeDilation.addValue(stat_value); 3425 LLViewerStats::getInstance()->mSimTimeDilation.addValue(stat_value);
3434 break; 3426 break;
3435 case LL_SIM_STAT_FPS: 3427 case LL_SIM_STAT_FPS:
3436 gViewerStats->mSimFPS.addValue(stat_value); 3428 LLViewerStats::getInstance()->mSimFPS.addValue(stat_value);
3437 break; 3429 break;
3438 case LL_SIM_STAT_PHYSFPS: 3430 case LL_SIM_STAT_PHYSFPS:
3439 gViewerStats->mSimPhysicsFPS.addValue(stat_value); 3431 LLViewerStats::getInstance()->mSimPhysicsFPS.addValue(stat_value);
3440 break; 3432 break;
3441 case LL_SIM_STAT_AGENTUPS: 3433 case LL_SIM_STAT_AGENTUPS:
3442 gViewerStats->mSimAgentUPS.addValue(stat_value); 3434 LLViewerStats::getInstance()->mSimAgentUPS.addValue(stat_value);
3443 break; 3435 break;
3444 case LL_SIM_STAT_FRAMEMS: 3436 case LL_SIM_STAT_FRAMEMS:
3445 gViewerStats->mSimFrameMsec.addValue(stat_value); 3437 LLViewerStats::getInstance()->mSimFrameMsec.addValue(stat_value);
3446 break; 3438 break;
3447 case LL_SIM_STAT_NETMS: 3439 case LL_SIM_STAT_NETMS:
3448 gViewerStats->mSimNetMsec.addValue(stat_value); 3440 LLViewerStats::getInstance()->mSimNetMsec.addValue(stat_value);
3449 break; 3441 break;
3450 case LL_SIM_STAT_SIMOTHERMS: 3442 case LL_SIM_STAT_SIMOTHERMS:
3451 gViewerStats->mSimSimOtherMsec.addValue(stat_value); 3443 LLViewerStats::getInstance()->mSimSimOtherMsec.addValue(stat_value);
3452 break; 3444 break;
3453 case LL_SIM_STAT_SIMPHYSICSMS: 3445 case LL_SIM_STAT_SIMPHYSICSMS:
3454 gViewerStats->mSimSimPhysicsMsec.addValue(stat_value); 3446 LLViewerStats::getInstance()->mSimSimPhysicsMsec.addValue(stat_value);
3455 break; 3447 break;
3456 case LL_SIM_STAT_AGENTMS: 3448 case LL_SIM_STAT_AGENTMS:
3457 gViewerStats->mSimAgentMsec.addValue(stat_value); 3449 LLViewerStats::getInstance()->mSimAgentMsec.addValue(stat_value);
3458 break; 3450 break;
3459 case LL_SIM_STAT_IMAGESMS: 3451 case LL_SIM_STAT_IMAGESMS:
3460 gViewerStats->mSimImagesMsec.addValue(stat_value); 3452 LLViewerStats::getInstance()->mSimImagesMsec.addValue(stat_value);
3461 break; 3453 break;
3462 case LL_SIM_STAT_SCRIPTMS: 3454 case LL_SIM_STAT_SCRIPTMS:
3463 gViewerStats->mSimScriptMsec.addValue(stat_value); 3455 LLViewerStats::getInstance()->mSimScriptMsec.addValue(stat_value);
3464 break; 3456 break;
3465 case LL_SIM_STAT_NUMTASKS: 3457 case LL_SIM_STAT_NUMTASKS:
3466 gViewerStats->mSimObjects.addValue(stat_value); 3458 LLViewerStats::getInstance()->mSimObjects.addValue(stat_value);
3467 break; 3459 break;
3468 case LL_SIM_STAT_NUMTASKSACTIVE: 3460 case LL_SIM_STAT_NUMTASKSACTIVE:
3469 gViewerStats->mSimActiveObjects.addValue(stat_value); 3461 LLViewerStats::getInstance()->mSimActiveObjects.addValue(stat_value);
3470 break; 3462 break;
3471 case LL_SIM_STAT_NUMAGENTMAIN: 3463 case LL_SIM_STAT_NUMAGENTMAIN:
3472 gViewerStats->mSimMainAgents.addValue(stat_value); 3464 LLViewerStats::getInstance()->mSimMainAgents.addValue(stat_value);
3473 break; 3465 break;
3474 case LL_SIM_STAT_NUMAGENTCHILD: 3466 case LL_SIM_STAT_NUMAGENTCHILD:
3475 gViewerStats->mSimChildAgents.addValue(stat_value); 3467 LLViewerStats::getInstance()->mSimChildAgents.addValue(stat_value);
3476 break; 3468 break;
3477 case LL_SIM_STAT_NUMSCRIPTSACTIVE: 3469 case LL_SIM_STAT_NUMSCRIPTSACTIVE:
3478 gViewerStats->mSimActiveScripts.addValue(stat_value); 3470 LLViewerStats::getInstance()->mSimActiveScripts.addValue(stat_value);
3479 break; 3471 break;
3480 case LL_SIM_STAT_LSLIPS: 3472 case LL_SIM_STAT_LSLIPS:
3481 gViewerStats->mSimLSLIPS.addValue(stat_value); 3473 LLViewerStats::getInstance()->mSimLSLIPS.addValue(stat_value);
3482 break; 3474 break;
3483 case LL_SIM_STAT_INPPS: 3475 case LL_SIM_STAT_INPPS:
3484 gViewerStats->mSimInPPS.addValue(stat_value); 3476 LLViewerStats::getInstance()->mSimInPPS.addValue(stat_value);
3485 break; 3477 break;
3486 case LL_SIM_STAT_OUTPPS: 3478 case LL_SIM_STAT_OUTPPS:
3487 gViewerStats->mSimOutPPS.addValue(stat_value); 3479 LLViewerStats::getInstance()->mSimOutPPS.addValue(stat_value);
3488 break; 3480 break;
3489 case LL_SIM_STAT_PENDING_DOWNLOADS: 3481 case LL_SIM_STAT_PENDING_DOWNLOADS:
3490 gViewerStats->mSimPendingDownloads.addValue(stat_value); 3482 LLViewerStats::getInstance()->mSimPendingDownloads.addValue(stat_value);
3491 break; 3483 break;
3492 case LL_SIM_STAT_PENDING_UPLOADS: 3484 case LL_SIM_STAT_PENDING_UPLOADS:
3493 gViewerStats->mSimPendingUploads.addValue(stat_value); 3485 LLViewerStats::getInstance()->mSimPendingUploads.addValue(stat_value);
3494 break; 3486 break;
3495 case LL_SIM_STAT_PENDING_LOCAL_UPLOADS: 3487 case LL_SIM_STAT_PENDING_LOCAL_UPLOADS:
3496 gViewerStats->mSimPendingLocalUploads.addValue(stat_value); 3488 LLViewerStats::getInstance()->mSimPendingLocalUploads.addValue(stat_value);
3497 break; 3489 break;
3498 case LL_SIM_STAT_TOTAL_UNACKED_BYTES: 3490 case LL_SIM_STAT_TOTAL_UNACKED_BYTES:
3499 gViewerStats->mSimTotalUnackedBytes.addValue(stat_value / 1024.f); 3491 LLViewerStats::getInstance()->mSimTotalUnackedBytes.addValue(stat_value / 1024.f);
3492 break;
3493 case LL_SIM_STAT_PHYSICS_PINNED_TASKS:
3494 LLViewerStats::getInstance()->mPhysicsPinnedTasks.addValue(stat_value);
3495 break;
3496 case LL_SIM_STAT_PHYSICS_LOD_TASKS:
3497 LLViewerStats::getInstance()->mPhysicsLODTasks.addValue(stat_value);
3498 break;
3499 case LL_SIM_STAT_SIMPHYSICSSTEPMS:
3500 LLViewerStats::getInstance()->mSimSimPhysicsStepMsec.addValue(stat_value);
3501 break;
3502 case LL_SIM_STAT_SIMPHYSICSSHAPEMS:
3503 LLViewerStats::getInstance()->mSimSimPhysicsShapeUpdateMsec.addValue(stat_value);
3504 break;
3505 case LL_SIM_STAT_SIMPHYSICSOTHERMS:
3506 LLViewerStats::getInstance()->mSimSimPhysicsOtherMsec.addValue(stat_value);
3507 break;
3508 case LL_SIM_STAT_SIMPHYSICSMEMORY:
3509 LLViewerStats::getInstance()->mPhysicsMemoryAllocated.addValue(stat_value);
3500 break; 3510 break;
3501 default: 3511 default:
3502// llwarns << "Unknown stat id" << stat_id << llendl; 3512// llwarns << "Unknown stat id" << stat_id << llendl;
@@ -3506,7 +3516,7 @@ void process_sim_stats(LLMessageSystem *msg, void **user_data)
3506 3516
3507 /* 3517 /*
3508 msg->getF32Fast(_PREHASH_Statistics, _PREHASH_PhysicsTimeDilation, time_dilation); 3518 msg->getF32Fast(_PREHASH_Statistics, _PREHASH_PhysicsTimeDilation, time_dilation);
3509 gViewerStats->mSimTDStat.addValue(time_dilation); 3519 LLViewerStats::getInstance()->mSimTDStat.addValue(time_dilation);
3510 3520
3511 // Process information 3521 // Process information
3512 // { CpuUsage F32 } 3522 // { CpuUsage F32 }
@@ -3521,9 +3531,9 @@ void process_sim_stats(LLMessageSystem *msg, void **user_data)
3521 msg->getF32Fast(_PREHASH_Statistics, _PREHASH_SimMemTotal, sim_mem_total); 3531 msg->getF32Fast(_PREHASH_Statistics, _PREHASH_SimMemTotal, sim_mem_total);
3522 msg->getF32Fast(_PREHASH_Statistics, _PREHASH_SimMemRSS, sim_mem_rss); 3532 msg->getF32Fast(_PREHASH_Statistics, _PREHASH_SimMemRSS, sim_mem_rss);
3523 msg->getF32Fast(_PREHASH_Statistics, _PREHASH_ProcessUptime, process_uptime); 3533 msg->getF32Fast(_PREHASH_Statistics, _PREHASH_ProcessUptime, process_uptime);
3524 gViewerStats->mSimCPUUsageStat.addValue(cpu_usage); 3534 LLViewerStats::getInstance()->mSimCPUUsageStat.addValue(cpu_usage);
3525 gViewerStats->mSimMemTotalStat.addValue(sim_mem_total); 3535 LLViewerStats::getInstance()->mSimMemTotalStat.addValue(sim_mem_total);
3526 gViewerStats->mSimMemRSSStat.addValue(sim_mem_rss); 3536 LLViewerStats::getInstance()->mSimMemRSSStat.addValue(sim_mem_rss);
3527 */ 3537 */
3528 3538
3529 // 3539 //
@@ -3951,7 +3961,7 @@ void process_time_dilation(LLMessageSystem *msg, void **user_data)
3951 // get the pointer to the right region 3961 // get the pointer to the right region
3952 U32 ip = msg->getSenderIP(); 3962 U32 ip = msg->getSenderIP();
3953 U32 port = msg->getSenderPort(); 3963 U32 port = msg->getSenderPort();
3954 LLViewerRegion *regionp = gWorldp->getRegion(ip, port); 3964 LLViewerRegion *regionp = LLWorld::getInstance()->getRegion(ip, port);
3955 if (regionp) 3965 if (regionp)
3956 { 3966 {
3957 regionp->setTimeDilation(time_dilation); 3967 regionp->setTimeDilation(time_dilation);
@@ -4051,7 +4061,7 @@ void process_alert_core(const std::string& message, BOOL modal)
4051 // HACK -- handle callbacks for specific alerts 4061 // HACK -- handle callbacks for specific alerts
4052 if ( message == "You died and have been teleported to your home location") 4062 if ( message == "You died and have been teleported to your home location")
4053 { 4063 {
4054 gViewerStats->incStat(LLViewerStats::ST_KILLED_COUNT); 4064 LLViewerStats::getInstance()->incStat(LLViewerStats::ST_KILLED_COUNT);
4055 } 4065 }
4056 else if( message == "Home position set." ) 4066 else if( message == "Home position set." )
4057 { 4067 {
@@ -4059,7 +4069,7 @@ void process_alert_core(const std::string& message, BOOL modal)
4059 LLString snap_filename = gDirUtilp->getLindenUserDir(); 4069 LLString snap_filename = gDirUtilp->getLindenUserDir();
4060 snap_filename += gDirUtilp->getDirDelimiter(); 4070 snap_filename += gDirUtilp->getDirDelimiter();
4061 snap_filename += SCREEN_HOME_FILENAME; 4071 snap_filename += SCREEN_HOME_FILENAME;
4062 gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowWidth(), gViewerWindow->getWindowHeight(), FALSE, FALSE); 4072 gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowDisplayWidth(), gViewerWindow->getWindowDisplayHeight(), FALSE, FALSE);
4063 } 4073 }
4064 4074
4065 const std::string ALERT_PREFIX("ALERT: "); 4075 const std::string ALERT_PREFIX("ALERT: ");
@@ -4239,9 +4249,9 @@ void process_frozen_message(LLMessageSystem *msgsystem, void **user_data)
4239// do some extra stuff once we get our economy data 4249// do some extra stuff once we get our economy data
4240void process_economy_data(LLMessageSystem *msg, void** /*user_data*/) 4250void process_economy_data(LLMessageSystem *msg, void** /*user_data*/)
4241{ 4251{
4242 LLGlobalEconomy::processEconomyData(msg, (void**)gGlobalEconomy); 4252 LLGlobalEconomy::processEconomyData(msg, LLGlobalEconomy::Singleton::getInstance());
4243 4253
4244 S32 upload_cost = gGlobalEconomy->getPriceUpload(); 4254 S32 upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
4245 LLFloaterImagePreview::setUploadAmount(upload_cost); 4255 LLFloaterImagePreview::setUploadAmount(upload_cost);
4246 4256
4247 gMenuHolder->childSetLabelArg("Upload Image", "[COST]", llformat("%d", upload_cost)); 4257 gMenuHolder->childSetLabelArg("Upload Image", "[COST]", llformat("%d", upload_cost));
@@ -4415,7 +4425,7 @@ void script_question_cb(S32 option, void* user_data)
4415 4425
4416 if ( option == 2 ) // mute 4426 if ( option == 2 ) // mute
4417 { 4427 {
4418 gMuteListp->add(LLMute(cbdata->mItemID, cbdata->mObjectName, LLMute::OBJECT)); 4428 LLMuteList::getInstance()->add(LLMute(cbdata->mItemID, cbdata->mObjectName, LLMute::OBJECT));
4419 4429
4420 // purge the message queue of any previously queued requests from the same source. DEV-4879 4430 // purge the message queue of any previously queued requests from the same source. DEV-4879
4421 class OfferMatcher : public LLNotifyBoxView::Matcher 4431 class OfferMatcher : public LLNotifyBoxView::Matcher
@@ -4455,7 +4465,7 @@ void process_script_question(LLMessageSystem *msg, void **user_data)
4455 msg->getS32Fast(_PREHASH_Data, _PREHASH_Questions, questions ); 4465 msg->getS32Fast(_PREHASH_Data, _PREHASH_Questions, questions );
4456 4466
4457 // don't display permission requests if this object is muted - JS. 4467 // don't display permission requests if this object is muted - JS.
4458 if (gMuteListp->isMuted(taskid)) return; 4468 if (LLMuteList::getInstance()->isMuted(taskid)) return;
4459 4469
4460 // throttle excessive requests from any specific user's scripts 4470 // throttle excessive requests from any specific user's scripts
4461 LLString throttle_owner_name = owner_name; 4471 LLString throttle_owner_name = owner_name;
@@ -5085,7 +5095,7 @@ void callback_load_url_name(const LLUUID& id, const char* first, const char* las
5085 } 5095 }
5086 5096
5087 // For legacy name-only mutes. 5097 // For legacy name-only mutes.
5088 if (gMuteListp->isMuted(LLUUID::null, owner_name)) 5098 if (LLMuteList::getInstance()->isMuted(LLUUID::null, owner_name))
5089 { 5099 {
5090 delete infop; 5100 delete infop;
5091 infop = NULL; 5101 infop = NULL;
@@ -5119,10 +5129,8 @@ void process_load_url(LLMessageSystem* msg, void**)
5119 // URL is safety checked in load_url above 5129 // URL is safety checked in load_url above
5120 5130
5121 // Check if object or owner is muted 5131 // Check if object or owner is muted
5122 if (gMuteListp && 5132 if (LLMuteList::getInstance()->isMuted(infop->mObjectID, infop->mObjectName) ||
5123 (gMuteListp->isMuted(infop->mObjectID, infop->mObjectName) || 5133 LLMuteList::getInstance()->isMuted(infop->mOwnerID))
5124 gMuteListp->isMuted(infop->mOwnerID))
5125 )
5126 { 5134 {
5127 llinfos<<"Ignoring load_url from muted object/owner."<<llendl; 5135 llinfos<<"Ignoring load_url from muted object/owner."<<llendl;
5128 delete infop; 5136 delete infop;
@@ -5184,8 +5192,11 @@ void process_script_teleport_request(LLMessageSystem* msg, void**)
5184 msg->getVector3("Data", "SimPosition", pos); 5192 msg->getVector3("Data", "SimPosition", pos);
5185 msg->getVector3("Data", "LookAt", look_at); 5193 msg->getVector3("Data", "LookAt", look_at);
5186 5194
5187 gFloaterWorldMap->trackURL(sim_name, (U32)pos.mV[VX], (U32)pos.mV[VY], (U32)pos.mV[VZ]); 5195 // gFloaterWorldMap->trackURL(sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]);
5188 LLFloaterWorldMap::show(NULL, TRUE); 5196 // LLFloaterWorldMap::show(NULL, TRUE);
5197
5198 LLURLDispatcher::dispatch(LLURLDispatcher::buildSLURL(sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]), FALSE);
5199
5189} 5200}
5190 5201
5191void process_covenant_reply(LLMessageSystem* msg, void**) 5202void process_covenant_reply(LLMessageSystem* msg, void**)
@@ -5323,10 +5334,7 @@ void onCovenantLoadComplete(LLVFS *vfs,
5323 } 5334 }
5324 else 5335 else
5325 { 5336 {
5326 if( gViewerStats ) 5337 LLViewerStats::getInstance()->incStat( LLViewerStats::ST_DOWNLOAD_FAILED );
5327 {
5328 gViewerStats->incStat( LLViewerStats::ST_DOWNLOAD_FAILED );
5329 }
5330 5338
5331 if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status || 5339 if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status ||
5332 LL_ERR_FILE_EMPTY == status) 5340 LL_ERR_FILE_EMPTY == status)
diff --git a/linden/indra/newview/llviewernetwork.cpp b/linden/indra/newview/llviewernetwork.cpp
index bca7415..d6e92c2 100644
--- a/linden/indra/newview/llviewernetwork.cpp
+++ b/linden/indra/newview/llviewernetwork.cpp
@@ -114,10 +114,5 @@ LLGridData gGridInfo[GRID_INFO_COUNT] =
114// Use this to figure out which domain name and login URI to use. 114// Use this to figure out which domain name and login URI to use.
115 115
116EGridInfo gGridChoice = GRID_INFO_NONE; 116EGridInfo gGridChoice = GRID_INFO_NONE;
117char gGridName[MAX_STRING]; /* Flawfinder: ignore */ 117LLString gGridName; /* Flawfinder: ignore */
118
119F32 gPacketDropPercentage = 0.f;
120F32 gInBandwidth = 0.f;
121F32 gOutBandwidth = 0.f;
122
123unsigned char gMACAddress[MAC_ADDRESS_BYTES]; /* Flawfinder: ignore */ 118unsigned char gMACAddress[MAC_ADDRESS_BYTES]; /* Flawfinder: ignore */
diff --git a/linden/indra/newview/llviewernetwork.h b/linden/indra/newview/llviewernetwork.h
index 87678f6..176ce43 100644
--- a/linden/indra/newview/llviewernetwork.h
+++ b/linden/indra/newview/llviewernetwork.h
@@ -55,7 +55,7 @@ enum EGridInfo
55 GRID_INFO_VAAK, 55 GRID_INFO_VAAK,
56 GRID_INFO_YAMI, 56 GRID_INFO_YAMI,
57 GRID_INFO_LOCAL, 57 GRID_INFO_LOCAL,
58 GRID_INFO_OTHER, // IP address set via -user or other command line option 58 GRID_INFO_OTHER, // IP address set via command line option
59 GRID_INFO_COUNT 59 GRID_INFO_COUNT
60}; 60};
61 61
@@ -68,12 +68,9 @@ struct LLGridData
68 const char* mHelperURI; 68 const char* mHelperURI;
69}; 69};
70 70
71extern F32 gPacketDropPercentage;
72extern F32 gInBandwidth;
73extern F32 gOutBandwidth;
74extern EGridInfo gGridChoice; 71extern EGridInfo gGridChoice;
75extern LLGridData gGridInfo[]; 72extern LLGridData gGridInfo[];
76extern char gGridName[MAX_STRING]; /* Flawfinder: ignore */ 73extern LLString gGridName; /* Flawfinder: ignore */
77 74
78const S32 MAC_ADDRESS_BYTES = 6; 75const S32 MAC_ADDRESS_BYTES = 6;
79extern unsigned char gMACAddress[MAC_ADDRESS_BYTES]; /* Flawfinder: ignore */ 76extern unsigned char gMACAddress[MAC_ADDRESS_BYTES]; /* Flawfinder: ignore */
diff --git a/linden/indra/newview/llviewerobject.cpp b/linden/indra/newview/llviewerobject.cpp
index 55210ad..057e2d9 100644
--- a/linden/indra/newview/llviewerobject.cpp
+++ b/linden/indra/newview/llviewerobject.cpp
@@ -67,7 +67,7 @@
67#include "llfollowcam.h" 67#include "llfollowcam.h"
68#include "llnetmap.h" 68#include "llnetmap.h"
69#include "llselectmgr.h" 69#include "llselectmgr.h"
70#include "llsphere.h" 70#include "llrendersphere.h"
71#include "lltooldraganddrop.h" 71#include "lltooldraganddrop.h"
72#include "llviewercamera.h" 72#include "llviewercamera.h"
73#include "llviewerimagelist.h" 73#include "llviewerimagelist.h"
@@ -202,7 +202,7 @@ LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRe
202{ 202{
203 llassert(mRegionp); 203 llassert(mRegionp);
204 204
205 LLPrimitive::init(pcode); 205 LLPrimitive::init_primitive(pcode);
206 206
207 // CP: added 12/2/2005 - this was being initialised to 0, not the current frame time 207 // CP: added 12/2/2005 - this was being initialised to 0, not the current frame time
208 mLastInterpUpdateSecs = LLFrameTimer::getElapsedSeconds(); 208 mLastInterpUpdateSecs = LLFrameTimer::getElapsedSeconds();
@@ -549,9 +549,9 @@ void LLViewerObject::removeChild(LLViewerObject *childp)
549 549
550 if (childp->isSelected()) 550 if (childp->isSelected())
551 { 551 {
552 gSelectMgr->deselectObjectAndFamily(childp); 552 LLSelectMgr::getInstance()->deselectObjectAndFamily(childp);
553 BOOL add_to_end = TRUE; 553 BOOL add_to_end = TRUE;
554 gSelectMgr->selectObjectAndFamily(childp, add_to_end); 554 LLSelectMgr::getInstance()->selectObjectAndFamily(childp, add_to_end);
555 } 555 }
556} 556}
557 557
@@ -686,7 +686,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
686 // Coordinates of objects on simulators are region-local. 686 // Coordinates of objects on simulators are region-local.
687 U64 region_handle; 687 U64 region_handle;
688 mesgsys->getU64Fast(_PREHASH_RegionData, _PREHASH_RegionHandle, region_handle); 688 mesgsys->getU64Fast(_PREHASH_RegionData, _PREHASH_RegionHandle, region_handle);
689 mRegionp = gWorldPointer->getRegionFromHandle(region_handle); 689 mRegionp = LLWorld::getInstance()->getRegionFromHandle(region_handle);
690 if (!mRegionp) 690 if (!mRegionp)
691 { 691 {
692 U32 x, y; 692 U32 x, y;
@@ -711,9 +711,9 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
711 U16 valswizzle[4]; 711 U16 valswizzle[4];
712#endif 712#endif
713 U16 *val; 713 U16 *val;
714 const F32 size = gWorldPointer->getRegionWidthInMeters(); 714 const F32 size = LLWorld::getInstance()->getRegionWidthInMeters();
715 const F32 MAX_HEIGHT = gWorldPointer->getRegionMaxHeight(); 715 const F32 MAX_HEIGHT = LLWorld::getInstance()->getRegionMaxHeight();
716 const F32 MIN_HEIGHT = gWorldPointer->getRegionMinHeight(); 716 const F32 MIN_HEIGHT = LLWorld::getInstance()->getRegionMinHeight();
717 S32 length; 717 S32 length;
718 S32 count; 718 S32 count;
719 S32 this_update_precision = 32; // in bits 719 S32 this_update_precision = 32; // in bits
@@ -723,6 +723,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
723 LLVector3 new_vel; 723 LLVector3 new_vel;
724 LLVector3 new_acc; 724 LLVector3 new_acc;
725 LLVector3 new_angv; 725 LLVector3 new_angv;
726 LLVector3 old_angv = getAngularVelocity();
726 LLQuaternion new_rot; 727 LLQuaternion new_rot;
727 LLVector3 new_scale = getScale(); 728 LLVector3 new_scale = getScale();
728 729
@@ -1857,7 +1858,8 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
1857 } 1858 }
1858 } 1859 }
1859 1860
1860 if (new_rot != mLastRot) 1861 if (new_rot != mLastRot
1862 || new_angv != old_angv)
1861 { 1863 {
1862 mLastRot = new_rot; 1864 mLastRot = new_rot;
1863 setChanged(ROTATED | SILHOUETTE); 1865 setChanged(ROTATED | SILHOUETTE);
@@ -1920,7 +1922,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
1920 1922
1921 if (needs_refresh) 1923 if (needs_refresh)
1922 { 1924 {
1923 gSelectMgr->updateSelectionCenter(); 1925 LLSelectMgr::getInstance()->updateSelectionCenter();
1924 dialog_refresh_all(); 1926 dialog_refresh_all();
1925 } 1927 }
1926 1928
@@ -1974,7 +1976,7 @@ BOOL LLViewerObject::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
1974 F32 dt_raw = (F32)(time - mLastInterpUpdateSecs); 1976 F32 dt_raw = (F32)(time - mLastInterpUpdateSecs);
1975 F32 dt = mTimeDilation * dt_raw; 1977 F32 dt = mTimeDilation * dt_raw;
1976 1978
1977 if (!mUserSelected && !mJointInfo) 1979 if (!mJointInfo)
1978 { 1980 {
1979 applyAngularVelocity(dt); 1981 applyAngularVelocity(dt);
1980 } 1982 }
@@ -2060,9 +2062,9 @@ BOOL LLViewerObject::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
2060 else 2062 else
2061 { 2063 {
2062 // linear motion 2064 // linear motion
2063 // HAVOK_TIMESTEP is used below to correct for the fact that the velocity in object 2065 // PHYSICS_TIMESTEP is used below to correct for the fact that the velocity in object
2064 // updates represents the average velocity of the last timestep, rather than the final velocity. 2066 // updates represents the average velocity of the last timestep, rather than the final velocity.
2065 // the time dilation above should guarrantee that dt is never less than HAVOK_TIMESTEP, theoretically 2067 // the time dilation above should guarantee that dt is never less than PHYSICS_TIMESTEP, theoretically
2066 // 2068 //
2067 // There is a problem here if dt is negative. . . 2069 // There is a problem here if dt is negative. . .
2068 2070
@@ -2074,7 +2076,7 @@ BOOL LLViewerObject::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
2074 2076
2075 if (!(accel.isExactlyZero() && vel.isExactlyZero())) 2077 if (!(accel.isExactlyZero() && vel.isExactlyZero()))
2076 { 2078 {
2077 LLVector3 pos = (vel + (0.5f * (dt-HAVOK_TIMESTEP)) * accel) * dt; 2079 LLVector3 pos = (vel + (0.5f * (dt-PHYSICS_TIMESTEP)) * accel) * dt;
2078 2080
2079 // region local 2081 // region local
2080 setPositionRegion(pos + getPositionRegion()); 2082 setPositionRegion(pos + getPositionRegion());
@@ -2180,7 +2182,7 @@ void LLViewerObject::doUpdateInventory(
2180 // make sure that the serial number does not match. 2182 // make sure that the serial number does not match.
2181 deleteInventoryItem(item_id); 2183 deleteInventoryItem(item_id);
2182 LLPermissions perm(item->getPermissions()); 2184 LLPermissions perm(item->getPermissions());
2183 LLPermissions* obj_perm = gSelectMgr->findObjectPermissions(this); 2185 LLPermissions* obj_perm = LLSelectMgr::getInstance()->findObjectPermissions(this);
2184 bool is_atomic = ((S32)LLAssetType::AT_OBJECT == item->getType()) ? false : true; 2186 bool is_atomic = ((S32)LLAssetType::AT_OBJECT == item->getType()) ? false : true;
2185 if(obj_perm) 2187 if(obj_perm)
2186 { 2188 {
@@ -2717,19 +2719,19 @@ void LLViewerObject::setPixelAreaAndAngle(LLAgent &agent)
2717 if (range < 0.001f || isHUDAttachment()) // range == zero 2719 if (range < 0.001f || isHUDAttachment()) // range == zero
2718 { 2720 {
2719 mAppAngle = 180.f; 2721 mAppAngle = 180.f;
2720 mPixelArea = (F32)gCamera->getScreenPixelArea(); 2722 mPixelArea = (F32)LLViewerCamera::getInstance()->getScreenPixelArea();
2721 } 2723 }
2722 else 2724 else
2723 { 2725 {
2724 mAppAngle = (F32) atan2( max_scale, range) * RAD_TO_DEG; 2726 mAppAngle = (F32) atan2( max_scale, range) * RAD_TO_DEG;
2725 2727
2726 F32 pixels_per_meter = gCamera->getPixelMeterRatio() / range; 2728 F32 pixels_per_meter = LLViewerCamera::getInstance()->getPixelMeterRatio() / range;
2727 2729
2728 mPixelArea = (pixels_per_meter * max_scale) * (pixels_per_meter * mid_scale); 2730 mPixelArea = (pixels_per_meter * max_scale) * (pixels_per_meter * mid_scale);
2729 if (mPixelArea > gCamera->getScreenPixelArea()) 2731 if (mPixelArea > LLViewerCamera::getInstance()->getScreenPixelArea())
2730 { 2732 {
2731 mAppAngle = 180.f; 2733 mAppAngle = 180.f;
2732 mPixelArea = (F32)gCamera->getScreenPixelArea(); 2734 mPixelArea = (F32)LLViewerCamera::getInstance()->getScreenPixelArea();
2733 } 2735 }
2734 } 2736 }
2735} 2737}
@@ -3526,36 +3528,21 @@ void LLViewerObject::sendRotationUpdate() const
3526 gMessageSystem->sendReliable( regionp->getHost() ); 3528 gMessageSystem->sendReliable( regionp->getHost() );
3527} 3529}
3528 3530
3529// formerly send_object_position_global 3531/* Obsolete, we use MultipleObjectUpdate instead
3530void LLViewerObject::sendPositionUpdate() const 3532//// formerly send_object_position_global
3531{ 3533//void LLViewerObject::sendPositionUpdate() const
3532 gMessageSystem->newMessageFast(_PREHASH_ObjectPosition); 3534//{
3533 gMessageSystem->nextBlockFast(_PREHASH_AgentData); 3535// gMessageSystem->newMessageFast(_PREHASH_ObjectPosition);
3534 gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); 3536// gMessageSystem->nextBlockFast(_PREHASH_AgentData);
3535 gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); 3537// gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
3536 gMessageSystem->nextBlockFast(_PREHASH_ObjectData); 3538// gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
3537 gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, mLocalID ); 3539// gMessageSystem->nextBlockFast(_PREHASH_ObjectData);
3538 gMessageSystem->addVector3Fast(_PREHASH_Position, getPositionRegion()); 3540// gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, mLocalID );
3539 LLViewerRegion* regionp = getRegion(); 3541// gMessageSystem->addVector3Fast(_PREHASH_Position, getPositionRegion());
3540 gMessageSystem->sendReliable(regionp->getHost()); 3542// LLViewerRegion* regionp = getRegion();
3541} 3543// gMessageSystem->sendReliable(regionp->getHost());
3542 3544//}
3543 3545*/
3544//formerly send_object_scale
3545void LLViewerObject::sendScaleUpdate()
3546{
3547 gMessageSystem->newMessageFast(_PREHASH_ObjectScale);
3548 gMessageSystem->nextBlockFast(_PREHASH_AgentData);
3549 gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
3550 gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
3551 gMessageSystem->nextBlockFast(_PREHASH_ObjectData);
3552 gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, mLocalID );
3553 gMessageSystem->addVector3Fast(_PREHASH_Scale, (getScale()));
3554
3555 LLViewerRegion *regionp = getRegion();
3556 gMessageSystem->sendReliable(regionp->getHost() );
3557}
3558
3559 3546
3560//formerly send_object_shape(LLViewerObject *object) 3547//formerly send_object_shape(LLViewerObject *object)
3561void LLViewerObject::sendShapeUpdate() 3548void LLViewerObject::sendShapeUpdate()
@@ -4100,7 +4087,7 @@ void LLViewerObject::unpackParticleSource(const S32 block_num, const LLUUID& own
4100 { 4087 {
4101 LLPointer<LLViewerPartSourceScript> pss = LLViewerPartSourceScript::unpackPSS(this, NULL, block_num); 4088 LLPointer<LLViewerPartSourceScript> pss = LLViewerPartSourceScript::unpackPSS(this, NULL, block_num);
4102 //If the owner is muted, don't create the system 4089 //If the owner is muted, don't create the system
4103 if(gMuteListp->isMuted(owner_id, LLMute::flagParticles)) return; 4090 if(LLMuteList::getInstance()->isMuted(owner_id, LLMute::flagParticles)) return;
4104 4091
4105 // We need to be able to deal with a particle source that hasn't changed, but still got an update! 4092 // We need to be able to deal with a particle source that hasn't changed, but still got an update!
4106 if (pss) 4093 if (pss)
@@ -4108,7 +4095,7 @@ void LLViewerObject::unpackParticleSource(const S32 block_num, const LLUUID& own
4108// llinfos << "Making particle system with owner " << owner_id << llendl; 4095// llinfos << "Making particle system with owner " << owner_id << llendl;
4109 pss->setOwnerUUID(owner_id); 4096 pss->setOwnerUUID(owner_id);
4110 mPartSourcep = pss; 4097 mPartSourcep = pss;
4111 gWorldPointer->mPartSim.addPartSource(pss); 4098 LLViewerPartSim::getInstance()->addPartSource(pss);
4112 } 4099 }
4113 } 4100 }
4114 if (mPartSourcep) 4101 if (mPartSourcep)
@@ -4118,8 +4105,7 @@ void LLViewerObject::unpackParticleSource(const S32 block_num, const LLUUID& own
4118 LLViewerImage* image; 4105 LLViewerImage* image;
4119 if (mPartSourcep->mPartSysData.mPartImageID == LLUUID::null) 4106 if (mPartSourcep->mPartSysData.mPartImageID == LLUUID::null)
4120 { 4107 {
4121 LLUUID id(gViewerArt.getString("pixiesmall.tga")); 4108 image = gImageList.getImageFromFile("pixiesmall.j2c");
4122 image = gImageList.getImage(id);
4123 } 4109 }
4124 else 4110 else
4125 { 4111 {
@@ -4149,14 +4135,14 @@ void LLViewerObject::unpackParticleSource(LLDataPacker &dp, const LLUUID& owner_
4149 { 4135 {
4150 LLPointer<LLViewerPartSourceScript> pss = LLViewerPartSourceScript::unpackPSS(this, NULL, dp); 4136 LLPointer<LLViewerPartSourceScript> pss = LLViewerPartSourceScript::unpackPSS(this, NULL, dp);
4151 //If the owner is muted, don't create the system 4137 //If the owner is muted, don't create the system
4152 if(gMuteListp->isMuted(owner_id, LLMute::flagParticles)) return; 4138 if(LLMuteList::getInstance()->isMuted(owner_id, LLMute::flagParticles)) return;
4153 // We need to be able to deal with a particle source that hasn't changed, but still got an update! 4139 // We need to be able to deal with a particle source that hasn't changed, but still got an update!
4154 if (pss) 4140 if (pss)
4155 { 4141 {
4156// llinfos << "Making particle system with owner " << owner_id << llendl; 4142// llinfos << "Making particle system with owner " << owner_id << llendl;
4157 pss->setOwnerUUID(owner_id); 4143 pss->setOwnerUUID(owner_id);
4158 mPartSourcep = pss; 4144 mPartSourcep = pss;
4159 gWorldPointer->mPartSim.addPartSource(pss); 4145 LLViewerPartSim::getInstance()->addPartSource(pss);
4160 } 4146 }
4161 } 4147 }
4162 if (mPartSourcep) 4148 if (mPartSourcep)
@@ -4166,8 +4152,7 @@ void LLViewerObject::unpackParticleSource(LLDataPacker &dp, const LLUUID& owner_
4166 LLViewerImage* image; 4152 LLViewerImage* image;
4167 if (mPartSourcep->mPartSysData.mPartImageID == LLUUID::null) 4153 if (mPartSourcep->mPartSysData.mPartImageID == LLUUID::null)
4168 { 4154 {
4169 LLUUID id(gViewerArt.getString("pixiesmall.tga")); 4155 image = gImageList.getImageFromFile("pixiesmall.j2c");
4170 image = gImageList.getImage(id);
4171 } 4156 }
4172 else 4157 else
4173 { 4158 {
diff --git a/linden/indra/newview/llviewerobject.h b/linden/indra/newview/llviewerobject.h
index 329ef6a..316e8db 100644
--- a/linden/indra/newview/llviewerobject.h
+++ b/linden/indra/newview/llviewerobject.h
@@ -268,7 +268,6 @@ public:
268 void setPositionAgent(const LLVector3 &pos_agent, BOOL damped = FALSE); 268 void setPositionAgent(const LLVector3 &pos_agent, BOOL damped = FALSE);
269 void setPositionParent(const LLVector3 &pos_parent, BOOL damped = FALSE); 269 void setPositionParent(const LLVector3 &pos_parent, BOOL damped = FALSE);
270 void setPositionAbsoluteGlobal( const LLVector3d &pos_global, BOOL damped = FALSE ); 270 void setPositionAbsoluteGlobal( const LLVector3d &pos_global, BOOL damped = FALSE );
271 void sendPositionUpdate() const;
272 271
273 virtual const LLMatrix4& getWorldMatrix(LLXformMatrix* xform) const { return xform->getWorldMatrix(); } 272 virtual const LLMatrix4& getWorldMatrix(LLXformMatrix* xform) const { return xform->getWorldMatrix(); }
274 273
@@ -303,7 +302,6 @@ public:
303 void sendTEUpdate() const; // Sends packed representation of all texture entry information 302 void sendTEUpdate() const; // Sends packed representation of all texture entry information
304 303
305 virtual void setScale(const LLVector3 &scale, BOOL damped = FALSE); 304 virtual void setScale(const LLVector3 &scale, BOOL damped = FALSE);
306 void sendScaleUpdate();
307 305
308 void sendShapeUpdate(); 306 void sendShapeUpdate();
309 307
diff --git a/linden/indra/newview/llviewerobjectlist.cpp b/linden/indra/newview/llviewerobjectlist.cpp
index 612baf1..9b1548f 100644
--- a/linden/indra/newview/llviewerobjectlist.cpp
+++ b/linden/indra/newview/llviewerobjectlist.cpp
@@ -235,11 +235,11 @@ void LLViewerObjectList::processUpdateCore(LLViewerObject* objectp,
235 && update_type != OUT_TERSE_IMPROVED 235 && update_type != OUT_TERSE_IMPROVED
236 && objectp->mCreateSelected) 236 && objectp->mCreateSelected)
237 { 237 {
238 if ( gToolMgr->getCurrentTool() != gToolPie ) 238 if ( LLToolMgr::getInstance()->getCurrentTool() != LLToolPie::getInstance() )
239 { 239 {
240 //llinfos << "DEBUG selecting " << objectp->mID << " " 240 //llinfos << "DEBUG selecting " << objectp->mID << " "
241 // << objectp->mLocalID << llendl; 241 // << objectp->mLocalID << llendl;
242 gSelectMgr->selectObjectAndFamily(objectp); 242 LLSelectMgr::getInstance()->selectObjectAndFamily(objectp);
243 dialog_refresh_all(); 243 dialog_refresh_all();
244 } 244 }
245 245
@@ -302,7 +302,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
302 302
303 U64 region_handle; 303 U64 region_handle;
304 mesgsys->getU64Fast(_PREHASH_RegionData, _PREHASH_RegionHandle, region_handle); 304 mesgsys->getU64Fast(_PREHASH_RegionData, _PREHASH_RegionHandle, region_handle);
305 LLViewerRegion *regionp = gWorldPointer->getRegionFromHandle(region_handle); 305 LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromHandle(region_handle);
306 306
307 if (!regionp) 307 if (!regionp)
308 { 308 {
@@ -585,7 +585,7 @@ void LLViewerObjectList::updateApparentAngles(LLAgent &agent)
585 return true; 585 return true;
586 } 586 }
587 } func; 587 } func;
588 gSelectMgr->getSelection()->applyToRootObjects(&func); 588 LLSelectMgr::getInstance()->getSelection()->applyToRootObjects(&func);
589 589
590 // Iterate through some of the objects and lazy update their texture priorities 590 // Iterate through some of the objects and lazy update their texture priorities
591 for (i = mCurLazyUpdateIndex; i < max_value; i++) 591 for (i = mCurLazyUpdateIndex; i < max_value; i++)
@@ -710,7 +710,7 @@ void LLViewerObjectList::update(LLAgent &agent, LLWorld &world)
710 // don't factor frames that were paused into the stats 710 // don't factor frames that were paused into the stats
711 if (! mWasPaused) 711 if (! mWasPaused)
712 { 712 {
713 gViewerStats->updateFrameStats(time_diff); 713 LLViewerStats::getInstance()->updateFrameStats(time_diff);
714 } 714 }
715 715
716 /* 716 /*
@@ -996,7 +996,7 @@ void LLViewerObjectList::shiftObjects(const LLVector3 &offset)
996 } 996 }
997 997
998 gPipeline.shiftObjects(offset); 998 gPipeline.shiftObjects(offset);
999 gWorldp->shiftRegions(offset); 999 LLWorld::getInstance()->shiftRegions(offset);
1000} 1000}
1001 1001
1002void LLViewerObjectList::renderObjectsForMap(LLNetMap &netmap) 1002void LLViewerObjectList::renderObjectsForMap(LLNetMap &netmap)
@@ -1023,7 +1023,7 @@ void LLViewerObjectList::renderObjectsForMap(LLNetMap &netmap)
1023 const LLVector3& scale = objectp->getScale(); 1023 const LLVector3& scale = objectp->getScale();
1024 const LLVector3d pos = objectp->getPositionGlobal(); 1024 const LLVector3d pos = objectp->getPositionGlobal();
1025 const F64 water_height = F64( objectp->getRegion()->getWaterHeight() ); 1025 const F64 water_height = F64( objectp->getRegion()->getWaterHeight() );
1026 // gWorldPointer->getWaterHeight(); 1026 // LLWorld::getInstance()->getWaterHeight();
1027 1027
1028 F32 approx_radius = (scale.mV[VX] + scale.mV[VY]) * 0.5f * 0.5f * 1.3f; // 1.3 is a fudge 1028 F32 approx_radius = (scale.mV[VX] + scale.mV[VY]) * 0.5f * 0.5f * 1.3f; // 1.3 is a fudge
1029 1029
@@ -1097,8 +1097,8 @@ U32 LLViewerObjectList::renderObjectsForSelect(LLCamera &camera, BOOL pick_parce
1097 1097
1098 std::vector<LLDrawable*> pick_drawables; 1098 std::vector<LLDrawable*> pick_drawables;
1099 1099
1100 for (LLWorld::region_list_t::iterator iter = gWorldp->getRegionList().begin(); 1100 for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin();
1101 iter != gWorldp->getRegionList().end(); ++iter) 1101 iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
1102 { 1102 {
1103 LLViewerRegion* region = *iter; 1103 LLViewerRegion* region = *iter;
1104 for (U32 i = 0; i < LLViewerRegion::NUM_PARTITIONS; i++) 1104 for (U32 i = 0; i < LLViewerRegion::NUM_PARTITIONS; i++)
@@ -1491,12 +1491,12 @@ void LLViewerObjectList::findOrphans(LLViewerObject* objectp, U32 ip, U32 port)
1491 1491
1492 if (orphans_found && objectp->isSelected()) 1492 if (orphans_found && objectp->isSelected())
1493 { 1493 {
1494 LLSelectNode* nodep = gSelectMgr->getSelection()->findNode(objectp); 1494 LLSelectNode* nodep = LLSelectMgr::getInstance()->getSelection()->findNode(objectp);
1495 if (nodep && !nodep->mIndividualSelection) 1495 if (nodep && !nodep->mIndividualSelection)
1496 { 1496 {
1497 // rebuild selection with orphans 1497 // rebuild selection with orphans
1498 gSelectMgr->deselectObjectAndFamily(objectp); 1498 LLSelectMgr::getInstance()->deselectObjectAndFamily(objectp);
1499 gSelectMgr->selectObjectAndFamily(objectp); 1499 LLSelectMgr::getInstance()->selectObjectAndFamily(objectp);
1500 } 1500 }
1501 } 1501 }
1502} 1502}
diff --git a/linden/indra/newview/llviewerparcelmedia.cpp b/linden/indra/newview/llviewerparcelmedia.cpp
index 9180fb2..187a553 100644
--- a/linden/indra/newview/llviewerparcelmedia.cpp
+++ b/linden/indra/newview/llviewerparcelmedia.cpp
@@ -295,7 +295,7 @@ void LLViewerParcelMedia::processParcelMediaCommandMessage( LLMessageSystem *msg
295 } 295 }
296 else 296 else
297 { 297 {
298 LLParcel *parcel = gParcelMgr->getAgentParcel(); 298 LLParcel *parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
299 play(parcel); 299 play(parcel);
300 } 300 }
301 } 301 }
@@ -311,7 +311,7 @@ void LLViewerParcelMedia::processParcelMediaCommandMessage( LLMessageSystem *msg
311 { 311 {
312 if(! LLViewerMedia::hasMedia()) 312 if(! LLViewerMedia::hasMedia())
313 { 313 {
314 LLParcel *parcel = gParcelMgr->getAgentParcel(); 314 LLParcel *parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
315 play(parcel); 315 play(parcel);
316 } 316 }
317 seek(time); 317 seek(time);
@@ -346,7 +346,7 @@ void LLViewerParcelMedia::processParcelMediaUpdate( LLMessageSystem *msg, void *
346 msg->getS32("DataBlockExtended", "MediaHeight", media_height); 346 msg->getS32("DataBlockExtended", "MediaHeight", media_height);
347 } 347 }
348 348
349 LLParcel *parcel = gParcelMgr->getAgentParcel(); 349 LLParcel *parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
350 BOOL same = FALSE; 350 BOOL same = FALSE;
351 if (parcel) 351 if (parcel)
352 { 352 {
diff --git a/linden/indra/newview/llviewerparcelmediaautoplay.cpp b/linden/indra/newview/llviewerparcelmediaautoplay.cpp
index 854ba24..3b50060 100644
--- a/linden/indra/newview/llviewerparcelmediaautoplay.cpp
+++ b/linden/indra/newview/llviewerparcelmediaautoplay.cpp
@@ -84,10 +84,7 @@ BOOL LLViewerParcelMediaAutoPlay::tick()
84 LLUUID this_media_texture_id; 84 LLUUID this_media_texture_id;
85 S32 this_parcel_id = 0; 85 S32 this_parcel_id = 0;
86 86
87 if (gParcelMgr) 87 this_parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
88 {
89 this_parcel = gParcelMgr->getAgentParcel();
90 }
91 88
92 if (this_parcel) 89 if (this_parcel)
93 { 90 {
diff --git a/linden/indra/newview/llviewerparcelmgr.cpp b/linden/indra/newview/llviewerparcelmgr.cpp
index ddc67d0..b151802 100644
--- a/linden/indra/newview/llviewerparcelmgr.cpp
+++ b/linden/indra/newview/llviewerparcelmgr.cpp
@@ -74,7 +74,6 @@ const F32 PARCEL_COLLISION_DRAW_SECS = 1.f;
74 74
75 75
76// Globals 76// Globals
77LLViewerParcelMgr *gParcelMgr = NULL;
78 77
79U8* LLViewerParcelMgr::sPackedOverlay = NULL; 78U8* LLViewerParcelMgr::sPackedOverlay = NULL;
80 79
@@ -139,11 +138,8 @@ LLViewerParcelMgr::LLViewerParcelMgr()
139 mCollisionSegments = new U8[(mParcelsPerEdge+1)*(mParcelsPerEdge+1)]; 138 mCollisionSegments = new U8[(mParcelsPerEdge+1)*(mParcelsPerEdge+1)];
140 resetSegments(mCollisionSegments); 139 resetSegments(mCollisionSegments);
141 140
142 mBlockedImageID.set(gViewerArt.getString("noentrylines.tga")); 141 mBlockedImage = gImageList.getImageFromFile("noentrylines.j2c");
143 sBlockedImage = gImageList.getImage(mBlockedImageID, TRUE, TRUE); 142 mPassImage = gImageList.getImageFromFile("noentrypasslines.j2c");
144
145 mPassImageID.set(gViewerArt.getString("noentrypasslines.tga"));
146 sPassImage = gImageList.getImage(mPassImageID, TRUE, TRUE);
147 143
148 S32 overlay_size = mParcelsPerEdge * mParcelsPerEdge / PARCEL_OVERLAY_CHUNKS; 144 S32 overlay_size = mParcelsPerEdge * mParcelsPerEdge / PARCEL_OVERLAY_CHUNKS;
149 sPackedOverlay = new U8[overlay_size]; 145 sPackedOverlay = new U8[overlay_size];
@@ -217,9 +213,7 @@ void LLViewerParcelMgr::dump()
217 213
218LLViewerRegion* LLViewerParcelMgr::getSelectionRegion() 214LLViewerRegion* LLViewerParcelMgr::getSelectionRegion()
219{ 215{
220 if (!gWorldp) return NULL; 216 return LLWorld::getInstance()->getRegionFromPosGlobal( mWestSouth );
221
222 return gWorldp->getRegionFromPosGlobal( mWestSouth );
223} 217}
224 218
225 219
@@ -436,11 +430,6 @@ LLParcelSelectionHandle LLViewerParcelMgr::selectParcelInRectangle()
436 430
437void LLViewerParcelMgr::selectCollisionParcel() 431void LLViewerParcelMgr::selectCollisionParcel()
438{ 432{
439 if (!gWorldp)
440 {
441 return;
442 }
443
444 // BUG: Claim to be in the agent's region 433 // BUG: Claim to be in the agent's region
445 mWestSouth = gAgent.getRegion()->getOriginGlobal(); 434 mWestSouth = gAgent.getRegion()->getOriginGlobal();
446 mEastNorth = mWestSouth; 435 mEastNorth = mWestSouth;
@@ -483,11 +472,6 @@ void LLViewerParcelMgr::selectCollisionParcel()
483LLParcelSelectionHandle LLViewerParcelMgr::selectLand(const LLVector3d &corner1, const LLVector3d &corner2, 472LLParcelSelectionHandle LLViewerParcelMgr::selectLand(const LLVector3d &corner1, const LLVector3d &corner2,
484 BOOL snap_selection) 473 BOOL snap_selection)
485{ 474{
486 if (!gWorldp)
487 {
488 return NULL;
489 }
490
491 sanitize_corners( corner1, corner2, mWestSouth, mEastNorth ); 475 sanitize_corners( corner1, corner2, mWestSouth, mEastNorth );
492 476
493 // ...x isn't more than one meter away 477 // ...x isn't more than one meter away
@@ -515,8 +499,8 @@ LLParcelSelectionHandle LLViewerParcelMgr::selectLand(const LLVector3d &corner1,
515 east_north_region_check.mdV[VX] -= 0.5; 499 east_north_region_check.mdV[VX] -= 0.5;
516 east_north_region_check.mdV[VY] -= 0.5; 500 east_north_region_check.mdV[VY] -= 0.5;
517 501
518 LLViewerRegion *region = gWorldp->getRegionFromPosGlobal(mWestSouth); 502 LLViewerRegion *region = LLWorld::getInstance()->getRegionFromPosGlobal(mWestSouth);
519 LLViewerRegion *region_other = gWorldp->getRegionFromPosGlobal( east_north_region_check ); 503 LLViewerRegion *region_other = LLWorld::getInstance()->getRegionFromPosGlobal( east_north_region_check );
520 504
521 if(!region) 505 if(!region)
522 { 506 {
@@ -689,8 +673,7 @@ F32 LLViewerParcelMgr::agentDrawDistance() const
689 673
690BOOL LLViewerParcelMgr::isOwnedAt(const LLVector3d& pos_global) const 674BOOL LLViewerParcelMgr::isOwnedAt(const LLVector3d& pos_global) const
691{ 675{
692 if (!gWorldp) return FALSE; 676 LLViewerRegion* region = LLWorld::getInstance()->getRegionFromPosGlobal( pos_global );
693 LLViewerRegion* region = gWorldp->getRegionFromPosGlobal( pos_global );
694 if (!region) return FALSE; 677 if (!region) return FALSE;
695 678
696 LLViewerParcelOverlay* overlay = region->getParcelOverlay(); 679 LLViewerParcelOverlay* overlay = region->getParcelOverlay();
@@ -703,8 +686,7 @@ BOOL LLViewerParcelMgr::isOwnedAt(const LLVector3d& pos_global) const
703 686
704BOOL LLViewerParcelMgr::isOwnedSelfAt(const LLVector3d& pos_global) const 687BOOL LLViewerParcelMgr::isOwnedSelfAt(const LLVector3d& pos_global) const
705{ 688{
706 if (!gWorldp) return FALSE; 689 LLViewerRegion* region = LLWorld::getInstance()->getRegionFromPosGlobal( pos_global );
707 LLViewerRegion* region = gWorldp->getRegionFromPosGlobal( pos_global );
708 if (!region) return FALSE; 690 if (!region) return FALSE;
709 691
710 LLViewerParcelOverlay* overlay = region->getParcelOverlay(); 692 LLViewerParcelOverlay* overlay = region->getParcelOverlay();
@@ -717,8 +699,7 @@ BOOL LLViewerParcelMgr::isOwnedSelfAt(const LLVector3d& pos_global) const
717 699
718BOOL LLViewerParcelMgr::isOwnedOtherAt(const LLVector3d& pos_global) const 700BOOL LLViewerParcelMgr::isOwnedOtherAt(const LLVector3d& pos_global) const
719{ 701{
720 if (!gWorldp) return FALSE; 702 LLViewerRegion* region = LLWorld::getInstance()->getRegionFromPosGlobal( pos_global );
721 LLViewerRegion* region = gWorldp->getRegionFromPosGlobal( pos_global );
722 if (!region) return FALSE; 703 if (!region) return FALSE;
723 704
724 LLViewerParcelOverlay* overlay = region->getParcelOverlay(); 705 LLViewerParcelOverlay* overlay = region->getParcelOverlay();
@@ -731,8 +712,7 @@ BOOL LLViewerParcelMgr::isOwnedOtherAt(const LLVector3d& pos_global) const
731 712
732BOOL LLViewerParcelMgr::isSoundLocal(const LLVector3d& pos_global) const 713BOOL LLViewerParcelMgr::isSoundLocal(const LLVector3d& pos_global) const
733{ 714{
734 if (!gWorldp) return FALSE; 715 LLViewerRegion* region = LLWorld::getInstance()->getRegionFromPosGlobal( pos_global );
735 LLViewerRegion* region = gWorldp->getRegionFromPosGlobal( pos_global );
736 if (!region) return FALSE; 716 if (!region) return FALSE;
737 717
738 LLViewerParcelOverlay* overlay = region->getParcelOverlay(); 718 LLViewerParcelOverlay* overlay = region->getParcelOverlay();
@@ -754,12 +734,12 @@ BOOL LLViewerParcelMgr::canHearSound(const LLVector3d &pos_global) const
754 } 734 }
755 else 735 else
756 { 736 {
757 if (gParcelMgr->getAgentParcel()->getSoundLocal()) 737 if (LLViewerParcelMgr::getInstance()->getAgentParcel()->getSoundLocal())
758 { 738 {
759 // Not in same parcel, and agent parcel only has local sound 739 // Not in same parcel, and agent parcel only has local sound
760 return FALSE; 740 return FALSE;
761 } 741 }
762 else if (gParcelMgr->isSoundLocal(pos_global)) 742 else if (LLViewerParcelMgr::getInstance()->isSoundLocal(pos_global))
763 { 743 {
764 // Not in same parcel, and target parcel only has local sound 744 // Not in same parcel, and target parcel only has local sound
765 return FALSE; 745 return FALSE;
@@ -775,8 +755,7 @@ BOOL LLViewerParcelMgr::canHearSound(const LLVector3d &pos_global) const
775 755
776BOOL LLViewerParcelMgr::inAgentParcel(const LLVector3d &pos_global) const 756BOOL LLViewerParcelMgr::inAgentParcel(const LLVector3d &pos_global) const
777{ 757{
778 if (!gWorldp) return FALSE; 758 LLViewerRegion* region = LLWorld::getInstance()->getRegionFromPosGlobal(pos_global);
779 LLViewerRegion* region = gWorldp->getRegionFromPosGlobal(pos_global);
780 if (region != gAgent.getRegion()) 759 if (region != gAgent.getRegion())
781 { 760 {
782 // Can't be in the agent parcel if you're not in the same region. 761 // Can't be in the agent parcel if you're not in the same region.
@@ -833,8 +812,7 @@ void LLViewerParcelMgr::render()
833 { 812 {
834 // Rendering is done in agent-coordinates, so need to supply 813 // Rendering is done in agent-coordinates, so need to supply
835 // an appropriate offset to the render code. 814 // an appropriate offset to the render code.
836 if (!gWorldp) return; 815 LLViewerRegion* regionp = LLWorld::getInstance()->getRegionFromPosGlobal(mWestSouth);
837 LLViewerRegion* regionp = gWorldp->getRegionFromPosGlobal(mWestSouth);
838 if (!regionp) return; 816 if (!regionp) return;
839 817
840 renderHighlightSegments(mHighlightSegments, regionp); 818 renderHighlightSegments(mHighlightSegments, regionp);
@@ -866,8 +844,7 @@ void LLViewerParcelMgr::sendParcelAccessListRequest(U32 flags)
866 return; 844 return;
867 } 845 }
868 846
869 if(!gWorldp) return; 847 LLViewerRegion *region = LLWorld::getInstance()->getRegionFromPosGlobal( mWestSouth );
870 LLViewerRegion *region = gWorldp->getRegionFromPosGlobal( mWestSouth );
871 if (!region) return; 848 if (!region) return;
872 849
873 LLMessageSystem *msg = gMessageSystem; 850 LLMessageSystem *msg = gMessageSystem;
@@ -902,8 +879,7 @@ void LLViewerParcelMgr::sendParcelDwellRequest()
902 return; 879 return;
903 } 880 }
904 881
905 if(!gWorldp) return; 882 LLViewerRegion *region = LLWorld::getInstance()->getRegionFromPosGlobal( mWestSouth );
906 LLViewerRegion *region = gWorldp->getRegionFromPosGlobal( mWestSouth );
907 if (!region) return; 883 if (!region) return;
908 884
909 LLMessageSystem *msg = gMessageSystem; 885 LLMessageSystem *msg = gMessageSystem;
@@ -935,8 +911,7 @@ void LLViewerParcelMgr::sendParcelGodForceOwner(const LLUUID& owner_id)
935 east_north_region_check.mdV[VX] -= 0.5; 911 east_north_region_check.mdV[VX] -= 0.5;
936 east_north_region_check.mdV[VY] -= 0.5; 912 east_north_region_check.mdV[VY] -= 0.5;
937 913
938 if(!gWorldp) return; 914 LLViewerRegion *region = LLWorld::getInstance()->getRegionFromPosGlobal( mWestSouth );
939 LLViewerRegion *region = gWorldp->getRegionFromPosGlobal( mWestSouth );
940 if (!region) 915 if (!region)
941 { 916 {
942 // TODO: Add a force owner version of this alert. 917 // TODO: Add a force owner version of this alert.
@@ -945,7 +920,7 @@ void LLViewerParcelMgr::sendParcelGodForceOwner(const LLUUID& owner_id)
945 } 920 }
946 921
947 // BUG: Make work for cross-region selections 922 // BUG: Make work for cross-region selections
948 LLViewerRegion *region2 = gWorldp->getRegionFromPosGlobal( east_north_region_check ); 923 LLViewerRegion *region2 = LLWorld::getInstance()->getRegionFromPosGlobal( east_north_region_check );
949 if (region != region2) 924 if (region != region2)
950 { 925 {
951 gViewerWindow->alertXml("CannotSetLandOwnerMultipleRegions"); 926 gViewerWindow->alertXml("CannotSetLandOwnerMultipleRegions");
@@ -992,8 +967,7 @@ void LLViewerParcelMgr::sendParcelGodForceToContent()
992 gViewerWindow->alertXml("CannotContentifyNothingSelected"); 967 gViewerWindow->alertXml("CannotContentifyNothingSelected");
993 return; 968 return;
994 } 969 }
995 if(!gWorldp) return; 970 LLViewerRegion* region = LLWorld::getInstance()->getRegionFromPosGlobal( mWestSouth );
996 LLViewerRegion* region = gWorldp->getRegionFromPosGlobal( mWestSouth );
997 if (!region) 971 if (!region)
998 { 972 {
999 gViewerWindow->alertXml("CannotContentifyNoRegion"); 973 gViewerWindow->alertXml("CannotContentifyNoRegion");
@@ -1018,8 +992,7 @@ void LLViewerParcelMgr::sendParcelRelease()
1018 return; 992 return;
1019 } 993 }
1020 994
1021 if(!gWorldp) return; 995 LLViewerRegion *region = LLWorld::getInstance()->getRegionFromPosGlobal( mWestSouth );
1022 LLViewerRegion *region = gWorldp->getRegionFromPosGlobal( mWestSouth );
1023 if (!region) 996 if (!region)
1024 { 997 {
1025 gViewerWindow->alertXml("CannotReleaseLandNoRegion"); 998 gViewerWindow->alertXml("CannotReleaseLandNoRegion");
@@ -1081,8 +1054,7 @@ LLViewerParcelMgr::ParcelBuyInfo* LLViewerParcelMgr::setupParcelBuy(
1081 return NULL; 1054 return NULL;
1082 } 1055 }
1083 1056
1084 if(!gWorldp) return NULL; 1057 LLViewerRegion *region = LLWorld::getInstance()->getRegionFromPosGlobal( mWestSouth );
1085 LLViewerRegion *region = gWorldp->getRegionFromPosGlobal( mWestSouth );
1086 if (!region) 1058 if (!region)
1087 { 1059 {
1088 gViewerWindow->alertXml("CannotBuyLandNoRegion"); 1060 gViewerWindow->alertXml("CannotBuyLandNoRegion");
@@ -1099,7 +1071,7 @@ LLViewerParcelMgr::ParcelBuyInfo* LLViewerParcelMgr::setupParcelBuy(
1099 east_north_region_check.mdV[VX] -= 0.5; 1071 east_north_region_check.mdV[VX] -= 0.5;
1100 east_north_region_check.mdV[VY] -= 0.5; 1072 east_north_region_check.mdV[VY] -= 0.5;
1101 1073
1102 LLViewerRegion *region2 = gWorldp->getRegionFromPosGlobal( east_north_region_check ); 1074 LLViewerRegion *region2 = LLWorld::getInstance()->getRegionFromPosGlobal( east_north_region_check );
1103 1075
1104 if (region != region2) 1076 if (region != region2)
1105 { 1077 {
@@ -1192,8 +1164,7 @@ void LLViewerParcelMgr::sendParcelDeed(const LLUUID& group_id)
1192 gViewerWindow->alertXml("CannotDeedLandNoGroup"); 1164 gViewerWindow->alertXml("CannotDeedLandNoGroup");
1193 return; 1165 return;
1194 } 1166 }
1195 if(!gWorldp) return; 1167 LLViewerRegion *region = LLWorld::getInstance()->getRegionFromPosGlobal( mWestSouth );
1196 LLViewerRegion *region = gWorldp->getRegionFromPosGlobal( mWestSouth );
1197 if (!region) 1168 if (!region)
1198 { 1169 {
1199 gViewerWindow->alertXml("CannotDeedLandNoRegion"); 1170 gViewerWindow->alertXml("CannotDeedLandNoRegion");
@@ -1231,7 +1202,7 @@ void LLViewerParcelMgr::makeLandmarkAtSelection()
1231 global_center *= 0.5f; 1202 global_center *= 0.5f;
1232 1203
1233 LLViewerRegion* region; 1204 LLViewerRegion* region;
1234 region = gWorldp->getRegionFromPosGlobal(global_center); 1205 region = LLWorld::getInstance()->getRegionFromPosGlobal(global_center);
1235 1206
1236 LLVector3 west_south_bottom_region = region->getPosRegionFromGlobal( mWestSouth ); 1207 LLVector3 west_south_bottom_region = region->getPosRegionFromGlobal( mWestSouth );
1237 LLVector3 east_north_top_region = region->getPosRegionFromGlobal( mEastNorth ); 1208 LLVector3 east_north_top_region = region->getPosRegionFromGlobal( mEastNorth );
@@ -1260,11 +1231,8 @@ const LLString& LLViewerParcelMgr::getAgentParcelName() const
1260void LLViewerParcelMgr::sendParcelPropertiesUpdate(LLParcel* parcel, bool use_agent_region) 1231void LLViewerParcelMgr::sendParcelPropertiesUpdate(LLParcel* parcel, bool use_agent_region)
1261{ 1232{
1262 if(!parcel) return; 1233 if(!parcel) return;
1263 if(!gWorldp) return;
1264 //llinfos << "passed parcel: " << parcel->getName() << llendl;
1265 1234
1266 LLViewerRegion* region = use_agent_region ? 1235 LLViewerRegion *region = use_agent_region ? gAgent.getRegion() : LLWorld::getInstance()->getRegionFromPosGlobal( mWestSouth );
1267 gAgent.getRegion() : gWorldp->getRegionFromPosGlobal( mWestSouth );
1268 if (!region) return; 1236 if (!region) return;
1269 //llinfos << "found region: " << region->getName() << llendl; 1237 //llinfos << "found region: " << region->getName() << llendl;
1270 1238
@@ -1302,8 +1270,7 @@ void LLViewerParcelMgr::sendParcelPropertiesUpdate(LLParcel* parcel, bool use_ag
1302 1270
1303void LLViewerParcelMgr::requestHoverParcelProperties(const LLVector3d& pos) 1271void LLViewerParcelMgr::requestHoverParcelProperties(const LLVector3d& pos)
1304{ 1272{
1305 if(!gWorldp) return; 1273 LLViewerRegion* region = LLWorld::getInstance()->getRegionFromPosGlobal( pos );
1306 LLViewerRegion* region = gWorldp->getRegionFromPosGlobal( pos );
1307 if (!region) 1274 if (!region)
1308 { 1275 {
1309 return; 1276 return;
@@ -1356,7 +1323,7 @@ void LLViewerParcelMgr::processParcelOverlay(LLMessageSystem *msg, void **user)
1356 return; 1323 return;
1357 } 1324 }
1358 1325
1359 S32 parcels_per_edge = gParcelMgr->mParcelsPerEdge; 1326 S32 parcels_per_edge = LLViewerParcelMgr::getInstance()->mParcelsPerEdge;
1360 S32 expected_size = parcels_per_edge * parcels_per_edge / PARCEL_OVERLAY_CHUNKS; 1327 S32 expected_size = parcels_per_edge * parcels_per_edge / PARCEL_OVERLAY_CHUNKS;
1361 if (packed_overlay_size != expected_size) 1328 if (packed_overlay_size != expected_size)
1362 { 1329 {
@@ -1374,7 +1341,7 @@ void LLViewerParcelMgr::processParcelOverlay(LLMessageSystem *msg, void **user)
1374 expected_size); 1341 expected_size);
1375 1342
1376 LLHost host = msg->getSender(); 1343 LLHost host = msg->getSender();
1377 LLViewerRegion *region = gWorldp->getRegion(host); 1344 LLViewerRegion *region = LLWorld::getInstance()->getRegion(host);
1378 if (region) 1345 if (region)
1379 { 1346 {
1380 region->mParcelOverlay->uncompressLandOverlay( sequence_id, sPackedOverlay ); 1347 region->mParcelOverlay->uncompressLandOverlay( sequence_id, sPackedOverlay );
@@ -1434,31 +1401,31 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
1434 if (sequence_id == SELECTED_PARCEL_SEQ_ID) 1401 if (sequence_id == SELECTED_PARCEL_SEQ_ID)
1435 { 1402 {
1436 // ...selected parcels report this sequence id 1403 // ...selected parcels report this sequence id
1437 gParcelMgr->mRequestResult = PARCEL_RESULT_SUCCESS; 1404 LLViewerParcelMgr::getInstance()->mRequestResult = PARCEL_RESULT_SUCCESS;
1438 parcel = gParcelMgr->mCurrentParcel; 1405 parcel = LLViewerParcelMgr::getInstance()->mCurrentParcel;
1439 } 1406 }
1440 else if (sequence_id == HOVERED_PARCEL_SEQ_ID) 1407 else if (sequence_id == HOVERED_PARCEL_SEQ_ID)
1441 { 1408 {
1442 gParcelMgr->mHoverRequestResult = PARCEL_RESULT_SUCCESS; 1409 LLViewerParcelMgr::getInstance()->mHoverRequestResult = PARCEL_RESULT_SUCCESS;
1443 parcel = gParcelMgr->mHoverParcel; 1410 parcel = LLViewerParcelMgr::getInstance()->mHoverParcel;
1444 } 1411 }
1445 else if (sequence_id == COLLISION_NOT_IN_GROUP_PARCEL_SEQ_ID || 1412 else if (sequence_id == COLLISION_NOT_IN_GROUP_PARCEL_SEQ_ID ||
1446 sequence_id == COLLISION_NOT_ON_LIST_PARCEL_SEQ_ID || 1413 sequence_id == COLLISION_NOT_ON_LIST_PARCEL_SEQ_ID ||
1447 sequence_id == COLLISION_BANNED_PARCEL_SEQ_ID) 1414 sequence_id == COLLISION_BANNED_PARCEL_SEQ_ID)
1448 { 1415 {
1449 gParcelMgr->mHoverRequestResult = PARCEL_RESULT_SUCCESS; 1416 LLViewerParcelMgr::getInstance()->mHoverRequestResult = PARCEL_RESULT_SUCCESS;
1450 parcel = gParcelMgr->mCollisionParcel; 1417 parcel = LLViewerParcelMgr::getInstance()->mCollisionParcel;
1451 } 1418 }
1452 else if (sequence_id == 0 || sequence_id > gParcelMgr->mAgentParcelSequenceID) 1419 else if (sequence_id == 0 || sequence_id > LLViewerParcelMgr::getInstance()->mAgentParcelSequenceID)
1453 { 1420 {
1454 // new agent parcel 1421 // new agent parcel
1455 gParcelMgr->mAgentParcelSequenceID = sequence_id; 1422 LLViewerParcelMgr::getInstance()->mAgentParcelSequenceID = sequence_id;
1456 parcel = gParcelMgr->mAgentParcel; 1423 parcel = LLViewerParcelMgr::getInstance()->mAgentParcel;
1457 } 1424 }
1458 else 1425 else
1459 { 1426 {
1460 llinfos << "out of order agent parcel sequence id " << sequence_id 1427 llinfos << "out of order agent parcel sequence id " << sequence_id
1461 << " last good " << gParcelMgr->mAgentParcelSequenceID 1428 << " last good " << LLViewerParcelMgr::getInstance()->mAgentParcelSequenceID
1462 << llendl; 1429 << llendl;
1463 return; 1430 return;
1464 } 1431 }
@@ -1529,15 +1496,15 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
1529 parcel->setRegionDenyAgeUnverifiedOverride(region_deny_age_unverified_override); 1496 parcel->setRegionDenyAgeUnverifiedOverride(region_deny_age_unverified_override);
1530 parcel->unpackMessage(msg); 1497 parcel->unpackMessage(msg);
1531 1498
1532 if (parcel == gParcelMgr->mAgentParcel) 1499 if (parcel == LLViewerParcelMgr::getInstance()->mAgentParcel)
1533 { 1500 {
1534 S32 bitmap_size = gParcelMgr->mParcelsPerEdge 1501 S32 bitmap_size = LLViewerParcelMgr::getInstance()->mParcelsPerEdge
1535 * gParcelMgr->mParcelsPerEdge 1502 * LLViewerParcelMgr::getInstance()->mParcelsPerEdge
1536 / 8; 1503 / 8;
1537 U8* bitmap = new U8[ bitmap_size ]; 1504 U8* bitmap = new U8[ bitmap_size ];
1538 msg->getBinaryDataFast(_PREHASH_ParcelData, _PREHASH_Bitmap, bitmap, bitmap_size); 1505 msg->getBinaryDataFast(_PREHASH_ParcelData, _PREHASH_Bitmap, bitmap, bitmap_size);
1539 1506
1540 gParcelMgr->writeAgentParcelFromBitmap(bitmap); 1507 LLViewerParcelMgr::getInstance()->writeAgentParcelFromBitmap(bitmap);
1541 delete[] bitmap; 1508 delete[] bitmap;
1542 } 1509 }
1543 } 1510 }
@@ -1546,80 +1513,79 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
1546 if (sequence_id == SELECTED_PARCEL_SEQ_ID) 1513 if (sequence_id == SELECTED_PARCEL_SEQ_ID)
1547 { 1514 {
1548 // Update selected counts 1515 // Update selected counts
1549 gParcelMgr->mCurrentParcelSelection->mSelectedSelfCount = self_count; 1516 LLViewerParcelMgr::getInstance()->mCurrentParcelSelection->mSelectedSelfCount = self_count;
1550 gParcelMgr->mCurrentParcelSelection->mSelectedOtherCount = other_count; 1517 LLViewerParcelMgr::getInstance()->mCurrentParcelSelection->mSelectedOtherCount = other_count;
1551 gParcelMgr->mCurrentParcelSelection->mSelectedPublicCount = public_count; 1518 LLViewerParcelMgr::getInstance()->mCurrentParcelSelection->mSelectedPublicCount = public_count;
1552 1519
1553 gParcelMgr->mCurrentParcelSelection->mSelectedMultipleOwners = 1520 LLViewerParcelMgr::getInstance()->mCurrentParcelSelection->mSelectedMultipleOwners =
1554 (request_result == PARCEL_RESULT_MULTIPLE); 1521 (request_result == PARCEL_RESULT_MULTIPLE);
1555 1522
1556 // Select the whole parcel 1523 // Select the whole parcel
1557 if(!gWorldp) return; 1524 LLViewerRegion* region = LLWorld::getInstance()->getRegion( msg->getSender() );
1558 LLViewerRegion* region = gWorldp->getRegion( msg->getSender() );
1559 if (region) 1525 if (region)
1560 { 1526 {
1561 if (!snap_selection) 1527 if (!snap_selection)
1562 { 1528 {
1563 // don't muck with the westsouth and eastnorth. 1529 // don't muck with the westsouth and eastnorth.
1564 // just highlight it 1530 // just highlight it
1565 LLVector3 west_south = region->getPosRegionFromGlobal(gParcelMgr->mWestSouth); 1531 LLVector3 west_south = region->getPosRegionFromGlobal(LLViewerParcelMgr::getInstance()->mWestSouth);
1566 LLVector3 east_north = region->getPosRegionFromGlobal(gParcelMgr->mEastNorth); 1532 LLVector3 east_north = region->getPosRegionFromGlobal(LLViewerParcelMgr::getInstance()->mEastNorth);
1567 1533
1568 gParcelMgr->resetSegments(gParcelMgr->mHighlightSegments); 1534 LLViewerParcelMgr::getInstance()->resetSegments(LLViewerParcelMgr::getInstance()->mHighlightSegments);
1569 gParcelMgr->writeHighlightSegments( 1535 LLViewerParcelMgr::getInstance()->writeHighlightSegments(
1570 west_south.mV[VX], 1536 west_south.mV[VX],
1571 west_south.mV[VY], 1537 west_south.mV[VY],
1572 east_north.mV[VX], 1538 east_north.mV[VX],
1573 east_north.mV[VY] ); 1539 east_north.mV[VY] );
1574 gParcelMgr->mCurrentParcelSelection->mWholeParcelSelected = FALSE; 1540 LLViewerParcelMgr::getInstance()->mCurrentParcelSelection->mWholeParcelSelected = FALSE;
1575 } 1541 }
1576 else if (0 == local_id) 1542 else if (0 == local_id)
1577 { 1543 {
1578 // this is public land, just highlight the selection 1544 // this is public land, just highlight the selection
1579 gParcelMgr->mWestSouth = region->getPosGlobalFromRegion( aabb_min ); 1545 LLViewerParcelMgr::getInstance()->mWestSouth = region->getPosGlobalFromRegion( aabb_min );
1580 gParcelMgr->mEastNorth = region->getPosGlobalFromRegion( aabb_max ); 1546 LLViewerParcelMgr::getInstance()->mEastNorth = region->getPosGlobalFromRegion( aabb_max );
1581 1547
1582 gParcelMgr->resetSegments(gParcelMgr->mHighlightSegments); 1548 LLViewerParcelMgr::getInstance()->resetSegments(LLViewerParcelMgr::getInstance()->mHighlightSegments);
1583 gParcelMgr->writeHighlightSegments( 1549 LLViewerParcelMgr::getInstance()->writeHighlightSegments(
1584 aabb_min.mV[VX], 1550 aabb_min.mV[VX],
1585 aabb_min.mV[VY], 1551 aabb_min.mV[VY],
1586 aabb_max.mV[VX], 1552 aabb_max.mV[VX],
1587 aabb_max.mV[VY] ); 1553 aabb_max.mV[VY] );
1588 gParcelMgr->mCurrentParcelSelection->mWholeParcelSelected = TRUE; 1554 LLViewerParcelMgr::getInstance()->mCurrentParcelSelection->mWholeParcelSelected = TRUE;
1589 } 1555 }
1590 else 1556 else
1591 { 1557 {
1592 gParcelMgr->mWestSouth = region->getPosGlobalFromRegion( aabb_min ); 1558 LLViewerParcelMgr::getInstance()->mWestSouth = region->getPosGlobalFromRegion( aabb_min );
1593 gParcelMgr->mEastNorth = region->getPosGlobalFromRegion( aabb_max ); 1559 LLViewerParcelMgr::getInstance()->mEastNorth = region->getPosGlobalFromRegion( aabb_max );
1594 1560
1595 // Owned land, highlight the boundaries 1561 // Owned land, highlight the boundaries
1596 S32 bitmap_size = gParcelMgr->mParcelsPerEdge 1562 S32 bitmap_size = LLViewerParcelMgr::getInstance()->mParcelsPerEdge
1597 * gParcelMgr->mParcelsPerEdge 1563 * LLViewerParcelMgr::getInstance()->mParcelsPerEdge
1598 / 8; 1564 / 8;
1599 U8* bitmap = new U8[ bitmap_size ]; 1565 U8* bitmap = new U8[ bitmap_size ];
1600 msg->getBinaryDataFast(_PREHASH_ParcelData, _PREHASH_Bitmap, bitmap, bitmap_size); 1566 msg->getBinaryDataFast(_PREHASH_ParcelData, _PREHASH_Bitmap, bitmap, bitmap_size);
1601 1567
1602 gParcelMgr->resetSegments(gParcelMgr->mHighlightSegments); 1568 LLViewerParcelMgr::getInstance()->resetSegments(LLViewerParcelMgr::getInstance()->mHighlightSegments);
1603 gParcelMgr->writeSegmentsFromBitmap( bitmap, gParcelMgr->mHighlightSegments ); 1569 LLViewerParcelMgr::getInstance()->writeSegmentsFromBitmap( bitmap, LLViewerParcelMgr::getInstance()->mHighlightSegments );
1604 1570
1605 delete[] bitmap; 1571 delete[] bitmap;
1606 bitmap = NULL; 1572 bitmap = NULL;
1607 1573
1608 gParcelMgr->mCurrentParcelSelection->mWholeParcelSelected = TRUE; 1574 LLViewerParcelMgr::getInstance()->mCurrentParcelSelection->mWholeParcelSelected = TRUE;
1609 } 1575 }
1610 1576
1611 // Request access list information for this land 1577 // Request access list information for this land
1612 gParcelMgr->sendParcelAccessListRequest(AL_ACCESS | AL_BAN); 1578 LLViewerParcelMgr::getInstance()->sendParcelAccessListRequest(AL_ACCESS | AL_BAN);
1613 1579
1614 // Request dwell for this land, if it's not public land. 1580 // Request dwell for this land, if it's not public land.
1615 gParcelMgr->mSelectedDwell = 0.f; 1581 LLViewerParcelMgr::getInstance()->mSelectedDwell = 0.f;
1616 if (0 != local_id) 1582 if (0 != local_id)
1617 { 1583 {
1618 gParcelMgr->sendParcelDwellRequest(); 1584 LLViewerParcelMgr::getInstance()->sendParcelDwellRequest();
1619 } 1585 }
1620 1586
1621 gParcelMgr->mSelected = TRUE; 1587 LLViewerParcelMgr::getInstance()->mSelected = TRUE;
1622 gParcelMgr->notifyObservers(); 1588 LLViewerParcelMgr::getInstance()->notifyObservers();
1623 } 1589 }
1624 } 1590 }
1625 else if (sequence_id == COLLISION_NOT_IN_GROUP_PARCEL_SEQ_ID || 1591 else if (sequence_id == COLLISION_NOT_IN_GROUP_PARCEL_SEQ_ID ||
@@ -1627,32 +1593,32 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
1627 sequence_id == COLLISION_BANNED_PARCEL_SEQ_ID) 1593 sequence_id == COLLISION_BANNED_PARCEL_SEQ_ID)
1628 { 1594 {
1629 // We're about to collide with this parcel 1595 // We're about to collide with this parcel
1630 gParcelMgr->mRenderCollision = TRUE; 1596 LLViewerParcelMgr::getInstance()->mRenderCollision = TRUE;
1631 gParcelMgr->mCollisionTimer.reset(); 1597 LLViewerParcelMgr::getInstance()->mCollisionTimer.reset();
1632 1598
1633 // Differentiate this parcel if we are banned from it. 1599 // Differentiate this parcel if we are banned from it.
1634 if (sequence_id == COLLISION_BANNED_PARCEL_SEQ_ID) 1600 if (sequence_id == COLLISION_BANNED_PARCEL_SEQ_ID)
1635 { 1601 {
1636 gParcelMgr->mCollisionBanned = BA_BANNED; 1602 LLViewerParcelMgr::getInstance()->mCollisionBanned = BA_BANNED;
1637 } 1603 }
1638 else if (sequence_id == COLLISION_NOT_IN_GROUP_PARCEL_SEQ_ID) 1604 else if (sequence_id == COLLISION_NOT_IN_GROUP_PARCEL_SEQ_ID)
1639 { 1605 {
1640 gParcelMgr->mCollisionBanned = BA_NOT_IN_GROUP; 1606 LLViewerParcelMgr::getInstance()->mCollisionBanned = BA_NOT_IN_GROUP;
1641 } 1607 }
1642 else 1608 else
1643 { 1609 {
1644 gParcelMgr->mCollisionBanned = BA_NOT_ON_LIST; 1610 LLViewerParcelMgr::getInstance()->mCollisionBanned = BA_NOT_ON_LIST;
1645 1611
1646 } 1612 }
1647 1613
1648 S32 bitmap_size = gParcelMgr->mParcelsPerEdge 1614 S32 bitmap_size = LLViewerParcelMgr::getInstance()->mParcelsPerEdge
1649 * gParcelMgr->mParcelsPerEdge 1615 * LLViewerParcelMgr::getInstance()->mParcelsPerEdge
1650 / 8; 1616 / 8;
1651 U8* bitmap = new U8[ bitmap_size ]; 1617 U8* bitmap = new U8[ bitmap_size ];
1652 msg->getBinaryDataFast(_PREHASH_ParcelData, _PREHASH_Bitmap, bitmap, bitmap_size); 1618 msg->getBinaryDataFast(_PREHASH_ParcelData, _PREHASH_Bitmap, bitmap, bitmap_size);
1653 1619
1654 gParcelMgr->resetSegments(gParcelMgr->mCollisionSegments); 1620 LLViewerParcelMgr::getInstance()->resetSegments(LLViewerParcelMgr::getInstance()->mCollisionSegments);
1655 gParcelMgr->writeSegmentsFromBitmap( bitmap, gParcelMgr->mCollisionSegments ); 1621 LLViewerParcelMgr::getInstance()->writeSegmentsFromBitmap( bitmap, LLViewerParcelMgr::getInstance()->mCollisionSegments );
1656 1622
1657 delete[] bitmap; 1623 delete[] bitmap;
1658 bitmap = NULL; 1624 bitmap = NULL;
@@ -1660,16 +1626,16 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
1660 } 1626 }
1661 else if (sequence_id == HOVERED_PARCEL_SEQ_ID) 1627 else if (sequence_id == HOVERED_PARCEL_SEQ_ID)
1662 { 1628 {
1663 LLViewerRegion *region = gWorldp->getRegion( msg->getSender() ); 1629 LLViewerRegion *region = LLWorld::getInstance()->getRegion( msg->getSender() );
1664 if (region) 1630 if (region)
1665 { 1631 {
1666 gParcelMgr->mHoverWestSouth = region->getPosGlobalFromRegion( aabb_min ); 1632 LLViewerParcelMgr::getInstance()->mHoverWestSouth = region->getPosGlobalFromRegion( aabb_min );
1667 gParcelMgr->mHoverEastNorth = region->getPosGlobalFromRegion( aabb_max ); 1633 LLViewerParcelMgr::getInstance()->mHoverEastNorth = region->getPosGlobalFromRegion( aabb_max );
1668 } 1634 }
1669 else 1635 else
1670 { 1636 {
1671 gParcelMgr->mHoverWestSouth.clearVec(); 1637 LLViewerParcelMgr::getInstance()->mHoverWestSouth.clearVec();
1672 gParcelMgr->mHoverEastNorth.clearVec(); 1638 LLViewerParcelMgr::getInstance()->mHoverEastNorth.clearVec();
1673 } 1639 }
1674 } 1640 }
1675 else 1641 else
@@ -1724,15 +1690,7 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
1724 1690
1725void optionally_start_music(const LLString& music_url) 1691void optionally_start_music(const LLString& music_url)
1726{ 1692{
1727 if (gSavedSettings.getWarning("FirstStreamingMusic")) 1693 if (gSavedSettings.getBOOL("AudioStreamingMusic"))
1728 {
1729 std::string* newstring = new std::string(music_url);
1730 gViewerWindow->alertXml("ParcelCanPlayMusic",
1731 callback_start_music,
1732 (void*)newstring);
1733
1734 }
1735 else if (gSavedSettings.getBOOL("AudioStreamingMusic"))
1736 { 1694 {
1737 // Make the user click the start button on the overlay bar. JC 1695 // Make the user click the start button on the overlay bar. JC
1738 // llinfos << "Starting parcel music " << music_url << llendl; 1696 // llinfos << "Starting parcel music " << music_url << llendl;
@@ -1746,31 +1704,6 @@ void optionally_start_music(const LLString& music_url)
1746 } 1704 }
1747} 1705}
1748 1706
1749
1750void callback_start_music(S32 option, void* data)
1751{
1752 std::string* music_url = (std::string*)data;
1753
1754 if (0 == option)
1755 {
1756 gSavedSettings.setBOOL("AudioStreamingMusic", TRUE);
1757 llinfos << "Starting first parcel music " << music_url << llendl;
1758 if ( gOverlayBar && gOverlayBar->musicPlaying())
1759 {
1760 gAudiop->startInternetStream(music_url->c_str());
1761 }
1762 }
1763 else
1764 {
1765 gSavedSettings.setBOOL("AudioStreamingMusic", FALSE);
1766 }
1767
1768 gSavedSettings.setWarning("FirstStreamingMusic", FALSE);
1769
1770 delete music_url;
1771 music_url = NULL;
1772}
1773
1774// static 1707// static
1775void LLViewerParcelMgr::processParcelAccessListReply(LLMessageSystem *msg, void **user) 1708void LLViewerParcelMgr::processParcelAccessListReply(LLMessageSystem *msg, void **user)
1776{ 1709{
@@ -1784,7 +1717,7 @@ void LLViewerParcelMgr::processParcelAccessListReply(LLMessageSystem *msg, void
1784 msg->getU32Fast( _PREHASH_Data, _PREHASH_Flags, message_flags); 1717 msg->getU32Fast( _PREHASH_Data, _PREHASH_Flags, message_flags);
1785 msg->getS32Fast( _PREHASH_Data, _PREHASH_LocalID, parcel_id); 1718 msg->getS32Fast( _PREHASH_Data, _PREHASH_LocalID, parcel_id);
1786 1719
1787 LLParcel* parcel = gParcelMgr->mCurrentParcel; 1720 LLParcel* parcel = LLViewerParcelMgr::getInstance()->mCurrentParcel;
1788 if (!parcel) return; 1721 if (!parcel) return;
1789 1722
1790 if (parcel_id != parcel->getLocalID()) 1723 if (parcel_id != parcel->getLocalID())
@@ -1807,7 +1740,7 @@ void LLViewerParcelMgr::processParcelAccessListReply(LLMessageSystem *msg, void
1807 parcel->unpackAccessEntries(msg, &(parcel->mRenterList) ); 1740 parcel->unpackAccessEntries(msg, &(parcel->mRenterList) );
1808 }*/ 1741 }*/
1809 1742
1810 gParcelMgr->notifyObservers(); 1743 LLViewerParcelMgr::getInstance()->notifyObservers();
1811} 1744}
1812 1745
1813 1746
@@ -1826,10 +1759,10 @@ void LLViewerParcelMgr::processParcelDwellReply(LLMessageSystem* msg, void**)
1826 F32 dwell; 1759 F32 dwell;
1827 msg->getF32("Data", "Dwell", dwell); 1760 msg->getF32("Data", "Dwell", dwell);
1828 1761
1829 if (local_id == gParcelMgr->mCurrentParcel->getLocalID()) 1762 if (local_id == LLViewerParcelMgr::getInstance()->mCurrentParcel->getLocalID())
1830 { 1763 {
1831 gParcelMgr->mSelectedDwell = dwell; 1764 LLViewerParcelMgr::getInstance()->mSelectedDwell = dwell;
1832 gParcelMgr->notifyObservers(); 1765 LLViewerParcelMgr::getInstance()->notifyObservers();
1833 } 1766 }
1834} 1767}
1835 1768
@@ -1845,8 +1778,7 @@ void LLViewerParcelMgr::sendParcelAccessListUpdate(U32 which)
1845 return; 1778 return;
1846 } 1779 }
1847 1780
1848 if(!gWorldp) return; 1781 LLViewerRegion* region = LLWorld::getInstance()->getRegionFromPosGlobal( mWestSouth );
1849 LLViewerRegion* region = gWorldp->getRegionFromPosGlobal( mWestSouth );
1850 if (!region) return; 1782 if (!region) return;
1851 1783
1852 LLMessageSystem* msg = gMessageSystem; 1784 LLMessageSystem* msg = gMessageSystem;
@@ -1995,13 +1927,13 @@ void LLViewerParcelMgr::deedAlertCB(S32 option, void*)
1995{ 1927{
1996 if (option == 0) 1928 if (option == 0)
1997 { 1929 {
1998 LLParcel* parcel = gParcelMgr->getParcelSelection()->getParcel(); 1930 LLParcel* parcel = LLViewerParcelMgr::getInstance()->getParcelSelection()->getParcel();
1999 LLUUID group_id; 1931 LLUUID group_id;
2000 if(parcel) 1932 if(parcel)
2001 { 1933 {
2002 group_id = parcel->getGroupID(); 1934 group_id = parcel->getGroupID();
2003 } 1935 }
2004 gParcelMgr->sendParcelDeed(group_id); 1936 LLViewerParcelMgr::getInstance()->sendParcelDeed(group_id);
2005 } 1937 }
2006} 1938}
2007 1939
@@ -2034,8 +1966,7 @@ void LLViewerParcelMgr::startReleaseLand()
2034 } 1966 }
2035 1967
2036 LLVector3d parcel_center = (mWestSouth + mEastNorth) / 2.0; 1968 LLVector3d parcel_center = (mWestSouth + mEastNorth) / 2.0;
2037 if(!gWorldp) return; 1969 LLViewerRegion* region = LLWorld::getInstance()->getRegionFromPosGlobal(parcel_center);
2038 LLViewerRegion* region = gWorldp->getRegionFromPosGlobal(parcel_center);
2039 if (!region) 1970 if (!region)
2040 { 1971 {
2041 gViewerWindow->alertXml("CannotReleaseLandRegionNotFound"); 1972 gViewerWindow->alertXml("CannotReleaseLandRegionNotFound");
@@ -2139,8 +2070,7 @@ void LLViewerParcelMgr::callbackDivideLand(S32 option, void* data)
2139 LLViewerParcelMgr* self = (LLViewerParcelMgr*)data; 2070 LLViewerParcelMgr* self = (LLViewerParcelMgr*)data;
2140 2071
2141 LLVector3d parcel_center = (self->mWestSouth + self->mEastNorth) / 2.0; 2072 LLVector3d parcel_center = (self->mWestSouth + self->mEastNorth) / 2.0;
2142 if(!gWorldp) return; 2073 LLViewerRegion* region = LLWorld::getInstance()->getRegionFromPosGlobal(parcel_center);
2143 LLViewerRegion* region = gWorldp->getRegionFromPosGlobal(parcel_center);
2144 if (!region) 2074 if (!region)
2145 { 2075 {
2146 gViewerWindow->alertXml("CannotDivideLandNoRegion"); 2076 gViewerWindow->alertXml("CannotDivideLandNoRegion");
@@ -2198,8 +2128,7 @@ void LLViewerParcelMgr::callbackJoinLand(S32 option, void* data)
2198 LLViewerParcelMgr* self = (LLViewerParcelMgr*)data; 2128 LLViewerParcelMgr* self = (LLViewerParcelMgr*)data;
2199 2129
2200 LLVector3d parcel_center = (self->mWestSouth + self->mEastNorth) / 2.0; 2130 LLVector3d parcel_center = (self->mWestSouth + self->mEastNorth) / 2.0;
2201 if(!gWorldp) return; 2131 LLViewerRegion* region = LLWorld::getInstance()->getRegionFromPosGlobal(parcel_center);
2202 LLViewerRegion* region = gWorldp->getRegionFromPosGlobal(parcel_center);
2203 if (!region) 2132 if (!region)
2204 { 2133 {
2205 gViewerWindow->alertXml("CannotJoinLandNoRegion"); 2134 gViewerWindow->alertXml("CannotJoinLandNoRegion");
@@ -2247,8 +2176,7 @@ void LLViewerParcelMgr::startDeedLandToGroup()
2247 } 2176 }
2248 2177
2249 LLVector3d parcel_center = (mWestSouth + mEastNorth) / 2.0; 2178 LLVector3d parcel_center = (mWestSouth + mEastNorth) / 2.0;
2250 if(!gWorldp) return; 2179 LLViewerRegion* region = LLWorld::getInstance()->getRegionFromPosGlobal(parcel_center);
2251 LLViewerRegion* region = gWorldp->getRegionFromPosGlobal(parcel_center);
2252 if (!region) 2180 if (!region)
2253 { 2181 {
2254 gViewerWindow->alertXml("CannotDeedLandNoRegion"); 2182 gViewerWindow->alertXml("CannotDeedLandNoRegion");
@@ -2273,8 +2201,8 @@ void LLViewerParcelMgr::startDeedLandToGroup()
2273} 2201}
2274void LLViewerParcelMgr::reclaimParcel() 2202void LLViewerParcelMgr::reclaimParcel()
2275{ 2203{
2276 LLParcel* parcel = gParcelMgr->getParcelSelection()->getParcel(); 2204 LLParcel* parcel = LLViewerParcelMgr::getInstance()->getParcelSelection()->getParcel();
2277 LLViewerRegion* regionp = gParcelMgr->getSelectionRegion(); 2205 LLViewerRegion* regionp = LLViewerParcelMgr::getInstance()->getSelectionRegion();
2278 if(parcel && parcel->getOwnerID().notNull() 2206 if(parcel && parcel->getOwnerID().notNull()
2279 && (parcel->getOwnerID() != gAgent.getID()) 2207 && (parcel->getOwnerID() != gAgent.getID())
2280 && regionp && (regionp->getOwner() == gAgent.getID())) 2208 && regionp && (regionp->getOwner() == gAgent.getID()))
@@ -2296,7 +2224,7 @@ void LLViewerParcelMgr::releaseAlertCB(S32 option, void *)
2296 if (option == 0) 2224 if (option == 0)
2297 { 2225 {
2298 // Send the release message, not a force 2226 // Send the release message, not a force
2299 gParcelMgr->sendParcelRelease(); 2227 LLViewerParcelMgr::getInstance()->sendParcelRelease();
2300 } 2228 }
2301} 2229}
2302 2230
@@ -2399,8 +2327,6 @@ void sanitize_corners(const LLVector3d &corner1,
2399 2327
2400void LLViewerParcelMgr::cleanupGlobals() 2328void LLViewerParcelMgr::cleanupGlobals()
2401{ 2329{
2402 delete gParcelMgr;
2403 gParcelMgr = NULL;
2404 LLParcelSelection::sNullSelection = NULL; 2330 LLParcelSelection::sNullSelection = NULL;
2405} 2331}
2406 2332
diff --git a/linden/indra/newview/llviewerparcelmgr.h b/linden/indra/newview/llviewerparcelmgr.h
index 5847343..319bbc6 100644
--- a/linden/indra/newview/llviewerparcelmgr.h
+++ b/linden/indra/newview/llviewerparcelmgr.h
@@ -37,6 +37,7 @@
37#include "llframetimer.h" 37#include "llframetimer.h"
38#include "llmemory.h" 38#include "llmemory.h"
39#include "llparcelselection.h" 39#include "llparcelselection.h"
40#include "llui.h"
40 41
41class LLUUID; 42class LLUUID;
42class LLMessageSystem; 43class LLMessageSystem;
@@ -73,8 +74,7 @@ public:
73 virtual void changed() = 0; 74 virtual void changed() = 0;
74}; 75};
75 76
76 77class LLViewerParcelMgr : public LLSingleton<LLViewerParcelMgr>
77class LLViewerParcelMgr
78{ 78{
79 79
80public: 80public:
@@ -325,15 +325,14 @@ private:
325 BOOL mRenderSelection; 325 BOOL mRenderSelection;
326 S32 mCollisionBanned; 326 S32 mCollisionBanned;
327 LLFrameTimer mCollisionTimer; 327 LLFrameTimer mCollisionTimer;
328 LLUUID mBlockedImageID; 328 LLImageGL* mBlockedImage;
329 LLUUID mPassImageID; 329 LLImageGL* mPassImage;
330 330
331 // Media 331 // Media
332 S32 mMediaParcelId; 332 S32 mMediaParcelId;
333 U64 mMediaRegionId; 333 U64 mMediaRegionId;
334}; 334};
335 335
336extern LLViewerParcelMgr *gParcelMgr;
337 336
338void sanitize_corners(const LLVector3d &corner1, const LLVector3d &corner2, 337void sanitize_corners(const LLVector3d &corner1, const LLVector3d &corner2,
339 LLVector3d &west_south_bottom, LLVector3d &east_north_top); 338 LLVector3d &west_south_bottom, LLVector3d &east_north_top);
diff --git a/linden/indra/newview/llviewerparceloverlay.cpp b/linden/indra/newview/llviewerparceloverlay.cpp
index 281b644..ad34b6a 100644
--- a/linden/indra/newview/llviewerparceloverlay.cpp
+++ b/linden/indra/newview/llviewerparceloverlay.cpp
@@ -58,7 +58,6 @@ LLViewerParcelOverlay::LLViewerParcelOverlay(LLViewerRegion* region, F32 region_
58 mDirty( FALSE ), 58 mDirty( FALSE ),
59 mTimeSinceLastUpdate(), 59 mTimeSinceLastUpdate(),
60 mOverlayTextureIdx(-1), 60 mOverlayTextureIdx(-1),
61 mLineImageID( gViewerArt.getString("propertyline.tga") ),
62 mVertexCount(0), 61 mVertexCount(0),
63 mVertexArray(NULL), 62 mVertexArray(NULL),
64 mColorArray(NULL) 63 mColorArray(NULL)
@@ -750,20 +749,15 @@ S32 LLViewerParcelOverlay::renderPropertyLines ()
750 LLGLSNoTexture gls_no_texture; 749 LLGLSNoTexture gls_no_texture;
751 LLGLDepthTest mDepthTest(GL_TRUE); 750 LLGLDepthTest mDepthTest(GL_TRUE);
752 751
753 // JC - This doesn't work.
754 //gGLSUITextureDepth.set();
755 //LLViewerImage* image = gImageList.getImage( mLineImageID );
756 //image->bindTexture();
757
758 // Find camera height off the ground (not from zero) 752 // Find camera height off the ground (not from zero)
759 F32 ground_height_at_camera = land.resolveHeightGlobal( gAgent.getCameraPositionGlobal() ); 753 F32 ground_height_at_camera = land.resolveHeightGlobal( gAgent.getCameraPositionGlobal() );
760 F32 camera_z = gCamera->getOrigin().mV[VZ]; 754 F32 camera_z = LLViewerCamera::getInstance()->getOrigin().mV[VZ];
761 F32 camera_height = camera_z - ground_height_at_camera; 755 F32 camera_height = camera_z - ground_height_at_camera;
762 756
763 camera_height = llclamp(camera_height, 0.f, 100.f); 757 camera_height = llclamp(camera_height, 0.f, 100.f);
764 758
765 // Pull lines toward camera by 1 cm per meter off the ground. 759 // Pull lines toward camera by 1 cm per meter off the ground.
766 const LLVector3& CAMERA_AT = gCamera->getAtAxis(); 760 const LLVector3& CAMERA_AT = LLViewerCamera::getInstance()->getAtAxis();
767 F32 pull_toward_camera_scale = 0.01f * camera_height; 761 F32 pull_toward_camera_scale = 0.01f * camera_height;
768 LLVector3 pull_toward_camera = CAMERA_AT; 762 LLVector3 pull_toward_camera = CAMERA_AT;
769 pull_toward_camera *= -pull_toward_camera_scale; 763 pull_toward_camera *= -pull_toward_camera_scale;
@@ -791,7 +785,7 @@ S32 LLViewerParcelOverlay::renderPropertyLines ()
791 785
792 // Set up a cull plane 2 * PARCEL_GRID_STEP_METERS behind 786 // Set up a cull plane 2 * PARCEL_GRID_STEP_METERS behind
793 // the camera. The cull plane normal is the camera's at axis. 787 // the camera. The cull plane normal is the camera's at axis.
794 LLVector3 cull_plane_point = gCamera->getAtAxis(); 788 LLVector3 cull_plane_point = LLViewerCamera::getInstance()->getAtAxis();
795 cull_plane_point *= -2.f * PARCEL_GRID_STEP_METERS; 789 cull_plane_point *= -2.f * PARCEL_GRID_STEP_METERS;
796 cull_plane_point += camera_region; 790 cull_plane_point += camera_region;
797 791
diff --git a/linden/indra/newview/llviewerparceloverlay.h b/linden/indra/newview/llviewerparceloverlay.h
index 40e488f..8d1d3d2 100644
--- a/linden/indra/newview/llviewerparceloverlay.h
+++ b/linden/indra/newview/llviewerparceloverlay.h
@@ -111,7 +111,6 @@ private:
111 LLFrameTimer mTimeSinceLastUpdate; 111 LLFrameTimer mTimeSinceLastUpdate;
112 S32 mOverlayTextureIdx; 112 S32 mOverlayTextureIdx;
113 113
114 LLUUID mLineImageID;
115 S32 mVertexCount; 114 S32 mVertexCount;
116 F32* mVertexArray; 115 F32* mVertexArray;
117 U8* mColorArray; 116 U8* mColorArray;
diff --git a/linden/indra/newview/llviewerpartsim.cpp b/linden/indra/newview/llviewerpartsim.cpp
index 267f0c8..1788a7c 100644
--- a/linden/indra/newview/llviewerpartsim.cpp
+++ b/linden/indra/newview/llviewerpartsim.cpp
@@ -70,7 +70,7 @@ U32 LLViewerPart::sNextPartID = 1;
70 70
71F32 calc_desired_size(LLVector3 pos, LLVector2 scale) 71F32 calc_desired_size(LLVector3 pos, LLVector2 scale)
72{ 72{
73 F32 desired_size = (pos-gCamera->getOrigin()).magVec(); 73 F32 desired_size = (pos-LLViewerCamera::getInstance()->getOrigin()).magVec();
74 desired_size /= 4; 74 desired_size /= 4;
75 return llclamp(desired_size, scale.magVec()*0.5f, PART_SIM_BOX_SIDE*2); 75 return llclamp(desired_size, scale.magVec()*0.5f, PART_SIM_BOX_SIDE*2);
76} 76}
@@ -121,7 +121,7 @@ LLViewerPartGroup::LLViewerPartGroup(const LLVector3 &center_agent, const F32 bo
121 mVOPartGroupp = NULL; 121 mVOPartGroupp = NULL;
122 mUniformParticles = TRUE; 122 mUniformParticles = TRUE;
123 123
124 mRegionp = gWorldPointer->getRegionFromPosAgent(center_agent); 124 mRegionp = LLWorld::getInstance()->getRegionFromPosAgent(center_agent);
125 llassert_always(center_agent.isFinite()); 125 llassert_always(center_agent.isFinite());
126 126
127 if (!mRegionp) 127 if (!mRegionp)
@@ -243,7 +243,7 @@ void LLViewerPartGroup::updateParticles(const F32 lastdt)
243 S32 i; 243 S32 i;
244 F32 dt; 244 F32 dt;
245 245
246 LLVector3 gravity(0.f, 0.f, -9.8f); 246 LLVector3 gravity(0.f, 0.f, GRAVITY);
247 247
248 LLViewerRegion *regionp = getRegion(); 248 LLViewerRegion *regionp = getRegion();
249 S32 end = (S32) mParticles.size(); 249 S32 end = (S32) mParticles.size();
@@ -371,7 +371,7 @@ void LLViewerPartGroup::updateParticles(const F32 lastdt)
371 if (!posInGroup(part.mPosAgent, desired_size)) 371 if (!posInGroup(part.mPosAgent, desired_size))
372 { 372 {
373 // Transfer particles between groups 373 // Transfer particles between groups
374 gWorldPointer->mPartSim.put(&part); 374 LLViewerPartSim::getInstance()->put(&part);
375 end--; 375 end--;
376 LLPointer<LLViewerPart>::swap(mParticles[i], mParticles[end]); 376 LLPointer<LLViewerPart>::swap(mParticles[i], mParticles[end]);
377 // be sure to process the particle we just swapped-in 377 // be sure to process the particle we just swapped-in
@@ -445,7 +445,7 @@ LLViewerPartSim::LLViewerPartSim()
445} 445}
446 446
447 447
448LLViewerPartSim::~LLViewerPartSim() 448void LLViewerPartSim::destroyClass()
449{ 449{
450 LLMemType mt(LLMemType::MTYPE_PARTICLES); 450 LLMemType mt(LLMemType::MTYPE_PARTICLES);
451 S32 i; 451 S32 i;
diff --git a/linden/indra/newview/llviewerpartsim.h b/linden/indra/newview/llviewerpartsim.h
index 42d3fd7..cea7024 100644
--- a/linden/indra/newview/llviewerpartsim.h
+++ b/linden/indra/newview/llviewerpartsim.h
@@ -35,12 +35,11 @@
35#include "lldarrayptr.h" 35#include "lldarrayptr.h"
36#include "llframetimer.h" 36#include "llframetimer.h"
37#include "llmemory.h" 37#include "llmemory.h"
38
39#include "llpartdata.h" 38#include "llpartdata.h"
39#include "llviewerpartsource.h"
40 40
41class LLViewerImage; 41class LLViewerImage;
42class LLViewerPart; 42class LLViewerPart;
43class LLViewerPartSource;
44class LLViewerRegion; 43class LLViewerRegion;
45class LLViewerImage; 44class LLViewerImage;
46class LLVOPartGroup; 45class LLVOPartGroup;
@@ -126,11 +125,12 @@ protected:
126 LLViewerRegion *mRegionp; 125 LLViewerRegion *mRegionp;
127}; 126};
128 127
129class LLViewerPartSim 128class LLViewerPartSim : public LLSingleton<LLViewerPartSim>
130{ 129{
131public: 130public:
132 LLViewerPartSim(); 131 LLViewerPartSim();
133 virtual ~LLViewerPartSim(); 132 virtual ~LLViewerPartSim(){}
133 void destroyClass();
134 134
135 typedef std::vector<LLViewerPartGroup *> group_list_t; 135 typedef std::vector<LLViewerPartGroup *> group_list_t;
136 typedef std::vector<LLPointer<LLViewerPartSource> > source_list_t; 136 typedef std::vector<LLPointer<LLViewerPartSource> > source_list_t;
diff --git a/linden/indra/newview/llviewerpartsource.cpp b/linden/indra/newview/llviewerpartsource.cpp
index 0f30edf..040d108 100644
--- a/linden/indra/newview/llviewerpartsource.cpp
+++ b/linden/indra/newview/llviewerpartsource.cpp
@@ -98,9 +98,7 @@ LLViewerPartSourceScript::LLViewerPartSourceScript(LLViewerObject *source_objp)
98 llassert(source_objp); 98 llassert(source_objp);
99 mSourceObjectp = source_objp; 99 mSourceObjectp = source_objp;
100 mPosAgent = mSourceObjectp->getPositionAgent(); 100 mPosAgent = mSourceObjectp->getPositionAgent();
101 LLUUID id; 101 mImagep = gImageList.getImageFromFile("pixiesmall.j2c");
102 id.set( gViewerArt.getString("pixiesmall.tga") );
103 mImagep = gImageList.getImage(id);
104 mImagep->bind(); 102 mImagep->bind();
105 mImagep->setClamp(TRUE, TRUE); 103 mImagep->setClamp(TRUE, TRUE);
106} 104}
@@ -123,7 +121,7 @@ void LLViewerPartSourceScript::update(const F32 dt)
123 F32 old_update_time = mLastUpdateTime; 121 F32 old_update_time = mLastUpdateTime;
124 mLastUpdateTime += dt; 122 mLastUpdateTime += dt;
125 123
126 F32 ref_rate_travelspeed = llmin(gWorldPointer->mPartSim.getRefRate(), 1.f); 124 F32 ref_rate_travelspeed = llmin(LLViewerPartSim::getInstance()->getRefRate(), 1.f);
127 125
128 F32 dt_update = mLastUpdateTime - mLastPartTime; 126 F32 dt_update = mLastUpdateTime - mLastPartTime;
129 127
@@ -213,7 +211,7 @@ void LLViewerPartSourceScript::update(const F32 dt)
213 mRotation.setQuat(0, 0, 0); 211 mRotation.setQuat(0, 0, 0);
214 } 212 }
215 213
216 if (gWorldPointer->mPartSim.aboveParticleLimit()) 214 if (LLViewerPartSim::getInstance()->aboveParticleLimit())
217 { 215 {
218 // Don't bother doing any more updates if we're above the particle limit, 216 // Don't bother doing any more updates if we're above the particle limit,
219 // just give up. 217 // just give up.
@@ -235,7 +233,7 @@ void LLViewerPartSourceScript::update(const F32 dt)
235 (mPartSysData.mPartData.mStartScale[1] 233 (mPartSysData.mPartData.mStartScale[1]
236 + mPartSysData.mPartData.mEndScale[1])/2)); 234 + mPartSysData.mPartData.mEndScale[1])/2));
237 235
238 F32 pixel_meter_ratio = gCamera->getPixelMeterRatio(); 236 F32 pixel_meter_ratio = LLViewerCamera::getInstance()->getPixelMeterRatio();
239 237
240 // Maximum distance at which spawned particles will be viewable 238 // Maximum distance at which spawned particles will be viewable
241 F32 max_dist = max_short_side * pixel_meter_ratio; 239 F32 max_dist = max_short_side * pixel_meter_ratio;
@@ -250,7 +248,7 @@ void LLViewerPartSourceScript::update(const F32 dt)
250 } 248 }
251 249
252 // Distance from camera 250 // Distance from camera
253 F32 dist = (mPosAgent - gCamera->getOrigin()).magVec(); 251 F32 dist = (mPosAgent - LLViewerCamera::getInstance()->getOrigin()).magVec();
254 252
255 // Particle size vs distance vs maxage throttling 253 // Particle size vs distance vs maxage throttling
256 254
@@ -267,14 +265,14 @@ void LLViewerPartSourceScript::update(const F32 dt)
267 } 265 }
268 266
269 if(mDelay) 267 if(mDelay)
270 { 268 {
271 limited_rate = llmax(limited_rate, 0.01f * mDelay--) ; 269 limited_rate = llmax(limited_rate, 0.01f * mDelay--) ;
272 } 270 }
273 271
274 S32 i; 272 S32 i;
275 for (i = 0; i < mPartSysData.mBurstPartCount; i++) 273 for (i = 0; i < mPartSysData.mBurstPartCount; i++)
276 { 274 {
277 if (ll_frand() < llmax(1.0f - gWorldPointer->mPartSim.getBurstRate(), limited_rate)) 275 if (ll_frand() < llmax(1.0f - LLViewerPartSim::getInstance()->getBurstRate(), limited_rate))
278 { 276 {
279 // Limit particle generation 277 // Limit particle generation
280 continue; 278 continue;
@@ -385,7 +383,7 @@ void LLViewerPartSourceScript::update(const F32 dt)
385 mPartSysData.mBurstRadius = 0; 383 mPartSysData.mBurstRadius = 0;
386 } 384 }
387 385
388 gWorldPointer->mPartSim.addPart(part); 386 LLViewerPartSim::getInstance()->addPart(part);
389 } 387 }
390 388
391 mLastPartTime = mLastUpdateTime; 389 mLastPartTime = mLastUpdateTime;
@@ -528,9 +526,7 @@ void LLViewerPartSourceSpiral::update(const F32 dt)
528 LLMemType mt(LLMemType::MTYPE_PARTICLES); 526 LLMemType mt(LLMemType::MTYPE_PARTICLES);
529 if (!mImagep) 527 if (!mImagep)
530 { 528 {
531 LLUUID id; 529 mImagep = gImageList.getImageFromFile("pixiesmall.j2c");
532 id.set( gViewerArt.getString("pixiesmall.tga") );
533 mImagep = gImageList.getImage(id);
534 } 530 }
535 531
536 const F32 RATE = 0.025f; 532 const F32 RATE = 0.025f;
@@ -544,7 +540,7 @@ void LLViewerPartSourceSpiral::update(const F32 dt)
544 if (dt_update > RATE) 540 if (dt_update > RATE)
545 { 541 {
546 mLastPartTime = mLastUpdateTime; 542 mLastPartTime = mLastUpdateTime;
547 if (!gWorldPointer->mPartSim.shouldAddPart()) 543 if (!LLViewerPartSim::getInstance()->shouldAddPart())
548 { 544 {
549 // Particle simulation says we have too many particles, skip all this 545 // Particle simulation says we have too many particles, skip all this
550 return; 546 return;
@@ -567,7 +563,7 @@ void LLViewerPartSourceSpiral::update(const F32 dt)
567 part->mScale.mV[1] = 0.25f; 563 part->mScale.mV[1] = 0.25f;
568 part->mParameter = ll_frand(F_TWO_PI); 564 part->mParameter = ll_frand(F_TWO_PI);
569 565
570 gWorldPointer->mPartSim.addPart(part); 566 LLViewerPartSim::getInstance()->addPart(part);
571 } 567 }
572} 568}
573 569
@@ -691,7 +687,7 @@ void LLViewerPartSourceBeam::update(const F32 dt)
691 if (dt_update > RATE) 687 if (dt_update > RATE)
692 { 688 {
693 mLastPartTime = mLastUpdateTime; 689 mLastPartTime = mLastUpdateTime;
694 if (!gWorldPointer->mPartSim.shouldAddPart()) 690 if (!LLViewerPartSim::getInstance()->shouldAddPart())
695 { 691 {
696 // Particle simulation says we have too many particles, skip all this 692 // Particle simulation says we have too many particles, skip all this
697 return; 693 return;
@@ -699,9 +695,7 @@ void LLViewerPartSourceBeam::update(const F32 dt)
699 695
700 if (!mImagep) 696 if (!mImagep)
701 { 697 {
702 LLUUID id; 698 mImagep = gImageList.getImageFromFile("pixiesmall.j2c");
703 id.set( gViewerArt.getString("pixiesmall.tga") );
704 mImagep = gImageList.getImage(id);
705 } 699 }
706 700
707 LLPointer<LLViewerPart> part = new LLViewerPart(); 701 LLPointer<LLViewerPart> part = new LLViewerPart();
@@ -724,7 +718,7 @@ void LLViewerPartSourceBeam::update(const F32 dt)
724 part->mPosAgent = mPosAgent; 718 part->mPosAgent = mPosAgent;
725 part->mVelocity = mTargetPosAgent - mPosAgent; 719 part->mVelocity = mTargetPosAgent - mPosAgent;
726 720
727 gWorldPointer->mPartSim.addPart(part); 721 LLViewerPartSim::getInstance()->addPart(part);
728 } 722 }
729} 723}
730 724
@@ -787,9 +781,7 @@ void LLViewerPartSourceChat::update(const F32 dt)
787 LLMemType mt(LLMemType::MTYPE_PARTICLES); 781 LLMemType mt(LLMemType::MTYPE_PARTICLES);
788 if (!mImagep) 782 if (!mImagep)
789 { 783 {
790 LLUUID id; 784 mImagep = gImageList.getImageFromFile("pixiesmall.j2c");
791 id.set( gViewerArt.getString("pixiesmall.tga") );
792 mImagep = gImageList.getImage(id);
793 } 785 }
794 786
795 787
@@ -813,7 +805,7 @@ void LLViewerPartSourceChat::update(const F32 dt)
813 if (dt_update > RATE) 805 if (dt_update > RATE)
814 { 806 {
815 mLastPartTime = mLastUpdateTime; 807 mLastPartTime = mLastUpdateTime;
816 if (!gWorldPointer->mPartSim.shouldAddPart()) 808 if (!LLViewerPartSim::getInstance()->shouldAddPart())
817 { 809 {
818 // Particle simulation says we have too many particles, skip all this 810 // Particle simulation says we have too many particles, skip all this
819 return; 811 return;
@@ -836,7 +828,7 @@ void LLViewerPartSourceChat::update(const F32 dt)
836 part->mScale.mV[1] = 0.25f; 828 part->mScale.mV[1] = 0.25f;
837 part->mParameter = ll_frand(F_TWO_PI); 829 part->mParameter = ll_frand(F_TWO_PI);
838 830
839 gWorldPointer->mPartSim.addPart(part); 831 LLViewerPartSim::getInstance()->addPart(part);
840 } 832 }
841} 833}
842 834
diff --git a/linden/indra/newview/llviewerregion.cpp b/linden/indra/newview/llviewerregion.cpp
index 1cc6d42..e8ed85f 100644
--- a/linden/indra/newview/llviewerregion.cpp
+++ b/linden/indra/newview/llviewerregion.cpp
@@ -179,7 +179,7 @@ LLViewerRegion::~LLViewerRegion()
179 // This should be reference counted... 179 // This should be reference counted...
180 disconnectAllNeighbors(); 180 disconnectAllNeighbors();
181 mCloudLayer.destroy(); 181 mCloudLayer.destroy();
182 gWorldPointer->mPartSim.cleanupRegion(this); 182 LLViewerPartSim::getInstance()->cleanupRegion(this);
183 183
184 gObjectList.killObjects(this); 184 gObjectList.killObjects(this);
185 185
@@ -626,7 +626,7 @@ F32 LLViewerRegion::getCompositionXY(const S32 x, const S32 y) const
626 if (y >= 256) 626 if (y >= 256)
627 { 627 {
628 LLVector3d center = getCenterGlobal() + LLVector3d(256.f, 256.f, 0.f); 628 LLVector3d center = getCenterGlobal() + LLVector3d(256.f, 256.f, 0.f);
629 LLViewerRegion *regionp = gWorldPointer->getRegionFromPosGlobal(center); 629 LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromPosGlobal(center);
630 if (regionp) 630 if (regionp)
631 { 631 {
632 // OK, we need to do some hackery here - different simulators no longer use 632 // OK, we need to do some hackery here - different simulators no longer use
@@ -653,7 +653,7 @@ F32 LLViewerRegion::getCompositionXY(const S32 x, const S32 y) const
653 else 653 else
654 { 654 {
655 LLVector3d center = getCenterGlobal() + LLVector3d(256.f, 0, 0.f); 655 LLVector3d center = getCenterGlobal() + LLVector3d(256.f, 0, 0.f);
656 LLViewerRegion *regionp = gWorldPointer->getRegionFromPosGlobal(center); 656 LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromPosGlobal(center);
657 if (regionp) 657 if (regionp)
658 { 658 {
659 // OK, we need to do some hackery here - different simulators no longer use 659 // OK, we need to do some hackery here - different simulators no longer use
@@ -681,7 +681,7 @@ F32 LLViewerRegion::getCompositionXY(const S32 x, const S32 y) const
681 else if (y >= 256) 681 else if (y >= 256)
682 { 682 {
683 LLVector3d center = getCenterGlobal() + LLVector3d(0.f, 256.f, 0.f); 683 LLVector3d center = getCenterGlobal() + LLVector3d(0.f, 256.f, 0.f);
684 LLViewerRegion *regionp = gWorldPointer->getRegionFromPosGlobal(center); 684 LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromPosGlobal(center);
685 if (regionp) 685 if (regionp)
686 { 686 {
687 // OK, we need to do some hackery here - different simulators no longer use 687 // OK, we need to do some hackery here - different simulators no longer use
@@ -868,9 +868,8 @@ public:
868 const LLSD& context, 868 const LLSD& context,
869 const LLSD& input) const 869 const LLSD& input) const
870 { 870 {
871 if(!gWorldp) return;
872 LLHost host(input["sender"].asString()); 871 LLHost host(input["sender"].asString());
873 LLViewerRegion* region = gWorldp->getRegion(host); 872 LLViewerRegion* region = LLWorld::getInstance()->getRegion(host);
874 if( !region ) 873 if( !region )
875 { 874 {
876 return; 875 return;
@@ -950,6 +949,7 @@ void LLViewerRegion::updateCoarseLocations(LLMessageSystem* msg)
950{ 949{
951 //llinfos << "CoarseLocationUpdate" << llendl; 950 //llinfos << "CoarseLocationUpdate" << llendl;
952 mMapAvatars.reset(); 951 mMapAvatars.reset();
952 mMapAvatarIDs.reset(); // only matters in a rare case but it's good to be safe.
953 953
954 U8 x_pos = 0; 954 U8 x_pos = 0;
955 U8 y_pos = 0; 955 U8 y_pos = 0;
@@ -1382,7 +1382,6 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
1382 capabilityNames.append("MapLayer"); 1382 capabilityNames.append("MapLayer");
1383 capabilityNames.append("MapLayerGod"); 1383 capabilityNames.append("MapLayerGod");
1384 capabilityNames.append("NewFileAgentInventory"); 1384 capabilityNames.append("NewFileAgentInventory");
1385 capabilityNames.append("ParcelGodReserveForNewbie");
1386 capabilityNames.append("ParcelPropertiesUpdate"); 1385 capabilityNames.append("ParcelPropertiesUpdate");
1387 capabilityNames.append("ParcelVoiceInfoRequest"); 1386 capabilityNames.append("ParcelVoiceInfoRequest");
1388 capabilityNames.append("ProvisionVoiceAccountRequest"); 1387 capabilityNames.append("ProvisionVoiceAccountRequest");
diff --git a/linden/indra/newview/llviewerstats.cpp b/linden/indra/newview/llviewerstats.cpp
index dabc971..9f10bbf 100644
--- a/linden/indra/newview/llviewerstats.cpp
+++ b/linden/indra/newview/llviewerstats.cpp
@@ -59,7 +59,6 @@
59 #include "lllcd.h" 59 #include "lllcd.h"
60#endif 60#endif
61 61
62LLViewerStats *gViewerStats = NULL;
63 62
64class StatAttributes 63class StatAttributes
65{ 64{
@@ -223,17 +222,17 @@ LLViewerStats::~LLViewerStats()
223 222
224void LLViewerStats::resetStats() 223void LLViewerStats::resetStats()
225{ 224{
226 gViewerStats->mKBitStat.reset(); 225 LLViewerStats::getInstance()->mKBitStat.reset();
227 gViewerStats->mLayersKBitStat.reset(); 226 LLViewerStats::getInstance()->mLayersKBitStat.reset();
228 gViewerStats->mObjectKBitStat.reset(); 227 LLViewerStats::getInstance()->mObjectKBitStat.reset();
229 gViewerStats->mTextureKBitStat.reset(); 228 LLViewerStats::getInstance()->mTextureKBitStat.reset();
230 gViewerStats->mVFSPendingOperations.reset(); 229 LLViewerStats::getInstance()->mVFSPendingOperations.reset();
231 gViewerStats->mAssetKBitStat.reset(); 230 LLViewerStats::getInstance()->mAssetKBitStat.reset();
232 gViewerStats->mPacketsInStat.reset(); 231 LLViewerStats::getInstance()->mPacketsInStat.reset();
233 gViewerStats->mPacketsLostStat.reset(); 232 LLViewerStats::getInstance()->mPacketsLostStat.reset();
234 gViewerStats->mPacketsOutStat.reset(); 233 LLViewerStats::getInstance()->mPacketsOutStat.reset();
235 gViewerStats->mFPSStat.reset(); 234 LLViewerStats::getInstance()->mFPSStat.reset();
236 gViewerStats->mTexturePacketsStat.reset(); 235 LLViewerStats::getInstance()->mTexturePacketsStat.reset();
237} 236}
238 237
239 238
@@ -511,54 +510,54 @@ void update_statistics(U32 frame_count)
511 { 510 {
512 if (gAgent.getCameraMode() == CAMERA_MODE_MOUSELOOK) 511 if (gAgent.getCameraMode() == CAMERA_MODE_MOUSELOOK)
513 { 512 {
514 gViewerStats->incStat(LLViewerStats::ST_MOUSELOOK_SECONDS, gFrameIntervalSeconds); 513 LLViewerStats::getInstance()->incStat(LLViewerStats::ST_MOUSELOOK_SECONDS, gFrameIntervalSeconds);
515 } 514 }
516 else if (gAgent.getCameraMode() == CAMERA_MODE_CUSTOMIZE_AVATAR) 515 else if (gAgent.getCameraMode() == CAMERA_MODE_CUSTOMIZE_AVATAR)
517 { 516 {
518 gViewerStats->incStat(LLViewerStats::ST_AVATAR_EDIT_SECONDS, gFrameIntervalSeconds); 517 LLViewerStats::getInstance()->incStat(LLViewerStats::ST_AVATAR_EDIT_SECONDS, gFrameIntervalSeconds);
519 } 518 }
520 else if (gFloaterTools && gFloaterTools->getVisible()) 519 else if (gFloaterTools && gFloaterTools->getVisible())
521 { 520 {
522 gViewerStats->incStat(LLViewerStats::ST_TOOLBOX_SECONDS, gFrameIntervalSeconds); 521 LLViewerStats::getInstance()->incStat(LLViewerStats::ST_TOOLBOX_SECONDS, gFrameIntervalSeconds);
523 } 522 }
524 } 523 }
525 gViewerStats->setStat(LLViewerStats::ST_ENABLE_VBO, (F64)gSavedSettings.getBOOL("RenderVBOEnable")); 524 LLViewerStats::getInstance()->setStat(LLViewerStats::ST_ENABLE_VBO, (F64)gSavedSettings.getBOOL("RenderVBOEnable"));
526 gViewerStats->setStat(LLViewerStats::ST_LIGHTING_DETAIL, (F64)gSavedSettings.getS32("RenderLightingDetail")); 525 LLViewerStats::getInstance()->setStat(LLViewerStats::ST_LIGHTING_DETAIL, (F64)gSavedSettings.getS32("RenderLightingDetail"));
527 gViewerStats->setStat(LLViewerStats::ST_DRAW_DIST, (F64)gSavedSettings.getF32("RenderFarClip")); 526 LLViewerStats::getInstance()->setStat(LLViewerStats::ST_DRAW_DIST, (F64)gSavedSettings.getF32("RenderFarClip"));
528 gViewerStats->setStat(LLViewerStats::ST_CHAT_BUBBLES, (F64)gSavedSettings.getBOOL("UseChatBubbles")); 527 LLViewerStats::getInstance()->setStat(LLViewerStats::ST_CHAT_BUBBLES, (F64)gSavedSettings.getBOOL("UseChatBubbles"));
529#if 0 // 1.9.2 528#if 0 // 1.9.2
530 gViewerStats->setStat(LLViewerStats::ST_SHADER_OBJECTS, (F64)gSavedSettings.getS32("VertexShaderLevelObject")); 529 LLViewerStats::getInstance()->setStat(LLViewerStats::ST_SHADER_OBJECTS, (F64)gSavedSettings.getS32("VertexShaderLevelObject"));
531 gViewerStats->setStat(LLViewerStats::ST_SHADER_AVATAR, (F64)gSavedSettings.getBOOL("VertexShaderLevelAvatar")); 530 LLViewerStats::getInstance()->setStat(LLViewerStats::ST_SHADER_AVATAR, (F64)gSavedSettings.getBOOL("VertexShaderLevelAvatar"));
532 gViewerStats->setStat(LLViewerStats::ST_SHADER_ENVIRONMENT, (F64)gSavedSettings.getBOOL("VertexShaderLevelEnvironment")); 531 LLViewerStats::getInstance()->setStat(LLViewerStats::ST_SHADER_ENVIRONMENT, (F64)gSavedSettings.getBOOL("VertexShaderLevelEnvironment"));
533#endif 532#endif
534 gViewerStats->setStat(LLViewerStats::ST_FRAME_SECS, gDebugView->mFastTimerView->getTime(LLFastTimer::FTM_FRAME)); 533 LLViewerStats::getInstance()->setStat(LLViewerStats::ST_FRAME_SECS, gDebugView->mFastTimerView->getTime(LLFastTimer::FTM_FRAME));
535 F64 idle_secs = gDebugView->mFastTimerView->getTime(LLFastTimer::FTM_IDLE); 534 F64 idle_secs = gDebugView->mFastTimerView->getTime(LLFastTimer::FTM_IDLE);
536 F64 network_secs = gDebugView->mFastTimerView->getTime(LLFastTimer::FTM_NETWORK); 535 F64 network_secs = gDebugView->mFastTimerView->getTime(LLFastTimer::FTM_NETWORK);
537 gViewerStats->setStat(LLViewerStats::ST_UPDATE_SECS, idle_secs - network_secs); 536 LLViewerStats::getInstance()->setStat(LLViewerStats::ST_UPDATE_SECS, idle_secs - network_secs);
538 gViewerStats->setStat(LLViewerStats::ST_NETWORK_SECS, network_secs); 537 LLViewerStats::getInstance()->setStat(LLViewerStats::ST_NETWORK_SECS, network_secs);
539 gViewerStats->setStat(LLViewerStats::ST_IMAGE_SECS, gDebugView->mFastTimerView->getTime(LLFastTimer::FTM_IMAGE_UPDATE)); 538 LLViewerStats::getInstance()->setStat(LLViewerStats::ST_IMAGE_SECS, gDebugView->mFastTimerView->getTime(LLFastTimer::FTM_IMAGE_UPDATE));
540 gViewerStats->setStat(LLViewerStats::ST_REBUILD_SECS, gDebugView->mFastTimerView->getTime(LLFastTimer::FTM_STATESORT )); 539 LLViewerStats::getInstance()->setStat(LLViewerStats::ST_REBUILD_SECS, gDebugView->mFastTimerView->getTime(LLFastTimer::FTM_STATESORT ));
541 gViewerStats->setStat(LLViewerStats::ST_RENDER_SECS, gDebugView->mFastTimerView->getTime(LLFastTimer::FTM_RENDER_GEOMETRY)); 540 LLViewerStats::getInstance()->setStat(LLViewerStats::ST_RENDER_SECS, gDebugView->mFastTimerView->getTime(LLFastTimer::FTM_RENDER_GEOMETRY));
542 541
543 LLCircuitData *cdp = gMessageSystem->mCircuitInfo.findCircuit(gAgent.getRegion()->getHost()); 542 LLCircuitData *cdp = gMessageSystem->mCircuitInfo.findCircuit(gAgent.getRegion()->getHost());
544 if (cdp) 543 if (cdp)
545 { 544 {
546 gViewerStats->mSimPingStat.addValue(cdp->getPingDelay()); 545 LLViewerStats::getInstance()->mSimPingStat.addValue(cdp->getPingDelay());
547 gAvgSimPing = ((gAvgSimPing * (F32)gSimPingCount) + (F32)(cdp->getPingDelay())) / ((F32)gSimPingCount + 1); 546 gAvgSimPing = ((gAvgSimPing * (F32)gSimPingCount) + (F32)(cdp->getPingDelay())) / ((F32)gSimPingCount + 1);
548 gSimPingCount++; 547 gSimPingCount++;
549 } 548 }
550 else 549 else
551 { 550 {
552 gViewerStats->mSimPingStat.addValue(10000); 551 LLViewerStats::getInstance()->mSimPingStat.addValue(10000);
553 } 552 }
554 553
555 gViewerStats->mFPSStat.addValue(1); 554 LLViewerStats::getInstance()->mFPSStat.addValue(1);
556 F32 layer_bits = (F32)(gVLManager.getLandBits() + gVLManager.getWindBits() + gVLManager.getCloudBits()); 555 F32 layer_bits = (F32)(gVLManager.getLandBits() + gVLManager.getWindBits() + gVLManager.getCloudBits());
557 gViewerStats->mLayersKBitStat.addValue(layer_bits/1024.f); 556 LLViewerStats::getInstance()->mLayersKBitStat.addValue(layer_bits/1024.f);
558 gViewerStats->mObjectKBitStat.addValue(gObjectBits/1024.f); 557 LLViewerStats::getInstance()->mObjectKBitStat.addValue(gObjectBits/1024.f);
559 gViewerStats->mTextureKBitStat.addValue(LLViewerImageList::sTextureBits/1024.f); 558 LLViewerStats::getInstance()->mTextureKBitStat.addValue(LLViewerImageList::sTextureBits/1024.f);
560 gViewerStats->mVFSPendingOperations.addValue(LLVFile::getVFSThread()->getPending()); 559 LLViewerStats::getInstance()->mVFSPendingOperations.addValue(LLVFile::getVFSThread()->getPending());
561 gViewerStats->mAssetKBitStat.addValue(gTransferManager.getTransferBitsIn(LLTCT_ASSET)/1024.f); 560 LLViewerStats::getInstance()->mAssetKBitStat.addValue(gTransferManager.getTransferBitsIn(LLTCT_ASSET)/1024.f);
562 gTransferManager.resetTransferBitsIn(LLTCT_ASSET); 561 gTransferManager.resetTransferBitsIn(LLTCT_ASSET);
563 562
564 static S32 tex_bits_idle_count = 0; 563 static S32 tex_bits_idle_count = 0;
@@ -573,7 +572,7 @@ void update_statistics(U32 frame_count)
573 gDebugTimers[0].unpause(); 572 gDebugTimers[0].unpause();
574 } 573 }
575 574
576 gViewerStats->mTexturePacketsStat.addValue(LLViewerImageList::sTexturePackets); 575 LLViewerStats::getInstance()->mTexturePacketsStat.addValue(LLViewerImageList::sTexturePackets);
577 576
578 { 577 {
579 static F32 visible_avatar_frames = 0.f; 578 static F32 visible_avatar_frames = 0.f;
@@ -584,10 +583,10 @@ void update_statistics(U32 frame_count)
584 visible_avatar_frames = 1.f; 583 visible_avatar_frames = 1.f;
585 avg_visible_avatars = (avg_visible_avatars * (F32)(visible_avatar_frames - 1.f) + visible_avatars) / visible_avatar_frames; 584 avg_visible_avatars = (avg_visible_avatars * (F32)(visible_avatar_frames - 1.f) + visible_avatars) / visible_avatar_frames;
586 } 585 }
587 gViewerStats->setStat(LLViewerStats::ST_VISIBLE_AVATARS, (F64)avg_visible_avatars); 586 LLViewerStats::getInstance()->setStat(LLViewerStats::ST_VISIBLE_AVATARS, (F64)avg_visible_avatars);
588 } 587 }
589 gWorldp->updateNetStats(); 588 LLWorld::getInstance()->updateNetStats();
590 gWorldp->requestCacheMisses(); 589 LLWorld::getInstance()->requestCacheMisses();
591 590
592 // Reset all of these values. 591 // Reset all of these values.
593 gVLManager.resetBitCounts(); 592 gVLManager.resetBitCounts();
@@ -599,9 +598,9 @@ void update_statistics(U32 frame_count)
599 598
600#if LL_WINDOWS && LL_LCD_COMPILE 599#if LL_WINDOWS && LL_LCD_COMPILE
601 bool LCDenabled = gLcdScreen->Enabled(); 600 bool LCDenabled = gLcdScreen->Enabled();
602 gViewerStats->setStat(LLViewerStats::ST_LOGITECH_LCD, LCDenabled); 601 LLViewerStats::getInstance()->setStat(LLViewerStats::ST_LOGITECH_LCD, LCDenabled);
603#else 602#else
604 gViewerStats->setStat(LLViewerStats::ST_LOGITECH_LCD, false); 603 LLViewerStats::getInstance()->setStat(LLViewerStats::ST_LOGITECH_LCD, false);
605#endif 604#endif
606} 605}
607 606
@@ -704,11 +703,11 @@ void send_stats()
704 std::string gpu_desc = llformat( 703 std::string gpu_desc = llformat(
705 "%-6s Class %d ", 704 "%-6s Class %d ",
706 gGLManager.mGLVendorShort.substr(0,6).c_str(), 705 gGLManager.mGLVendorShort.substr(0,6).c_str(),
707 (S32)gFeatureManagerp->getGPUClass()) 706 (S32)LLFeatureManager::getInstance()->getGPUClass())
708 + gFeatureManagerp->getGPUString(); 707 + LLFeatureManager::getInstance()->getGPUString();
709 708
710 system["gpu"] = gpu_desc; 709 system["gpu"] = gpu_desc;
711 system["gpu_class"] = (S32)gFeatureManagerp->getGPUClass(); 710 system["gpu_class"] = (S32)LLFeatureManager::getInstance()->getGPUClass();
712 system["gpu_vendor"] = gGLManager.mGLVendorShort; 711 system["gpu_vendor"] = gGLManager.mGLVendorShort;
713 system["gpu_version"] = gGLManager.mDriverVersionVendorString; 712 system["gpu_version"] = gGLManager.mDriverVersionVendorString;
714 713
@@ -754,7 +753,7 @@ void send_stats()
754 misc["int_1"] = LLFloaterDirectory::sOldSearchCount; // Steve: 1.18.6 753 misc["int_1"] = LLFloaterDirectory::sOldSearchCount; // Steve: 1.18.6
755 misc["int_2"] = LLFloaterDirectory::sNewSearchCount; // Steve: 1.18.6 754 misc["int_2"] = LLFloaterDirectory::sNewSearchCount; // Steve: 1.18.6
756 755
757 gViewerStats->addToMessage(body); 756 LLViewerStats::getInstance()->addToMessage(body);
758 757
759 LLHTTPClient::post(url, body, new ViewerStatsResponder()); 758 LLHTTPClient::post(url, body, new ViewerStatsResponder());
760} 759}
diff --git a/linden/indra/newview/llviewerstats.h b/linden/indra/newview/llviewerstats.h
index 7d3698c..a0b80f2 100644
--- a/linden/indra/newview/llviewerstats.h
+++ b/linden/indra/newview/llviewerstats.h
@@ -34,7 +34,7 @@
34 34
35#include "llstat.h" 35#include "llstat.h"
36 36
37class LLViewerStats 37class LLViewerStats : public LLSingleton<LLViewerStats>
38{ 38{
39public: 39public:
40 LLStat mKBitStat; 40 LLStat mKBitStat;
@@ -69,6 +69,11 @@ public:
69 LLStat mSimNetMsec; 69 LLStat mSimNetMsec;
70 LLStat mSimSimOtherMsec; 70 LLStat mSimSimOtherMsec;
71 LLStat mSimSimPhysicsMsec; 71 LLStat mSimSimPhysicsMsec;
72
73 LLStat mSimSimPhysicsStepMsec;
74 LLStat mSimSimPhysicsShapeUpdateMsec;
75 LLStat mSimSimPhysicsOtherMsec;
76
72 LLStat mSimAgentMsec; 77 LLStat mSimAgentMsec;
73 LLStat mSimImagesMsec; 78 LLStat mSimImagesMsec;
74 LLStat mSimScriptMsec; 79 LLStat mSimScriptMsec;
@@ -86,6 +91,9 @@ public:
86 LLStat mSimPendingLocalUploads; 91 LLStat mSimPendingLocalUploads;
87 LLStat mSimTotalUnackedBytes; 92 LLStat mSimTotalUnackedBytes;
88 93
94 LLStat mPhysicsPinnedTasks;
95 LLStat mPhysicsLODTasks;
96 LLStat mPhysicsMemoryAllocated;
89 /* 97 /*
90 LLStat mSimCPUUsageStat; 98 LLStat mSimCPUUsageStat;
91 LLStat mSimMemTotalStat; 99 LLStat mSimMemTotalStat;
@@ -185,8 +193,6 @@ private:
185 F64 mLastTimeDiff; // used for time stat updates 193 F64 mLastTimeDiff; // used for time stat updates
186}; 194};
187 195
188extern LLViewerStats *gViewerStats;
189
190static const F32 SEND_STATS_PERIOD = 300.0f; 196static const F32 SEND_STATS_PERIOD = 300.0f;
191 197
192// The following are from (older?) statistics code found in appviewer. 198// The following are from (older?) statistics code found in appviewer.
diff --git a/linden/indra/newview/llviewertexteditor.cpp b/linden/indra/newview/llviewertexteditor.cpp
index 15085ac..60ec187 100644
--- a/linden/indra/newview/llviewertexteditor.cpp
+++ b/linden/indra/newview/llviewertexteditor.cpp
@@ -54,13 +54,15 @@
54#include "llviewerimagelist.h" 54#include "llviewerimagelist.h"
55#include "llviewerwindow.h" 55#include "llviewerwindow.h"
56#include "llviewerinventory.h" 56#include "llviewerinventory.h"
57#include "llvieweruictrlfactory.h" 57#include "lluictrlfactory.h"
58#include "llnotecard.h" 58#include "llnotecard.h"
59#include "llmemorystream.h" 59#include "llmemorystream.h"
60#include "llmenugl.h" 60#include "llmenugl.h"
61 61
62#include "llappviewer.h" // for gPacificDaylightTime 62#include "llappviewer.h" // for gPacificDaylightTime
63 63
64static LLRegisterWidget<LLViewerTextEditor> r("text_editor");
65
64///---------------------------------------------------------------------------- 66///----------------------------------------------------------------------------
65/// Class LLEmbeddedNotecardOpener 67/// Class LLEmbeddedNotecardOpener
66///---------------------------------------------------------------------------- 68///----------------------------------------------------------------------------
@@ -424,15 +426,15 @@ void LLEmbeddedItems::bindEmbeddedChars( LLFontGL* font ) const
424 break; 426 break;
425 case LLAssetType::AT_NOTECARD: img_name = "inv_item_notecard.tga"; break; 427 case LLAssetType::AT_NOTECARD: img_name = "inv_item_notecard.tga"; break;
426 case LLAssetType::AT_LSL_TEXT: img_name = "inv_item_script.tga"; break; 428 case LLAssetType::AT_LSL_TEXT: img_name = "inv_item_script.tga"; break;
427 case LLAssetType::AT_BODYPART: img_name = "inv_item_bodypart.tga"; break; 429 case LLAssetType::AT_BODYPART: img_name = "inv_item_skin.tga"; break;
428 case LLAssetType::AT_ANIMATION: img_name = "inv_item_animation.tga";break; 430 case LLAssetType::AT_ANIMATION: img_name = "inv_item_animation.tga";break;
429 case LLAssetType::AT_GESTURE: img_name = "inv_item_gesture.tga"; break; 431 case LLAssetType::AT_GESTURE: img_name = "inv_item_gesture.tga"; break;
430 default: llassert(0); continue; 432 default: llassert(0); continue;
431 } 433 }
432 434
433 LLViewerImage* image = gImageList.getImage(LLUUID(gViewerArt.getString(img_name)), MIPMAP_FALSE, TRUE); 435 LLUIImagePtr image = LLUI::getUIImage(img_name);
434 436
435 font->addEmbeddedChar( wch, image, item->getName() ); 437 font->addEmbeddedChar( wch, image->getImage(), item->getName() );
436 } 438 }
437} 439}
438 440
@@ -575,7 +577,8 @@ LLViewerTextEditor::LLViewerTextEditor(const LLString& name,
575 // *TODO: Add right click menus for SLURLs 577 // *TODO: Add right click menus for SLURLs
576 // Build the right click menu 578 // Build the right click menu
577 // make the popup menu available 579 // make the popup menu available
578 //LLMenuGL* menu = gUICtrlFactory->buildMenu("menu_slurl.xml", this); 580
581 //LLMenuGL* menu = LLUICtrlFactory::getInstance()->buildMenu("menu_slurl.xml", this);
579 //if (!menu) 582 //if (!menu)
580 //{ 583 //{
581 // menu = new LLMenuGL(""); 584 // menu = new LLMenuGL("");
@@ -694,7 +697,7 @@ BOOL LLViewerTextEditor::handleMouseDown(S32 x, S32 y, MASK mask)
694 S32 screen_x; 697 S32 screen_x;
695 S32 screen_y; 698 S32 screen_y;
696 localPointToScreen(x, y, &screen_x, &screen_y ); 699 localPointToScreen(x, y, &screen_x, &screen_y );
697 gToolDragAndDrop->setDragStart( screen_x, screen_y ); 700 LLToolDragAndDrop::getInstance()->setDragStart( screen_x, screen_y );
698 701
699 start_select = FALSE; 702 start_select = FALSE;
700 } 703 }
@@ -779,108 +782,105 @@ BOOL LLViewerTextEditor::handleHover(S32 x, S32 y, MASK mask)
779 // leave hover segment active during drag and drop 782 // leave hover segment active during drag and drop
780 mHoverSegment = NULL; 783 mHoverSegment = NULL;
781 } 784 }
782 if( getVisible() ) 785 if(hasMouseCapture() )
783 { 786 {
784 if(hasMouseCapture() ) 787 if( mIsSelecting )
785 { 788 {
786 if( mIsSelecting ) 789 if (x != mLastSelectionX || y != mLastSelectionY)
787 { 790 {
788 if (x != mLastSelectionX || y != mLastSelectionY) 791 mLastSelectionX = x;
789 { 792 mLastSelectionY = y;
790 mLastSelectionX = x; 793 }
791 mLastSelectionY = y;
792 }
793
794 if( y > getTextRect().mTop )
795 {
796 mScrollbar->setDocPos( mScrollbar->getDocPos() - 1 );
797 }
798 else
799 if( y < getTextRect().mBottom )
800 {
801 mScrollbar->setDocPos( mScrollbar->getDocPos() + 1 );
802 }
803 794
804 setCursorAtLocalPos( x, y, TRUE ); 795 if( y > getTextRect().mTop )
805 mSelectionEnd = mCursorPos; 796 {
806 797 mScrollbar->setDocPos( mScrollbar->getDocPos() - 1 );
807 updateScrollFromCursor();
808 getWindow()->setCursor(UI_CURSOR_IBEAM);
809 } 798 }
810 else if( mDragItem ) 799 else
800 if( y < getTextRect().mBottom )
811 { 801 {
812 S32 screen_x; 802 mScrollbar->setDocPos( mScrollbar->getDocPos() + 1 );
813 S32 screen_y;
814 localPointToScreen(x, y, &screen_x, &screen_y );
815 if( gToolDragAndDrop->isOverThreshold( screen_x, screen_y ) )
816 {
817 gToolDragAndDrop->beginDrag(
818 LLAssetType::lookupDragAndDropType( mDragItem->getType() ),
819 mDragItem->getUUID(),
820 LLToolDragAndDrop::SOURCE_NOTECARD,
821 getSourceID(), mObjectID);
822
823 return gToolDragAndDrop->handleHover( x, y, mask );
824 }
825 getWindow()->setCursor(UI_CURSOR_HAND);
826 } 803 }
827 804
828 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (active)" << llendl; 805 setCursorAtLocalPos( x, y, TRUE );
829 handled = TRUE; 806 mSelectionEnd = mCursorPos;
830 } 807
831 808 updateScrollFromCursor();
832 if( !handled ) 809 getWindow()->setCursor(UI_CURSOR_IBEAM);
833 {
834 // Pass to children
835 handled = LLView::childrenHandleHover(x, y, mask) != NULL;
836 }
837
838 if( handled )
839 {
840 // Delay cursor flashing
841 resetKeystrokeTimer();
842 } 810 }
843 811 else if( mDragItem )
844 // Opaque
845 if( !handled && mTakesNonScrollClicks)
846 { 812 {
847 // Check to see if we're over an HTML-style link 813 S32 screen_x;
848 if( !mSegments.empty() ) 814 S32 screen_y;
815 localPointToScreen(x, y, &screen_x, &screen_y );
816 if( LLToolDragAndDrop::getInstance()->isOverThreshold( screen_x, screen_y ) )
849 { 817 {
850 const LLTextSegment* cur_segment = getSegmentAtLocalPos( x, y ); 818 LLToolDragAndDrop::getInstance()->beginDrag(
851 if( cur_segment ) 819 LLAssetType::lookupDragAndDropType( mDragItem->getType() ),
852 { 820 mDragItem->getUUID(),
853 if(cur_segment->getStyle().isLink()) 821 LLToolDragAndDrop::SOURCE_NOTECARD,
854 { 822 getSourceID(), mObjectID);
855 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (over link, inactive)" << llendl; 823
856 getWindow()->setCursor(UI_CURSOR_HAND); 824 return LLToolDragAndDrop::getInstance()->handleHover( x, y, mask );
857 handled = TRUE;
858 }
859 else
860 if(cur_segment->getStyle().getIsEmbeddedItem())
861 {
862 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (over embedded item, inactive)" << llendl;
863 getWindow()->setCursor(UI_CURSOR_HAND);
864 //getWindow()->setCursor(UI_CURSOR_ARROW);
865 handled = TRUE;
866 }
867 mHoverSegment = cur_segment;
868 }
869 } 825 }
826 getWindow()->setCursor(UI_CURSOR_HAND);
827 }
870 828
871 if( !handled ) 829 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (active)" << llendl;
830 handled = TRUE;
831 }
832
833 if( !handled )
834 {
835 // Pass to children
836 handled = LLView::childrenHandleHover(x, y, mask) != NULL;
837 }
838
839 if( handled )
840 {
841 // Delay cursor flashing
842 resetKeystrokeTimer();
843 }
844
845 // Opaque
846 if( !handled && mTakesNonScrollClicks)
847 {
848 // Check to see if we're over an HTML-style link
849 if( !mSegments.empty() )
850 {
851 const LLTextSegment* cur_segment = getSegmentAtLocalPos( x, y );
852 if( cur_segment )
872 { 853 {
873 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (inactive)" << llendl; 854 if(cur_segment->getStyle().isLink())
874 if (!mScrollbar->getVisible() || x < getRect().getWidth() - SCROLLBAR_SIZE)
875 { 855 {
876 getWindow()->setCursor(UI_CURSOR_IBEAM); 856 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (over link, inactive)" << llendl;
857 getWindow()->setCursor(UI_CURSOR_HAND);
858 handled = TRUE;
877 } 859 }
878 else 860 else
861 if(cur_segment->getStyle().getIsEmbeddedItem())
879 { 862 {
880 getWindow()->setCursor(UI_CURSOR_ARROW); 863 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (over embedded item, inactive)" << llendl;
864 getWindow()->setCursor(UI_CURSOR_HAND);
865 //getWindow()->setCursor(UI_CURSOR_ARROW);
866 handled = TRUE;
881 } 867 }
882 handled = TRUE; 868 mHoverSegment = cur_segment;
869 }
870 }
871
872 if( !handled )
873 {
874 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (inactive)" << llendl;
875 if (!mScrollbar->getVisible() || x < getRect().getWidth() - SCROLLBAR_SIZE)
876 {
877 getWindow()->setCursor(UI_CURSOR_IBEAM);
883 } 878 }
879 else
880 {
881 getWindow()->setCursor(UI_CURSOR_ARROW);
882 }
883 handled = TRUE;
884 } 884 }
885 } 885 }
886 886
@@ -962,8 +962,6 @@ BOOL LLViewerTextEditor::handleMouseUp(S32 x, S32 y, MASK mask)
962 962
963BOOL LLViewerTextEditor::handleRightMouseDown(S32 x, S32 y, MASK mask) 963BOOL LLViewerTextEditor::handleRightMouseDown(S32 x, S32 y, MASK mask)
964{ 964{
965
966
967 BOOL handled = childrenHandleRightMouseDown(x, y, mask) != NULL; 965 BOOL handled = childrenHandleRightMouseDown(x, y, mask) != NULL;
968 966
969 // *TODO: Add right click menus for SLURLs 967 // *TODO: Add right click menus for SLURLs
diff --git a/linden/indra/newview/llviewertexteditor.h b/linden/indra/newview/llviewertexteditor.h
index 9b9bd2f..347180b 100644
--- a/linden/indra/newview/llviewertexteditor.h
+++ b/linden/indra/newview/llviewertexteditor.h
@@ -126,14 +126,13 @@ private:
126 LLPointer<class LLEmbeddedNotecardOpener> mInventoryCallback; 126 LLPointer<class LLEmbeddedNotecardOpener> mInventoryCallback;
127 127
128 // *TODO: Add right click menus for SLURLs 128 // *TODO: Add right click menus for SLURLs
129 //LLHandle<LLView> mPopupMenuHandle; 129 //LLViewHandle mPopupMenuHandle;
130 130
131 // 131 //
132 // Inner classes 132 // Inner classes
133 // 133 //
134 134
135 class LLTextCmdInsertEmbeddedItem; 135 class LLTextCmdInsertEmbeddedItem;
136
137}; 136};
138 137
139#endif // LL_VIEWERTEXTEDITOR_H 138#endif // LL_VIEWERTEXTEDITOR_H
diff --git a/linden/indra/newview/llviewerthrottle.cpp b/linden/indra/newview/llviewerthrottle.cpp
index 75357ba..ceff856 100644
--- a/linden/indra/newview/llviewerthrottle.cpp
+++ b/linden/indra/newview/llviewerthrottle.cpp
@@ -307,7 +307,7 @@ void LLViewerThrottle::updateDynamicThrottle()
307 } 307 }
308 mUpdateTimer.reset(); 308 mUpdateTimer.reset();
309 309
310 if (gViewerStats->mPacketsLostPercentStat.getMean() > TIGHTEN_THROTTLE_THRESHOLD) 310 if (LLViewerStats::getInstance()->mPacketsLostPercentStat.getMean() > TIGHTEN_THROTTLE_THRESHOLD)
311 { 311 {
312 if (mThrottleFrac <= MIN_FRACTIONAL || mCurrentBandwidth / 1024.0f <= MIN_BANDWIDTH) 312 if (mThrottleFrac <= MIN_FRACTIONAL || mCurrentBandwidth / 1024.0f <= MIN_BANDWIDTH)
313 { 313 {
@@ -320,7 +320,7 @@ void LLViewerThrottle::updateDynamicThrottle()
320 mCurrent.sendToSim(); 320 mCurrent.sendToSim();
321 llinfos << "Tightening network throttle to " << mCurrentBandwidth << llendl; 321 llinfos << "Tightening network throttle to " << mCurrentBandwidth << llendl;
322 } 322 }
323 else if (gViewerStats->mPacketsLostPercentStat.getMean() <= EASE_THROTTLE_THRESHOLD) 323 else if (LLViewerStats::getInstance()->mPacketsLostPercentStat.getMean() <= EASE_THROTTLE_THRESHOLD)
324 { 324 {
325 if (mThrottleFrac >= MAX_FRACTIONAL || mCurrentBandwidth / 1024.0f >= MAX_BANDWIDTH) 325 if (mThrottleFrac >= MAX_FRACTIONAL || mCurrentBandwidth / 1024.0f >= MAX_BANDWIDTH)
326 { 326 {
diff --git a/linden/indra/newview/llvieweruictrlfactory.cpp b/linden/indra/newview/llvieweruictrlfactory.cpp
deleted file mode 100644
index 3a4df1c..0000000
--- a/linden/indra/newview/llvieweruictrlfactory.cpp
+++ /dev/null
@@ -1,128 +0,0 @@
1/**
2 * @file llvieweruictrlfactory.cpp
3 * @brief factory class for creating UI controls
4 *
5 * $LicenseInfo:firstyear=2003&license=viewergpl$
6 *
7 * Copyright (c) 2003-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 <fstream>
35#include <boost/tokenizer.hpp>
36
37#include "v4color.h"
38
39#include "llvieweruictrlfactory.h"
40#include "llcolorswatch.h"
41#include "llinventoryview.h"
42#include "llviewertexteditor.h"
43#include "lltexturectrl.h"
44#include "llnameeditor.h"
45#include "llnamelistctrl.h"
46#include "llwebbrowserctrl.h"
47#include "lljoystickbutton.h"
48#include "llmediaremotectrl.h"
49#include "v4color.h"
50#include <boost/tokenizer.hpp>
51
52LLUICtrlFactory* gUICtrlFactory = NULL;
53
54
55//-----------------------------------------------------------------------------
56// LLUICtrlFactory()
57//-----------------------------------------------------------------------------
58LLViewerUICtrlFactory::LLViewerUICtrlFactory()
59: LLUICtrlFactory()
60{
61 // Register controls
62 LLUICtrlCreator<LLColorSwatchCtrl>::registerCreator(LL_COLOR_SWATCH_CTRL_TAG, this);
63 LLUICtrlCreator<LLViewerTextEditor>::registerCreator(LL_TEXT_EDITOR_TAG, this);
64 LLUICtrlCreator<LLTextureCtrl>::registerCreator(LL_TEXTURE_CTRL_TAG, this);
65 LLUICtrlCreator<LLNameListCtrl>::registerCreator(LL_NAME_LIST_CTRL_TAG, this);
66 LLUICtrlCreator<LLNameEditor>::registerCreator(LL_NAME_EDITOR_TAG, this);
67 LLUICtrlCreator<LLInventoryPanel>::registerCreator(LL_INVENTORY_PANEL_TAG, this);
68 LLUICtrlCreator<LLWebBrowserCtrl>::registerCreator(LL_WEB_BROWSER_CTRL_TAG, this);
69 LLUICtrlCreator<LLJoystickAgentSlide>::registerCreator(LL_JOYSTICK_SLIDE, this);
70 LLUICtrlCreator<LLJoystickAgentTurn>::registerCreator(LL_JOYSTICK_TURN, this);
71 LLUICtrlCreator<LLMediaRemoteCtrl>::registerCreator(LL_MEDIA_REMOTE_CTRL_TAG, this);
72}
73
74//-----------------------------------------------------------------------------
75// ~LLUICtrlFactory()
76//-----------------------------------------------------------------------------
77LLViewerUICtrlFactory::~LLViewerUICtrlFactory()
78{
79}
80
81//-----------------------------------------------------------------------------
82//-----------------------------------------------------------------------------
83
84
85LLColorSwatchCtrl* LLViewerUICtrlFactory::getColorSwatchByName(LLPanel* panelp, const LLString& name)
86{
87 return panelp->getChild<LLColorSwatchCtrl>(name);
88}
89
90LLNameListCtrl* LLViewerUICtrlFactory::getNameListByName(LLPanel* panelp, const LLString& name)
91{
92 return panelp->getChild<LLNameListCtrl>(name);
93}
94
95LLTextureCtrl* LLViewerUICtrlFactory::getTexturePickerByName(LLPanel* panelp, const LLString& name)
96{
97 return panelp->getChild<LLTextureCtrl>(name);
98}
99
100LLWebBrowserCtrl* LLViewerUICtrlFactory::getWebBrowserByName(LLPanel* panelp, const LLString& name)
101{
102 return panelp->getChild<LLWebBrowserCtrl>(name);
103}
104
105LLViewerTextEditor* LLViewerUICtrlFactory::getViewerTextEditorByName(LLPanel* panelp, const LLString& name)
106{
107 return panelp->getChild<LLViewerTextEditor>(name);
108}
109
110LLNameEditor* LLViewerUICtrlFactory::getNameEditorByName(LLPanel* panelp, const LLString& name)
111{
112 return panelp->getChild<LLNameEditor>(name);
113}
114
115LLMediaRemoteCtrl* LLViewerUICtrlFactory::getMediaRemoteByName(LLPanel* panelp, const LLString& name)
116{
117 return panelp->getChild<LLMediaRemoteCtrl>(name);
118}
119
120LLJoystickAgentTurn* LLViewerUICtrlFactory::getJoystickAgentTurnByName(LLPanel* panelp, const LLString& name)
121{
122 return panelp->getChild<LLJoystickAgentTurn>(name);
123}
124
125LLJoystickAgentSlide* LLViewerUICtrlFactory::getJoystickAgentSlideByName(LLPanel* panelp, const LLString& name)
126{
127 return panelp->getChild<LLJoystickAgentSlide>(name);
128}
diff --git a/linden/indra/newview/llvieweruictrlfactory.h b/linden/indra/newview/llvieweruictrlfactory.h
deleted file mode 100644
index abfb701..0000000
--- a/linden/indra/newview/llvieweruictrlfactory.h
+++ /dev/null
@@ -1,71 +0,0 @@
1/**
2 * @file llvieweruictrlfactory.h
3 * @brief factory class for creating UI controls
4 *
5 * $LicenseInfo:firstyear=2003&license=viewergpl$
6 *
7 * Copyright (c) 2003-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_LLVIEWERUICTRLFACTORY_H
33#define LL_LLVIEWERUICTRLFACTORY_H
34
35#include "lluictrlfactory.h"
36
37class LLControlGroup;
38class LLColorSwatchCtrl;
39class LLInventoryPanel;
40class LLNameListCtrl;
41class LLNameEditor;
42class LLTextureCtrl;
43class LLWebBrowserCtrl;
44class LLViewerTextEditor;
45class LLMediaRemoteCtrl;
46class LLJoystickAgentTurn;
47class LLJoystickAgentSlide;
48
49class LLViewerUICtrlFactory : public LLUICtrlFactory
50{
51public:
52 LLViewerUICtrlFactory();
53 // do not call! needs to be public so run-time can clean up the singleton
54 virtual ~LLViewerUICtrlFactory();
55
56 // specific typed getters
57 static LLColorSwatchCtrl* getColorSwatchByName(LLPanel* panelp, const LLString& name);
58 static LLNameListCtrl* getNameListByName(LLPanel* panelp, const LLString& name);
59 static LLTextureCtrl* getTexturePickerByName(LLPanel* panelp, const LLString& name);
60 static LLWebBrowserCtrl* getWebBrowserByName(LLPanel* panelp, const LLString& name);
61 static LLViewerTextEditor* getViewerTextEditorByName( LLPanel* panelp, const LLString& name);
62 static LLNameEditor* getNameEditorByName(LLPanel* panelp, const LLString& name);
63 static LLMediaRemoteCtrl* getMediaRemoteByName(LLPanel* panelp, const LLString& name);
64 static LLJoystickAgentTurn* getJoystickAgentTurnByName(LLPanel* panelp, const LLString& name);
65 static LLJoystickAgentSlide* getJoystickAgentSlideByName(LLPanel* panelp, const LLString& name);
66
67};
68
69extern LLUICtrlFactory* gUICtrlFactory;
70
71#endif //LL_LLVIEWERUICTRLFACTORY_H
diff --git a/linden/indra/newview/llviewerwindow.cpp b/linden/indra/newview/llviewerwindow.cpp
index a82b162..a14a3b3 100644
--- a/linden/indra/newview/llviewerwindow.cpp
+++ b/linden/indra/newview/llviewerwindow.cpp
@@ -32,6 +32,7 @@
32#include "llviewerprecompiledheaders.h" 32#include "llviewerprecompiledheaders.h"
33 33
34#include "llpanellogin.h" 34#include "llpanellogin.h"
35#include "llviewerkeyboard.h"
35#include "llviewerwindow.h" 36#include "llviewerwindow.h"
36 37
37// system library includes 38// system library includes
@@ -76,7 +77,6 @@
76#include "llagent.h" 77#include "llagent.h"
77#include "llalertdialog.h" 78#include "llalertdialog.h"
78#include "llbox.h" 79#include "llbox.h"
79#include "llcameraview.h"
80#include "llchatbar.h" 80#include "llchatbar.h"
81#include "llconsole.h" 81#include "llconsole.h"
82#include "llviewercontrol.h" 82#include "llviewercontrol.h"
@@ -95,6 +95,7 @@
95#include "llfloateractivespeakers.h" 95#include "llfloateractivespeakers.h"
96#include "llfloaterbuildoptions.h" 96#include "llfloaterbuildoptions.h"
97#include "llfloaterbuyland.h" 97#include "llfloaterbuyland.h"
98#include "llfloatercamera.h"
98#include "llfloaterchat.h" 99#include "llfloaterchat.h"
99#include "llfloaterchatterbox.h" 100#include "llfloaterchatterbox.h"
100#include "llfloatercustomize.h" 101#include "llfloatercustomize.h"
@@ -102,7 +103,6 @@
102#include "llfloaterland.h" 103#include "llfloaterland.h"
103#include "llfloaterinspect.h" 104#include "llfloaterinspect.h"
104#include "llfloatermap.h" 105#include "llfloatermap.h"
105#include "llfloatermute.h"
106#include "llfloaternamedesc.h" 106#include "llfloaternamedesc.h"
107#include "llfloaterpreference.h" 107#include "llfloaterpreference.h"
108#include "llfloatersnapshot.h" 108#include "llfloatersnapshot.h"
@@ -132,7 +132,7 @@
132#include "llresmgr.h" 132#include "llresmgr.h"
133#include "llrootview.h" 133#include "llrootview.h"
134#include "llselectmgr.h" 134#include "llselectmgr.h"
135#include "llsphere.h" 135#include "llrendersphere.h"
136#include "llstartup.h" 136#include "llstartup.h"
137#include "llstatusbar.h" 137#include "llstatusbar.h"
138#include "llstatview.h" 138#include "llstatview.h"
@@ -155,10 +155,9 @@
155#include "lltoolmorph.h" 155#include "lltoolmorph.h"
156#include "lltoolpie.h" 156#include "lltoolpie.h"
157#include "lltoolplacer.h" 157#include "lltoolplacer.h"
158#include "lltoolselect.h"
159#include "lltoolselectland.h" 158#include "lltoolselectland.h"
160#include "lltoolview.h" 159#include "lltoolview.h"
161#include "llvieweruictrlfactory.h" 160#include "lluictrlfactory.h"
162#include "lluploaddialog.h" 161#include "lluploaddialog.h"
163#include "llurldispatcher.h" // SLURL from other app instance 162#include "llurldispatcher.h" // SLURL from other app instance
164#include "llvieweraudio.h" 163#include "llvieweraudio.h"
@@ -177,12 +176,12 @@
177#include "llvovolume.h" 176#include "llvovolume.h"
178#include "llworld.h" 177#include "llworld.h"
179#include "llworldmapview.h" 178#include "llworldmapview.h"
180#include "moviemaker.h"
181#include "pipeline.h" 179#include "pipeline.h"
182#include "llappviewer.h" 180#include "llappviewer.h"
183#include "llurlsimstring.h" 181#include "llurlsimstring.h"
184#include "llviewerdisplay.h" 182#include "llviewerdisplay.h"
185#include "llspatialpartition.h" 183#include "llspatialpartition.h"
184#include "llviewerjoystick.h"
186 185
187#if LL_WINDOWS 186#if LL_WINDOWS
188#include "llwindebug.h" 187#include "llwindebug.h"
@@ -241,11 +240,6 @@ BOOL gPickTransparent = TRUE;
241 240
242BOOL gDebugFastUIRender = FALSE; 241BOOL gDebugFastUIRender = FALSE;
243 242
244BOOL gbCapturing = FALSE;
245#if !LL_SOLARIS
246MovieMaker gMovieMaker;
247#endif
248
249// HUD display lines in lower right 243// HUD display lines in lower right
250BOOL gDisplayWindInfo = FALSE; 244BOOL gDisplayWindInfo = FALSE;
251BOOL gDisplayCameraPos = FALSE; 245BOOL gDisplayCameraPos = FALSE;
@@ -268,7 +262,6 @@ const S32 PICK_DIAMETER = 2 * PICK_HALF_WIDTH+1;
268const F32 MIN_DISPLAY_SCALE = 0.85f; 262const F32 MIN_DISPLAY_SCALE = 0.85f;
269 263
270const S32 CONSOLE_BOTTOM_PAD = 40; 264const S32 CONSOLE_BOTTOM_PAD = 40;
271
272#ifdef SABINRIG 265#ifdef SABINRIG
273/// ALL RIG STUFF 266/// ALL RIG STUFF
274bool rigControl = false; 267bool rigControl = false;
@@ -486,7 +479,7 @@ public:
486 camera_center_text = llformat("CameraCenter %f %f %f", 479 camera_center_text = llformat("CameraCenter %f %f %f",
487 (F32)(tvector.mdV[VX]), (F32)(tvector.mdV[VY]), (F32)(tvector.mdV[VZ])); 480 (F32)(tvector.mdV[VX]), (F32)(tvector.mdV[VY]), (F32)(tvector.mdV[VZ]));
488 481
489 tvector = LLVector4(gCamera->getAtAxis()); 482 tvector = LLVector4(LLViewerCamera::getInstance()->getAtAxis());
490 camera_view_text = llformat("CameraAtAxis %f %f %f", 483 camera_view_text = llformat("CameraAtAxis %f %f %f",
491 (F32)(tvector.mdV[VX]), (F32)(tvector.mdV[VY]), (F32)(tvector.mdV[VZ])); 484 (F32)(tvector.mdV[VX]), (F32)(tvector.mdV[VY]), (F32)(tvector.mdV[VZ]));
492 485
@@ -520,9 +513,16 @@ public:
520 } 513 }
521 if (gDisplayFOV) 514 if (gDisplayFOV)
522 { 515 {
523 addText(xpos, ypos, llformat("FOV: %2.1f deg", RAD_TO_DEG * gCamera->getView())); 516 addText(xpos, ypos, llformat("FOV: %2.1f deg", RAD_TO_DEG * LLViewerCamera::getInstance()->getView()));
524 ypos += y_inc; 517 ypos += y_inc;
525 } 518 }
519
520 if (LLViewerJoystick::getInstance()->getOverrideCamera())
521 {
522 addText(xpos + 200, ypos, llformat("Flycam"));
523 ypos += y_inc;
524 }
525
526 if (gSavedSettings.getBOOL("DebugShowRenderInfo")) 526 if (gSavedSettings.getBOOL("DebugShowRenderInfo"))
527 { 527 {
528 if (gPipeline.getUseVertexShaders() == 0) 528 if (gPipeline.getUseVertexShaders() == 0)
@@ -698,13 +698,10 @@ BOOL LLViewerWindow::handleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask
698 gHoverView->cancelHover(); 698 gHoverView->cancelHover();
699 } 699 }
700 700
701 if (gToolMgr) 701 // Don't let the user move the mouse out of the window until mouse up.
702 if( LLToolMgr::getInstance()->getCurrentTool()->clipMouseWhenDown() )
702 { 703 {
703 // Don't let the user move the mouse out of the window until mouse up. 704 mWindow->setMouseClipping(TRUE);
704 if( gToolMgr->getCurrentTool()->clipMouseWhenDown() )
705 {
706 mWindow->setMouseClipping(TRUE);
707 }
708 } 705 }
709 706
710 LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture(); 707 LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture();
@@ -756,16 +753,13 @@ BOOL LLViewerWindow::handleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask
756 return FALSE; 753 return FALSE;
757 } 754 }
758 755
759 if (gToolMgr) 756 if(LLToolMgr::getInstance()->getCurrentTool()->handleMouseDown( x, y, mask ) )
760 { 757 {
761 if(gToolMgr->getCurrentTool()->handleMouseDown( x, y, mask ) ) 758 // This is necessary to force clicks in the world to cause edit
762 { 759 // boxes that might have keyboard focus to relinquish it, and hence
763 // This is necessary to force clicks in the world to cause edit 760 // cause a commit to update their value. JC
764 // boxes that might have keyboard focus to relinquish it, and hence 761 gFocusMgr.setKeyboardFocus(NULL);
765 // cause a commit to update their value. JC 762 return TRUE;
766 gFocusMgr.setKeyboardFocus(NULL);
767 return TRUE;
768 }
769 } 763 }
770 764
771 return FALSE; 765 return FALSE;
@@ -842,12 +836,9 @@ BOOL LLViewerWindow::handleDoubleClick(LLWindow *window, LLCoordGL pos, MASK ma
842 return TRUE; 836 return TRUE;
843 } 837 }
844 838
845 if (gToolMgr) 839 if(LLToolMgr::getInstance()->getCurrentTool()->handleDoubleClick( x, y, mask ) )
846 { 840 {
847 if(gToolMgr->getCurrentTool()->handleDoubleClick( x, y, mask ) ) 841 return TRUE;
848 {
849 return TRUE;
850 }
851 } 842 }
852 843
853 // if we got this far and nothing handled a double click, pass a normal mouse down 844 // if we got this far and nothing handled a double click, pass a normal mouse down
@@ -886,15 +877,11 @@ BOOL LLViewerWindow::handleMouseUp(LLWindow *window, LLCoordGL pos, MASK mask)
886 877
887 mWindow->releaseMouse(); 878 mWindow->releaseMouse();
888 879
889 LLTool *tool = NULL; 880 LLTool *tool = LLToolMgr::getInstance()->getCurrentTool();
890 if (gToolMgr)
891 {
892 tool = gToolMgr->getCurrentTool();
893 881
894 if( tool->clipMouseWhenDown() ) 882 if( tool->clipMouseWhenDown() )
895 { 883 {
896 mWindow->setMouseClipping(FALSE); 884 mWindow->setMouseClipping(FALSE);
897 }
898 } 885 }
899 886
900 LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture(); 887 LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture();
@@ -986,13 +973,10 @@ BOOL LLViewerWindow::handleRightMouseDown(LLWindow *window, LLCoordGL pos, MASK
986 gHoverView->cancelHover(); 973 gHoverView->cancelHover();
987 } 974 }
988 975
989 if (gToolMgr) 976 // Don't let the user move the mouse out of the window until mouse up.
977 if( LLToolMgr::getInstance()->getCurrentTool()->clipMouseWhenDown() )
990 { 978 {
991 // Don't let the user move the mouse out of the window until mouse up. 979 mWindow->setMouseClipping(TRUE);
992 if( gToolMgr->getCurrentTool()->clipMouseWhenDown() )
993 {
994 mWindow->setMouseClipping(TRUE);
995 }
996 } 980 }
997 981
998 LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture(); 982 LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture();
@@ -1036,26 +1020,23 @@ BOOL LLViewerWindow::handleRightMouseDown(LLWindow *window, LLCoordGL pos, MASK
1036 llinfos << "Right Mouse Down not handled by view" << llendl; 1020 llinfos << "Right Mouse Down not handled by view" << llendl;
1037 } 1021 }
1038 1022
1039 if (gToolMgr) 1023 if(LLToolMgr::getInstance()->getCurrentTool()->handleRightMouseDown( x, y, mask ) )
1040 { 1024 {
1041 if(gToolMgr->getCurrentTool()->handleRightMouseDown( x, y, mask ) ) 1025 // This is necessary to force clicks in the world to cause edit
1042 { 1026 // boxes that might have keyboard focus to relinquish it, and hence
1043 // This is necessary to force clicks in the world to cause edit 1027 // cause a commit to update their value. JC
1044 // boxes that might have keyboard focus to relinquish it, and hence 1028 gFocusMgr.setKeyboardFocus(NULL);
1045 // cause a commit to update their value. JC 1029 return TRUE;
1046 gFocusMgr.setKeyboardFocus(NULL);
1047 return TRUE;
1048 }
1049 } 1030 }
1050 1031
1051 // *HACK: this should be rolled into the composite tool logic, not 1032 // *HACK: this should be rolled into the composite tool logic, not
1052 // hardcoded at the top level. 1033 // hardcoded at the top level.
1053 if (gToolPie && (CAMERA_MODE_CUSTOMIZE_AVATAR != gAgent.getCameraMode()) ) 1034 if (CAMERA_MODE_CUSTOMIZE_AVATAR != gAgent.getCameraMode())
1054 { 1035 {
1055 // If the current tool didn't process the click, we should show 1036 // If the current tool didn't process the click, we should show
1056 // the pie menu. This can be done by passing the event to the pie 1037 // the pie menu. This can be done by passing the event to the pie
1057 // menu tool. 1038 // menu tool.
1058 gToolPie->handleRightMouseDown(x, y, mask); 1039 LLToolPie::getInstance()->handleRightMouseDown(x, y, mask);
1059 // show_context_menu( x, y, mask ); 1040 // show_context_menu( x, y, mask );
1060 } 1041 }
1061 1042
@@ -1095,15 +1076,11 @@ BOOL LLViewerWindow::handleRightMouseUp(LLWindow *window, LLCoordGL pos, MASK m
1095 1076
1096 mWindow->releaseMouse(); 1077 mWindow->releaseMouse();
1097 1078
1098 LLTool *tool = NULL; 1079 LLTool *tool = LLToolMgr::getInstance()->getCurrentTool();
1099 if (gToolMgr)
1100 {
1101 tool = gToolMgr->getCurrentTool();
1102 1080
1103 if( tool->clipMouseWhenDown() ) 1081 if( tool->clipMouseWhenDown() )
1104 { 1082 {
1105 mWindow->setMouseClipping(FALSE); 1083 mWindow->setMouseClipping(FALSE);
1106 }
1107 } 1084 }
1108 1085
1109 LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture(); 1086 LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture();
@@ -1252,10 +1229,7 @@ void LLViewerWindow::handleFocus(LLWindow *window)
1252 LLModalDialog::onAppFocusGained(); 1229 LLModalDialog::onAppFocusGained();
1253 1230
1254 gAgent.onAppFocusGained(); 1231 gAgent.onAppFocusGained();
1255 if (gToolMgr) 1232 LLToolMgr::getInstance()->onAppFocusGained();
1256 {
1257 gToolMgr->onAppFocusGained();
1258 }
1259 1233
1260 gShowTextEditCursor = TRUE; 1234 gShowTextEditCursor = TRUE;
1261 1235
@@ -1275,10 +1249,7 @@ void LLViewerWindow::handleFocusLost(LLWindow *window)
1275{ 1249{
1276 gFocusMgr.setAppHasFocus(FALSE); 1250 gFocusMgr.setAppHasFocus(FALSE);
1277 //LLModalDialog::onAppFocusLost(); 1251 //LLModalDialog::onAppFocusLost();
1278 if( gToolMgr ) 1252 LLToolMgr::getInstance()->onAppFocusLost();
1279 {
1280 gToolMgr->onAppFocusLost();
1281 }
1282 gFocusMgr.setMouseCapture( NULL ); 1253 gFocusMgr.setMouseCapture( NULL );
1283 1254
1284 if (gMenuBarView) 1255 if (gMenuBarView)
@@ -1340,6 +1311,7 @@ BOOL LLViewerWindow::handleTranslatedKeyUp(KEY key, MASK mask)
1340 1311
1341void LLViewerWindow::handleScanKey(KEY key, BOOL key_down, BOOL key_up, BOOL key_level) 1312void LLViewerWindow::handleScanKey(KEY key, BOOL key_down, BOOL key_up, BOOL key_level)
1342{ 1313{
1314 LLViewerJoystick::getInstance()->setCameraNeedsUpdate(true);
1343 return gViewerKeyboard.scanKey(key, key_down, key_up, key_level); 1315 return gViewerKeyboard.scanKey(key, key_down, key_up, key_level);
1344} 1316}
1345 1317
@@ -1402,6 +1374,12 @@ BOOL LLViewerWindow::handleActivate(LLWindow *window, BOOL activated)
1402 return TRUE; 1374 return TRUE;
1403} 1375}
1404 1376
1377BOOL LLViewerWindow::handleActivateApp(LLWindow *window, BOOL activating)
1378{
1379 LLViewerJoystick::getInstance()->setNeedsReset(true);
1380 return FALSE;
1381}
1382
1405 1383
1406void LLViewerWindow::handleMenuSelect(LLWindow *window, S32 menu_item) 1384void LLViewerWindow::handleMenuSelect(LLWindow *window, S32 menu_item)
1407{ 1385{
@@ -1434,9 +1412,9 @@ BOOL LLViewerWindow::handlePaint(LLWindow *window, S32 x, S32 y, S32 width, S
1434 char temp_str[255]; /* Flawfinder: ignore */ 1412 char temp_str[255]; /* Flawfinder: ignore */
1435 snprintf(temp_str, sizeof(temp_str), "%s FPS %3.1f Phy FPS %2.1f Time Dil %1.3f", /* Flawfinder: ignore */ 1413 snprintf(temp_str, sizeof(temp_str), "%s FPS %3.1f Phy FPS %2.1f Time Dil %1.3f", /* Flawfinder: ignore */
1436 name_str.c_str(), 1414 name_str.c_str(),
1437 gViewerStats->mFPSStat.getMeanPerSec(), 1415 LLViewerStats::getInstance()->mFPSStat.getMeanPerSec(),
1438 gViewerStats->mSimPhysicsFPS.getPrev(0), 1416 LLViewerStats::getInstance()->mSimPhysicsFPS.getPrev(0),
1439 gViewerStats->mSimTimeDilation.getPrev(0)); 1417 LLViewerStats::getInstance()->mSimTimeDilation.getPrev(0));
1440 len = strlen(temp_str); /* Flawfinder: ignore */ 1418 len = strlen(temp_str); /* Flawfinder: ignore */
1441 TextOutA(hdc, 0, 0, temp_str, len); 1419 TextOutA(hdc, 0, 0, temp_str, len);
1442 1420
@@ -1488,6 +1466,26 @@ void LLViewerWindow::handleDataCopy(LLWindow *window, S32 data_type, void *data)
1488 } 1466 }
1489} 1467}
1490 1468
1469BOOL LLViewerWindow::handleTimerEvent(LLWindow *window)
1470{
1471 if (LLViewerJoystick::getInstance()->getOverrideCamera())
1472 {
1473 LLViewerJoystick::getInstance()->updateStatus();
1474 return TRUE;
1475 }
1476 return FALSE;
1477}
1478
1479BOOL LLViewerWindow::handleDeviceChange(LLWindow *window)
1480{
1481 // give a chance to use a joystick after startup (hot-plugging)
1482 if (!LLViewerJoystick::getInstance()->isJoystickInitialized() )
1483 {
1484 LLViewerJoystick::getInstance()->init(true);
1485 return TRUE;
1486 }
1487 return FALSE;
1488}
1491 1489
1492// 1490//
1493// Classes 1491// Classes
@@ -1528,7 +1526,8 @@ LLViewerWindow::LLViewerWindow(
1528 gNoRender, 1526 gNoRender,
1529 gSavedSettings.getBOOL("DisableVerticalSync"), 1527 gSavedSettings.getBOOL("DisableVerticalSync"),
1530 !gNoRender, 1528 !gNoRender,
1531 ignore_pixel_depth); 1529 ignore_pixel_depth,
1530 gSavedSettings.getU32("RenderFSAASamples"));
1532#if LL_WINDOWS 1531#if LL_WINDOWS
1533 if (!LLWinDebug::setupExceptionHandler()) 1532 if (!LLWinDebug::setupExceptionHandler())
1534 { 1533 {
@@ -1572,21 +1571,21 @@ LLViewerWindow::LLViewerWindow(
1572 // 1571 //
1573 llinfos << "Loading feature tables." << llendl; 1572 llinfos << "Loading feature tables." << llendl;
1574 1573
1575 gFeatureManagerp->init(); 1574 LLFeatureManager::getInstance()->init();
1576 1575
1577 // Initialize OpenGL Renderer 1576 // Initialize OpenGL Renderer
1578 if (!gFeatureManagerp->isFeatureAvailable("RenderVBOEnable") || 1577 if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderVBOEnable") ||
1579 !gGLManager.mHasVertexBufferObject) 1578 !gGLManager.mHasVertexBufferObject)
1580 { 1579 {
1581 gSavedSettings.setBOOL("RenderVBOEnable", FALSE); 1580 gSavedSettings.setBOOL("RenderVBOEnable", FALSE);
1582 } 1581 }
1583 LLVertexBuffer::initClass(gSavedSettings.getBOOL("RenderVBOEnable")); 1582 LLVertexBuffer::initClass(gSavedSettings.getBOOL("RenderVBOEnable"));
1584 1583
1585 if (gFeatureManagerp->isSafe() 1584 if (LLFeatureManager::getInstance()->isSafe()
1586 || (gSavedSettings.getS32("LastFeatureVersion") != gFeatureManagerp->getVersion()) 1585 || (gSavedSettings.getS32("LastFeatureVersion") != LLFeatureManager::getInstance()->getVersion())
1587 || (gSavedSettings.getBOOL("ProbeHardwareOnStartup"))) 1586 || (gSavedSettings.getBOOL("ProbeHardwareOnStartup")))
1588 { 1587 {
1589 gFeatureManagerp->applyRecommendedSettings(); 1588 LLFeatureManager::getInstance()->applyRecommendedSettings();
1590 gSavedSettings.setBOOL("ProbeHardwareOnStartup", FALSE); 1589 gSavedSettings.setBOOL("ProbeHardwareOnStartup", FALSE);
1591 } 1590 }
1592 1591
@@ -1594,7 +1593,7 @@ LLViewerWindow::LLViewerWindow(
1594 if (gSavedSettings.getBOOL("RenderInitError")) 1593 if (gSavedSettings.getBOOL("RenderInitError"))
1595 { 1594 {
1596 mInitAlert = "DisplaySettingsNoShaders"; 1595 mInitAlert = "DisplaySettingsNoShaders";
1597 gFeatureManagerp->setGraphicsLevel(0, false); 1596 LLFeatureManager::getInstance()->setGraphicsLevel(0, false);
1598 gSavedSettings.setU32("RenderQualityPerformance", 0); 1597 gSavedSettings.setU32("RenderQualityPerformance", 0);
1599 1598
1600 } 1599 }
@@ -1617,9 +1616,6 @@ LLViewerWindow::LLViewerWindow(
1617 initFonts(); 1616 initFonts();
1618 } 1617 }
1619 1618
1620 // Init Resource Manager
1621 gResMgr = new LLResMgr();
1622
1623 // Make avatar head look forward at start 1619 // Make avatar head look forward at start
1624 mCurrentMousePoint.mX = getWindowWidth() / 2; 1620 mCurrentMousePoint.mX = getWindowWidth() / 2;
1625 mCurrentMousePoint.mY = getWindowHeight() / 2; 1621 mCurrentMousePoint.mY = getWindowHeight() / 2;
@@ -1790,6 +1786,19 @@ void adjust_rect_top_left(const LLString& control, const LLRect& window)
1790 } 1786 }
1791} 1787}
1792 1788
1789void adjust_rect_top_center(const LLString& control, const LLRect& window)
1790{
1791 LLRect r = gSavedSettings.getRect(control);
1792 if (r.mLeft == 0 && r.mBottom == 0)
1793 {
1794 r.setLeftTopAndSize( window.getWidth()/2 - r.getWidth()/2,
1795 window.getHeight(),
1796 r.getWidth(),
1797 r.getHeight() );
1798 gSavedSettings.setRect(control, r);
1799 }
1800}
1801
1793void adjust_rect_top_right(const LLString& control, const LLRect& window) 1802void adjust_rect_top_right(const LLString& control, const LLRect& window)
1794{ 1803{
1795 LLRect r = gSavedSettings.getRect(control); 1804 LLRect r = gSavedSettings.getRect(control);
@@ -1808,9 +1817,11 @@ void adjust_rect_bottom_center(const LLString& control, const LLRect& window)
1808 LLRect r = gSavedSettings.getRect(control); 1817 LLRect r = gSavedSettings.getRect(control);
1809 if (r.mLeft == 0 && r.mBottom == 0) 1818 if (r.mLeft == 0 && r.mBottom == 0)
1810 { 1819 {
1820 // *TODO: Adjust based on XUI XML
1821 const S32 TOOLBAR_HEIGHT = 64;
1811 r.setOriginAndSize( 1822 r.setOriginAndSize(
1812 window.getWidth()/2 - r.getWidth()/2, 1823 window.getWidth()/2 - r.getWidth()/2,
1813 0, 1824 TOOLBAR_HEIGHT,
1814 r.getWidth(), 1825 r.getWidth(),
1815 r.getHeight()); 1826 r.getHeight());
1816 gSavedSettings.setRect(control, r); 1827 gSavedSettings.setRect(control, r);
@@ -1844,24 +1855,24 @@ void LLViewerWindow::adjustRectanglesForFirstUse(const LLRect& window)
1844{ 1855{
1845 LLRect r; 1856 LLRect r;
1846 1857
1847 adjust_rect_bottom_center("FloaterMoveRect", window); 1858 adjust_rect_bottom_center("FloaterMoveRect2", window);
1848 1859
1849 adjust_rect_bottom_center("FloaterCameraRect", window); 1860 adjust_rect_top_center("FloaterCameraRect3", window);
1850 1861
1851 adjust_rect_top_left("FloaterCustomizeAppearanceRect", window); 1862 adjust_rect_top_left("FloaterCustomizeAppearanceRect", window);
1852 1863
1853 adjust_rect_top_left("FloaterLandRect5", window); 1864 adjust_rect_top_left("FloaterLandRect5", window);
1854 1865
1866 adjust_rect_top_left("FloaterHUDRect", window);
1867
1855 adjust_rect_top_left("FloaterFindRect2", window); 1868 adjust_rect_top_left("FloaterFindRect2", window);
1856 1869
1857 adjust_rect_top_left("FloaterGestureRect", window); 1870 adjust_rect_top_left("FloaterGestureRect2", window);
1858 1871
1859 adjust_rect_top_right("FloaterMiniMapRect", window); 1872 adjust_rect_top_right("FloaterMiniMapRect", window);
1860 1873
1861 adjust_rect_top_right("FloaterLagMeter", window); 1874 adjust_rect_top_right("FloaterLagMeter", window);
1862 1875
1863 adjust_rect_top_right("FloaterLagMeter", window);
1864
1865 adjust_rect_top_left("FloaterBuildOptionsRect", window); 1876 adjust_rect_top_left("FloaterBuildOptionsRect", window);
1866 1877
1867 // bottom-right 1878 // bottom-right
@@ -1921,7 +1932,7 @@ void LLViewerWindow::initWorldUI()
1921 mRootView->addChild(gMorphView); 1932 mRootView->addChild(gMorphView);
1922 gMorphView->setVisible(FALSE); 1933 gMorphView->setVisible(FALSE);
1923 1934
1924 gFloaterMute = LLFloaterMute::getInstance(); 1935 // *Note: this is where gFloaterMute used to be initialized.
1925 1936
1926 LLWorldMapView::initClass(); 1937 LLWorldMapView::initClass();
1927 1938
@@ -1981,15 +1992,12 @@ LLViewerWindow::~LLViewerWindow()
1981 // Automatically deleted as children of mRootView. Fix the globals. 1992 // Automatically deleted as children of mRootView. Fix the globals.
1982 gFloaterTools = NULL; 1993 gFloaterTools = NULL;
1983 gStatusBar = NULL; 1994 gStatusBar = NULL;
1984 gFloaterCamera = NULL;
1985 gIMMgr = NULL; 1995 gIMMgr = NULL;
1986 gHoverView = NULL; 1996 gHoverView = NULL;
1987 1997
1988 gFloaterView = NULL; 1998 gFloaterView = NULL;
1989 gMorphView = NULL; 1999 gMorphView = NULL;
1990 2000
1991 gFloaterMute = NULL;
1992
1993 gFloaterMap = NULL; 2001 gFloaterMap = NULL;
1994 gHUDView = NULL; 2002 gHUDView = NULL;
1995 2003
@@ -1997,9 +2005,6 @@ LLViewerWindow::~LLViewerWindow()
1997 2005
1998 delete mToolTip; 2006 delete mToolTip;
1999 mToolTip = NULL; 2007 mToolTip = NULL;
2000
2001 delete gResMgr;
2002 gResMgr = NULL;
2003 2008
2004 //-------------------------------------------------------- 2009 //--------------------------------------------------------
2005 // Shutdown GL cleanly. Order is very important here. 2010 // Shutdown GL cleanly. Order is very important here.
@@ -2028,11 +2033,8 @@ LLViewerWindow::~LLViewerWindow()
2028 delete[] mPickBuffer; 2033 delete[] mPickBuffer;
2029 mPickBuffer = NULL; 2034 mPickBuffer = NULL;
2030 2035
2031 if (gSelectMgr) 2036 llinfos << "Cleaning up select manager" << llendl;
2032 { 2037 LLSelectMgr::getInstance()->cleanup();
2033 llinfos << "Cleaning up select manager" << llendl;
2034 gSelectMgr->cleanup();
2035 }
2036 2038
2037 LLVertexBuffer::cleanupClass(); 2039 LLVertexBuffer::cleanupClass();
2038 2040
@@ -2106,17 +2108,17 @@ void LLViewerWindow::reshape(S32 width, S32 height)
2106 2108
2107 glViewport(0, 0, width, height ); 2109 glViewport(0, 0, width, height );
2108 2110
2109 if (height > 0 && gCamera) 2111 if (height > 0)
2110 { 2112 {
2111 gCamera->setViewHeightInPixels( height ); 2113 LLViewerCamera::getInstance()->setViewHeightInPixels( height );
2112 if (mWindow->getFullscreen()) 2114 if (mWindow->getFullscreen())
2113 { 2115 {
2114 // force to 4:3 aspect for odd resolutions 2116 // force to 4:3 aspect for odd resolutions
2115 gCamera->setAspect( getDisplayAspectRatio() ); 2117 LLViewerCamera::getInstance()->setAspect( getDisplayAspectRatio() );
2116 } 2118 }
2117 else 2119 else
2118 { 2120 {
2119 gCamera->setAspect( width / (F32) height); 2121 LLViewerCamera::getInstance()->setAspect( width / (F32) height);
2120 } 2122 }
2121 } 2123 }
2122 2124
@@ -2173,8 +2175,8 @@ void LLViewerWindow::reshape(S32 width, S32 height)
2173 } 2175 }
2174 } 2176 }
2175 2177
2176 gViewerStats->setStat(LLViewerStats::ST_WINDOW_WIDTH, (F64)width); 2178 LLViewerStats::getInstance()->setStat(LLViewerStats::ST_WINDOW_WIDTH, (F64)width);
2177 gViewerStats->setStat(LLViewerStats::ST_WINDOW_HEIGHT, (F64)height); 2179 LLViewerStats::getInstance()->setStat(LLViewerStats::ST_WINDOW_HEIGHT, (F64)height);
2178 gResizeScreenTexture = TRUE; 2180 gResizeScreenTexture = TRUE;
2179 } 2181 }
2180} 2182}
@@ -2285,7 +2287,7 @@ void LLViewerWindow::draw()
2285 glLoadIdentity(); 2287 glLoadIdentity();
2286 2288
2287 microsecondsToTimecodeString(gFrameTime,text); 2289 microsecondsToTimecodeString(gFrameTime,text);
2288 const LLFontGL* font = gResMgr->getRes( LLFONT_SANSSERIF ); 2290 const LLFontGL* font = LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF );
2289 font->renderUTF8(text, 0, 2291 font->renderUTF8(text, 0,
2290 llround((getWindowWidth()/2)-100.f), 2292 llround((getWindowWidth()/2)-100.f),
2291 llround((getWindowHeight()-60.f)), 2293 llround((getWindowHeight()-60.f)),
@@ -2302,30 +2304,24 @@ void LLViewerWindow::draw()
2302 glScalef(mDisplayScale.mV[VX], mDisplayScale.mV[VY], 1.f); 2304 glScalef(mDisplayScale.mV[VX], mDisplayScale.mV[VY], 1.f);
2303 2305
2304 LLVector2 old_scale_factor = LLUI::sGLScaleFactor; 2306 LLVector2 old_scale_factor = LLUI::sGLScaleFactor;
2305 if (gCamera) 2307 // apply camera zoom transform (for high res screenshots)
2308 F32 zoom_factor = LLViewerCamera::getInstance()->getZoomFactor();
2309 S16 sub_region = LLViewerCamera::getInstance()->getZoomSubRegion();
2310 if (zoom_factor > 1.f)
2306 { 2311 {
2307 // apply camera zoom transform (for high res screenshots) 2312 //decompose subregion number to x and y values
2308 F32 zoom_factor = gCamera->getZoomFactor(); 2313 int pos_y = sub_region / llceil(zoom_factor);
2309 S16 sub_region = gCamera->getZoomSubRegion(); 2314 int pos_x = sub_region - (pos_y*llceil(zoom_factor));
2310 if (zoom_factor > 1.f) 2315 // offset for this tile
2311 { 2316 glTranslatef((F32)gViewerWindow->getWindowWidth() * -(F32)pos_x,
2312 //decompose subregion number to x and y values 2317 (F32)gViewerWindow->getWindowHeight() * -(F32)pos_y,
2313 int pos_y = sub_region / llceil(zoom_factor); 2318 0.f);
2314 int pos_x = sub_region - (pos_y*llceil(zoom_factor)); 2319 glScalef(zoom_factor, zoom_factor, 1.f);
2315 // offset for this tile 2320 LLUI::sGLScaleFactor *= zoom_factor;
2316 glTranslatef((F32)gViewerWindow->getWindowWidth() * -(F32)pos_x,
2317 (F32)gViewerWindow->getWindowHeight() * -(F32)pos_y,
2318 0.f);
2319 glScalef(zoom_factor, zoom_factor, 1.f);
2320 LLUI::sGLScaleFactor *= zoom_factor;
2321 }
2322 } 2321 }
2323 2322
2324 if (gToolMgr) 2323 // Draw tool specific overlay on world
2325 { 2324 LLToolMgr::getInstance()->getCurrentTool()->draw();
2326 // Draw tool specific overlay on world
2327 gToolMgr->getCurrentTool()->draw();
2328 }
2329 2325
2330 if( gAgent.cameraMouselook() ) 2326 if( gAgent.cameraMouselook() )
2331 { 2327 {
@@ -2401,7 +2397,9 @@ void LLViewerWindow::draw()
2401// Takes a single keydown event, usually when UI is visible 2397// Takes a single keydown event, usually when UI is visible
2402BOOL LLViewerWindow::handleKey(KEY key, MASK mask) 2398BOOL LLViewerWindow::handleKey(KEY key, MASK mask)
2403{ 2399{
2404 if (gFocusMgr.getKeyboardFocus() && !(mask & (MASK_CONTROL | MASK_ALT))) 2400 if (gFocusMgr.getKeyboardFocus()
2401 && !(mask & (MASK_CONTROL | MASK_ALT))
2402 && !gFocusMgr.getKeystrokesOnly())
2405 { 2403 {
2406 // We have keyboard focus, and it's not an accelerator 2404 // We have keyboard focus, and it's not an accelerator
2407 2405
@@ -2415,7 +2413,7 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask)
2415 // HACK look for UI editing keys 2413 // HACK look for UI editing keys
2416 if (LLView::sEditingUI) 2414 if (LLView::sEditingUI)
2417 { 2415 {
2418 if (LLFloaterEditUI::handleKeyEditUI(key, mask)) 2416 if (LLFloaterEditUI::processKeystroke(key, mask))
2419 { 2417 {
2420 return TRUE; 2418 return TRUE;
2421 } 2419 }
@@ -2547,12 +2545,9 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask)
2547 } 2545 }
2548 } 2546 }
2549 2547
2550 if (gToolMgr) 2548 if( LLToolMgr::getInstance()->getCurrentTool()->handleKey(key, mask) )
2551 { 2549 {
2552 if( gToolMgr->getCurrentTool()->handleKey(key, mask) ) 2550 return TRUE;
2553 {
2554 return TRUE;
2555 }
2556 } 2551 }
2557 2552
2558 // Try for a new-format gesture 2553 // Try for a new-format gesture
@@ -2570,14 +2565,14 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask)
2570 2565
2571 // Topmost view gets a chance before the hierarchy 2566 // Topmost view gets a chance before the hierarchy
2572 // *FIX: get rid of this? 2567 // *FIX: get rid of this?
2573 LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl(); 2568 //LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl();
2574 if (top_ctrl) 2569 //if (top_ctrl)
2575 { 2570 //{
2576 if( top_ctrl->handleKey( key, mask, TRUE ) ) 2571 // if( top_ctrl->handleKey( key, mask, TRUE ) )
2577 { 2572 // {
2578 return TRUE; 2573 // return TRUE;
2579 } 2574 // }
2580 } 2575 //}
2581 2576
2582 // give floaters first chance to handle TAB key 2577 // give floaters first chance to handle TAB key
2583 // so frontmost floater gets focus 2578 // so frontmost floater gets focus
@@ -2651,12 +2646,12 @@ BOOL LLViewerWindow::handleUnicodeChar(llwchar uni_char, MASK mask)
2651 return TRUE; 2646 return TRUE;
2652 } 2647 }
2653 2648
2654 // Topmost view gets a chance before the hierarchy 2649 //// Topmost view gets a chance before the hierarchy
2655 LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl(); 2650 //LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl();
2656 if (top_ctrl && top_ctrl->handleUnicodeChar( uni_char, FALSE ) ) 2651 //if (top_ctrl && top_ctrl->handleUnicodeChar( uni_char, FALSE ) )
2657 { 2652 //{
2658 return TRUE; 2653 // return TRUE;
2659 } 2654 //}
2660 2655
2661 return TRUE; 2656 return TRUE;
2662 } 2657 }
@@ -2713,11 +2708,8 @@ void LLViewerWindow::handleScrollWheel(S32 clicks)
2713 llinfos << "Scroll Wheel not handled by view" << llendl; 2708 llinfos << "Scroll Wheel not handled by view" << llendl;
2714 } 2709 }
2715 2710
2716 if (gWorldPointer) 2711 // Zoom the camera in and out behavior
2717 { 2712 gAgent.handleScrollWheel(clicks);
2718 // Zoom the camera in and out behavior
2719 gAgent.handleScrollWheel(clicks);
2720 }
2721 2713
2722 return; 2714 return;
2723} 2715}
@@ -2904,9 +2896,9 @@ BOOL LLViewerWindow::handlePerFrameHover()
2904 // *NOTE: sometimes tools handle the mouse as a captor, so this 2896 // *NOTE: sometimes tools handle the mouse as a captor, so this
2905 // logic is a little confusing 2897 // logic is a little confusing
2906 LLTool *tool = NULL; 2898 LLTool *tool = NULL;
2907 if (gToolMgr && gHoverView && gCamera) 2899 if (gHoverView)
2908 { 2900 {
2909 tool = gToolMgr->getCurrentTool(); 2901 tool = LLToolMgr::getInstance()->getCurrentTool();
2910 2902
2911 if(!handled && tool) 2903 if(!handled && tool)
2912 { 2904 {
@@ -2926,8 +2918,8 @@ BOOL LLViewerWindow::handlePerFrameHover()
2926 // Suppress the toolbox view if our source tool was the pie tool, 2918 // Suppress the toolbox view if our source tool was the pie tool,
2927 // and we've overridden to something else. 2919 // and we've overridden to something else.
2928 mSuppressToolbox = 2920 mSuppressToolbox =
2929 (gToolMgr->getBaseTool() == gToolPie) && 2921 (LLToolMgr::getInstance()->getBaseTool() == LLToolPie::getInstance()) &&
2930 (gToolMgr->getCurrentTool() != gToolPie); 2922 (LLToolMgr::getInstance()->getCurrentTool() != LLToolPie::getInstance());
2931 2923
2932 } 2924 }
2933 2925
@@ -2978,19 +2970,19 @@ BOOL LLViewerWindow::handlePerFrameHover()
2978 } 2970 }
2979 } 2971 }
2980 2972
2981 if (tool && tool != gToolNull && tool != gToolInspect && tool != gToolDragAndDrop && !gSavedSettings.getBOOL("FreezeTime")) 2973 if (tool && tool != gToolNull && tool != LLToolCompInspect::getInstance() && tool != LLToolDragAndDrop::getInstance() && !gSavedSettings.getBOOL("FreezeTime"))
2982 { 2974 {
2983 LLMouseHandler *captor = gFocusMgr.getMouseCapture(); 2975 LLMouseHandler *captor = gFocusMgr.getMouseCapture();
2984 // With the null, inspect, or drag and drop tool, don't muck 2976 // With the null, inspect, or drag and drop tool, don't muck
2985 // with visibility. 2977 // with visibility.
2986 2978
2987 if (gFloaterTools->isMinimized() || 2979 if (gFloaterTools->isMinimized() ||
2988 (tool != gToolPie // not default tool 2980 (tool != LLToolPie::getInstance() // not default tool
2989 && tool != gToolGun // not coming out of mouselook 2981 && tool != LLToolCompGun::getInstance() // not coming out of mouselook
2990 && !mSuppressToolbox // not override in third person 2982 && !mSuppressToolbox // not override in third person
2991 && gToolMgr->getCurrentToolset() != gFaceEditToolset // not special mode 2983 && LLToolMgr::getInstance()->getCurrentToolset() != gFaceEditToolset // not special mode
2992 && gToolMgr->getCurrentToolset() != gMouselookToolset 2984 && LLToolMgr::getInstance()->getCurrentToolset() != gMouselookToolset
2993 && (!captor || captor->isView())) // not dragging 2985 && (!captor || captor->isView())) // not dragging
2994 ) 2986 )
2995 { 2987 {
2996 // Force floater tools to be visible (unless minimized) 2988 // Force floater tools to be visible (unless minimized)
@@ -3049,7 +3041,7 @@ BOOL LLViewerWindow::handlePerFrameHover()
3049 3041
3050 // snap floaters to top of chat bar/button strip 3042 // snap floaters to top of chat bar/button strip
3051 LLView* chatbar_and_buttons = gOverlayBar->getChild<LLView>("chatbar_and_buttons", TRUE); 3043 LLView* chatbar_and_buttons = gOverlayBar->getChild<LLView>("chatbar_and_buttons", TRUE);
3052 // find top of chatbar and strate buttons, if either are visible 3044 // find top of chatbar and state buttons, if either are visible
3053 if (chatbar_and_buttons && !chatbar_and_buttons->getLocalBoundingRect().isNull()) 3045 if (chatbar_and_buttons && !chatbar_and_buttons->getLocalBoundingRect().isNull())
3054 { 3046 {
3055 // convert top/left corner of chatbar/buttons container to gFloaterView-relative coordinates 3047 // convert top/left corner of chatbar/buttons container to gFloaterView-relative coordinates
@@ -3088,9 +3080,9 @@ BOOL LLViewerWindow::handlePerFrameHover()
3088 mLastMousePoint = mCurrentMousePoint; 3080 mLastMousePoint = mCurrentMousePoint;
3089 3081
3090 // last ditch force of edit menu to selection manager 3082 // last ditch force of edit menu to selection manager
3091 if (LLEditMenuHandler::gEditMenuHandler == NULL && gSelectMgr && gSelectMgr->getSelection()->getObjectCount()) 3083 if (LLEditMenuHandler::gEditMenuHandler == NULL && LLSelectMgr::getInstance()->getSelection()->getObjectCount())
3092 { 3084 {
3093 LLEditMenuHandler::gEditMenuHandler = gSelectMgr; 3085 LLEditMenuHandler::gEditMenuHandler = LLSelectMgr::getInstance();
3094 } 3086 }
3095 3087
3096 if (gFloaterView->getCycleMode()) 3088 if (gFloaterView->getCycleMode())
@@ -3119,20 +3111,23 @@ BOOL LLViewerWindow::handlePerFrameHover()
3119 gFloaterView->syncFloaterTabOrder(); 3111 gFloaterView->syncFloaterTabOrder();
3120 } 3112 }
3121 3113
3122 if (gSavedSettings.getBOOL("ChatBarStealsFocus") && gChatBar && gFocusMgr.getKeyboardFocus() == NULL && gChatBar->getVisible()) 3114 if (gSavedSettings.getBOOL("ChatBarStealsFocus")
3115 && gChatBar
3116 && gFocusMgr.getKeyboardFocus() == NULL
3117 && gChatBar->isInVisibleChain())
3123 { 3118 {
3124 gChatBar->startChat(NULL); 3119 gChatBar->startChat(NULL);
3125 } 3120 }
3126 3121
3127 // cleanup unused selections when no modal dialogs are open 3122 // cleanup unused selections when no modal dialogs are open
3128 if (gParcelMgr && LLModalDialog::activeCount() == 0) 3123 if (LLModalDialog::activeCount() == 0)
3129 { 3124 {
3130 gParcelMgr->deselectUnused(); 3125 LLViewerParcelMgr::getInstance()->deselectUnused();
3131 } 3126 }
3132 3127
3133 if (gSelectMgr && LLModalDialog::activeCount() == 0) 3128 if (LLModalDialog::activeCount() == 0)
3134 { 3129 {
3135 gSelectMgr->deselectUnused(); 3130 LLSelectMgr::getInstance()->deselectUnused();
3136 } 3131 }
3137 3132
3138 return handled; 3133 return handled;
@@ -3179,12 +3174,12 @@ void LLViewerWindow::saveLastMouse(const LLCoordGL &point)
3179// render_hud_elements: FALSE, FALSE, FALSE 3174// render_hud_elements: FALSE, FALSE, FALSE
3180void LLViewerWindow::renderSelections( BOOL for_gl_pick, BOOL pick_parcel_walls, BOOL for_hud ) 3175void LLViewerWindow::renderSelections( BOOL for_gl_pick, BOOL pick_parcel_walls, BOOL for_hud )
3181{ 3176{
3182 LLObjectSelectionHandle selection = gSelectMgr->getSelection(); 3177 LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
3183 3178
3184 if (!for_hud && !for_gl_pick) 3179 if (!for_hud && !for_gl_pick)
3185 { 3180 {
3186 // Call this once and only once 3181 // Call this once and only once
3187 gSelectMgr->updateSilhouettes(); 3182 LLSelectMgr::getInstance()->updateSilhouettes();
3188 } 3183 }
3189 3184
3190 // Draw fence around land selections 3185 // Draw fence around land selections
@@ -3192,18 +3187,18 @@ void LLViewerWindow::renderSelections( BOOL for_gl_pick, BOOL pick_parcel_walls,
3192 { 3187 {
3193 if (pick_parcel_walls) 3188 if (pick_parcel_walls)
3194 { 3189 {
3195 gParcelMgr->renderParcelCollision(); 3190 LLViewerParcelMgr::getInstance()->renderParcelCollision();
3196 } 3191 }
3197 } 3192 }
3198 else if (( for_hud && selection->getSelectType() == SELECT_TYPE_HUD) || 3193 else if (( for_hud && selection->getSelectType() == SELECT_TYPE_HUD) ||
3199 (!for_hud && selection->getSelectType() != SELECT_TYPE_HUD)) 3194 (!for_hud && selection->getSelectType() != SELECT_TYPE_HUD))
3200 { 3195 {
3201 gSelectMgr->renderSilhouettes(for_hud); 3196 LLSelectMgr::getInstance()->renderSilhouettes(for_hud);
3202 3197
3203 stop_glerror(); 3198 stop_glerror();
3204 3199
3205 // setup HUD render 3200 // setup HUD render
3206 if (selection->getSelectType() == SELECT_TYPE_HUD && gSelectMgr->getSelection()->getObjectCount()) 3201 if (selection->getSelectType() == SELECT_TYPE_HUD && LLSelectMgr::getInstance()->getSelection()->getObjectCount())
3207 { 3202 {
3208 LLBBox hud_bbox = gAgent.getAvatarObject()->getHUDBBox(); 3203 LLBBox hud_bbox = gAgent.getAvatarObject()->getHUDBBox();
3209 3204
@@ -3212,7 +3207,7 @@ void LLViewerWindow::renderSelections( BOOL for_gl_pick, BOOL pick_parcel_walls,
3212 glPushMatrix(); 3207 glPushMatrix();
3213 glLoadIdentity(); 3208 glLoadIdentity();
3214 F32 depth = llmax(1.f, hud_bbox.getExtentLocal().mV[VX] * 1.1f); 3209 F32 depth = llmax(1.f, hud_bbox.getExtentLocal().mV[VX] * 1.1f);
3215 glOrtho(-0.5f * gCamera->getAspect(), 0.5f * gCamera->getAspect(), -0.5f, 0.5f, 0.f, depth); 3210 glOrtho(-0.5f * LLViewerCamera::getInstance()->getAspect(), 0.5f * LLViewerCamera::getInstance()->getAspect(), -0.5f, 0.5f, 0.f, depth);
3216 3211
3217 glMatrixMode(GL_MODELVIEW); 3212 glMatrixMode(GL_MODELVIEW);
3218 glPushMatrix(); 3213 glPushMatrix();
@@ -3222,7 +3217,7 @@ void LLViewerWindow::renderSelections( BOOL for_gl_pick, BOOL pick_parcel_walls,
3222 } 3217 }
3223 3218
3224 // Render light for editing 3219 // Render light for editing
3225 if (LLSelectMgr::sRenderLightRadius && gToolMgr->inEdit()) 3220 if (LLSelectMgr::sRenderLightRadius && LLToolMgr::getInstance()->inEdit())
3226 { 3221 {
3227 LLImageGL::unbindTexture(0); 3222 LLImageGL::unbindTexture(0);
3228 LLGLEnable gls_blend(GL_BLEND); 3223 LLGLEnable gls_blend(GL_BLEND);
@@ -3268,7 +3263,7 @@ void LLViewerWindow::renderSelections( BOOL for_gl_pick, BOOL pick_parcel_walls,
3268 return true; 3263 return true;
3269 } 3264 }
3270 } func; 3265 } func;
3271 gSelectMgr->getSelection()->applyToObjects(&func); 3266 LLSelectMgr::getInstance()->getSelection()->applyToObjects(&func);
3272 3267
3273 glPopMatrix(); 3268 glPopMatrix();
3274 } 3269 }
@@ -3277,7 +3272,7 @@ void LLViewerWindow::renderSelections( BOOL for_gl_pick, BOOL pick_parcel_walls,
3277 // not be recalculated at this time. If they are, then group rotations will break. 3272 // not be recalculated at this time. If they are, then group rotations will break.
3278 3273
3279 // Draw arrows at average center of all selected objects 3274 // Draw arrows at average center of all selected objects
3280 LLTool* tool = gToolMgr->getCurrentTool(); 3275 LLTool* tool = LLToolMgr::getInstance()->getCurrentTool();
3281 if (tool) 3276 if (tool)
3282 { 3277 {
3283 if(tool->isAlwaysRendered()) 3278 if(tool->isAlwaysRendered())
@@ -3286,15 +3281,15 @@ void LLViewerWindow::renderSelections( BOOL for_gl_pick, BOOL pick_parcel_walls,
3286 } 3281 }
3287 else 3282 else
3288 { 3283 {
3289 if( !gSelectMgr->getSelection()->isEmpty() ) 3284 if( !LLSelectMgr::getInstance()->getSelection()->isEmpty() )
3290 { 3285 {
3291 BOOL moveable_object_selected = FALSE; 3286 BOOL moveable_object_selected = FALSE;
3292 BOOL all_selected_objects_move = TRUE; 3287 BOOL all_selected_objects_move = TRUE;
3293 BOOL all_selected_objects_modify = TRUE; 3288 BOOL all_selected_objects_modify = TRUE;
3294 BOOL selecting_linked_set = !gSavedSettings.getBOOL("EditLinkedParts"); 3289 BOOL selecting_linked_set = !gSavedSettings.getBOOL("EditLinkedParts");
3295 3290
3296 for (LLObjectSelection::iterator iter = gSelectMgr->getSelection()->begin(); 3291 for (LLObjectSelection::iterator iter = LLSelectMgr::getInstance()->getSelection()->begin();
3297 iter != gSelectMgr->getSelection()->end(); iter++) 3292 iter != LLSelectMgr::getInstance()->getSelection()->end(); iter++)
3298 { 3293 {
3299 LLSelectNode* nodep = *iter; 3294 LLSelectNode* nodep = *iter;
3300 LLViewerObject* object = nodep->getObject(); 3295 LLViewerObject* object = nodep->getObject();
@@ -3310,17 +3305,17 @@ void LLViewerWindow::renderSelections( BOOL for_gl_pick, BOOL pick_parcel_walls,
3310 3305
3311 BOOL draw_handles = TRUE; 3306 BOOL draw_handles = TRUE;
3312 3307
3313 if (tool == gToolTranslate && (!moveable_object_selected || !all_selected_objects_move)) 3308 if (tool == LLToolCompTranslate::getInstance() && (!moveable_object_selected || !all_selected_objects_move))
3314 { 3309 {
3315 draw_handles = FALSE; 3310 draw_handles = FALSE;
3316 } 3311 }
3317 3312
3318 if (tool == gToolRotate && (!moveable_object_selected || !all_selected_objects_move)) 3313 if (tool == LLToolCompRotate::getInstance() && (!moveable_object_selected || !all_selected_objects_move))
3319 { 3314 {
3320 draw_handles = FALSE; 3315 draw_handles = FALSE;
3321 } 3316 }
3322 3317
3323 if ( !all_selected_objects_modify && tool == gToolStretch ) 3318 if ( !all_selected_objects_modify && tool == LLToolCompScale::getInstance() )
3324 { 3319 {
3325 draw_handles = FALSE; 3320 draw_handles = FALSE;
3326 } 3321 }
@@ -3424,13 +3419,13 @@ void LLViewerWindow::hitObjectOrLandGlobalAsync(S32 x, S32 y_from_bot, MASK mask
3424 gLastHitParcelWall = FALSE; 3419 gLastHitParcelWall = FALSE;
3425 3420
3426 LLCamera pick_camera; 3421 LLCamera pick_camera;
3427 pick_camera.setOrigin(gCamera->getOrigin()); 3422 pick_camera.setOrigin(LLViewerCamera::getInstance()->getOrigin());
3428 pick_camera.setOriginAndLookAt(gCamera->getOrigin(), 3423 pick_camera.setOriginAndLookAt(LLViewerCamera::getInstance()->getOrigin(),
3429 gCamera->getUpAxis(), 3424 LLViewerCamera::getInstance()->getUpAxis(),
3430 gCamera->getOrigin() + mouseDirectionGlobal(x, y_from_bot)); 3425 LLViewerCamera::getInstance()->getOrigin() + mouseDirectionGlobal(x, y_from_bot));
3431 pick_camera.setView(0.5f*DEG_TO_RAD); 3426 pick_camera.setView(0.5f*DEG_TO_RAD);
3432 pick_camera.setNear(gCamera->getNear()); 3427 pick_camera.setNear(LLViewerCamera::getInstance()->getNear());
3433 pick_camera.setFar(gCamera->getFar()); 3428 pick_camera.setFar(LLViewerCamera::getInstance()->getFar());
3434 pick_camera.setAspect(1.f); 3429 pick_camera.setAspect(1.f);
3435 3430
3436 // save our drawing state 3431 // save our drawing state
@@ -3447,8 +3442,7 @@ void LLViewerWindow::hitObjectOrLandGlobalAsync(S32 x, S32 y_from_bot, MASK mask
3447 // build perspective transform and picking viewport 3442 // build perspective transform and picking viewport
3448 // Perform pick on a PICK_DIAMETER x PICK_DIAMETER pixel region around cursor point. 3443 // Perform pick on a PICK_DIAMETER x PICK_DIAMETER pixel region around cursor point.
3449 // Don't limit the select distance for this pick. 3444 // Don't limit the select distance for this pick.
3450 // make viewport big enough to handle antialiased frame buffers 3445 LLViewerCamera::getInstance()->setPerspective(FOR_SELECTION, scaled_x - (PICK_HALF_WIDTH + 2), scaled_y - (PICK_HALF_WIDTH + 2), PICK_DIAMETER + 4, PICK_DIAMETER + 4, FALSE);
3451 gCamera->setPerspective(FOR_SELECTION, scaled_x - (PICK_HALF_WIDTH + 2), scaled_y - (PICK_HALF_WIDTH + 2), PICK_DIAMETER + 4, PICK_DIAMETER + 4, FALSE);
3452 // make viewport big enough to handle antialiased frame buffers 3446 // make viewport big enough to handle antialiased frame buffers
3453 gGLViewport[0] = scaled_x - (PICK_HALF_WIDTH + 2); 3447 gGLViewport[0] = scaled_x - (PICK_HALF_WIDTH + 2);
3454 gGLViewport[1] = scaled_y - (PICK_HALF_WIDTH + 2); 3448 gGLViewport[1] = scaled_y - (PICK_HALF_WIDTH + 2);
@@ -3519,13 +3513,13 @@ void LLViewerWindow::hitUIElementAsync(S32 x, S32 y_from_bot, MASK mask, void (*
3519 gLastHitUIElement = 0; 3513 gLastHitUIElement = 0;
3520 3514
3521 LLCamera pick_camera; 3515 LLCamera pick_camera;
3522 pick_camera.setOrigin(gCamera->getOrigin()); 3516 pick_camera.setOrigin(LLViewerCamera::getInstance()->getOrigin());
3523 pick_camera.setOriginAndLookAt(gCamera->getOrigin(), 3517 pick_camera.setOriginAndLookAt(LLViewerCamera::getInstance()->getOrigin(),
3524 gCamera->getUpAxis(), 3518 LLViewerCamera::getInstance()->getUpAxis(),
3525 gCamera->getOrigin() + mouseDirectionGlobal(x, y_from_bot)); 3519 LLViewerCamera::getInstance()->getOrigin() + mouseDirectionGlobal(x, y_from_bot));
3526 pick_camera.setView(0.5f*DEG_TO_RAD); 3520 pick_camera.setView(0.5f*DEG_TO_RAD);
3527 pick_camera.setNear(gCamera->getNear()); 3521 pick_camera.setNear(LLViewerCamera::getInstance()->getNear());
3528 pick_camera.setFar(gCamera->getFar()); 3522 pick_camera.setFar(LLViewerCamera::getInstance()->getFar());
3529 pick_camera.setAspect(1.f); 3523 pick_camera.setAspect(1.f);
3530 3524
3531 // save our drawing state 3525 // save our drawing state
@@ -3755,7 +3749,7 @@ LLViewerObject* LLViewerWindow::getObjectUnderCursor(const F32 depth)
3755 S32 y = getCurrentMouseY(); 3749 S32 y = getCurrentMouseY();
3756 3750
3757 LLVector3 mouse_direction_global = mouseDirectionGlobal(x,y); 3751 LLVector3 mouse_direction_global = mouseDirectionGlobal(x,y);
3758 LLVector3 camera_pos_global = gCamera->getOrigin(); 3752 LLVector3 camera_pos_global = LLViewerCamera::getInstance()->getOrigin();
3759 LLVector3 pick_end = camera_pos_global + mouse_direction_global * depth; 3753 LLVector3 pick_end = camera_pos_global + mouse_direction_global * depth;
3760 LLVector3 collision_point; 3754 LLVector3 collision_point;
3761 return gPipeline.pickObject(camera_pos_global, pick_end, collision_point); 3755 return gPipeline.pickObject(camera_pos_global, pick_end, collision_point);
@@ -3841,7 +3835,7 @@ void LLViewerWindow::analyzeHit(
3841 U8 uv_pick_buffer[UV_PICK_WIDTH * UV_PICK_WIDTH * 4]; 3835 U8 uv_pick_buffer[UV_PICK_WIDTH * UV_PICK_WIDTH * 4];
3842 S32 pick_face = face; 3836 S32 pick_face = face;
3843 LLFace* facep = objectp->mDrawable->getFace(pick_face); 3837 LLFace* facep = objectp->mDrawable->getFace(pick_face);
3844 gCamera->setPerspective(FOR_SELECTION, scaled_x - UV_PICK_HALF_WIDTH, scaled_y - UV_PICK_HALF_WIDTH, UV_PICK_WIDTH, UV_PICK_WIDTH, FALSE); 3838 LLViewerCamera::getInstance()->setPerspective(FOR_SELECTION, scaled_x - UV_PICK_HALF_WIDTH, scaled_y - UV_PICK_HALF_WIDTH, UV_PICK_WIDTH, UV_PICK_WIDTH, FALSE);
3845 glViewport(scaled_x - UV_PICK_HALF_WIDTH, scaled_y - UV_PICK_HALF_WIDTH, UV_PICK_WIDTH, UV_PICK_WIDTH); 3839 glViewport(scaled_x - UV_PICK_HALF_WIDTH, scaled_y - UV_PICK_HALF_WIDTH, UV_PICK_WIDTH, UV_PICK_WIDTH);
3846 gPipeline.renderFaceForUVSelect(facep); 3840 gPipeline.renderFaceForUVSelect(facep);
3847 3841
@@ -3875,7 +3869,7 @@ void LLViewerWindow::analyzeHit(
3875LLVector3 LLViewerWindow::mouseDirectionGlobal(const S32 x, const S32 y) const 3869LLVector3 LLViewerWindow::mouseDirectionGlobal(const S32 x, const S32 y) const
3876{ 3870{
3877 // find vertical field of view 3871 // find vertical field of view
3878 F32 fov = gCamera->getView(); 3872 F32 fov = LLViewerCamera::getInstance()->getView();
3879 3873
3880 // find screen resolution 3874 // find screen resolution
3881 S32 height = getWindowHeight(); 3875 S32 height = getWindowHeight();
@@ -3889,9 +3883,9 @@ LLVector3 LLViewerWindow::mouseDirectionGlobal(const S32 x, const S32 y) const
3889 F32 click_y = y - height / 2.f; 3883 F32 click_y = y - height / 2.f;
3890 3884
3891 // compute mouse vector 3885 // compute mouse vector
3892 LLVector3 mouse_vector = distance * gCamera->getAtAxis() 3886 LLVector3 mouse_vector = distance * LLViewerCamera::getInstance()->getAtAxis()
3893 - click_x * gCamera->getLeftAxis() 3887 - click_x * LLViewerCamera::getInstance()->getLeftAxis()
3894 + click_y * gCamera->getUpAxis(); 3888 + click_y * LLViewerCamera::getInstance()->getUpAxis();
3895 3889
3896 mouse_vector.normVec(); 3890 mouse_vector.normVec();
3897 3891
@@ -3904,8 +3898,8 @@ LLVector3 LLViewerWindow::mouseDirectionGlobal(const S32 x, const S32 y) const
3904LLVector3 LLViewerWindow::mouseDirectionCamera(const S32 x, const S32 y) const 3898LLVector3 LLViewerWindow::mouseDirectionCamera(const S32 x, const S32 y) const
3905{ 3899{
3906 // find vertical field of view 3900 // find vertical field of view
3907 F32 fov_height = gCamera->getView(); 3901 F32 fov_height = LLViewerCamera::getInstance()->getView();
3908 F32 fov_width = fov_height * gCamera->getAspect(); 3902 F32 fov_width = fov_height * LLViewerCamera::getInstance()->getAspect();
3909 3903
3910 // find screen resolution 3904 // find screen resolution
3911 S32 height = getWindowHeight(); 3905 S32 height = getWindowHeight();
@@ -3982,7 +3976,7 @@ BOOL LLViewerWindow::mousePointOnLandGlobal(const S32 x, const S32 y, LLVector3d
3982 mouse_direction_global_d.setVec(mouse_direction_global * mouse_dir_scale); 3976 mouse_direction_global_d.setVec(mouse_direction_global * mouse_dir_scale);
3983 probe_point_global = camera_pos_global + mouse_direction_global_d; 3977 probe_point_global = camera_pos_global + mouse_direction_global_d;
3984 3978
3985 regionp = gWorldPointer->resolveRegionGlobal(probe_point_region, probe_point_global); 3979 regionp = LLWorld::getInstance()->resolveRegionGlobal(probe_point_region, probe_point_global);
3986 3980
3987 if (!regionp) 3981 if (!regionp)
3988 { 3982 {
@@ -4029,7 +4023,7 @@ BOOL LLViewerWindow::mousePointOnLandGlobal(const S32 x, const S32 y, LLVector3d
4029 mouse_direction_global_d.setVec(mouse_direction_global * mouse_dir_scale); 4023 mouse_direction_global_d.setVec(mouse_direction_global * mouse_dir_scale);
4030 probe_point_global = camera_pos_global + mouse_direction_global_d; 4024 probe_point_global = camera_pos_global + mouse_direction_global_d;
4031 4025
4032 regionp = gWorldPointer->resolveRegionGlobal(probe_point_region, probe_point_global); 4026 regionp = LLWorld::getInstance()->resolveRegionGlobal(probe_point_region, probe_point_global);
4033 4027
4034 if (!regionp) 4028 if (!regionp)
4035 { 4029 {
@@ -4179,108 +4173,6 @@ BOOL LLViewerWindow::saveImageNumbered(LLImageRaw *raw, const LLString& extensio
4179 return success; 4173 return success;
4180} 4174}
4181 4175
4182void LLViewerWindow::saveMovieNumbered(void*)
4183{
4184 if (!gbCapturing)
4185 {
4186 // Get a directory if this is the first time.
4187 if (strlen(sSnapshotDir) == 0) /* Flawfinder: ignore */
4188 {
4189 LLString proposed_name( sMovieBaseName );
4190#if LL_DARWIN
4191 proposed_name.append( ".mov" );
4192#else
4193 proposed_name.append( ".avi" );
4194#endif
4195
4196 // pick a directory in which to save
4197 LLFilePicker &picker = LLFilePicker::instance();
4198 if (!picker.getSaveFile(LLFilePicker::FFSAVE_AVI, proposed_name.c_str()))
4199 {
4200 // Clicked cancel
4201 return;
4202 }
4203
4204 // Copy the directory + file name
4205 char directory[LL_MAX_PATH]; /* Flawfinder: ignore */
4206 strncpy(directory, picker.getFirstFile(), LL_MAX_PATH -1); /* Flawfinder: ignore */
4207 directory[LL_MAX_PATH -1] = '\0';
4208
4209 // Smash the file extension
4210 S32 length = strlen(directory); /* Flawfinder: ignore */
4211 S32 index = length;
4212
4213 // Back up over ".bmp"
4214 index -= 4;
4215 if (index >= 0 && directory[index] == '.')
4216 {
4217 directory[index] = '\0';
4218 }
4219 else
4220 {
4221 index = length;
4222 }
4223
4224 // Find trailing backslash
4225 while (index >= 0 && directory[index] != gDirUtilp->getDirDelimiter()[0])
4226 {
4227 index--;
4228 }
4229
4230 // If we found one, truncate the string there
4231 if (index >= 0)
4232 {
4233 if (index + 1 <= length)
4234 {
4235 strncpy(LLViewerWindow::sMovieBaseName, directory + index + 1, LL_MAX_PATH -1); /* Flawfinder: ignore */
4236 LLViewerWindow::sMovieBaseName[LL_MAX_PATH -1] = '\0';
4237 }
4238
4239 index++;
4240 directory[index] = '\0';
4241 strncpy(LLViewerWindow::sSnapshotDir, directory, LL_MAX_PATH -1); /* Flawfinder: ignore */
4242 LLViewerWindow::sSnapshotDir[LL_MAX_PATH -1] = '\0';
4243 }
4244 }
4245
4246 // Look for an unused file name
4247 LLString filepath;
4248 S32 i = 1;
4249 S32 err = 0;
4250
4251 do
4252 {
4253 char extension[100]; /* Flawfinder: ignore */
4254#if LL_DARWIN
4255 snprintf( extension, sizeof(extension), "_%.3d.mov", i ); /* Flawfinder: ignore */
4256#else
4257 snprintf( extension, sizeof(extension), "_%.3d.avi", i ); /* Flawfinder: ignore */
4258#endif
4259 filepath.assign( sSnapshotDir );
4260 filepath.append( sMovieBaseName );
4261 filepath.append( extension );
4262
4263 struct stat stat_info;
4264 err = gViewerWindow->mWindow->stat( filepath.c_str(), &stat_info );
4265 i++;
4266 }
4267 while( -1 != err ); // search until the file is not found (i.e., stat() gives an error).
4268 S32 x = gViewerWindow->getWindowWidth();
4269 S32 y = gViewerWindow->getWindowHeight();
4270
4271 gbCapturing = TRUE;
4272#if !LL_SOLARIS
4273 gMovieMaker.StartCapture((char *)filepath.c_str(), x, y);
4274#endif
4275 }
4276 else
4277 {
4278#if !LL_SOLARIS
4279 gMovieMaker.EndCapture();
4280#endif
4281 gbCapturing = FALSE;
4282 }
4283}
4284 4176
4285static S32 BORDERHEIGHT = 0; 4177static S32 BORDERHEIGHT = 0;
4286static S32 BORDERWIDTH = 0; 4178static S32 BORDERWIDTH = 0;
@@ -4348,16 +4240,147 @@ void LLViewerWindow::playSnapshotAnimAndSound()
4348 send_sound_trigger(LLUUID(gSavedSettings.getString("UISndSnapshot")), 1.0f); 4240 send_sound_trigger(LLUUID(gSavedSettings.getString("UISndSnapshot")), 1.0f);
4349} 4241}
4350 4242
4243BOOL LLViewerWindow::thumbnailSnapshot(LLImageRaw *raw, S32 preview_width, S32 preview_height, BOOL show_ui, BOOL do_rebuild, ESnapshotType type)
4244{
4245 if ((!raw) || preview_width < 10 || preview_height < 10)
4246 {
4247 return FALSE;
4248 }
4249
4250 if(gResizeScreenTexture) //the window is resizing
4251 {
4252 return FALSE ;
4253 }
4254
4255 setCursor(UI_CURSOR_WAIT);
4256
4257 // Hide all the UI widgets first and draw a frame
4258 BOOL prev_draw_ui = gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI);
4259
4260 if ( prev_draw_ui != show_ui)
4261 {
4262 LLPipeline::toggleRenderDebugFeature((void*)LLPipeline::RENDER_DEBUG_FEATURE_UI);
4263 }
4264
4265 BOOL hide_hud = !gSavedSettings.getBOOL("RenderHUDInSnapshot") && LLPipeline::sShowHUDAttachments;
4266 if (hide_hud)
4267 {
4268 LLPipeline::sShowHUDAttachments = FALSE;
4269 }
4270
4271 S32 render_name = gSavedSettings.getS32("RenderName");
4272 gSavedSettings.setS32("RenderName", 0);
4273 LLVOAvatar::updateFreezeCounter(1) ; //pause avatar updating for one frame
4274
4275 S32 w = preview_width ;
4276 S32 h = preview_height ;
4277 LLVector2 display_scale = mDisplayScale ;
4278 mDisplayScale.setVec((F32)w / mWindowRect.getWidth(), (F32)h / mWindowRect.getHeight()) ;
4279 LLRect window_rect = mWindowRect;
4280 mWindowRect.set(0, h, w, 0);
4281
4282 gDisplaySwapBuffers = FALSE;
4283 glClearColor(0.f, 0.f, 0.f, 0.f);
4284 glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
4285 setup3DRender();
4286 setupViewport();
4287
4288 LLFontGL::setFontDisplay(FALSE) ;
4289 LLHUDText::setDisplayText(FALSE) ;
4290 if (type == SNAPSHOT_TYPE_OBJECT_ID)
4291 {
4292 gPickTransparent = FALSE;
4293 gObjectList.renderObjectsForSelect(*LLViewerCamera::getInstance(), FALSE, FALSE);
4294 }
4295 else
4296 {
4297 display(do_rebuild, 1.0f, 0, TRUE);
4298 render_ui_and_swap();
4299 }
4300
4301 S32 glformat, gltype, glpixel_length ;
4302 if(SNAPSHOT_TYPE_DEPTH == type)
4303 {
4304 glpixel_length = 4 ;
4305 glformat = GL_DEPTH_COMPONENT ;
4306 gltype = GL_FLOAT ;
4307 }
4308 else
4309 {
4310 glpixel_length = 3 ;
4311 glformat = GL_RGB ;
4312 gltype = GL_UNSIGNED_BYTE ;
4313 }
4314
4315 raw->resize(w, h, glpixel_length);
4316 glReadPixels(0, 0, w, h, glformat, gltype, raw->getData());
4317
4318 if(SNAPSHOT_TYPE_DEPTH == type)
4319 {
4320 LLViewerCamera* camerap = LLViewerCamera::getInstance();
4321 F32 depth_conversion_factor_1 = (camerap->getFar() + camerap->getNear()) / (2.f * camerap->getFar() * camerap->getNear());
4322 F32 depth_conversion_factor_2 = (camerap->getFar() - camerap->getNear()) / (2.f * camerap->getFar() * camerap->getNear());
4323
4324 //calculate the depth
4325 for (S32 y = 0 ; y < h ; y++)
4326 {
4327 for(S32 x = 0 ; x < w ; x++)
4328 {
4329 S32 i = (w * y + x) << 2 ;
4330
4331 F32 depth_float_i = *(F32*)(raw->getData() + i);
4332
4333 F32 linear_depth_float = 1.f / (depth_conversion_factor_1 - (depth_float_i * depth_conversion_factor_2));
4334 U8 depth_byte = F32_to_U8(linear_depth_float, camerap->getNear(), camerap->getFar());
4335 *(raw->getData() + i + 0) = depth_byte;
4336 *(raw->getData() + i + 1) = depth_byte;
4337 *(raw->getData() + i + 2) = depth_byte;
4338 *(raw->getData() + i + 3) = 255;
4339 }
4340 }
4341 }
4342
4343 LLFontGL::setFontDisplay(TRUE) ;
4344 LLHUDText::setDisplayText(TRUE) ;
4345 mDisplayScale.setVec(display_scale) ;
4346 mWindowRect = window_rect;
4347 setup3DRender();
4348 setupViewport();
4349 gDisplaySwapBuffers = FALSE;
4350
4351 // POST SNAPSHOT
4352 if (!gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI))
4353 {
4354 LLPipeline::toggleRenderDebugFeature((void*)LLPipeline::RENDER_DEBUG_FEATURE_UI);
4355 }
4356
4357 if (hide_hud)
4358 {
4359 LLPipeline::sShowHUDAttachments = TRUE;
4360 }
4361
4362 setCursor(UI_CURSOR_ARROW);
4363
4364 if (do_rebuild)
4365 {
4366 // If we had to do a rebuild, that means that the lists of drawables to be rendered
4367 // was empty before we started.
4368 // Need to reset these, otherwise we call state sort on it again when render gets called the next time
4369 // and we stand a good chance of crashing on rebuild because the render drawable arrays have multiple copies of
4370 // objects on them.
4371 gPipeline.resetDrawOrders();
4372 }
4373
4374 gSavedSettings.setS32("RenderName", render_name);
4375
4376 return TRUE;
4377}
4351 4378
4352// Saves the image from the screen to the specified filename and path. 4379// Saves the image from the screen to the specified filename and path.
4353BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_height, 4380BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_height,
4354 BOOL keep_window_aspect, BOOL is_texture, BOOL show_ui, BOOL do_rebuild, ESnapshotType type, S32 max_size) 4381 BOOL keep_window_aspect, BOOL is_texture, BOOL show_ui, BOOL do_rebuild, ESnapshotType type, S32 max_size)
4355{ 4382{
4356 //F32 image_aspect_ratio = ((F32)image_width) / ((F32)image_height); 4383 if (!raw)
4357 //F32 window_aspect_ratio = ((F32)getWindowWidth()) / ((F32)getWindowHeight());
4358
4359 if ((!gWorldPointer) ||
4360 (!raw))
4361 { 4384 {
4362 return FALSE; 4385 return FALSE;
4363 } 4386 }
@@ -4388,43 +4411,22 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
4388 // from window 4411 // from window
4389 S32 snapshot_width = mWindowRect.getWidth(); 4412 S32 snapshot_width = mWindowRect.getWidth();
4390 S32 snapshot_height = mWindowRect.getHeight(); 4413 S32 snapshot_height = mWindowRect.getHeight();
4391 F32 scale_factor = 1.0f ;
4392 if (keep_window_aspect || is_texture) //map the entire window to snapshot
4393 {
4394 }
4395 else //scale or crop
4396 {
4397 if(snapshot_width > image_width) //crop
4398 {
4399 snapshot_width = image_width ;
4400 }
4401 if(snapshot_height > image_height)//crop
4402 {
4403 snapshot_height = image_height ;
4404 }
4405
4406 //if (image_aspect_ratio > window_aspect_ratio)
4407 //{
4408 // snapshot_height = llround((F32)snapshot_width / image_aspect_ratio);
4409 //}
4410 //else if (image_aspect_ratio < window_aspect_ratio)
4411 //{
4412 // snapshot_width = llround((F32)snapshot_height * image_aspect_ratio);
4413 //}
4414 }
4415
4416 LLRenderTarget target;
4417
4418 scale_factor = llmax(1.f, (F32)image_width / snapshot_width, (F32)image_height / snapshot_height);
4419
4420 // SNAPSHOT 4414 // SNAPSHOT
4421 S32 window_width = mWindowRect.getWidth(); 4415 S32 window_width = mWindowRect.getWidth();
4422 S32 window_height = mWindowRect.getHeight(); 4416 S32 window_height = mWindowRect.getHeight();
4423
4424 LLRect window_rect = mWindowRect; 4417 LLRect window_rect = mWindowRect;
4425
4426 BOOL use_fbo = FALSE; 4418 BOOL use_fbo = FALSE;
4427 4419
4420 F32 scale_factor = 1.0f ;
4421 if(!keep_window_aspect) //image cropping
4422 {
4423 F32 ratio = llmin( (F32)window_width / image_width , (F32)window_height / image_height) ;
4424 snapshot_width = (S32)(ratio * image_width) ;
4425 snapshot_height = (S32)(ratio * image_height) ;
4426 scale_factor = llmax(1.0f, 1.0f / ratio) ;
4427 }
4428
4429 LLRenderTarget target;
4428 if (gGLManager.mHasFramebufferObject && 4430 if (gGLManager.mHasFramebufferObject &&
4429 (image_width > window_width || 4431 (image_width > window_width ||
4430 image_height > window_height) && 4432 image_height > window_height) &&
@@ -4445,9 +4447,14 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
4445 window_height = snapshot_height; 4447 window_height = snapshot_height;
4446 scale_factor = 1.f; 4448 scale_factor = 1.f;
4447 mWindowRect.set(0, 0, snapshot_width, snapshot_height); 4449 mWindowRect.set(0, 0, snapshot_width, snapshot_height);
4448 target.bindTarget(); 4450 target.bindTarget();
4449 4451 }
4450 4452 else //tiling
4453 {
4454 F32 ratio = llmin( (F32)window_width / image_width , (F32)window_height / image_height) ;
4455 snapshot_width = (S32)(ratio * image_width) ;
4456 snapshot_height = (S32)(ratio * image_height) ;
4457 scale_factor = llmax(1.0f, 1.0f / ratio) ;
4451 } 4458 }
4452 } 4459 }
4453 4460
@@ -4479,8 +4486,8 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
4479 4486
4480 S32 output_buffer_offset_y = 0; 4487 S32 output_buffer_offset_y = 0;
4481 4488
4482 F32 depth_conversion_factor_1 = (gCamera->getFar() + gCamera->getNear()) / (2.f * gCamera->getFar() * gCamera->getNear()); 4489 F32 depth_conversion_factor_1 = (LLViewerCamera::getInstance()->getFar() + LLViewerCamera::getInstance()->getNear()) / (2.f * LLViewerCamera::getInstance()->getFar() * LLViewerCamera::getInstance()->getNear());
4483 F32 depth_conversion_factor_2 = (gCamera->getFar() - gCamera->getNear()) / (2.f * gCamera->getFar() * gCamera->getNear()); 4490 F32 depth_conversion_factor_2 = (LLViewerCamera::getInstance()->getFar() - LLViewerCamera::getInstance()->getNear()) / (2.f * LLViewerCamera::getInstance()->getFar() * LLViewerCamera::getInstance()->getNear());
4484 4491
4485 for (int subimage_y = 0; subimage_y < scale_factor; ++subimage_y) 4492 for (int subimage_y = 0; subimage_y < scale_factor; ++subimage_y)
4486 { 4493 {
@@ -4498,12 +4505,12 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
4498 glClearColor(0.f, 0.f, 0.f, 0.f); 4505 glClearColor(0.f, 0.f, 0.f, 0.f);
4499 glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); 4506 glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
4500 4507
4501 gCamera->setZoomParameters(scale_factor, subimage_x+(subimage_y*llceil(scale_factor))); 4508 LLViewerCamera::getInstance()->setZoomParameters(scale_factor, subimage_x+(subimage_y*llceil(scale_factor)));
4502 setup3DRender(); 4509 setup3DRender();
4503 setupViewport(); 4510 setupViewport();
4504 BOOL first_time_through = (subimage_x + subimage_y == 0); 4511 BOOL first_time_through = (subimage_x + subimage_y == 0);
4505 gPickTransparent = FALSE; 4512 gPickTransparent = FALSE;
4506 gObjectList.renderObjectsForSelect(*gCamera, FALSE, !first_time_through); 4513 gObjectList.renderObjectsForSelect(*LLViewerCamera::getInstance(), FALSE, !first_time_through);
4507 } 4514 }
4508 else 4515 else
4509 { 4516 {
@@ -4555,7 +4562,7 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
4555 F32 depth_float = *(F32*)(raw->getData() + i); 4562 F32 depth_float = *(F32*)(raw->getData() + i);
4556 4563
4557 F32 linear_depth_float = 1.f / (depth_conversion_factor_1 - (depth_float * depth_conversion_factor_2)); 4564 F32 linear_depth_float = 1.f / (depth_conversion_factor_1 - (depth_float * depth_conversion_factor_2));
4558 U8 depth_byte = F32_to_U8(linear_depth_float, gCamera->getNear(), gCamera->getFar()); 4565 U8 depth_byte = F32_to_U8(linear_depth_float, LLViewerCamera::getInstance()->getNear(), LLViewerCamera::getInstance()->getFar());
4559 *(raw->getData() + i + 0) = depth_byte; 4566 *(raw->getData() + i + 0) = depth_byte;
4560 *(raw->getData() + i + 1) = depth_byte; 4567 *(raw->getData() + i + 1) = depth_byte;
4561 *(raw->getData() + i + 2) = depth_byte; 4568 *(raw->getData() + i + 2) = depth_byte;
@@ -4643,7 +4650,7 @@ void LLViewerWindow::drawMouselookInstructions()
4643{ 4650{
4644 // Draw instructions for mouselook ("Press ESC to leave Mouselook" in a box at the top of the screen.) 4651 // Draw instructions for mouselook ("Press ESC to leave Mouselook" in a box at the top of the screen.)
4645 const char* instructions = "Press ESC to leave Mouselook."; 4652 const char* instructions = "Press ESC to leave Mouselook.";
4646 const LLFontGL* font = gResMgr->getRes( LLFONT_SANSSERIF ); 4653 const LLFontGL* font = LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF );
4647 4654
4648 const S32 INSTRUCTIONS_PAD = 5; 4655 const S32 INSTRUCTIONS_PAD = 5;
4649 LLRect instructions_rect; 4656 LLRect instructions_rect;
@@ -4747,7 +4754,7 @@ void LLViewerWindow::setupViewport(S32 x_offset, S32 y_offset)
4747 4754
4748void LLViewerWindow::setup3DRender() 4755void LLViewerWindow::setup3DRender()
4749{ 4756{
4750 gCamera->setPerspective(NOT_FOR_SELECTION, 0, 0, mWindowRect.getWidth(), mWindowRect.getHeight(), FALSE, gCamera->getNear(), MAX_FAR_CLIP*2.f); 4757 LLViewerCamera::getInstance()->setPerspective(NOT_FOR_SELECTION, 0, 0, mWindowRect.getWidth(), mWindowRect.getHeight(), FALSE, LLViewerCamera::getInstance()->getNear(), MAX_FAR_CLIP*2.f);
4751} 4758}
4752 4759
4753void LLViewerWindow::setup2DRender() 4760void LLViewerWindow::setup2DRender()
@@ -5064,6 +5071,8 @@ BOOL LLViewerWindow::changeDisplaySettings(BOOL fullscreen, LLCoordScreen size,
5064 return TRUE; // a lie..., because we'll get to it later 5071 return TRUE; // a lie..., because we'll get to it later
5065 } 5072 }
5066 5073
5074 U32 fsaa = gSavedSettings.getU32("RenderFSAASamples");
5075 U32 old_fsaa = mWindow->getFSAASamples();
5067 // going from windowed to windowed 5076 // going from windowed to windowed
5068 if (!old_fullscreen && !fullscreen) 5077 if (!old_fullscreen && !fullscreen)
5069 { 5078 {
@@ -5072,7 +5081,11 @@ BOOL LLViewerWindow::changeDisplaySettings(BOOL fullscreen, LLCoordScreen size,
5072 { 5081 {
5073 mWindow->setSize(size); 5082 mWindow->setSize(size);
5074 } 5083 }
5075 return TRUE; 5084
5085 if (fsaa == old_fsaa)
5086 {
5087 return TRUE;
5088 }
5076 } 5089 }
5077 5090
5078 // Close floaters that don't handle settings change 5091 // Close floaters that don't handle settings change
@@ -5098,10 +5111,13 @@ BOOL LLViewerWindow::changeDisplaySettings(BOOL fullscreen, LLCoordScreen size,
5098 gSavedSettings.setS32("WindowY", old_pos.mY); 5111 gSavedSettings.setS32("WindowY", old_pos.mY);
5099 } 5112 }
5100 5113
5114 mWindow->setFSAASamples(fsaa);
5115
5101 result_first_try = mWindow->switchContext(fullscreen, size, disable_vsync); 5116 result_first_try = mWindow->switchContext(fullscreen, size, disable_vsync);
5102 if (!result_first_try) 5117 if (!result_first_try)
5103 { 5118 {
5104 // try to switch back 5119 // try to switch back
5120 mWindow->setFSAASamples(old_fsaa);
5105 result_second_try = mWindow->switchContext(old_fullscreen, old_size, disable_vsync); 5121 result_second_try = mWindow->switchContext(old_fullscreen, old_size, disable_vsync);
5106 5122
5107 if (!result_second_try) 5123 if (!result_second_try)
@@ -5378,7 +5394,7 @@ LLBottomPanel::LLBottomPanel(const LLRect &rect) :
5378 mFactoryMap["toolbar"] = LLCallbackMap(createToolBar, NULL); 5394 mFactoryMap["toolbar"] = LLCallbackMap(createToolBar, NULL);
5379 mFactoryMap["overlay"] = LLCallbackMap(createOverlayBar, NULL); 5395 mFactoryMap["overlay"] = LLCallbackMap(createOverlayBar, NULL);
5380 mFactoryMap["hud"] = LLCallbackMap(createHUD, NULL); 5396 mFactoryMap["hud"] = LLCallbackMap(createHUD, NULL);
5381 gUICtrlFactory->buildPanel(this, "panel_bars.xml", &getFactoryMap()); 5397 LLUICtrlFactory::getInstance()->buildPanel(this, "panel_bars.xml", &getFactoryMap());
5382 5398
5383 setOrigin(rect.mLeft, rect.mBottom); 5399 setOrigin(rect.mLeft, rect.mBottom);
5384 reshape(rect.getWidth(), rect.getHeight()); 5400 reshape(rect.getWidth(), rect.getHeight());
diff --git a/linden/indra/newview/llviewerwindow.h b/linden/indra/newview/llviewerwindow.h
index 3122d8c..a9f941c 100644
--- a/linden/indra/newview/llviewerwindow.h
+++ b/linden/indra/newview/llviewerwindow.h
@@ -97,6 +97,7 @@ public:
97 /*virtual*/ void handleFocus(LLWindow *window); 97 /*virtual*/ void handleFocus(LLWindow *window);
98 /*virtual*/ void handleFocusLost(LLWindow *window); 98 /*virtual*/ void handleFocusLost(LLWindow *window);
99 /*virtual*/ BOOL handleActivate(LLWindow *window, BOOL activated); 99 /*virtual*/ BOOL handleActivate(LLWindow *window, BOOL activated);
100 /*virtual*/ BOOL handleActivateApp(LLWindow *window, BOOL activating);
100 /*virtual*/ void handleMenuSelect(LLWindow *window, S32 menu_item); 101 /*virtual*/ void handleMenuSelect(LLWindow *window, S32 menu_item);
101 /*virtual*/ BOOL handlePaint(LLWindow *window, S32 x, S32 y, S32 width, S32 height); 102 /*virtual*/ BOOL handlePaint(LLWindow *window, S32 x, S32 y, S32 width, S32 height);
102 /*virtual*/ void handleScrollWheel(LLWindow *window, S32 clicks); 103 /*virtual*/ void handleScrollWheel(LLWindow *window, S32 clicks);
@@ -104,6 +105,9 @@ public:
104 /*virtual*/ void handleWindowBlock(LLWindow *window); 105 /*virtual*/ void handleWindowBlock(LLWindow *window);
105 /*virtual*/ void handleWindowUnblock(LLWindow *window); 106 /*virtual*/ void handleWindowUnblock(LLWindow *window);
106 /*virtual*/ void handleDataCopy(LLWindow *window, S32 data_type, void *data); 107 /*virtual*/ void handleDataCopy(LLWindow *window, S32 data_type, void *data);
108 /*virtual*/ BOOL handleTimerEvent(LLWindow *window);
109 /*virtual*/ BOOL handleDeviceChange(LLWindow *window);
110
107 111
108 112
109 // 113 //
@@ -207,9 +211,6 @@ public:
207 211
208 static void loadUserImage(void **cb_data, const LLUUID &uuid); 212 static void loadUserImage(void **cb_data, const LLUUID &uuid);
209 213
210 // Save snapshot like Snapshot 1, 2, 3, etc.
211 static void saveMovieNumbered(void*);
212
213 static void movieSize(S32 new_width, S32 new_height); 214 static void movieSize(S32 new_width, S32 new_height);
214 215
215 typedef enum e_snapshot_type 216 typedef enum e_snapshot_type
@@ -222,6 +223,7 @@ public:
222 BOOL saveSnapshot(const LLString& filename, S32 image_width, S32 image_height, BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, ESnapshotType type = SNAPSHOT_TYPE_COLOR); 223 BOOL saveSnapshot(const LLString& filename, S32 image_width, S32 image_height, BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, ESnapshotType type = SNAPSHOT_TYPE_COLOR);
223 BOOL rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_height, BOOL keep_window_aspect = TRUE, BOOL is_texture = FALSE, 224 BOOL rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_height, BOOL keep_window_aspect = TRUE, BOOL is_texture = FALSE,
224 BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, ESnapshotType type = SNAPSHOT_TYPE_COLOR, S32 max_size = MAX_IMAGE_SIZE ); 225 BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, ESnapshotType type = SNAPSHOT_TYPE_COLOR, S32 max_size = MAX_IMAGE_SIZE );
226 BOOL thumbnailSnapshot(LLImageRaw *raw, S32 preview_width, S32 preview_height, BOOL show_ui, BOOL do_rebuild, ESnapshotType type) ;
225 BOOL saveImageNumbered(LLImageRaw *raw, const LLString& extension = LLString()); 227 BOOL saveImageNumbered(LLImageRaw *raw, const LLString& extension = LLString());
226 228
227 void playSnapshotAnimAndSound(); 229 void playSnapshotAnimAndSound();
diff --git a/linden/indra/newview/llvlcomposition.cpp b/linden/indra/newview/llvlcomposition.cpp
index 904c2b9..b60b07e 100644
--- a/linden/indra/newview/llvlcomposition.cpp
+++ b/linden/indra/newview/llvlcomposition.cpp
@@ -32,6 +32,8 @@
32#include "llviewerprecompiledheaders.h" 32#include "llviewerprecompiledheaders.h"
33 33
34#include "llvlcomposition.h" 34#include "llvlcomposition.h"
35
36#include "imageids.h"
35#include "llerror.h" 37#include "llerror.h"
36#include "v3math.h" 38#include "v3math.h"
37#include "llsurface.h" 39#include "llsurface.h"
@@ -69,22 +71,10 @@ LLVLComposition::LLVLComposition(LLSurface *surfacep, const U32 width, const F32
69 mSurfacep = surfacep; 71 mSurfacep = surfacep;
70 72
71 // Load Terrain Textures - Original ones 73 // Load Terrain Textures - Original ones
72 LLUUID id; 74 setDetailTextureID(0, TERRAIN_DIRT_DETAIL);
73 // Dirt 75 setDetailTextureID(1, TERRAIN_GRASS_DETAIL);
74 id.set( gViewerArt.getString("terrain_dirt_detail.tga") ); 76 setDetailTextureID(2, TERRAIN_MOUNTAIN_DETAIL);
75 setDetailTextureID(0, id); 77 setDetailTextureID(3, TERRAIN_ROCK_DETAIL);
76
77 // Grass
78 id.set( gViewerArt.getString("terrain_grass_detail.tga") );
79 setDetailTextureID(1, id);
80
81 // Rock mountain
82 id.set( gViewerArt.getString("terrain_mountain_detail.tga") );
83 setDetailTextureID(2, id);
84
85 // Rock face
86 id.set( gViewerArt.getString("terrain_rock_detail.tga") );
87 setDetailTextureID(3, id);
88 78
89 // Initialize the texture matrix to defaults. 79 // Initialize the texture matrix to defaults.
90 for (S32 i = 0; i < CORNER_COUNT; ++i) 80 for (S32 i = 0; i < CORNER_COUNT; ++i)
diff --git a/linden/indra/newview/llvoavatar.cpp b/linden/indra/newview/llvoavatar.cpp
index 957ea5c..7989704 100644
--- a/linden/indra/newview/llvoavatar.cpp
+++ b/linden/indra/newview/llvoavatar.cpp
@@ -138,6 +138,7 @@ LLVOAvatarSkeletonInfo* LLVOAvatar::sSkeletonInfo = NULL;
138LLVOAvatarInfo* LLVOAvatar::sAvatarInfo = NULL; 138LLVOAvatarInfo* LLVOAvatar::sAvatarInfo = NULL;
139 139
140BOOL gDebugAvatarRotation = FALSE; 140BOOL gDebugAvatarRotation = FALSE;
141S32 LLVOAvatar::sFreezeCounter = 0 ;
141 142
142//extern BOOL gVelocityInterpolate; 143//extern BOOL gVelocityInterpolate;
143 144
@@ -283,7 +284,7 @@ BOOL LLVOAvatar::sShowFootPlane = FALSE;
283BOOL LLVOAvatar::sShowCollisionVolumes = FALSE; 284BOOL LLVOAvatar::sShowCollisionVolumes = FALSE;
284BOOL LLVOAvatar::sVisibleInFirstPerson = FALSE; 285BOOL LLVOAvatar::sVisibleInFirstPerson = FALSE;
285F32 LLVOAvatar::sLODFactor = 1.f; 286F32 LLVOAvatar::sLODFactor = 1.f;
286BOOL LLVOAvatar::sUseImpostors = TRUE; 287BOOL LLVOAvatar::sUseImpostors = FALSE;
287BOOL LLVOAvatar::sJointDebug = FALSE; 288BOOL LLVOAvatar::sJointDebug = FALSE;
288 289
289S32 LLVOAvatar::sCurJoint = 0; 290S32 LLVOAvatar::sCurJoint = 0;
@@ -663,6 +664,7 @@ LLVOAvatar::LLVOAvatar(
663 mNameAway(FALSE), 664 mNameAway(FALSE),
664 mNameBusy(FALSE), 665 mNameBusy(FALSE),
665 mNameMute(FALSE), 666 mNameMute(FALSE),
667 mRenderGroupTitles(sRenderGroupTitles),
666 mNameAppearance(FALSE), 668 mNameAppearance(FALSE),
667 mLastRegionHandle(0), 669 mLastRegionHandle(0),
668 mRegionCrossingCount(0), 670 mRegionCrossingCount(0),
@@ -692,7 +694,7 @@ LLVOAvatar::LLVOAvatar(
692 694
693 // mVoiceVisualizer is created by the hud effects manager and uses the HUD Effects pipeline 695 // mVoiceVisualizer is created by the hud effects manager and uses the HUD Effects pipeline
694 bool needsSendToSim = false; // currently, this HUD effect doesn't need to pack and unpack data to do its job 696 bool needsSendToSim = false; // currently, this HUD effect doesn't need to pack and unpack data to do its job
695 mVoiceVisualizer = ( LLVoiceVisualizer *)gHUDManager->createViewerEffect( LLHUDObject::LL_HUD_EFFECT_VOICE_VISUALIZER, needsSendToSim ); 697 mVoiceVisualizer = ( LLVoiceVisualizer *)LLHUDManager::getInstance()->createViewerEffect( LLHUDObject::LL_HUD_EFFECT_VOICE_VISUALIZER, needsSendToSim );
696 698
697 lldebugs << "LLVOAvatar Constructor (0x" << this << ") id:" << mID << llendl; 699 lldebugs << "LLVOAvatar Constructor (0x" << this << ") id:" << mID << llendl;
698 700
@@ -755,8 +757,7 @@ LLVOAvatar::LLVOAvatar(
755 757
756 mRippleTimeLast = 0.f; 758 mRippleTimeLast = 0.f;
757 759
758 mShadowImageID = LLUUID( gViewerArt.getString("foot_shadow.tga")); 760 mShadowImagep = gImageList.getImageFromFile("foot_shadow.j2c");
759 mShadowImagep = gImageList.getImage(mShadowImageID);
760 mShadowImagep->bind(); 761 mShadowImagep->bind();
761 mShadowImagep->setClamp(TRUE, TRUE); 762 mShadowImagep->setClamp(TRUE, TRUE);
762 763
@@ -1726,7 +1727,7 @@ BOOL LLVOAvatar::buildSkeleton(LLVOAvatarSkeletonInfo *info)
1726 mScreenp = new LLViewerJoint("mScreen", NULL); 1727 mScreenp = new LLViewerJoint("mScreen", NULL);
1727 // for now, put screen at origin, as it is only used during special 1728 // for now, put screen at origin, as it is only used during special
1728 // HUD rendering mode 1729 // HUD rendering mode
1729 F32 aspect = gCamera->getAspect(); 1730 F32 aspect = LLViewerCamera::getInstance()->getAspect();
1730 LLVector3 scale(1.f, aspect, 1.f); 1731 LLVector3 scale(1.f, aspect, 1.f);
1731 mScreenp->setScale(scale); 1732 mScreenp->setScale(scale);
1732 mScreenp->setWorldPosition(LLVector3::zero); 1733 mScreenp->setWorldPosition(LLVector3::zero);
@@ -2377,7 +2378,7 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
2377{ 2378{
2378 LLMemType mt(LLMemType::MTYPE_AVATAR); 2379 LLMemType mt(LLMemType::MTYPE_AVATAR);
2379 LLFastTimer t(LLFastTimer::FTM_AVATAR_UPDATE); 2380 LLFastTimer t(LLFastTimer::FTM_AVATAR_UPDATE);
2380 2381
2381 if (isDead()) 2382 if (isDead())
2382 { 2383 {
2383 llinfos << "Warning! Idle on dead avatar" << llendl; 2384 llinfos << "Warning! Idle on dead avatar" << llendl;
@@ -2570,7 +2571,7 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
2570 if (visibleAttachment && attached_object && !attached_object->isDead() && attachment->getValid()) 2571 if (visibleAttachment && attached_object && !attached_object->isDead() && attachment->getValid())
2571 { 2572 {
2572 // if selecting any attachments, update all of them as non-damped 2573 // if selecting any attachments, update all of them as non-damped
2573 if (gSelectMgr->getSelection()->getObjectCount() && gSelectMgr->getSelection()->isAttachment()) 2574 if (LLSelectMgr::getInstance()->getSelection()->getObjectCount() && LLSelectMgr::getInstance()->getSelection()->isAttachment())
2574 { 2575 {
2575 gPipeline.updateMoveNormalAsync(attached_object->mDrawable); 2576 gPipeline.updateMoveNormalAsync(attached_object->mDrawable);
2576 } 2577 }
@@ -2605,7 +2606,7 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
2605 F32 old_angle = mImpostorAngle.mV[i]; 2606 F32 old_angle = mImpostorAngle.mV[i];
2606 F32 angle_diff = fabsf(cur_angle-old_angle); 2607 F32 angle_diff = fabsf(cur_angle-old_angle);
2607 2608
2608 if (angle_diff > 3.14159f/16.f) 2609 if (angle_diff > 3.14159f/512.f*distance)
2609 { 2610 {
2610 mNeedsImpostorUpdate = TRUE; 2611 mNeedsImpostorUpdate = TRUE;
2611 } 2612 }
@@ -2792,6 +2793,12 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
2792 mVisibleChat = visible_chat; 2793 mVisibleChat = visible_chat;
2793 new_name = TRUE; 2794 new_name = TRUE;
2794 } 2795 }
2796
2797 if (sRenderGroupTitles != mRenderGroupTitles)
2798 {
2799 mRenderGroupTitles = sRenderGroupTitles;
2800 new_name = TRUE;
2801 }
2795 2802
2796 // First Calculate Alpha 2803 // First Calculate Alpha
2797 // If alpha > 0, create mNameText if necessary, otherwise delete it 2804 // If alpha > 0, create mNameText if necessary, otherwise delete it
@@ -2840,11 +2847,11 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
2840 mNameText->setUsePixelSize(TRUE); 2847 mNameText->setUsePixelSize(TRUE);
2841 LLVector3 pixel_right_vec; 2848 LLVector3 pixel_right_vec;
2842 LLVector3 pixel_up_vec; 2849 LLVector3 pixel_up_vec;
2843 gCamera->getPixelVectors(root_pos_last, pixel_up_vec, pixel_right_vec); 2850 LLViewerCamera::getInstance()->getPixelVectors(root_pos_last, pixel_up_vec, pixel_right_vec);
2844 LLVector3 camera_to_av = root_pos_last - gCamera->getOrigin(); 2851 LLVector3 camera_to_av = root_pos_last - LLViewerCamera::getInstance()->getOrigin();
2845 camera_to_av.normVec(); 2852 camera_to_av.normVec();
2846 LLVector3 local_camera_at = camera_to_av * ~root_rot; 2853 LLVector3 local_camera_at = camera_to_av * ~root_rot;
2847 LLVector3 local_camera_up = camera_to_av % gCamera->getLeftAxis(); 2854 LLVector3 local_camera_up = camera_to_av % LLViewerCamera::getInstance()->getLeftAxis();
2848 local_camera_up.normVec(); 2855 local_camera_up.normVec();
2849 local_camera_up = local_camera_up * ~root_rot; 2856 local_camera_up = local_camera_up * ~root_rot;
2850 2857
@@ -2868,7 +2875,7 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
2868 LLNameValue *title = getNVPair("Title"); 2875 LLNameValue *title = getNVPair("Title");
2869 LLNameValue* firstname = getNVPair("FirstName"); 2876 LLNameValue* firstname = getNVPair("FirstName");
2870 LLNameValue* lastname = getNVPair("LastName"); 2877 LLNameValue* lastname = getNVPair("LastName");
2871 2878
2872 if (mNameText.notNull() && firstname && lastname) 2879 if (mNameText.notNull() && firstname && lastname)
2873 { 2880 {
2874 BOOL is_away = mSignaledAnimations.find(ANIM_AGENT_AWAY) != mSignaledAnimations.end(); 2881 BOOL is_away = mSignaledAnimations.find(ANIM_AGENT_AWAY) != mSignaledAnimations.end();
@@ -2881,7 +2888,7 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
2881 } 2888 }
2882 else 2889 else
2883 { 2890 {
2884 is_muted = gMuteListp->isMuted(getID()); 2891 is_muted = LLMuteList::getInstance()->isMuted(getID());
2885 } 2892 }
2886 2893
2887 if (mNameString.empty() || 2894 if (mNameString.empty() ||
@@ -3062,6 +3069,8 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
3062 sNumVisibleChatBubbles--; 3069 sNumVisibleChatBubbles--;
3063 } 3070 }
3064 3071
3072 shame();
3073
3065 //-------------------------------------------------------------------- 3074 //--------------------------------------------------------------------
3066 // draw tractor beam when editing objects 3075 // draw tractor beam when editing objects
3067 //-------------------------------------------------------------------- 3076 //--------------------------------------------------------------------
@@ -3078,7 +3087,7 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
3078 else if (!mBeam || mBeam->isDead()) 3087 else if (!mBeam || mBeam->isDead())
3079 { 3088 {
3080 // VEFFECT: Tractor Beam 3089 // VEFFECT: Tractor Beam
3081 mBeam = (LLHUDEffectSpiral *)gHUDManager->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM); 3090 mBeam = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM);
3082 mBeam->setColor(LLColor4U(gAgent.getEffectColor())); 3091 mBeam->setColor(LLColor4U(gAgent.getEffectColor()));
3083 mBeam->setSourceObject(this); 3092 mBeam->setSourceObject(this);
3084 mBeamTimer.reset(); 3093 mBeamTimer.reset();
@@ -3086,7 +3095,7 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
3086 3095
3087 if (!mBeam.isNull()) 3096 if (!mBeam.isNull())
3088 { 3097 {
3089 LLObjectSelectionHandle selection = gSelectMgr->getSelection(); 3098 LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
3090 3099
3091 if (gAgent.mPointAt.notNull()) 3100 if (gAgent.mPointAt.notNull())
3092 { 3101 {
@@ -3103,7 +3112,7 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
3103 else 3112 else
3104 { 3113 {
3105 mBeam->setTargetObject(NULL); 3114 mBeam->setTargetObject(NULL);
3106 LLTool *tool = gToolMgr->getCurrentTool(); 3115 LLTool *tool = LLToolMgr::getInstance()->getCurrentTool();
3107 if (tool->isEditing()) 3116 if (tool->isEditing())
3108 { 3117 {
3109 if (tool->getEditingObject()) 3118 if (tool->getEditingObject())
@@ -3159,9 +3168,10 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
3159{ 3168{
3160 LLMemType mt(LLMemType::MTYPE_AVATAR); 3169 LLMemType mt(LLMemType::MTYPE_AVATAR);
3161 // update screen joint size 3170 // update screen joint size
3171
3162 if (mScreenp) 3172 if (mScreenp)
3163 { 3173 {
3164 F32 aspect = gCamera->getAspect(); 3174 F32 aspect = LLViewerCamera::getInstance()->getAspect();
3165 LLVector3 scale(1.f, aspect, 1.f); 3175 LLVector3 scale(1.f, aspect, 1.f);
3166 mScreenp->setScale(scale); 3176 mScreenp->setScale(scale);
3167 mScreenp->updateWorldMatrixChildren(); 3177 mScreenp->updateWorldMatrixChildren();
@@ -3228,10 +3238,15 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
3228 // the rest should only be done occasionally for far away avatars 3238 // the rest should only be done occasionally for far away avatars
3229 //-------------------------------------------------------------------- 3239 //--------------------------------------------------------------------
3230 3240
3231 if (!mIsSelf && sUseImpostors && !mNeedsAnimUpdate) 3241 if (!mIsSelf && sUseImpostors && !mNeedsAnimUpdate && !sFreezeCounter)
3232 { 3242 {
3233 F32 impostor_area = 256.f*512.f*(8.125f - LLVOAvatar::sLODFactor*8.f); 3243 F32 impostor_area = 256.f*512.f*(8.125f - LLVOAvatar::sLODFactor*8.f);
3234 if (visible && mPixelArea <= impostor_area) 3244 if (LLMuteList::getInstance()->isMuted(getID()))
3245 {
3246 mUpdatePeriod = 16;
3247 visible = (LLDrawable::getCurrentFrame()+mID.mData[0])%mUpdatePeriod == 0 ? TRUE : FALSE;
3248 }
3249 else if (visible && mPixelArea <= impostor_area)
3235 { 3250 {
3236 mUpdatePeriod = llclamp((S32) sqrtf(impostor_area*4.f/mPixelArea), 2, 8); 3251 mUpdatePeriod = llclamp((S32) sqrtf(impostor_area*4.f/mPixelArea), 2, 8);
3237 3252
@@ -3337,7 +3352,7 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
3337 3352
3338 resolveHeightGlobal(root_pos, ground_under_pelvis, normal); 3353 resolveHeightGlobal(root_pos, ground_under_pelvis, normal);
3339 F32 foot_to_ground = (F32) (root_pos.mdV[VZ] - mPelvisToFoot - ground_under_pelvis.mdV[VZ]); 3354 F32 foot_to_ground = (F32) (root_pos.mdV[VZ] - mPelvisToFoot - ground_under_pelvis.mdV[VZ]);
3340 BOOL in_air = ( (!gWorldPointer->getRegionFromPosGlobal(ground_under_pelvis)) || 3355 BOOL in_air = ( (!LLWorld::getInstance()->getRegionFromPosGlobal(ground_under_pelvis)) ||
3341 foot_to_ground > FOOT_GROUND_COLLISION_TOLERANCE); 3356 foot_to_ground > FOOT_GROUND_COLLISION_TOLERANCE);
3342 3357
3343 if (in_air && !mInAir) 3358 if (in_air && !mInAir)
@@ -3398,11 +3413,11 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
3398 // make sure fwdDir stays in same general direction as primdir 3413 // make sure fwdDir stays in same general direction as primdir
3399 if (gAgent.getFlying()) 3414 if (gAgent.getFlying())
3400 { 3415 {
3401 fwdDir = gCamera->getAtAxis(); 3416 fwdDir = LLViewerCamera::getInstance()->getAtAxis();
3402 } 3417 }
3403 else 3418 else
3404 { 3419 {
3405 LLVector3 at_axis = gCamera->getAtAxis(); 3420 LLVector3 at_axis = LLViewerCamera::getInstance()->getAtAxis();
3406 LLVector3 up_vector = gAgent.getReferenceUpVector(); 3421 LLVector3 up_vector = gAgent.getReferenceUpVector();
3407 at_axis -= up_vector * (at_axis * up_vector); 3422 at_axis -= up_vector * (at_axis * up_vector);
3408 at_axis.normVec(); 3423 at_axis.normVec();
@@ -3618,8 +3633,8 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
3618 3633
3619 LLVector3d foot_pos_global = gAgent.getPosGlobalFromAgent(foot_pos_agent); 3634 LLVector3d foot_pos_global = gAgent.getPosGlobalFromAgent(foot_pos_agent);
3620 3635
3621 if (gParcelMgr && gParcelMgr->canHearSound(foot_pos_global) 3636 if (LLViewerParcelMgr::getInstance()->canHearSound(foot_pos_global)
3622 && gMuteListp && !gMuteListp->isMuted(getID(), LLMute::flagObjectSounds)) 3637 && !LLMuteList::getInstance()->isMuted(getID(), LLMute::flagObjectSounds))
3623 { 3638 {
3624 gAudiop->triggerSound(step_sound_id, getID(), gain, foot_pos_global); 3639 gAudiop->triggerSound(step_sound_id, getID(), gain, foot_pos_global);
3625 } 3640 }
@@ -3678,7 +3693,7 @@ void LLVOAvatar::updateHeadOffset()
3678 // since we only care about Z, just grab one of the eyes 3693 // since we only care about Z, just grab one of the eyes
3679 LLVector3 midEyePt = mEyeLeftp->getWorldPosition(); 3694 LLVector3 midEyePt = mEyeLeftp->getWorldPosition();
3680 midEyePt -= mDrawable.notNull() ? mDrawable->getWorldPosition() : mRoot.getWorldPosition(); 3695 midEyePt -= mDrawable.notNull() ? mDrawable->getWorldPosition() : mRoot.getWorldPosition();
3681 midEyePt.mV[VZ] = llmax(-mPelvisToFoot + gCamera->getNear(), midEyePt.mV[VZ]); 3696 midEyePt.mV[VZ] = llmax(-mPelvisToFoot + LLViewerCamera::getInstance()->getNear(), midEyePt.mV[VZ]);
3682 3697
3683 if (mDrawable.notNull()) 3698 if (mDrawable.notNull())
3684 { 3699 {
@@ -3713,7 +3728,7 @@ void LLVOAvatar::updateVisibility()
3713 else 3728 else
3714 { 3729 {
3715 // calculate avatar distance wrt head 3730 // calculate avatar distance wrt head
3716 mDrawable->updateDistance(*gCamera); 3731 mDrawable->updateDistance(*LLViewerCamera::getInstance());
3717 3732
3718 if (!mDrawable->getSpatialGroup() || mDrawable->getSpatialGroup()->isVisible()) 3733 if (!mDrawable->getSpatialGroup() || mDrawable->getSpatialGroup()->isVisible())
3719 { 3734 {
@@ -3767,15 +3782,15 @@ void LLVOAvatar::updateVisibility()
3767 llinfos << "Avatar not in frustum" << llendl; 3782 llinfos << "Avatar not in frustum" << llendl;
3768 }*/ 3783 }*/
3769 3784
3770 /*if (gCamera->sphereInFrustum(sel_pos_agent, 2.0f)) 3785 /*if (LLViewerCamera::getInstance()->sphereInFrustum(sel_pos_agent, 2.0f))
3771 { 3786 {
3772 llinfos << "Sel pos visible" << llendl; 3787 llinfos << "Sel pos visible" << llendl;
3773 } 3788 }
3774 if (gCamera->sphereInFrustum(wrist_right_pos_agent, 0.2f)) 3789 if (LLViewerCamera::getInstance()->sphereInFrustum(wrist_right_pos_agent, 0.2f))
3775 { 3790 {
3776 llinfos << "Wrist pos visible" << llendl; 3791 llinfos << "Wrist pos visible" << llendl;
3777 } 3792 }
3778 if (gCamera->sphereInFrustum(getPositionAgent(), getMaxScale()*2.f)) 3793 if (LLViewerCamera::getInstance()->sphereInFrustum(getPositionAgent(), getMaxScale()*2.f))
3779 { 3794 {
3780 llinfos << "Agent visible" << llendl; 3795 llinfos << "Agent visible" << llendl;
3781 }*/ 3796 }*/
@@ -3841,16 +3856,16 @@ BOOL LLVOAvatar::needsRenderBeam()
3841 { 3856 {
3842 return FALSE; 3857 return FALSE;
3843 } 3858 }
3844 LLTool *tool = gToolMgr->getCurrentTool(); 3859 LLTool *tool = LLToolMgr::getInstance()->getCurrentTool();
3845 3860
3846 BOOL is_touching_or_grabbing = (tool == gToolGrab && gToolGrab->isEditing()); 3861 BOOL is_touching_or_grabbing = (tool == LLToolGrab::getInstance() && LLToolGrab::getInstance()->isEditing());
3847 if (gToolGrab->getEditingObject() && 3862 if (LLToolGrab::getInstance()->getEditingObject() &&
3848 gToolGrab->getEditingObject()->isAttachment()) 3863 LLToolGrab::getInstance()->getEditingObject()->isAttachment())
3849 { 3864 {
3850 // don't render selection beam on hud objects 3865 // don't render selection beam on hud objects
3851 is_touching_or_grabbing = FALSE; 3866 is_touching_or_grabbing = FALSE;
3852 } 3867 }
3853 return is_touching_or_grabbing || (mState & AGENT_STATE_EDITING && gSelectMgr->shouldShowSelection()); 3868 return is_touching_or_grabbing || (mState & AGENT_STATE_EDITING && LLSelectMgr::getInstance()->shouldShowSelection());
3854} 3869}
3855 3870
3856//----------------------------------------------------------------------------- 3871//-----------------------------------------------------------------------------
@@ -3890,7 +3905,7 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass)
3890 { 3905 {
3891 mEyeLashLOD.updateGeometry(); 3906 mEyeLashLOD.updateGeometry();
3892 mHeadLOD.updateGeometry(); 3907 mHeadLOD.updateGeometry();
3893 mHairLOD.updateGeometry(); 3908 mHairLOD.updateGeometry();
3894 } 3909 }
3895 mNeedsSkin = FALSE; 3910 mNeedsSkin = FALSE;
3896 3911
@@ -4112,8 +4127,13 @@ U32 LLVOAvatar::renderImpostor(LLColor4U color)
4112 } 4127 }
4113 4128
4114 LLVector3 pos(getRenderPosition()+mImpostorOffset); 4129 LLVector3 pos(getRenderPosition()+mImpostorOffset);
4115 LLVector3 left = gCamera->getLeftAxis()*mImpostorDim.mV[0]; 4130 LLVector3 at = (pos - LLViewerCamera::getInstance()->getOrigin());
4116 LLVector3 up = gCamera->getUpAxis()*mImpostorDim.mV[1]; 4131 at.normVec();
4132 LLVector3 left = LLViewerCamera::getInstance()->getUpAxis() % at;
4133 LLVector3 up = at%left;
4134
4135 left *= mImpostorDim.mV[0];
4136 up *= mImpostorDim.mV[1];
4117 4137
4118 LLGLEnable test(GL_ALPHA_TEST); 4138 LLGLEnable test(GL_ALPHA_TEST);
4119 glAlphaFunc(GL_GREATER, 0.f); 4139 glAlphaFunc(GL_GREATER, 0.f);
@@ -4432,7 +4452,7 @@ void LLVOAvatar::resolveHeightAgent(const LLVector3 &in_pos_agent, LLVector3 &ou
4432void LLVOAvatar::resolveRayCollisionAgent(const LLVector3d start_pt, const LLVector3d end_pt, LLVector3d &out_pos, LLVector3 &out_norm) 4452void LLVOAvatar::resolveRayCollisionAgent(const LLVector3d start_pt, const LLVector3d end_pt, LLVector3d &out_pos, LLVector3 &out_norm)
4433{ 4453{
4434 LLViewerObject *obj; 4454 LLViewerObject *obj;
4435 gWorldPointer->resolveStepHeightGlobal(this, start_pt, end_pt, out_pos, out_norm, &obj); 4455 LLWorld::getInstance()->resolveStepHeightGlobal(this, start_pt, end_pt, out_pos, out_norm, &obj);
4436} 4456}
4437 4457
4438 4458
@@ -4442,7 +4462,7 @@ void LLVOAvatar::resolveHeightGlobal(const LLVector3d &inPos, LLVector3d &outPos
4442 LLVector3d p0 = inPos + zVec; 4462 LLVector3d p0 = inPos + zVec;
4443 LLVector3d p1 = inPos - zVec; 4463 LLVector3d p1 = inPos - zVec;
4444 LLViewerObject *obj; 4464 LLViewerObject *obj;
4445 gWorldPointer->resolveStepHeightGlobal(this, p0, p1, outPos, outNorm, &obj); 4465 LLWorld::getInstance()->resolveStepHeightGlobal(this, p0, p1, outPos, outNorm, &obj);
4446 if (!obj) 4466 if (!obj)
4447 { 4467 {
4448 mStepOnLand = TRUE; 4468 mStepOnLand = TRUE;
@@ -4593,8 +4613,8 @@ BOOL LLVOAvatar::processSingleAnimationStateChange( const LLUUID& anim_id, BOOL
4593 if (gAudiop) 4613 if (gAudiop)
4594 { 4614 {
4595 LLVector3d char_pos_global = gAgent.getPosGlobalFromAgent(getCharacterPosition()); 4615 LLVector3d char_pos_global = gAgent.getPosGlobalFromAgent(getCharacterPosition());
4596 if (gParcelMgr && gParcelMgr->canHearSound(char_pos_global) 4616 if (LLViewerParcelMgr::getInstance()->canHearSound(char_pos_global)
4597 && gMuteListp && !gMuteListp->isMuted(getID(), LLMute::flagObjectSounds)) 4617 && !LLMuteList::getInstance()->isMuted(getID(), LLMute::flagObjectSounds))
4598 { 4618 {
4599 // RN: uncomment this to play on typing sound at fixed volume once sound engine is fixed 4619 // RN: uncomment this to play on typing sound at fixed volume once sound engine is fixed
4600 // to support both spatialized and non-spatialized instances of the same sound 4620 // to support both spatialized and non-spatialized instances of the same sound
@@ -4878,7 +4898,7 @@ void LLVOAvatar::getGround(const LLVector3 &in_pos_agent, LLVector3 &out_pos_age
4878 p1_global = gAgent.getPosGlobalFromAgent(in_pos_agent) - z_vec; 4898 p1_global = gAgent.getPosGlobalFromAgent(in_pos_agent) - z_vec;
4879 LLViewerObject *obj; 4899 LLViewerObject *obj;
4880 LLVector3d out_pos_global; 4900 LLVector3d out_pos_global;
4881 gWorldPointer->resolveStepHeightGlobal(this, p0_global, p1_global, out_pos_global, outNorm, &obj); 4901 LLWorld::getInstance()->resolveStepHeightGlobal(this, p0_global, p1_global, out_pos_global, outNorm, &obj);
4882 out_pos_agent = gAgent.getPosAgentFromGlobal(out_pos_global); 4902 out_pos_agent = gAgent.getPosAgentFromGlobal(out_pos_global);
4883} 4903}
4884 4904
@@ -5614,7 +5634,7 @@ void LLVOAvatar::setPixelAreaAndAngle(LLAgent &agent)
5614 LLVector3 center = (ext[1] + ext[0]) * 0.5f; 5634 LLVector3 center = (ext[1] + ext[0]) * 0.5f;
5615 LLVector3 size = (ext[1]-ext[0])*0.5f; 5635 LLVector3 size = (ext[1]-ext[0])*0.5f;
5616 5636
5617 mPixelArea = LLPipeline::calcPixelArea(center, size, *gCamera); 5637 mPixelArea = LLPipeline::calcPixelArea(center, size, *LLViewerCamera::getInstance());
5618 5638
5619 F32 range = mDrawable->mDistanceWRTCamera; 5639 F32 range = mDrawable->mDistanceWRTCamera;
5620 5640
@@ -5643,6 +5663,8 @@ BOOL LLVOAvatar::updateJointLODs()
5643 F32 lod_factor = (sLODFactor * AVATAR_LOD_TWEAK_RANGE + (1.f - AVATAR_LOD_TWEAK_RANGE)); 5663 F32 lod_factor = (sLODFactor * AVATAR_LOD_TWEAK_RANGE + (1.f - AVATAR_LOD_TWEAK_RANGE));
5644 F32 avatar_num_min_factor = clamp_rescale(sLODFactor, 0.f, 1.f, 0.25f, 0.6f); 5664 F32 avatar_num_min_factor = clamp_rescale(sLODFactor, 0.f, 1.f, 0.25f, 0.6f);
5645 F32 avatar_num_factor = clamp_rescale((F32)sNumVisibleAvatars, 8, 25, 1.f, avatar_num_min_factor); 5665 F32 avatar_num_factor = clamp_rescale((F32)sNumVisibleAvatars, 8, 25, 1.f, avatar_num_min_factor);
5666 F32 area_scale = 0.16f;
5667
5646 { 5668 {
5647 if (mIsSelf) 5669 if (mIsSelf)
5648 { 5670 {
@@ -5652,7 +5674,7 @@ BOOL LLVOAvatar::updateJointLODs()
5652 } 5674 }
5653 else 5675 else
5654 { 5676 {
5655 mAdjustedPixelArea = mPixelArea; 5677 mAdjustedPixelArea = mPixelArea*area_scale;
5656 } 5678 }
5657 } 5679 }
5658 else if (mIsDummy) 5680 else if (mIsDummy)
@@ -5662,7 +5684,7 @@ BOOL LLVOAvatar::updateJointLODs()
5662 else 5684 else
5663 { 5685 {
5664 // reported avatar pixel area is dependent on avatar render load, based on number of visible avatars 5686 // reported avatar pixel area is dependent on avatar render load, based on number of visible avatars
5665 mAdjustedPixelArea = (F32)mPixelArea * lod_factor * lod_factor * avatar_num_factor * avatar_num_factor; 5687 mAdjustedPixelArea = (F32)mPixelArea * area_scale * lod_factor * lod_factor * avatar_num_factor * avatar_num_factor;
5666 } 5688 }
5667 5689
5668 // now select meshes to render based on adjusted pixel area 5690 // now select meshes to render based on adjusted pixel area
@@ -5749,7 +5771,7 @@ void LLVOAvatar::updateShadowFaces()
5749 return; 5771 return;
5750 } 5772 }
5751 5773
5752 LLSprite sprite(mShadowImageID); 5774 LLSprite sprite(mShadowImagep.notNull() ? mShadowImagep->getID() : LLUUID::null);
5753 sprite.setFollow(FALSE); 5775 sprite.setFollow(FALSE);
5754 const F32 cos_angle = gSky.getSunDirection().mV[2]; 5776 const F32 cos_angle = gSky.getSunDirection().mV[2];
5755 F32 cos_elev = sqrt(1 - cos_angle * cos_angle); 5777 F32 cos_elev = sqrt(1 - cos_angle * cos_angle);
@@ -5987,8 +6009,8 @@ BOOL LLVOAvatar::attachObject(LLViewerObject *viewer_object)
5987 6009
5988 if (viewer_object->isSelected()) 6010 if (viewer_object->isSelected())
5989 { 6011 {
5990 gSelectMgr->updateSelectionCenter(); 6012 LLSelectMgr::getInstance()->updateSelectionCenter();
5991 gSelectMgr->updatePointAt(); 6013 LLSelectMgr::getInstance()->updatePointAt();
5992 } 6014 }
5993 6015
5994 if (mIsSelf) 6016 if (mIsSelf)
@@ -6295,6 +6317,22 @@ void LLVOAvatar::onLocalTextureLoaded( BOOL success, LLViewerImage *src_vi, LLIm
6295 self->updateMeshTextures(); 6317 self->updateMeshTextures();
6296 } 6318 }
6297 } 6319 }
6320 else if (final)
6321 {
6322 LLVOAvatar *self = (LLVOAvatar *)gObjectList.findObject(data->mAvatarID);
6323 LLVOAvatar::ELocTexIndex idx = data->mIndex;
6324 // Failed: asset is missing
6325 if( self &&
6326 (!self->mLocalTextureBaked[ idx ]) &&
6327 (self->mLocalTexture[ idx ].notNull()) &&
6328 (self->mLocalTexture[ idx ]->getID() == src_id))
6329 {
6330 self->mLocalTextureDiscard[idx] = 0; // we check that it's missing later
6331 self->requestLayerSetUpdate( idx );
6332 self->updateMeshTextures();
6333 }
6334
6335 }
6298 6336
6299 if( final || !success ) 6337 if( final || !success )
6300 { 6338 {
@@ -6459,7 +6497,7 @@ void LLVOAvatar::forceBakeAllTextures(bool slam_for_debug)
6459 6497
6460 BOOL set_by_user = TRUE; 6498 BOOL set_by_user = TRUE;
6461 invalidateComposite(layer_set, set_by_user); 6499 invalidateComposite(layer_set, set_by_user);
6462 gViewerStats->incStat(LLViewerStats::ST_TEX_REBAKES); 6500 LLViewerStats::getInstance()->incStat(LLViewerStats::ST_TEX_REBAKES);
6463 } 6501 }
6464 else 6502 else
6465 { 6503 {
@@ -6497,7 +6535,7 @@ void LLVOAvatar::processRebakeAvatarTextures(LLMessageSystem* msg, void**)
6497 BOOL set_by_user = TRUE; 6535 BOOL set_by_user = TRUE;
6498 self->invalidateComposite(layer_set, set_by_user); 6536 self->invalidateComposite(layer_set, set_by_user);
6499 found = TRUE; 6537 found = TRUE;
6500 gViewerStats->incStat(LLViewerStats::ST_TEX_REBAKES); 6538 LLViewerStats::getInstance()->incStat(LLViewerStats::ST_TEX_REBAKES);
6501 } 6539 }
6502 } 6540 }
6503 } 6541 }
@@ -7346,7 +7384,10 @@ void LLVOAvatar::clearChat()
7346 7384
7347S32 LLVOAvatar::getLocalDiscardLevel( S32 index ) 7385S32 LLVOAvatar::getLocalDiscardLevel( S32 index )
7348{ 7386{
7349 if (index >= 0 && mLocalTexture[index].notNull() && mLocalTexture[index]->getID() != IMG_DEFAULT_AVATAR) 7387 if (index >= 0
7388 && mLocalTexture[index].notNull()
7389 && (mLocalTexture[index]->getID() != IMG_DEFAULT_AVATAR)
7390 && !mLocalTexture[index]->isMissingAsset())
7350 { 7391 {
7351 return mLocalTexture[index]->getDiscardLevel(); 7392 return mLocalTexture[index]->getDiscardLevel();
7352 } 7393 }
@@ -9351,13 +9392,13 @@ void LLVOAvatar::updateRegion(LLViewerRegion *regionp)
9351 { 9392 {
9352 ++mRegionCrossingCount; 9393 ++mRegionCrossingCount;
9353 F64 delta = (F64)mRegionCrossingTimer.getElapsedTimeF32(); 9394 F64 delta = (F64)mRegionCrossingTimer.getElapsedTimeF32();
9354 F64 avg = (mRegionCrossingCount == 1) ? 0 : gViewerStats->getStat(LLViewerStats::ST_CROSSING_AVG); 9395 F64 avg = (mRegionCrossingCount == 1) ? 0 : LLViewerStats::getInstance()->getStat(LLViewerStats::ST_CROSSING_AVG);
9355 F64 delta_avg = (delta + avg*(mRegionCrossingCount-1)) / mRegionCrossingCount; 9396 F64 delta_avg = (delta + avg*(mRegionCrossingCount-1)) / mRegionCrossingCount;
9356 gViewerStats->setStat(LLViewerStats::ST_CROSSING_AVG, delta_avg); 9397 LLViewerStats::getInstance()->setStat(LLViewerStats::ST_CROSSING_AVG, delta_avg);
9357 9398
9358 F64 max = (mRegionCrossingCount == 1) ? 0 : gViewerStats->getStat(LLViewerStats::ST_CROSSING_MAX); 9399 F64 max = (mRegionCrossingCount == 1) ? 0 : LLViewerStats::getInstance()->getStat(LLViewerStats::ST_CROSSING_MAX);
9359 max = llmax(delta, max); 9400 max = llmax(delta, max);
9360 gViewerStats->setStat(LLViewerStats::ST_CROSSING_MAX, max); 9401 LLViewerStats::getInstance()->setStat(LLViewerStats::ST_CROSSING_MAX, max);
9361 } 9402 }
9362 mLastRegionHandle = regionp->getHandle(); 9403 mLastRegionHandle = regionp->getHandle();
9363 } 9404 }
@@ -9433,6 +9474,23 @@ LLHost LLVOAvatar::getObjectHost() const
9433 } 9474 }
9434} 9475}
9435 9476
9477//static
9478void LLVOAvatar::updateFreezeCounter(S32 counter)
9479{
9480 if(counter)
9481 {
9482 sFreezeCounter = counter ;
9483 }
9484 else if(sFreezeCounter > 0)
9485 {
9486 sFreezeCounter-- ;
9487 }
9488 else
9489 {
9490 sFreezeCounter = 0 ;
9491 }
9492}
9493
9436BOOL LLVOAvatar::updateLOD() 9494BOOL LLVOAvatar::updateLOD()
9437{ 9495{
9438 BOOL res = updateJointLODs(); 9496 BOOL res = updateJointLODs();
@@ -9486,7 +9544,7 @@ BOOL LLVOAvatar::isImpostor() const
9486 9544
9487BOOL LLVOAvatar::needsImpostorUpdate() const 9545BOOL LLVOAvatar::needsImpostorUpdate() const
9488{ 9546{
9489 return mNeedsImpostorUpdate; 9547 return mNeedsImpostorUpdate ;
9490} 9548}
9491 9549
9492const LLVector3& LLVOAvatar::getImpostorOffset() const 9550const LLVector3& LLVOAvatar::getImpostorOffset() const
@@ -9515,10 +9573,145 @@ void LLVOAvatar::getImpostorValues(LLVector3* extents, LLVector3& angle, F32& di
9515 extents[0] = ext[0]; 9573 extents[0] = ext[0];
9516 extents[1] = ext[1]; 9574 extents[1] = ext[1];
9517 9575
9518 LLVector3 at = gCamera->getOrigin()-(getRenderPosition()+mImpostorOffset); 9576 LLVector3 at = LLViewerCamera::getInstance()->getOrigin()-(getRenderPosition()+mImpostorOffset);
9519 distance = at.normVec(); 9577 distance = at.normVec();
9520 angle.mV[0] = acosf(at.mV[0]); 9578 F32 da = 1.f - (at*LLViewerCamera::getInstance()->getAtAxis());
9521 angle.mV[1] = acosf(at.mV[1]); 9579 angle.mV[0] = LLViewerCamera::getInstance()->getYaw()*da;
9522 angle.mV[2] = acosf(at.mV[2]); 9580 angle.mV[1] = LLViewerCamera::getInstance()->getPitch()*da;
9581 angle.mV[2] = da;
9582}
9583
9584U32 calc_shame(LLVOVolume* volume, std::set<LLUUID> &textures)
9585{
9586 if (!volume)
9587 {
9588 return 0;
9589 }
9590
9591 U32 shame = 0;
9592
9593 U32 invisi = 0;
9594 U32 shiny = 0;
9595 U32 glow = 0;
9596 U32 alpha = 0;
9597 U32 flexi = 0;
9598 U32 animtex = 0;
9599 U32 particles = 0;
9600 U32 scale = 0;
9601 U32 bump = 0;
9602 U32 planar = 0;
9603
9604 if (volume->isFlexible())
9605 {
9606 flexi = 1;
9607 }
9608 if (volume->isParticleSource())
9609 {
9610 particles = 1;
9611 }
9612
9613 const LLVector3& sc = volume->getScale();
9614 scale += (U32) sc.mV[0] + (U32) sc.mV[1] + (U32) sc.mV[2];
9615
9616 LLDrawable* drawablep = volume->mDrawable;
9617
9618 if (volume->isSculpted())
9619 {
9620 LLSculptParams *sculpt_params = (LLSculptParams *) volume->getParameterEntry(LLNetworkData::PARAMS_SCULPT);
9621 LLUUID sculpt_id = sculpt_params->getSculptTexture();
9622 textures.insert(sculpt_id);
9623 }
9624
9625 for (S32 i = 0; i < drawablep->getNumFaces(); ++i)
9626 {
9627 LLFace* face = drawablep->getFace(i);
9628 const LLTextureEntry* te = face->getTextureEntry();
9629 LLViewerImage* img = face->getTexture();
9630
9631 textures.insert(img->getID());
9632
9633 if (face->getPoolType() == LLDrawPool::POOL_ALPHA)
9634 {
9635 alpha++;
9636 }
9637 else if (img->getPrimaryFormat() == GL_ALPHA)
9638 {
9639 invisi = 1;
9640 }
9641
9642 if (te)
9643 {
9644 if (te->getBumpmap())
9645 {
9646 bump = 1;
9647 }
9648 if (te->getShiny())
9649 {
9650 shiny = 1;
9651 }
9652 if (te->getGlow() > 0.f)
9653 {
9654 glow = 1;
9655 }
9656 if (face->mTextureMatrix != NULL)
9657 {
9658 animtex++;
9659 }
9660 if (te->getTexGen())
9661 {
9662 planar++;
9663 }
9664 }
9665 }
9666
9667 shame += invisi + shiny + glow + alpha*4 + flexi*8 + animtex*4 + particles*16+bump*4+scale+planar;
9668
9669 for (U32 i = 0; i < drawablep->getChildCount(); ++i)
9670 {
9671 shame += calc_shame(drawablep->getChild(i)->getVOVolume(), textures);
9672 }
9673
9674 return shame;
9675}
9676
9677void LLVOAvatar::shame()
9678{
9679 if (!gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_SHAME))
9680 {
9681 return;
9682 }
9683
9684 U32 shame = 1;
9685
9686 std::set<LLUUID> textures;
9687
9688 attachment_map_t::const_iterator iter;
9689 for (iter = mAttachmentPoints.begin();
9690 iter != mAttachmentPoints.end();
9691 ++iter)
9692 {
9693 LLViewerJointAttachment* attachment = iter->second;
9694 LLViewerObject* object = attachment->getObject();
9695 if (object && !object->isHUDAttachment())
9696 {
9697 LLDrawable* drawable = object->mDrawable;
9698 if (drawable)
9699 {
9700 shame += 10;
9701 LLVOVolume* volume = drawable->getVOVolume();
9702 if (volume)
9703 {
9704 shame += calc_shame(volume, textures);
9705 }
9706 }
9707 }
9708 }
9709
9710 shame += textures.size() * 5;
9711
9712 setDebugText(llformat("%d", shame));
9713 F32 green = 1.f-llclamp(((F32) shame-1024.f)/1024.f, 0.f, 1.f);
9714 F32 red = llmin((F32) shame/1024.f, 1.f);
9715 mText->setColor(LLColor4(red,green,0,1));
9523} 9716}
9524 9717
diff --git a/linden/indra/newview/llvoavatar.h b/linden/indra/newview/llvoavatar.h
index 2033fda..bc68cf4 100644
--- a/linden/indra/newview/llvoavatar.h
+++ b/linden/indra/newview/llvoavatar.h
@@ -694,7 +694,6 @@ public:
694 //-------------------------------------------------------------------- 694 //--------------------------------------------------------------------
695 // texture ids and pointers 695 // texture ids and pointers
696 //-------------------------------------------------------------------- 696 //--------------------------------------------------------------------
697 LLUUID mShadowImageID;
698 LLPointer<LLViewerImage> mShadowImagep; 697 LLPointer<LLViewerImage> mShadowImagep;
699 698
700 LLUUID mLastHeadBakedID; 699 LLUUID mLastHeadBakedID;
@@ -909,6 +908,8 @@ protected:
909 BOOL mNameMute; 908 BOOL mNameMute;
910 BOOL mNameAppearance; 909 BOOL mNameAppearance;
911 BOOL mVisibleChat; 910 BOOL mVisibleChat;
911 BOOL mRenderGroupTitles;
912
912 913
913 LLString mDebugText; 914 LLString mDebugText;
914 U64 mLastRegionHandle; 915 U64 mLastRegionHandle;
@@ -982,6 +983,7 @@ protected:
982 LLHost getObjectHost() const; 983 LLHost getObjectHost() const;
983 S32 getLocalDiscardLevel( S32 index); 984 S32 getLocalDiscardLevel( S32 index);
984 985
986 void shame(); //generate shame metric
985//Ventrella 987//Ventrella
986 //----------------------------------------------------------------------------------------------- 988 //-----------------------------------------------------------------------------------------------
987 // the Voice Visualizer is responsible for detecting the user's voice signal, and when the 989 // the Voice Visualizer is responsible for detecting the user's voice signal, and when the
@@ -991,7 +993,11 @@ protected:
991 LLVoiceVisualizer * mVoiceVisualizer; 993 LLVoiceVisualizer * mVoiceVisualizer;
992 int mCurrentGesticulationLevel; 994 int mCurrentGesticulationLevel;
993//End Ventrella 995//End Ventrella
994 996
997private:
998 static S32 sFreezeCounter ;
999public:
1000 static void updateFreezeCounter(S32 counter = 0 ) ;
995}; 1001};
996 1002
997#endif // LL_VO_AVATAR_H 1003#endif // LL_VO_AVATAR_H
diff --git a/linden/indra/newview/llvoclouds.cpp b/linden/indra/newview/llvoclouds.cpp
index 6ca8ac0..f50468d 100644
--- a/linden/indra/newview/llvoclouds.cpp
+++ b/linden/indra/newview/llvoclouds.cpp
@@ -133,7 +133,7 @@ BOOL LLVOClouds::updateGeometry(LLDrawable *drawable)
133 drawable->setNumFacesFast(num_faces, NULL, getTEImage(0)); 133 drawable->setNumFacesFast(num_faces, NULL, getTEImage(0));
134 } 134 }
135 135
136 mDepth = (getPositionAgent()-gCamera->getOrigin())*gCamera->getAtAxis(); 136 mDepth = (getPositionAgent()-LLViewerCamera::getInstance()->getOrigin())*LLViewerCamera::getInstance()->getAtAxis();
137 137
138 S32 face_indx = 0; 138 S32 face_indx = 0;
139 for ( ; face_indx < num_faces; face_indx++) 139 for ( ; face_indx < num_faces; face_indx++)
@@ -224,7 +224,7 @@ void LLVOClouds::getGeometry(S32 te,
224 224
225 LLVector3 vtx[4]; 225 LLVector3 vtx[4];
226 226
227 at = gCamera->getAtAxis(); 227 at = LLViewerCamera::getInstance()->getAtAxis();
228 right = at % LLVector3(0.f, 0.f, 1.f); 228 right = at % LLVector3(0.f, 0.f, 1.f);
229 right.normVec(); 229 right.normVec();
230 up = right % at; 230 up = right % at;
diff --git a/linden/indra/newview/llvograss.cpp b/linden/indra/newview/llvograss.cpp
index f9b4bc0..a0e98ce 100644
--- a/linden/indra/newview/llvograss.cpp
+++ b/linden/indra/newview/llvograss.cpp
@@ -176,7 +176,8 @@ void LLVOGrass::initClass()
176 176
177 static LLStdStringHandle texture_name_string = LLXmlTree::addAttributeString("texture_name"); 177 static LLStdStringHandle texture_name_string = LLXmlTree::addAttributeString("texture_name");
178 success &= grass_def->getFastAttributeString(texture_name_string, textureName); 178 success &= grass_def->getFastAttributeString(texture_name_string, textureName);
179 newGrass->mTextureID.set( gViewerArt.getString(textureName) ); 179 LLViewerImage* grass_image = gImageList.getImageFromFile(textureName);
180 newGrass->mTextureID = grass_image->getID();
180 } 181 }
181 182
182 static LLStdStringHandle blade_sizex_string = LLXmlTree::addAttributeString("blade_size_x"); 183 static LLStdStringHandle blade_sizex_string = LLXmlTree::addAttributeString("blade_size_x");
@@ -330,7 +331,7 @@ void LLVOGrass::setPixelAreaAndAngle(LLAgent &agent)
330 mAppAngle = (F32) atan2( max_scale, range) * RAD_TO_DEG; 331 mAppAngle = (F32) atan2( max_scale, range) * RAD_TO_DEG;
331 332
332 // Compute pixels per meter at the given range 333 // Compute pixels per meter at the given range
333 F32 pixels_per_meter = gCamera->getViewHeightInPixels() / (tan(gCamera->getView()) * range); 334 F32 pixels_per_meter = LLViewerCamera::getInstance()->getViewHeightInPixels() / (tan(LLViewerCamera::getInstance()->getView()) * range);
334 335
335 // Assume grass texture is a 5 meter by 5 meter sprite at the grass object's center 336 // Assume grass texture is a 5 meter by 5 meter sprite at the grass object's center
336 mPixelArea = (pixels_per_meter) * (pixels_per_meter) * 25.f; 337 mPixelArea = (pixels_per_meter) * (pixels_per_meter) * 25.f;
@@ -430,7 +431,7 @@ void LLVOGrass::plantBlades()
430 face->setTEOffset(0); 431 face->setTEOffset(0);
431 face->mCenterLocal = mPosition + mRegionp->getOriginAgent(); 432 face->mCenterLocal = mPosition + mRegionp->getOriginAgent();
432 433
433 mDepth = (face->mCenterLocal - gCamera->getOrigin())*gCamera->getAtAxis(); 434 mDepth = (face->mCenterLocal - LLViewerCamera::getInstance()->getOrigin())*LLViewerCamera::getInstance()->getAtAxis();
434 mDrawable->setPosition(face->mCenterLocal); 435 mDrawable->setPosition(face->mCenterLocal);
435 mDrawable->movePartition(); 436 mDrawable->movePartition();
436 LLPipeline::sCompiles++; 437 LLPipeline::sCompiles++;
diff --git a/linden/indra/newview/llvoground.cpp b/linden/indra/newview/llvoground.cpp
index a985c44..32622ec 100644
--- a/linden/indra/newview/llvoground.cpp
+++ b/linden/indra/newview/llvoground.cpp
@@ -122,13 +122,13 @@ BOOL LLVOGround::updateGeometry(LLDrawable *drawable)
122 // 122 //
123 // 123 //
124 // 124 //
125 LLVector3 at_dir = gCamera->getAtAxis(); 125 LLVector3 at_dir = LLViewerCamera::getInstance()->getAtAxis();
126 at_dir.mV[VZ] = 0.f; 126 at_dir.mV[VZ] = 0.f;
127 if (at_dir.normVec() < 0.01) 127 if (at_dir.normVec() < 0.01)
128 { 128 {
129 // We really don't care, as we're not looking anywhere near the horizon. 129 // We really don't care, as we're not looking anywhere near the horizon.
130 } 130 }
131 LLVector3 left_dir = gCamera->getLeftAxis(); 131 LLVector3 left_dir = LLViewerCamera::getInstance()->getLeftAxis();
132 left_dir.mV[VZ] = 0.f; 132 left_dir.mV[VZ] = 0.f;
133 left_dir.normVec(); 133 left_dir.normVec();
134 134
diff --git a/linden/indra/newview/llvoiceclient.cpp b/linden/indra/newview/llvoiceclient.cpp
index f0dafef..738eeac 100644
--- a/linden/indra/newview/llvoiceclient.cpp
+++ b/linden/indra/newview/llvoiceclient.cpp
@@ -678,31 +678,6 @@ void LLVivoxProtocolParser::processResponse(std::string tag)
678 678
679/////////////////////////////////////////////////////////////////////////////////////////////// 679///////////////////////////////////////////////////////////////////////////////////////////////
680 680
681class LLVoiceClientPrefsListener: public LLSimpleListener
682{
683 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
684 {
685 // Note: Ignore the specific event value, look up the ones we want
686
687 gVoiceClient->setVoiceEnabled(gSavedSettings.getBOOL("EnableVoiceChat"));
688 gVoiceClient->setUsePTT(gSavedSettings.getBOOL("PTTCurrentlyEnabled"));
689 std::string keyString = gSavedSettings.getString("PushToTalkButton");
690 gVoiceClient->setPTTKey(keyString);
691 gVoiceClient->setPTTIsToggle(gSavedSettings.getBOOL("PushToTalkToggle"));
692 gVoiceClient->setEarLocation(gSavedSettings.getS32("VoiceEarLocation"));
693 std::string serverName = gSavedSettings.getString("VivoxDebugServerName");
694 gVoiceClient->setVivoxDebugServerName(serverName);
695
696 std::string inputDevice = gSavedSettings.getString("VoiceInputAudioDevice");
697 gVoiceClient->setCaptureDevice(inputDevice);
698 std::string outputDevice = gSavedSettings.getString("VoiceOutputAudioDevice");
699 gVoiceClient->setRenderDevice(outputDevice);
700
701 return true;
702 }
703};
704static LLVoiceClientPrefsListener voice_prefs_listener;
705
706class LLVoiceClientMuteListObserver : public LLMuteListObserver 681class LLVoiceClientMuteListObserver : public LLMuteListObserver
707{ 682{
708 /* virtual */ void onChange() { gVoiceClient->muteListChanged();} 683 /* virtual */ void onChange() { gVoiceClient->muteListChanged();}
@@ -859,16 +834,6 @@ LLVoiceClient::LLVoiceClient()
859 std::string renderDevice = gSavedSettings.getString("VoiceOutputAudioDevice"); 834 std::string renderDevice = gSavedSettings.getString("VoiceOutputAudioDevice");
860 setRenderDevice(renderDevice); 835 setRenderDevice(renderDevice);
861 836
862 // Set up our listener to get updates on all prefs values we care about.
863 gSavedSettings.getControl("EnableVoiceChat")->addListener(&voice_prefs_listener);
864 gSavedSettings.getControl("PTTCurrentlyEnabled")->addListener(&voice_prefs_listener);
865 gSavedSettings.getControl("PushToTalkButton")->addListener(&voice_prefs_listener);
866 gSavedSettings.getControl("PushToTalkToggle")->addListener(&voice_prefs_listener);
867 gSavedSettings.getControl("VoiceEarLocation")->addListener(&voice_prefs_listener);
868 gSavedSettings.getControl("VivoxDebugServerName")->addListener(&voice_prefs_listener);
869 gSavedSettings.getControl("VoiceInputAudioDevice")->addListener(&voice_prefs_listener);
870 gSavedSettings.getControl("VoiceOutputAudioDevice")->addListener(&voice_prefs_listener);
871
872 mTuningMode = false; 837 mTuningMode = false;
873 mTuningEnergy = 0.0f; 838 mTuningEnergy = 0.0f;
874 mTuningMicVolume = 0; 839 mTuningMicVolume = 0;
@@ -1239,12 +1204,7 @@ void LLVoiceClient::stateMachine()
1239 // Check for parcel boundary crossing 1204 // Check for parcel boundary crossing
1240 { 1205 {
1241 LLViewerRegion *region = gAgent.getRegion(); 1206 LLViewerRegion *region = gAgent.getRegion();
1242 LLParcel *parcel = NULL; 1207 LLParcel *parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
1243
1244 if(gParcelMgr)
1245 {
1246 parcel = gParcelMgr->getAgentParcel();
1247 }
1248 1208
1249 if(region && parcel) 1209 if(region && parcel)
1250 { 1210 {
@@ -1281,7 +1241,7 @@ void LLVoiceClient::stateMachine()
1281 break; 1241 break;
1282 1242
1283 case stateStart: 1243 case stateStart:
1284 if(gDisableVoice) 1244 if(gSavedSettings.getBOOL("CmdLineDisableVoice"))
1285 { 1245 {
1286 // Voice is locked out, we must not launch the vivox daemon. 1246 // Voice is locked out, we must not launch the vivox daemon.
1287 setState(stateJail); 1247 setState(stateJail);
@@ -1661,9 +1621,9 @@ void LLVoiceClient::stateMachine()
1661 notifyStatusObservers(LLVoiceClientStatusObserver::STATUS_LOGGED_IN); 1621 notifyStatusObservers(LLVoiceClientStatusObserver::STATUS_LOGGED_IN);
1662 1622
1663 // Set up the mute list observer if it hasn't been set up already. 1623 // Set up the mute list observer if it hasn't been set up already.
1664 if((!sMuteListListener_listening) && (gMuteListp)) 1624 if((!sMuteListListener_listening))
1665 { 1625 {
1666 gMuteListp->addObserver(&mutelist_listener); 1626 LLMuteList::getInstance()->addObserver(&mutelist_listener);
1667 sMuteListListener_listening = true; 1627 sMuteListListener_listening = true;
1668 } 1628 }
1669 1629
@@ -3103,7 +3063,7 @@ void LLVoiceClient::updateMuteState(participantState *p)
3103{ 3063{
3104 if(p->mAvatarIDValid) 3064 if(p->mAvatarIDValid)
3105 { 3065 {
3106 bool isMuted = gMuteListp->isMuted(p->mAvatarID, LLMute::flagVoiceChat); 3066 bool isMuted = LLMuteList::getInstance()->isMuted(p->mAvatarID, LLMute::flagVoiceChat);
3107 if(p->mOnMuteList != isMuted) 3067 if(p->mOnMuteList != isMuted)
3108 { 3068 {
3109 p->mOnMuteList = isMuted; 3069 p->mOnMuteList = isMuted;
@@ -3644,7 +3604,7 @@ void LLVoiceClient::setVoiceEnabled(bool enabled)
3644 3604
3645bool LLVoiceClient::voiceEnabled() 3605bool LLVoiceClient::voiceEnabled()
3646{ 3606{
3647 return gSavedSettings.getBOOL("EnableVoiceChat") && !gDisableVoice; 3607 return gSavedSettings.getBOOL("EnableVoiceChat") && !gSavedSettings.getBOOL("CmdLineDisableVoice");
3648} 3608}
3649 3609
3650void LLVoiceClient::setUsePTT(bool usePTT) 3610void LLVoiceClient::setUsePTT(bool usePTT)
diff --git a/linden/indra/newview/llvoiceremotectrl.cpp b/linden/indra/newview/llvoiceremotectrl.cpp
index f4adc8f..3779ffd 100644
--- a/linden/indra/newview/llvoiceremotectrl.cpp
+++ b/linden/indra/newview/llvoiceremotectrl.cpp
@@ -35,7 +35,7 @@
35#include "llagent.h" 35#include "llagent.h"
36#include "llui.h" 36#include "llui.h"
37#include "llbutton.h" 37#include "llbutton.h"
38#include "llvieweruictrlfactory.h" 38#include "lluictrlfactory.h"
39#include "llviewercontrol.h" 39#include "llviewercontrol.h"
40#include "llvoiceclient.h" 40#include "llvoiceclient.h"
41#include "llimpanel.h" 41#include "llimpanel.h"
@@ -51,11 +51,11 @@ LLVoiceRemoteCtrl::LLVoiceRemoteCtrl (const LLString& name) : LLPanel(name)
51 51
52 if (gSavedSettings.getBOOL("ShowVoiceChannelPopup")) 52 if (gSavedSettings.getBOOL("ShowVoiceChannelPopup"))
53 { 53 {
54 gUICtrlFactory->buildPanel(this, "panel_voice_remote_expanded.xml"); 54 LLUICtrlFactory::getInstance()->buildPanel(this, "panel_voice_remote_expanded.xml");
55 } 55 }
56 else 56 else
57 { 57 {
58 gUICtrlFactory->buildPanel(this, "panel_voice_remote.xml"); 58 LLUICtrlFactory::getInstance()->buildPanel(this, "panel_voice_remote.xml");
59 } 59 }
60 60
61 setFocusRoot(TRUE); 61 setFocusRoot(TRUE);
@@ -67,23 +67,23 @@ LLVoiceRemoteCtrl::~LLVoiceRemoteCtrl()
67 67
68BOOL LLVoiceRemoteCtrl::postBuild() 68BOOL LLVoiceRemoteCtrl::postBuild()
69{ 69{
70 mTalkBtn = LLUICtrlFactory::getButtonByName(this, "push_to_talk"); 70 mTalkBtn = getChild<LLButton>("push_to_talk");
71 mTalkBtn->setClickedCallback(onBtnTalkClicked); 71 mTalkBtn->setClickedCallback(onBtnTalkClicked);
72 mTalkBtn->setHeldDownCallback(onBtnTalkHeld); 72 mTalkBtn->setHeldDownCallback(onBtnTalkHeld);
73 mTalkBtn->setMouseUpCallback(onBtnTalkReleased); 73 mTalkBtn->setMouseUpCallback(onBtnTalkReleased);
74 74
75 mTalkLockBtn = LLUICtrlFactory::getButtonByName(this, "ptt_lock"); 75 mTalkLockBtn = getChild<LLButton>("ptt_lock");
76 mTalkLockBtn->setClickedCallback(onBtnLock); 76 mTalkLockBtn->setClickedCallback(onBtnLock);
77 mTalkLockBtn->setCallbackUserData(this); 77 mTalkLockBtn->setCallbackUserData(this);
78 78
79 mSpeakersBtn = LLUICtrlFactory::getButtonByName(this, "speakers_btn"); 79 mSpeakersBtn = getChild<LLButton>("speakers_btn");
80 mSpeakersBtn->setClickedCallback(onClickSpeakers); 80 mSpeakersBtn->setClickedCallback(onClickSpeakers);
81 mSpeakersBtn->setCallbackUserData(this); 81 mSpeakersBtn->setCallbackUserData(this);
82 82
83 childSetAction("show_channel", onClickPopupBtn, this); 83 childSetAction("show_channel", onClickPopupBtn, this);
84 childSetAction("end_call_btn", onClickEndCall, this); 84 childSetAction("end_call_btn", onClickEndCall, this);
85 85
86 LLTextBox* text = LLUICtrlFactory::getTextBoxByName(this, "channel_label"); 86 LLTextBox* text = getChild<LLTextBox>("channel_label");
87 if (text) 87 if (text)
88 { 88 {
89 text->setUseEllipses(TRUE); 89 text->setUseEllipses(TRUE);
@@ -116,14 +116,14 @@ void LLVoiceRemoteCtrl::draw()
116 mSpeakersBtn->setToggleState(LLFloaterActiveSpeakers::instanceVisible(LLSD())); 116 mSpeakersBtn->setToggleState(LLFloaterActiveSpeakers::instanceVisible(LLSD()));
117 mTalkLockBtn->setToggleState(!gSavedSettings.getBOOL("PTTCurrentlyEnabled")); 117 mTalkLockBtn->setToggleState(!gSavedSettings.getBOOL("PTTCurrentlyEnabled"));
118 118
119 LLUUID talk_blip_image_id; 119 LLString talk_blip_image;
120 if (gVoiceClient->getIsSpeaking(gAgent.getID())) 120 if (gVoiceClient->getIsSpeaking(gAgent.getID()))
121 { 121 {
122 F32 voice_power = gVoiceClient->getCurrentPower(gAgent.getID()); 122 F32 voice_power = gVoiceClient->getCurrentPower(gAgent.getID());
123 123
124 if (voice_power > LLVoiceClient::OVERDRIVEN_POWER_LEVEL) 124 if (voice_power > LLVoiceClient::OVERDRIVEN_POWER_LEVEL)
125 { 125 {
126 talk_blip_image_id = LLUUID(gViewerArt.getString("icn_voice_ptt-on-lvl3.tga")); 126 talk_blip_image = "icn_voice_ptt-on-lvl3.tga";
127 } 127 }
128 else 128 else
129 { 129 {
@@ -133,26 +133,26 @@ void LLVoiceRemoteCtrl::draw()
133 switch(icon_image_idx) 133 switch(icon_image_idx)
134 { 134 {
135 case 0: 135 case 0:
136 talk_blip_image_id = LLUUID(gViewerArt.getString("icn_voice_ptt-on.tga")); 136 talk_blip_image = "icn_voice_ptt-on.tga";
137 break; 137 break;
138 case 1: 138 case 1:
139 talk_blip_image_id = LLUUID(gViewerArt.getString("icn_voice_ptt-on-lvl1.tga")); 139 talk_blip_image = "icn_voice_ptt-on-lvl1.tga";
140 break; 140 break;
141 case 2: 141 case 2:
142 talk_blip_image_id = LLUUID(gViewerArt.getString("icn_voice_ptt-on-lvl2.tga")); 142 talk_blip_image = "icn_voice_ptt-on-lvl2.tga";
143 break; 143 break;
144 } 144 }
145 } 145 }
146 } 146 }
147 else 147 else
148 { 148 {
149 talk_blip_image_id = LLUUID(gViewerArt.getString("icn_voice_ptt-off.tga")); 149 talk_blip_image = "icn_voice_ptt-off.tga";
150 } 150 }
151 151
152 LLIconCtrl* icon = LLUICtrlFactory::getIconByName(this, "voice_volume"); 152 LLIconCtrl* icon = getChild<LLIconCtrl>("voice_volume");
153 if (icon) 153 if (icon)
154 { 154 {
155 icon->setImage(talk_blip_image_id); 155 icon->setImage(talk_blip_image);
156 } 156 }
157 157
158 LLFloater* voice_floater = LLFloaterChatterBox::getInstance()->getCurrentVoiceFloater(); 158 LLFloater* voice_floater = LLFloaterChatterBox::getInstance()->getCurrentVoiceFloater();
@@ -173,13 +173,13 @@ void LLVoiceRemoteCtrl::draw()
173 173
174 if (current_channel) 174 if (current_channel)
175 { 175 {
176 LLIconCtrl* voice_channel_icon = LLUICtrlFactory::getIconByName(this, "voice_channel_icon"); 176 LLIconCtrl* voice_channel_icon = getChild<LLIconCtrl>("voice_channel_icon");
177 if (voice_channel_icon && voice_floater) 177 if (voice_channel_icon && voice_floater)
178 { 178 {
179 voice_channel_icon->setImage(LLUUID(gViewerArt.getString(voice_floater->getUIString("voice_icon")))); 179 voice_channel_icon->setImage(voice_floater->getUIString("voice_icon"));
180 } 180 }
181 181
182 LLButton* voice_channel_bg = LLUICtrlFactory::getButtonByName(this, "voice_channel_bg"); 182 LLButton* voice_channel_bg = getChild<LLButton>("voice_channel_bg");
183 if (voice_channel_bg) 183 if (voice_channel_bg)
184 { 184 {
185 LLColor4 bg_color; 185 LLColor4 bg_color;
@@ -199,7 +199,7 @@ void LLVoiceRemoteCtrl::draw()
199 } 199 }
200 } 200 }
201 201
202 LLButton* expand_button = LLUICtrlFactory::getButtonByName(this, "show_channel"); 202 LLButton* expand_button = getChild<LLButton>("show_channel");
203 if (expand_button) 203 if (expand_button)
204 { 204 {
205 if (expand_button->getToggleState()) 205 if (expand_button->getToggleState())
@@ -257,11 +257,11 @@ void LLVoiceRemoteCtrl::onClickPopupBtn(void* user_data)
257 remotep->deleteAllChildren(); 257 remotep->deleteAllChildren();
258 if (gSavedSettings.getBOOL("ShowVoiceChannelPopup")) 258 if (gSavedSettings.getBOOL("ShowVoiceChannelPopup"))
259 { 259 {
260 gUICtrlFactory->buildPanel(remotep, "panel_voice_remote_expanded.xml"); 260 LLUICtrlFactory::getInstance()->buildPanel(remotep, "panel_voice_remote_expanded.xml");
261 } 261 }
262 else 262 else
263 { 263 {
264 gUICtrlFactory->buildPanel(remotep, "panel_voice_remote.xml"); 264 LLUICtrlFactory::getInstance()->buildPanel(remotep, "panel_voice_remote.xml");
265 } 265 }
266 gOverlayBar->layoutButtons(); 266 gOverlayBar->layoutButtons();
267} 267}
diff --git a/linden/indra/newview/llvoicevisualizer.cpp b/linden/indra/newview/llvoicevisualizer.cpp
index 0046ae0..8c0d0ab 100644
--- a/linden/indra/newview/llvoicevisualizer.cpp
+++ b/linden/indra/newview/llvoicevisualizer.cpp
@@ -98,21 +98,21 @@ LLVoiceVisualizer::LLVoiceVisualizer( const U8 type )
98 98
99 mTimer.reset(); 99 mTimer.reset();
100 100
101 LLUUID sound_level_img[] = 101 const char* sound_level_img[] =
102 { 102 {
103 LLUUID(gSavedSettings.getString("VoiceImageLevel0")), 103 "041ee5a0-cb6a-9ac5-6e49-41e9320507d5.j2c",
104 LLUUID(gSavedSettings.getString("VoiceImageLevel1")), 104 "29de489d-0491-fb00-7dab-f9e686d31e83.j2c",
105 LLUUID(gSavedSettings.getString("VoiceImageLevel2")), 105 "29de489d-0491-fb00-7dab-f9e686d31e83.j2c",
106 LLUUID(gSavedSettings.getString("VoiceImageLevel3")), 106 "29de489d-0491-fb00-7dab-f9e686d31e83.j2c",
107 LLUUID(gSavedSettings.getString("VoiceImageLevel4")), 107 "29de489d-0491-fb00-7dab-f9e686d31e83.j2c",
108 LLUUID(gSavedSettings.getString("VoiceImageLevel5")), 108 "29de489d-0491-fb00-7dab-f9e686d31e83.j2c",
109 LLUUID(gSavedSettings.getString("VoiceImageLevel6")) 109 "29de489d-0491-fb00-7dab-f9e686d31e83.j2c"
110 }; 110 };
111 111
112 for (int i=0; i<NUM_VOICE_SYMBOL_WAVES; i++) 112 for (int i=0; i<NUM_VOICE_SYMBOL_WAVES; i++)
113 { 113 {
114 mSoundSymbol.mWaveFadeOutStartTime [i] = mCurrentTime; 114 mSoundSymbol.mWaveFadeOutStartTime [i] = mCurrentTime;
115 mSoundSymbol.mTexture [i] = gImageList.getImageByID(sound_level_img[i]); 115 mSoundSymbol.mTexture [i] = gImageList.getImageFromFile(sound_level_img[i], FALSE, TRUE);
116 mSoundSymbol.mWaveActive [i] = false; 116 mSoundSymbol.mWaveActive [i] = false;
117 mSoundSymbol.mWaveOpacity [i] = 1.0f; 117 mSoundSymbol.mWaveOpacity [i] = 1.0f;
118 mSoundSymbol.mWaveExpansion [i] = 1.0f; 118 mSoundSymbol.mWaveExpansion [i] = 1.0f;
@@ -203,8 +203,8 @@ void LLVoiceVisualizer::render()
203 //------------------------------------------------------------- 203 //-------------------------------------------------------------
204 // create coordinates of the geometry for the dot 204 // create coordinates of the geometry for the dot
205 //------------------------------------------------------------- 205 //-------------------------------------------------------------
206 LLVector3 l = gCamera->getLeftAxis() * DOT_SIZE; 206 LLVector3 l = LLViewerCamera::getInstance()->getLeftAxis() * DOT_SIZE;
207 LLVector3 u = gCamera->getUpAxis() * DOT_SIZE; 207 LLVector3 u = LLViewerCamera::getInstance()->getUpAxis() * DOT_SIZE;
208 208
209 LLVector3 bottomLeft = mSoundSymbol.mPosition + l - u; 209 LLVector3 bottomLeft = mSoundSymbol.mPosition + l - u;
210 LLVector3 bottomRight = mSoundSymbol.mPosition - l - u; 210 LLVector3 bottomRight = mSoundSymbol.mPosition - l - u;
@@ -330,8 +330,8 @@ void LLVoiceVisualizer::render()
330 F32 width = i * WAVE_WIDTH_SCALE * mSoundSymbol.mWaveExpansion[i]; 330 F32 width = i * WAVE_WIDTH_SCALE * mSoundSymbol.mWaveExpansion[i];
331 F32 height = i * WAVE_HEIGHT_SCALE * mSoundSymbol.mWaveExpansion[i]; 331 F32 height = i * WAVE_HEIGHT_SCALE * mSoundSymbol.mWaveExpansion[i];
332 332
333 LLVector3 l = gCamera->getLeftAxis() * width; 333 LLVector3 l = LLViewerCamera::getInstance()->getLeftAxis() * width;
334 LLVector3 u = gCamera->getUpAxis() * height; 334 LLVector3 u = LLViewerCamera::getInstance()->getUpAxis() * height;
335 335
336 LLVector3 bottomLeft = mSoundSymbol.mPosition + l - u; 336 LLVector3 bottomLeft = mSoundSymbol.mPosition + l - u;
337 LLVector3 bottomRight = mSoundSymbol.mPosition - l - u; 337 LLVector3 bottomRight = mSoundSymbol.mPosition - l - u;
diff --git a/linden/indra/newview/llvopartgroup.cpp b/linden/indra/newview/llvopartgroup.cpp
index 79255ca..7d1fec4 100644
--- a/linden/indra/newview/llvopartgroup.cpp
+++ b/linden/indra/newview/llvopartgroup.cpp
@@ -95,7 +95,7 @@ void LLVOPartGroup::setPixelAreaAndAngle(LLAgent &agent)
95{ 95{
96 // mPixelArea is calculated during render 96 // mPixelArea is calculated during render
97 F32 mid_scale = getMidScale(); 97 F32 mid_scale = getMidScale();
98 F32 range = (getRenderPosition()-gCamera->getOrigin()).magVec(); 98 F32 range = (getRenderPosition()-LLViewerCamera::getInstance()->getOrigin()).magVec();
99 99
100 if (range < 0.001f || isHUDAttachment()) // range == zero 100 if (range < 0.001f || isHUDAttachment()) // range == zero
101 { 101 {
@@ -141,7 +141,7 @@ BOOL LLVOPartGroup::updateGeometry(LLDrawable *drawable)
141 141
142 LLVector3 at; 142 LLVector3 at;
143 LLVector3 position_agent; 143 LLVector3 position_agent;
144 LLVector3 camera_agent = gCamera->getOrigin(); 144 LLVector3 camera_agent = LLViewerCamera::getInstance()->getOrigin();
145 145
146 S32 num_parts = mViewerPartGroupp->getCount(); 146 S32 num_parts = mViewerPartGroupp->getCount();
147 LLFace *facep; 147 LLFace *facep;
@@ -176,7 +176,7 @@ BOOL LLVOPartGroup::updateGeometry(LLDrawable *drawable)
176 F32 tot_area = 0; 176 F32 tot_area = 0;
177 177
178 F32 max_area = LLViewerPartSim::getMaxPartCount() * MAX_PARTICLE_AREA_SCALE; 178 F32 max_area = LLViewerPartSim::getMaxPartCount() * MAX_PARTICLE_AREA_SCALE;
179 F32 pixel_meter_ratio = gCamera->getPixelMeterRatio(); 179 F32 pixel_meter_ratio = LLViewerCamera::getInstance()->getPixelMeterRatio();
180 pixel_meter_ratio *= pixel_meter_ratio; 180 pixel_meter_ratio *= pixel_meter_ratio;
181 181
182 S32 count=0; 182 S32 count=0;
@@ -309,7 +309,7 @@ void LLVOPartGroup::getGeometry(S32 idx,
309 right *= 0.5f*part.mScale.mV[0]; 309 right *= 0.5f*part.mScale.mV[0];
310 up *= 0.5f*part.mScale.mV[1]; 310 up *= 0.5f*part.mScale.mV[1];
311 311
312 const LLVector3& normal = -gCamera->getXAxis(); 312 const LLVector3& normal = -LLViewerCamera::getInstance()->getXAxis();
313 313
314 *verticesp++ = part_pos_agent + up - right; 314 *verticesp++ = part_pos_agent + up - right;
315 *verticesp++ = part_pos_agent - up - right; 315 *verticesp++ = part_pos_agent - up - right;
@@ -391,7 +391,7 @@ void LLParticlePartition::addGeometryCount(LLSpatialGroup* group, U32& vertex_co
391 } 391 }
392 392
393 count++; 393 count++;
394 facep->mDistance = (facep->mCenterLocal - gCamera->getOrigin()) * gCamera->getAtAxis(); 394 facep->mDistance = (facep->mCenterLocal - LLViewerCamera::getInstance()->getOrigin()) * LLViewerCamera::getInstance()->getAtAxis();
395 obj->mDepth += facep->mDistance; 395 obj->mDepth += facep->mDistance;
396 396
397 mFaceList.push_back(facep); 397 mFaceList.push_back(facep);
diff --git a/linden/indra/newview/llvosky.cpp b/linden/indra/newview/llvosky.cpp
index 37f6f30..8e60010 100644
--- a/linden/indra/newview/llvosky.cpp
+++ b/linden/indra/newview/llvosky.cpp
@@ -439,7 +439,7 @@ void LLVOSky::initCubeMap()
439 { 439 {
440 mCubeMap->init(images); 440 mCubeMap->init(images);
441 } 441 }
442 else if (gSavedSettings.getBOOL("RenderWater") && gGLManager.mHasCubeMap && gFeatureManagerp->isFeatureAvailable("RenderCubeMap")) 442 else if (gSavedSettings.getBOOL("RenderWater") && gGLManager.mHasCubeMap && LLFeatureManager::getInstance()->isFeatureAvailable("RenderCubeMap"))
443 { 443 {
444 mCubeMap = new LLCubeMap(); 444 mCubeMap = new LLCubeMap();
445 mCubeMap->init(images); 445 mCubeMap->init(images);
@@ -477,7 +477,7 @@ void LLVOSky::restoreGL()
477 calcAtmospherics(); 477 calcAtmospherics();
478 478
479 if (gSavedSettings.getBOOL("RenderWater") && gGLManager.mHasCubeMap 479 if (gSavedSettings.getBOOL("RenderWater") && gGLManager.mHasCubeMap
480 && gFeatureManagerp->isFeatureAvailable("RenderCubeMap")) 480 && LLFeatureManager::getInstance()->isFeatureAvailable("RenderCubeMap"))
481 { 481 {
482 LLCubeMap* cube_map = getCubeMap(); 482 LLCubeMap* cube_map = getCubeMap();
483 483
@@ -1102,7 +1102,7 @@ BOOL LLVOSky::updateSky()
1102 { 1102 {
1103 if (mForceUpdate) 1103 if (mForceUpdate)
1104 { 1104 {
1105 updateFog(gCamera->getFar()); 1105 updateFog(LLViewerCamera::getInstance()->getFar());
1106 for (int side = 0; side < 6; side++) 1106 for (int side = 0; side < 6; side++)
1107 { 1107 {
1108 for (int tile = 0; tile < NUM_TILES; tile++) 1108 for (int tile = 0; tile < NUM_TILES; tile++)
@@ -1331,7 +1331,7 @@ BOOL LLVOSky::updateGeometry(LLDrawable *drawable)
1331 } 1331 }
1332 } 1332 }
1333 1333
1334 const LLVector3 &look_at = gCamera->getAtAxis(); 1334 const LLVector3 &look_at = LLViewerCamera::getInstance()->getAtAxis();
1335 LLVector3 right = look_at % LLVector3::z_axis; 1335 LLVector3 right = look_at % LLVector3::z_axis;
1336 LLVector3 up = right % look_at; 1336 LLVector3 up = right % look_at;
1337 right.normVec(); 1337 right.normVec();
@@ -1343,7 +1343,7 @@ BOOL LLVOSky::updateGeometry(LLDrawable *drawable)
1343 mMoon.setDraw(updateHeavenlyBodyGeometry(drawable, FACE_MOON, FALSE, mMoon, cos_max_angle, up, right)); 1343 mMoon.setDraw(updateHeavenlyBodyGeometry(drawable, FACE_MOON, FALSE, mMoon, cos_max_angle, up, right));
1344 1344
1345 const F32 water_height = gAgent.getRegion()->getWaterHeight() + 0.01f; 1345 const F32 water_height = gAgent.getRegion()->getWaterHeight() + 0.01f;
1346 // gWorldPointer->getWaterHeight() + 0.01f; 1346 // LLWorld::getInstance()->getWaterHeight() + 0.01f;
1347 const F32 camera_height = mCameraPosAgent.mV[2]; 1347 const F32 camera_height = mCameraPosAgent.mV[2];
1348 const F32 height_above_water = camera_height - water_height; 1348 const F32 height_above_water = camera_height - water_height;
1349 1349
@@ -1691,9 +1691,9 @@ F32 dtClip(const LLVector3& v0, const LLVector3& v1, F32 far_clip2)
1691void LLVOSky::updateReflectionGeometry(LLDrawable *drawable, F32 H, 1691void LLVOSky::updateReflectionGeometry(LLDrawable *drawable, F32 H,
1692 const LLHeavenBody& HB) 1692 const LLHeavenBody& HB)
1693{ 1693{
1694 const LLVector3 &look_at = gCamera->getAtAxis(); 1694 const LLVector3 &look_at = LLViewerCamera::getInstance()->getAtAxis();
1695 // const F32 water_height = gAgent.getRegion()->getWaterHeight() + 0.001f; 1695 // const F32 water_height = gAgent.getRegion()->getWaterHeight() + 0.001f;
1696 // gWorldPointer->getWaterHeight() + 0.001f; 1696 // LLWorld::getInstance()->getWaterHeight() + 0.001f;
1697 1697
1698 LLVector3 to_dir = HB.getDirection(); 1698 LLVector3 to_dir = HB.getDirection();
1699 LLVector3 hb_pos = to_dir * (HORIZON_DIST - 10); 1699 LLVector3 hb_pos = to_dir * (HORIZON_DIST - 10);
@@ -1824,7 +1824,7 @@ void LLVOSky::updateReflectionGeometry(LLDrawable *drawable, F32 H,
1824 side = 2; 1824 side = 2;
1825 } 1825 }
1826 1826
1827 //const F32 far_clip = (gCamera->getFar() - 0.01) / far_clip_factor; 1827 //const F32 far_clip = (LLViewerCamera::getInstance()->getFar() - 0.01) / far_clip_factor;
1828 const F32 far_clip = 512; 1828 const F32 far_clip = 512;
1829 const F32 far_clip2 = far_clip*far_clip; 1829 const F32 far_clip2 = far_clip*far_clip;
1830 1830
@@ -2022,10 +2022,10 @@ void LLVOSky::updateFog(const F32 distance)
2022 LLColor4 target_fog(0.f, 0.2f, 0.5f, 0.f); 2022 LLColor4 target_fog(0.f, 0.2f, 0.5f, 0.f);
2023 2023
2024 const F32 water_height = gAgent.getRegion()->getWaterHeight(); 2024 const F32 water_height = gAgent.getRegion()->getWaterHeight();
2025 // gWorldPointer->getWaterHeight(); 2025 // LLWorld::getInstance()->getWaterHeight();
2026 F32 camera_height = gAgent.getCameraPositionAgent().mV[2]; 2026 F32 camera_height = gAgent.getCameraPositionAgent().mV[2];
2027 2027
2028 F32 near_clip_height = gCamera->getAtAxis().mV[VZ] * gCamera->getNear(); 2028 F32 near_clip_height = LLViewerCamera::getInstance()->getAtAxis().mV[VZ] * LLViewerCamera::getInstance()->getNear();
2029 camera_height += near_clip_height; 2029 camera_height += near_clip_height;
2030 2030
2031 F32 fog_distance = 0.f; 2031 F32 fog_distance = 0.f;
diff --git a/linden/indra/newview/llvotextbubble.cpp b/linden/indra/newview/llvotextbubble.cpp
index 4f5ca38..5424cc8 100644
--- a/linden/indra/newview/llvotextbubble.cpp
+++ b/linden/indra/newview/llvotextbubble.cpp
@@ -36,7 +36,7 @@
36#include "imageids.h" 36#include "imageids.h"
37#include "llviewercontrol.h" 37#include "llviewercontrol.h"
38#include "llprimitive.h" 38#include "llprimitive.h"
39#include "llsphere.h" 39#include "llrendersphere.h"
40 40
41#include "llagent.h" 41#include "llagent.h"
42#include "llbox.h" 42#include "llbox.h"
diff --git a/linden/indra/newview/llvotree.cpp b/linden/indra/newview/llvotree.cpp
index 4630127..a55afe1 100644
--- a/linden/indra/newview/llvotree.cpp
+++ b/linden/indra/newview/llvotree.cpp
@@ -399,8 +399,8 @@ void LLVOTree::setPixelAreaAndAngle(LLAgent &agent)
399 F32 area = max_scale * (max_scale*mBillboardRatio); 399 F32 area = max_scale * (max_scale*mBillboardRatio);
400 400
401 // Compute pixels per meter at the given range 401 // Compute pixels per meter at the given range
402 F32 pixels_per_meter = gCamera->getViewHeightInPixels() / 402 F32 pixels_per_meter = LLViewerCamera::getInstance()->getViewHeightInPixels() /
403 (tan(gCamera->getView()) * range); 403 (tan(LLViewerCamera::getInstance()->getView()) * range);
404 404
405 mPixelArea = (pixels_per_meter) * (pixels_per_meter) * area; 405 mPixelArea = (pixels_per_meter) * (pixels_per_meter) * area;
406#if 0 406#if 0
diff --git a/linden/indra/newview/llvovolume.cpp b/linden/indra/newview/llvovolume.cpp
index e4318ff..4b357e2 100644
--- a/linden/indra/newview/llvovolume.cpp
+++ b/linden/indra/newview/llvovolume.cpp
@@ -83,8 +83,8 @@ LLVOVolume::LLVOVolume(const LLUUID &id, const LLPCode pcode, LLViewerRegion *re
83 mVolumeImpl(NULL) 83 mVolumeImpl(NULL)
84{ 84{
85 mTexAnimMode = 0; 85 mTexAnimMode = 0;
86 mRelativeXform.identity(); 86 mRelativeXform.setIdentity();
87 mRelativeXformInvTrans.identity(); 87 mRelativeXformInvTrans.setIdentity();
88 88
89 mLOD = MIN_LOD; 89 mLOD = MIN_LOD;
90 mTextureAnimp = NULL; 90 mTextureAnimp = NULL;
@@ -326,7 +326,7 @@ void LLVOVolume::animateTextures()
326 } 326 }
327 327
328 LLMatrix4& tex_mat = *facep->mTextureMatrix; 328 LLMatrix4& tex_mat = *facep->mTextureMatrix;
329 tex_mat.identity(); 329 tex_mat.setIdentity();
330 tex_mat.translate(LLVector3(-0.5f, -0.5f, 0.f)); 330 tex_mat.translate(LLVector3(-0.5f, -0.5f, 0.f));
331 tex_mat.rotate(quat); 331 tex_mat.rotate(quat);
332 332
@@ -452,7 +452,7 @@ void LLVOVolume::updateTextures()
452 452
453 if (isHUDAttachment()) 453 if (isHUDAttachment())
454 { 454 {
455 F32 area = (F32) gCamera->getScreenPixelArea(); 455 F32 area = (F32) LLViewerCamera::getInstance()->getScreenPixelArea();
456 vsize = area; 456 vsize = area;
457 imagep->setBoostLevel(LLViewerImage::BOOST_HUD); 457 imagep->setBoostLevel(LLViewerImage::BOOST_HUD);
458 face->setPixelArea(area); // treat as full screen 458 face->setPixelArea(area); // treat as full screen
@@ -557,7 +557,7 @@ F32 LLVOVolume::getTextureVirtualSize(LLFace* face)
557 LLVector3 center = face->getPositionAgent(); 557 LLVector3 center = face->getPositionAgent();
558 LLVector3 size = (face->mExtents[1] - face->mExtents[0]) * 0.5f; 558 LLVector3 size = (face->mExtents[1] - face->mExtents[0]) * 0.5f;
559 559
560 F32 face_area = LLPipeline::calcPixelArea(center, size, *gCamera); 560 F32 face_area = LLPipeline::calcPixelArea(center, size, *LLViewerCamera::getInstance());
561 561
562 face->setPixelArea(face_area); 562 face->setPixelArea(face_area);
563 563
@@ -651,7 +651,7 @@ LLDrawable *LLVOVolume::createDrawable(LLPipeline *pipeline)
651 } 651 }
652 652
653 updateRadius(); 653 updateRadius();
654 mDrawable->updateDistance(*gCamera); 654 mDrawable->updateDistance(*LLViewerCamera::getInstance());
655 655
656 return mDrawable; 656 return mDrawable;
657} 657}
@@ -741,7 +741,23 @@ void LLVOVolume::sculpt()
741 741
742 742
743 S32 current_discard = getVolume()->getSculptLevel(); 743 S32 current_discard = getVolume()->getSculptLevel();
744 llassert_always(current_discard >= -2 && current_discard <= max_discard); 744 if(current_discard < -2)
745 {
746 llwarns << "WARNING!!: Current discard of sculpty at " << current_discard
747 << " is less than -2." << llendl;
748
749 // corrupted volume... don't update the sculpty
750 return;
751 }
752 else if (current_discard > max_discard)
753 {
754 llwarns << "WARNING!!: Current discard of sculpty at " << current_discard
755 << " is more than than allowed max of " << max_discard << llendl;
756
757 // corrupted volume... don't update the sculpty
758 return;
759 }
760
745 if (current_discard == discard_level) // no work to do here 761 if (current_discard == discard_level) // no work to do here
746 return; 762 return;
747 763
@@ -2047,6 +2063,8 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
2047 { 2063 {
2048 if (group->isState(LLSpatialGroup::MESH_DIRTY)) 2064 if (group->isState(LLSpatialGroup::MESH_DIRTY))
2049 { 2065 {
2066 S32 num_mapped_veretx_buffer = LLVertexBuffer::sMappedCount ;
2067
2050 group->mBuilt = 1.f; 2068 group->mBuilt = 1.f;
2051 LLFastTimer ftm(LLFastTimer::FTM_REBUILD_VBO); 2069 LLFastTimer ftm(LLFastTimer::FTM_REBUILD_VBO);
2052 2070
@@ -2055,6 +2073,12 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
2055 for (LLSpatialGroup::element_iter drawable_iter = group->getData().begin(); drawable_iter != group->getData().end(); ++drawable_iter) 2073 for (LLSpatialGroup::element_iter drawable_iter = group->getData().begin(); drawable_iter != group->getData().end(); ++drawable_iter)
2056 { 2074 {
2057 LLDrawable* drawablep = *drawable_iter; 2075 LLDrawable* drawablep = *drawable_iter;
2076
2077 if (drawablep->isDead() || drawablep->isState(LLDrawable::FORCE_INVISIBLE) )
2078 {
2079 continue;
2080 }
2081
2058 if (drawablep->isState(LLDrawable::REBUILD_ALL)) 2082 if (drawablep->isState(LLDrawable::REBUILD_ALL))
2059 { 2083 {
2060 LLVOVolume* vobj = drawablep->getVOVolume(); 2084 LLVOVolume* vobj = drawablep->getVOVolume();
@@ -2096,6 +2120,24 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
2096 group->mVertexBuffer->setBuffer(0); 2120 group->mVertexBuffer->setBuffer(0);
2097 } 2121 }
2098 2122
2123 //if not all buffers are unmapped
2124 if(num_mapped_veretx_buffer != LLVertexBuffer::sMappedCount)
2125 {
2126 llwarns << "Not all mapped vertex buffers are unmapped!" << llendl ;
2127 for (LLSpatialGroup::element_iter drawable_iter = group->getData().begin(); drawable_iter != group->getData().end(); ++drawable_iter)
2128 {
2129 LLDrawable* drawablep = *drawable_iter;
2130 for (S32 i = 0; i < drawablep->getNumFaces(); ++i)
2131 {
2132 LLFace* face = drawablep->getFace(i);
2133 if (face && face->mVertexBuffer.notNull() && face->mVertexBuffer->isLocked())
2134 {
2135 face->mVertexBuffer->setBuffer(0) ;
2136 }
2137 }
2138 }
2139 }
2140
2099 group->clearState(LLSpatialGroup::MESH_DIRTY); 2141 group->clearState(LLSpatialGroup::MESH_DIRTY);
2100 } 2142 }
2101 2143
diff --git a/linden/indra/newview/llvowater.cpp b/linden/indra/newview/llvowater.cpp
index 1acda16..1ab6fbd 100644
--- a/linden/indra/newview/llvowater.cpp
+++ b/linden/indra/newview/llvowater.cpp
@@ -67,7 +67,6 @@ const U32 N_RES_HALF = (N_RES >> 1);
67const U32 WIDTH = (N_RES * WAVE_STEP); //128.f //64 // width of wave tile, in meters 67const U32 WIDTH = (N_RES * WAVE_STEP); //128.f //64 // width of wave tile, in meters
68const F32 WAVE_STEP_INV = (1. / WAVE_STEP); 68const F32 WAVE_STEP_INV = (1. / WAVE_STEP);
69 69
70const F32 g = 9.81f; // gravitational constant (m/s^2)
71 70
72LLVOWater::LLVOWater(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp) 71LLVOWater::LLVOWater(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp)
73: LLStaticViewerObject(id, LL_VO_WATER, regionp) 72: LLStaticViewerObject(id, LL_VO_WATER, regionp)
@@ -133,7 +132,7 @@ LLDrawable *LLVOWater::createDrawable(LLPipeline *pipeline)
133 } 132 }
134 else 133 else
135 { 134 {
136 mDrawable->setNumFaces(1, pool, gWorldp->getDefaultWaterTexture()); 135 mDrawable->setNumFaces(1, pool, LLWorld::getInstance()->getDefaultWaterTexture());
137 } 136 }
138 137
139 return mDrawable; 138 return mDrawable;
diff --git a/linden/indra/newview/llwaterparammanager.cpp b/linden/indra/newview/llwaterparammanager.cpp
index ae913af..f121d46 100644
--- a/linden/indra/newview/llwaterparammanager.cpp
+++ b/linden/indra/newview/llwaterparammanager.cpp
@@ -39,7 +39,7 @@
39#include "llsliderctrl.h" 39#include "llsliderctrl.h"
40#include "llspinctrl.h" 40#include "llspinctrl.h"
41#include "llcheckboxctrl.h" 41#include "llcheckboxctrl.h"
42#include "llvieweruictrlfactory.h" 42#include "lluictrlfactory.h"
43#include "llviewercontrol.h" 43#include "llviewercontrol.h"
44#include "llviewercamera.h" 44#include "llviewercamera.h"
45#include "llcombobox.h" 45#include "llcombobox.h"
@@ -227,7 +227,7 @@ void LLWaterParamManager::updateShaderUniforms(LLGLSLShader * shader)
227 if (shader->mShaderGroup == LLGLSLShader::SG_WATER) 227 if (shader->mShaderGroup == LLGLSLShader::SG_WATER)
228 { 228 {
229 shader->uniform4fv(LLShaderMgr::LIGHTNORM, 1, LLWLParamManager::instance()->getRotatedLightDir().mV); 229 shader->uniform4fv(LLShaderMgr::LIGHTNORM, 1, LLWLParamManager::instance()->getRotatedLightDir().mV);
230 shader->uniform3fv("camPosLocal", 1, gCamera->getOrigin().mV); 230 shader->uniform3fv("camPosLocal", 1, LLViewerCamera::getInstance()->getOrigin().mV);
231 shader->uniform4fv("waterFogColor", 1, LLDrawPoolWater::sWaterFogColor.mV); 231 shader->uniform4fv("waterFogColor", 1, LLDrawPoolWater::sWaterFogColor.mV);
232 shader->uniform4fv("waterPlane", 1, mWaterPlane.mV); 232 shader->uniform4fv("waterPlane", 1, mWaterPlane.mV);
233 shader->uniform1f("waterFogDensity", getFogDensity()); 233 shader->uniform1f("waterFogDensity", getFogDensity());
diff --git a/linden/indra/newview/llwaterparamset.cpp b/linden/indra/newview/llwaterparamset.cpp
index d3068a7..78d882a 100644
--- a/linden/indra/newview/llwaterparamset.cpp
+++ b/linden/indra/newview/llwaterparamset.cpp
@@ -72,8 +72,6 @@ LLWaterParamSet::LLWaterParamSet(void) :
72 wave2.append(0.58f); 72 wave2.append(0.58f);
73 wave2.append(-.67f); 73 wave2.append(-.67f);
74 74
75 LLUUID normalMap = LLUUID(gViewerArt.getString("water_normal.tga"));
76
77 mParamValues.insert("waterFogColor", vec4); 75 mParamValues.insert("waterFogColor", vec4);
78 mParamValues.insert("waterFogDensity", 16.0f); 76 mParamValues.insert("waterFogDensity", 16.0f);
79 mParamValues.insert("underWaterFogMod", 0.25f); 77 mParamValues.insert("underWaterFogMod", 0.25f);
@@ -85,7 +83,7 @@ LLWaterParamSet::LLWaterParamSet(void) :
85 mParamValues.insert("blurMultiplier", 0.01f); 83 mParamValues.insert("blurMultiplier", 0.01f);
86 mParamValues.insert("wave1Dir", wave1); 84 mParamValues.insert("wave1Dir", wave1);
87 mParamValues.insert("wave2Dir", wave2); 85 mParamValues.insert("wave2Dir", wave2);
88 mParamValues.insert("normalMap", normalMap); 86 mParamValues.insert("normalMap", DEFAULT_WATER_NORMAL);
89 87
90} 88}
91 89
diff --git a/linden/indra/newview/llwearablelist.cpp b/linden/indra/newview/llwearablelist.cpp
index 22b8142..01a2459 100644
--- a/linden/indra/newview/llwearablelist.cpp
+++ b/linden/indra/newview/llwearablelist.cpp
@@ -160,10 +160,7 @@ void LLWearableList::processGetAssetReply( const char* filename, const LLAssetID
160 { 160 {
161 LLFile::remove(filename); 161 LLFile::remove(filename);
162 } 162 }
163 if( gViewerStats ) 163 LLViewerStats::getInstance()->incStat( LLViewerStats::ST_DOWNLOAD_FAILED );
164 {
165 gViewerStats->incStat( LLViewerStats::ST_DOWNLOAD_FAILED );
166 }
167 164
168 llwarns << "Wearable download failed: " << LLAssetStorage::getErrorString( status ) << " " << uuid << llendl; 165 llwarns << "Wearable download failed: " << LLAssetStorage::getErrorString( status ) << " " << uuid << llendl;
169 switch( status ) 166 switch( status )
@@ -207,39 +204,6 @@ void LLWearableList::processGetAssetReply( const char* filename, const LLAssetID
207} 204}
208 205
209 206
210LLWearable* LLWearableList::createLegacyWearableFromAvatar( EWearableType type )
211{
212 llinfos << "LLWearableList::createLegacyWearableFromAvatar" << llendl;
213
214 LLTransactionID tid;
215 LLAssetID new_asset_id;
216 tid.generate();
217 new_asset_id = tid.makeAssetID(gAgent.getSecureSessionID());
218
219 LLWearable* wearable = new LLWearable( tid );
220 wearable->setType( type );
221 wearable->setName( wearable->getTypeLabel() );
222 wearable->setDescription( "Recovered from lost asset." );
223
224 LLVOAvatar* avatar = gAgent.getAvatarObject();
225 LLPermissions perm;
226 perm.init( avatar->getID(), avatar->getID(), LLUUID::null, LLUUID::null );
227 perm.initMasks(PERM_TRANSFER, PERM_TRANSFER, PERM_NONE, PERM_NONE, PERM_MOVE | PERM_TRANSFER);
228 wearable->setPermissions( perm );
229
230 // Save info is the default.
231
232 wearable->readFromAvatar();
233
234 mList[ new_asset_id ] = wearable;
235
236 // Send to the dataserver
237 wearable->saveNewAsset();
238
239 return wearable;
240}
241
242
243// Creates a new wearable just like the old_wearable but with data copied over from item 207// Creates a new wearable just like the old_wearable but with data copied over from item
244LLWearable* LLWearableList::createWearableMatchedToInventoryItem( LLWearable* old_wearable, LLViewerInventoryItem* item ) 208LLWearable* LLWearableList::createWearableMatchedToInventoryItem( LLWearable* old_wearable, LLViewerInventoryItem* item )
245{ 209{
diff --git a/linden/indra/newview/llwearablelist.h b/linden/indra/newview/llwearablelist.h
index cd15b78..7a01be0 100644
--- a/linden/indra/newview/llwearablelist.h
+++ b/linden/indra/newview/llwearablelist.h
@@ -51,8 +51,6 @@ public:
51 void(*asset_arrived_callback)(LLWearable*, void* userdata), 51 void(*asset_arrived_callback)(LLWearable*, void* userdata),
52 void* userdata ); 52 void* userdata );
53 53
54 LLWearable* createLegacyWearableFromAvatar( EWearableType type );
55
56 LLWearable* createWearableMatchedToInventoryItem( LLWearable* old_wearable, LLViewerInventoryItem* item ); 54 LLWearable* createWearableMatchedToInventoryItem( LLWearable* old_wearable, LLViewerInventoryItem* item );
57 LLWearable* createCopyFromAvatar( LLWearable* old_wearable, const std::string& new_name = std::string() ); 55 LLWearable* createCopyFromAvatar( LLWearable* old_wearable, const std::string& new_name = std::string() );
58 LLWearable* createCopy( LLWearable* old_wearable ); 56 LLWearable* createCopy( LLWearable* old_wearable );
diff --git a/linden/indra/newview/llwebbrowserctrl.cpp b/linden/indra/newview/llwebbrowserctrl.cpp
index 79f5a21..a9c1ec8 100644
--- a/linden/indra/newview/llwebbrowserctrl.cpp
+++ b/linden/indra/newview/llwebbrowserctrl.cpp
@@ -54,6 +54,8 @@
54const S32 MAX_DIMENSION = 2000; 54const S32 MAX_DIMENSION = 2000;
55const S32 MAX_TEXTURE_DIMENSION = 2048; 55const S32 MAX_TEXTURE_DIMENSION = 2048;
56 56
57static LLRegisterWidget<LLWebBrowserCtrl> r("web_browser");
58
57LLWebBrowserCtrl::LLWebBrowserCtrl( const std::string& name, const LLRect& rect ) : 59LLWebBrowserCtrl::LLWebBrowserCtrl( const std::string& name, const LLRect& rect ) :
58 LLUICtrl( name, rect, FALSE, NULL, NULL ), 60 LLUICtrl( name, rect, FALSE, NULL, NULL ),
59 mTextureDepthBytes( 4 ), 61 mTextureDepthBytes( 4 ),
@@ -68,6 +70,7 @@ LLWebBrowserCtrl::LLWebBrowserCtrl( const std::string& name, const LLRect& rect
68 mHomePageUrl( "" ), 70 mHomePageUrl( "" ),
69 mIgnoreUIScale( true ), 71 mIgnoreUIScale( true ),
70 mAlwaysRefresh( false ), 72 mAlwaysRefresh( false ),
73 mExternalUrl( "" ),
71 mMediaSource( 0 ) 74 mMediaSource( 0 )
72{ 75{
73 S32 screen_width = mIgnoreUIScale ? 76 S32 screen_width = mIgnoreUIScale ?
@@ -270,7 +273,7 @@ void LLWebBrowserCtrl::onFocusLost()
270 273
271//////////////////////////////////////////////////////////////////////////////// 274////////////////////////////////////////////////////////////////////////////////
272// 275//
273BOOL LLWebBrowserCtrl::handleKey( KEY key, MASK mask, BOOL called_from_parent ) 276BOOL LLWebBrowserCtrl::handleKeyHere( KEY key, MASK mask )
274{ 277{
275 unsigned long media_key; 278 unsigned long media_key;
276 279
@@ -325,7 +328,7 @@ BOOL LLWebBrowserCtrl::handleKey( KEY key, MASK mask, BOOL called_from_parent )
325 return TRUE; 328 return TRUE;
326} 329}
327 330
328BOOL LLWebBrowserCtrl::handleUnicodeChar(llwchar uni_char, BOOL called_from_parent) 331BOOL LLWebBrowserCtrl::handleUnicodeCharHere(llwchar uni_char)
329{ 332{
330 // only accept 'printable' characters, sigh... 333 // only accept 'printable' characters, sigh...
331 if (uni_char >= 32 // discard 'control' characters 334 if (uni_char >= 32 // discard 'control' characters
@@ -409,8 +412,7 @@ bool LLWebBrowserCtrl::canNavigateForward()
409 412
410//////////////////////////////////////////////////////////////////////////////// 413////////////////////////////////////////////////////////////////////////////////
411// 414//
412 415bool LLWebBrowserCtrl::set404RedirectUrl( std::string redirect_url )
413bool LLWebBrowserCtrl::set404RedirectUrl( std::string redirect_url )
414{ 416{
415 if(mMediaSource) 417 if(mMediaSource)
416 return mMediaSource->set404RedirectUrl( redirect_url ); 418 return mMediaSource->set404RedirectUrl( redirect_url );
@@ -432,31 +434,19 @@ bool LLWebBrowserCtrl::clr404RedirectUrl()
432// 434//
433void LLWebBrowserCtrl::navigateTo( std::string urlIn ) 435void LLWebBrowserCtrl::navigateTo( std::string urlIn )
434{ 436{
435 const std::string protocol( "secondlife://" ); 437 // don't browse to anything that starts with secondlife:// or sl://
436 const std::string protocol2( "sl://" ); 438 const std::string protocol1 = "secondlife://";
437 439 const std::string protocol2 = "sl://";
438 // don't browse to anything that starts with secondlife:// 440 if ((LLString::compareInsensitive(urlIn.substr(0, protocol1.length()).c_str(), protocol1.c_str()) == 0) ||
439 if ( urlIn.length() >= protocol.length() ) 441 (LLString::compareInsensitive(urlIn.substr(0, protocol2.length()).c_str(), protocol2.c_str()) == 0))
440 {
441 if ( LLString::compareInsensitive( urlIn.substr( 0, protocol.length() ).c_str(), protocol.c_str() ) != 0 )
442 {
443 if (mMediaSource)
444 mMediaSource->navigateTo(urlIn);
445 }
446 }
447 else if ( urlIn.length() >= protocol2.length() )
448 {
449 if ( LLString::compareInsensitive( urlIn.substr( 0, protocol2.length() ).c_str(), protocol2.c_str() ) != 0 )
450 {
451 if (mMediaSource)
452 mMediaSource->navigateTo(urlIn);
453 }
454 }
455 else
456 { 442 {
457 if (mMediaSource) 443 // TODO: Print out/log this attempt?
458 mMediaSource->navigateTo(urlIn); 444 // llinfos << "Rejecting attempt to load restricted website :" << urlIn << llendl;
445 return;
459 } 446 }
447
448 if (mMediaSource)
449 mMediaSource->navigateTo(urlIn);
460} 450}
461 451
462 452
@@ -535,9 +525,6 @@ std::string LLWebBrowserCtrl::getHomePageUrl()
535// 525//
536void LLWebBrowserCtrl::draw() 526void LLWebBrowserCtrl::draw()
537{ 527{
538 if ( ! getVisible() )
539 return;
540
541 if ( ! mWebBrowserImage ) 528 if ( ! mWebBrowserImage )
542 return; 529 return;
543 530
@@ -601,7 +588,7 @@ void LLWebBrowserCtrl::draw()
601 if ( mBorder->getVisible() ) 588 if ( mBorder->getVisible() )
602 mBorder->setKeyboardFocusHighlight( gFocusMgr.childHasKeyboardFocus( this ) ); 589 mBorder->setKeyboardFocusHighlight( gFocusMgr.childHasKeyboardFocus( this ) );
603 590
604 591
605 LLUICtrl::draw(); 592 LLUICtrl::draw();
606} 593}
607 594
@@ -677,9 +664,32 @@ void LLWebBrowserCtrl::onMediaContentsChange( const EventType& event_in )
677} 664}
678 665
679//////////////////////////////////////////////////////////////////////////////// 666////////////////////////////////////////////////////////////////////////////////
667// static
668void LLWebBrowserCtrl::onClickLinkExternalTarget( S32 option, void* userdata )
669{
670 if ( 0 == option )
671 {
672 // open in external browser because we don't support
673 // creation of our own secondary browser windows
674 LLWeb::loadURLExternal( ((LLWebBrowserCtrl*)userdata)->mExternalUrl );
675 };
676}
677
678////////////////////////////////////////////////////////////////////////////////
680// virtual 679// virtual
681void LLWebBrowserCtrl::onClickLinkHref( const EventType& eventIn ) 680void LLWebBrowserCtrl::onClickLinkHref( const EventType& eventIn )
682{ 681{
682 // if there is a value for the target (passed in stringValueEx)
683 if ( eventIn.getStringValueEx().length() )
684 {
685 // if the target = "_new"
686 if ( eventIn.getStringValueEx() == "_external" ) {
687 mExternalUrl = eventIn.getStringValue();
688 gViewerWindow->alertXml( "WebLaunchExternalTarget", onClickLinkExternalTarget, (void*)this );
689 return;
690 };
691 };
692
683 const std::string protocol1( "http://" ); 693 const std::string protocol1( "http://" );
684 const std::string protocol2( "https://" ); 694 const std::string protocol2( "https://" );
685 if( mOpenLinksInExternalBrowser ) 695 if( mOpenLinksInExternalBrowser )
@@ -704,14 +714,18 @@ void LLWebBrowserCtrl::onClickLinkHref( const EventType& eventIn )
704 // If we spawn a new LLFloaterHTML, assume we want it to 714 // If we spawn a new LLFloaterHTML, assume we want it to
705 // follow this LLWebBrowserCtrl's setting for whether or 715 // follow this LLWebBrowserCtrl's setting for whether or
706 // not to open secondlife:///app/ links. JC. 716 // not to open secondlife:///app/ links. JC.
707 bool open_links_externally = false; 717 const bool open_links_externally = false;
708 LLFloaterHtml::getInstance()->show( eventIn.getStringValue(), "Second Life Browser", mOpenAppSLURLs, open_links_externally); 718 LLFloaterHtml::getInstance()->show(
719 eventIn.getStringValue(),
720 "Second Life Browser",
721 open_links_externally,
722 mOpenAppSLURLs);
709 }; 723 };
710 }; 724 };
711 }; 725 };
712 726
713 // chain this event on to observers of an instance of LLWebBrowserCtrl 727 // chain this event on to observers of an instance of LLWebBrowserCtrl
714 LLWebBrowserCtrlEvent event( eventIn.getStringValue() ); 728 LLWebBrowserCtrlEvent event( eventIn.getStringValue(), eventIn.getStringValueEx() );
715 mEventEmitter.update( &LLWebBrowserCtrlObserver::onClickLinkHref, event ); 729 mEventEmitter.update( &LLWebBrowserCtrlObserver::onClickLinkHref, event );
716} 730}
717 731
@@ -735,7 +749,6 @@ void LLWebBrowserCtrl::onClickLinkNoFollow( const EventType& eventIn )
735 mEventEmitter.update( &LLWebBrowserCtrlObserver::onClickLinkNoFollow, event ); 749 mEventEmitter.update( &LLWebBrowserCtrlObserver::onClickLinkNoFollow, event );
736} 750}
737 751
738
739//////////////////////////////////////////////////////////////////////////////// 752////////////////////////////////////////////////////////////////////////////////
740// 753//
741LLWebBrowserTexture::LLWebBrowserTexture( S32 width, S32 height, LLWebBrowserCtrl* browserCtrl, LLMediaBase *media_source ) : 754LLWebBrowserTexture::LLWebBrowserTexture( S32 width, S32 height, LLWebBrowserCtrl* browserCtrl, LLMediaBase *media_source ) :
diff --git a/linden/indra/newview/llwebbrowserctrl.h b/linden/indra/newview/llwebbrowserctrl.h
index abfb18b..f7c9647 100644
--- a/linden/indra/newview/llwebbrowserctrl.h
+++ b/linden/indra/newview/llwebbrowserctrl.h
@@ -51,6 +51,12 @@ class LLWebBrowserCtrlEvent
51 { 51 {
52 }; 52 };
53 53
54 LLWebBrowserCtrlEvent( std::string stringValIn, std::string stringValExIn ) :
55 mStringVal( stringValIn ),
56 mStringValEx( stringValExIn )
57 {
58 };
59
54 virtual ~LLWebBrowserCtrlEvent() 60 virtual ~LLWebBrowserCtrlEvent()
55 { 61 {
56 }; 62 };
@@ -65,9 +71,15 @@ class LLWebBrowserCtrlEvent
65 return mStringVal; 71 return mStringVal;
66 }; 72 };
67 73
74 std::string getStringValueEx() const
75 {
76 return mStringValEx;
77 };
78
68 private: 79 private:
69 int mIntVal; 80 int mIntVal;
70 std::string mStringVal; 81 std::string mStringVal;
82 std::string mStringValEx;
71}; 83};
72 84
73//////////////////////////////////////////////////////////////////////////////// 85////////////////////////////////////////////////////////////////////////////////
@@ -172,10 +184,6 @@ class LLWebBrowserCtrl :
172 184
173 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); 185 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
174 186
175 // for XML construction
176 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_WEBBROWSER; }
177 virtual LLString getWidgetTag() const { return LL_WEB_BROWSER_CTRL_TAG; }
178
179 // handle mouse related methods 187 // handle mouse related methods
180 virtual BOOL handleHover( S32 x, S32 y, MASK mask ); 188 virtual BOOL handleHover( S32 x, S32 y, MASK mask );
181 virtual BOOL handleMouseUp( S32 x, S32 y, MASK mask ); 189 virtual BOOL handleMouseUp( S32 x, S32 y, MASK mask );
@@ -226,8 +234,8 @@ class LLWebBrowserCtrl :
226 234
227 235
228 // over-rides 236 // over-rides
229 virtual BOOL handleKey( KEY key, MASK mask, BOOL called_from_parent ); 237 virtual BOOL handleKeyHere( KEY key, MASK mask);
230 virtual BOOL handleUnicodeChar(llwchar uni_char, BOOL called_from_parent); 238 virtual BOOL handleUnicodeCharHere(llwchar uni_char);
231 virtual void reshape( S32 width, S32 height, BOOL called_from_parent = TRUE); 239 virtual void reshape( S32 width, S32 height, BOOL called_from_parent = TRUE);
232 virtual void draw(); 240 virtual void draw();
233 virtual void onVisibilityChange ( BOOL curVisibilityIn ); 241 virtual void onVisibilityChange ( BOOL curVisibilityIn );
@@ -254,6 +262,7 @@ class LLWebBrowserCtrl :
254 void convertInputCoords(S32& x, S32& y); 262 void convertInputCoords(S32& x, S32& y);
255 263
256 private: 264 private:
265 static void onClickLinkExternalTarget( S32 option, void* userdata );
257 LLWebBrowserCtrlEventEmitter< LLWebBrowserCtrlObserver > mEventEmitter; 266 LLWebBrowserCtrlEventEmitter< LLWebBrowserCtrlObserver > mEventEmitter;
258 const S32 mTextureDepthBytes; 267 const S32 mTextureDepthBytes;
259 int mEmbeddedBrowserWindowId; 268 int mEmbeddedBrowserWindowId;
@@ -265,6 +274,7 @@ class LLWebBrowserCtrl :
265 bool mOpenLinksInInternalBrowser; 274 bool mOpenLinksInInternalBrowser;
266 bool mOpenAppSLURLs; 275 bool mOpenAppSLURLs;
267 std::string mHomePageUrl; 276 std::string mHomePageUrl;
277 std::string mExternalUrl;
268 bool mIgnoreUIScale; 278 bool mIgnoreUIScale;
269 bool mAlwaysRefresh; 279 bool mAlwaysRefresh;
270 LLMediaBase* mMediaSource; 280 LLMediaBase* mMediaSource;
diff --git a/linden/indra/newview/llwind.cpp b/linden/indra/newview/llwind.cpp
index 5d20112..3b18835 100644
--- a/linden/indra/newview/llwind.cpp
+++ b/linden/indra/newview/llwind.cpp
@@ -237,7 +237,7 @@ LLVector3 LLWind::getVelocity(const LLVector3 &pos_region)
237 237
238 LLVector3 pos_clamped_region(pos_region); 238 LLVector3 pos_clamped_region(pos_region);
239 239
240 F32 region_width_meters = gWorldPointer->getRegionWidthInMeters(); 240 F32 region_width_meters = LLWorld::getInstance()->getRegionWidthInMeters();
241 241
242 if (pos_clamped_region.mV[VX] < 0.f) 242 if (pos_clamped_region.mV[VX] < 0.f)
243 { 243 {
@@ -299,7 +299,7 @@ LLVector3 LLWind::getCloudVelocity(const LLVector3 &pos_region)
299 299
300 LLVector3 pos_clamped_region(pos_region); 300 LLVector3 pos_clamped_region(pos_region);
301 301
302 F32 region_width_meters = gWorldPointer->getRegionWidthInMeters(); 302 F32 region_width_meters = LLWorld::getInstance()->getRegionWidthInMeters();
303 303
304 if (pos_clamped_region.mV[VX] < 0.f) 304 if (pos_clamped_region.mV[VX] < 0.f)
305 { 305 {
diff --git a/linden/indra/newview/llwlparammanager.cpp b/linden/indra/newview/llwlparammanager.cpp
index 11ed43c..9f59947 100644
--- a/linden/indra/newview/llwlparammanager.cpp
+++ b/linden/indra/newview/llwlparammanager.cpp
@@ -39,7 +39,7 @@
39#include "llsliderctrl.h" 39#include "llsliderctrl.h"
40#include "llspinctrl.h" 40#include "llspinctrl.h"
41#include "llcheckboxctrl.h" 41#include "llcheckboxctrl.h"
42#include "llvieweruictrlfactory.h" 42#include "lluictrlfactory.h"
43#include "llviewercamera.h" 43#include "llviewercamera.h"
44#include "llcombobox.h" 44#include "llcombobox.h"
45#include "lllineeditor.h" 45#include "lllineeditor.h"
@@ -280,7 +280,7 @@ void LLWLParamManager::updateShaderUniforms(LLGLSLShader * shader)
280 if (shader->mShaderGroup == LLGLSLShader::SG_DEFAULT) 280 if (shader->mShaderGroup == LLGLSLShader::SG_DEFAULT)
281 { 281 {
282 shader->uniform4fv(LLShaderMgr::LIGHTNORM, 1, mRotatedLightDir.mV); 282 shader->uniform4fv(LLShaderMgr::LIGHTNORM, 1, mRotatedLightDir.mV);
283 shader->uniform3fv("camPosLocal", 1, gCamera->getOrigin().mV); 283 shader->uniform3fv("camPosLocal", 1, LLViewerCamera::getInstance()->getOrigin().mV);
284 } 284 }
285 285
286 else if (shader->mShaderGroup == LLGLSLShader::SG_SKY) 286 else if (shader->mShaderGroup == LLGLSLShader::SG_SKY)
diff --git a/linden/indra/newview/llworld.cpp b/linden/indra/newview/llworld.cpp
index 60312db..8c95260 100644
--- a/linden/indra/newview/llworld.cpp
+++ b/linden/indra/newview/llworld.cpp
@@ -61,7 +61,6 @@
61// 61//
62// Globals 62// Globals
63// 63//
64LLWorld* gWorldp = NULL;
65U32 gAgentPauseSerialNum = 0; 64U32 gAgentPauseSerialNum = 0;
66 65
67// 66//
@@ -72,15 +71,19 @@ const S32 WORLD_PATCH_SIZE = 16;
72 71
73extern LLColor4U MAX_WATER_COLOR; 72extern LLColor4U MAX_WATER_COLOR;
74 73
74const U32 LLWorld::mWidth = 256;
75
76// meters/point, therefore mWidth * mScale = meters per edge
77const F32 LLWorld::mScale = 1.f;
78
79const F32 LLWorld::mWidthInMeters = mWidth * mScale;
80
75// 81//
76// Functions 82// Functions
77// 83//
78 84
79// allocate the stack 85// allocate the stack
80LLWorld::LLWorld(const U32 grids_per_region, const F32 meters_per_grid) 86LLWorld::LLWorld()
81: mWidth(grids_per_region),
82 mScale(meters_per_grid),
83 mWidthInMeters( grids_per_region * meters_per_grid )
84{ 87{
85 mSpaceTimeUSec = 0; 88 mSpaceTimeUSec = 0;
86 mLastPacketsIn = 0; 89 mLastPacketsIn = 0;
@@ -112,10 +115,15 @@ LLWorld::LLWorld(const U32 grids_per_region, const F32 meters_per_grid)
112} 115}
113 116
114 117
115LLWorld::~LLWorld() 118void LLWorld::destroyClass()
116{ 119{
117 gObjectList.killAllObjects(); 120 gObjectList.destroy();
118 for_each(mRegionList.begin(), mRegionList.end(), DeletePointer()); 121 for(region_list_t::iterator region_it = mRegionList.begin(); region_it != mRegionList.end(); )
122 {
123 LLViewerRegion* region_to_delete = *region_it++;
124 removeRegion(region_to_delete->getHost());
125 }
126 LLViewerPartSim::getInstance()->destroyClass();
119} 127}
120 128
121 129
@@ -523,6 +531,11 @@ F32 LLWorld::resolveStepHeightGlobal(const LLVOAvatar* avatarp, const LLVector3d
523 intersection.mdV[VZ] -= norm_dist_from_plane * segment_length; 531 intersection.mdV[VZ] -= norm_dist_from_plane * segment_length;
524 intersection_normal = foot_plane_normal; 532 intersection_normal = foot_plane_normal;
525 } 533 }
534 else
535 {
536 intersection = land_intersection;
537 intersection_normal = resolveLandNormalGlobal(land_intersection);
538 }
526 } 539 }
527 540
528 return normalized_land_distance; 541 return normalized_land_distance;
@@ -556,9 +569,9 @@ LLVector3 LLWorld::resolveLandNormalGlobal(const LLVector3d &pos_global)
556 569
557void LLWorld::updateVisibilities() 570void LLWorld::updateVisibilities()
558{ 571{
559 F32 cur_far_clip = gCamera->getFar(); 572 F32 cur_far_clip = LLViewerCamera::getInstance()->getFar();
560 573
561 gCamera->setFar(mLandFarClip); 574 LLViewerCamera::getInstance()->setFar(mLandFarClip);
562 575
563 F32 diagonal_squared = F_SQRT2 * F_SQRT2 * mWidth * mWidth; 576 F32 diagonal_squared = F_SQRT2 * F_SQRT2 * mWidth * mWidth;
564 // Go through the culled list and check for visible regions 577 // Go through the culled list and check for visible regions
@@ -570,7 +583,7 @@ void LLWorld::updateVisibilities()
570 F32 height = regionp->getLand().getMaxZ() - regionp->getLand().getMinZ(); 583 F32 height = regionp->getLand().getMaxZ() - regionp->getLand().getMinZ();
571 F32 radius = 0.5f*fsqrtf(height * height + diagonal_squared); 584 F32 radius = 0.5f*fsqrtf(height * height + diagonal_squared);
572 if (!regionp->getLand().hasZData() 585 if (!regionp->getLand().hasZData()
573 || gCamera->sphereInFrustum(regionp->getCenterAgent(), radius)) 586 || LLViewerCamera::getInstance()->sphereInFrustum(regionp->getCenterAgent(), radius))
574 { 587 {
575 mCulledRegionList.erase(curiter); 588 mCulledRegionList.erase(curiter);
576 mVisibleRegionList.push_back(regionp); 589 mVisibleRegionList.push_back(regionp);
@@ -590,7 +603,7 @@ void LLWorld::updateVisibilities()
590 603
591 F32 height = regionp->getLand().getMaxZ() - regionp->getLand().getMinZ(); 604 F32 height = regionp->getLand().getMaxZ() - regionp->getLand().getMinZ();
592 F32 radius = 0.5f*fsqrtf(height * height + diagonal_squared); 605 F32 radius = 0.5f*fsqrtf(height * height + diagonal_squared);
593 if (gCamera->sphereInFrustum(regionp->getCenterAgent(), radius)) 606 if (LLViewerCamera::getInstance()->sphereInFrustum(regionp->getCenterAgent(), radius))
594 { 607 {
595 regionp->calculateCameraDistance(); 608 regionp->calculateCameraDistance();
596 if (!gNoRender) 609 if (!gNoRender)
@@ -608,7 +621,7 @@ void LLWorld::updateVisibilities()
608 // Sort visible regions 621 // Sort visible regions
609 mVisibleRegionList.sort(LLViewerRegion::CompareDistance()); 622 mVisibleRegionList.sort(LLViewerRegion::CompareDistance());
610 623
611 gCamera->setFar(cur_far_clip); 624 LLViewerCamera::getInstance()->setFar(cur_far_clip);
612} 625}
613 626
614void LLWorld::updateRegions(F32 max_update_time) 627void LLWorld::updateRegions(F32 max_update_time)
@@ -631,7 +644,7 @@ void LLWorld::updateRegions(F32 max_update_time)
631 644
632void LLWorld::updateParticles() 645void LLWorld::updateParticles()
633{ 646{
634 mPartSim.updateSimulation(); 647 LLViewerPartSim::getInstance()->updateSimulation();
635} 648}
636 649
637void LLWorld::updateClouds(const F32 dt) 650void LLWorld::updateClouds(const F32 dt)
@@ -727,19 +740,19 @@ void LLWorld::updateNetStats()
727 740
728 S32 actual_in_bits = gMessageSystem->mPacketRing.getAndResetActualInBits(); 741 S32 actual_in_bits = gMessageSystem->mPacketRing.getAndResetActualInBits();
729 S32 actual_out_bits = gMessageSystem->mPacketRing.getAndResetActualOutBits(); 742 S32 actual_out_bits = gMessageSystem->mPacketRing.getAndResetActualOutBits();
730 gViewerStats->mActualInKBitStat.addValue(actual_in_bits/1024.f); 743 LLViewerStats::getInstance()->mActualInKBitStat.addValue(actual_in_bits/1024.f);
731 gViewerStats->mActualOutKBitStat.addValue(actual_out_bits/1024.f); 744 LLViewerStats::getInstance()->mActualOutKBitStat.addValue(actual_out_bits/1024.f);
732 gViewerStats->mKBitStat.addValue(bits/1024.f); 745 LLViewerStats::getInstance()->mKBitStat.addValue(bits/1024.f);
733 gViewerStats->mPacketsInStat.addValue(packets_in); 746 LLViewerStats::getInstance()->mPacketsInStat.addValue(packets_in);
734 gViewerStats->mPacketsOutStat.addValue(packets_out); 747 LLViewerStats::getInstance()->mPacketsOutStat.addValue(packets_out);
735 gViewerStats->mPacketsLostStat.addValue(gMessageSystem->mDroppedPackets); 748 LLViewerStats::getInstance()->mPacketsLostStat.addValue(gMessageSystem->mDroppedPackets);
736 if (packets_in) 749 if (packets_in)
737 { 750 {
738 gViewerStats->mPacketsLostPercentStat.addValue(100.f*((F32)packets_lost/(F32)packets_in)); 751 LLViewerStats::getInstance()->mPacketsLostPercentStat.addValue(100.f*((F32)packets_lost/(F32)packets_in));
739 } 752 }
740 else 753 else
741 { 754 {
742 gViewerStats->mPacketsLostPercentStat.addValue(0.f); 755 LLViewerStats::getInstance()->mPacketsLostPercentStat.addValue(0.f);
743 } 756 }
744 757
745 mLastPacketsIn = gMessageSystem->mPacketsIn; 758 mLastPacketsIn = gMessageSystem->mPacketsIn;
@@ -771,8 +784,7 @@ void LLWorld::printPacketsLost()
771 784
772void LLWorld::processCoarseUpdate(LLMessageSystem* msg, void** user_data) 785void LLWorld::processCoarseUpdate(LLMessageSystem* msg, void** user_data)
773{ 786{
774 if(!gWorldp) return; 787 LLViewerRegion* region = LLWorld::getInstance()->getRegion(msg->getSender());
775 LLViewerRegion* region = gWorldp->getRegion(msg->getSender());
776 if( region ) 788 if( region )
777 { 789 {
778 region->updateCoarseLocations(msg); 790 region->updateCoarseLocations(msg);
@@ -812,7 +824,7 @@ void LLWorld::updateWaterObjects()
812 S32 rwidth = 256; 824 S32 rwidth = 256;
813 825
814 // We only want to fill in water for stuff that's near us, say, within 256 or 512m 826 // We only want to fill in water for stuff that's near us, say, within 256 or 512m
815 S32 range = gCamera->getFar() > 256.f ? 512 : 256; 827 S32 range = LLViewerCamera::getInstance()->getFar() > 256.f ? 512 : 256;
816 828
817 LLViewerRegion* regionp = gAgent.getRegion(); 829 LLViewerRegion* regionp = gAgent.getRegion();
818 from_region_handle(regionp->getHandle(), &region_x, &region_y); 830 from_region_handle(regionp->getHandle(), &region_x, &region_y);
@@ -940,7 +952,7 @@ void LLWorld::shiftRegions(const LLVector3& offset)
940 region->updateRenderMatrix(); 952 region->updateRenderMatrix();
941 } 953 }
942 954
943 mPartSim.shift(offset); 955 LLViewerPartSim::getInstance()->shift(offset);
944} 956}
945 957
946LLViewerImage* LLWorld::getDefaultWaterTexture() 958LLViewerImage* LLWorld::getDefaultWaterTexture()
@@ -1022,8 +1034,7 @@ void process_enable_simulator(LLMessageSystem *msg, void **user_data)
1022 1034
1023 // Viewer trusts the simulator. 1035 // Viewer trusts the simulator.
1024 msg->enableCircuit(sim, TRUE); 1036 msg->enableCircuit(sim, TRUE);
1025 if(!gWorldp) return; 1037 LLWorld::getInstance()->addRegion(handle, sim);
1026 gWorldp->addRegion(handle, sim);
1027 1038
1028 // give the simulator a message it can use to get ip and port 1039 // give the simulator a message it can use to get ip and port
1029 llinfos << "simulator_enable() Enabling " << sim << " with code " << msg->getOurCircuitCode() << llendl; 1040 llinfos << "simulator_enable() Enabling " << sim << " with code " << msg->getOurCircuitCode() << llendl;
@@ -1060,8 +1071,7 @@ public:
1060 1071
1061 LLHost sim(input["body"]["sim-ip-and-port"].asString()); 1072 LLHost sim(input["body"]["sim-ip-and-port"].asString());
1062 1073
1063 if(!gWorldp) return; 1074 LLViewerRegion* regionp = LLWorld::getInstance()->getRegion(sim);
1064 LLViewerRegion* regionp = gWorldp->getRegion(sim);
1065 if (!regionp) 1075 if (!regionp)
1066 { 1076 {
1067 llwarns << "Got EstablishAgentCommunication for unknown region " 1077 llwarns << "Got EstablishAgentCommunication for unknown region "
@@ -1079,8 +1089,7 @@ void process_disable_simulator(LLMessageSystem *mesgsys, void **user_data)
1079 LLHost host = mesgsys->getSender(); 1089 LLHost host = mesgsys->getSender();
1080 1090
1081 //llinfos << "Disabling simulator with message from " << host << llendl; 1091 //llinfos << "Disabling simulator with message from " << host << llendl;
1082 if(!gWorldp) return; 1092 LLWorld::getInstance()->removeRegion(host);
1083 gWorldp->removeRegion(host);
1084 1093
1085 mesgsys->disableCircuit(host); 1094 mesgsys->disableCircuit(host);
1086} 1095}
@@ -1089,8 +1098,7 @@ void process_disable_simulator(LLMessageSystem *mesgsys, void **user_data)
1089void process_region_handshake(LLMessageSystem* msg, void** user_data) 1098void process_region_handshake(LLMessageSystem* msg, void** user_data)
1090{ 1099{
1091 LLHost host = msg->getSender(); 1100 LLHost host = msg->getSender();
1092 if(!gWorldp) return; 1101 LLViewerRegion* regionp = LLWorld::getInstance()->getRegion(host);
1093 LLViewerRegion* regionp = gWorldp->getRegion(host);
1094 if (!regionp) 1102 if (!regionp)
1095 { 1103 {
1096 llwarns << "Got region handshake for unknown region " 1104 llwarns << "Got region handshake for unknown region "
@@ -1104,8 +1112,10 @@ void process_region_handshake(LLMessageSystem* msg, void** user_data)
1104 1112
1105void send_agent_pause() 1113void send_agent_pause()
1106{ 1114{
1107 // world not initialized yet 1115 // Note: used to check for LLWorld initialization before it became a singleton.
1108 if (!gWorldp) 1116 // Rather than just remove this check I'm changing it to assure that the message
1117 // system has been initialized. -MG
1118 if (!gMessageSystem)
1109 { 1119 {
1110 return; 1120 return;
1111 } 1121 }
@@ -1118,8 +1128,8 @@ void send_agent_pause()
1118 gAgentPauseSerialNum++; 1128 gAgentPauseSerialNum++;
1119 gMessageSystem->addU32Fast(_PREHASH_SerialNum, gAgentPauseSerialNum); 1129 gMessageSystem->addU32Fast(_PREHASH_SerialNum, gAgentPauseSerialNum);
1120 1130
1121 for (LLWorld::region_list_t::iterator iter = gWorldp->mActiveRegionList.begin(); 1131 for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->mActiveRegionList.begin();
1122 iter != gWorldp->mActiveRegionList.end(); ++iter) 1132 iter != LLWorld::getInstance()->mActiveRegionList.end(); ++iter)
1123 { 1133 {
1124 LLViewerRegion* regionp = *iter; 1134 LLViewerRegion* regionp = *iter;
1125 gMessageSystem->sendReliable(regionp->getHost()); 1135 gMessageSystem->sendReliable(regionp->getHost());
@@ -1131,8 +1141,13 @@ void send_agent_pause()
1131 1141
1132void send_agent_resume() 1142void send_agent_resume()
1133{ 1143{
1134 // world not initialized yet 1144 // Note: used to check for LLWorld initialization before it became a singleton.
1135 if (!gWorldp) return; 1145 // Rather than just remove this check I'm changing it to assure that the message
1146 // system has been initialized. -MG
1147 if (!gMessageSystem)
1148 {
1149 return;
1150 }
1136 1151
1137 gMessageSystem->newMessageFast(_PREHASH_AgentResume); 1152 gMessageSystem->newMessageFast(_PREHASH_AgentResume);
1138 gMessageSystem->nextBlockFast(_PREHASH_AgentData); 1153 gMessageSystem->nextBlockFast(_PREHASH_AgentData);
@@ -1143,15 +1158,15 @@ void send_agent_resume()
1143 gMessageSystem->addU32Fast(_PREHASH_SerialNum, gAgentPauseSerialNum); 1158 gMessageSystem->addU32Fast(_PREHASH_SerialNum, gAgentPauseSerialNum);
1144 1159
1145 1160
1146 for (LLWorld::region_list_t::iterator iter = gWorldp->mActiveRegionList.begin(); 1161 for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->mActiveRegionList.begin();
1147 iter != gWorldp->mActiveRegionList.end(); ++iter) 1162 iter != LLWorld::getInstance()->mActiveRegionList.end(); ++iter)
1148 { 1163 {
1149 LLViewerRegion* regionp = *iter; 1164 LLViewerRegion* regionp = *iter;
1150 gMessageSystem->sendReliable(regionp->getHost()); 1165 gMessageSystem->sendReliable(regionp->getHost());
1151 } 1166 }
1152 1167
1153 // Reset the FPS counter to avoid an invalid fps 1168 // Reset the FPS counter to avoid an invalid fps
1154 gViewerStats->mFPSStat.start(); 1169 LLViewerStats::getInstance()->mFPSStat.start();
1155} 1170}
1156 1171
1157 1172
diff --git a/linden/indra/newview/llworld.h b/linden/indra/newview/llworld.h
index 7b935e8..d297d47 100644
--- a/linden/indra/newview/llworld.h
+++ b/linden/indra/newview/llworld.h
@@ -35,12 +35,12 @@
35#include "llpatchvertexarray.h" 35#include "llpatchvertexarray.h"
36 36
37#include "llmath.h" 37#include "llmath.h"
38//#include "vmath.h"
39#include "v3math.h" 38#include "v3math.h"
40#include "llmemory.h" 39#include "llmemory.h"
41#include "llstring.h" 40#include "llstring.h"
42#include "llviewerpartsim.h" 41#include "llviewerpartsim.h"
43#include "llviewerimage.h" 42#include "llviewerimage.h"
43#include "llvowater.h"
44 44
45class LLViewerRegion; 45class LLViewerRegion;
46class LLVector3d; 46class LLVector3d;
@@ -49,7 +49,6 @@ class LLNetMap;
49class LLHost; 49class LLHost;
50 50
51class LLViewerObject; 51class LLViewerObject;
52class LLVOWater;
53class LLSurfacePatch; 52class LLSurfacePatch;
54 53
55class LLCloudPuff; 54class LLCloudPuff;
@@ -60,11 +59,11 @@ class LLVOAvatar;
60// as simulators are connected to, viewer_regions are popped off the stack and connected as required 59// as simulators are connected to, viewer_regions are popped off the stack and connected as required
61// as simulators are removed, they are pushed back onto the stack 60// as simulators are removed, they are pushed back onto the stack
62 61
63class LLWorld 62class LLWorld : public LLSingleton<LLWorld>
64{ 63{
65public: 64public:
66 LLWorld(const U32 grids_per_region, const F32 meters_per_grid); 65 LLWorld();
67 ~LLWorld(); 66 void destroyClass();
68 67
69 LLViewerRegion* addRegion(const U64 &region_handle, const LLHost &host); 68 LLViewerRegion* addRegion(const U64 &region_handle, const LLHost &host);
70 // safe to call if already present, does the "right thing" if 69 // safe to call if already present, does the "right thing" if
@@ -114,7 +113,7 @@ public:
114 // region X and Y size in meters 113 // region X and Y size in meters
115 F32 getRegionWidthInMeters() const { return mWidthInMeters; } 114 F32 getRegionWidthInMeters() const { return mWidthInMeters; }
116 F32 getRegionMinHeight() const { return -mWidthInMeters; } 115 F32 getRegionMinHeight() const { return -mWidthInMeters; }
117 F32 getRegionMaxHeight() const { return 3.f*mWidthInMeters; } 116 F32 getRegionMaxHeight() const { return MAX_OBJECT_Z; }
118 117
119 void updateRegions(F32 max_update_time); 118 void updateRegions(F32 max_update_time);
120 void updateVisibilities(); 119 void updateVisibilities();
@@ -149,7 +148,6 @@ public:
149 typedef std::list<LLViewerRegion*> region_list_t; 148 typedef std::list<LLViewerRegion*> region_list_t;
150 149
151 region_list_t mActiveRegionList; 150 region_list_t mActiveRegionList;
152 LLViewerPartSim mPartSim;
153 151
154 region_list_t& getRegionList() { return mActiveRegionList; } 152 region_list_t& getRegionList() { return mActiveRegionList; }
155 153
@@ -159,12 +157,12 @@ private:
159 region_list_t mCulledRegionList; 157 region_list_t mCulledRegionList;
160 158
161 // Number of points on edge 159 // Number of points on edge
162 const U32 mWidth; 160 static const U32 mWidth;
163 161
164 // meters/point, therefore mWidth * mScale = meters per edge 162 // meters/point, therefore mWidth * mScale = meters per edge
165 const F32 mScale; 163 static const F32 mScale;
166 164
167 const F32 mWidthInMeters; 165 static const F32 mWidthInMeters;
168 166
169 F32 mLandFarClip; // Far clip distance for land. 167 F32 mLandFarClip; // Far clip distance for land.
170 LLPatchVertexArray mLandPatch; 168 LLPatchVertexArray mLandPatch;
@@ -190,8 +188,6 @@ private:
190 U64 mSpaceTimeUSec; 188 U64 mSpaceTimeUSec;
191}; 189};
192 190
193extern LLWorld *gWorldp;
194#define gWorldPointer gWorldp
195 191
196void process_enable_simulator(LLMessageSystem *mesgsys, void **user_data); 192void process_enable_simulator(LLMessageSystem *mesgsys, void **user_data);
197void process_disable_simulator(LLMessageSystem *mesgsys, void **user_data); 193void process_disable_simulator(LLMessageSystem *mesgsys, void **user_data);
diff --git a/linden/indra/newview/llworldmap.cpp b/linden/indra/newview/llworldmap.cpp
index 0a2b33e..28ae94a 100644
--- a/linden/indra/newview/llworldmap.cpp
+++ b/linden/indra/newview/llworldmap.cpp
@@ -46,8 +46,6 @@
46#include "llviewerregion.h" 46#include "llviewerregion.h"
47#include "llregionflags.h" 47#include "llregionflags.h"
48 48
49LLWorldMap* gWorldMap = NULL;
50
51const F32 REQUEST_ITEMS_TIMER = 10.f * 60.f; // 10 minutes 49const F32 REQUEST_ITEMS_TIMER = 10.f * 60.f; // 10 minutes
52 50
53LLItemInfo::LLItemInfo(F32 global_x, F32 global_y, 51LLItemInfo::LLItemInfo(F32 global_x, F32 global_y,
@@ -108,6 +106,7 @@ LLWorldMap::LLWorldMap() :
108 mNeighborMapWidth(0), 106 mNeighborMapWidth(0),
109 mNeighborMapHeight(0), 107 mNeighborMapHeight(0),
110 mSLURLRegionName(), 108 mSLURLRegionName(),
109 mSLURLRegionHandle(0),
111 mSLURL(), 110 mSLURL(),
112 mSLURLCallback(0), 111 mSLURLCallback(0),
113 mSLURLTeleport(false) 112 mSLURLTeleport(false)
@@ -344,6 +343,8 @@ void LLWorldMap::sendItemRequest(U32 type, U64 handle)
344// public 343// public
345void LLWorldMap::sendMapLayerRequest() 344void LLWorldMap::sendMapLayerRequest()
346{ 345{
346 if (!gAgent.getRegion()) return;
347
347 LLSD body; 348 LLSD body;
348 body["Flags"] = mCurrentMap; 349 body["Flags"] = mCurrentMap;
349 std::string url = gAgent.getRegion()->getCapability( 350 std::string url = gAgent.getRegion()->getCapability(
@@ -409,6 +410,7 @@ void LLWorldMap::sendNamedRegionRequest(std::string region_name,
409 bool teleport) // immediately teleport when result returned 410 bool teleport) // immediately teleport when result returned
410{ 411{
411 mSLURLRegionName = region_name; 412 mSLURLRegionName = region_name;
413 mSLURLRegionHandle = 0;
412 mSLURL = callback_url; 414 mSLURL = callback_url;
413 mSLURLCallback = callback; 415 mSLURLCallback = callback;
414 mSLURLTeleport = teleport; 416 mSLURLTeleport = teleport;
@@ -416,6 +418,26 @@ void LLWorldMap::sendNamedRegionRequest(std::string region_name,
416 sendNamedRegionRequest(region_name); 418 sendNamedRegionRequest(region_name);
417} 419}
418 420
421void LLWorldMap::sendHandleRegionRequest(U64 region_handle,
422 url_callback_t callback,
423 const std::string& callback_url,
424 bool teleport) // immediately teleport when result returned
425{
426 mSLURLRegionName.clear();
427 mSLURLRegionHandle = region_handle;
428 mSLURL = callback_url;
429 mSLURLCallback = callback;
430 mSLURLTeleport = teleport;
431
432 U32 global_x;
433 U32 global_y;
434 from_region_handle(region_handle, &global_x, &global_y);
435 U16 grid_x = (U16)(global_x / REGION_WIDTH_UNITS);
436 U16 grid_y = (U16)(global_y / REGION_WIDTH_UNITS);
437
438 sendMapBlockRequest(grid_x, grid_y, grid_x, grid_y, true);
439}
440
419// public 441// public
420void LLWorldMap::sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent) 442void LLWorldMap::sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent)
421{ 443{
@@ -463,7 +485,7 @@ void LLWorldMap::processMapLayerReply(LLMessageSystem* msg, void**)
463 U32 agent_flags; 485 U32 agent_flags;
464 msg->getU32Fast(_PREHASH_AgentData, _PREHASH_Flags, agent_flags); 486 msg->getU32Fast(_PREHASH_AgentData, _PREHASH_Flags, agent_flags);
465 487
466 if (agent_flags != (U32)gWorldMap->mCurrentMap) 488 if (agent_flags != (U32)LLWorldMap::getInstance()->mCurrentMap)
467 { 489 {
468 llwarns << "Invalid or out of date map image type returned!" << llendl; 490 llwarns << "Invalid or out of date map image type returned!" << llendl;
469 return; 491 return;
@@ -474,7 +496,7 @@ void LLWorldMap::processMapLayerReply(LLMessageSystem* msg, void**)
474 496
475 S32 num_blocks = msg->getNumberOfBlocksFast(_PREHASH_LayerData); 497 S32 num_blocks = msg->getNumberOfBlocksFast(_PREHASH_LayerData);
476 498
477 gWorldMap->mMapLayers[agent_flags].clear(); 499 LLWorldMap::getInstance()->mMapLayers[agent_flags].clear();
478 500
479 BOOL adjust = FALSE; 501 BOOL adjust = FALSE;
480 for (S32 block=0; block<num_blocks; ++block) 502 for (S32 block=0; block<num_blocks; ++block)
@@ -499,14 +521,14 @@ void LLWorldMap::processMapLayerReply(LLMessageSystem* msg, void**)
499 521
500 F32 x_meters = F32(left*REGION_WIDTH_UNITS); 522 F32 x_meters = F32(left*REGION_WIDTH_UNITS);
501 F32 y_meters = F32(bottom*REGION_WIDTH_UNITS); 523 F32 y_meters = F32(bottom*REGION_WIDTH_UNITS);
502 adjust = gWorldMap->extendAABB(U32(x_meters), U32(y_meters), 524 adjust = LLWorldMap::getInstance()->extendAABB(U32(x_meters), U32(y_meters),
503 U32(x_meters+REGION_WIDTH_UNITS*new_layer.LayerExtents.getWidth()), 525 U32(x_meters+REGION_WIDTH_UNITS*new_layer.LayerExtents.getWidth()),
504 U32(y_meters+REGION_WIDTH_UNITS*new_layer.LayerExtents.getHeight())) || adjust; 526 U32(y_meters+REGION_WIDTH_UNITS*new_layer.LayerExtents.getHeight())) || adjust;
505 527
506 gWorldMap->mMapLayers[agent_flags].push_back(new_layer); 528 LLWorldMap::getInstance()->mMapLayers[agent_flags].push_back(new_layer);
507 } 529 }
508 530
509 gWorldMap->mMapLoaded[agent_flags] = TRUE; 531 LLWorldMap::getInstance()->mMapLoaded[agent_flags] = TRUE;
510 if(adjust) gFloaterWorldMap->adjustZoomSliderBounds(); 532 if(adjust) gFloaterWorldMap->adjustZoomSliderBounds();
511} 533}
512 534
@@ -554,32 +576,21 @@ void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**)
554 if (access == 255) 576 if (access == 255)
555 { 577 {
556 // This region doesn't exist 578 // This region doesn't exist
557 if (gWorldMap->mIsTrackingUnknownLocation && 579 if (LLWorldMap::getInstance()->mIsTrackingUnknownLocation &&
558 gWorldMap->mUnknownLocation.mdV[0] >= x_meters && 580 LLWorldMap::getInstance()->mUnknownLocation.mdV[0] >= x_meters &&
559 gWorldMap->mUnknownLocation.mdV[0] < x_meters + 256 && 581 LLWorldMap::getInstance()->mUnknownLocation.mdV[0] < x_meters + 256 &&
560 gWorldMap->mUnknownLocation.mdV[1] >= y_meters && 582 LLWorldMap::getInstance()->mUnknownLocation.mdV[1] >= y_meters &&
561 gWorldMap->mUnknownLocation.mdV[1] < y_meters + 256) 583 LLWorldMap::getInstance()->mUnknownLocation.mdV[1] < y_meters + 256)
562 { 584 {
563 // We were tracking this location, but it doesn't exist 585 // We were tracking this location, but it doesn't exist
564 gWorldMap->mInvalidLocation = TRUE; 586 LLWorldMap::getInstance()->mInvalidLocation = TRUE;
565 } 587 }
566 588
567 found_null_sim = true; 589 found_null_sim = true;
568 } 590 }
569 else if(gWorldMap->mSLURLCallback != NULL)
570 {
571 // Server returns definitive capitalization, SLURL might
572 // not have that.
573 if (!stricmp(gWorldMap->mSLURLRegionName.c_str(), name))
574 {
575 gWorldMap->mSLURLCallback(handle, gWorldMap->mSLURL, image_id, gWorldMap->mSLURLTeleport);
576 gWorldMap->mSLURLCallback = NULL;
577 gWorldMap->mSLURLRegionName.clear();
578 }
579 }
580 else 591 else
581 { 592 {
582 adjust = gWorldMap->extendAABB(x_meters, 593 adjust = LLWorldMap::getInstance()->extendAABB(x_meters,
583 y_meters, 594 y_meters,
584 x_meters+REGION_WIDTH_UNITS, 595 x_meters+REGION_WIDTH_UNITS,
585 y_meters+REGION_WIDTH_UNITS) || adjust; 596 y_meters+REGION_WIDTH_UNITS) || adjust;
@@ -587,8 +598,8 @@ void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**)
587// llinfos << "Map sim " << name << " image layer " << agent_flags << " ID " << image_id.getString() << llendl; 598// llinfos << "Map sim " << name << " image layer " << agent_flags << " ID " << image_id.getString() << llendl;
588 599
589 LLSimInfo* siminfo = new LLSimInfo(); 600 LLSimInfo* siminfo = new LLSimInfo();
590 sim_info_map_t::iterator iter = gWorldMap->mSimInfoMap.find(handle); 601 sim_info_map_t::iterator iter = LLWorldMap::getInstance()->mSimInfoMap.find(handle);
591 if (iter != gWorldMap->mSimInfoMap.end()) 602 if (iter != LLWorldMap::getInstance()->mSimInfoMap.end())
592 { 603 {
593 LLSimInfo* oldinfo = iter->second; 604 LLSimInfo* oldinfo = iter->second;
594 for (S32 image=0; image<MAP_SIM_IMAGE_TYPES; ++image) 605 for (S32 image=0; image<MAP_SIM_IMAGE_TYPES; ++image)
@@ -597,7 +608,7 @@ void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**)
597 } 608 }
598 delete oldinfo; 609 delete oldinfo;
599 } 610 }
600 gWorldMap->mSimInfoMap[handle] = siminfo; 611 LLWorldMap::getInstance()->mSimInfoMap[handle] = siminfo;
601 612
602 siminfo->mHandle = handle; 613 siminfo->mHandle = handle;
603 siminfo->mName.assign( name ); 614 siminfo->mName.assign( name );
@@ -605,7 +616,7 @@ void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**)
605 siminfo->mRegionFlags = region_flags; 616 siminfo->mRegionFlags = region_flags;
606 siminfo->mWaterHeight = (F32) water_height; 617 siminfo->mWaterHeight = (F32) water_height;
607 siminfo->mMapImageID[agent_flags] = image_id; 618 siminfo->mMapImageID[agent_flags] = image_id;
608 siminfo->mCurrentImage = gImageList.getImage(siminfo->mMapImageID[gWorldMap->mCurrentMap], MIPMAP_TRUE, FALSE); 619 siminfo->mCurrentImage = gImageList.getImage(siminfo->mMapImageID[LLWorldMap::getInstance()->mCurrentMap], MIPMAP_TRUE, FALSE);
609 siminfo->mCurrentImage->bindTexture(0); 620 siminfo->mCurrentImage->bindTexture(0);
610 siminfo->mCurrentImage->setClamp(TRUE, TRUE); 621 siminfo->mCurrentImage->setClamp(TRUE, TRUE);
611 622
@@ -618,22 +629,22 @@ void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**)
618 siminfo->mOverlayImage = NULL; 629 siminfo->mOverlayImage = NULL;
619 } 630 }
620 631
621 if (gWorldMap->mIsTrackingUnknownLocation && 632 if (LLWorldMap::getInstance()->mIsTrackingUnknownLocation &&
622 gWorldMap->mUnknownLocation.mdV[0] >= x_meters && 633 LLWorldMap::getInstance()->mUnknownLocation.mdV[0] >= x_meters &&
623 gWorldMap->mUnknownLocation.mdV[0] < x_meters + 256 && 634 LLWorldMap::getInstance()->mUnknownLocation.mdV[0] < x_meters + 256 &&
624 gWorldMap->mUnknownLocation.mdV[1] >= y_meters && 635 LLWorldMap::getInstance()->mUnknownLocation.mdV[1] >= y_meters &&
625 gWorldMap->mUnknownLocation.mdV[1] < y_meters + 256) 636 LLWorldMap::getInstance()->mUnknownLocation.mdV[1] < y_meters + 256)
626 { 637 {
627 if (siminfo->mAccess == SIM_ACCESS_DOWN) 638 if (siminfo->mAccess == SIM_ACCESS_DOWN)
628 { 639 {
629 // We were tracking this location, but it doesn't exist 640 // We were tracking this location, but it doesn't exist
630 gWorldMap->mInvalidLocation = true; 641 LLWorldMap::getInstance()->mInvalidLocation = true;
631 } 642 }
632 else 643 else
633 { 644 {
634 // We were tracking this location, and it does exist 645 // We were tracking this location, and it does exist
635 bool is_tracking_dbl = gWorldMap->mIsTrackingDoubleClick == TRUE; 646 bool is_tracking_dbl = LLWorldMap::getInstance()->mIsTrackingDoubleClick == TRUE;
636 gFloaterWorldMap->trackLocation(gWorldMap->mUnknownLocation); 647 gFloaterWorldMap->trackLocation(LLWorldMap::getInstance()->mUnknownLocation);
637 if (is_tracking_dbl) 648 if (is_tracking_dbl)
638 { 649 {
639 LLVector3d pos_global = LLTracker::getTrackedPositionGlobal(); 650 LLVector3d pos_global = LLTracker::getTrackedPositionGlobal();
@@ -642,6 +653,22 @@ void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**)
642 } 653 }
643 } 654 }
644 } 655 }
656
657 if(LLWorldMap::getInstance()->mSLURLCallback != NULL)
658 {
659 // Server returns definitive capitalization, SLURL might
660 // not have that.
661 if (!stricmp(LLWorldMap::getInstance()->mSLURLRegionName.c_str(), name) || (LLWorldMap::getInstance()->mSLURLRegionHandle == handle))
662 {
663 url_callback_t callback = LLWorldMap::getInstance()->mSLURLCallback;
664
665 LLWorldMap::getInstance()->mSLURLCallback = NULL;
666 LLWorldMap::getInstance()->mSLURLRegionName.clear();
667 LLWorldMap::getInstance()->mSLURLRegionHandle = 0;
668
669 callback(handle, LLWorldMap::getInstance()->mSLURL, image_id, LLWorldMap::getInstance()->mSLURLTeleport);
670 }
671 }
645 } 672 }
646 673
647 if(adjust) gFloaterWorldMap->adjustZoomSliderBounds(); 674 if(adjust) gFloaterWorldMap->adjustZoomSliderBounds();
@@ -675,7 +702,7 @@ void LLWorldMap::processMapItemReply(LLMessageSystem* msg, void**)
675 Y /= REGION_WIDTH_UNITS; 702 Y /= REGION_WIDTH_UNITS;
676 703
677 LLItemInfo new_item(world_x, world_y, name, uuid, extra, extra2); 704 LLItemInfo new_item(world_x, world_y, name, uuid, extra, extra2);
678 LLSimInfo* siminfo = gWorldMap->simInfoFromHandle(new_item.mRegionHandle); 705 LLSimInfo* siminfo = LLWorldMap::getInstance()->simInfoFromHandle(new_item.mRegionHandle);
679 706
680 switch (type) 707 switch (type)
681 { 708 {
@@ -697,11 +724,11 @@ void LLWorldMap::processMapItemReply(LLMessageSystem* msg, void**)
697 // extra2 specifies whether this is an infohub or a telehub. 724 // extra2 specifies whether this is an infohub or a telehub.
698 if (extra2) 725 if (extra2)
699 { 726 {
700 gWorldMap->mInfohubs.push_back(new_item); 727 LLWorldMap::getInstance()->mInfohubs.push_back(new_item);
701 } 728 }
702 else 729 else
703 { 730 {
704 gWorldMap->mTelehubs.push_back(new_item); 731 LLWorldMap::getInstance()->mTelehubs.push_back(new_item);
705 } 732 }
706 733
707 break; 734 break;
@@ -728,31 +755,31 @@ void LLWorldMap::processMapItemReply(LLMessageSystem* msg, void**)
728 new_item.mPosGlobal.mdV[VZ] = (F64)extra2; 755 new_item.mPosGlobal.mdV[VZ] = (F64)extra2;
729 if (type == MAP_ITEM_PG_EVENT) 756 if (type == MAP_ITEM_PG_EVENT)
730 { 757 {
731 gWorldMap->mPGEvents.push_back(new_item); 758 LLWorldMap::getInstance()->mPGEvents.push_back(new_item);
732 } 759 }
733 else 760 else
734 { 761 {
735 gWorldMap->mMatureEvents.push_back(new_item); 762 LLWorldMap::getInstance()->mMatureEvents.push_back(new_item);
736 } 763 }
737 break; 764 break;
738 } 765 }
739 case MAP_ITEM_POPULAR: // popular 766 case MAP_ITEM_POPULAR: // popular
740 { 767 {
741 new_item.mPosGlobal.mdV[VZ] = (F64)extra2; 768 new_item.mPosGlobal.mdV[VZ] = (F64)extra2;
742 gWorldMap->mPopular.push_back(new_item); 769 LLWorldMap::getInstance()->mPopular.push_back(new_item);
743 break; 770 break;
744 } 771 }
745 case MAP_ITEM_LAND_FOR_SALE: // land for sale 772 case MAP_ITEM_LAND_FOR_SALE: // land for sale
746 { 773 {
747 new_item.mToolTip = llformat("%d sq. m. L$%d", new_item.mExtra, new_item.mExtra2); 774 new_item.mToolTip = llformat("%d sq. m. L$%d", new_item.mExtra, new_item.mExtra2);
748 gWorldMap->mLandForSale.push_back(new_item); 775 LLWorldMap::getInstance()->mLandForSale.push_back(new_item);
749 break; 776 break;
750 } 777 }
751 case MAP_ITEM_CLASSIFIED: // classifieds 778 case MAP_ITEM_CLASSIFIED: // classifieds
752 { 779 {
753 // HACK: Z-height is in Extra2 field. 780 // HACK: Z-height is in Extra2 field.
754 new_item.mPosGlobal.mdV[VZ] = (F64)extra2; 781 new_item.mPosGlobal.mdV[VZ] = (F64)extra2;
755 gWorldMap->mClassifieds.push_back(new_item); 782 LLWorldMap::getInstance()->mClassifieds.push_back(new_item);
756 break; 783 break;
757 } 784 }
758 case MAP_ITEM_AGENT_LOCATIONS: // agent locations 785 case MAP_ITEM_AGENT_LOCATIONS: // agent locations
@@ -764,7 +791,7 @@ void LLWorldMap::processMapItemReply(LLMessageSystem* msg, void**)
764 } 791 }
765// llinfos << "New Location " << new_item.mName << llendl; 792// llinfos << "New Location " << new_item.mName << llendl;
766 793
767 item_info_list_t& agentcounts = gWorldMap->mAgentLocationsMap[new_item.mRegionHandle]; 794 item_info_list_t& agentcounts = LLWorldMap::getInstance()->mAgentLocationsMap[new_item.mRegionHandle];
768 795
769 // Find the last item in the list with a different name and erase them 796 // Find the last item in the list with a different name and erase them
770 item_info_list_t::iterator lastiter; 797 item_info_list_t::iterator lastiter;
diff --git a/linden/indra/newview/llworldmap.h b/linden/indra/newview/llworldmap.h
index bc8d653..041dfc0 100644
--- a/linden/indra/newview/llworldmap.h
+++ b/linden/indra/newview/llworldmap.h
@@ -110,7 +110,7 @@ struct LLWorldMapLayer
110}; 110};
111 111
112 112
113class LLWorldMap 113class LLWorldMap : public LLSingleton<LLWorldMap>
114{ 114{
115public: 115public:
116 typedef void(*url_callback_t)(U64 region_handle, const std::string& url, const LLUUID& snapshot_id, bool teleport); 116 typedef void(*url_callback_t)(U64 region_handle, const std::string& url, const LLUUID& snapshot_id, bool teleport);
@@ -153,6 +153,10 @@ public:
153 url_callback_t callback, 153 url_callback_t callback,
154 const std::string& callback_url, 154 const std::string& callback_url,
155 bool teleport); 155 bool teleport);
156 void sendHandleRegionRequest(U64 region_handle,
157 url_callback_t callback,
158 const std::string& callback_url,
159 bool teleport);
156 void sendItemRequest(U32 type, U64 handle = 0); 160 void sendItemRequest(U32 type, U64 handle = 0);
157 161
158 static void processMapLayerReply(LLMessageSystem*, void**); 162 static void processMapLayerReply(LLMessageSystem*, void**);
@@ -217,11 +221,10 @@ private:
217 221
218 // search for named region for url processing 222 // search for named region for url processing
219 std::string mSLURLRegionName; 223 std::string mSLURLRegionName;
224 U64 mSLURLRegionHandle;
220 std::string mSLURL; 225 std::string mSLURL;
221 url_callback_t mSLURLCallback; 226 url_callback_t mSLURLCallback;
222 bool mSLURLTeleport; 227 bool mSLURLTeleport;
223}; 228};
224 229
225extern LLWorldMap* gWorldMap;
226
227#endif 230#endif
diff --git a/linden/indra/newview/llworldmapview.cpp b/linden/indra/newview/llworldmapview.cpp
index 2fac51a..ccf5903 100644
--- a/linden/indra/newview/llworldmapview.cpp
+++ b/linden/indra/newview/llworldmapview.cpp
@@ -59,7 +59,6 @@
59#include "llviewerparceloverlay.h" 59#include "llviewerparceloverlay.h"
60#include "llviewerregion.h" 60#include "llviewerregion.h"
61#include "llviewerwindow.h" 61#include "llviewerwindow.h"
62#include "llworld.h"
63#include "llworldmap.h" 62#include "llworldmap.h"
64#include "llappviewer.h" // Only for constants! 63#include "llappviewer.h" // Only for constants!
65 64
@@ -70,24 +69,24 @@ const S32 SCROLL_HINT_WIDTH = 65;
70const F32 BIG_DOT_RADIUS = 5.f; 69const F32 BIG_DOT_RADIUS = 5.f;
71BOOL LLWorldMapView::sHandledLastClick = FALSE; 70BOOL LLWorldMapView::sHandledLastClick = FALSE;
72 71
73LLPointer<LLViewerImage> LLWorldMapView::sAvatarYouSmallImage = NULL; 72LLUIImagePtr LLWorldMapView::sAvatarYouSmallImage = NULL;
74LLPointer<LLViewerImage> LLWorldMapView::sAvatarSmallImage = NULL; 73LLUIImagePtr LLWorldMapView::sAvatarSmallImage = NULL;
75LLPointer<LLViewerImage> LLWorldMapView::sAvatarLargeImage = NULL; 74LLUIImagePtr LLWorldMapView::sAvatarLargeImage = NULL;
76LLPointer<LLViewerImage> LLWorldMapView::sAvatarAboveImage = NULL; 75LLUIImagePtr LLWorldMapView::sAvatarAboveImage = NULL;
77LLPointer<LLViewerImage> LLWorldMapView::sAvatarBelowImage = NULL; 76LLUIImagePtr LLWorldMapView::sAvatarBelowImage = NULL;
78 77
79LLPointer<LLViewerImage> LLWorldMapView::sTelehubImage = NULL; 78LLUIImagePtr LLWorldMapView::sTelehubImage = NULL;
80LLPointer<LLViewerImage> LLWorldMapView::sInfohubImage = NULL; 79LLUIImagePtr LLWorldMapView::sInfohubImage = NULL;
81LLPointer<LLViewerImage> LLWorldMapView::sHomeImage = NULL; 80LLUIImagePtr LLWorldMapView::sHomeImage = NULL;
82LLPointer<LLViewerImage> LLWorldMapView::sEventImage = NULL; 81LLUIImagePtr LLWorldMapView::sEventImage = NULL;
83LLPointer<LLViewerImage> LLWorldMapView::sEventMatureImage = NULL; 82LLUIImagePtr LLWorldMapView::sEventMatureImage = NULL;
84 83
85LLPointer<LLViewerImage> LLWorldMapView::sTrackCircleImage = NULL; 84LLUIImagePtr LLWorldMapView::sTrackCircleImage = NULL;
86LLPointer<LLViewerImage> LLWorldMapView::sTrackArrowImage = NULL; 85LLUIImagePtr LLWorldMapView::sTrackArrowImage = NULL;
87 86
88LLPointer<LLViewerImage> LLWorldMapView::sClassifiedsImage = NULL; 87LLUIImagePtr LLWorldMapView::sClassifiedsImage = NULL;
89LLPointer<LLViewerImage> LLWorldMapView::sPopularImage = NULL; 88LLUIImagePtr LLWorldMapView::sPopularImage = NULL;
90LLPointer<LLViewerImage> LLWorldMapView::sForSaleImage = NULL; 89LLUIImagePtr LLWorldMapView::sForSaleImage = NULL;
91 90
92F32 LLWorldMapView::sThresholdA = 48.f; 91F32 LLWorldMapView::sThresholdA = 48.f;
93F32 LLWorldMapView::sThresholdB = 96.f; 92F32 LLWorldMapView::sThresholdB = 96.f;
@@ -114,53 +113,21 @@ void LLWorldMapView::initClass()
114{ 113{
115 LLUUID image_id; 114 LLUUID image_id;
116 115
117 image_id.set( gViewerArt.getString("map_avatar_you_8.tga") ); 116 sAvatarYouSmallImage = LLUI::getUIImage("map_avatar_you_8.tga");
118 sAvatarYouSmallImage = gImageList.getImage( image_id, MIPMAP_FALSE, TRUE); 117 sAvatarSmallImage = LLUI::getUIImage("map_avatar_8.tga");
119 118 sAvatarLargeImage = LLUI::getUIImage("map_avatar_16.tga");
120 image_id.set( gViewerArt.getString("map_avatar_8.tga") ); 119 sAvatarAboveImage = LLUI::getUIImage("map_avatar_above_8.tga");
121 sAvatarSmallImage = gImageList.getImage( image_id, MIPMAP_FALSE, TRUE); 120 sAvatarBelowImage = LLUI::getUIImage("map_avatar_below_8.tga");
122 121 sHomeImage = LLUI::getUIImage("map_home.tga");
123 image_id.set( gViewerArt.getString("map_avatar_16.tga") ); 122 sTelehubImage = LLUI::getUIImage("map_telehub.tga");
124 sAvatarLargeImage = gImageList.getImage( image_id, MIPMAP_FALSE, TRUE); 123 sInfohubImage = LLUI::getUIImage("map_infohub.tga");
125 124 sEventImage = LLUI::getUIImage("map_event.tga");
126 image_id.set( gViewerArt.getString("map_avatar_above_8.tga") ); 125 sEventMatureImage = LLUI::getUIImage("map_event_mature.tga");
127 sAvatarAboveImage = gImageList.getImage( image_id, MIPMAP_FALSE, TRUE); 126 sTrackCircleImage = LLUI::getUIImage("map_track_16.tga");
128 127 sTrackArrowImage = LLUI::getUIImage("direction_arrow.tga");
129 image_id.set( gViewerArt.getString("map_avatar_below_8.tga") ); 128 sClassifiedsImage = LLUI::getUIImage("icon_top_pick.tga");
130 sAvatarBelowImage = gImageList.getImage( image_id, MIPMAP_FALSE, TRUE); 129 sPopularImage = LLUI::getUIImage("icon_popular.tga");
131 130 sForSaleImage = LLUI::getUIImage("icon_for_sale.tga");
132 image_id.set( gViewerArt.getString("map_home.tga") );
133 sHomeImage = gImageList.getImage(image_id, MIPMAP_FALSE, TRUE);
134
135 image_id.set( gViewerArt.getString("map_telehub.tga") );
136 sTelehubImage = gImageList.getImage(image_id, MIPMAP_FALSE, TRUE);
137
138 image_id.set( gViewerArt.getString("map_infohub.tga") );
139 sInfohubImage = gImageList.getImage(image_id, MIPMAP_FALSE, TRUE);
140
141 image_id.set( gViewerArt.getString("map_event.tga") );
142 sEventImage = gImageList.getImage(image_id, MIPMAP_FALSE, TRUE);
143
144 image_id.set( gViewerArt.getString("map_event_mature.tga") );
145 sEventMatureImage = gImageList.getImage(image_id, MIPMAP_FALSE, TRUE);
146
147 image_id.set( gViewerArt.getString("map_track_16.tga") );
148 sTrackCircleImage = gImageList.getImage(image_id, MIPMAP_FALSE, TRUE);
149
150 image_id.set( gViewerArt.getString("direction_arrow.tga") );
151 sTrackArrowImage = gImageList.getImage(image_id, MIPMAP_FALSE, TRUE);
152 // Make sure tracker arrow doesn't wrap
153 sTrackArrowImage->bindTexture(0);
154 sTrackArrowImage->setClamp(TRUE, TRUE);
155
156 image_id.set( gViewerArt.getString("icon_top_pick.tga") );
157 sClassifiedsImage = gImageList.getImage(image_id, MIPMAP_FALSE, TRUE);
158
159 image_id.set( gViewerArt.getString("icon_popular.tga") );
160 sPopularImage = gImageList.getImage(image_id, MIPMAP_FALSE, TRUE);
161
162 image_id.set( gViewerArt.getString("icon_for_sale.tga") );
163 sForSaleImage = gImageList.getImage(image_id, MIPMAP_FALSE, TRUE);
164} 131}
165 132
166// static 133// static
@@ -312,11 +279,6 @@ BOOL is_agent_in_region(LLViewerRegion* region, LLSimInfo* info)
312 279
313void LLWorldMapView::draw() 280void LLWorldMapView::draw()
314{ 281{
315 if (!getVisible() || !gWorldPointer)
316 {
317 return;
318 }
319
320 LLTextureView::clearDebugImages(); 282 LLTextureView::clearDebugImages();
321 283
322 F64 current_time = LLTimer::getElapsedSeconds(); 284 F64 current_time = LLTimer::getElapsedSeconds();
@@ -356,13 +318,13 @@ void LLWorldMapView::draw()
356 F32 layer_alpha = 1.f; 318 F32 layer_alpha = 1.f;
357 319
358 // Draw one image per layer 320 // Draw one image per layer
359 for (U32 layer_idx=0; layer_idx<gWorldMap->mMapLayers[gWorldMap->mCurrentMap].size(); ++layer_idx) 321 for (U32 layer_idx=0; layer_idx<LLWorldMap::getInstance()->mMapLayers[LLWorldMap::getInstance()->mCurrentMap].size(); ++layer_idx)
360 { 322 {
361 if (!gWorldMap->mMapLayers[gWorldMap->mCurrentMap][layer_idx].LayerDefined) 323 if (!LLWorldMap::getInstance()->mMapLayers[LLWorldMap::getInstance()->mCurrentMap][layer_idx].LayerDefined)
362 { 324 {
363 continue; 325 continue;
364 } 326 }
365 LLWorldMapLayer *layer = &gWorldMap->mMapLayers[gWorldMap->mCurrentMap][layer_idx]; 327 LLWorldMapLayer *layer = &LLWorldMap::getInstance()->mMapLayers[LLWorldMap::getInstance()->mCurrentMap][layer_idx];
366 LLViewerImage *current_image = layer->LayerImage; 328 LLViewerImage *current_image = layer->LayerImage;
367#if 1 || LL_RELEASE_FOR_DOWNLOAD 329#if 1 || LL_RELEASE_FOR_DOWNLOAD
368 if (current_image->isMissingAsset()) 330 if (current_image->isMissingAsset())
@@ -400,7 +362,7 @@ void LLWorldMapView::draw()
400 } 362 }
401 363
402 current_image->setBoostLevel(LLViewerImage::BOOST_MAP_LAYER); 364 current_image->setBoostLevel(LLViewerImage::BOOST_MAP_LAYER);
403 current_image->setKnownDrawSize(llround(pix_width), llround(pix_height)); 365 current_image->setKnownDrawSize(llround(pix_width * LLUI::sGLScaleFactor.mV[VX]), llround(pix_height * LLUI::sGLScaleFactor.mV[VY]));
404 366
405 if (!current_image->getHasGLTexture()) 367 if (!current_image->getHasGLTexture())
406 { 368 {
@@ -455,15 +417,15 @@ void LLWorldMapView::draw()
455 F32 sim_alpha = 1.f; 417 F32 sim_alpha = 1.f;
456 418
457 // Draw one image per region, centered on the camera position. 419 // Draw one image per region, centered on the camera position.
458 for (LLWorldMap::sim_info_map_t::iterator it = gWorldMap->mSimInfoMap.begin(); 420 for (LLWorldMap::sim_info_map_t::iterator it = LLWorldMap::getInstance()->mSimInfoMap.begin();
459 it != gWorldMap->mSimInfoMap.end(); ++it) 421 it != LLWorldMap::getInstance()->mSimInfoMap.end(); ++it)
460 { 422 {
461 U64 handle = (*it).first; 423 U64 handle = (*it).first;
462 LLSimInfo* info = (*it).second; 424 LLSimInfo* info = (*it).second;
463 425
464 if (info->mCurrentImage.isNull()) 426 if (info->mCurrentImage.isNull())
465 { 427 {
466 info->mCurrentImage = gImageList.getImage(info->mMapImageID[gWorldMap->mCurrentMap], MIPMAP_TRUE, FALSE); 428 info->mCurrentImage = gImageList.getImage(info->mMapImageID[LLWorldMap::getInstance()->mCurrentMap], MIPMAP_TRUE, FALSE);
467 } 429 }
468 if (info->mOverlayImage.isNull() && info->mMapImageID[2].notNull()) 430 if (info->mOverlayImage.isNull() && info->mMapImageID[2].notNull())
469 { 431 {
@@ -544,7 +506,7 @@ void LLWorldMapView::draw()
544 // See if the agents need updating 506 // See if the agents need updating
545 if (current_time - info->mAgentsUpdateTime > AGENTS_UPDATE_TIME) 507 if (current_time - info->mAgentsUpdateTime > AGENTS_UPDATE_TIME)
546 { 508 {
547 gWorldMap->sendItemRequest(MAP_ITEM_AGENT_LOCATIONS, info->mHandle); 509 LLWorldMap::getInstance()->sendItemRequest(MAP_ITEM_AGENT_LOCATIONS, info->mHandle);
548 info->mAgentsUpdateTime = current_time; 510 info->mAgentsUpdateTime = current_time;
549 } 511 }
550 512
@@ -555,12 +517,12 @@ void LLWorldMapView::draw()
555 517
556 S32 draw_size = llround(gMapScale); 518 S32 draw_size = llround(gMapScale);
557 simimage->setBoostLevel(LLViewerImage::BOOST_MAP); 519 simimage->setBoostLevel(LLViewerImage::BOOST_MAP);
558 simimage->setKnownDrawSize(draw_size, draw_size); 520 simimage->setKnownDrawSize(llround(draw_size * LLUI::sGLScaleFactor.mV[VX]), llround(draw_size * LLUI::sGLScaleFactor.mV[VY]));
559 521
560 if (overlayimage) 522 if (overlayimage)
561 { 523 {
562 overlayimage->setBoostLevel(LLViewerImage::BOOST_MAP); 524 overlayimage->setBoostLevel(LLViewerImage::BOOST_MAP);
563 overlayimage->setKnownDrawSize(draw_size, draw_size); 525 overlayimage->setKnownDrawSize(llround(draw_size * LLUI::sGLScaleFactor.mV[VX]), llround(draw_size * LLUI::sGLScaleFactor.mV[VY]));
564 } 526 }
565 527
566// LLTextureView::addDebugImage(simimage); 528// LLTextureView::addDebugImage(simimage);
@@ -717,13 +679,13 @@ void LLWorldMapView::draw()
717 // Infohubs 679 // Infohubs
718 if (gSavedSettings.getBOOL("MapShowInfohubs")) //(gMapScale >= sThresholdB) 680 if (gSavedSettings.getBOOL("MapShowInfohubs")) //(gMapScale >= sThresholdB)
719 { 681 {
720 drawGenericItems(gWorldMap->mInfohubs, sInfohubImage); 682 drawGenericItems(LLWorldMap::getInstance()->mInfohubs, sInfohubImage);
721 } 683 }
722 684
723 // Telehubs 685 // Telehubs
724 if (gSavedSettings.getBOOL("MapShowTelehubs")) //(gMapScale >= sThresholdB) 686 if (gSavedSettings.getBOOL("MapShowTelehubs")) //(gMapScale >= sThresholdB)
725 { 687 {
726 drawGenericItems(gWorldMap->mTelehubs, sTelehubImage); 688 drawGenericItems(LLWorldMap::getInstance()->mTelehubs, sTelehubImage);
727 } 689 }
728 690
729 // Home Sweet Home 691 // Home Sweet Home
@@ -735,17 +697,17 @@ void LLWorldMapView::draw()
735 697
736 if (gSavedSettings.getBOOL("MapShowLandForSale")) 698 if (gSavedSettings.getBOOL("MapShowLandForSale"))
737 { 699 {
738 drawGenericItems(gWorldMap->mLandForSale, sForSaleImage); 700 drawGenericItems(LLWorldMap::getInstance()->mLandForSale, sForSaleImage);
739 } 701 }
740 702
741 if (gSavedSettings.getBOOL("MapShowClassifieds")) 703 if (gSavedSettings.getBOOL("MapShowClassifieds"))
742 { 704 {
743 drawGenericItems(gWorldMap->mClassifieds, sClassifiedsImage); 705 drawGenericItems(LLWorldMap::getInstance()->mClassifieds, sClassifiedsImage);
744 } 706 }
745 707
746 if (gSavedSettings.getBOOL("MapShowPopular")) 708 if (gSavedSettings.getBOOL("MapShowPopular"))
747 { 709 {
748 drawGenericItems(gWorldMap->mPopular, sPopularImage); 710 drawGenericItems(LLWorldMap::getInstance()->mPopular, sPopularImage);
749 } 711 }
750 712
751 if (gSavedSettings.getBOOL("MapShowEvents")) 713 if (gSavedSettings.getBOOL("MapShowEvents"))
@@ -795,20 +757,20 @@ void LLWorldMapView::draw()
795 drawTracking( pos_global, gTrackColor, TRUE, LLTracker::getLabel(), LLTracker::getToolTip() ); 757 drawTracking( pos_global, gTrackColor, TRUE, LLTracker::getLabel(), LLTracker::getToolTip() );
796 } 758 }
797 } 759 }
798 else if (gWorldMap->mIsTrackingUnknownLocation) 760 else if (LLWorldMap::getInstance()->mIsTrackingUnknownLocation)
799 { 761 {
800 if (gWorldMap->mInvalidLocation) 762 if (LLWorldMap::getInstance()->mInvalidLocation)
801 { 763 {
802 // We know this location to be invalid 764 // We know this location to be invalid
803 LLColor4 loading_color(0.0, 0.5, 1.0, 1.0); 765 LLColor4 loading_color(0.0, 0.5, 1.0, 1.0);
804 drawTracking( gWorldMap->mUnknownLocation, loading_color, TRUE, "Invalid Location", ""); 766 drawTracking( LLWorldMap::getInstance()->mUnknownLocation, loading_color, TRUE, "Invalid Location", "");
805 } 767 }
806 else 768 else
807 { 769 {
808 double value = fmod(current_time, 2); 770 double value = fmod(current_time, 2);
809 value = 0.5 + 0.5*cos(value * 3.14159f); 771 value = 0.5 + 0.5*cos(value * 3.14159f);
810 LLColor4 loading_color(0.0, F32(value/2), F32(value), 1.0); 772 LLColor4 loading_color(0.0, F32(value/2), F32(value), 1.0);
811 drawTracking( gWorldMap->mUnknownLocation, loading_color, TRUE, "Loading...", ""); 773 drawTracking( LLWorldMap::getInstance()->mUnknownLocation, loading_color, TRUE, "Loading...", "");
812 } 774 }
813 } 775 }
814#endif 776#endif
@@ -828,21 +790,21 @@ void LLWorldMapView::draw()
828void LLWorldMapView::setVisible(BOOL visible) 790void LLWorldMapView::setVisible(BOOL visible)
829{ 791{
830 LLPanel::setVisible(visible); 792 LLPanel::setVisible(visible);
831 if (!visible && gWorldMap) 793 if (!visible)
832 { 794 {
833 for (S32 map = 0; map < MAP_SIM_IMAGE_TYPES; map++) 795 for (S32 map = 0; map < MAP_SIM_IMAGE_TYPES; map++)
834 { 796 {
835 for (U32 layer_idx=0; layer_idx<gWorldMap->mMapLayers[map].size(); ++layer_idx) 797 for (U32 layer_idx=0; layer_idx<LLWorldMap::getInstance()->mMapLayers[map].size(); ++layer_idx)
836 { 798 {
837 if (gWorldMap->mMapLayers[map][layer_idx].LayerDefined) 799 if (LLWorldMap::getInstance()->mMapLayers[map][layer_idx].LayerDefined)
838 { 800 {
839 LLWorldMapLayer *layer = &gWorldMap->mMapLayers[map][layer_idx]; 801 LLWorldMapLayer *layer = &LLWorldMap::getInstance()->mMapLayers[map][layer_idx];
840 layer->LayerImage->setBoostLevel(0); 802 layer->LayerImage->setBoostLevel(0);
841 } 803 }
842 } 804 }
843 } 805 }
844 for (LLWorldMap::sim_info_map_t::iterator it = gWorldMap->mSimInfoMap.begin(); 806 for (LLWorldMap::sim_info_map_t::iterator it = LLWorldMap::getInstance()->mSimInfoMap.begin();
845 it != gWorldMap->mSimInfoMap.end(); ++it) 807 it != LLWorldMap::getInstance()->mSimInfoMap.end(); ++it)
846 { 808 {
847 LLSimInfo* info = (*it).second; 809 LLSimInfo* info = (*it).second;
848 if (info->mCurrentImage.notNull()) 810 if (info->mCurrentImage.notNull())
@@ -857,7 +819,7 @@ void LLWorldMapView::setVisible(BOOL visible)
857 } 819 }
858} 820}
859 821
860void LLWorldMapView::drawGenericItems(const LLWorldMap::item_info_list_t& items, LLPointer<LLViewerImage> image) 822void LLWorldMapView::drawGenericItems(const LLWorldMap::item_info_list_t& items, LLUIImagePtr image)
861{ 823{
862 LLWorldMap::item_info_list_t::const_iterator e; 824 LLWorldMap::item_info_list_t::const_iterator e;
863 for (e = items.begin(); e != items.end(); ++e) 825 for (e = items.begin(); e != items.end(); ++e)
@@ -866,30 +828,28 @@ void LLWorldMapView::drawGenericItems(const LLWorldMap::item_info_list_t& items,
866 } 828 }
867} 829}
868 830
869void LLWorldMapView::drawGenericItem(const LLItemInfo& item, LLPointer<LLViewerImage> image) 831void LLWorldMapView::drawGenericItem(const LLItemInfo& item, LLUIImagePtr image)
870{ 832{
871 drawImage(item.mPosGlobal, image); 833 drawImage(item.mPosGlobal, image);
872} 834}
873 835
874 836
875void LLWorldMapView::drawImage(const LLVector3d& global_pos, LLPointer<LLViewerImage> image, const LLColor4& color) 837void LLWorldMapView::drawImage(const LLVector3d& global_pos, LLUIImagePtr image, const LLColor4& color)
876{ 838{
877 LLVector3 pos_map = globalPosToView( global_pos ); 839 LLVector3 pos_map = globalPosToView( global_pos );
878 gl_draw_image(llround(pos_map.mV[VX] - image->getWidth() /2.f), 840 image->draw(llround(pos_map.mV[VX] - image->getWidth() /2.f),
879 llround(pos_map.mV[VY] - image->getHeight()/2.f), 841 llround(pos_map.mV[VY] - image->getHeight()/2.f),
880 image, 842 color);
881 color);
882} 843}
883 844
884void LLWorldMapView::drawImageStack(const LLVector3d& global_pos, LLPointer<LLViewerImage> image, U32 count, F32 offset, const LLColor4& color) 845void LLWorldMapView::drawImageStack(const LLVector3d& global_pos, LLUIImagePtr image, U32 count, F32 offset, const LLColor4& color)
885{ 846{
886 LLVector3 pos_map = globalPosToView( global_pos ); 847 LLVector3 pos_map = globalPosToView( global_pos );
887 for(U32 i=0; i<count; i++) 848 for(U32 i=0; i<count; i++)
888 { 849 {
889 gl_draw_image(llround(pos_map.mV[VX] - image->getWidth() /2.f), 850 image->draw(llround(pos_map.mV[VX] - image->getWidth() /2.f),
890 llround(pos_map.mV[VY] - image->getHeight()/2.f + i*offset), 851 llround(pos_map.mV[VY] - image->getHeight()/2.f + i*offset),
891 image, 852 color);
892 color);
893 } 853 }
894} 854}
895 855
@@ -901,13 +861,13 @@ void LLWorldMapView::drawAgents()
901 for (handle_list_t::iterator iter = mVisibleRegions.begin(); iter != mVisibleRegions.end(); ++iter) 861 for (handle_list_t::iterator iter = mVisibleRegions.begin(); iter != mVisibleRegions.end(); ++iter)
902 { 862 {
903 U64 handle = *iter; 863 U64 handle = *iter;
904 LLSimInfo* siminfo = gWorldMap->simInfoFromHandle(handle); 864 LLSimInfo* siminfo = LLWorldMap::getInstance()->simInfoFromHandle(handle);
905 if (siminfo && (siminfo->mAccess == SIM_ACCESS_DOWN)) 865 if (siminfo && (siminfo->mAccess == SIM_ACCESS_DOWN))
906 { 866 {
907 continue; 867 continue;
908 } 868 }
909 LLWorldMap::agent_list_map_t::iterator counts_iter = gWorldMap->mAgentLocationsMap.find(handle); 869 LLWorldMap::agent_list_map_t::iterator counts_iter = LLWorldMap::getInstance()->mAgentLocationsMap.find(handle);
910 if (siminfo && siminfo->mShowAgentLocations && counts_iter != gWorldMap->mAgentLocationsMap.end()) 870 if (siminfo && siminfo->mShowAgentLocations && counts_iter != LLWorldMap::getInstance()->mAgentLocationsMap.end())
911 { 871 {
912 // Show Individual agents (or little stacks where real agents are) 872 // Show Individual agents (or little stacks where real agents are)
913 LLWorldMap::item_info_list_t& agentcounts = counts_iter->second; 873 LLWorldMap::item_info_list_t& agentcounts = counts_iter->second;
@@ -922,12 +882,12 @@ void LLWorldMapView::drawAgents()
922 //LLColor4 color = (agent_count == 1 && is_agent_friend(info.mID)) ? gFriendMapColor : gAvatarMapColor; 882 //LLColor4 color = (agent_count == 1 && is_agent_friend(info.mID)) ? gFriendMapColor : gAvatarMapColor;
923 drawImageStack(info.mPosGlobal, sAvatarSmallImage, agent_count, 3.f, gAvatarMapColor); 883 drawImageStack(info.mPosGlobal, sAvatarSmallImage, agent_count, 3.f, gAvatarMapColor);
924 } 884 }
925 gWorldMap->mNumAgents[handle] = sim_agent_count; // override mNumAgents for this sim 885 LLWorldMap::getInstance()->mNumAgents[handle] = sim_agent_count; // override mNumAgents for this sim
926 } 886 }
927 else 887 else
928 { 888 {
929 // Show agent 'stack' at center of sim 889 // Show agent 'stack' at center of sim
930 S32 num_agents = gWorldMap->mNumAgents[handle]; 890 S32 num_agents = LLWorldMap::getInstance()->mNumAgents[handle];
931 if (num_agents > 0) 891 if (num_agents > 0)
932 { 892 {
933 LLVector3d region_center = from_region_handle(handle); 893 LLVector3d region_center = from_region_handle(handle);
@@ -948,7 +908,7 @@ void LLWorldMapView::drawEvents()
948 908
949 // First the non-selected events 909 // First the non-selected events
950 LLWorldMap::item_info_list_t::const_iterator e; 910 LLWorldMap::item_info_list_t::const_iterator e;
951 for (e = gWorldMap->mPGEvents.begin(); e != gWorldMap->mPGEvents.end(); ++e) 911 for (e = LLWorldMap::getInstance()->mPGEvents.begin(); e != LLWorldMap::getInstance()->mPGEvents.end(); ++e)
952 { 912 {
953 if (!e->mSelected) 913 if (!e->mSelected)
954 { 914 {
@@ -957,7 +917,7 @@ void LLWorldMapView::drawEvents()
957 } 917 }
958 if (show_mature) 918 if (show_mature)
959 { 919 {
960 for (e = gWorldMap->mMatureEvents.begin(); e != gWorldMap->mMatureEvents.end(); ++e) 920 for (e = LLWorldMap::getInstance()->mMatureEvents.begin(); e != LLWorldMap::getInstance()->mMatureEvents.end(); ++e)
961 { 921 {
962 if (!e->mSelected) 922 if (!e->mSelected)
963 { 923 {
@@ -967,7 +927,7 @@ void LLWorldMapView::drawEvents()
967 } 927 }
968 928
969 // Then the selected events 929 // Then the selected events
970 for (e = gWorldMap->mPGEvents.begin(); e != gWorldMap->mPGEvents.end(); ++e) 930 for (e = LLWorldMap::getInstance()->mPGEvents.begin(); e != LLWorldMap::getInstance()->mPGEvents.end(); ++e)
971 { 931 {
972 if (e->mSelected) 932 if (e->mSelected)
973 { 933 {
@@ -976,7 +936,7 @@ void LLWorldMapView::drawEvents()
976 } 936 }
977 if (show_mature) 937 if (show_mature)
978 { 938 {
979 for (e = gWorldMap->mMatureEvents.begin(); e != gWorldMap->mMatureEvents.end(); ++e) 939 for (e = LLWorldMap::getInstance()->mMatureEvents.begin(); e != LLWorldMap::getInstance()->mMatureEvents.end(); ++e)
980 { 940 {
981 if (e->mSelected) 941 if (e->mSelected)
982 { 942 {
@@ -992,8 +952,8 @@ void LLWorldMapView::drawFrustum()
992 // Draw frustum 952 // Draw frustum
993 F32 meters_to_pixels = gMapScale/ REGION_WIDTH_METERS; 953 F32 meters_to_pixels = gMapScale/ REGION_WIDTH_METERS;
994 954
995 F32 horiz_fov = gCamera->getView() * gCamera->getAspect(); 955 F32 horiz_fov = LLViewerCamera::getInstance()->getView() * LLViewerCamera::getInstance()->getAspect();
996 F32 far_clip_meters = gCamera->getFar(); 956 F32 far_clip_meters = LLViewerCamera::getInstance()->getFar();
997 F32 far_clip_pixels = far_clip_meters * meters_to_pixels; 957 F32 far_clip_pixels = far_clip_meters * meters_to_pixels;
998 958
999 F32 half_width_meters = far_clip_meters * tan( horiz_fov / 2 ); 959 F32 half_width_meters = far_clip_meters * tan( horiz_fov / 2 );
@@ -1007,7 +967,7 @@ void LLWorldMapView::drawFrustum()
1007 // Since we don't rotate the map, we have to rotate the frustum. 967 // Since we don't rotate the map, we have to rotate the frustum.
1008 gGL.pushMatrix(); 968 gGL.pushMatrix();
1009 gGL.translatef( ctr_x, ctr_y, 0 ); 969 gGL.translatef( ctr_x, ctr_y, 0 );
1010 glRotatef( atan2( gCamera->getAtAxis().mV[VX], gCamera->getAtAxis().mV[VY] ) * RAD_TO_DEG, 0.f, 0.f, -1.f); 970 glRotatef( atan2( LLViewerCamera::getInstance()->getAtAxis().mV[VX], LLViewerCamera::getInstance()->getAtAxis().mV[VY] ) * RAD_TO_DEG, 0.f, 0.f, -1.f);
1011 971
1012 // Draw triangle with more alpha in far pixels to make it 972 // Draw triangle with more alpha in far pixels to make it
1013 // fade out in distance. 973 // fade out in distance.
@@ -1138,7 +1098,7 @@ BOOL LLWorldMapView::handleToolTip( S32 x, S32 y, LLString& msg, LLRect* sticky_
1138{ 1098{
1139 LLVector3d pos_global = viewPosToGlobal(x, y); 1099 LLVector3d pos_global = viewPosToGlobal(x, y);
1140 1100
1141 LLSimInfo* info = gWorldMap->simInfoFromPosGlobal(pos_global); 1101 LLSimInfo* info = LLWorldMap::getInstance()->simInfoFromPosGlobal(pos_global);
1142 if (info) 1102 if (info)
1143 { 1103 {
1144 LLViewerRegion *region = gAgent.getRegion(); 1104 LLViewerRegion *region = gAgent.getRegion();
@@ -1150,7 +1110,7 @@ BOOL LLWorldMapView::handleToolTip( S32 x, S32 y, LLString& msg, LLRect* sticky_
1150 1110
1151 if (info->mAccess != SIM_ACCESS_DOWN) 1111 if (info->mAccess != SIM_ACCESS_DOWN)
1152 { 1112 {
1153 S32 agent_count = gWorldMap->mNumAgents[info->mHandle]; 1113 S32 agent_count = LLWorldMap::getInstance()->mNumAgents[info->mHandle];
1154 if (region && region->getHandle() == info->mHandle) 1114 if (region && region->getHandle() == info->mHandle)
1155 { 1115 {
1156 ++agent_count; // Bump by 1 if we're here 1116 ++agent_count; // Bump by 1 if we're here
@@ -1199,15 +1159,14 @@ static void drawDot(F32 x_pixels, F32 y_pixels,
1199 const LLColor4& color, 1159 const LLColor4& color,
1200 F32 relative_z, 1160 F32 relative_z,
1201 F32 dot_radius, 1161 F32 dot_radius,
1202 LLPointer<LLViewerImage> dot_image) 1162 LLUIImagePtr dot_image)
1203{ 1163{
1204 const F32 HEIGHT_THRESHOLD = 7.f; 1164 const F32 HEIGHT_THRESHOLD = 7.f;
1205 1165
1206 if(-HEIGHT_THRESHOLD <= relative_z && relative_z <= HEIGHT_THRESHOLD) 1166 if(-HEIGHT_THRESHOLD <= relative_z && relative_z <= HEIGHT_THRESHOLD)
1207 { 1167 {
1208 gl_draw_image( llround(x_pixels) - dot_image->getWidth()/2, 1168 dot_image->draw(llround(x_pixels) - dot_image->getWidth()/2,
1209 llround(y_pixels) - dot_image->getHeight()/2, 1169 llround(y_pixels) - dot_image->getHeight()/2,
1210 dot_image,
1211 color); 1170 color);
1212 } 1171 }
1213 else 1172 else
@@ -1241,7 +1200,7 @@ void LLWorldMapView::drawAvatar(F32 x_pixels,
1241 F32 dot_radius) 1200 F32 dot_radius)
1242{ 1201{
1243 const F32 HEIGHT_THRESHOLD = 7.f; 1202 const F32 HEIGHT_THRESHOLD = 7.f;
1244 LLViewerImage* dot_image = sAvatarSmallImage; 1203 LLUIImagePtr dot_image = sAvatarSmallImage;
1245 if(relative_z < -HEIGHT_THRESHOLD) 1204 if(relative_z < -HEIGHT_THRESHOLD)
1246 { 1205 {
1247 dot_image = sAvatarBelowImage; 1206 dot_image = sAvatarBelowImage;
@@ -1250,10 +1209,10 @@ void LLWorldMapView::drawAvatar(F32 x_pixels,
1250 { 1209 {
1251 dot_image = sAvatarAboveImage; 1210 dot_image = sAvatarAboveImage;
1252 } 1211 }
1253 gl_draw_image( 1212 dot_image->draw(
1254 llround(x_pixels) - dot_image->getWidth()/2, 1213 llround(x_pixels) - dot_image->getWidth()/2,
1255 llround(y_pixels) - dot_image->getHeight()/2, 1214 llround(y_pixels) - dot_image->getHeight()/2,
1256 dot_image, color); 1215 color);
1257} 1216}
1258 1217
1259// Pass relative Z of 0 to draw at same level. 1218// Pass relative Z of 0 to draw at same level.
@@ -1447,7 +1406,7 @@ void LLWorldMapView::drawTrackingArrow(const LLRect& rect, S32 x, S32 y,
1447 sTrackingArrowY, 1406 sTrackingArrowY,
1448 arrow_size, arrow_size, 1407 arrow_size, arrow_size,
1449 RAD_TO_DEG * angle, 1408 RAD_TO_DEG * angle,
1450 sTrackArrowImage, 1409 sTrackArrowImage->getImage(),
1451 color); 1410 color);
1452} 1411}
1453 1412
@@ -1521,7 +1480,7 @@ bool LLWorldMapView::checkItemHit(S32 x, S32 y, LLItemInfo& item, LLUUID* id, bo
1521 if (y < item_y - BIG_DOT_RADIUS) return false; 1480 if (y < item_y - BIG_DOT_RADIUS) return false;
1522 if (y > item_y + BIG_DOT_RADIUS) return false; 1481 if (y > item_y + BIG_DOT_RADIUS) return false;
1523 1482
1524 LLSimInfo* sim_info = gWorldMap->simInfoFromHandle(item.mRegionHandle); 1483 LLSimInfo* sim_info = LLWorldMap::getInstance()->simInfoFromHandle(item.mRegionHandle);
1525 if (sim_info) 1484 if (sim_info)
1526 { 1485 {
1527 if (track) 1486 if (track)
@@ -1551,7 +1510,7 @@ void LLWorldMapView::handleClick(S32 x, S32 y, MASK mask,
1551 // *HACK: Adjust Z values automatically for liaisons & gods so 1510 // *HACK: Adjust Z values automatically for liaisons & gods so
1552 // we swoop down when they click on the map. Sadly, the P2P 1511 // we swoop down when they click on the map. Sadly, the P2P
1553 // branch does not pay attention to this value; however, the 1512 // branch does not pay attention to this value; however, the
1554 // Distributed Messaging branch honors kt. 1513 // Distributed Messaging branch honors it.
1555 if(gAgent.isGodlike()) 1514 if(gAgent.isGodlike())
1556 { 1515 {
1557 pos_global.mdV[VZ] = 200.0; 1516 pos_global.mdV[VZ] = 200.0;
@@ -1559,30 +1518,30 @@ void LLWorldMapView::handleClick(S32 x, S32 y, MASK mask,
1559 1518
1560 *hit_type = 0; // hit nothing 1519 *hit_type = 0; // hit nothing
1561 1520
1562 gWorldMap->mIsTrackingUnknownLocation = FALSE; 1521 LLWorldMap::getInstance()->mIsTrackingUnknownLocation = FALSE;
1563 gWorldMap->mIsTrackingDoubleClick = FALSE; 1522 LLWorldMap::getInstance()->mIsTrackingDoubleClick = FALSE;
1564 gWorldMap->mIsTrackingCommit = FALSE; 1523 LLWorldMap::getInstance()->mIsTrackingCommit = FALSE;
1565 1524
1566 LLWorldMap::item_info_list_t::iterator it; 1525 LLWorldMap::item_info_list_t::iterator it;
1567 1526
1568 // clear old selected stuff 1527 // clear old selected stuff
1569 for (it = gWorldMap->mPGEvents.begin(); it != gWorldMap->mPGEvents.end(); ++it) 1528 for (it = LLWorldMap::getInstance()->mPGEvents.begin(); it != LLWorldMap::getInstance()->mPGEvents.end(); ++it)
1570 { 1529 {
1571 (*it).mSelected = FALSE; 1530 (*it).mSelected = FALSE;
1572 } 1531 }
1573 for (it = gWorldMap->mMatureEvents.begin(); it != gWorldMap->mMatureEvents.end(); ++it) 1532 for (it = LLWorldMap::getInstance()->mMatureEvents.begin(); it != LLWorldMap::getInstance()->mMatureEvents.end(); ++it)
1574 { 1533 {
1575 (*it).mSelected = FALSE; 1534 (*it).mSelected = FALSE;
1576 } 1535 }
1577 for (it = gWorldMap->mPopular.begin(); it != gWorldMap->mPopular.end(); ++it) 1536 for (it = LLWorldMap::getInstance()->mPopular.begin(); it != LLWorldMap::getInstance()->mPopular.end(); ++it)
1578 { 1537 {
1579 (*it).mSelected = FALSE; 1538 (*it).mSelected = FALSE;
1580 } 1539 }
1581 for (it = gWorldMap->mLandForSale.begin(); it != gWorldMap->mLandForSale.end(); ++it) 1540 for (it = LLWorldMap::getInstance()->mLandForSale.begin(); it != LLWorldMap::getInstance()->mLandForSale.end(); ++it)
1582 { 1541 {
1583 (*it).mSelected = FALSE; 1542 (*it).mSelected = FALSE;
1584 } 1543 }
1585 for (it = gWorldMap->mClassifieds.begin(); it != gWorldMap->mClassifieds.end(); ++it) 1544 for (it = LLWorldMap::getInstance()->mClassifieds.begin(); it != LLWorldMap::getInstance()->mClassifieds.end(); ++it)
1586 { 1545 {
1587 (*it).mSelected = FALSE; 1546 (*it).mSelected = FALSE;
1588 } 1547 }
@@ -1590,7 +1549,7 @@ void LLWorldMapView::handleClick(S32 x, S32 y, MASK mask,
1590 // Select event you clicked on 1549 // Select event you clicked on
1591 if (gSavedSettings.getBOOL("MapShowEvents")) 1550 if (gSavedSettings.getBOOL("MapShowEvents"))
1592 { 1551 {
1593 for (it = gWorldMap->mPGEvents.begin(); it != gWorldMap->mPGEvents.end(); ++it) 1552 for (it = LLWorldMap::getInstance()->mPGEvents.begin(); it != LLWorldMap::getInstance()->mPGEvents.end(); ++it)
1594 { 1553 {
1595 LLItemInfo& event = *it; 1554 LLItemInfo& event = *it;
1596 1555
@@ -1604,7 +1563,7 @@ void LLWorldMapView::handleClick(S32 x, S32 y, MASK mask,
1604 } 1563 }
1605 if (gSavedSettings.getBOOL("ShowMatureEvents")) 1564 if (gSavedSettings.getBOOL("ShowMatureEvents"))
1606 { 1565 {
1607 for (it = gWorldMap->mMatureEvents.begin(); it != gWorldMap->mMatureEvents.end(); ++it) 1566 for (it = LLWorldMap::getInstance()->mMatureEvents.begin(); it != LLWorldMap::getInstance()->mMatureEvents.end(); ++it)
1608 { 1567 {
1609 LLItemInfo& event = *it; 1568 LLItemInfo& event = *it;
1610 1569
@@ -1621,7 +1580,7 @@ void LLWorldMapView::handleClick(S32 x, S32 y, MASK mask,
1621 1580
1622 if (gSavedSettings.getBOOL("MapShowPopular")) 1581 if (gSavedSettings.getBOOL("MapShowPopular"))
1623 { 1582 {
1624 for (it = gWorldMap->mPopular.begin(); it != gWorldMap->mPopular.end(); ++it) 1583 for (it = LLWorldMap::getInstance()->mPopular.begin(); it != LLWorldMap::getInstance()->mPopular.end(); ++it)
1625 { 1584 {
1626 LLItemInfo& popular = *it; 1585 LLItemInfo& popular = *it;
1627 1586
@@ -1636,7 +1595,7 @@ void LLWorldMapView::handleClick(S32 x, S32 y, MASK mask,
1636 1595
1637 if (gSavedSettings.getBOOL("MapShowLandForSale")) 1596 if (gSavedSettings.getBOOL("MapShowLandForSale"))
1638 { 1597 {
1639 for (it = gWorldMap->mLandForSale.begin(); it != gWorldMap->mLandForSale.end(); ++it) 1598 for (it = LLWorldMap::getInstance()->mLandForSale.begin(); it != LLWorldMap::getInstance()->mLandForSale.end(); ++it)
1640 { 1599 {
1641 LLItemInfo& land = *it; 1600 LLItemInfo& land = *it;
1642 1601
@@ -1651,7 +1610,7 @@ void LLWorldMapView::handleClick(S32 x, S32 y, MASK mask,
1651 1610
1652 if (gSavedSettings.getBOOL("MapShowClassifieds")) 1611 if (gSavedSettings.getBOOL("MapShowClassifieds"))
1653 { 1612 {
1654 for (it = gWorldMap->mClassifieds.begin(); it != gWorldMap->mClassifieds.end(); ++it) 1613 for (it = LLWorldMap::getInstance()->mClassifieds.begin(); it != LLWorldMap::getInstance()->mClassifieds.end(); ++it)
1655 { 1614 {
1656 LLItemInfo& classified = *it; 1615 LLItemInfo& classified = *it;
1657 1616
@@ -1732,11 +1691,11 @@ BOOL LLWorldMapView::handleMouseUp( S32 x, S32 y, MASK mask )
1732void LLWorldMapView::updateBlock(S32 block_x, S32 block_y) 1691void LLWorldMapView::updateBlock(S32 block_x, S32 block_y)
1733{ 1692{
1734 S32 offset = block_x | (block_y * MAP_BLOCK_RES); 1693 S32 offset = block_x | (block_y * MAP_BLOCK_RES);
1735 if (!gWorldMap->mMapBlockLoaded[gWorldMap->mCurrentMap][offset]) 1694 if (!LLWorldMap::getInstance()->mMapBlockLoaded[LLWorldMap::getInstance()->mCurrentMap][offset])
1736 { 1695 {
1737// llinfos << "Loading Block (" << block_x << "," << block_y << ")" << llendl; 1696// llinfos << "Loading Block (" << block_x << "," << block_y << ")" << llendl;
1738 gWorldMap->sendMapBlockRequest(block_x << 3, block_y << 3, (block_x << 3) + 7, (block_y << 3) + 7); 1697 LLWorldMap::getInstance()->sendMapBlockRequest(block_x << 3, block_y << 3, (block_x << 3) + 7, (block_y << 3) + 7);
1739 gWorldMap->mMapBlockLoaded[gWorldMap->mCurrentMap][offset] = TRUE; 1698 LLWorldMap::getInstance()->mMapBlockLoaded[LLWorldMap::getInstance()->mCurrentMap][offset] = TRUE;
1740 } 1699 }
1741} 1700}
1742 1701
@@ -1857,15 +1816,15 @@ BOOL LLWorldMapView::handleDoubleClick( S32 x, S32 y, MASK mask )
1857 } 1816 }
1858 default: 1817 default:
1859 { 1818 {
1860 if (gWorldMap->mIsTrackingUnknownLocation) 1819 if (LLWorldMap::getInstance()->mIsTrackingUnknownLocation)
1861 { 1820 {
1862 gWorldMap->mIsTrackingDoubleClick = TRUE; 1821 LLWorldMap::getInstance()->mIsTrackingDoubleClick = TRUE;
1863 } 1822 }
1864 else 1823 else
1865 { 1824 {
1866 // Teleport if we got a valid location 1825 // Teleport if we got a valid location
1867 LLVector3d pos_global = viewPosToGlobal(x,y); 1826 LLVector3d pos_global = viewPosToGlobal(x,y);
1868 LLSimInfo* sim_info = gWorldMap->simInfoFromPosGlobal(pos_global); 1827 LLSimInfo* sim_info = LLWorldMap::getInstance()->simInfoFromPosGlobal(pos_global);
1869 if (sim_info && sim_info->mAccess != SIM_ACCESS_DOWN) 1828 if (sim_info && sim_info->mAccess != SIM_ACCESS_DOWN)
1870 { 1829 {
1871 gAgent.teleportViaLocation( pos_global ); 1830 gAgent.teleportViaLocation( pos_global );
diff --git a/linden/indra/newview/llworldmapview.h b/linden/indra/newview/llworldmapview.h
index 32f2d6e..18626b5 100644
--- a/linden/indra/newview/llworldmapview.h
+++ b/linden/indra/newview/llworldmapview.h
@@ -83,10 +83,10 @@ public:
83 LLVector3d viewPosToGlobal(S32 x,S32 y); 83 LLVector3d viewPosToGlobal(S32 x,S32 y);
84 84
85 virtual void draw(); 85 virtual void draw();
86 void drawGenericItems(const LLWorldMap::item_info_list_t& items, LLPointer<LLViewerImage> image); 86 void drawGenericItems(const LLWorldMap::item_info_list_t& items, LLUIImagePtr image);
87 void drawGenericItem(const LLItemInfo& item, LLPointer<LLViewerImage> image); 87 void drawGenericItem(const LLItemInfo& item, LLUIImagePtr image);
88 void drawImage(const LLVector3d& global_pos, LLPointer<LLViewerImage> image, const LLColor4& color = LLColor4::white); 88 void drawImage(const LLVector3d& global_pos, LLUIImagePtr image, const LLColor4& color = LLColor4::white);
89 void drawImageStack(const LLVector3d& global_pos, LLPointer<LLViewerImage> image, U32 count, F32 offset, const LLColor4& color); 89 void drawImageStack(const LLVector3d& global_pos, LLUIImagePtr image, U32 count, F32 offset, const LLColor4& color);
90 void drawAgents(); 90 void drawAgents();
91 void drawEvents(); 91 void drawEvents();
92 void drawFrustum(); 92 void drawFrustum();
@@ -136,21 +136,21 @@ protected:
136public: 136public:
137 LLColor4 mBackgroundColor; 137 LLColor4 mBackgroundColor;
138 138
139 static LLPointer<LLViewerImage> sAvatarYouSmallImage; 139 static LLUIImagePtr sAvatarYouSmallImage;
140 static LLPointer<LLViewerImage> sAvatarSmallImage; 140 static LLUIImagePtr sAvatarSmallImage;
141 static LLPointer<LLViewerImage> sAvatarLargeImage; 141 static LLUIImagePtr sAvatarLargeImage;
142 static LLPointer<LLViewerImage> sAvatarAboveImage; 142 static LLUIImagePtr sAvatarAboveImage;
143 static LLPointer<LLViewerImage> sAvatarBelowImage; 143 static LLUIImagePtr sAvatarBelowImage;
144 static LLPointer<LLViewerImage> sTelehubImage; 144 static LLUIImagePtr sTelehubImage;
145 static LLPointer<LLViewerImage> sInfohubImage; 145 static LLUIImagePtr sInfohubImage;
146 static LLPointer<LLViewerImage> sHomeImage; 146 static LLUIImagePtr sHomeImage;
147 static LLPointer<LLViewerImage> sEventImage; 147 static LLUIImagePtr sEventImage;
148 static LLPointer<LLViewerImage> sEventMatureImage; 148 static LLUIImagePtr sEventMatureImage;
149 static LLPointer<LLViewerImage> sTrackCircleImage; 149 static LLUIImagePtr sTrackCircleImage;
150 static LLPointer<LLViewerImage> sTrackArrowImage; 150 static LLUIImagePtr sTrackArrowImage;
151 static LLPointer<LLViewerImage> sClassifiedsImage; 151 static LLUIImagePtr sClassifiedsImage;
152 static LLPointer<LLViewerImage> sPopularImage; 152 static LLUIImagePtr sPopularImage;
153 static LLPointer<LLViewerImage> sForSaleImage; 153 static LLUIImagePtr sForSaleImage;
154 154
155 static F32 sThresholdA; 155 static F32 sThresholdA;
156 static F32 sThresholdB; 156 static F32 sThresholdB;
diff --git a/linden/indra/newview/llxmlrpctransaction.cpp b/linden/indra/newview/llxmlrpctransaction.cpp
index bc10c1b..7179104 100644
--- a/linden/indra/newview/llxmlrpctransaction.cpp
+++ b/linden/indra/newview/llxmlrpctransaction.cpp
@@ -238,8 +238,9 @@ void LLXMLRPCTransaction::Impl::init(XMLRPC_REQUEST request, bool useGzip)
238// mCurlRequest->setopt(CURLOPT_VERBOSE, 1); // usefull for debugging 238// mCurlRequest->setopt(CURLOPT_VERBOSE, 1); // usefull for debugging
239 mCurlRequest->setopt(CURLOPT_NOSIGNAL, 1); 239 mCurlRequest->setopt(CURLOPT_NOSIGNAL, 1);
240 mCurlRequest->setWriteCallback(&curlDownloadCallback, (void*)this); 240 mCurlRequest->setWriteCallback(&curlDownloadCallback, (void*)this);
241 mCurlRequest->setopt(CURLOPT_SSL_VERIFYPEER, gVerifySSLCert); 241 BOOL vefifySSLCert = !gSavedSettings.getBOOL("NoVerifySSLCert");
242 mCurlRequest->setopt(CURLOPT_SSL_VERIFYHOST, gVerifySSLCert? 2 : 0); 242 mCurlRequest->setopt(CURLOPT_SSL_VERIFYPEER, vefifySSLCert);
243 mCurlRequest->setopt(CURLOPT_SSL_VERIFYHOST, vefifySSLCert ? 2 : 0);
243 // Be a little impatient about establishing connections. 244 // Be a little impatient about establishing connections.
244 mCurlRequest->setopt(CURLOPT_CONNECTTIMEOUT, 40L); 245 mCurlRequest->setopt(CURLOPT_CONNECTTIMEOUT, 40L);
245 246
diff --git a/linden/indra/newview/lsl_guide.html b/linden/indra/newview/lsl_guide.html
index 9f8c673..aa660b8 100644
--- a/linden/indra/newview/lsl_guide.html
+++ b/linden/indra/newview/lsl_guide.html
@@ -2252,22 +2252,22 @@ HREF="#AEN6323"
2252></DT 2252></DT
2253><DT 2253><DT
2254>C.28. <A 2254>C.28. <A
2255HREF="#AEN6405" 2255HREF="#AEN6409"
2256>XML-RPC Constants</A 2256>XML-RPC Constants</A
2257></DT 2257></DT
2258><DT 2258><DT
2259>C.29. <A 2259>C.29. <A
2260HREF="#AEN6408" 2260HREF="#AEN6412"
2261>Permission Mask Constants</A 2261>Permission Mask Constants</A
2262></DT 2262></DT
2263><DT 2263><DT
2264>C.30. <A 2264>C.30. <A
2265HREF="#AEN6455" 2265HREF="#AEN6459"
2266>Parcel Media Constants</A 2266>Parcel Media Constants</A
2267></DT 2267></DT
2268><DT 2268><DT
2269>C.31. <A 2269>C.31. <A
2270HREF="#AEN6517" 2270HREF="#AEN6521"
2271>Click Action Constants</A 2271>Click Action Constants</A
2272></DT 2272></DT
2273></DL 2273></DL
@@ -8817,7 +8817,7 @@ CLASS="parameter"
8817>mask</CODE 8817>mask</CODE
8818> for the 8818> for the
8819 specified inventory item. See <A 8819 specified inventory item. See <A
8820HREF="#AEN6408" 8820HREF="#AEN6412"
8821>Permission Mask Constants</A 8821>Permission Mask Constants</A
8822> 8822>
8823 for more information. Example usage: 8823 for more information. Example usage:
@@ -9512,7 +9512,7 @@ CLASS="parameter"
9512>mask</CODE 9512>mask</CODE
9513> for the root object the 9513> for the root object the
9514 task is attached to. See <A 9514 task is attached to. See <A
9515HREF="#AEN6408" 9515HREF="#AEN6412"
9516>Permission Mask Constants</A 9516>Permission Mask Constants</A
9517> 9517>
9518 for more information. Example usage: 9518 for more information. Example usage:
@@ -10631,8 +10631,7 @@ CLASS="FUNCDEF"
10631CLASS="parameter" 10631CLASS="parameter"
10632>category</CODE 10632>category</CODE
10633> in the 10633> in the
10634 recipients inventory. The avatar must be, or have recently been, within the same 10634 recipients inventory. If the recipient is an object, the same
10635 Region as the sending object. If the recipient is an object, the same
10636 permissions apply as if you were dragging inventory onto the 10635 permissions apply as if you were dragging inventory onto the
10637 object by hand, ie if <A 10636 object by hand, ie if <A
10638HREF="#AEN1047" 10637HREF="#AEN1047"
@@ -12503,55 +12502,55 @@ CLASS="parameter"
12503>command</CODE 12502>command</CODE
12504> can be one of 12503> can be one of
12505 <A 12504 <A
12506HREF="#AEN6455" 12505HREF="#AEN6459"
12507>PARCEL_MEDIA_COMMAND_STOP</A 12506>PARCEL_MEDIA_COMMAND_STOP</A
12508>, 12507>,
12509 <A 12508 <A
12510HREF="#AEN6455" 12509HREF="#AEN6459"
12511>PARCEL_MEDIA_COMMAND_PAUSE</A 12510>PARCEL_MEDIA_COMMAND_PAUSE</A
12512>, 12511>,
12513 <A 12512 <A
12514HREF="#AEN6455" 12513HREF="#AEN6459"
12515>PARCEL_MEDIA_COMMAND_PLAY</A 12514>PARCEL_MEDIA_COMMAND_PLAY</A
12516>, 12515>,
12517 <A 12516 <A
12518HREF="#AEN6455" 12517HREF="#AEN6459"
12519>PARCEL_MEDIA_COMMAND_LOOP</A 12518>PARCEL_MEDIA_COMMAND_LOOP</A
12520>, 12519>,
12521 <A 12520 <A
12522HREF="#AEN6455" 12521HREF="#AEN6459"
12523>PARCEL_MEDIA_COMMAND_TEXTURE</A 12522>PARCEL_MEDIA_COMMAND_TEXTURE</A
12524>, 12523>,
12525 <A 12524 <A
12526HREF="#AEN6455" 12525HREF="#AEN6459"
12527>PARCEL_MEDIA_COMMAND_URL</A 12526>PARCEL_MEDIA_COMMAND_URL</A
12528>, 12527>,
12529 <A 12528 <A
12530HREF="#AEN6455" 12529HREF="#AEN6459"
12531>PARCEL_MEDIA_COMMAND_TYPE</A 12530>PARCEL_MEDIA_COMMAND_TYPE</A
12532>, 12531>,
12533 <A 12532 <A
12534HREF="#AEN6455" 12533HREF="#AEN6459"
12535>PARCEL_MEDIA_COMMAND_DESC</A 12534>PARCEL_MEDIA_COMMAND_DESC</A
12536>, 12535>,
12537 <A 12536 <A
12538HREF="#AEN6455" 12537HREF="#AEN6459"
12539>PARCEL_MEDIA_COMMAND_SIZE</A 12538>PARCEL_MEDIA_COMMAND_SIZE</A
12540>, 12539>,
12541 <A 12540 <A
12542HREF="#AEN6455" 12541HREF="#AEN6459"
12543>PARCEL_MEDIA_COMMAND_TIME</A 12542>PARCEL_MEDIA_COMMAND_TIME</A
12544>, 12543>,
12545 <A 12544 <A
12546HREF="#AEN6455" 12545HREF="#AEN6459"
12547>PARCEL_MEDIA_COMMAND_AGENT</A 12546>PARCEL_MEDIA_COMMAND_AGENT</A
12548>, 12547>,
12549 <A 12548 <A
12550HREF="#AEN6455" 12549HREF="#AEN6459"
12551>PARCEL_MEDIA_COMMAND_UNLOAD</A 12550>PARCEL_MEDIA_COMMAND_UNLOAD</A
12552>, or 12551>, or
12553 <A 12552 <A
12554HREF="#AEN6455" 12553HREF="#AEN6459"
12555>PARCEL_MEDIA_COMMAND_AUTO_ALIGN</A 12554>PARCEL_MEDIA_COMMAND_AUTO_ALIGN</A
12556>. 12555>.
12557 </P 12556 </P
@@ -12734,11 +12733,11 @@ CLASS="parameter"
12734>command</CODE 12733>command</CODE
12735> can be one of 12734> can be one of
12736 <A 12735 <A
12737HREF="#AEN6455" 12736HREF="#AEN6459"
12738>PARCEL_MEDIA_COMMAND_TEXTURE</A 12737>PARCEL_MEDIA_COMMAND_TEXTURE</A
12739> or 12738> or
12740 <A 12739 <A
12741HREF="#AEN6455" 12740HREF="#AEN6459"
12742>PARCEL_MEDIA_COMMAND_URL</A 12741>PARCEL_MEDIA_COMMAND_URL</A
12743>. 12742>.
12744 </P 12743 </P
@@ -21759,6 +21758,12 @@ CLASS="variablelist"
21759 PRIM_BUMP_GRAVEL, PRIM_BUMP_BLOBS, PRIM_BUMP_SIDING, PRIM_BUMP_LARGETILE, PRIM_BUMP_STUCCO, PRIM_BUMP_SUCTION, 21758 PRIM_BUMP_GRAVEL, PRIM_BUMP_BLOBS, PRIM_BUMP_SIDING, PRIM_BUMP_LARGETILE, PRIM_BUMP_STUCCO, PRIM_BUMP_SUCTION,
21760 or PRIM_BUMP_WEAVE.</P 21759 or PRIM_BUMP_WEAVE.</P
21761></DD 21760></DD
21761><DT
21762>PRIM_GLOW</DT
21763><DD
21764><P
21765>Followed by an integer face and a float glow value (in range 0.0 to 1.0).</P
21766></DD
21762></DL 21767></DL
21763></DIV 21768></DIV
21764></DIV 21769></DIV
@@ -21767,7 +21772,7 @@ CLASS="section"
21767><HR><H2 21772><HR><H2
21768CLASS="section" 21773CLASS="section"
21769><A 21774><A
21770NAME="AEN6405" 21775NAME="AEN6409"
21771>C.28. XML-RPC Constants</A 21776>C.28. XML-RPC Constants</A
21772></H2 21777></H2
21773><P 21778><P
@@ -21778,7 +21783,7 @@ CLASS="section"
21778><HR><H2 21783><HR><H2
21779CLASS="section" 21784CLASS="section"
21780><A 21785><A
21781NAME="AEN6408" 21786NAME="AEN6412"
21782>C.29. Permission Mask Constants</A 21787>C.29. Permission Mask Constants</A
21783></H2 21788></H2
21784><P 21789><P
@@ -21866,7 +21871,7 @@ CLASS="section"
21866><HR><H2 21871><HR><H2
21867CLASS="section" 21872CLASS="section"
21868><A 21873><A
21869NAME="AEN6455" 21874NAME="AEN6459"
21870>C.30. Parcel Media Constants</A 21875>C.30. Parcel Media Constants</A
21871></H2 21876></H2
21872><P 21877><P
@@ -21986,7 +21991,7 @@ CLASS="section"
21986><HR><H2 21991><HR><H2
21987CLASS="section" 21992CLASS="section"
21988><A 21993><A
21989NAME="AEN6517" 21994NAME="AEN6521"
21990>C.31. Click Action Constants</A 21995>C.31. Click Action Constants</A
21991></H2 21996></H2
21992><P 21997><P
@@ -22070,4 +22075,4 @@ CLASS="variablelist"
22070></DIV 22075></DIV
22071></BODY 22076></BODY
22072></HTML 22077></HTML
22073> 22078> \ No newline at end of file
diff --git a/linden/indra/newview/macview.xcodeproj/project.pbxproj b/linden/indra/newview/macview.xcodeproj/project.pbxproj
index dd07ea3..33a709c 100644
--- a/linden/indra/newview/macview.xcodeproj/project.pbxproj
+++ b/linden/indra/newview/macview.xcodeproj/project.pbxproj
@@ -37,6 +37,7 @@
37 1A47B8E00860FDF100F73746 /* llpanelweb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A47B8DE0860FDF100F73746 /* llpanelweb.cpp */; }; 37 1A47B8E00860FDF100F73746 /* llpanelweb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A47B8DE0860FDF100F73746 /* llpanelweb.cpp */; };
38 1A5104450ABF5B5A00520F6D /* llnotecard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A5104440ABF5B5A00520F6D /* llnotecard.cpp */; }; 38 1A5104450ABF5B5A00520F6D /* llnotecard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A5104440ABF5B5A00520F6D /* llnotecard.cpp */; };
39 1A5104570ABF60A800520F6D /* llviewerassetstorage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A5104560ABF60A800520F6D /* llviewerassetstorage.cpp */; }; 39 1A5104570ABF60A800520F6D /* llviewerassetstorage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A5104560ABF60A800520F6D /* llviewerassetstorage.cpp */; };
40 1A531BFC0D81056E00DEB305 /* llfloatercamera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A531BFB0D81056E00DEB305 /* llfloatercamera.cpp */; };
40 1A5B3B550A70147000A90391 /* llfloaterbump.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A5B3B540A70147000A90391 /* llfloaterbump.cpp */; }; 41 1A5B3B550A70147000A90391 /* llfloaterbump.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A5B3B540A70147000A90391 /* llfloaterbump.cpp */; };
41 1A61A7F00A5ED446009FE3D2 /* llfloateravatarpicker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A61A7EF0A5ED446009FE3D2 /* llfloateravatarpicker.cpp */; }; 42 1A61A7F00A5ED446009FE3D2 /* llfloateravatarpicker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A61A7EF0A5ED446009FE3D2 /* llfloateravatarpicker.cpp */; };
42 1A758C920A436FCA00589675 /* llagentdata.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A758C910A436FCA00589675 /* llagentdata.cpp */; }; 43 1A758C920A436FCA00589675 /* llagentdata.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A758C910A436FCA00589675 /* llagentdata.cpp */; };
@@ -58,6 +59,7 @@
58 1AD394110CAB000F004BA76A /* llurldispatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AD3940F0CAB000F004BA76A /* llurldispatcher.cpp */; }; 59 1AD394110CAB000F004BA76A /* llurldispatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AD3940F0CAB000F004BA76A /* llurldispatcher.cpp */; };
59 1AD394130CAB001B004BA76A /* llcommandhandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AD394120CAB001B004BA76A /* llcommandhandler.cpp */; }; 60 1AD394130CAB001B004BA76A /* llcommandhandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AD394120CAB001B004BA76A /* llcommandhandler.cpp */; };
60 1AD61F6B0AC09B1900507FB9 /* llimview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AD61F6A0AC09B1900507FB9 /* llimview.cpp */; }; 61 1AD61F6B0AC09B1900507FB9 /* llimview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AD61F6A0AC09B1900507FB9 /* llimview.cpp */; };
62 1ADE58940D7CCF6000183F7F /* llfloaterhud.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ADE58920D7CCF6000183F7F /* llfloaterhud.cpp */; };
61 1AE5D7120844FBD300278605 /* llwebbrowserctrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AE5D7100844FBD300278605 /* llwebbrowserctrl.cpp */; }; 63 1AE5D7120844FBD300278605 /* llwebbrowserctrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AE5D7100844FBD300278605 /* llwebbrowserctrl.cpp */; };
62 1AEF0A580B2DFE67003F107C /* llctrlselectioninterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AEF0A560B2DFE67003F107C /* llctrlselectioninterface.cpp */; }; 64 1AEF0A580B2DFE67003F107C /* llctrlselectioninterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AEF0A560B2DFE67003F107C /* llctrlselectioninterface.cpp */; };
63 1AEF0A5B0B2DFE72003F107C /* llrootview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AEF0A5A0B2DFE72003F107C /* llrootview.cpp */; }; 65 1AEF0A5B0B2DFE72003F107C /* llrootview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AEF0A5A0B2DFE72003F107C /* llrootview.cpp */; };
@@ -68,7 +70,7 @@
68 1AFA40A20A2DFC9000C13F70 /* llprefschat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A3143E00A02B73D005B87E7 /* llprefschat.cpp */; }; 70 1AFA40A20A2DFC9000C13F70 /* llprefschat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A3143E00A02B73D005B87E7 /* llprefschat.cpp */; };
69 1AFA40A50A2DFC9400C13F70 /* llfloatertest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A8BF3780A1AAB99005B9D5A /* llfloatertest.cpp */; }; 71 1AFA40A50A2DFC9400C13F70 /* llfloatertest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A8BF3780A1AAB99005B9D5A /* llfloatertest.cpp */; };
70 1AFA40B50A2DFD7200C13F70 /* llsavedsettingsglue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AFA40B40A2DFD7200C13F70 /* llsavedsettingsglue.cpp */; }; 72 1AFA40B50A2DFD7200C13F70 /* llsavedsettingsglue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AFA40B40A2DFD7200C13F70 /* llsavedsettingsglue.cpp */; };
71 1C0D59510CF0B2B800222B10 /* libboost_regex-gcc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1C0D59500CF0B2B800222B10 /* libboost_regex-gcc.a */; }; 73 1C0D59510CF0B2B800222B10 /* libboost_regex-mt.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1C0D59500CF0B2B800222B10 /* libboost_regex-mt.a */; };
72 1CBB67D80C7CCCB2007DAAAE /* llfloaterwater.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1CBB67D20C7CCCB2007DAAAE /* llfloaterwater.cpp */; }; 74 1CBB67D80C7CCCB2007DAAAE /* llfloaterwater.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1CBB67D20C7CCCB2007DAAAE /* llfloaterwater.cpp */; };
73 1CBB67D90C7CCCB2007DAAAE /* llwaterparammanager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1CBB67D40C7CCCB2007DAAAE /* llwaterparammanager.cpp */; }; 75 1CBB67D90C7CCCB2007DAAAE /* llwaterparammanager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1CBB67D40C7CCCB2007DAAAE /* llwaterparammanager.cpp */; };
74 1CBB67DA0C7CCCB2007DAAAE /* llwaterparamset.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1CBB67D60C7CCCB2007DAAAE /* llwaterparamset.cpp */; }; 76 1CBB67DA0C7CCCB2007DAAAE /* llwaterparamset.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1CBB67D60C7CCCB2007DAAAE /* llwaterparamset.cpp */; };
@@ -102,7 +104,6 @@
102 5503BB2F05446B20003D051F /* llstatbar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529B3051F61DF00A80050 /* llstatbar.cpp */; }; 104 5503BB2F05446B20003D051F /* llstatbar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529B3051F61DF00A80050 /* llstatbar.cpp */; };
103 5503BB3405446B20003D051F /* pipeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529BA051F61DF00A80050 /* pipeline.cpp */; }; 105 5503BB3405446B20003D051F /* pipeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529BA051F61DF00A80050 /* pipeline.cpp */; };
104 5503BB3705446B20003D051F /* noise.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529BD051F61DF00A80050 /* noise.cpp */; }; 106 5503BB3705446B20003D051F /* noise.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529BD051F61DF00A80050 /* noise.cpp */; };
105 5503BB3805446B20003D051F /* moviemaker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529BE051F61DF00A80050 /* moviemaker.cpp */; };
106 5503BB3905446B20003D051F /* llworldmapview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529BF051F61DF00A80050 /* llworldmapview.cpp */; }; 107 5503BB3905446B20003D051F /* llworldmapview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529BF051F61DF00A80050 /* llworldmapview.cpp */; };
107 5503BB3A05446B20003D051F /* llworldmap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529C0051F61DF00A80050 /* llworldmap.cpp */; }; 108 5503BB3A05446B20003D051F /* llworldmap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529C0051F61DF00A80050 /* llworldmap.cpp */; };
108 5503BB3B05446B20003D051F /* llworld.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529C1051F61DF00A80050 /* llworld.cpp */; }; 109 5503BB3B05446B20003D051F /* llworld.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529C1051F61DF00A80050 /* llworld.cpp */; };
@@ -138,7 +139,7 @@
138 5503BB5D05446B20003D051F /* llviewermessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529E3051F61DF00A80050 /* llviewermessage.cpp */; }; 139 5503BB5D05446B20003D051F /* llviewermessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529E3051F61DF00A80050 /* llviewermessage.cpp */; };
139 5503BB5E05446B20003D051F /* llviewermenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529E4051F61DF00A80050 /* llviewermenu.cpp */; }; 140 5503BB5E05446B20003D051F /* llviewermenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529E4051F61DF00A80050 /* llviewermenu.cpp */; };
140 5503BB5F05446B20003D051F /* llsprite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529E5051F61DF00A80050 /* llsprite.cpp */; }; 141 5503BB5F05446B20003D051F /* llsprite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529E5051F61DF00A80050 /* llsprite.cpp */; };
141 5503BB6105446B20003D051F /* llsphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529E7051F61DF00A80050 /* llsphere.cpp */; }; 142 5503BB6105446B20003D051F /* llrendersphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529E7051F61DF00A80050 /* llrendersphere.cpp */; };
142 5503BB6305446B20003D051F /* llpreviewtexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529E9051F61DF00A80050 /* llpreviewtexture.cpp */; }; 143 5503BB6305446B20003D051F /* llpreviewtexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529E9051F61DF00A80050 /* llpreviewtexture.cpp */; };
143 5503BB6405446B20003D051F /* llpreviewsound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529EA051F61DF00A80050 /* llpreviewsound.cpp */; }; 144 5503BB6405446B20003D051F /* llpreviewsound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529EA051F61DF00A80050 /* llpreviewsound.cpp */; };
144 5503BB6505446B20003D051F /* llspatialpartition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529EB051F61DF00A80050 /* llspatialpartition.cpp */; }; 145 5503BB6505446B20003D051F /* llspatialpartition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529EB051F61DF00A80050 /* llspatialpartition.cpp */; };
@@ -171,7 +172,6 @@
171 5503BB9105446B20003D051F /* llfloaterland.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A17051F61DF00A80050 /* llfloaterland.cpp */; }; 172 5503BB9105446B20003D051F /* llfloaterland.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A17051F61DF00A80050 /* llfloaterland.cpp */; };
172 5503BB9205446B20003D051F /* llpanelface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A18051F61DF00A80050 /* llpanelface.cpp */; }; 173 5503BB9205446B20003D051F /* llpanelface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A18051F61DF00A80050 /* llpanelface.cpp */; };
173 5503BB9305446B20003D051F /* llpanelevent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A19051F61DF00A80050 /* llpanelevent.cpp */; }; 174 5503BB9305446B20003D051F /* llpanelevent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A19051F61DF00A80050 /* llpanelevent.cpp */; };
174 5503BB9505446B20003D051F /* llcontroldef.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A1B051F61DF00A80050 /* llcontroldef.cpp */; };
175 5503BB9805446B20003D051F /* llframestatview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A1E051F61DF00A80050 /* llframestatview.cpp */; }; 175 5503BB9805446B20003D051F /* llframestatview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A1E051F61DF00A80050 /* llframestatview.cpp */; };
176 5503BB9905446B20003D051F /* llframestats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A1F051F61DF00A80050 /* llframestats.cpp */; }; 176 5503BB9905446B20003D051F /* llframestats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A1F051F61DF00A80050 /* llframestats.cpp */; };
177 5503BB9E05446B20003D051F /* llhudobject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A24051F61DF00A80050 /* llhudobject.cpp */; }; 177 5503BB9E05446B20003D051F /* llhudobject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A24051F61DF00A80050 /* llhudobject.cpp */; };
@@ -254,7 +254,6 @@
254 5503BC1005446B20003D051F /* llnamelistctrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A98051F61DF00A80050 /* llnamelistctrl.cpp */; }; 254 5503BC1005446B20003D051F /* llnamelistctrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A98051F61DF00A80050 /* llnamelistctrl.cpp */; };
255 5503BC1205446B20003D051F /* llmaniptranslate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A9A051F61DF00A80050 /* llmaniptranslate.cpp */; }; 255 5503BC1205446B20003D051F /* llmaniptranslate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A9A051F61DF00A80050 /* llmaniptranslate.cpp */; };
256 5503BC1305446B20003D051F /* llmanipscale.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A9B051F61DF00A80050 /* llmanipscale.cpp */; }; 256 5503BC1305446B20003D051F /* llmanipscale.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A9B051F61DF00A80050 /* llmanipscale.cpp */; };
257 5503BC1505446B20003D051F /* head.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A9D051F61DF00A80050 /* head.cpp */; };
258 5503BC1705446B20003D051F /* llfloaternamedesc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A9F051F61DF00A80050 /* llfloaternamedesc.cpp */; }; 257 5503BC1705446B20003D051F /* llfloaternamedesc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A9F051F61DF00A80050 /* llfloaternamedesc.cpp */; };
259 5503BC1805446B20003D051F /* llpanelplace.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52AA0051F61DF00A80050 /* llpanelplace.cpp */; }; 258 5503BC1805446B20003D051F /* llpanelplace.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52AA0051F61DF00A80050 /* llpanelplace.cpp */; };
260 5503BC1905446B20003D051F /* llpanelpermissions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52AA1051F61DF00A80050 /* llpanelpermissions.cpp */; }; 259 5503BC1905446B20003D051F /* llpanelpermissions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52AA1051F61DF00A80050 /* llpanelpermissions.cpp */; };
@@ -278,7 +277,6 @@
278 5503BC3405446B20003D051F /* llpreview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52ABD051F61DF00A80050 /* llpreview.cpp */; }; 277 5503BC3405446B20003D051F /* llpreview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52ABD051F61DF00A80050 /* llpreview.cpp */; };
279 5503BC3605446B20003D051F /* llbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52ABF051F61DF00A80050 /* llbox.cpp */; }; 278 5503BC3605446B20003D051F /* llbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52ABF051F61DF00A80050 /* llbox.cpp */; };
280 5503BC3905446B20003D051F /* llfloaterreporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52AC2051F61DF00A80050 /* llfloaterreporter.cpp */; }; 279 5503BC3905446B20003D051F /* llfloaterreporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52AC2051F61DF00A80050 /* llfloaterreporter.cpp */; };
281 5503BC3C05446B20003D051F /* llcameraview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52AC5051F61DF00A80050 /* llcameraview.cpp */; };
282 5503BC3D05446B20003D051F /* llcompilequeue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52AC6051F61DF00A80050 /* llcompilequeue.cpp */; }; 280 5503BC3D05446B20003D051F /* llcompilequeue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52AC6051F61DF00A80050 /* llcompilequeue.cpp */; };
283 5503BC3E05446B20003D051F /* llpanelgroupvoting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52AC7051F61DF00A80050 /* llpanelgroupvoting.cpp */; }; 281 5503BC3E05446B20003D051F /* llpanelgroupvoting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52AC7051F61DF00A80050 /* llpanelgroupvoting.cpp */; };
284 5503BC4105446B20003D051F /* lldrawpoolsimple.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52ACA051F61DF00A80050 /* lldrawpoolsimple.cpp */; }; 282 5503BC4105446B20003D051F /* lldrawpoolsimple.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52ACA051F61DF00A80050 /* lldrawpoolsimple.cpp */; };
@@ -431,7 +429,10 @@
431 61923D6C074AE3C0005E1F34 /* llstatemachine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61923D25074AE3C0005E1F34 /* llstatemachine.cpp */; }; 429 61923D6C074AE3C0005E1F34 /* llstatemachine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61923D25074AE3C0005E1F34 /* llstatemachine.cpp */; };
432 61923D6E074AE3C0005E1F34 /* lltargetingmotion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61923D27074AE3C0005E1F34 /* lltargetingmotion.cpp */; }; 430 61923D6E074AE3C0005E1F34 /* lltargetingmotion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61923D27074AE3C0005E1F34 /* lltargetingmotion.cpp */; };
433 61923D70074AE3C0005E1F34 /* llvisualparam.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61923D29074AE3C0005E1F34 /* llvisualparam.cpp */; }; 431 61923D70074AE3C0005E1F34 /* llvisualparam.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61923D29074AE3C0005E1F34 /* llvisualparam.cpp */; };
434 79256EA30C57D6A5000AAFA4 /* llfloatervoicewizard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 79256EA10C57D6A4000AAFA4 /* llfloatervoicewizard.cpp */; }; 432 79E592770D1B4932002135A7 /* llimagepng.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8833693B0C18AF33007F52DA /* llimagepng.cpp */; };
433 79E592870D1B4961002135A7 /* llpngwrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8833693C0C18AF33007F52DA /* llpngwrapper.cpp */; };
434 79E5928A0D1B4A1A002135A7 /* libpng12.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88AA282B0C17720D0032DF53 /* libpng12.a */; };
435 79E593440D1B4A72002135A7 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = FDAA36BE09B919DF00FBF1CA /* libz.dylib */; };
435 84401E2F0A13CC9A006720A5 /* llfloatergroupinvite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84401E2D0A13CC9A006720A5 /* llfloatergroupinvite.cpp */; }; 436 84401E2F0A13CC9A006720A5 /* llfloatergroupinvite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84401E2D0A13CC9A006720A5 /* llfloatergroupinvite.cpp */; };
436 84401E320A13CCB2006720A5 /* llpanelgroupinvite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84401E300A13CCB2006720A5 /* llpanelgroupinvite.cpp */; }; 437 84401E320A13CCB2006720A5 /* llpanelgroupinvite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84401E300A13CCB2006720A5 /* llpanelgroupinvite.cpp */; };
437 8833693F0C18AF33007F52DA /* llimagepng.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8833693B0C18AF33007F52DA /* llimagepng.cpp */; }; 438 8833693F0C18AF33007F52DA /* llimagepng.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8833693B0C18AF33007F52DA /* llimagepng.cpp */; };
@@ -588,12 +589,17 @@
588 AA0E2A640A2FDB340066250A /* lltoolpipette.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA0E2A620A2FDB340066250A /* lltoolpipette.cpp */; }; 589 AA0E2A640A2FDB340066250A /* lltoolpipette.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA0E2A620A2FDB340066250A /* lltoolpipette.cpp */; };
589 AA1183500C1DF9C400FDE5BA /* llpanelaudiovolume.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA11834E0C1DF9C400FDE5BA /* llpanelaudiovolume.cpp */; }; 590 AA1183500C1DF9C400FDE5BA /* llpanelaudiovolume.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA11834E0C1DF9C400FDE5BA /* llpanelaudiovolume.cpp */; };
590 AA348DFA0B0EAB31002C3015 /* llcurl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA348DF80B0EAB31002C3015 /* llcurl.cpp */; }; 591 AA348DFA0B0EAB31002C3015 /* llcurl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA348DF80B0EAB31002C3015 /* llcurl.cpp */; };
592 AA38F8F20D8A3687003B39F9 /* llfloaterjoystick.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA38F8F00D8A3687003B39F9 /* llfloaterjoystick.cpp */; };
593 AA38F8FE0D8AFCF4003B39F9 /* libndofdev.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AA38F8FD0D8AFCF4003B39F9 /* libndofdev.dylib */; };
591 AAA1336B0A3F94D000419F7C /* lluistring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAA133690A3F94D000419F7C /* lluistring.cpp */; }; 594 AAA1336B0A3F94D000419F7C /* lluistring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAA133690A3F94D000419F7C /* lluistring.cpp */; };
595 AABD9F130D4AD7E7007FB7C4 /* libboost_signals-mt.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AABD9F120D4AD7E7007FB7C4 /* libboost_signals-mt.a */; };
596 AABD9F140D4AD7E7007FB7C4 /* libboost_signals-mt.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AABD9F120D4AD7E7007FB7C4 /* libboost_signals-mt.a */; };
592 AAC121A50A93A8380080E8A9 /* llfloatersellland.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC121A30A93A8380080E8A9 /* llfloatersellland.cpp */; }; 597 AAC121A50A93A8380080E8A9 /* llfloatersellland.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC121A30A93A8380080E8A9 /* llfloatersellland.cpp */; };
593 AAE98CC20B38FE0800E2F204 /* llimageworker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE98CC00B38FE0800E2F204 /* llimageworker.cpp */; }; 598 AAE98CC20B38FE0800E2F204 /* llimageworker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE98CC00B38FE0800E2F204 /* llimageworker.cpp */; };
594 AAEAAF270A8104D8005F0707 /* llscrollingpanellist.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEAAF250A8104D8005F0707 /* llscrollingpanellist.cpp */; }; 599 AAEAAF270A8104D8005F0707 /* llscrollingpanellist.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEAAF250A8104D8005F0707 /* llscrollingpanellist.cpp */; };
595 AAF5FFD20B13F71900D28A84 /* lltexturecache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF5FFD00B13F71900D28A84 /* lltexturecache.cpp */; }; 600 AAF5FFD20B13F71900D28A84 /* lltexturecache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF5FFD00B13F71900D28A84 /* lltexturecache.cpp */; };
596 C16C08500B4AE6C7009AD67F /* llfloaterinspect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C16C084E0B4AE6C7009AD67F /* llfloaterinspect.cpp */; }; 601 C16C08500B4AE6C7009AD67F /* llfloaterinspect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C16C084E0B4AE6C7009AD67F /* llfloaterinspect.cpp */; };
602 C19628F50D53D7AB007C909A /* llfloatersettingsdebug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C19628F30D53D7AB007C909A /* llfloatersettingsdebug.cpp */; };
597 C1E4A5760CC020FC005FB0A6 /* llcrashloggermac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1E4A5750CC020FC005FB0A6 /* llcrashloggermac.cpp */; }; 603 C1E4A5760CC020FC005FB0A6 /* llcrashloggermac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1E4A5750CC020FC005FB0A6 /* llcrashloggermac.cpp */; };
598 C1E4A5790CC0210F005FB0A6 /* llcrashlogger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1E4A5770CC0210F005FB0A6 /* llcrashlogger.cpp */; }; 604 C1E4A5790CC0210F005FB0A6 /* llcrashlogger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1E4A5770CC0210F005FB0A6 /* llcrashlogger.cpp */; };
599 C1E4A57B0CC02160005FB0A6 /* lldate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FD1558220A06BB5F00DE9AE5 /* lldate.cpp */; }; 605 C1E4A57B0CC02160005FB0A6 /* lldate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FD1558220A06BB5F00DE9AE5 /* lldate.cpp */; };
@@ -709,6 +715,9 @@
709 C1F5D0A50B138AEB00827F1D /* lluserrelations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1F5D0A30B138AEB00827F1D /* lluserrelations.cpp */; }; 715 C1F5D0A50B138AEB00827F1D /* lluserrelations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1F5D0A30B138AEB00827F1D /* lluserrelations.cpp */; };
710 C64F673F0AFBED80009732B5 /* lllogchat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64F673D0AFBED80009732B5 /* lllogchat.cpp */; }; 716 C64F673F0AFBED80009732B5 /* lllogchat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64F673D0AFBED80009732B5 /* lllogchat.cpp */; };
711 C64F67420AFBED91009732B5 /* lldirpicker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64F67400AFBED91009732B5 /* lldirpicker.cpp */; }; 717 C64F67420AFBED91009732B5 /* lldirpicker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64F67400AFBED91009732B5 /* lldirpicker.cpp */; };
718 CB0873B60D62226B009600F8 /* lldelayedgestureerror.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CB0873B40D62226B009600F8 /* lldelayedgestureerror.cpp */; };
719 D1BB623D0D91BBEC00001516 /* llfloatervoicedevicesettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D1BB623B0D91BBEB00001516 /* llfloatervoicedevicesettings.cpp */; };
720 D1CA83CE0D62634400C61743 /* llfloaterstats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D1CA83CD0D62634400C61743 /* llfloaterstats.cpp */; };
712 D23289B50C453A3600304FEF /* llfloaterreleasemsg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D23289B30C453A3600304FEF /* llfloaterreleasemsg.cpp */; }; 721 D23289B50C453A3600304FEF /* llfloaterreleasemsg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D23289B30C453A3600304FEF /* llfloaterreleasemsg.cpp */; };
713 D2768CE50CEA38940000BD66 /* llfloaterlagmeter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D2768CE30CEA38940000BD66 /* llfloaterlagmeter.cpp */; }; 722 D2768CE50CEA38940000BD66 /* llfloaterlagmeter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D2768CE30CEA38940000BD66 /* llfloaterlagmeter.cpp */; };
714 D62830DB0B4DC76300F8830F /* llimagej2coj.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D62830D80B4DC76300F8830F /* llimagej2coj.cpp */; }; 723 D62830DB0B4DC76300F8830F /* llimagej2coj.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D62830D80B4DC76300F8830F /* llimagej2coj.cpp */; };
@@ -766,7 +775,6 @@
766 EB3EE6FA083ABB5E002BF676 /* lluictrlfactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EB3EE6C2083ABB5D002BF676 /* lluictrlfactory.cpp */; }; 775 EB3EE6FA083ABB5E002BF676 /* lluictrlfactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EB3EE6C2083ABB5D002BF676 /* lluictrlfactory.cpp */; };
767 EB3EE6FC083ABB5E002BF676 /* llviewborder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EB3EE6C4083ABB5E002BF676 /* llviewborder.cpp */; }; 776 EB3EE6FC083ABB5E002BF676 /* llviewborder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EB3EE6C4083ABB5E002BF676 /* llviewborder.cpp */; };
768 EB3EE720083AC23D002BF676 /* llviewertexteditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EB3EE712083AC23D002BF676 /* llviewertexteditor.cpp */; }; 777 EB3EE720083AC23D002BF676 /* llviewertexteditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EB3EE712083AC23D002BF676 /* llviewertexteditor.cpp */; };
769 EB3EE722083AC23D002BF676 /* llvieweruictrlfactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EB3EE714083AC23D002BF676 /* llvieweruictrlfactory.cpp */; };
770 EB9E831F082AEEF3007B4479 /* llmenugl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EB9E8314082AEEF2007B4479 /* llmenugl.cpp */; }; 778 EB9E831F082AEEF3007B4479 /* llmenugl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EB9E8314082AEEF2007B4479 /* llmenugl.cpp */; };
771 EB9E8321082AEEF3007B4479 /* llresmgr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EB9E8316082AEEF2007B4479 /* llresmgr.cpp */; }; 779 EB9E8321082AEEF3007B4479 /* llresmgr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EB9E8316082AEEF2007B4479 /* llresmgr.cpp */; };
772 EB9E8323082AEEF3007B4479 /* llui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EB9E8318082AEEF3007B4479 /* llui.cpp */; }; 780 EB9E8323082AEEF3007B4479 /* llui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EB9E8318082AEEF3007B4479 /* llui.cpp */; };
@@ -830,6 +838,8 @@
830 FDE8766609BEA3C800AF6316 /* libxmlrpc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FDE8765809BEA39700AF6316 /* libxmlrpc.a */; }; 838 FDE8766609BEA3C800AF6316 /* libxmlrpc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FDE8765809BEA39700AF6316 /* libxmlrpc.a */; };
831 FE0AEE2D0D2D96D20097256A /* libllmozlib2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = FE0AEE2C0D2D96D20097256A /* libllmozlib2.dylib */; }; 839 FE0AEE2D0D2D96D20097256A /* libllmozlib2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = FE0AEE2C0D2D96D20097256A /* libllmozlib2.dylib */; };
832 FE0AEE4D0D2D9C6E0097256A /* llparcelselection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE0AEE4A0D2D9C6E0097256A /* llparcelselection.cpp */; }; 840 FE0AEE4D0D2D9C6E0097256A /* llparcelselection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE0AEE4A0D2D9C6E0097256A /* llparcelselection.cpp */; };
841 FE42C3140D231D1A00D9F143 /* llcommandlineparser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE42C3120D231D1A00D9F143 /* llcommandlineparser.cpp */; };
842 FE43BB870D368B4100C93D63 /* libboost_program_options-mt.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FE43BB860D368B4100C93D63 /* libboost_program_options-mt.a */; };
833 FE5138790CD80BAE00F32EE3 /* lldebugmessagebox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE5138700CD80BAE00F32EE3 /* lldebugmessagebox.cpp */; }; 843 FE5138790CD80BAE00F32EE3 /* lldebugmessagebox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE5138700CD80BAE00F32EE3 /* lldebugmessagebox.cpp */; };
834 FE51387B0CD80BAE00F32EE3 /* llfloaterclassified.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE5138730CD80BAE00F32EE3 /* llfloaterclassified.cpp */; }; 844 FE51387B0CD80BAE00F32EE3 /* llfloaterclassified.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE5138730CD80BAE00F32EE3 /* llfloaterclassified.cpp */; };
835 FE51387C0CD80BAE00F32EE3 /* llfloaterevent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE5138750CD80BAE00F32EE3 /* llfloaterevent.cpp */; }; 845 FE51387C0CD80BAE00F32EE3 /* llfloaterevent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE5138750CD80BAE00F32EE3 /* llfloaterevent.cpp */; };
@@ -1012,6 +1022,8 @@
1012 1A5104460ABF5B6600520F6D /* llnotecard.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llnotecard.h; sourceTree = "<group>"; }; 1022 1A5104460ABF5B6600520F6D /* llnotecard.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llnotecard.h; sourceTree = "<group>"; };
1013 1A5104560ABF60A800520F6D /* llviewerassetstorage.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llviewerassetstorage.cpp; sourceTree = "<group>"; }; 1023 1A5104560ABF60A800520F6D /* llviewerassetstorage.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llviewerassetstorage.cpp; sourceTree = "<group>"; };
1014 1A5104580ABF60BF00520F6D /* llviewerassetstorage.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llviewerassetstorage.h; sourceTree = "<group>"; }; 1024 1A5104580ABF60BF00520F6D /* llviewerassetstorage.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llviewerassetstorage.h; sourceTree = "<group>"; };
1025 1A531BFA0D81056E00DEB305 /* llfloatercamera.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = llfloatercamera.h; sourceTree = "<group>"; };
1026 1A531BFB0D81056E00DEB305 /* llfloatercamera.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = llfloatercamera.cpp; sourceTree = "<group>"; };
1015 1A57B92C09F8303A004D8B1A /* lllslconstants.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lllslconstants.h; sourceTree = "<group>"; }; 1027 1A57B92C09F8303A004D8B1A /* lllslconstants.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lllslconstants.h; sourceTree = "<group>"; };
1016 1A57B92D09F8303A004D8B1A /* llagentconstants.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llagentconstants.h; sourceTree = "<group>"; }; 1028 1A57B92D09F8303A004D8B1A /* llagentconstants.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llagentconstants.h; sourceTree = "<group>"; };
1017 1A5B3B530A70146900A90391 /* llfloaterbump.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaterbump.h; sourceTree = "<group>"; }; 1029 1A5B3B530A70146900A90391 /* llfloaterbump.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaterbump.h; sourceTree = "<group>"; };
@@ -1061,6 +1073,8 @@
1061 1AD394140CAB0023004BA76A /* llcommandhandler.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llcommandhandler.h; sourceTree = "<group>"; }; 1073 1AD394140CAB0023004BA76A /* llcommandhandler.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llcommandhandler.h; sourceTree = "<group>"; };
1062 1AD61F6A0AC09B1900507FB9 /* llimview.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llimview.cpp; sourceTree = "<group>"; }; 1074 1AD61F6A0AC09B1900507FB9 /* llimview.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llimview.cpp; sourceTree = "<group>"; };
1063 1AD61F6C0AC09B2600507FB9 /* llimview.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llimview.h; sourceTree = "<group>"; }; 1075 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>"; };
1077 1ADE58930D7CCF6000183F7F /* llfloaterhud.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = llfloaterhud.h; sourceTree = "<group>"; };
1064 1AE5D70F0844FBD200278605 /* llwebbrowserctrl.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llwebbrowserctrl.h; sourceTree = "<group>"; }; 1078 1AE5D70F0844FBD200278605 /* llwebbrowserctrl.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llwebbrowserctrl.h; sourceTree = "<group>"; };
1065 1AE5D7100844FBD300278605 /* llwebbrowserctrl.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llwebbrowserctrl.cpp; sourceTree = "<group>"; }; 1079 1AE5D7100844FBD300278605 /* llwebbrowserctrl.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llwebbrowserctrl.cpp; sourceTree = "<group>"; };
1066 1AEF0A560B2DFE67003F107C /* llctrlselectioninterface.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llctrlselectioninterface.cpp; sourceTree = "<group>"; }; 1080 1AEF0A560B2DFE67003F107C /* llctrlselectioninterface.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llctrlselectioninterface.cpp; sourceTree = "<group>"; };
@@ -1076,7 +1090,7 @@
1076 1AF9D85008B405630094E8E7 /* llqueuedthread.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llqueuedthread.h; sourceTree = "<group>"; }; 1090 1AF9D85008B405630094E8E7 /* llqueuedthread.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llqueuedthread.h; sourceTree = "<group>"; };
1077 1AFA40B40A2DFD7200C13F70 /* llsavedsettingsglue.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llsavedsettingsglue.cpp; sourceTree = "<group>"; }; 1091 1AFA40B40A2DFD7200C13F70 /* llsavedsettingsglue.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llsavedsettingsglue.cpp; sourceTree = "<group>"; };
1078 1AFA40B60A2DFD8200C13F70 /* llsavedsettingsglue.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llsavedsettingsglue.h; sourceTree = "<group>"; }; 1092 1AFA40B60A2DFD8200C13F70 /* llsavedsettingsglue.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llsavedsettingsglue.h; sourceTree = "<group>"; };
1079 1C0D59500CF0B2B800222B10 /* libboost_regex-gcc.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libboost_regex-gcc.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 1093 1C0D59500CF0B2B800222B10 /* libboost_regex-mt.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libboost_regex-mt.a"; path = "build/Development/libboost_regex-mt.a"; sourceTree = "<group>"; };
1080 1CBB67D20C7CCCB2007DAAAE /* llfloaterwater.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterwater.cpp; sourceTree = "<group>"; }; 1094 1CBB67D20C7CCCB2007DAAAE /* llfloaterwater.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterwater.cpp; sourceTree = "<group>"; };
1081 1CBB67D30C7CCCB2007DAAAE /* llfloaterwater.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaterwater.h; sourceTree = "<group>"; }; 1095 1CBB67D30C7CCCB2007DAAAE /* llfloaterwater.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaterwater.h; sourceTree = "<group>"; };
1082 1CBB67D40C7CCCB2007DAAAE /* llwaterparammanager.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llwaterparammanager.cpp; sourceTree = "<group>"; }; 1096 1CBB67D40C7CCCB2007DAAAE /* llwaterparammanager.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llwaterparammanager.cpp; sourceTree = "<group>"; };
@@ -1108,7 +1122,6 @@
1108 26F529B3051F61DF00A80050 /* llstatbar.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llstatbar.cpp; sourceTree = SOURCE_ROOT; }; 1122 26F529B3051F61DF00A80050 /* llstatbar.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llstatbar.cpp; sourceTree = SOURCE_ROOT; };
1109 26F529BA051F61DF00A80050 /* pipeline.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = pipeline.cpp; sourceTree = SOURCE_ROOT; }; 1123 26F529BA051F61DF00A80050 /* pipeline.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = pipeline.cpp; sourceTree = SOURCE_ROOT; };
1110 26F529BD051F61DF00A80050 /* noise.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = noise.cpp; sourceTree = "<group>"; }; 1124 26F529BD051F61DF00A80050 /* noise.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = noise.cpp; sourceTree = "<group>"; };
1111 26F529BE051F61DF00A80050 /* moviemaker.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = moviemaker.cpp; sourceTree = SOURCE_ROOT; };
1112 26F529BF051F61DF00A80050 /* llworldmapview.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llworldmapview.cpp; sourceTree = SOURCE_ROOT; }; 1125 26F529BF051F61DF00A80050 /* llworldmapview.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llworldmapview.cpp; sourceTree = SOURCE_ROOT; };
1113 26F529C0051F61DF00A80050 /* llworldmap.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llworldmap.cpp; sourceTree = SOURCE_ROOT; }; 1126 26F529C0051F61DF00A80050 /* llworldmap.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llworldmap.cpp; sourceTree = SOURCE_ROOT; };
1114 26F529C1051F61DF00A80050 /* llworld.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llworld.cpp; sourceTree = SOURCE_ROOT; }; 1127 26F529C1051F61DF00A80050 /* llworld.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llworld.cpp; sourceTree = SOURCE_ROOT; };
@@ -1145,7 +1158,7 @@
1145 26F529E3051F61DF00A80050 /* llviewermessage.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llviewermessage.cpp; sourceTree = SOURCE_ROOT; }; 1158 26F529E3051F61DF00A80050 /* llviewermessage.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llviewermessage.cpp; sourceTree = SOURCE_ROOT; };
1146 26F529E4051F61DF00A80050 /* llviewermenu.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llviewermenu.cpp; sourceTree = SOURCE_ROOT; }; 1159 26F529E4051F61DF00A80050 /* llviewermenu.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llviewermenu.cpp; sourceTree = SOURCE_ROOT; };
1147 26F529E5051F61DF00A80050 /* llsprite.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llsprite.cpp; sourceTree = SOURCE_ROOT; }; 1160 26F529E5051F61DF00A80050 /* llsprite.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llsprite.cpp; sourceTree = SOURCE_ROOT; };
1148 26F529E7051F61DF00A80050 /* llsphere.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llsphere.cpp; sourceTree = SOURCE_ROOT; }; 1161 26F529E7051F61DF00A80050 /* llrendersphere.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llrendersphere.cpp; sourceTree = SOURCE_ROOT; };
1149 26F529E9051F61DF00A80050 /* llpreviewtexture.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpreviewtexture.cpp; sourceTree = SOURCE_ROOT; }; 1162 26F529E9051F61DF00A80050 /* llpreviewtexture.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpreviewtexture.cpp; sourceTree = SOURCE_ROOT; };
1150 26F529EA051F61DF00A80050 /* llpreviewsound.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpreviewsound.cpp; sourceTree = SOURCE_ROOT; }; 1163 26F529EA051F61DF00A80050 /* llpreviewsound.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpreviewsound.cpp; sourceTree = SOURCE_ROOT; };
1151 26F529EB051F61DF00A80050 /* llspatialpartition.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llspatialpartition.cpp; sourceTree = SOURCE_ROOT; }; 1164 26F529EB051F61DF00A80050 /* llspatialpartition.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llspatialpartition.cpp; sourceTree = SOURCE_ROOT; };
@@ -1178,7 +1191,6 @@
1178 26F52A17051F61DF00A80050 /* llfloaterland.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterland.cpp; sourceTree = SOURCE_ROOT; }; 1191 26F52A17051F61DF00A80050 /* llfloaterland.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterland.cpp; sourceTree = SOURCE_ROOT; };
1179 26F52A18051F61DF00A80050 /* llpanelface.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpanelface.cpp; sourceTree = SOURCE_ROOT; }; 1192 26F52A18051F61DF00A80050 /* llpanelface.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpanelface.cpp; sourceTree = SOURCE_ROOT; };
1180 26F52A19051F61DF00A80050 /* llpanelevent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpanelevent.cpp; sourceTree = SOURCE_ROOT; }; 1193 26F52A19051F61DF00A80050 /* llpanelevent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpanelevent.cpp; sourceTree = SOURCE_ROOT; };
1181 26F52A1B051F61DF00A80050 /* llcontroldef.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llcontroldef.cpp; sourceTree = SOURCE_ROOT; };
1182 26F52A1E051F61DF00A80050 /* llframestatview.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llframestatview.cpp; sourceTree = SOURCE_ROOT; }; 1194 26F52A1E051F61DF00A80050 /* llframestatview.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llframestatview.cpp; sourceTree = SOURCE_ROOT; };
1183 26F52A1F051F61DF00A80050 /* llframestats.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llframestats.cpp; sourceTree = SOURCE_ROOT; }; 1195 26F52A1F051F61DF00A80050 /* llframestats.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llframestats.cpp; sourceTree = SOURCE_ROOT; };
1184 26F52A24051F61DF00A80050 /* llhudobject.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llhudobject.cpp; sourceTree = SOURCE_ROOT; }; 1196 26F52A24051F61DF00A80050 /* llhudobject.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llhudobject.cpp; sourceTree = SOURCE_ROOT; };
@@ -1263,7 +1275,6 @@
1263 26F52A98051F61DF00A80050 /* llnamelistctrl.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llnamelistctrl.cpp; sourceTree = SOURCE_ROOT; }; 1275 26F52A98051F61DF00A80050 /* llnamelistctrl.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llnamelistctrl.cpp; sourceTree = SOURCE_ROOT; };
1264 26F52A9A051F61DF00A80050 /* llmaniptranslate.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llmaniptranslate.cpp; sourceTree = SOURCE_ROOT; }; 1276 26F52A9A051F61DF00A80050 /* llmaniptranslate.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llmaniptranslate.cpp; sourceTree = SOURCE_ROOT; };
1265 26F52A9B051F61DF00A80050 /* llmanipscale.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llmanipscale.cpp; sourceTree = SOURCE_ROOT; }; 1277 26F52A9B051F61DF00A80050 /* llmanipscale.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llmanipscale.cpp; sourceTree = SOURCE_ROOT; };
1266 26F52A9D051F61DF00A80050 /* head.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = head.cpp; sourceTree = SOURCE_ROOT; };
1267 26F52A9F051F61DF00A80050 /* llfloaternamedesc.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaternamedesc.cpp; sourceTree = SOURCE_ROOT; }; 1278 26F52A9F051F61DF00A80050 /* llfloaternamedesc.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaternamedesc.cpp; sourceTree = SOURCE_ROOT; };
1268 26F52AA0051F61DF00A80050 /* llpanelplace.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpanelplace.cpp; sourceTree = SOURCE_ROOT; }; 1279 26F52AA0051F61DF00A80050 /* llpanelplace.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpanelplace.cpp; sourceTree = SOURCE_ROOT; };
1269 26F52AA1051F61DF00A80050 /* llpanelpermissions.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpanelpermissions.cpp; sourceTree = SOURCE_ROOT; }; 1280 26F52AA1051F61DF00A80050 /* llpanelpermissions.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpanelpermissions.cpp; sourceTree = SOURCE_ROOT; };
@@ -1287,7 +1298,6 @@
1287 26F52ABD051F61DF00A80050 /* llpreview.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpreview.cpp; sourceTree = SOURCE_ROOT; }; 1298 26F52ABD051F61DF00A80050 /* llpreview.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpreview.cpp; sourceTree = SOURCE_ROOT; };
1288 26F52ABF051F61DF00A80050 /* llbox.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llbox.cpp; sourceTree = SOURCE_ROOT; }; 1299 26F52ABF051F61DF00A80050 /* llbox.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llbox.cpp; sourceTree = SOURCE_ROOT; };
1289 26F52AC2051F61DF00A80050 /* llfloaterreporter.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterreporter.cpp; sourceTree = SOURCE_ROOT; }; 1300 26F52AC2051F61DF00A80050 /* llfloaterreporter.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterreporter.cpp; sourceTree = SOURCE_ROOT; };
1290 26F52AC5051F61DF00A80050 /* llcameraview.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llcameraview.cpp; sourceTree = SOURCE_ROOT; };
1291 26F52AC6051F61DF00A80050 /* llcompilequeue.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llcompilequeue.cpp; sourceTree = SOURCE_ROOT; }; 1301 26F52AC6051F61DF00A80050 /* llcompilequeue.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llcompilequeue.cpp; sourceTree = SOURCE_ROOT; };
1292 26F52AC7051F61DF00A80050 /* llpanelgroupvoting.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpanelgroupvoting.cpp; sourceTree = SOURCE_ROOT; }; 1302 26F52AC7051F61DF00A80050 /* llpanelgroupvoting.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpanelgroupvoting.cpp; sourceTree = SOURCE_ROOT; };
1293 26F52ACA051F61DF00A80050 /* lldrawpoolsimple.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = lldrawpoolsimple.cpp; sourceTree = SOURCE_ROOT; }; 1303 26F52ACA051F61DF00A80050 /* lldrawpoolsimple.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = lldrawpoolsimple.cpp; sourceTree = SOURCE_ROOT; };
@@ -1326,6 +1336,8 @@
1326 38D0FA6F0B4BF8C5003323BA /* lltemplatemessagebuilder.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lltemplatemessagebuilder.h; sourceTree = "<group>"; }; 1336 38D0FA6F0B4BF8C5003323BA /* lltemplatemessagebuilder.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lltemplatemessagebuilder.h; sourceTree = "<group>"; };
1327 38D0FA700B4BF8C5003323BA /* llmessagebuilder.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llmessagebuilder.h; sourceTree = "<group>"; }; 1337 38D0FA700B4BF8C5003323BA /* llmessagebuilder.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llmessagebuilder.h; sourceTree = "<group>"; };
1328 38D0FA710B4BF8C5003323BA /* llmsgvariabletype.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llmsgvariabletype.h; sourceTree = "<group>"; }; 1338 38D0FA710B4BF8C5003323BA /* llmsgvariabletype.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llmsgvariabletype.h; sourceTree = "<group>"; };
1339 496B968B0C022A69009833CB /* llline.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llline.cpp; sourceTree = "<group>"; };
1340 496B968C0C022A69009833CB /* llline.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llline.h; sourceTree = "<group>"; };
1329 5503B89A05446B15003D051F /* Info-SecondLifeVorbis.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Info-SecondLifeVorbis.plist"; sourceTree = "<group>"; }; 1341 5503B89A05446B15003D051F /* Info-SecondLifeVorbis.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Info-SecondLifeVorbis.plist"; sourceTree = "<group>"; };
1330 5503BD0605446B20003D051F /* Info-SecondLife.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Info-SecondLife.plist"; sourceTree = "<group>"; }; 1342 5503BD0605446B20003D051F /* Info-SecondLife.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Info-SecondLife.plist"; sourceTree = "<group>"; };
1331 5503BD0705446B20003D051F /* Second Life.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Second Life.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 1343 5503BD0705446B20003D051F /* Second Life.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Second Life.app"; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -1666,8 +1678,6 @@
1666 61923DA5074AE4F2005E1F34 /* llimagetga.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llimagetga.h; sourceTree = "<group>"; }; 1678 61923DA5074AE4F2005E1F34 /* llimagetga.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llimagetga.h; sourceTree = "<group>"; };
1667 61923DA8074AE4F3005E1F34 /* llmapimagetype.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llmapimagetype.h; sourceTree = "<group>"; }; 1679 61923DA8074AE4F3005E1F34 /* llmapimagetype.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llmapimagetype.h; sourceTree = "<group>"; };
1668 6192E764074A7CE9005E1F34 /* libllcommon.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libllcommon.a; sourceTree = BUILT_PRODUCTS_DIR; }; 1680 6192E764074A7CE9005E1F34 /* libllcommon.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libllcommon.a; sourceTree = BUILT_PRODUCTS_DIR; };
1669 79256EA10C57D6A4000AAFA4 /* llfloatervoicewizard.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloatervoicewizard.cpp; sourceTree = "<group>"; };
1670 79256EA20C57D6A4000AAFA4 /* llfloatervoicewizard.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloatervoicewizard.h; sourceTree = "<group>"; };
1671 84401E2D0A13CC9A006720A5 /* llfloatergroupinvite.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloatergroupinvite.cpp; sourceTree = "<group>"; }; 1681 84401E2D0A13CC9A006720A5 /* llfloatergroupinvite.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloatergroupinvite.cpp; sourceTree = "<group>"; };
1672 84401E2E0A13CC9A006720A5 /* llfloatergroupinvite.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloatergroupinvite.h; sourceTree = "<group>"; }; 1682 84401E2E0A13CC9A006720A5 /* llfloatergroupinvite.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloatergroupinvite.h; sourceTree = "<group>"; };
1673 84401E300A13CCB2006720A5 /* llpanelgroupinvite.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpanelgroupinvite.cpp; sourceTree = "<group>"; }; 1683 84401E300A13CCB2006720A5 /* llpanelgroupinvite.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpanelgroupinvite.cpp; sourceTree = "<group>"; };
@@ -1805,7 +1815,6 @@
1805 997B4BD406015820001B0407 /* randgauss.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = randgauss.h; sourceTree = SOURCE_ROOT; }; 1815 997B4BD406015820001B0407 /* randgauss.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = randgauss.h; sourceTree = SOURCE_ROOT; };
1806 997B4BD506015820001B0407 /* pipeline.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = pipeline.h; sourceTree = SOURCE_ROOT; }; 1816 997B4BD506015820001B0407 /* pipeline.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = pipeline.h; sourceTree = SOURCE_ROOT; };
1807 997B4BD906015821001B0407 /* noise.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = noise.h; sourceTree = SOURCE_ROOT; }; 1817 997B4BD906015821001B0407 /* noise.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = noise.h; sourceTree = SOURCE_ROOT; };
1808 997B4BDA06015821001B0407 /* moviemaker.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = moviemaker.h; sourceTree = SOURCE_ROOT; };
1809 997B4BDB06015821001B0407 /* macview_Prefix.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = macview_Prefix.h; sourceTree = SOURCE_ROOT; }; 1818 997B4BDB06015821001B0407 /* macview_Prefix.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = macview_Prefix.h; sourceTree = SOURCE_ROOT; };
1810 997B4BDC06015821001B0407 /* macmain.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = macmain.h; sourceTree = SOURCE_ROOT; }; 1819 997B4BDC06015821001B0407 /* macmain.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = macmain.h; sourceTree = SOURCE_ROOT; };
1811 997B4BDE06015821001B0407 /* llworldmapview.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llworldmapview.h; sourceTree = SOURCE_ROOT; }; 1820 997B4BDE06015821001B0407 /* llworldmapview.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llworldmapview.h; sourceTree = SOURCE_ROOT; };
@@ -1888,7 +1897,7 @@
1888 997B4C4206015821001B0407 /* llstatgraph.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llstatgraph.h; sourceTree = SOURCE_ROOT; }; 1897 997B4C4206015821001B0407 /* llstatgraph.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llstatgraph.h; sourceTree = SOURCE_ROOT; };
1889 997B4C4306015821001B0407 /* llstatbar.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llstatbar.h; sourceTree = SOURCE_ROOT; }; 1898 997B4C4306015821001B0407 /* llstatbar.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llstatbar.h; sourceTree = SOURCE_ROOT; };
1890 997B4C4406015821001B0407 /* llsprite.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llsprite.h; sourceTree = SOURCE_ROOT; }; 1899 997B4C4406015821001B0407 /* llsprite.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llsprite.h; sourceTree = SOURCE_ROOT; };
1891 997B4C4606015821001B0407 /* llsphere.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llsphere.h; sourceTree = SOURCE_ROOT; }; 1900 997B4C4606015821001B0407 /* llrendersphere.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llrendersphere.h; sourceTree = SOURCE_ROOT; };
1892 997B4C4706015821001B0407 /* llspatialpartition.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llspatialpartition.h; sourceTree = SOURCE_ROOT; }; 1901 997B4C4706015821001B0407 /* llspatialpartition.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llspatialpartition.h; sourceTree = SOURCE_ROOT; };
1893 997B4C4A06015821001B0407 /* llsurfacepatch.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llsurfacepatch.h; sourceTree = SOURCE_ROOT; }; 1902 997B4C4A06015821001B0407 /* llsurfacepatch.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llsurfacepatch.h; sourceTree = SOURCE_ROOT; };
1894 997B4C4B06015821001B0407 /* llsurface.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llsurface.h; sourceTree = SOURCE_ROOT; }; 1903 997B4C4B06015821001B0407 /* llsurface.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llsurface.h; sourceTree = SOURCE_ROOT; };
@@ -2002,7 +2011,6 @@
2002 997B4CEC06015822001B0407 /* llface.inl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = llface.inl; sourceTree = SOURCE_ROOT; }; 2011 997B4CEC06015822001B0407 /* llface.inl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = llface.inl; sourceTree = SOURCE_ROOT; };
2003 997B4CEE06015822001B0407 /* llcylinder.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llcylinder.h; sourceTree = SOURCE_ROOT; }; 2012 997B4CEE06015822001B0407 /* llcylinder.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llcylinder.h; sourceTree = SOURCE_ROOT; };
2004 997B4CEF06015822001B0407 /* llcubemap.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llcubemap.h; sourceTree = SOURCE_ROOT; }; 2013 997B4CEF06015822001B0407 /* llcubemap.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llcubemap.h; sourceTree = SOURCE_ROOT; };
2005 997B4CF006015822001B0407 /* audiosettings.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = audiosettings.h; sourceTree = SOURCE_ROOT; };
2006 997B4CF106015822001B0407 /* llface.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llface.h; sourceTree = SOURCE_ROOT; }; 2014 997B4CF106015822001B0407 /* llface.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llface.h; sourceTree = SOURCE_ROOT; };
2007 997B4CF206015822001B0407 /* llemote.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llemote.h; sourceTree = SOURCE_ROOT; }; 2015 997B4CF206015822001B0407 /* llemote.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llemote.h; sourceTree = SOURCE_ROOT; };
2008 997B4CF406015822001B0407 /* lldriverparam.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lldriverparam.h; sourceTree = SOURCE_ROOT; }; 2016 997B4CF406015822001B0407 /* lldriverparam.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lldriverparam.h; sourceTree = SOURCE_ROOT; };
@@ -2026,7 +2034,6 @@
2026 997B4D0C06015823001B0407 /* llcolorscheme.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llcolorscheme.h; sourceTree = SOURCE_ROOT; }; 2034 997B4D0C06015823001B0407 /* llcolorscheme.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llcolorscheme.h; sourceTree = SOURCE_ROOT; };
2027 997B4D0D06015823001B0407 /* llcloud.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llcloud.h; sourceTree = SOURCE_ROOT; }; 2035 997B4D0D06015823001B0407 /* llcloud.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llcloud.h; sourceTree = SOURCE_ROOT; };
2028 997B4D1006015823001B0407 /* llchatbar.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llchatbar.h; sourceTree = SOURCE_ROOT; }; 2036 997B4D1006015823001B0407 /* llchatbar.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llchatbar.h; sourceTree = SOURCE_ROOT; };
2029 997B4D1106015823001B0407 /* llcameraview.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llcameraview.h; sourceTree = SOURCE_ROOT; };
2030 997B4D1206015823001B0407 /* llcallingcard.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llcallingcard.h; sourceTree = SOURCE_ROOT; }; 2037 997B4D1206015823001B0407 /* llcallingcard.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llcallingcard.h; sourceTree = SOURCE_ROOT; };
2031 997B4D1306015823001B0407 /* llcallbacklist.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llcallbacklist.h; sourceTree = SOURCE_ROOT; }; 2038 997B4D1306015823001B0407 /* llcallbacklist.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llcallbacklist.h; sourceTree = SOURCE_ROOT; };
2032 997B4D1606015823001B0407 /* llbox.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llbox.h; sourceTree = SOURCE_ROOT; }; 2039 997B4D1606015823001B0407 /* llbox.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llbox.h; sourceTree = SOURCE_ROOT; };
@@ -2034,7 +2041,6 @@
2034 997B4D1E06015823001B0407 /* llappearance.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llappearance.h; sourceTree = SOURCE_ROOT; }; 2041 997B4D1E06015823001B0407 /* llappearance.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llappearance.h; sourceTree = SOURCE_ROOT; };
2035 997B4D2206015823001B0407 /* llagentpilot.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llagentpilot.h; sourceTree = SOURCE_ROOT; }; 2042 997B4D2206015823001B0407 /* llagentpilot.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llagentpilot.h; sourceTree = SOURCE_ROOT; };
2036 997B4D2306015823001B0407 /* llagent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llagent.h; sourceTree = SOURCE_ROOT; }; 2043 997B4D2306015823001B0407 /* llagent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llagent.h; sourceTree = SOURCE_ROOT; };
2037 997B4D2406015823001B0407 /* head.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = head.h; sourceTree = SOURCE_ROOT; };
2038 9985A08E0AC1FE3600579AFB /* llwindowmacosx-objc.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = "llwindowmacosx-objc.h"; sourceTree = "<group>"; }; 2044 9985A08E0AC1FE3600579AFB /* llwindowmacosx-objc.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = "llwindowmacosx-objc.h"; sourceTree = "<group>"; };
2039 9985A08F0AC1FE3600579AFB /* llwindowmacosx-objc.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = "llwindowmacosx-objc.mm"; sourceTree = "<group>"; }; 2045 9985A08F0AC1FE3600579AFB /* llwindowmacosx-objc.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = "llwindowmacosx-objc.mm"; sourceTree = "<group>"; };
2040 9985A1270AC1FE4E00579AFB /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = ../../../../../../../../System/Library/Frameworks/AppKit.framework; sourceTree = "<group>"; }; 2046 9985A1270AC1FE4E00579AFB /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = ../../../../../../../../System/Library/Frameworks/AppKit.framework; sourceTree = "<group>"; };
@@ -2167,8 +2173,12 @@
2167 AA11834F0C1DF9C400FDE5BA /* llpanelaudiovolume.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llpanelaudiovolume.h; sourceTree = "<group>"; }; 2173 AA11834F0C1DF9C400FDE5BA /* llpanelaudiovolume.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llpanelaudiovolume.h; sourceTree = "<group>"; };
2168 AA348DF80B0EAB31002C3015 /* llcurl.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llcurl.cpp; sourceTree = "<group>"; }; 2174 AA348DF80B0EAB31002C3015 /* llcurl.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llcurl.cpp; sourceTree = "<group>"; };
2169 AA348DF90B0EAB31002C3015 /* llcurl.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llcurl.h; sourceTree = "<group>"; }; 2175 AA348DF90B0EAB31002C3015 /* llcurl.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llcurl.h; sourceTree = "<group>"; };
2176 AA38F8F00D8A3687003B39F9 /* llfloaterjoystick.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterjoystick.cpp; sourceTree = "<group>"; };
2177 AA38F8F10D8A3687003B39F9 /* llfloaterjoystick.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = llfloaterjoystick.h; sourceTree = "<group>"; };
2178 AA38F8FD0D8AFCF4003B39F9 /* libndofdev.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libndofdev.dylib; path = "../../libraries/universal-darwin/lib_release/libndofdev.dylib"; sourceTree = SOURCE_ROOT; };
2170 AAA133690A3F94D000419F7C /* lluistring.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = lluistring.cpp; sourceTree = "<group>"; }; 2179 AAA133690A3F94D000419F7C /* lluistring.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = lluistring.cpp; sourceTree = "<group>"; };
2171 AAA1336A0A3F94D000419F7C /* lluistring.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lluistring.h; sourceTree = "<group>"; }; 2180 AAA1336A0A3F94D000419F7C /* lluistring.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lluistring.h; sourceTree = "<group>"; };
2181 AABD9F120D4AD7E7007FB7C4 /* libboost_signals-mt.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libboost_signals-mt.a"; path = "../../libraries/i386-darwin/lib_release/libboost_signals-mt.a"; sourceTree = SOURCE_ROOT; };
2172 AAC121A30A93A8380080E8A9 /* llfloatersellland.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloatersellland.cpp; sourceTree = "<group>"; }; 2182 AAC121A30A93A8380080E8A9 /* llfloatersellland.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloatersellland.cpp; sourceTree = "<group>"; };
2173 AAC121A40A93A8380080E8A9 /* llfloatersellland.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloatersellland.h; sourceTree = "<group>"; }; 2183 AAC121A40A93A8380080E8A9 /* llfloatersellland.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloatersellland.h; sourceTree = "<group>"; };
2174 AAE98CC00B38FE0800E2F204 /* llimageworker.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llimageworker.cpp; sourceTree = "<group>"; }; 2184 AAE98CC00B38FE0800E2F204 /* llimageworker.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llimageworker.cpp; sourceTree = "<group>"; };
@@ -2181,6 +2191,8 @@
2181 ABD8702D0B3C68630007C63B /* llvoavatar.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llvoavatar.h; sourceTree = "<group>"; }; 2191 ABD8702D0B3C68630007C63B /* llvoavatar.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llvoavatar.h; sourceTree = "<group>"; };
2182 C16C084E0B4AE6C7009AD67F /* llfloaterinspect.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterinspect.cpp; sourceTree = "<group>"; }; 2192 C16C084E0B4AE6C7009AD67F /* llfloaterinspect.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterinspect.cpp; sourceTree = "<group>"; };
2183 C16C084F0B4AE6C7009AD67F /* llfloaterinspect.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaterinspect.h; sourceTree = "<group>"; }; 2193 C16C084F0B4AE6C7009AD67F /* llfloaterinspect.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaterinspect.h; sourceTree = "<group>"; };
2194 C19628F30D53D7AB007C909A /* llfloatersettingsdebug.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = llfloatersettingsdebug.cpp; sourceTree = "<group>"; };
2195 C19628F40D53D7AB007C909A /* llfloatersettingsdebug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = llfloatersettingsdebug.h; sourceTree = "<group>"; };
2184 C1B2AF890CD679EB004CD4EF /* llcrashloggermac.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llcrashloggermac.h; sourceTree = "<group>"; }; 2196 C1B2AF890CD679EB004CD4EF /* llcrashloggermac.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llcrashloggermac.h; sourceTree = "<group>"; };
2185 C1E4A5750CC020FC005FB0A6 /* llcrashloggermac.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llcrashloggermac.cpp; sourceTree = "<group>"; }; 2197 C1E4A5750CC020FC005FB0A6 /* llcrashloggermac.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llcrashloggermac.cpp; sourceTree = "<group>"; };
2186 C1E4A5770CC0210F005FB0A6 /* llcrashlogger.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = llcrashlogger.cpp; path = ../llcrashlogger/llcrashlogger.cpp; sourceTree = SOURCE_ROOT; }; 2198 C1E4A5770CC0210F005FB0A6 /* llcrashlogger.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = llcrashlogger.cpp; path = ../llcrashlogger/llcrashlogger.cpp; sourceTree = SOURCE_ROOT; };
@@ -2191,7 +2203,14 @@
2191 C64F673E0AFBED80009732B5 /* lllogchat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lllogchat.h; sourceTree = "<group>"; }; 2203 C64F673E0AFBED80009732B5 /* lllogchat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lllogchat.h; sourceTree = "<group>"; };
2192 C64F67400AFBED91009732B5 /* lldirpicker.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = lldirpicker.cpp; sourceTree = "<group>"; }; 2204 C64F67400AFBED91009732B5 /* lldirpicker.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = lldirpicker.cpp; sourceTree = "<group>"; };
2193 C64F67410AFBED91009732B5 /* lldirpicker.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lldirpicker.h; sourceTree = "<group>"; }; 2205 C64F67410AFBED91009732B5 /* lldirpicker.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lldirpicker.h; sourceTree = "<group>"; };
2206 CB0873B40D62226B009600F8 /* lldelayedgestureerror.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lldelayedgestureerror.cpp; sourceTree = "<group>"; };
2207 CB0873B50D62226B009600F8 /* lldelayedgestureerror.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lldelayedgestureerror.h; sourceTree = "<group>"; };
2194 CB162DB40C6CCCFE00BF83BB /* llextendedstatus.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llextendedstatus.h; sourceTree = "<group>"; }; 2208 CB162DB40C6CCCFE00BF83BB /* llextendedstatus.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llextendedstatus.h; sourceTree = "<group>"; };
2209 D158CB820D75F0580060BD44 /* llsmoothstep.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = llsmoothstep.h; sourceTree = "<group>"; };
2210 D1BB623B0D91BBEB00001516 /* llfloatervoicedevicesettings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = llfloatervoicedevicesettings.cpp; sourceTree = "<group>"; };
2211 D1BB623C0D91BBEC00001516 /* llfloatervoicedevicesettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = llfloatervoicedevicesettings.h; sourceTree = "<group>"; };
2212 D1CA83CC0D62634400C61743 /* llfloaterstats.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaterstats.h; sourceTree = "<group>"; };
2213 D1CA83CD0D62634400C61743 /* llfloaterstats.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterstats.cpp; sourceTree = "<group>"; };
2195 D23289B30C453A3600304FEF /* llfloaterreleasemsg.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterreleasemsg.cpp; sourceTree = "<group>"; }; 2214 D23289B30C453A3600304FEF /* llfloaterreleasemsg.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterreleasemsg.cpp; sourceTree = "<group>"; };
2196 D23289B40C453A3600304FEF /* llfloaterreleasemsg.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaterreleasemsg.h; sourceTree = "<group>"; }; 2215 D23289B40C453A3600304FEF /* llfloaterreleasemsg.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaterreleasemsg.h; sourceTree = "<group>"; };
2197 D2768CE30CEA38940000BD66 /* llfloaterlagmeter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterlagmeter.cpp; sourceTree = "<group>"; }; 2216 D2768CE30CEA38940000BD66 /* llfloaterlagmeter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterlagmeter.cpp; sourceTree = "<group>"; };
@@ -2294,8 +2313,6 @@
2294 EB3EE70F083AC23D002BF676 /* llviewercontrol.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llviewercontrol.h; sourceTree = "<group>"; }; 2313 EB3EE70F083AC23D002BF676 /* llviewercontrol.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llviewercontrol.h; sourceTree = "<group>"; };
2295 EB3EE712083AC23D002BF676 /* llviewertexteditor.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llviewertexteditor.cpp; sourceTree = "<group>"; }; 2314 EB3EE712083AC23D002BF676 /* llviewertexteditor.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llviewertexteditor.cpp; sourceTree = "<group>"; };
2296 EB3EE713083AC23D002BF676 /* llviewertexteditor.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llviewertexteditor.h; sourceTree = "<group>"; }; 2315 EB3EE713083AC23D002BF676 /* llviewertexteditor.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llviewertexteditor.h; sourceTree = "<group>"; };
2297 EB3EE714083AC23D002BF676 /* llvieweruictrlfactory.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llvieweruictrlfactory.cpp; sourceTree = "<group>"; };
2298 EB3EE715083AC23D002BF676 /* llvieweruictrlfactory.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llvieweruictrlfactory.h; sourceTree = "<group>"; };
2299 EB3EE725083AC2F2002BF676 /* llimagedxt.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llimagedxt.cpp; sourceTree = "<group>"; }; 2316 EB3EE725083AC2F2002BF676 /* llimagedxt.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llimagedxt.cpp; sourceTree = "<group>"; };
2300 EB3EE726083AC2F2002BF676 /* llimagedxt.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llimagedxt.h; sourceTree = "<group>"; }; 2317 EB3EE726083AC2F2002BF676 /* llimagedxt.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llimagedxt.h; sourceTree = "<group>"; };
2301 EB9E8314082AEEF2007B4479 /* llmenugl.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llmenugl.cpp; sourceTree = "<group>"; }; 2318 EB9E8314082AEEF2007B4479 /* llmenugl.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llmenugl.cpp; sourceTree = "<group>"; };
@@ -2384,6 +2401,9 @@
2384 FE0AEE490D2D9C6E0097256A /* lllcd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lllcd.h; sourceTree = SOURCE_ROOT; }; 2401 FE0AEE490D2D9C6E0097256A /* lllcd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lllcd.h; sourceTree = SOURCE_ROOT; };
2385 FE0AEE4A0D2D9C6E0097256A /* llparcelselection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = llparcelselection.cpp; sourceTree = SOURCE_ROOT; }; 2402 FE0AEE4A0D2D9C6E0097256A /* llparcelselection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = llparcelselection.cpp; sourceTree = SOURCE_ROOT; };
2386 FE0AEE4B0D2D9C6E0097256A /* llparcelselection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = llparcelselection.h; sourceTree = SOURCE_ROOT; }; 2403 FE0AEE4B0D2D9C6E0097256A /* llparcelselection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = llparcelselection.h; sourceTree = SOURCE_ROOT; };
2404 FE42C3120D231D1A00D9F143 /* llcommandlineparser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = llcommandlineparser.cpp; sourceTree = "<group>"; };
2405 FE42C3130D231D1A00D9F143 /* llcommandlineparser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = llcommandlineparser.h; sourceTree = "<group>"; };
2406 FE43BB860D368B4100C93D63 /* libboost_program_options-mt.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libboost_program_options-mt.a"; sourceTree = BUILT_PRODUCTS_DIR; };
2387 FE51386F0CD80BAE00F32EE3 /* llclassifiedinfo.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llclassifiedinfo.h; sourceTree = "<group>"; }; 2407 FE51386F0CD80BAE00F32EE3 /* llclassifiedinfo.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llclassifiedinfo.h; sourceTree = "<group>"; };
2388 FE5138700CD80BAE00F32EE3 /* lldebugmessagebox.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = lldebugmessagebox.cpp; sourceTree = "<group>"; }; 2408 FE5138700CD80BAE00F32EE3 /* lldebugmessagebox.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = lldebugmessagebox.cpp; sourceTree = "<group>"; };
2389 FE5138710CD80BAE00F32EE3 /* lldebugmessagebox.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lldebugmessagebox.h; sourceTree = "<group>"; }; 2409 FE5138710CD80BAE00F32EE3 /* lldebugmessagebox.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lldebugmessagebox.h; sourceTree = "<group>"; };
@@ -2473,7 +2493,10 @@
2473 88A95BCA0C14D92C0027E363 /* libresolv.dylib in Frameworks */, 2493 88A95BCA0C14D92C0027E363 /* libresolv.dylib in Frameworks */,
2474 88AA282C0C17720D0032DF53 /* libpng12.a in Frameworks */, 2494 88AA282C0C17720D0032DF53 /* libpng12.a in Frameworks */,
2475 FE0AEE2D0D2D96D20097256A /* libllmozlib2.dylib in Frameworks */, 2495 FE0AEE2D0D2D96D20097256A /* libllmozlib2.dylib in Frameworks */,
2476 1C0D59510CF0B2B800222B10 /* libboost_regex-gcc.a in Frameworks */, 2496 1C0D59510CF0B2B800222B10 /* libboost_regex-mt.a in Frameworks */,
2497 FE43BB870D368B4100C93D63 /* libboost_program_options-mt.a in Frameworks */,
2498 AABD9F130D4AD7E7007FB7C4 /* libboost_signals-mt.a in Frameworks */,
2499 AA38F8FE0D8AFCF4003B39F9 /* libndofdev.dylib in Frameworks */,
2477 ); 2500 );
2478 runOnlyForDeploymentPostprocessing = 0; 2501 runOnlyForDeploymentPostprocessing = 0;
2479 }; 2502 };
@@ -2492,6 +2515,7 @@
2492 FDD3FD720B6A89A0009173F1 /* libcares.a in Frameworks */, 2515 FDD3FD720B6A89A0009173F1 /* libcares.a in Frameworks */,
2493 DA9C412B0B54B9DA00DD6F44 /* libaprutil-1.a in Frameworks */, 2516 DA9C412B0B54B9DA00DD6F44 /* libaprutil-1.a in Frameworks */,
2494 DA9C412C0B54B9DE00DD6F44 /* libexpat.a in Frameworks */, 2517 DA9C412C0B54B9DE00DD6F44 /* libexpat.a in Frameworks */,
2518 AABD9F140D4AD7E7007FB7C4 /* libboost_signals-mt.a in Frameworks */,
2495 ); 2519 );
2496 runOnlyForDeploymentPostprocessing = 0; 2520 runOnlyForDeploymentPostprocessing = 0;
2497 }; 2521 };
@@ -2529,6 +2553,8 @@
2529 D6F77CBC0B445C3B0040826D /* AppKit.framework in Frameworks */, 2553 D6F77CBC0B445C3B0040826D /* AppKit.framework in Frameworks */,
2530 D645940C0B3B6D9000FAB68F /* libapr-1.a in Frameworks */, 2554 D645940C0B3B6D9000FAB68F /* libapr-1.a in Frameworks */,
2531 D645940D0B3B6D9A00FAB68F /* libaprutil-1.a in Frameworks */, 2555 D645940D0B3B6D9A00FAB68F /* libaprutil-1.a in Frameworks */,
2556 79E593440D1B4A72002135A7 /* libz.dylib in Frameworks */,
2557 79E5928A0D1B4A1A002135A7 /* libpng12.a in Frameworks */,
2532 DA8C5F9B0B61A9F900BCA79A /* libexpat.a in Frameworks */, 2558 DA8C5F9B0B61A9F900BCA79A /* libexpat.a in Frameworks */,
2533 ); 2559 );
2534 runOnlyForDeploymentPostprocessing = 0; 2560 runOnlyForDeploymentPostprocessing = 0;
@@ -2598,6 +2624,8 @@
2598 20286C2CFDCF999611CA2CEA /* Resources */ = { 2624 20286C2CFDCF999611CA2CEA /* Resources */ = {
2599 isa = PBXGroup; 2625 isa = PBXGroup;
2600 children = ( 2626 children = (
2627 D1CA83CC0D62634400C61743 /* llfloaterstats.h */,
2628 D1CA83CD0D62634400C61743 /* llfloaterstats.cpp */,
2601 019200F204DD7D3500A800A7 /* macview.r */, 2629 019200F204DD7D3500A800A7 /* macview.r */,
2602 0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */, 2630 0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */,
2603 99C9FA660B6AD9BF00A1BBA6 /* SLVoice */, 2631 99C9FA660B6AD9BF00A1BBA6 /* SLVoice */,
@@ -2624,10 +2652,20 @@
2624 26F529A0051F61CD00A80050 /* newview */ = { 2652 26F529A0051F61CD00A80050 /* newview */ = {
2625 isa = PBXGroup; 2653 isa = PBXGroup;
2626 children = ( 2654 children = (
2655 AA38F8F00D8A3687003B39F9 /* llfloaterjoystick.cpp */,
2656 AA38F8F10D8A3687003B39F9 /* llfloaterjoystick.h */,
2657 1ADE58920D7CCF6000183F7F /* llfloaterhud.cpp */,
2658 1ADE58930D7CCF6000183F7F /* llfloaterhud.h */,
2659 D1BB623B0D91BBEB00001516 /* llfloatervoicedevicesettings.cpp */,
2660 D1BB623C0D91BBEC00001516 /* llfloatervoicedevicesettings.h */,
2627 FE0AEE480D2D9C6E0097256A /* lllcd.cpp */, 2661 FE0AEE480D2D9C6E0097256A /* lllcd.cpp */,
2628 FE0AEE490D2D9C6E0097256A /* lllcd.h */, 2662 FE0AEE490D2D9C6E0097256A /* lllcd.h */,
2629 FE0AEE4A0D2D9C6E0097256A /* llparcelselection.cpp */, 2663 FE0AEE4A0D2D9C6E0097256A /* llparcelselection.cpp */,
2630 FE0AEE4B0D2D9C6E0097256A /* llparcelselection.h */, 2664 FE0AEE4B0D2D9C6E0097256A /* llparcelselection.h */,
2665 C19628F30D53D7AB007C909A /* llfloatersettingsdebug.cpp */,
2666 C19628F40D53D7AB007C909A /* llfloatersettingsdebug.h */,
2667 FE42C3120D231D1A00D9F143 /* llcommandlineparser.cpp */,
2668 FE42C3130D231D1A00D9F143 /* llcommandlineparser.h */,
2631 FEE6C8390D2D6E1500C97E9C /* llfloaterhtmlhelp.cpp */, 2669 FEE6C8390D2D6E1500C97E9C /* llfloaterhtmlhelp.cpp */,
2632 FEE6C83A0D2D6E1500C97E9C /* llfloaterhtmlhelp.h */, 2670 FEE6C83A0D2D6E1500C97E9C /* llfloaterhtmlhelp.h */,
2633 FEE6C83B0D2D6E1500C97E9C /* llfloaterurlentry.cpp */, 2671 FEE6C83B0D2D6E1500C97E9C /* llfloaterurlentry.cpp */,
@@ -2644,6 +2682,8 @@
2644 FEE6C8460D2D6E1500C97E9C /* llviewerparcelmedia.h */, 2682 FEE6C8460D2D6E1500C97E9C /* llviewerparcelmedia.h */,
2645 FEE6C8470D2D6E1500C97E9C /* llviewerparcelmediaautoplay.cpp */, 2683 FEE6C8470D2D6E1500C97E9C /* llviewerparcelmediaautoplay.cpp */,
2646 FEE6C8480D2D6E1500C97E9C /* llviewerparcelmediaautoplay.h */, 2684 FEE6C8480D2D6E1500C97E9C /* llviewerparcelmediaautoplay.h */,
2685 CB0873B40D62226B009600F8 /* lldelayedgestureerror.cpp */,
2686 CB0873B50D62226B009600F8 /* lldelayedgestureerror.h */,
2647 D2768CE30CEA38940000BD66 /* llfloaterlagmeter.cpp */, 2687 D2768CE30CEA38940000BD66 /* llfloaterlagmeter.cpp */,
2648 D2768CE40CEA38940000BD66 /* llfloaterlagmeter.h */, 2688 D2768CE40CEA38940000BD66 /* llfloaterlagmeter.h */,
2649 FE679A350CDFF5AC00959041 /* llappviewer.cpp */, 2689 FE679A350CDFF5AC00959041 /* llappviewer.cpp */,
@@ -2676,7 +2716,6 @@
2676 A26560500C9F53CC004042A0 /* llfloaterhardwaresettings.cpp */, 2716 A26560500C9F53CC004042A0 /* llfloaterhardwaresettings.cpp */,
2677 A26560510C9F53CC004042A0 /* llfloaterhardwaresettings.h */, 2717 A26560510C9F53CC004042A0 /* llfloaterhardwaresettings.h */,
2678 1AD3940F0CAB000F004BA76A /* llurldispatcher.cpp */, 2718 1AD3940F0CAB000F004BA76A /* llurldispatcher.cpp */,
2679 26F52A9D051F61DF00A80050 /* head.cpp */,
2680 26F52A41051F61DF00A80050 /* llagent.cpp */, 2719 26F52A41051F61DF00A80050 /* llagent.cpp */,
2681 1A758C910A436FCA00589675 /* llagentdata.cpp */, 2720 1A758C910A436FCA00589675 /* llagentdata.cpp */,
2682 26F52A5D051F61DF00A80050 /* llagentpilot.cpp */, 2721 26F52A5D051F61DF00A80050 /* llagentpilot.cpp */,
@@ -2687,7 +2726,6 @@
2687 26F52ABF051F61DF00A80050 /* llbox.cpp */, 2726 26F52ABF051F61DF00A80050 /* llbox.cpp */,
2688 26F529F0051F61DF00A80050 /* llcallbacklist.cpp */, 2727 26F529F0051F61DF00A80050 /* llcallbacklist.cpp */,
2689 26F52A8C051F61DF00A80050 /* llcallingcard.cpp */, 2728 26F52A8C051F61DF00A80050 /* llcallingcard.cpp */,
2690 26F52AC5051F61DF00A80050 /* llcameraview.cpp */,
2691 9C18425A0B9F951500208356 /* llcaphttpsender.cpp */, 2729 9C18425A0B9F951500208356 /* llcaphttpsender.cpp */,
2692 91D530D2056EE57900CD1AD7 /* llchatbar.cpp */, 2730 91D530D2056EE57900CD1AD7 /* llchatbar.cpp */,
2693 991ED2DF0883646B003EC818 /* llclassifiedinfo.cpp */, 2731 991ED2DF0883646B003EC818 /* llclassifiedinfo.cpp */,
@@ -2700,7 +2738,6 @@
2700 99BB5175099AC2A4004BF9F2 /* llconfirmationmanager.h */, 2738 99BB5175099AC2A4004BF9F2 /* llconfirmationmanager.h */,
2701 26F52A03051F61DF00A80050 /* llconsole.cpp */, 2739 26F52A03051F61DF00A80050 /* llconsole.cpp */,
2702 26F52A78051F61DF00A80050 /* llcontainerview.cpp */, 2740 26F52A78051F61DF00A80050 /* llcontainerview.cpp */,
2703 26F52A1B051F61DF00A80050 /* llcontroldef.cpp */,
2704 26F52ACB051F61DF00A80050 /* llcubemap.cpp */, 2741 26F52ACB051F61DF00A80050 /* llcubemap.cpp */,
2705 99BB5170099AC1FC004BF9F2 /* llcurrencyuimanager.cpp */, 2742 99BB5170099AC1FC004BF9F2 /* llcurrencyuimanager.cpp */,
2706 99BB5171099AC1FC004BF9F2 /* llcurrencyuimanager.h */, 2743 99BB5171099AC1FC004BF9F2 /* llcurrencyuimanager.h */,
@@ -2813,8 +2850,6 @@
2813 FD6C9A4209C75B8900AA1849 /* llfloatertopobjects.cpp */, 2850 FD6C9A4209C75B8900AA1849 /* llfloatertopobjects.cpp */,
2814 FD6C9A4309C75B8900AA1849 /* llfloatertopobjects.h */, 2851 FD6C9A4309C75B8900AA1849 /* llfloatertopobjects.h */,
2815 26F52A8E051F61DF00A80050 /* llfloatertos.cpp */, 2852 26F52A8E051F61DF00A80050 /* llfloatertos.cpp */,
2816 79256EA10C57D6A4000AAFA4 /* llfloatervoicewizard.cpp */,
2817 79256EA20C57D6A4000AAFA4 /* llfloatervoicewizard.h */,
2818 1CBB67D20C7CCCB2007DAAAE /* llfloaterwater.cpp */, 2853 1CBB67D20C7CCCB2007DAAAE /* llfloaterwater.cpp */,
2819 1CBB67D30C7CCCB2007DAAAE /* llfloaterwater.h */, 2854 1CBB67D30C7CCCB2007DAAAE /* llfloaterwater.h */,
2820 A2A8C5520C649F480001FEB2 /* llfloaterwindlight.cpp */, 2855 A2A8C5520C649F480001FEB2 /* llfloaterwindlight.cpp */,
@@ -2947,7 +2982,7 @@
2947 26F52AD2051F61DF00A80050 /* llselectmgr.cpp */, 2982 26F52AD2051F61DF00A80050 /* llselectmgr.cpp */,
2948 26F52AD1051F61DF00A80050 /* llsky.cpp */, 2983 26F52AD1051F61DF00A80050 /* llsky.cpp */,
2949 26F529EB051F61DF00A80050 /* llspatialpartition.cpp */, 2984 26F529EB051F61DF00A80050 /* llspatialpartition.cpp */,
2950 26F529E7051F61DF00A80050 /* llsphere.cpp */, 2985 26F529E7051F61DF00A80050 /* llrendersphere.cpp */,
2951 26F529E5051F61DF00A80050 /* llsprite.cpp */, 2986 26F529E5051F61DF00A80050 /* llsprite.cpp */,
2952 88A95BB10C14D5FC0027E363 /* llsrv.cpp */, 2987 88A95BB10C14D5FC0027E363 /* llsrv.cpp */,
2953 91DF401F06A739BA00CA7FE5 /* llstartup.cpp */, 2988 91DF401F06A739BA00CA7FE5 /* llstartup.cpp */,
@@ -3036,8 +3071,6 @@
3036 EB3EE713083AC23D002BF676 /* llviewertexteditor.h */, 3071 EB3EE713083AC23D002BF676 /* llviewertexteditor.h */,
3037 26F529D9051F61DF00A80050 /* llviewertextureanim.cpp */, 3072 26F529D9051F61DF00A80050 /* llviewertextureanim.cpp */,
3038 26F529D8051F61DF00A80050 /* llviewerthrottle.cpp */, 3073 26F529D8051F61DF00A80050 /* llviewerthrottle.cpp */,
3039 EB3EE714083AC23D002BF676 /* llvieweruictrlfactory.cpp */,
3040 EB3EE715083AC23D002BF676 /* llvieweruictrlfactory.h */,
3041 26F529D7051F61DF00A80050 /* llviewervisualparam.cpp */, 3074 26F529D7051F61DF00A80050 /* llviewervisualparam.cpp */,
3042 26F529D6051F61DF00A80050 /* llviewerwindow.cpp */, 3075 26F529D6051F61DF00A80050 /* llviewerwindow.cpp */,
3043 26F529D5051F61DF00A80050 /* llvlcomposition.cpp */, 3076 26F529D5051F61DF00A80050 /* llvlcomposition.cpp */,
@@ -3089,10 +3122,11 @@
3089 99BB516A099AC1AE004BF9F2 /* llxmlrpctransaction.cpp */, 3122 99BB516A099AC1AE004BF9F2 /* llxmlrpctransaction.cpp */,
3090 99BB5169099AC1AE004BF9F2 /* llxmlrpctransaction.h */, 3123 99BB5169099AC1AE004BF9F2 /* llxmlrpctransaction.h */,
3091 019200F004DD7D2B00A800A7 /* macview_Prefix.h */, 3124 019200F004DD7D2B00A800A7 /* macview_Prefix.h */,
3092 26F529BE051F61DF00A80050 /* moviemaker.cpp */,
3093 26F529BD051F61DF00A80050 /* noise.cpp */, 3125 26F529BD051F61DF00A80050 /* noise.cpp */,
3094 26F529BA051F61DF00A80050 /* pipeline.cpp */, 3126 26F529BA051F61DF00A80050 /* pipeline.cpp */,
3095 D8CA570D0BAF74FC0093D6D4 /* llvoicevisualizer.h */, 3127 D8CA570D0BAF74FC0093D6D4 /* llvoicevisualizer.h */,
3128 1A531BFA0D81056E00DEB305 /* llfloatercamera.h */,
3129 1A531BFB0D81056E00DEB305 /* llfloatercamera.cpp */,
3096 ); 3130 );
3097 name = newview; 3131 name = newview;
3098 sourceTree = "<group>"; 3132 sourceTree = "<group>";
@@ -3100,6 +3134,7 @@
3100 6192211E074A9B57005E1F34 /* llcommon */ = { 3134 6192211E074A9B57005E1F34 /* llcommon */ = {
3101 isa = PBXGroup; 3135 isa = PBXGroup;
3102 children = ( 3136 children = (
3137 D158CB820D75F0580060BD44 /* llsmoothstep.h */,
3103 8849626B0C7B3E8A00A777FB /* llares.cpp */, 3138 8849626B0C7B3E8A00A777FB /* llares.cpp */,
3104 295542580C3B371500025801 /* llversionviewer.h */, 3139 295542580C3B371500025801 /* llversionviewer.h */,
3105 CB162DB40C6CCCFE00BF83BB /* llextendedstatus.h */, 3140 CB162DB40C6CCCFE00BF83BB /* llextendedstatus.h */,
@@ -3273,6 +3308,8 @@
3273 61922190074A9B58005E1F34 /* llmath */ = { 3308 61922190074A9B58005E1F34 /* llmath */ = {
3274 isa = PBXGroup; 3309 isa = PBXGroup;
3275 children = ( 3310 children = (
3311 496B968B0C022A69009833CB /* llline.cpp */,
3312 496B968C0C022A69009833CB /* llline.h */,
3276 A3653EBB0AC5F3D500E1E936 /* lltreenode.h */, 3313 A3653EBB0AC5F3D500E1E936 /* lltreenode.h */,
3277 A241CB9407B3E3A7001A39E3 /* llperlin.cpp */, 3314 A241CB9407B3E3A7001A39E3 /* llperlin.cpp */,
3278 A241CB8807B3E324001A39E3 /* llperlin.h */, 3315 A241CB8807B3E324001A39E3 /* llperlin.h */,
@@ -3907,8 +3944,6 @@
3907 1AD394140CAB0023004BA76A /* llcommandhandler.h */, 3944 1AD394140CAB0023004BA76A /* llcommandhandler.h */,
3908 1AD3940C0CAB0003004BA76A /* llurlsimstring.h */, 3945 1AD3940C0CAB0003004BA76A /* llurlsimstring.h */,
3909 1AD3940D0CAB0003004BA76A /* llurldispatcher.h */, 3946 1AD3940D0CAB0003004BA76A /* llurldispatcher.h */,
3910 997B4CF006015822001B0407 /* audiosettings.h */,
3911 997B4D2406015823001B0407 /* head.h */,
3912 997B4D2306015823001B0407 /* llagent.h */, 3947 997B4D2306015823001B0407 /* llagent.h */,
3913 1A758C990A43700400589675 /* llagentdata.h */, 3948 1A758C990A43700400589675 /* llagentdata.h */,
3914 997B4D2206015823001B0407 /* llagentpilot.h */, 3949 997B4D2206015823001B0407 /* llagentpilot.h */,
@@ -3917,7 +3952,6 @@
3917 997B4D1606015823001B0407 /* llbox.h */, 3952 997B4D1606015823001B0407 /* llbox.h */,
3918 997B4D1306015823001B0407 /* llcallbacklist.h */, 3953 997B4D1306015823001B0407 /* llcallbacklist.h */,
3919 997B4D1206015823001B0407 /* llcallingcard.h */, 3954 997B4D1206015823001B0407 /* llcallingcard.h */,
3920 997B4D1106015823001B0407 /* llcameraview.h */,
3921 9C1842500B9F94F200208356 /* llcaphttpsender.h */, 3955 9C1842500B9F94F200208356 /* llcaphttpsender.h */,
3922 997B4D1006015823001B0407 /* llchatbar.h */, 3956 997B4D1006015823001B0407 /* llchatbar.h */,
3923 997B4D0D06015823001B0407 /* llcloud.h */, 3957 997B4D0D06015823001B0407 /* llcloud.h */,
@@ -4089,7 +4123,7 @@
4089 997B4C4E06015821001B0407 /* llselectmgr.h */, 4123 997B4C4E06015821001B0407 /* llselectmgr.h */,
4090 997B4C4D06015821001B0407 /* llsky.h */, 4124 997B4C4D06015821001B0407 /* llsky.h */,
4091 997B4C4706015821001B0407 /* llspatialpartition.h */, 4125 997B4C4706015821001B0407 /* llspatialpartition.h */,
4092 997B4C4606015821001B0407 /* llsphere.h */, 4126 997B4C4606015821001B0407 /* llrendersphere.h */,
4093 997B4C4406015821001B0407 /* llsprite.h */, 4127 997B4C4406015821001B0407 /* llsprite.h */,
4094 91DF402206A739CB00CA7FE5 /* llstartup.h */, 4128 91DF402206A739CB00CA7FE5 /* llstartup.h */,
4095 997B4C4306015821001B0407 /* llstatbar.h */, 4129 997B4C4306015821001B0407 /* llstatbar.h */,
@@ -4180,7 +4214,6 @@
4180 997B4BDC06015821001B0407 /* macmain.h */, 4214 997B4BDC06015821001B0407 /* macmain.h */,
4181 FD53B3DB09BDE88B00BFE3BC /* macutil_Prefix.h */, 4215 FD53B3DB09BDE88B00BFE3BC /* macutil_Prefix.h */,
4182 997B4BDB06015821001B0407 /* macview_Prefix.h */, 4216 997B4BDB06015821001B0407 /* macview_Prefix.h */,
4183 997B4BDA06015821001B0407 /* moviemaker.h */,
4184 997B4BD906015821001B0407 /* noise.h */, 4217 997B4BD906015821001B0407 /* noise.h */,
4185 997B4BD506015820001B0407 /* pipeline.h */, 4218 997B4BD506015820001B0407 /* pipeline.h */,
4186 997B4BD406015820001B0407 /* randgauss.h */, 4219 997B4BD406015820001B0407 /* randgauss.h */,
@@ -4251,8 +4284,11 @@
4251 FDE8761909BE9C7D00AF6316 /* Third Party Libraries */ = { 4284 FDE8761909BE9C7D00AF6316 /* Third Party Libraries */ = {
4252 isa = PBXGroup; 4285 isa = PBXGroup;
4253 children = ( 4286 children = (
4287 AA38F8FD0D8AFCF4003B39F9 /* libndofdev.dylib */,
4254 FE0AEE2C0D2D96D20097256A /* libllmozlib2.dylib */, 4288 FE0AEE2C0D2D96D20097256A /* libllmozlib2.dylib */,
4255 1C0D59500CF0B2B800222B10 /* libboost_regex-gcc.a */, 4289 1C0D59500CF0B2B800222B10 /* libboost_regex-mt.a */,
4290 FE43BB860D368B4100C93D63 /* libboost_program_options-mt.a */,
4291 AABD9F120D4AD7E7007FB7C4 /* libboost_signals-mt.a */,
4256 FDD3FD700B6A89A0009173F1 /* libcares.a */, 4292 FDD3FD700B6A89A0009173F1 /* libcares.a */,
4257 FD34696A0B5C3C55007318E5 /* libllcurl.a */, 4293 FD34696A0B5C3C55007318E5 /* libllcurl.a */,
4258 FDE8764E09BEA39600AF6316 /* libapr-1.a */, 4294 FDE8764E09BEA39600AF6316 /* libapr-1.a */,
@@ -4493,7 +4529,7 @@
4493 ); 4529 );
4494 runOnlyForDeploymentPostprocessing = 0; 4530 runOnlyForDeploymentPostprocessing = 0;
4495 shellPath = /bin/sh; 4531 shellPath = /bin/sh;
4496 shellScript = "# Glue together intel and ppc versions of .a files\nLIBS=\"apr-1 aprutil-1 expat ogg vorbis fmod freetype cares llcurl lljpeg png12 openjpeg vorbisenc vorbisfile xmlrpc boost_regex-gcc\"\nLIBDIR=\"${SRCROOT}/../../libraries\"\n\ncd \"${LIBDIR}\"\n\nif [ \\! -e ppc-darwin ]\nthen\n\tln -s powerpc-darwin ppc-darwin\nfi\n\nmkdir -p \"${BUILT_PRODUCTS_DIR}\"\n\nfor i in ${LIBS}; do\n\tNEED_UPDATE=false\n\tARCH_COUNT=0\n\tOUT=\"${BUILT_PRODUCTS_DIR}/lib$i.a\"\n\tTEST_ARCH=`echo \"${ARCHS}\" | grep i386`\n\tif [ -n \"$TEST_ARCH\" ]; then\n\t\tIN_i386=\"i386-darwin/lib_release/lib$i.a\"\n\t\tARCH_COUNT=`expr $ARCH_COUNT \"+\" 1`\n\t\tif [ \"$IN_i386\" -nt \"$OUT\" ]; then\n\t\t\tNEED_UPDATE=true\n\t\tfi\n\tfi\n\tTEST_ARCH=`echo \"${ARCHS}\" | grep ppc`\n\tif [ -n \"$TEST_ARCH\" ]; then\n\t\tIN_ppc=\"ppc-darwin/lib_release/lib$i.a\"\n\t\tARCH_COUNT=`expr $ARCH_COUNT \"+\" 1`\n\t\tif [ \"$IN_ppc\" -nt \"$OUT\" ]; then\n\t\t\tNEED_UPDATE=true\n\t\tfi\n\tfi\n\tif [ $ARCH_COUNT -eq 0 ]; then\n\t\techo \"No supported architectures found.\"\n\t\texit 1\n\tfi\n\tif [ ! -f \"$OUT\" -o \"$NEED_UPDATE\" != \"false\" ]; then\n\t\techo Preparing third party library lib$i.a\n\t\tif [ $ARCH_COUNT -eq 1 ]; then\n\t\t\tIN=\"$IN_i386\"\"$IN_ppc\"\n\t\t\t#echo cp \"$IN\" \"$OUT\"\n\t\t\tcp \"$IN\" \"$OUT\"\n\t\telse\n\t\t\t#echo libtool -static -o \"$OUT\" \"$IN_i386\" \"$IN_ppc\"\n\t\t\tlibtool -static -o \"$OUT\" \"$IN_i386\" \"$IN_ppc\"\n\t\tfi\n\t\tranlib \"$OUT\"\n\telse\n\t\techo Third party library lib$i.a is up to date\n\tfi\ndone\n"; 4532 shellScript = "# Glue together intel and ppc versions of .a files\nLIBS=\"apr-1 aprutil-1 expat ogg vorbis fmod freetype cares llcurl lljpeg png12 openjpeg vorbisenc vorbisfile xmlrpc boost_regex-mt boost_program_options-mt boost_signals-mt\"\nLIBDIR=\"${SRCROOT}/../../libraries\"\n\ncd \"${LIBDIR}\"\n\nif [ \\! -e ppc-darwin ]\nthen\n\tln -s powerpc-darwin ppc-darwin\nfi\n\nmkdir -p \"${BUILT_PRODUCTS_DIR}\"\n\nfor i in ${LIBS}; do\n\tNEED_UPDATE=false\n\tARCH_COUNT=0\n\tOUT=\"${BUILT_PRODUCTS_DIR}/lib$i.a\"\n\tTEST_ARCH=`echo \"${ARCHS}\" | grep i386`\n\tif [ -n \"$TEST_ARCH\" ]; then\n\t\tIN_i386=\"i386-darwin/lib_release/lib$i.a\"\n\t\tARCH_COUNT=`expr $ARCH_COUNT \"+\" 1`\n\t\tif [ \"$IN_i386\" -nt \"$OUT\" ]; then\n\t\t\tNEED_UPDATE=true\n\t\tfi\n\tfi\n\tTEST_ARCH=`echo \"${ARCHS}\" | grep ppc`\n\tif [ -n \"$TEST_ARCH\" ]; then\n\t\tIN_ppc=\"ppc-darwin/lib_release/lib$i.a\"\n\t\tARCH_COUNT=`expr $ARCH_COUNT \"+\" 1`\n\t\tif [ \"$IN_ppc\" -nt \"$OUT\" ]; then\n\t\t\tNEED_UPDATE=true\n\t\tfi\n\tfi\n\tif [ $ARCH_COUNT -eq 0 ]; then\n\t\techo \"No supported architectures found.\"\n\t\texit 1\n\tfi\n\tif [ ! -f \"$OUT\" -o \"$NEED_UPDATE\" != \"false\" ]; then\n\t\techo Preparing third party library lib$i.a\n\t\tif [ $ARCH_COUNT -eq 1 ]; then\n\t\t\tIN=\"$IN_i386\"\"$IN_ppc\"\n\t\t\t#echo cp \"$IN\" \"$OUT\"\n\t\t\tcp \"$IN\" \"$OUT\"\n\t\telse\n\t\t\t#echo libtool -static -o \"$OUT\" \"$IN_i386\" \"$IN_ppc\"\n\t\t\tlibtool -static -o \"$OUT\" \"$IN_i386\" \"$IN_ppc\"\n\t\tfi\n\t\tranlib \"$OUT\"\n\telse\n\t\techo Third party library lib$i.a is up to date\n\tfi\ndone\n";
4497 }; 4533 };
4498/* End PBXShellScriptBuildPhase section */ 4534/* End PBXShellScriptBuildPhase section */
4499 4535
@@ -4514,7 +4550,6 @@
4514 5503BB2F05446B20003D051F /* llstatbar.cpp in Sources */, 4550 5503BB2F05446B20003D051F /* llstatbar.cpp in Sources */,
4515 5503BB3405446B20003D051F /* pipeline.cpp in Sources */, 4551 5503BB3405446B20003D051F /* pipeline.cpp in Sources */,
4516 5503BB3705446B20003D051F /* noise.cpp in Sources */, 4552 5503BB3705446B20003D051F /* noise.cpp in Sources */,
4517 5503BB3805446B20003D051F /* moviemaker.cpp in Sources */,
4518 5503BB3905446B20003D051F /* llworldmapview.cpp in Sources */, 4553 5503BB3905446B20003D051F /* llworldmapview.cpp in Sources */,
4519 5503BB3A05446B20003D051F /* llworldmap.cpp in Sources */, 4554 5503BB3A05446B20003D051F /* llworldmap.cpp in Sources */,
4520 5503BB3B05446B20003D051F /* llworld.cpp in Sources */, 4555 5503BB3B05446B20003D051F /* llworld.cpp in Sources */,
@@ -4550,7 +4585,7 @@
4550 5503BB5D05446B20003D051F /* llviewermessage.cpp in Sources */, 4585 5503BB5D05446B20003D051F /* llviewermessage.cpp in Sources */,
4551 5503BB5E05446B20003D051F /* llviewermenu.cpp in Sources */, 4586 5503BB5E05446B20003D051F /* llviewermenu.cpp in Sources */,
4552 5503BB5F05446B20003D051F /* llsprite.cpp in Sources */, 4587 5503BB5F05446B20003D051F /* llsprite.cpp in Sources */,
4553 5503BB6105446B20003D051F /* llsphere.cpp in Sources */, 4588 5503BB6105446B20003D051F /* llrendersphere.cpp in Sources */,
4554 5503BB6305446B20003D051F /* llpreviewtexture.cpp in Sources */, 4589 5503BB6305446B20003D051F /* llpreviewtexture.cpp in Sources */,
4555 5503BB6405446B20003D051F /* llpreviewsound.cpp in Sources */, 4590 5503BB6405446B20003D051F /* llpreviewsound.cpp in Sources */,
4556 5503BB6505446B20003D051F /* llspatialpartition.cpp in Sources */, 4591 5503BB6505446B20003D051F /* llspatialpartition.cpp in Sources */,
@@ -4583,7 +4618,6 @@
4583 5503BB9105446B20003D051F /* llfloaterland.cpp in Sources */, 4618 5503BB9105446B20003D051F /* llfloaterland.cpp in Sources */,
4584 5503BB9205446B20003D051F /* llpanelface.cpp in Sources */, 4619 5503BB9205446B20003D051F /* llpanelface.cpp in Sources */,
4585 5503BB9305446B20003D051F /* llpanelevent.cpp in Sources */, 4620 5503BB9305446B20003D051F /* llpanelevent.cpp in Sources */,
4586 5503BB9505446B20003D051F /* llcontroldef.cpp in Sources */,
4587 5503BB9805446B20003D051F /* llframestatview.cpp in Sources */, 4621 5503BB9805446B20003D051F /* llframestatview.cpp in Sources */,
4588 5503BB9905446B20003D051F /* llframestats.cpp in Sources */, 4622 5503BB9905446B20003D051F /* llframestats.cpp in Sources */,
4589 5503BB9E05446B20003D051F /* llhudobject.cpp in Sources */, 4623 5503BB9E05446B20003D051F /* llhudobject.cpp in Sources */,
@@ -4666,7 +4700,6 @@
4666 5503BC1005446B20003D051F /* llnamelistctrl.cpp in Sources */, 4700 5503BC1005446B20003D051F /* llnamelistctrl.cpp in Sources */,
4667 5503BC1205446B20003D051F /* llmaniptranslate.cpp in Sources */, 4701 5503BC1205446B20003D051F /* llmaniptranslate.cpp in Sources */,
4668 5503BC1305446B20003D051F /* llmanipscale.cpp in Sources */, 4702 5503BC1305446B20003D051F /* llmanipscale.cpp in Sources */,
4669 5503BC1505446B20003D051F /* head.cpp in Sources */,
4670 5503BC1705446B20003D051F /* llfloaternamedesc.cpp in Sources */, 4703 5503BC1705446B20003D051F /* llfloaternamedesc.cpp in Sources */,
4671 5503BC1805446B20003D051F /* llpanelplace.cpp in Sources */, 4704 5503BC1805446B20003D051F /* llpanelplace.cpp in Sources */,
4672 5503BC1905446B20003D051F /* llpanelpermissions.cpp in Sources */, 4705 5503BC1905446B20003D051F /* llpanelpermissions.cpp in Sources */,
@@ -4690,7 +4723,6 @@
4690 5503BC3405446B20003D051F /* llpreview.cpp in Sources */, 4723 5503BC3405446B20003D051F /* llpreview.cpp in Sources */,
4691 5503BC3605446B20003D051F /* llbox.cpp in Sources */, 4724 5503BC3605446B20003D051F /* llbox.cpp in Sources */,
4692 5503BC3905446B20003D051F /* llfloaterreporter.cpp in Sources */, 4725 5503BC3905446B20003D051F /* llfloaterreporter.cpp in Sources */,
4693 5503BC3C05446B20003D051F /* llcameraview.cpp in Sources */,
4694 5503BC3D05446B20003D051F /* llcompilequeue.cpp in Sources */, 4726 5503BC3D05446B20003D051F /* llcompilequeue.cpp in Sources */,
4695 5503BC3E05446B20003D051F /* llpanelgroupvoting.cpp in Sources */, 4727 5503BC3E05446B20003D051F /* llpanelgroupvoting.cpp in Sources */,
4696 5503BC4105446B20003D051F /* lldrawpoolsimple.cpp in Sources */, 4728 5503BC4105446B20003D051F /* lldrawpoolsimple.cpp in Sources */,
@@ -4814,7 +4846,6 @@
4814 EB3EE6FA083ABB5E002BF676 /* lluictrlfactory.cpp in Sources */, 4846 EB3EE6FA083ABB5E002BF676 /* lluictrlfactory.cpp in Sources */,
4815 EB3EE6FC083ABB5E002BF676 /* llviewborder.cpp in Sources */, 4847 EB3EE6FC083ABB5E002BF676 /* llviewborder.cpp in Sources */,
4816 EB3EE720083AC23D002BF676 /* llviewertexteditor.cpp in Sources */, 4848 EB3EE720083AC23D002BF676 /* llviewertexteditor.cpp in Sources */,
4817 EB3EE722083AC23D002BF676 /* llvieweruictrlfactory.cpp in Sources */,
4818 1A9EC237083EA0100023D510 /* llfloatereditui.cpp in Sources */, 4849 1A9EC237083EA0100023D510 /* llfloatereditui.cpp in Sources */,
4819 1AE5D7120844FBD300278605 /* llwebbrowserctrl.cpp in Sources */, 4850 1AE5D7120844FBD300278605 /* llwebbrowserctrl.cpp in Sources */,
4820 1A1C61620847AEE6005D7227 /* llvolumemgr.cpp in Sources */, 4851 1A1C61620847AEE6005D7227 /* llvolumemgr.cpp in Sources */,
@@ -4937,7 +4968,6 @@
4937 1A0DA5130C3AC07800361F49 /* llviewerjointmesh_vec.cpp in Sources */, 4968 1A0DA5130C3AC07800361F49 /* llviewerjointmesh_vec.cpp in Sources */,
4938 1A0DA5140C3AC07800361F49 /* llviewerjointmesh_sse2.cpp in Sources */, 4969 1A0DA5140C3AC07800361F49 /* llviewerjointmesh_sse2.cpp in Sources */,
4939 1A0DA5150C3AC07800361F49 /* llviewerjointmesh_sse.cpp in Sources */, 4970 1A0DA5150C3AC07800361F49 /* llviewerjointmesh_sse.cpp in Sources */,
4940 79256EA30C57D6A5000AAFA4 /* llfloatervoicewizard.cpp in Sources */,
4941 D23289B50C453A3600304FEF /* llfloaterreleasemsg.cpp in Sources */, 4971 D23289B50C453A3600304FEF /* llfloaterreleasemsg.cpp in Sources */,
4942 8849626C0C7B3E8A00A777FB /* llares.cpp in Sources */, 4972 8849626C0C7B3E8A00A777FB /* llares.cpp in Sources */,
4943 1AD394100CAB000F004BA76A /* llurlsimstring.cpp in Sources */, 4973 1AD394100CAB000F004BA76A /* llurlsimstring.cpp in Sources */,
@@ -4956,6 +4986,8 @@
4956 FE679A3F0CDFF5AC00959041 /* llvectorperfoptions.cpp in Sources */, 4986 FE679A3F0CDFF5AC00959041 /* llvectorperfoptions.cpp in Sources */,
4957 FE679A400CDFF5AC00959041 /* llvieweraudio.cpp in Sources */, 4987 FE679A400CDFF5AC00959041 /* llvieweraudio.cpp in Sources */,
4958 D2768CE50CEA38940000BD66 /* llfloaterlagmeter.cpp in Sources */, 4988 D2768CE50CEA38940000BD66 /* llfloaterlagmeter.cpp in Sources */,
4989 FE42C3140D231D1A00D9F143 /* llcommandlineparser.cpp in Sources */,
4990 C19628F50D53D7AB007C909A /* llfloatersettingsdebug.cpp in Sources */,
4959 FEE6C82D0D2D6DAC00C97E9C /* llmediaimplcommon.cpp in Sources */, 4991 FEE6C82D0D2D6DAC00C97E9C /* llmediaimplcommon.cpp in Sources */,
4960 FEE6C82E0D2D6DAC00C97E9C /* llmediaimplexample1.cpp in Sources */, 4992 FEE6C82E0D2D6DAC00C97E9C /* llmediaimplexample1.cpp in Sources */,
4961 FEE6C82F0D2D6DAC00C97E9C /* llmediaimplexample2.cpp in Sources */, 4993 FEE6C82F0D2D6DAC00C97E9C /* llmediaimplexample2.cpp in Sources */,
@@ -4993,6 +5025,12 @@
4993 1CFFA2D60C90472B000CF7DD /* llfloaterenvsettings.cpp in Sources */, 5025 1CFFA2D60C90472B000CF7DD /* llfloaterenvsettings.cpp in Sources */,
4994 1CFFA2ED0C9048D7000CF7DD /* llrendertarget.cpp in Sources */, 5026 1CFFA2ED0C9048D7000CF7DD /* llrendertarget.cpp in Sources */,
4995 A26560520C9F53CC004042A0 /* llfloaterhardwaresettings.cpp in Sources */, 5027 A26560520C9F53CC004042A0 /* llfloaterhardwaresettings.cpp in Sources */,
5028 D1CA83CE0D62634400C61743 /* llfloaterstats.cpp in Sources */,
5029 1ADE58940D7CCF6000183F7F /* llfloaterhud.cpp in Sources */,
5030 CB0873B60D62226B009600F8 /* lldelayedgestureerror.cpp in Sources */,
5031 1A531BFC0D81056E00DEB305 /* llfloatercamera.cpp in Sources */,
5032 D1BB623D0D91BBEC00001516 /* llfloatervoicedevicesettings.cpp in Sources */,
5033 AA38F8F20D8A3687003B39F9 /* llfloaterjoystick.cpp in Sources */,
4996 ); 5034 );
4997 runOnlyForDeploymentPostprocessing = 0; 5035 runOnlyForDeploymentPostprocessing = 0;
4998 }; 5036 };
@@ -5127,9 +5165,11 @@
5127 isa = PBXSourcesBuildPhase; 5165 isa = PBXSourcesBuildPhase;
5128 buildActionMask = 2147483647; 5166 buildActionMask = 2147483647;
5129 files = ( 5167 files = (
5168 79E592770D1B4932002135A7 /* llimagepng.cpp in Sources */,
5130 61922443074A9B5C005E1F34 /* indra.y in Sources */, 5169 61922443074A9B5C005E1F34 /* indra.y in Sources */,
5131 61922442074A9B5C005E1F34 /* indra.l in Sources */, 5170 61922442074A9B5C005E1F34 /* indra.l in Sources */,
5132 912541AF0691FF79008C66F7 /* llfasttimerview.cpp in Sources */, 5171 912541AF0691FF79008C66F7 /* llfasttimerview.cpp in Sources */,
5172 79E592870D1B4961002135A7 /* llpngwrapper.cpp in Sources */,
5133 619222F0074A9B5B005E1F34 /* llcriticaldamp.cpp in Sources */, 5173 619222F0074A9B5B005E1F34 /* llcriticaldamp.cpp in Sources */,
5134 619222F8074A9B5B005E1F34 /* llerror.cpp in Sources */, 5174 619222F8074A9B5B005E1F34 /* llerror.cpp in Sources */,
5135 619222FE074A9B5B005E1F34 /* llfasttimer.cpp in Sources */, 5175 619222FE074A9B5B005E1F34 /* llfasttimer.cpp in Sources */,
@@ -5431,7 +5471,13 @@
5431 ../llcrashlogger, 5471 ../llcrashlogger,
5432 ); 5472 );
5433 INFOPLIST_FILE = "crashreporter-Info.plist"; 5473 INFOPLIST_FILE = "crashreporter-Info.plist";
5434 LIBRARY_SEARCH_PATHS = "$(inherited)"; 5474 LIBRARY_SEARCH_PATHS = (
5475 "$(inherited)",
5476 "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
5477 "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
5478 );
5479 LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../libraries/i386-darwin/lib_debug\"";
5480 LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/../../libraries/i386-darwin/lib_release\"";
5435 OTHER_LDFLAGS = "-Wl,-search_paths_first"; 5481 OTHER_LDFLAGS = "-Wl,-search_paths_first";
5436 PRODUCT_NAME = crashreporter; 5482 PRODUCT_NAME = crashreporter;
5437 }; 5483 };
@@ -5454,8 +5500,16 @@
5454 "$(SRCROOT)/../../libraries/universal-darwin/lib_release", 5500 "$(SRCROOT)/../../libraries/universal-darwin/lib_release",
5455 "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", 5501 "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
5456 "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", 5502 "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
5503 "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
5504 "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)",
5505 "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_4)",
5506 "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_5)",
5457 ); 5507 );
5458 LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../libraries/universal-darwin/lib_debug\""; 5508 LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../libraries/universal-darwin/lib_debug\"";
5509 LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Development\"";
5510 LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3 = "\"$(SRCROOT)/build/Universal\"";
5511 LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_4 = "\"$(SRCROOT)/../../libraries/i386-darwin/lib_debug\"";
5512 LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_5 = "\"$(SRCROOT)/../../libraries/i386-darwin/lib_release\"";
5459 OTHER_CFLAGS = ( 5513 OTHER_CFLAGS = (
5460 "-DLL_DARWIN=1", 5514 "-DLL_DARWIN=1",
5461 "-DLL_RELEASE=1", 5515 "-DLL_RELEASE=1",
@@ -5510,6 +5564,7 @@
5510 GCC_WARN_UNUSED_VALUE = YES; 5564 GCC_WARN_UNUSED_VALUE = YES;
5511 GCC_WARN_UNUSED_VARIABLE = YES; 5565 GCC_WARN_UNUSED_VARIABLE = YES;
5512 HEADER_SEARCH_PATHS = ( 5566 HEADER_SEARCH_PATHS = (
5567 ../,
5513 "../../libraries/$(arch)-darwin/include", 5568 "../../libraries/$(arch)-darwin/include",
5514 ../../libraries/include, 5569 ../../libraries/include,
5515 ../llcommon, 5570 ../llcommon,
@@ -5518,6 +5573,7 @@
5518 MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; 5573 MACOSX_DEPLOYMENT_TARGET_i386 = 10.4;
5519 MACOSX_DEPLOYMENT_TARGET_ppc = 10.3; 5574 MACOSX_DEPLOYMENT_TARGET_ppc = 10.3;
5520 OTHER_CFLAGS = ( 5575 OTHER_CFLAGS = (
5576 "-DLL_CURRENT_HAVOK_VERSION=460",
5521 "-DLL_DARWIN=1", 5577 "-DLL_DARWIN=1",
5522 "-DLL_RELEASE=1", 5578 "-DLL_RELEASE=1",
5523 "-DLL_RELEASE_FOR_DOWNLOAD=1", 5579 "-DLL_RELEASE_FOR_DOWNLOAD=1",
@@ -5656,7 +5712,13 @@
5656 GCC_PREFIX_HEADER = macutil_Prefix.h; 5712 GCC_PREFIX_HEADER = macutil_Prefix.h;
5657 GCC_SYMBOLS_PRIVATE_EXTERN = NO; 5713 GCC_SYMBOLS_PRIVATE_EXTERN = NO;
5658 INFOPLIST_FILE = "crashreporter-Info.plist"; 5714 INFOPLIST_FILE = "crashreporter-Info.plist";
5659 LIBRARY_SEARCH_PATHS = "$(inherited)"; 5715 LIBRARY_SEARCH_PATHS = (
5716 "$(inherited)",
5717 "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
5718 "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
5719 );
5720 LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../libraries/i386-darwin/lib_debug\"";
5721 LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/../../libraries/i386-darwin/lib_release\"";
5660 OTHER_LDFLAGS = "-Wl,-search_paths_first"; 5722 OTHER_LDFLAGS = "-Wl,-search_paths_first";
5661 PRODUCT_NAME = crashreporter; 5723 PRODUCT_NAME = crashreporter;
5662 ZERO_LINK = NO; 5724 ZERO_LINK = NO;
@@ -5671,7 +5733,13 @@
5671 GCC_PREFIX_HEADER = macutil_Prefix.h; 5733 GCC_PREFIX_HEADER = macutil_Prefix.h;
5672 GCC_SYMBOLS_PRIVATE_EXTERN = NO; 5734 GCC_SYMBOLS_PRIVATE_EXTERN = NO;
5673 INFOPLIST_FILE = "crashreporter-Info.plist"; 5735 INFOPLIST_FILE = "crashreporter-Info.plist";
5674 LIBRARY_SEARCH_PATHS = "$(inherited)"; 5736 LIBRARY_SEARCH_PATHS = (
5737 "$(inherited)",
5738 "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
5739 "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
5740 );
5741 LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../libraries/i386-darwin/lib_debug\"";
5742 LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/../../libraries/i386-darwin/lib_release\"";
5675 OTHER_LDFLAGS = "-Wl,-search_paths_first"; 5743 OTHER_LDFLAGS = "-Wl,-search_paths_first";
5676 PRODUCT_NAME = crashreporter; 5744 PRODUCT_NAME = crashreporter;
5677 }; 5745 };
@@ -5718,9 +5786,16 @@
5718 "$(SRCROOT)/../../libraries/universal-darwin/lib_release", 5786 "$(SRCROOT)/../../libraries/universal-darwin/lib_release",
5719 "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", 5787 "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
5720 "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", 5788 "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
5789 "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
5790 "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)",
5791 "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_4)",
5792 "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_5)",
5721 ); 5793 );
5722 LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/vivox-runtime/universal-darwin\""; 5794 LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/vivox-runtime/universal-darwin\"";
5723 LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../libraries/universal-darwin/lib_debug\""; 5795 LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../libraries/universal-darwin/lib_debug\"";
5796 LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3 = "\"$(SRCROOT)/build/Universal\"";
5797 LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_4 = "\"$(SRCROOT)/../../libraries/i386-darwin/lib_debug\"";
5798 LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_5 = "\"$(SRCROOT)/../../libraries/i386-darwin/lib_release\"";
5724 OTHER_LDFLAGS = "-Wl,-search_paths_first"; 5799 OTHER_LDFLAGS = "-Wl,-search_paths_first";
5725 PRODUCT_NAME = "Second Life"; 5800 PRODUCT_NAME = "Second Life";
5726 SHARED_PRECOMPS_DIR = "$(BUILD_DIR)/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders"; 5801 SHARED_PRECOMPS_DIR = "$(BUILD_DIR)/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders";
@@ -5751,10 +5826,18 @@
5751 "$(SRCROOT)/../../libraries/universal-darwin/lib_release", 5826 "$(SRCROOT)/../../libraries/universal-darwin/lib_release",
5752 "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", 5827 "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
5753 "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", 5828 "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
5829 "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
5830 "$(LIBRARY_SEARCH_PATHS_QUOTED_3)",
5831 "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)",
5832 "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_4)",
5754 ); 5833 );
5755 LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/vivox-runtime/universal-darwin\""; 5834 LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/vivox-runtime/universal-darwin\"";
5756 LIBRARY_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/build/Universal\""; 5835 LIBRARY_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/build/Universal\"";
5757 LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../libraries/universal-darwin/lib_debug\""; 5836 LIBRARY_SEARCH_PATHS_QUOTED_3 = "\"$(SRCROOT)/build/Universal\"";
5837 LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../libraries/i386-darwin/lib_release\"";
5838 LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Development\"";
5839 LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3 = "\"$(SRCROOT)/../../libraries/i386-darwin/lib_debug\"";
5840 LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_4 = "\"$(SRCROOT)/../../libraries/i386-darwin/lib_release\"";
5758 OTHER_CFLAGS = ( 5841 OTHER_CFLAGS = (
5759 "-DLL_DARWIN=1", 5842 "-DLL_DARWIN=1",
5760 "-DLL_RELEASE=1", 5843 "-DLL_RELEASE=1",
@@ -5798,6 +5881,7 @@
5798 GCC_WARN_UNUSED_VALUE = YES; 5881 GCC_WARN_UNUSED_VALUE = YES;
5799 GCC_WARN_UNUSED_VARIABLE = YES; 5882 GCC_WARN_UNUSED_VARIABLE = YES;
5800 HEADER_SEARCH_PATHS = ( 5883 HEADER_SEARCH_PATHS = (
5884 ../,
5801 "../../libraries/$(arch)-darwin/include", 5885 "../../libraries/$(arch)-darwin/include",
5802 ../../libraries/include, 5886 ../../libraries/include,
5803 ../llcommon, 5887 ../llcommon,
@@ -5806,6 +5890,7 @@
5806 MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; 5890 MACOSX_DEPLOYMENT_TARGET_i386 = 10.4;
5807 MACOSX_DEPLOYMENT_TARGET_ppc = 10.3; 5891 MACOSX_DEPLOYMENT_TARGET_ppc = 10.3;
5808 OTHER_CFLAGS = ( 5892 OTHER_CFLAGS = (
5893 "-DLL_CURRENT_HAVOK_VERSION=460",
5809 "-DLL_DARWIN=1", 5894 "-DLL_DARWIN=1",
5810 "-DLL_DEBUG=1", 5895 "-DLL_DEBUG=1",
5811 "-D_DEBUG", 5896 "-D_DEBUG",
@@ -5860,6 +5945,7 @@
5860 GCC_WARN_UNUSED_VALUE = YES; 5945 GCC_WARN_UNUSED_VALUE = YES;
5861 GCC_WARN_UNUSED_VARIABLE = YES; 5946 GCC_WARN_UNUSED_VARIABLE = YES;
5862 HEADER_SEARCH_PATHS = ( 5947 HEADER_SEARCH_PATHS = (
5948 ../,
5863 "../../libraries/$(arch)-darwin/include", 5949 "../../libraries/$(arch)-darwin/include",
5864 ../../libraries/include, 5950 ../../libraries/include,
5865 ../llcommon, 5951 ../llcommon,
@@ -5868,6 +5954,7 @@
5868 MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; 5954 MACOSX_DEPLOYMENT_TARGET_i386 = 10.4;
5869 MACOSX_DEPLOYMENT_TARGET_ppc = 10.3; 5955 MACOSX_DEPLOYMENT_TARGET_ppc = 10.3;
5870 OTHER_CFLAGS = ( 5956 OTHER_CFLAGS = (
5957 "-DLL_CURRENT_HAVOK_VERSION=460",
5871 "-DLL_DARWIN=1", 5958 "-DLL_DARWIN=1",
5872 "-DLL_RELEASE=1", 5959 "-DLL_RELEASE=1",
5873 "-DLL_RELEASE_FOR_DOWNLOAD=1", 5960 "-DLL_RELEASE_FOR_DOWNLOAD=1",
diff --git a/linden/indra/newview/macview_Prefix.h b/linden/indra/newview/macview_Prefix.h
index acb31d9..d71dc38 100644
--- a/linden/indra/newview/macview_Prefix.h
+++ b/linden/indra/newview/macview_Prefix.h
@@ -58,7 +58,6 @@
58 58
59#include "llbox.h" 59#include "llbox.h"
60#include "llbutton.h" 60#include "llbutton.h"
61#include "llcameraview.h"
62#include "llconsole.h" 61#include "llconsole.h"
63#include "lldrawable.h" 62#include "lldrawable.h"
64#include "llfirstuse.h" 63#include "llfirstuse.h"
@@ -83,7 +82,7 @@
83#include "llmoveview.h" 82#include "llmoveview.h"
84#include "llselectmgr.h" 83#include "llselectmgr.h"
85#include "llsky.h" 84#include "llsky.h"
86#include "llsphere.h" 85#include "llrendersphere.h"
87#include "llstatusbar.h" 86#include "llstatusbar.h"
88#include "lltalkview.h" 87#include "lltalkview.h"
89#include "lltool.h" 88#include "lltool.h"
@@ -117,7 +116,7 @@
117#include "llresmgr.h" 116#include "llresmgr.h"
118#include "llui.h" 117#include "llui.h"
119#include "llviewborder.h" 118#include "llviewborder.h"
120#include "llvieweruictrlfactory.h" 119#include "lluictrlfactory.h"
121 120
122 121
123/////////////////// From lldrawpool.cpp 122/////////////////// From lldrawpool.cpp
@@ -172,7 +171,7 @@
172#include "llviewerwindow.h" 171#include "llviewerwindow.h"
173#include "llcontrol.h" 172#include "llcontrol.h"
174#include "lluictrl.h" 173#include "lluictrl.h"
175#include "llvieweruictrlfactory.h" 174#include "lluictrlfactory.h"
176#include "llviewborder.h" 175#include "llviewborder.h"
177#include "llviewerimagelist.h" 176#include "llviewerimagelist.h"
178#include "llbutton.h" 177#include "llbutton.h"
diff --git a/linden/indra/newview/moviemaker.cpp b/linden/indra/newview/moviemaker.cpp
deleted file mode 100644
index 369637a..0000000
--- a/linden/indra/newview/moviemaker.cpp
+++ /dev/null
@@ -1,811 +0,0 @@
1/**
2 * @file moviemaker.cpp
3 * @brief MovieMaker implementation
4 *
5 * $LicenseInfo:firstyear=2003&license=viewergpl$
6 *
7 * Copyright (c) 2003-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// MovieMaker.cpp
34// ===============================================
35
36#include "llviewerprecompiledheaders.h"
37
38#include "moviemaker.h"
39#include <memory>
40#include "llmemtype.h"
41
42#if LL_WINDOWS
43
44#include <windowsx.h>
45
46HANDLE MakeDib( HBITMAP hbitmap, UINT bits );
47HBITMAP LoadBMPFromFB( int w, int h );
48
49/*
50 ===============================================
51 Constructors, Destructor
52 ===============================================
53*/
54
55
56MovieMaker::MovieMaker()
57{
58 snprintf( fname, sizeof(fname), "movie.avi" ); /* Flawfinder: ignore */
59 width = -1;
60 height = -1;
61
62 bOK = true;
63 nFrames = 0;
64
65 pfile = NULL;
66 ps = NULL;
67 psCompressed = NULL;
68 psText = NULL;
69 aopts[0] = &opts;
70
71 // Check VFW version.
72 WORD wVer = HIWORD( VideoForWindowsVersion() );
73 if ( wVer < 0x010A )
74 {
75 fprintf( stderr, "VFW version is too old.\n" );
76 exit( -1 );
77 }
78 else
79 {
80 AVIFileInit();
81 }
82}
83
84
85MovieMaker::~MovieMaker()
86{
87 if (ps)
88 AVIStreamClose(ps);
89
90 if (psCompressed)
91 AVIStreamClose(psCompressed);
92
93 if (psText)
94 AVIStreamClose(psText);
95
96 if (pfile)
97 {
98 AVIFileClose(pfile);
99 }
100
101 WORD wVer = HIWORD(VideoForWindowsVersion());
102 if (wVer >= 0x010A)
103 {
104 AVIFileExit();
105 }
106}
107
108void MovieMaker::StartCapture( char *name , int x, int y)
109{
110 strncpy( fname, name, sizeof(fname) -1 ); /* Flawfinder: ignore */
111 fname[sizeof(fname) -1] = '\0';
112
113 // Get the width and height.
114 width = x;
115 height = y;
116
117 fprintf( stderr, "Starting %d x %d capture to file: %s\n", width, height, fname );
118
119 bOK = TRUE;
120
121 nFrames = 0;
122
123}
124
125void MovieMaker::EndCapture()
126{
127 fprintf( stderr, "\n" );
128 if (ps)
129 {
130 AVIStreamClose(ps);
131 ps = NULL;
132 }
133
134 if (psCompressed)
135 {
136 AVIStreamClose(psCompressed);
137 psCompressed = NULL;
138 }
139
140 if (psText)
141 {
142 AVIStreamClose(psText);
143 psText = NULL;
144 }
145
146 if (pfile)
147 {
148 AVIFileClose(pfile);
149 pfile = NULL;
150 }
151
152 WORD wVer = HIWORD(VideoForWindowsVersion());
153 if (wVer >= 0x010A)
154 {
155 AVIFileExit();
156 }
157
158}
159
160bool MovieMaker::Snap()
161{
162 HRESULT hr;
163
164 if (!bOK)
165 return false;
166
167 // Get an image and stuff it into a bitmap.
168 HBITMAP bmp;
169 bmp = LoadBMPFromFB( width, height );
170
171 LPBITMAPINFOHEADER alpbi = (LPBITMAPINFOHEADER)GlobalLock(MakeDib(bmp, 32));
172 DeleteObject( bmp );
173
174 if (alpbi == NULL)
175 {
176 bOK = false;
177 return false;
178 }
179 if (width>=0 && width != alpbi->biWidth)
180 {
181 GlobalFreePtr(alpbi);
182 bOK = false;
183 return false;
184 }
185 if (height>=0 && height != alpbi->biHeight)
186 {
187 GlobalFreePtr(alpbi);
188 bOK = false;
189 return false;
190 }
191 width = alpbi->biWidth;
192 height = alpbi->biHeight;
193 if (nFrames == 0)
194 {
195 hr = AVIFileOpenA(&pfile, // returned file pointer
196 fname, // file name
197 OF_WRITE | OF_CREATE, // mode to open file with
198 NULL); // use handler determined
199 // from file extension....
200 if (hr != AVIERR_OK)
201 {
202 GlobalFreePtr(alpbi);
203 bOK = false;
204 return false;
205 }
206 _fmemset(&strhdr, 0, sizeof(strhdr));
207 strhdr.fccType = streamtypeVIDEO;// stream type
208 strhdr.fccHandler = 0;
209 strhdr.dwScale = 1;
210 strhdr.dwRate = 15;
211 strhdr.dwSuggestedBufferSize = alpbi->biSizeImage;
212 SetRect(&strhdr.rcFrame, 0, 0, // rectangle for stream
213 (int) alpbi->biWidth,
214 (int) alpbi->biHeight);
215
216 // And create the stream;
217 hr = AVIFileCreateStream(pfile, // file pointer
218 &ps, // returned stream pointer
219 &strhdr); // stream header
220 if (hr != AVIERR_OK)
221 {
222 GlobalFreePtr(alpbi);
223 bOK = false;
224 return false;
225 }
226
227 _fmemset(&opts, 0, sizeof(opts));
228
229 if (!AVISaveOptions(NULL, ICMF_CHOOSE_KEYFRAME, 1, &ps, (LPAVICOMPRESSOPTIONS FAR *) &aopts))
230 {
231 fprintf( stderr, "AVISaveOptions failed.\n" );
232 GlobalFreePtr(alpbi);
233 bOK = false;
234 return false;
235 }
236
237 hr = AVIMakeCompressedStream(&psCompressed, ps, &opts, NULL);
238 if (hr != AVIERR_OK)
239 {
240 fprintf( stderr, "AVIMakeCompressedStream failed.\n" );
241 GlobalFreePtr(alpbi);
242 bOK = false;
243 return false;
244 }
245
246 hr = AVIStreamSetFormat(psCompressed, 0,
247 alpbi, // stream format
248 alpbi->biSize + // format size
249 alpbi->biClrUsed * sizeof(RGBQUAD));
250 if (hr != AVIERR_OK)
251 {
252 fprintf( stderr, "AVIStreamSetFormat failed.\n" );
253 GlobalFreePtr(alpbi);
254 bOK = false;
255 return false;
256 }
257
258 // Fill in the stream header for the text stream....
259
260 // The text stream is in 60ths of a second....
261/*
262 _fmemset(&strhdr, 0, sizeof(strhdr));
263 strhdr.fccType = streamtypeTEXT;
264 strhdr.fccHandler = mmioFOURCC('D', 'R', 'A', 'W');
265 strhdr.dwScale = 1;
266 strhdr.dwRate = 60;
267 strhdr.dwSuggestedBufferSize = sizeof(szText);
268 SetRect(&strhdr.rcFrame, 0, (int) alpbi->biHeight,
269 (int) alpbi->biWidth, (int) alpbi->biHeight + TEXT_HEIGHT);
270
271 // ....and create the stream.
272 hr = AVIFileCreateStream(pfile, &psText, &strhdr);
273 if (hr != AVIERR_OK)
274 {
275 GlobalFreePtr(alpbi);
276 bOK = false;
277 return false;
278 }
279
280 dwTextFormat = sizeof(dwTextFormat);
281 hr = AVIStreamSetFormat(psText, 0, &dwTextFormat, sizeof(dwTextFormat));
282 if (hr != AVIERR_OK)
283 {
284 GlobalFreePtr(alpbi);
285 bOK = false;
286 return false;
287 }
288*/
289 }
290
291 // Now actual writing
292 hr = AVIStreamWrite(psCompressed, // stream pointer
293 nFrames * 1, // 10, // time of this frame
294 1, // number to write
295 (LPBYTE) alpbi + // pointer to data
296 alpbi->biSize +
297 alpbi->biClrUsed * sizeof(RGBQUAD),
298 alpbi->biSizeImage, // size of this frame
299 AVIIF_KEYFRAME, // flags....
300 NULL,
301 NULL);
302 if (hr != AVIERR_OK)
303 {
304 fprintf( stderr, "AVIStreamWrite failed.\n" );
305 GlobalFreePtr(alpbi);
306 bOK = false;
307 return false;
308 }
309
310 // Make some text to put in the file ...
311 //LoadString(hInstance, IDS_TEXTFORMAT, szMessage, BUFSIZE );
312 /*
313 strcpy(szMessage, "This is frame #%d");
314
315 int iLen = wsprintf(szText, szMessage, (int)(nFrames + 1));
316
317 // ... and write it as well.
318 hr = AVIStreamWrite(psText,
319 nFrames * 40,
320 1,
321 szText,
322 iLen + 1,
323 AVIIF_KEYFRAME,
324 NULL,
325 NULL);
326 if (hr != AVIERR_OK)
327 {
328 GlobalFreePtr(alpbi);
329 bOK = false;
330 return false;
331 }
332 */
333 GlobalFreePtr(alpbi);
334
335 nFrames++;
336
337 fprintf( stderr, "Wrote frame %d.\r", nFrames );
338
339 return true;
340}
341
342static HANDLE MakeDib( HBITMAP hbitmap, UINT bits )
343{
344 HANDLE hdib ;
345 HDC hdc ;
346 BITMAP bitmap ;
347 UINT wLineLen ;
348 DWORD dwSize ;
349 DWORD wColSize ;
350 LPBITMAPINFOHEADER lpbi ;
351 LPBYTE lpBits ;
352
353 GetObject(hbitmap,sizeof(BITMAP),&bitmap) ;
354
355 //
356 // DWORD align the width of the DIB
357 // Figure out the size of the colour table
358 // Calculate the size of the DIB
359 //
360 wLineLen = (bitmap.bmWidth*bits+31)/32 * 4;
361 wColSize = sizeof(RGBQUAD)*((bits <= 8) ? 1<<bits : 0);
362 dwSize = sizeof(BITMAPINFOHEADER) + wColSize +
363 (DWORD)(UINT)wLineLen*(DWORD)(UINT)bitmap.bmHeight;
364
365 //
366 // Allocate room for a DIB and set the LPBI fields
367 //
368 hdib = GlobalAlloc(GHND,dwSize);
369 if (!hdib)
370 return hdib ;
371
372 lpbi = (LPBITMAPINFOHEADER)GlobalLock(hdib) ;
373
374 lpbi->biSize = sizeof(BITMAPINFOHEADER) ;
375 lpbi->biWidth = bitmap.bmWidth ;
376 lpbi->biHeight = bitmap.bmHeight ;
377 lpbi->biPlanes = 1 ;
378 lpbi->biBitCount = (WORD) bits ;
379 lpbi->biCompression = BI_RGB ;
380 lpbi->biSizeImage = dwSize - sizeof(BITMAPINFOHEADER) - wColSize ;
381 lpbi->biXPelsPerMeter = 0 ;
382 lpbi->biYPelsPerMeter = 0 ;
383 lpbi->biClrUsed = (bits <= 8) ? 1<<bits : 0;
384 lpbi->biClrImportant = 0 ;
385
386 //
387 // Get the bits from the bitmap and stuff them after the LPBI
388 //
389 lpBits = (LPBYTE)(lpbi+1)+wColSize ;
390
391 hdc = CreateCompatibleDC(NULL) ;
392
393 GetDIBits(hdc,hbitmap,0,bitmap.bmHeight,lpBits,(LPBITMAPINFO)lpbi, DIB_RGB_COLORS);
394
395 // Fix this if GetDIBits messed it up....
396 lpbi->biClrUsed = (bits <= 8) ? 1<<bits : 0;
397
398 DeleteDC(hdc) ;
399 GlobalUnlock(hdib);
400
401 return hdib ;
402}
403
404
405static HBITMAP LoadBMPFromFB( int w, int h )
406{
407 // Create a normal DC and a memory DC for the entire screen. The
408 // normal DC provides a "snapshot" of the screen contents. The
409 // memory DC keeps a copy of this "snapshot" in the associated
410 // bitmap.
411
412 HDC hdcScreen = wglGetCurrentDC();
413 HDC hdcCompatible = CreateCompatibleDC(hdcScreen);
414
415 // Create a compatible bitmap for hdcScreen.
416
417 HBITMAP hbmScreen = CreateCompatibleBitmap(hdcScreen,
418 // GetDeviceCaps(hdcScreen, HORZRES),
419 // GetDeviceCaps(hdcScreen, VERTRES));
420 w,
421 h );
422
423 if (hbmScreen == 0)
424 {
425 fprintf( stderr, "hbmScreen == NULL\nExiting.\n" );
426 exit( -1 );
427 //errhandler("hbmScreen", hwnd);
428 }
429
430 // Select the bitmaps into the compatible DC.
431
432 if (!SelectObject(hdcCompatible, hbmScreen))
433 {
434 fprintf( stderr, "Couldn't SelectObject()\nExiting.\n" );
435 exit( -1 );
436 //errhandler("Compatible Bitmap Selection", hwnd);
437 }
438
439 // Hide the application window.
440
441 // ShowWindow(hwnd, SW_HIDE);
442
443 //Copy color data for the entire display into a
444 //bitmap that is selected into a compatible DC.
445
446 if (!BitBlt(hdcCompatible,
447 0,0,
448 w, h,
449 hdcScreen,
450 // 512,512,
451 0, 0,
452 SRCCOPY))
453 {
454 fprintf( stderr, "Screen to Compat Blt Failed\nExiting.\n" );
455 exit( -1 );
456 //errhandler("Screen to Compat Blt Failed", hwnd);
457 }
458
459 // Redraw the application window.
460 //ShowWindow(hwnd, SW_SHOW);
461
462 DeleteDC( hdcCompatible );
463
464 return( hbmScreen );
465}
466
467#elif LL_DARWIN
468
469 #include <AGL/agl.h>
470 #include <AGL/gl.h>
471 #include <AGL/glu.h>
472
473// BAD Apple. BAD!
474#ifdef verify
475 #undef verify
476#endif
477
478#include "llviewerwindow.h"
479#include "llworld.h"
480
481MovieMaker::MovieMaker()
482{
483 movie = NULL;
484 movieResRef = 0;
485 track = NULL;
486 media = NULL;
487 width = 0;
488 height = 0;
489 bufferSize = 0;
490 rowBytes = 0;
491 buffer = NULL;
492 invertedBuffer = NULL;
493 ci = NULL;
494 gworld = NULL;
495 idh = NULL;
496}
497
498MovieMaker::~MovieMaker()
499{
500 EndCapture();
501}
502
503void MovieMaker::StartCapture( char *name , int x, int y)
504{
505 strncpy( fname, name, sizeof(fname)); /* Flawfinder: ignore */
506 width = x;
507 height = y;
508
509 setupMovie();
510}
511
512OSStatus MovieMaker::setupMovie()
513{
514 OSStatus error = noErr;
515 FSRef fileRef;
516 FSSpec fileSpec;
517
518 rowBytes = width * 4;
519 bufferSize = height * rowBytes;
520 LLMemType mt(LLMemType::MTYPE_SCRIPT);
521 buffer = (char*) new char(bufferSize);
522 invertedBuffer = (char*) new char(bufferSize);
523
524 rect.left = 0;
525 rect.top = 0;
526 rect.right = width;
527 rect.bottom = height;
528
529 error = NewGWorldFromPtr(&gworld, k32ARGBPixelFormat, &rect, 0, 0, 0, buffer, rowBytes);
530
531 if (error == noErr)
532 {
533 LockPixels(GetGWorldPixMap(gworld));
534 }
535
536// MBW -- I think this needs to happen after all the dialogs, etc.
537// if (error == noErr)
538// {
539// Microseconds(&lastFrameTime);
540// error = grabFrame();
541// }
542
543 if (error == noErr)
544 {
545 error = EnterMovies();
546 }
547
548 if (error == noErr)
549 {
550 ci = OpenDefaultComponent(StandardCompressionType,StandardCompressionSubType);
551 if(ci == NULL)
552 error = paramErr;
553 }
554
555 if (error == noErr)
556 {
557 long flags;
558
559 SCGetInfo(ci,scPreferenceFlagsType,&flags);
560 flags &= ~scShowBestDepth;
561 flags |= scAllowZeroFrameRate;
562 SCSetInfo(ci,scPreferenceFlagsType,&flags);
563 }
564
565 if (error == noErr)
566 {
567 send_agent_pause();
568 gViewerWindow->mWindow->beforeDialog();
569
570 error = SCRequestSequenceSettings(ci);
571
572 gViewerWindow->mWindow->afterDialog();
573 send_agent_resume();
574
575 if (error == scUserCancelled)
576 {
577 // deal with user cancelling.
578 EndCapture();
579 }
580 }
581
582 if (error == noErr)
583 {
584 // This is stoopid. I have to take the passed full path, create the file so I can get an FSRef, and Get Info to get the FSSpec for QuickTime. Could Apple make this any more difficult...
585 FILE* file = LLFile::fopen(fname, "w"); /* Flawfinder: ignore */
586 if (file)
587 {
588 fclose(file);
589
590 error = FSPathMakeRef((UInt8*)fname, &fileRef, NULL);
591 if (error == noErr)
592 error = FSGetCatalogInfo(&fileRef, 0, NULL, NULL, &fileSpec, NULL);
593 }
594 else
595 {
596 error = paramErr;
597 }
598 }
599
600 if (error == noErr)
601 {
602 error = CreateMovieFile(&fileSpec, 'TVOD', smCurrentScript, createMovieFileDeleteCurFile | createMovieFileDontCreateResFile, &movieResRef, &movie);
603 }
604
605 if (error == noErr)
606 {
607 track = NewMovieTrack(movie, FixRatio(width, 1), FixRatio(height, 1), kNoVolume);
608 error = GetMoviesError();
609 }
610
611 if (error == noErr)
612 {
613 media = NewTrackMedia(track, VideoMediaType, 600, NULL, 0);
614 error = GetMoviesError();
615 }
616
617 if (error == noErr)
618 {
619 Microseconds(&lastFrameTime);
620 error = grabFrame();
621 }
622
623 if (error == noErr)
624 {
625 error = SCCompressSequenceBegin(ci,GetPortPixMap(gworld),nil,&idh);
626 }
627
628 if (error == noErr)
629 {
630 error = BeginMediaEdits(media);
631 }
632
633 if (error != noErr)
634 {
635 media = NULL;
636 }
637
638 return error;
639}
640
641void MovieMaker::EndCapture()
642{
643 OSStatus error = noErr;
644
645 if (movie && movieResRef)
646 {
647 if (media && track)
648 {
649 // Errors adding the frame aren't too important here.
650 (void)addFrame();
651
652 error = EndMediaEdits(media);
653 if (error == noErr)
654 {
655 error = SCCompressSequenceEnd(ci);
656 }
657
658 if (error == noErr)
659 {
660 error = InsertMediaIntoTrack(track, 0, 0, GetMediaDuration(media), fixed1);
661 }
662 media = NULL;
663 track = NULL;
664 }
665
666 short resId = movieInDataForkResID;
667 error = AddMovieResource(movie, movieResRef, &resId, "\pSecond Life");
668 CloseMovieFile(movieResRef);
669 movieResRef = 0;
670 movie = NULL;
671 }
672
673 // NOTE: idh is disposed by SCCompressSequenceEnd.
674 idh = NULL;
675
676 if(ci)
677 {
678 CloseComponent(ci);
679 ci = NULL;
680 }
681
682 if(gworld)
683 {
684 DisposeGWorld(gworld);
685 gworld = NULL;
686 }
687
688 if(buffer)
689 {
690 delete(buffer);
691 buffer = NULL;
692 }
693
694 if(invertedBuffer)
695 {
696 delete(invertedBuffer);
697 invertedBuffer = NULL;
698 }
699}
700
701OSStatus MovieMaker::grabFrame()
702{
703 OSStatus error = noErr;
704 GLenum glerr;
705
706 // Grab a frome from GL
707 glReadBuffer(GL_BACK);
708 glReadPixels(0 ,0, width, height,
709#ifdef LL_BIG_ENDIAN
710 // PowerPC Mac
711 GL_BGRA,
712 GL_UNSIGNED_INT_8_8_8_8_REV,
713#else
714 // Intel Mac
715 GL_BGRA,
716 GL_UNSIGNED_INT_8_8_8_8,
717#endif
718 invertedBuffer);
719 glerr = glGetError();
720
721 // Invert the lines top to bottom
722 if (glerr == GL_NO_ERROR)
723 {
724 long i, j;
725
726 i = j = 0;
727
728 // Copy rows into tmp buffer one at a time, reversing their order
729 for (i = 0, j = bufferSize - rowBytes; i < bufferSize; i += rowBytes, j -= rowBytes)
730 BlockMoveData(&invertedBuffer[i], &buffer[j], rowBytes);
731 }
732 else
733 {
734 error = paramErr;
735 }
736
737 return error;
738}
739
740OSStatus MovieMaker::addFrame()
741{
742 OSStatus error = noErr;
743 Handle compressedData;
744 short syncFlag;
745 long dataSize;
746 UnsignedWide now;
747
748 CGrafPtr oldPort;
749 GDHandle oldGDeviceH;
750
751 GetGWorld(&oldPort, &oldGDeviceH);
752 SetGWorld(gworld, nil);
753
754 // Compress the frame and add it to the movie
755
756 error = SCCompressSequenceFrame(ci,GetPortPixMap(gworld),&rect,&compressedData,&dataSize,&syncFlag);
757
758 Microseconds(&now);
759
760 if (error == noErr)
761 {
762 double duration = (now.lo - lastFrameTime.lo); // duration in microseconds
763 duration *= GetMovieTimeScale(movie);
764 duration *= 1.0 / 1000000.0;
765
766 error = AddMediaSample(
767 media,
768 compressedData,
769 0,
770 dataSize,
771 (TimeValue)duration,
772 (SampleDescriptionHandle)idh,
773 1,
774 syncFlag,
775 nil);
776
777 }
778
779 lastFrameTime = now;
780
781 SetGWorld(oldPort, oldGDeviceH);
782
783 return error;
784}
785
786bool MovieMaker::Snap()
787{
788 bool result = false;
789
790 if (movie && movieResRef && media && track)
791 {
792 OSStatus error = noErr;
793
794 error = addFrame();
795
796 if (error == noErr)
797 {
798 error = grabFrame();
799 }
800
801 if (error == noErr)
802 {
803 result = true;
804 }
805 }
806
807 return result;
808}
809
810#endif
811
diff --git a/linden/indra/newview/moviemaker.h b/linden/indra/newview/moviemaker.h
deleted file mode 100644
index f18ce3e..0000000
--- a/linden/indra/newview/moviemaker.h
+++ /dev/null
@@ -1,143 +0,0 @@
1/**
2 * @file moviemaker.h
3 * @brief MovieMaker class definition
4 *
5 * $LicenseInfo:firstyear=2003&license=viewergpl$
6 *
7 * Copyright (c) 2003-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 _MOVIEMAKER_H
33#define _MOVIEMAKER_H
34
35#if LL_DARWIN
36#import <QuickTime/QuickTime.h>
37#endif
38
39//
40// *TODO: Refactor this implementation such that we provide an abstact
41// interface in this file, and provide platform specific
42// implementation in the cpp file. This is just crazy to have nearly
43// the same class re-defined for different platforms, because then
44// usage of the class is platform dependent.
45//
46
47#if LL_WINDOWS
48
49#include <vfw.h>
50
51#define TEXT_HEIGHT 20
52#define AVIIF_KEYFRAME 0x00000010L // this frame is a key frame.
53#define BUFSIZE 260
54
55class MovieMaker {
56private:
57 //CString FName;
58 char fname[64];
59 int width;
60 int height;
61
62 AVISTREAMINFO strhdr;
63 PAVIFILE pfile;
64 PAVISTREAM ps;
65 PAVISTREAM psCompressed;
66 PAVISTREAM psText;
67 AVICOMPRESSOPTIONS opts;
68 AVICOMPRESSOPTIONS FAR * aopts[1];
69 DWORD dwTextFormat;
70 COMPVARS cvars;
71 char szText[BUFSIZE];
72 int nFrames;
73 bool bOK;
74
75
76public:
77 MovieMaker();
78 ~MovieMaker();
79
80 inline bool IsOK() const { return bOK; };
81 void StartCapture( char *name , int x, int y);
82 void EndCapture();
83 bool Snap();
84};
85
86#elif LL_DARWIN
87
88class MovieMaker {
89private:
90 char fname[64]; /*Flawfinder: ignore*/
91
92 Movie movie;
93 short movieResRef;
94 Track track;
95 Media media;
96 int width;
97 int height;
98 long bufferSize;
99 long rowBytes;
100 char *buffer;
101 char *invertedBuffer;
102
103 GWorldPtr gworld;
104 Rect rect;
105
106 ComponentInstance ci;
107
108 ImageDescriptionHandle idh;
109 SCTemporalSettings ts;
110 SCDataRateSettings ds;
111
112 UnsignedWide lastFrameTime;
113
114 OSStatus setupMovie();
115 OSStatus grabFrame();
116 OSStatus addFrame();
117
118public:
119 MovieMaker();
120 ~MovieMaker();
121
122 inline bool IsOK() const { return true; };
123 void StartCapture( char *name , int x, int y);
124 void EndCapture();
125 bool Snap();
126};
127
128#elif LL_LINUX
129// *FIX: we need a working implementation on linux.
130class MovieMaker {
131public:
132 MovieMaker() {}
133 ~MovieMaker() {}
134
135 inline bool IsOK() const { return false; };
136 void StartCapture( char *name , int x, int y) {}
137 void EndCapture() {}
138 bool Snap() { return false; }
139};
140
141#endif
142
143#endif
diff --git a/linden/indra/newview/newview.vcproj b/linden/indra/newview/newview.vcproj
index 7a8fc2a..3fe72e6 100644
--- a/linden/indra/newview/newview.vcproj
+++ b/linden/indra/newview/newview.vcproj
@@ -31,18 +31,18 @@
31 UsePrecompiledHeader="0" 31 UsePrecompiledHeader="0"
32 PrecompiledHeaderThrough="llviewerprecompiledheaders.h" 32 PrecompiledHeaderThrough="llviewerprecompiledheaders.h"
33 WarningLevel="3" 33 WarningLevel="3"
34 WarnAsError="TRUE" 34 WarnAsError="FALSE"
35 Detect64BitPortabilityProblems="FALSE" 35 Detect64BitPortabilityProblems="FALSE"
36 DebugInformationFormat="4"/> 36 DebugInformationFormat="4"/>
37 <Tool 37 <Tool
38 Name="VCCustomBuildTool"/> 38 Name="VCCustomBuildTool"/>
39 <Tool 39 <Tool
40 Name="VCLinkerTool" 40 Name="VCLinkerTool"
41 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib EZ_LCD_Wrapper.lib lgLcd.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc71-mt-s.lib libcurld.lib libeay32.lib libexpatMT.lib OpenJPEGd.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.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" 41 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib EZ_LCD_Wrapper_d.lib lgLcd.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc71-mt-sgd-1_34_1.lib libboost_signals-vc71-mt-sgd-1_34_1.lib libboost_program_options-vc71-mt-sgd-1_34_1.lib libcurld.lib libeay32.lib libexpatMT.lib OpenJPEGd.lib llmozlib2d.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 libndofdev.lib"
42 OutputFile="$(ConfigurationName)/debugview.exe" 42 OutputFile="$(ConfigurationName)/debugview.exe"
43 LinkIncremental="2" 43 LinkIncremental="2"
44 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_debug&quot;" 44 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_debug&quot;"
45 IgnoreDefaultLibraryNames="msvcrtd;libcd.lib" 45 IgnoreDefaultLibraryNames="msvcrt.lib;MSVCRTD.lib;libcd.lib"
46 GenerateDebugInformation="TRUE" 46 GenerateDebugInformation="TRUE"
47 ProgramDatabaseFile="$(TargetName).pdb" 47 ProgramDatabaseFile="$(TargetName).pdb"
48 SubSystem="2" 48 SubSystem="2"
@@ -105,7 +105,7 @@
105 Name="VCCustomBuildTool"/> 105 Name="VCCustomBuildTool"/>
106 <Tool 106 <Tool
107 Name="VCLinkerTool" 107 Name="VCLinkerTool"
108 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-vc71-mt-s.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 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 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.lib lgLcd.lib" 108 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-vc71-mt-s-1_34_1.lib libboost_signals-vc71-mt-s-1_34_1.lib libboost_program_options-vc71-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.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 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.lib lgLcd.lib libndofdev.lib"
109 OutputFile="$(ConfigurationName)/newview.exe" 109 OutputFile="$(ConfigurationName)/newview.exe"
110 LinkIncremental="1" 110 LinkIncremental="1"
111 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;" 111 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;"
@@ -172,7 +172,7 @@
172 Outputs="$(TargetFileName)"/> 172 Outputs="$(TargetFileName)"/>
173 <Tool 173 <Tool
174 Name="VCLinkerTool" 174 Name="VCLinkerTool"
175 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-vc71-mt-s.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 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 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.lib lgLcd.lib" 175 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-vc71-mt-s-1_34_1.lib libboost_signals-vc71-mt-s-1_34_1.lib libboost_program_options-vc71-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.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 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.lib lgLcd.lib libndofdev.lib"
176 OutputFile="$(ConfigurationName)/SecondLife.exe" 176 OutputFile="$(ConfigurationName)/SecondLife.exe"
177 LinkIncremental="1" 177 LinkIncremental="1"
178 AdditionalLibraryDirectories="&quot;../lib_release/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;" 178 AdditionalLibraryDirectories="&quot;../lib_release/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;"
@@ -238,7 +238,7 @@
238 Name="VCCustomBuildTool"/> 238 Name="VCCustomBuildTool"/>
239 <Tool 239 <Tool
240 Name="VCLinkerTool" 240 Name="VCLinkerTool"
241 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-vc71-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib OpenJPEG.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.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.lib lgLcd.lib" 241 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-vc71-mt-s-1_34_1.lib libboost_signals-vc71-mt-s-1_34_1.lib libboost_program_options-vc71-mt-s-1_34_1.lib libcurl.lib libeay32.lib libexpatMT.lib OpenJPEG.lib llmozlib2.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.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.lib lgLcd.lib libndofdev.lib"
242 OutputFile="$(ConfigurationName)/newview_noopt.exe" 242 OutputFile="$(ConfigurationName)/newview_noopt.exe"
243 LinkIncremental="2" 243 LinkIncremental="2"
244 AdditionalLibraryDirectories="&quot;../lib_releasenoopt/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;" 244 AdditionalLibraryDirectories="&quot;../lib_releasenoopt/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;"
@@ -286,12 +286,6 @@
286 Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx" 286 Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
287 UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"> 287 UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
288 <File 288 <File
289 RelativePath=".\fakevoicesoundsignal.cpp">
290 </File>
291 <File
292 RelativePath=".\head.cpp">
293 </File>
294 <File
295 RelativePath=".\llagent.cpp"> 289 RelativePath=".\llagent.cpp">
296 </File> 290 </File>
297 <File 291 <File
@@ -325,9 +319,6 @@
325 RelativePath=".\llcallingcard.cpp"> 319 RelativePath=".\llcallingcard.cpp">
326 </File> 320 </File>
327 <File 321 <File
328 RelativePath=".\llcameraview.cpp">
329 </File>
330 <File
331 RelativePath=".\llcaphttpsender.cpp"> 322 RelativePath=".\llcaphttpsender.cpp">
332 </File> 323 </File>
333 <File 324 <File
@@ -352,6 +343,9 @@
352 RelativePath=".\llcommandhandler.cpp"> 343 RelativePath=".\llcommandhandler.cpp">
353 </File> 344 </File>
354 <File 345 <File
346 RelativePath=".\llcommandlineparser.cpp">
347 </File>
348 <File
355 RelativePath=".\llcompass.cpp"> 349 RelativePath=".\llcompass.cpp">
356 </File> 350 </File>
357 <File 351 <File
@@ -367,9 +361,6 @@
367 RelativePath=".\llcontainerview.cpp"> 361 RelativePath=".\llcontainerview.cpp">
368 </File> 362 </File>
369 <File 363 <File
370 RelativePath=".\llcontroldef.cpp">
371 </File>
372 <File
373 RelativePath=".\llcubemap.cpp"> 364 RelativePath=".\llcubemap.cpp">
374 </File> 365 </File>
375 <File 366 <File
@@ -385,6 +376,9 @@
385 RelativePath=".\lldebugview.cpp"> 376 RelativePath=".\lldebugview.cpp">
386 </File> 377 </File>
387 <File 378 <File
379 RelativePath=".\lldelayedgestureerror.cpp">
380 </File>
381 <File
388 RelativePath=".\lldirpicker.cpp"> 382 RelativePath=".\lldirpicker.cpp">
389 </File> 383 </File>
390 <File 384 <File
@@ -502,6 +496,9 @@
502 RelativePath=".\llfloaterbuyland.cpp"> 496 RelativePath=".\llfloaterbuyland.cpp">
503 </File> 497 </File>
504 <File 498 <File
499 RelativePath=".\llfloatercamera.cpp">
500 </File>
501 <File
505 RelativePath=".\llfloaterchat.cpp"> 502 RelativePath=".\llfloaterchat.cpp">
506 </File> 503 </File>
507 <File 504 <File
@@ -529,10 +526,10 @@
529 RelativePath=".\llfloatereditui.cpp"> 526 RelativePath=".\llfloatereditui.cpp">
530 </File> 527 </File>
531 <File 528 <File
532 RelativePath=".\llfloaterevent.cpp"> 529 RelativePath=".\llfloaterenvsettings.cpp">
533 </File> 530 </File>
534 <File 531 <File
535 RelativePath=".\llfloaterenvsettings.cpp"> 532 RelativePath=".\llfloaterevent.cpp">
536 </File> 533 </File>
537 <File 534 <File
538 RelativePath=".\llfloaterfriends.cpp"> 535 RelativePath=".\llfloaterfriends.cpp">
@@ -562,12 +559,18 @@
562 RelativePath=".\llfloaterhtmlhelp.cpp"> 559 RelativePath=".\llfloaterhtmlhelp.cpp">
563 </File> 560 </File>
564 <File 561 <File
562 RelativePath=".\llfloaterhud.cpp">
563 </File>
564 <File
565 RelativePath=".\llfloaterimagepreview.cpp"> 565 RelativePath=".\llfloaterimagepreview.cpp">
566 </File> 566 </File>
567 <File 567 <File
568 RelativePath=".\llfloaterinspect.cpp"> 568 RelativePath=".\llfloaterinspect.cpp">
569 </File> 569 </File>
570 <File 570 <File
571 RelativePath=".\llfloaterjoystick.cpp">
572 </File>
573 <File
571 RelativePath=".\llfloaterlagmeter.cpp"> 574 RelativePath=".\llfloaterlagmeter.cpp">
572 </File> 575 </File>
573 <File 576 <File
@@ -628,9 +631,15 @@
628 RelativePath=".\llfloatersellland.cpp"> 631 RelativePath=".\llfloatersellland.cpp">
629 </File> 632 </File>
630 <File 633 <File
634 RelativePath=".\llfloatersettingsdebug.cpp">
635 </File>
636 <File
631 RelativePath=".\llfloatersnapshot.cpp"> 637 RelativePath=".\llfloatersnapshot.cpp">
632 </File> 638 </File>
633 <File 639 <File
640 RelativePath=".\llfloaterstats.cpp">
641 </File>
642 <File
634 RelativePath=".\llfloatertelehub.cpp"> 643 RelativePath=".\llfloatertelehub.cpp">
635 </File> 644 </File>
636 <File 645 <File
@@ -652,7 +661,7 @@
652 RelativePath=".\llfloaterurlentry.cpp"> 661 RelativePath=".\llfloaterurlentry.cpp">
653 </File> 662 </File>
654 <File 663 <File
655 RelativePath=".\llfloatervoicewizard.cpp"> 664 RelativePath=".\llfloatervoicedevicesettings.cpp">
656 </File> 665 </File>
657 <File 666 <File
658 RelativePath=".\llfloaterwater.cpp"> 667 RelativePath=".\llfloaterwater.cpp">
@@ -1009,6 +1018,9 @@
1009 RelativePath=".\llregionposition.cpp"> 1018 RelativePath=".\llregionposition.cpp">
1010 </File> 1019 </File>
1011 <File 1020 <File
1021 RelativePath=".\llrendersphere.cpp">
1022 </File>
1023 <File
1012 RelativePath=".\llremoteparcelrequest.cpp"> 1024 RelativePath=".\llremoteparcelrequest.cpp">
1013 </File> 1025 </File>
1014 <File 1026 <File
@@ -1024,9 +1036,6 @@
1024 RelativePath=".\llspatialpartition.cpp"> 1036 RelativePath=".\llspatialpartition.cpp">
1025 </File> 1037 </File>
1026 <File 1038 <File
1027 RelativePath=".\llsphere.cpp">
1028 </File>
1029 <File
1030 RelativePath=".\llsprite.cpp"> 1039 RelativePath=".\llsprite.cpp">
1031 </File> 1040 </File>
1032 <File 1041 <File
@@ -1332,9 +1341,6 @@
1332 RelativePath=".\llviewerthrottle.cpp"> 1341 RelativePath=".\llviewerthrottle.cpp">
1333 </File> 1342 </File>
1334 <File 1343 <File
1335 RelativePath=".\llvieweruictrlfactory.cpp">
1336 </File>
1337 <File
1338 RelativePath=".\llviewervisualparam.cpp"> 1344 RelativePath=".\llviewervisualparam.cpp">
1339 </File> 1345 </File>
1340 <File 1346 <File
@@ -1452,9 +1458,6 @@
1452 RelativePath=".\llxmlrpctransaction.cpp"> 1458 RelativePath=".\llxmlrpctransaction.cpp">
1453 </File> 1459 </File>
1454 <File 1460 <File
1455 RelativePath=".\moviemaker.cpp">
1456 </File>
1457 <File
1458 RelativePath=".\noise.cpp"> 1461 RelativePath=".\noise.cpp">
1459 </File> 1462 </File>
1460 <File 1463 <File
@@ -1466,15 +1469,6 @@
1466 Filter="h;hpp;hxx;hm;inl;inc;xsd" 1469 Filter="h;hpp;hxx;hm;inl;inc;xsd"
1467 UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"> 1470 UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
1468 <File 1471 <File
1469 RelativePath=".\audiosettings.h">
1470 </File>
1471 <File
1472 RelativePath=".\fakevoicesoundsignal.h">
1473 </File>
1474 <File
1475 RelativePath=".\head.h">
1476 </File>
1477 <File
1478 RelativePath=".\llagent.h"> 1472 RelativePath=".\llagent.h">
1479 </File> 1473 </File>
1480 <File 1474 <File
@@ -1517,9 +1511,6 @@
1517 RelativePath=".\llcallingcard.h"> 1511 RelativePath=".\llcallingcard.h">
1518 </File> 1512 </File>
1519 <File 1513 <File
1520 RelativePath=".\llcameraview.h">
1521 </File>
1522 <File
1523 RelativePath=".\llcaphttpsender.h"> 1514 RelativePath=".\llcaphttpsender.h">
1524 </File> 1515 </File>
1525 <File 1516 <File
@@ -1544,6 +1535,9 @@
1544 RelativePath=".\llcommandhandler.h"> 1535 RelativePath=".\llcommandhandler.h">
1545 </File> 1536 </File>
1546 <File 1537 <File
1538 RelativePath=".\llcommandlineparser.h">
1539 </File>
1540 <File
1547 RelativePath=".\llcompass.h"> 1541 RelativePath=".\llcompass.h">
1548 </File> 1542 </File>
1549 <File 1543 <File
@@ -1574,6 +1568,9 @@
1574 RelativePath=".\lldebugview.h"> 1568 RelativePath=".\lldebugview.h">
1575 </File> 1569 </File>
1576 <File 1570 <File
1571 RelativePath=".\lldelayedgestureerror.h">
1572 </File>
1573 <File
1577 RelativePath=".\lldirpicker.h"> 1574 RelativePath=".\lldirpicker.h">
1578 </File> 1575 </File>
1579 <File 1576 <File
@@ -1694,6 +1691,9 @@
1694 RelativePath=".\llfloaterbuyland.h"> 1691 RelativePath=".\llfloaterbuyland.h">
1695 </File> 1692 </File>
1696 <File 1693 <File
1694 RelativePath=".\llfloatercamera.h">
1695 </File>
1696 <File
1697 RelativePath=".\llfloaterchat.h"> 1697 RelativePath=".\llfloaterchat.h">
1698 </File> 1698 </File>
1699 <File 1699 <File
@@ -1721,10 +1721,10 @@
1721 RelativePath=".\llfloatereditui.h"> 1721 RelativePath=".\llfloatereditui.h">
1722 </File> 1722 </File>
1723 <File 1723 <File
1724 RelativePath=".\llfloaterevent.h"> 1724 RelativePath=".\llfloaterenvsettings.h">
1725 </File> 1725 </File>
1726 <File 1726 <File
1727 RelativePath=".\llfloaterenvsettings.h"> 1727 RelativePath=".\llfloaterevent.h">
1728 </File> 1728 </File>
1729 <File 1729 <File
1730 RelativePath=".\llfloaterfriends.h"> 1730 RelativePath=".\llfloaterfriends.h">
@@ -1754,12 +1754,18 @@
1754 RelativePath=".\llfloaterhtmlhelp.h"> 1754 RelativePath=".\llfloaterhtmlhelp.h">
1755 </File> 1755 </File>
1756 <File 1756 <File
1757 RelativePath=".\llfloaterhud.h">
1758 </File>
1759 <File
1757 RelativePath=".\llfloaterimagepreview.h"> 1760 RelativePath=".\llfloaterimagepreview.h">
1758 </File> 1761 </File>
1759 <File 1762 <File
1760 RelativePath=".\llfloaterinspect.h"> 1763 RelativePath=".\llfloaterinspect.h">
1761 </File> 1764 </File>
1762 <File 1765 <File
1766 RelativePath=".\llfloaterjoystick.h">
1767 </File>
1768 <File
1763 RelativePath=".\llfloaterlagmeter.h"> 1769 RelativePath=".\llfloaterlagmeter.h">
1764 </File> 1770 </File>
1765 <File 1771 <File
@@ -1817,9 +1823,15 @@
1817 RelativePath=".\llfloatersellland.h"> 1823 RelativePath=".\llfloatersellland.h">
1818 </File> 1824 </File>
1819 <File 1825 <File
1826 RelativePath=".\llfloatersettingsdebug.h">
1827 </File>
1828 <File
1820 RelativePath=".\llfloatersnapshot.h"> 1829 RelativePath=".\llfloatersnapshot.h">
1821 </File> 1830 </File>
1822 <File 1831 <File
1832 RelativePath=".\llfloaterstats.h">
1833 </File>
1834 <File
1823 RelativePath=".\llfloatertelehub.h"> 1835 RelativePath=".\llfloatertelehub.h">
1824 </File> 1836 </File>
1825 <File 1837 <File
@@ -1841,7 +1853,7 @@
1841 RelativePath=".\llfloaterurlentry.h"> 1853 RelativePath=".\llfloaterurlentry.h">
1842 </File> 1854 </File>
1843 <File 1855 <File
1844 RelativePath=".\llfloatervoicewizard.h"> 1856 RelativePath=".\llfloatervoicedevicesettings.h">
1845 </File> 1857 </File>
1846 <File 1858 <File
1847 RelativePath=".\llfloaterwindlight.h"> 1859 RelativePath=".\llfloaterwindlight.h">
@@ -2195,6 +2207,9 @@
2195 RelativePath=".\llregionposition.h"> 2207 RelativePath=".\llregionposition.h">
2196 </File> 2208 </File>
2197 <File 2209 <File
2210 RelativePath=".\llrendersphere.h">
2211 </File>
2212 <File
2198 RelativePath=".\llremoteparcelrequest.h"> 2213 RelativePath=".\llremoteparcelrequest.h">
2199 </File> 2214 </File>
2200 <File 2215 <File
@@ -2216,9 +2231,6 @@
2216 RelativePath=".\llspatialpartition.h"> 2231 RelativePath=".\llspatialpartition.h">
2217 </File> 2232 </File>
2218 <File 2233 <File
2219 RelativePath=".\llsphere.h">
2220 </File>
2221 <File
2222 RelativePath=".\llsprite.h"> 2234 RelativePath=".\llsprite.h">
2223 </File> 2235 </File>
2224 <File 2236 <File
@@ -2465,9 +2477,6 @@
2465 RelativePath=".\llviewerthrottle.h"> 2477 RelativePath=".\llviewerthrottle.h">
2466 </File> 2478 </File>
2467 <File 2479 <File
2468 RelativePath=".\llvieweruictrlfactory.h">
2469 </File>
2470 <File
2471 RelativePath=".\llviewervisualparam.h"> 2480 RelativePath=".\llviewervisualparam.h">
2472 </File> 2481 </File>
2473 <File 2482 <File
@@ -2576,9 +2585,6 @@
2576 RelativePath=".\macmain.h"> 2585 RelativePath=".\macmain.h">
2577 </File> 2586 </File>
2578 <File 2587 <File
2579 RelativePath=".\moviemaker.h">
2580 </File>
2581 <File
2582 RelativePath=".\noise.h"> 2588 RelativePath=".\noise.h">
2583 </File> 2589 </File>
2584 <File 2590 <File
diff --git a/linden/indra/newview/newview_vc8.vcproj b/linden/indra/newview/newview_vc8.vcproj
index 070968e..24a3459 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-s.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" 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"
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.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" 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"
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.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" 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"
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.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" 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"
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;"
@@ -409,10 +409,6 @@
409 UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" 409 UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
410 > 410 >
411 <File 411 <File
412 RelativePath=".\head.cpp"
413 >
414 </File>
415 <File
416 RelativePath=".\llagent.cpp" 412 RelativePath=".\llagent.cpp"
417 > 413 >
418 </File> 414 </File>
@@ -457,10 +453,6 @@
457 > 453 >
458 </File> 454 </File>
459 <File 455 <File
460 RelativePath=".\llcameraview.cpp"
461 >
462 </File>
463 <File
464 RelativePath=".\llcaphttpsender.cpp" 456 RelativePath=".\llcaphttpsender.cpp"
465 > 457 >
466 </File> 458 </File>
@@ -493,6 +485,10 @@
493 > 485 >
494 </File> 486 </File>
495 <File 487 <File
488 RelativePath=".\llcommandlineparser.cpp"
489 >
490 </File>
491 <File
496 RelativePath=".\llcompass.cpp" 492 RelativePath=".\llcompass.cpp"
497 > 493 >
498 </File> 494 </File>
@@ -513,10 +509,6 @@
513 > 509 >
514 </File> 510 </File>
515 <File 511 <File
516 RelativePath=".\llcontroldef.cpp"
517 >
518 </File>
519 <File
520 RelativePath=".\llcubemap.cpp" 512 RelativePath=".\llcubemap.cpp"
521 > 513 >
522 </File> 514 </File>
@@ -537,6 +529,10 @@
537 > 529 >
538 </File> 530 </File>
539 <File 531 <File
532 RelativePath=".\lldelayedgestureerror.cpp"
533 >
534 </File>
535 <File
540 RelativePath=".\lldirpicker.cpp" 536 RelativePath=".\lldirpicker.cpp"
541 > 537 >
542 </File> 538 </File>
@@ -693,6 +689,10 @@
693 > 689 >
694 </File> 690 </File>
695 <File 691 <File
692 RelativePath=".\llfloatercamera.cpp"
693 >
694 </File>
695 <File
696 RelativePath=".\llfloaterchat.cpp" 696 RelativePath=".\llfloaterchat.cpp"
697 > 697 >
698 </File> 698 </File>
@@ -701,6 +701,10 @@
701 > 701 >
702 </File> 702 </File>
703 <File 703 <File
704 RelativePath=".\llfloaterclassified.cpp"
705 >
706 </File>
707 <File
704 RelativePath=".\llfloaterclothing.cpp" 708 RelativePath=".\llfloaterclothing.cpp"
705 > 709 >
706 </File> 710 </File>
@@ -729,6 +733,10 @@
729 > 733 >
730 </File> 734 </File>
731 <File 735 <File
736 RelativePath=".\llfloaterevent.cpp"
737 >
738 </File>
739 <File
732 RelativePath=".\llfloaterfriends.cpp" 740 RelativePath=".\llfloaterfriends.cpp"
733 > 741 >
734 </File> 742 </File>
@@ -765,6 +773,10 @@
765 > 773 >
766 </File> 774 </File>
767 <File 775 <File
776 RelativePath=".\llfloaterhud.cpp"
777 >
778 </File>
779 <File
768 RelativePath=".\llfloaterimagepreview.cpp" 780 RelativePath=".\llfloaterimagepreview.cpp"
769 > 781 >
770 </File> 782 </File>
@@ -773,6 +785,10 @@
773 > 785 >
774 </File> 786 </File>
775 <File 787 <File
788 RelativePath=".\llfloaterjoystick.cpp"
789 >
790 </File>
791 <File
776 RelativePath=".\llfloaterlagmeter.cpp" 792 RelativePath=".\llfloaterlagmeter.cpp"
777 > 793 >
778 </File> 794 </File>
@@ -809,6 +825,10 @@
809 > 825 >
810 </File> 826 </File>
811 <File 827 <File
828 RelativePath=".\llfloaterparcel.cpp"
829 >
830 </File>
831 <File
812 RelativePath=".\llfloaterpermissionsmgr.cpp" 832 RelativePath=".\llfloaterpermissionsmgr.cpp"
813 > 833 >
814 </File> 834 </File>
@@ -853,10 +873,18 @@
853 > 873 >
854 </File> 874 </File>
855 <File 875 <File
876 RelativePath=".\llfloatersettingsdebug.cpp"
877 >
878 </File>
879 <File
856 RelativePath=".\llfloatersnapshot.cpp" 880 RelativePath=".\llfloatersnapshot.cpp"
857 > 881 >
858 </File> 882 </File>
859 <File 883 <File
884 RelativePath=".\llfloaterstats.cpp"
885 >
886 </File>
887 <File
860 RelativePath=".\llfloatertelehub.cpp" 888 RelativePath=".\llfloatertelehub.cpp"
861 > 889 >
862 </File> 890 </File>
@@ -885,7 +913,7 @@
885 > 913 >
886 </File> 914 </File>
887 <File 915 <File
888 RelativePath=".\llfloatervoicewizard.cpp" 916 RelativePath=".\llfloatervoicedevicesettings.cpp"
889 > 917 >
890 </File> 918 </File>
891 <File 919 <File
@@ -1361,6 +1389,10 @@
1361 > 1389 >
1362 </File> 1390 </File>
1363 <File 1391 <File
1392 RelativePath=".\llrendersphere.cpp"
1393 >
1394 </File>
1395 <File
1364 RelativePath=".\llsavedsettingsglue.cpp" 1396 RelativePath=".\llsavedsettingsglue.cpp"
1365 > 1397 >
1366 </File> 1398 </File>
@@ -1377,10 +1409,6 @@
1377 > 1409 >
1378 </File> 1410 </File>
1379 <File 1411 <File
1380 RelativePath=".\llsphere.cpp"
1381 >
1382 </File>
1383 <File
1384 RelativePath=".\llsprite.cpp" 1412 RelativePath=".\llsprite.cpp"
1385 > 1413 >
1386 </File> 1414 </File>
@@ -1565,6 +1593,10 @@
1565 > 1593 >
1566 </File> 1594 </File>
1567 <File 1595 <File
1596 RelativePath=".\llviewerassetstorage.h"
1597 >
1598 </File>
1599 <File
1568 RelativePath=".\llvieweraudio.cpp" 1600 RelativePath=".\llvieweraudio.cpp"
1569 > 1601 >
1570 </File> 1602 </File>
@@ -1789,10 +1821,6 @@
1789 > 1821 >
1790 </File> 1822 </File>
1791 <File 1823 <File
1792 RelativePath=".\llvieweruictrlfactory.cpp"
1793 >
1794 </File>
1795 <File
1796 RelativePath=".\llviewervisualparam.cpp" 1824 RelativePath=".\llviewervisualparam.cpp"
1797 > 1825 >
1798 </File> 1826 </File>
@@ -1941,10 +1969,6 @@
1941 > 1969 >
1942 </File> 1970 </File>
1943 <File 1971 <File
1944 RelativePath=".\moviemaker.cpp"
1945 >
1946 </File>
1947 <File
1948 RelativePath=".\noise.cpp" 1972 RelativePath=".\noise.cpp"
1949 > 1973 >
1950 </File> 1974 </File>
@@ -1959,14 +1983,6 @@
1959 UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" 1983 UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
1960 > 1984 >
1961 <File 1985 <File
1962 RelativePath=".\audiosettings.h"
1963 >
1964 </File>
1965 <File
1966 RelativePath=".\head.h"
1967 >
1968 </File>
1969 <File
1970 RelativePath=".\llagent.h" 1986 RelativePath=".\llagent.h"
1971 > 1987 >
1972 </File> 1988 </File>
@@ -2019,10 +2035,6 @@
2019 > 2035 >
2020 </File> 2036 </File>
2021 <File 2037 <File
2022 RelativePath=".\llcameraview.h"
2023 >
2024 </File>
2025 <File
2026 RelativePath=".\llcaphttpsender.h" 2038 RelativePath=".\llcaphttpsender.h"
2027 > 2039 >
2028 </File> 2040 </File>
@@ -2055,6 +2067,10 @@
2055 > 2067 >
2056 </File> 2068 </File>
2057 <File 2069 <File
2070 RelativePath=".\llcommandlineparser.h"
2071 >
2072 </File>
2073 <File
2058 RelativePath=".\llcompass.h" 2074 RelativePath=".\llcompass.h"
2059 > 2075 >
2060 </File> 2076 </File>
@@ -2095,6 +2111,10 @@
2095 > 2111 >
2096 </File> 2112 </File>
2097 <File 2113 <File
2114 RelativePath=".\lldelayedgestureerror.h"
2115 >
2116 </File>
2117 <File
2098 RelativePath=".\lldirpicker.h" 2118 RelativePath=".\lldirpicker.h"
2099 > 2119 >
2100 </File> 2120 </File>
@@ -2255,6 +2275,10 @@
2255 > 2275 >
2256 </File> 2276 </File>
2257 <File 2277 <File
2278 RelativePath=".\llfloatercamera.h"
2279 >
2280 </File>
2281 <File
2258 RelativePath=".\llfloaterchat.h" 2282 RelativePath=".\llfloaterchat.h"
2259 > 2283 >
2260 </File> 2284 </File>
@@ -2263,6 +2287,10 @@
2263 > 2287 >
2264 </File> 2288 </File>
2265 <File 2289 <File
2290 RelativePath=".\llfloaterclassified.h"
2291 >
2292 </File>
2293 <File
2266 RelativePath=".\llfloaterclothing.h" 2294 RelativePath=".\llfloaterclothing.h"
2267 > 2295 >
2268 </File> 2296 </File>
@@ -2291,6 +2319,10 @@
2291 > 2319 >
2292 </File> 2320 </File>
2293 <File 2321 <File
2322 RelativePath=".\llfloaterevent.h"
2323 >
2324 </File>
2325 <File
2294 RelativePath=".\llfloaterfriends.h" 2326 RelativePath=".\llfloaterfriends.h"
2295 > 2327 >
2296 </File> 2328 </File>
@@ -2320,14 +2352,17 @@
2320 </File> 2352 </File>
2321 <File 2353 <File
2322 RelativePath=".\llfloaterhtml.h" 2354 RelativePath=".\llfloaterhtml.h"
2323 > 2355 >
2324 </File> 2356 </File>
2325 <File 2357 <File
2326
2327 RelativePath=".\llfloaterhtmlhelp.h" 2358 RelativePath=".\llfloaterhtmlhelp.h"
2328 > 2359 >
2329 </File> 2360 </File>
2330 <File 2361 <File
2362 RelativePath=".\llfloaterhud.h"
2363 >
2364 </File>
2365 <File
2331 RelativePath=".\llfloaterimagepreview.h" 2366 RelativePath=".\llfloaterimagepreview.h"
2332 > 2367 >
2333 </File> 2368 </File>
@@ -2336,6 +2371,10 @@
2336 > 2371 >
2337 </File> 2372 </File>
2338 <File 2373 <File
2374 RelativePath=".\llfloaterjoystick.h"
2375 >
2376 </File>
2377 <File
2339 RelativePath=".\llfloaterlagmeter.h" 2378 RelativePath=".\llfloaterlagmeter.h"
2340 > 2379 >
2341 </File> 2380 </File>
@@ -2372,6 +2411,10 @@
2372 > 2411 >
2373 </File> 2412 </File>
2374 <File 2413 <File
2414 RelativePath=".\llfloaterparcel.h"
2415 >
2416 </File>
2417 <File
2375 RelativePath=".\llfloaterpermissionsmgr.h" 2418 RelativePath=".\llfloaterpermissionsmgr.h"
2376 > 2419 >
2377 </File> 2420 </File>
@@ -2412,6 +2455,10 @@
2412 > 2455 >
2413 </File> 2456 </File>
2414 <File 2457 <File
2458 RelativePath=".\llfloatersettingsdebug.h"
2459 >
2460 </File>
2461 <File
2415 RelativePath=".\llfloaterskysettings.h" 2462 RelativePath=".\llfloaterskysettings.h"
2416 > 2463 >
2417 </File> 2464 </File>
@@ -2420,6 +2467,10 @@
2420 > 2467 >
2421 </File> 2468 </File>
2422 <File 2469 <File
2470 RelativePath=".\llfloaterstats.h"
2471 >
2472 </File>
2473 <File
2423 RelativePath=".\llfloatertelehub.h" 2474 RelativePath=".\llfloatertelehub.h"
2424 > 2475 >
2425 </File> 2476 </File>
@@ -2448,7 +2499,7 @@
2448 > 2499 >
2449 </File> 2500 </File>
2450 <File 2501 <File
2451 RelativePath=".\llfloatervoicewizard.h" 2502 RelativePath=".\llfloatervoicedevicesettings.h"
2452 > 2503 >
2453 </File> 2504 </File>
2454 <File 2505 <File
@@ -2924,6 +2975,10 @@
2924 > 2975 >
2925 </File> 2976 </File>
2926 <File 2977 <File
2978 RelativePath=".\llrendersphere.h"
2979 >
2980 </File>
2981 <File
2927 RelativePath=".\llresourcedata.h" 2982 RelativePath=".\llresourcedata.h"
2928 > 2983 >
2929 </File> 2984 </File>
@@ -2936,15 +2991,15 @@
2936 > 2991 >
2937 </File> 2992 </File>
2938 <File 2993 <File
2939 RelativePath=".\llsky.h" 2994 RelativePath=".\llselectmgr.h"
2940 > 2995 >
2941 </File> 2996 </File>
2942 <File 2997 <File
2943 RelativePath=".\llspatialpartition.h" 2998 RelativePath=".\llsky.h"
2944 > 2999 >
2945 </File> 3000 </File>
2946 <File 3001 <File
2947 RelativePath=".\llsphere.h" 3002 RelativePath=".\llspatialpartition.h"
2948 > 3003 >
2949 </File> 3004 </File>
2950 <File 3005 <File
@@ -3096,6 +3151,10 @@
3096 > 3151 >
3097 </File> 3152 </File>
3098 <File 3153 <File
3154 RelativePath=".\lluiconstants.h"
3155 >
3156 </File>
3157 <File
3099 RelativePath=".\lluploaddialog.h" 3158 RelativePath=".\lluploaddialog.h"
3100 > 3159 >
3101 </File> 3160 </File>
@@ -3280,10 +3339,6 @@
3280 > 3339 >
3281 </File> 3340 </File>
3282 <File 3341 <File
3283 RelativePath=".\llvieweruictrlfactory.h"
3284 >
3285 </File>
3286 <File
3287 RelativePath=".\llviewervisualparam.h" 3342 RelativePath=".\llviewervisualparam.h"
3288 > 3343 >
3289 </File> 3344 </File>
@@ -3432,14 +3487,6 @@
3432 > 3487 >
3433 </File> 3488 </File>
3434 <File 3489 <File
3435 RelativePath=".\macmain.h"
3436 >
3437 </File>
3438 <File
3439 RelativePath=".\moviemaker.h"
3440 >
3441 </File>
3442 <File
3443 RelativePath=".\noise.h" 3490 RelativePath=".\noise.h"
3444 > 3491 >
3445 </File> 3492 </File>
@@ -4070,11 +4117,11 @@
4070 > 4117 >
4071 </File> 4118 </File>
4072 <File 4119 <File
4073 RelativePath=".\skins\xui\en-us\mime_types.xml" 4120 RelativePath=".\app_settings\mid_graphics.xml"
4074 > 4121 >
4075 </File> 4122 </File>
4076 <File 4123 <File
4077 RelativePath=".\app_settings\mid_graphics.xml" 4124 RelativePath=".\skins\xui\en-us\mime_types.xml"
4078 > 4125 >
4079 </File> 4126 </File>
4080 <File 4127 <File
diff --git a/linden/indra/newview/newview_vc9.vcproj b/linden/indra/newview/newview_vc9.vcproj
index f4fdeb9..40851cb 100644
--- a/linden/indra/newview/newview_vc9.vcproj
+++ b/linden/indra/newview/newview_vc9.vcproj
@@ -70,7 +70,7 @@
70 /> 70 />
71 <Tool 71 <Tool
72 Name="VCLinkerTool" 72 Name="VCLinkerTool"
73 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dsound.lib dxerr.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s.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" 73 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dsound.lib dxerr.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"
74 OutputFile="$(ConfigurationName)/debugview.exe" 74 OutputFile="$(ConfigurationName)/debugview.exe"
75 LinkIncremental="2" 75 LinkIncremental="2"
76 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_debug&quot;" 76 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_debug&quot;"
@@ -163,7 +163,7 @@
163 /> 163 />
164 <Tool 164 <Tool
165 Name="VCLinkerTool" 165 Name="VCLinkerTool"
166 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dsound.lib dxerr.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s.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" 166 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dsound.lib dxerr.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"
167 OutputFile="$(ConfigurationName)/newview.exe" 167 OutputFile="$(ConfigurationName)/newview.exe"
168 LinkIncremental="2" 168 LinkIncremental="2"
169 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;" 169 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;"
@@ -256,7 +256,7 @@
256 <Tool 256 <Tool
257 Name="VCLinkerTool" 257 Name="VCLinkerTool"
258 LinkLibraryDependencies="false" 258 LinkLibraryDependencies="false"
259 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dsound.lib dxerr.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s.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" 259 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dsound.lib dxerr.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"
260 OutputFile="$(ConfigurationName)/SecondLife.exe" 260 OutputFile="$(ConfigurationName)/SecondLife.exe"
261 LinkIncremental="0" 261 LinkIncremental="0"
262 AdditionalLibraryDirectories="&quot;../lib_release/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;" 262 AdditionalLibraryDirectories="&quot;../lib_release/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;"
@@ -346,7 +346,7 @@
346 /> 346 />
347 <Tool 347 <Tool
348 Name="VCLinkerTool" 348 Name="VCLinkerTool"
349 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dsound.lib dxerr.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s.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" 349 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dsound.lib dxerr.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"
350 OutputFile="$(ConfigurationName)/newview_noopt.exe" 350 OutputFile="$(ConfigurationName)/newview_noopt.exe"
351 LinkIncremental="2" 351 LinkIncremental="2"
352 AdditionalLibraryDirectories="&quot;../lib_releasenoopt/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;" 352 AdditionalLibraryDirectories="&quot;../lib_releasenoopt/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;"
@@ -394,10 +394,6 @@
394 UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" 394 UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
395 > 395 >
396 <File 396 <File
397 RelativePath=".\head.cpp"
398 >
399 </File>
400 <File
401 RelativePath=".\llagent.cpp" 397 RelativePath=".\llagent.cpp"
402 > 398 >
403 </File> 399 </File>
@@ -442,10 +438,6 @@
442 > 438 >
443 </File> 439 </File>
444 <File 440 <File
445 RelativePath=".\llcameraview.cpp"
446 >
447 </File>
448 <File
449 RelativePath=".\llcaphttpsender.cpp" 441 RelativePath=".\llcaphttpsender.cpp"
450 > 442 >
451 </File> 443 </File>
@@ -478,6 +470,10 @@
478 > 470 >
479 </File> 471 </File>
480 <File 472 <File
473 RelativePath=".\llcommandlineparser.cpp"
474 >
475 </File>
476 <File
481 RelativePath=".\llcompass.cpp" 477 RelativePath=".\llcompass.cpp"
482 > 478 >
483 </File> 479 </File>
@@ -498,10 +494,6 @@
498 > 494 >
499 </File> 495 </File>
500 <File 496 <File
501 RelativePath=".\llcontroldef.cpp"
502 >
503 </File>
504 <File
505 RelativePath=".\llcubemap.cpp" 497 RelativePath=".\llcubemap.cpp"
506 > 498 >
507 </File> 499 </File>
@@ -522,6 +514,10 @@
522 > 514 >
523 </File> 515 </File>
524 <File 516 <File
517 RelativePath=".\lldelayedgestureerror.cpp"
518 >
519 </File>
520 <File
525 RelativePath=".\lldirpicker.cpp" 521 RelativePath=".\lldirpicker.cpp"
526 > 522 >
527 </File> 523 </File>
@@ -678,6 +674,10 @@
678 > 674 >
679 </File> 675 </File>
680 <File 676 <File
677 RelativePath=".\llfloatercamera.cpp"
678 >
679 </File>
680 <File
681 RelativePath=".\llfloaterchat.cpp" 681 RelativePath=".\llfloaterchat.cpp"
682 > 682 >
683 </File> 683 </File>
@@ -686,6 +686,10 @@
686 > 686 >
687 </File> 687 </File>
688 <File 688 <File
689 RelativePath=".\llfloaterclassified.cpp"
690 >
691 </File>
692 <File
689 RelativePath=".\llfloaterclothing.cpp" 693 RelativePath=".\llfloaterclothing.cpp"
690 > 694 >
691 </File> 695 </File>
@@ -714,6 +718,10 @@
714 > 718 >
715 </File> 719 </File>
716 <File 720 <File
721 RelativePath=".\llfloaterevent.cpp"
722 >
723 </File>
724 <File
717 RelativePath=".\llfloaterfriends.cpp" 725 RelativePath=".\llfloaterfriends.cpp"
718 > 726 >
719 </File> 727 </File>
@@ -750,6 +758,10 @@
750 > 758 >
751 </File> 759 </File>
752 <File 760 <File
761 RelativePath=".\llfloaterhud.cpp"
762 >
763 </File>
764 <File
753 RelativePath=".\llfloaterimagepreview.cpp" 765 RelativePath=".\llfloaterimagepreview.cpp"
754 > 766 >
755 </File> 767 </File>
@@ -758,6 +770,10 @@
758 > 770 >
759 </File> 771 </File>
760 <File 772 <File
773 RelativePath=".\llfloaterjoystick.cpp"
774 >
775 </File>
776 <File
761 RelativePath=".\llfloaterlagmeter.cpp" 777 RelativePath=".\llfloaterlagmeter.cpp"
762 > 778 >
763 </File> 779 </File>
@@ -794,6 +810,10 @@
794 > 810 >
795 </File> 811 </File>
796 <File 812 <File
813 RelativePath=".\llfloaterparcel.cpp"
814 >
815 </File>
816 <File
797 RelativePath=".\llfloaterpermissionsmgr.cpp" 817 RelativePath=".\llfloaterpermissionsmgr.cpp"
798 > 818 >
799 </File> 819 </File>
@@ -838,10 +858,18 @@
838 > 858 >
839 </File> 859 </File>
840 <File 860 <File
861 RelativePath=".\llfloatersettingsdebug.cpp"
862 >
863 </File>
864 <File
841 RelativePath=".\llfloatersnapshot.cpp" 865 RelativePath=".\llfloatersnapshot.cpp"
842 > 866 >
843 </File> 867 </File>
844 <File 868 <File
869 RelativePath=".\llfloaterstats.cpp"
870 >
871 </File>
872 <File
845 RelativePath=".\llfloatertelehub.cpp" 873 RelativePath=".\llfloatertelehub.cpp"
846 > 874 >
847 </File> 875 </File>
@@ -870,7 +898,7 @@
870 > 898 >
871 </File> 899 </File>
872 <File 900 <File
873 RelativePath=".\llfloatervoicewizard.cpp" 901 RelativePath=".\llfloatervoicedevicesettings.cpp"
874 > 902 >
875 </File> 903 </File>
876 <File 904 <File
@@ -1346,6 +1374,10 @@
1346 > 1374 >
1347 </File> 1375 </File>
1348 <File 1376 <File
1377 RelativePath=".\llrendersphere.cpp"
1378 >
1379 </File>
1380 <File
1349 RelativePath=".\llsavedsettingsglue.cpp" 1381 RelativePath=".\llsavedsettingsglue.cpp"
1350 > 1382 >
1351 </File> 1383 </File>
@@ -1362,10 +1394,6 @@
1362 > 1394 >
1363 </File> 1395 </File>
1364 <File 1396 <File
1365 RelativePath=".\llsphere.cpp"
1366 >
1367 </File>
1368 <File
1369 RelativePath=".\llsprite.cpp" 1397 RelativePath=".\llsprite.cpp"
1370 > 1398 >
1371 </File> 1399 </File>
@@ -1550,6 +1578,10 @@
1550 > 1578 >
1551 </File> 1579 </File>
1552 <File 1580 <File
1581 RelativePath=".\llviewerassetstorage.h"
1582 >
1583 </File>
1584 <File
1553 RelativePath=".\llvieweraudio.cpp" 1585 RelativePath=".\llvieweraudio.cpp"
1554 > 1586 >
1555 </File> 1587 </File>
@@ -1774,10 +1806,6 @@
1774 > 1806 >
1775 </File> 1807 </File>
1776 <File 1808 <File
1777 RelativePath=".\llvieweruictrlfactory.cpp"
1778 >
1779 </File>
1780 <File
1781 RelativePath=".\llviewervisualparam.cpp" 1809 RelativePath=".\llviewervisualparam.cpp"
1782 > 1810 >
1783 </File> 1811 </File>
@@ -1926,10 +1954,6 @@
1926 > 1954 >
1927 </File> 1955 </File>
1928 <File 1956 <File
1929 RelativePath=".\moviemaker.cpp"
1930 >
1931 </File>
1932 <File
1933 RelativePath=".\noise.cpp" 1957 RelativePath=".\noise.cpp"
1934 > 1958 >
1935 </File> 1959 </File>
@@ -1944,14 +1968,6 @@
1944 UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" 1968 UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
1945 > 1969 >
1946 <File 1970 <File
1947 RelativePath=".\audiosettings.h"
1948 >
1949 </File>
1950 <File
1951 RelativePath=".\head.h"
1952 >
1953 </File>
1954 <File
1955 RelativePath=".\llagent.h" 1971 RelativePath=".\llagent.h"
1956 > 1972 >
1957 </File> 1973 </File>
@@ -2004,10 +2020,6 @@
2004 > 2020 >
2005 </File> 2021 </File>
2006 <File 2022 <File
2007 RelativePath=".\llcameraview.h"
2008 >
2009 </File>
2010 <File
2011 RelativePath=".\llcaphttpsender.h" 2023 RelativePath=".\llcaphttpsender.h"
2012 > 2024 >
2013 </File> 2025 </File>
@@ -2040,6 +2052,10 @@
2040 > 2052 >
2041 </File> 2053 </File>
2042 <File 2054 <File
2055 RelativePath=".\llcommandlineparser.h"
2056 >
2057 </File>
2058 <File
2043 RelativePath=".\llcompass.h" 2059 RelativePath=".\llcompass.h"
2044 > 2060 >
2045 </File> 2061 </File>
@@ -2080,6 +2096,10 @@
2080 > 2096 >
2081 </File> 2097 </File>
2082 <File 2098 <File
2099 RelativePath=".\lldelayedgestureerror.h"
2100 >
2101 </File>
2102 <File
2083 RelativePath=".\lldirpicker.h" 2103 RelativePath=".\lldirpicker.h"
2084 > 2104 >
2085 </File> 2105 </File>
@@ -2240,6 +2260,10 @@
2240 > 2260 >
2241 </File> 2261 </File>
2242 <File 2262 <File
2263 RelativePath=".\llfloatercamera.h"
2264 >
2265 </File>
2266 <File
2243 RelativePath=".\llfloaterchat.h" 2267 RelativePath=".\llfloaterchat.h"
2244 > 2268 >
2245 </File> 2269 </File>
@@ -2248,6 +2272,10 @@
2248 > 2272 >
2249 </File> 2273 </File>
2250 <File 2274 <File
2275 RelativePath=".\llfloaterclassified.h"
2276 >
2277 </File>
2278 <File
2251 RelativePath=".\llfloaterclothing.h" 2279 RelativePath=".\llfloaterclothing.h"
2252 > 2280 >
2253 </File> 2281 </File>
@@ -2276,6 +2304,10 @@
2276 > 2304 >
2277 </File> 2305 </File>
2278 <File 2306 <File
2307 RelativePath=".\llfloaterevent.h"
2308 >
2309 </File>
2310 <File
2279 RelativePath=".\llfloaterfriends.h" 2311 RelativePath=".\llfloaterfriends.h"
2280 > 2312 >
2281 </File> 2313 </File>
@@ -2312,6 +2344,10 @@
2312 > 2344 >
2313 </File> 2345 </File>
2314 <File 2346 <File
2347 RelativePath=".\llfloaterhud.h"
2348 >
2349 </File>
2350 <File
2315 RelativePath=".\llfloaterimagepreview.h" 2351 RelativePath=".\llfloaterimagepreview.h"
2316 > 2352 >
2317 </File> 2353 </File>
@@ -2320,6 +2356,10 @@
2320 > 2356 >
2321 </File> 2357 </File>
2322 <File 2358 <File
2359 RelativePath=".\llfloaterjoystick.h"
2360 >
2361 </File>
2362 <File
2323 RelativePath=".\llfloaterlagmeter.h" 2363 RelativePath=".\llfloaterlagmeter.h"
2324 > 2364 >
2325 </File> 2365 </File>
@@ -2356,6 +2396,10 @@
2356 > 2396 >
2357 </File> 2397 </File>
2358 <File 2398 <File
2399 RelativePath=".\llfloaterparcel.h"
2400 >
2401 </File>
2402 <File
2359 RelativePath=".\llfloaterpermissionsmgr.h" 2403 RelativePath=".\llfloaterpermissionsmgr.h"
2360 > 2404 >
2361 </File> 2405 </File>
@@ -2396,6 +2440,10 @@
2396 > 2440 >
2397 </File> 2441 </File>
2398 <File 2442 <File
2443 RelativePath=".\llfloatersettingsdebug.h"
2444 >
2445 </File>
2446 <File
2399 RelativePath=".\llfloaterskysettings.h" 2447 RelativePath=".\llfloaterskysettings.h"
2400 > 2448 >
2401 </File> 2449 </File>
@@ -2404,6 +2452,10 @@
2404 > 2452 >
2405 </File> 2453 </File>
2406 <File 2454 <File
2455 RelativePath=".\llfloaterstats.h"
2456 >
2457 </File>
2458 <File
2407 RelativePath=".\llfloatertelehub.h" 2459 RelativePath=".\llfloatertelehub.h"
2408 > 2460 >
2409 </File> 2461 </File>
@@ -2432,7 +2484,7 @@
2432 > 2484 >
2433 </File> 2485 </File>
2434 <File 2486 <File
2435 RelativePath=".\llfloatervoicewizard.h" 2487 RelativePath=".\llfloatervoicedevicesettings.h"
2436 > 2488 >
2437 </File> 2489 </File>
2438 <File 2490 <File
@@ -2908,6 +2960,10 @@
2908 > 2960 >
2909 </File> 2961 </File>
2910 <File 2962 <File
2963 RelativePath=".\llrendersphere.h"
2964 >
2965 </File>
2966 <File
2911 RelativePath=".\llresourcedata.h" 2967 RelativePath=".\llresourcedata.h"
2912 > 2968 >
2913 </File> 2969 </File>
@@ -2920,15 +2976,15 @@
2920 > 2976 >
2921 </File> 2977 </File>
2922 <File 2978 <File
2923 RelativePath=".\llsky.h" 2979 RelativePath=".\llselectmgr.h"
2924 > 2980 >
2925 </File> 2981 </File>
2926 <File 2982 <File
2927 RelativePath=".\llspatialpartition.h" 2983 RelativePath=".\llsky.h"
2928 > 2984 >
2929 </File> 2985 </File>
2930 <File 2986 <File
2931 RelativePath=".\llsphere.h" 2987 RelativePath=".\llspatialpartition.h"
2932 > 2988 >
2933 </File> 2989 </File>
2934 <File 2990 <File
@@ -3080,6 +3136,10 @@
3080 > 3136 >
3081 </File> 3137 </File>
3082 <File 3138 <File
3139 RelativePath=".\lluiconstants.h"
3140 >
3141 </File>
3142 <File
3083 RelativePath=".\lluploaddialog.h" 3143 RelativePath=".\lluploaddialog.h"
3084 > 3144 >
3085 </File> 3145 </File>
@@ -3264,10 +3324,6 @@
3264 > 3324 >
3265 </File> 3325 </File>
3266 <File 3326 <File
3267 RelativePath=".\llvieweruictrlfactory.h"
3268 >
3269 </File>
3270 <File
3271 RelativePath=".\llviewervisualparam.h" 3327 RelativePath=".\llviewervisualparam.h"
3272 > 3328 >
3273 </File> 3329 </File>
@@ -3416,14 +3472,6 @@
3416 > 3472 >
3417 </File> 3473 </File>
3418 <File 3474 <File
3419 RelativePath=".\macmain.h"
3420 >
3421 </File>
3422 <File
3423 RelativePath=".\moviemaker.h"
3424 >
3425 </File>
3426 <File
3427 RelativePath=".\noise.h" 3475 RelativePath=".\noise.h"
3428 > 3476 >
3429 </File> 3477 </File>
@@ -4054,11 +4102,11 @@
4054 > 4102 >
4055 </File> 4103 </File>
4056 <File 4104 <File
4057 RelativePath=".\skins\xui\en-us\mime_types.xml" 4105 RelativePath=".\app_settings\mid_graphics.xml"
4058 > 4106 >
4059 </File> 4107 </File>
4060 <File 4108 <File
4061 RelativePath=".\app_settings\mid_graphics.xml" 4109 RelativePath=".\skins\xui\en-us\mime_types.xml"
4062 > 4110 >
4063 </File> 4111 </File>
4064 <File 4112 <File
diff --git a/linden/indra/newview/pipeline.cpp b/linden/indra/newview/pipeline.cpp
index e0c2de7..5f45e26 100644
--- a/linden/indra/newview/pipeline.cpp
+++ b/linden/indra/newview/pipeline.cpp
@@ -99,7 +99,7 @@
99#include "llwlparammanager.h" 99#include "llwlparammanager.h"
100#include "llwaterparammanager.h" 100#include "llwaterparammanager.h"
101#include "llspatialpartition.h" 101#include "llspatialpartition.h"
102 102#include "llmutelist.h"
103 103
104#ifdef _DEBUG 104#ifdef _DEBUG
105// Debug indices is disabled for now for debug performance - djs 4/24/02 105// Debug indices is disabled for now for debug performance - djs 4/24/02
@@ -374,7 +374,6 @@ void LLPipeline::cleanup()
374 mBloomImagep = NULL; 374 mBloomImagep = NULL;
375 mBloomImage2p = NULL; 375 mBloomImage2p = NULL;
376 mFaceSelectImagep = NULL; 376 mFaceSelectImagep = NULL;
377 mAlphaSizzleImagep = NULL;
378 377
379 mMovedBridge.clear(); 378 mMovedBridge.clear();
380 379
@@ -573,19 +572,16 @@ void LLPipeline::restoreGL()
573 LLShaderMgr::setShaders(); 572 LLShaderMgr::setShaders();
574 } 573 }
575 574
576 if (gWorldp) 575 for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin();
576 iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
577 { 577 {
578 for (LLWorld::region_list_t::iterator iter = gWorldp->getRegionList().begin(); 578 LLViewerRegion* region = *iter;
579 iter != gWorldp->getRegionList().end(); ++iter) 579 for (U32 i = 0; i < LLViewerRegion::NUM_PARTITIONS; i++)
580 { 580 {
581 LLViewerRegion* region = *iter; 581 LLSpatialPartition* part = region->getSpatialPartition(i);
582 for (U32 i = 0; i < LLViewerRegion::NUM_PARTITIONS; i++) 582 if (part)
583 { 583 {
584 LLSpatialPartition* part = region->getSpatialPartition(i); 584 part->restoreGL();
585 if (part)
586 {
587 part->restoreGL();
588 }
589 } 585 }
590 } 586 }
591 } 587 }
@@ -596,7 +592,7 @@ BOOL LLPipeline::canUseVertexShaders()
596{ 592{
597 if (!gGLManager.mHasVertexShader || 593 if (!gGLManager.mHasVertexShader ||
598 !gGLManager.mHasFragmentShader || 594 !gGLManager.mHasFragmentShader ||
599 !gFeatureManagerp->isFeatureAvailable("VertexShaderEnable") || 595 !LLFeatureManager::getInstance()->isFeatureAvailable("VertexShaderEnable") ||
600 (assertInitialized() && mVertexShadersLoaded != 1) ) 596 (assertInitialized() && mVertexShadersLoaded != 1) )
601 { 597 {
602 return FALSE; 598 return FALSE;
@@ -725,20 +721,17 @@ void LLPipeline::dirtyPoolObjectTextures(const std::set<LLViewerImage*>& texture
725 } 721 }
726 } 722 }
727 723
728 if (gWorldp) 724 LLOctreeDirtyTexture dirty(textures);
725 for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin();
726 iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
729 { 727 {
730 LLOctreeDirtyTexture dirty(textures); 728 LLViewerRegion* region = *iter;
731 for (LLWorld::region_list_t::iterator iter = gWorldp->getRegionList().begin(); 729 for (U32 i = 0; i < LLViewerRegion::NUM_PARTITIONS; i++)
732 iter != gWorldp->getRegionList().end(); ++iter)
733 { 730 {
734 LLViewerRegion* region = *iter; 731 LLSpatialPartition* part = region->getSpatialPartition(i);
735 for (U32 i = 0; i < LLViewerRegion::NUM_PARTITIONS; i++) 732 if (part)
736 { 733 {
737 LLSpatialPartition* part = region->getSpatialPartition(i); 734 dirty.traverse(part->mOctree);
738 if (part)
739 {
740 dirty.traverse(part->mOctree);
741 }
742 } 735 }
743 } 736 }
744 } 737 }
@@ -1111,8 +1104,8 @@ void LLPipeline::updateMove()
1111 { 1104 {
1112 LLFastTimer ot(LLFastTimer::FTM_OCTREE_BALANCE); 1105 LLFastTimer ot(LLFastTimer::FTM_OCTREE_BALANCE);
1113 1106
1114 for (LLWorld::region_list_t::iterator iter = gWorldp->getRegionList().begin(); 1107 for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin();
1115 iter != gWorldp->getRegionList().end(); ++iter) 1108 iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
1116 { 1109 {
1117 LLViewerRegion* region = *iter; 1110 LLViewerRegion* region = *iter;
1118 for (U32 i = 0; i < LLViewerRegion::NUM_PARTITIONS; i++) 1111 for (U32 i = 0; i < LLViewerRegion::NUM_PARTITIONS; i++)
@@ -1189,8 +1182,8 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl
1189 glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); 1182 glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
1190 LLGLDepthTest depth(GL_TRUE, GL_FALSE); 1183 LLGLDepthTest depth(GL_TRUE, GL_FALSE);
1191 1184
1192 for (LLWorld::region_list_t::iterator iter = gWorldp->getRegionList().begin(); 1185 for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin();
1193 iter != gWorldp->getRegionList().end(); ++iter) 1186 iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
1194 { 1187 {
1195 LLViewerRegion* region = *iter; 1188 LLViewerRegion* region = *iter;
1196 if (water_clip != 0) 1189 if (water_clip != 0)
@@ -1252,6 +1245,10 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl
1252 mScreen.flush(); 1245 mScreen.flush();
1253 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); 1246 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
1254 } 1247 }
1248 else if (LLPipeline::sUseOcclusion > 1)
1249 {
1250 glFlush();
1251 }
1255} 1252}
1256 1253
1257void LLPipeline::markNotCulled(LLSpatialGroup* group, LLCamera& camera) 1254void LLPipeline::markNotCulled(LLSpatialGroup* group, LLCamera& camera)
@@ -1339,6 +1336,7 @@ void LLPipeline::doOcclusion(LLCamera& camera)
1339 } 1336 }
1340 1337
1341 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); 1338 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
1339 glFlush();
1342} 1340}
1343 1341
1344BOOL LLPipeline::updateDrawableGeom(LLDrawable* drawablep, BOOL priority) 1342BOOL LLPipeline::updateDrawableGeom(LLDrawable* drawablep, BOOL priority)
@@ -1569,8 +1567,8 @@ void LLPipeline::shiftObjects(const LLVector3 &offset)
1569 } 1567 }
1570 mShiftList.resize(0); 1568 mShiftList.resize(0);
1571 1569
1572 for (LLWorld::region_list_t::iterator iter = gWorldp->getRegionList().begin(); 1570 for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin();
1573 iter != gWorldp->getRegionList().end(); ++iter) 1571 iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
1574 { 1572 {
1575 LLViewerRegion* region = *iter; 1573 LLViewerRegion* region = *iter;
1576 for (U32 i = 0; i < LLViewerRegion::NUM_PARTITIONS; i++) 1574 for (U32 i = 0; i < LLViewerRegion::NUM_PARTITIONS; i++)
@@ -1896,7 +1894,7 @@ void renderPhysicalBeacons(LLDrawable* drawablep)
1896 LLViewerObject *vobj = drawablep->getVObj(); 1894 LLViewerObject *vobj = drawablep->getVObj();
1897 if (vobj 1895 if (vobj
1898 && !vobj->isAvatar() 1896 && !vobj->isAvatar()
1899 && !vobj->getParent() 1897 //&& !vobj->getParent()
1900 && vobj->usePhysics()) 1898 && vobj->usePhysics())
1901 { 1899 {
1902 if (gPipeline.sRenderBeacons) 1900 if (gPipeline.sRenderBeacons)
@@ -2101,7 +2099,7 @@ void LLPipeline::postSort(LLCamera& camera)
2101 mSelectedFaces.clear(); 2099 mSelectedFaces.clear();
2102 2100
2103 // Draw face highlights for selected faces. 2101 // Draw face highlights for selected faces.
2104 if (gSelectMgr->getTEMode()) 2102 if (LLSelectMgr::getInstance()->getTEMode())
2105 { 2103 {
2106 struct f : public LLSelectedTEFunctor 2104 struct f : public LLSelectedTEFunctor
2107 { 2105 {
@@ -2114,7 +2112,7 @@ void LLPipeline::postSort(LLCamera& camera)
2114 return true; 2112 return true;
2115 } 2113 }
2116 } func; 2114 } func;
2117 gSelectMgr->getSelection()->applyToTEs(&func); 2115 LLSelectMgr::getInstance()->getSelection()->applyToTEs(&func);
2118 } 2116 }
2119} 2117}
2120 2118
@@ -2124,8 +2122,6 @@ void render_hud_elements()
2124 LLFastTimer t(LLFastTimer::FTM_RENDER_UI); 2122 LLFastTimer t(LLFastTimer::FTM_RENDER_UI);
2125 gPipeline.disableLights(); 2123 gPipeline.disableLights();
2126 2124
2127 gPipeline.renderDebug();
2128
2129 LLGLDisable fog(GL_FOG); 2125 LLGLDisable fog(GL_FOG);
2130 LLGLSUIDefault gls_ui; 2126 LLGLSUIDefault gls_ui;
2131 2127
@@ -2143,15 +2139,9 @@ void render_hud_elements()
2143 LLTracker::render3D(); 2139 LLTracker::render3D();
2144 2140
2145 // Show the property lines 2141 // Show the property lines
2146 if (gWorldp) 2142 LLWorld::getInstance()->renderPropertyLines();
2147 { 2143 LLViewerParcelMgr::getInstance()->render();
2148 gWorldp->renderPropertyLines(); 2144 LLViewerParcelMgr::getInstance()->renderParcelCollision();
2149 }
2150 if (gParcelMgr)
2151 {
2152 gParcelMgr->render();
2153 gParcelMgr->renderParcelCollision();
2154 }
2155 2145
2156 // Render debugging beacons. 2146 // Render debugging beacons.
2157 gObjectList.renderObjectBeacons(); 2147 gObjectList.renderObjectBeacons();
@@ -2161,7 +2151,7 @@ void render_hud_elements()
2161 else if (gForceRenderLandFence) 2151 else if (gForceRenderLandFence)
2162 { 2152 {
2163 // This is only set when not rendering the UI, for parcel snapshots 2153 // This is only set when not rendering the UI, for parcel snapshots
2164 gParcelMgr->render(); 2154 LLViewerParcelMgr::getInstance()->render();
2165 } 2155 }
2166 else if (gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_HUD)) 2156 else if (gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_HUD))
2167 { 2157 {
@@ -2257,11 +2247,6 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
2257 } 2247 }
2258 } 2248 }
2259 2249
2260 if (!mAlphaSizzleImagep)
2261 {
2262 mAlphaSizzleImagep = gImageList.getImage(LLUUID(gViewerArt.getString("alpha_sizzle.tga")), MIPMAP_TRUE, TRUE);
2263 }
2264
2265 /////////////////////////////////////////// 2250 ///////////////////////////////////////////
2266 // 2251 //
2267 // Sync and verify GL state 2252 // Sync and verify GL state
@@ -2289,15 +2274,6 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
2289 2274
2290 LLVertexBuffer::startRender(); 2275 LLVertexBuffer::startRender();
2291 2276
2292 for (pool_set_t::iterator iter = mPools.begin(); iter != mPools.end(); ++iter)
2293 {
2294 LLDrawPool *poolp = *iter;
2295 if (hasRenderType(poolp->getType()))
2296 {
2297 poolp->prerender();
2298 }
2299 }
2300
2301 //by bao 2277 //by bao
2302 //fake vertex buffer updating 2278 //fake vertex buffer updating
2303 //to guaranttee at least updating one VBO buffer every frame 2279 //to guaranttee at least updating one VBO buffer every frame
@@ -2314,7 +2290,8 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
2314 glMatrixMode(GL_MODELVIEW); 2290 glMatrixMode(GL_MODELVIEW);
2315 2291
2316 LLGLSPipeline gls_pipeline; 2292 LLGLSPipeline gls_pipeline;
2317 2293 LLGLEnable multisample(GL_MULTISAMPLE_ARB);
2294
2318 LLGLState gls_color_material(GL_COLOR_MATERIAL, mLightingDetail < 2); 2295 LLGLState gls_color_material(GL_COLOR_MATERIAL, mLightingDetail < 2);
2319 2296
2320 // Toggle backface culling for debugging 2297 // Toggle backface culling for debugging
@@ -2346,8 +2323,22 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
2346 { 2323 {
2347 gObjectList.renderObjectsForSelect(camera); 2324 gObjectList.renderObjectsForSelect(camera);
2348 } 2325 }
2326 else if (gSavedSettings.getBOOL("RenderDeferred"))
2327 {
2328 renderGeomDeferred();
2329 }
2349 else 2330 else
2350 { 2331 {
2332 for (pool_set_t::iterator iter = mPools.begin(); iter != mPools.end(); ++iter)
2333 {
2334 LLDrawPool *poolp = *iter;
2335 if (hasRenderType(poolp->getType()))
2336 {
2337 poolp->prerender();
2338 }
2339 }
2340
2341
2351 LLFastTimer t(LLFastTimer::FTM_POOLS); 2342 LLFastTimer t(LLFastTimer::FTM_POOLS);
2352 calcNearbyLights(camera); 2343 calcNearbyLights(camera);
2353 setupHWLights(NULL); 2344 setupHWLights(NULL);
@@ -2456,7 +2447,7 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
2456 // have touch-handlers. 2447 // have touch-handlers.
2457 mHighlightFaces.clear(); 2448 mHighlightFaces.clear();
2458 2449
2459 render_hud_elements(); 2450 renderDebug();
2460 2451
2461 LLVertexBuffer::stopRender(); 2452 LLVertexBuffer::stopRender();
2462 LLVertexBuffer::unbind(); 2453 LLVertexBuffer::unbind();
@@ -2479,6 +2470,19 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
2479#endif 2470#endif
2480} 2471}
2481 2472
2473void LLPipeline::renderGeomDeferred()
2474{
2475 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
2476 glEnableClientState(GL_NORMAL_ARRAY);
2477 glEnableClientState(GL_COLOR_ARRAY);
2478 gDeferredDiffuseProgram.bind();
2479 gPipeline.renderObjects(LLRenderPass::PASS_SIMPLE, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD | LLVertexBuffer::MAP_COLOR | LLVertexBuffer::MAP_NORMAL, TRUE);
2480 gDeferredDiffuseProgram.unbind();
2481 glDisableClientState(GL_COLOR_ARRAY);
2482 glDisableClientState(GL_NORMAL_ARRAY);
2483 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
2484}
2485
2482void LLPipeline::addTrianglesDrawn(S32 count) 2486void LLPipeline::addTrianglesDrawn(S32 count)
2483{ 2487{
2484 assertInitialized(); 2488 assertInitialized();
@@ -2512,8 +2516,8 @@ void LLPipeline::renderDebug()
2512 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); 2516 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
2513 2517
2514 // Debug stuff. 2518 // Debug stuff.
2515 for (LLWorld::region_list_t::iterator iter = gWorldp->getRegionList().begin(); 2519 for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin();
2516 iter != gWorldp->getRegionList().end(); ++iter) 2520 iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
2517 { 2521 {
2518 LLViewerRegion* region = *iter; 2522 LLViewerRegion* region = *iter;
2519 for (U32 i = 0; i < LLViewerRegion::NUM_PARTITIONS; i++) 2523 for (U32 i = 0; i < LLViewerRegion::NUM_PARTITIONS; i++)
@@ -2585,7 +2589,7 @@ void LLPipeline::renderForSelect(std::set<LLViewerObject*>& objects)
2585 2589
2586 for (std::set<LLViewerObject*>::iterator iter = objects.begin(); iter != objects.end(); ++iter) 2590 for (std::set<LLViewerObject*>::iterator iter = objects.begin(); iter != objects.end(); ++iter)
2587 { 2591 {
2588 stateSort((*iter)->mDrawable, *gCamera); 2592 stateSort((*iter)->mDrawable, *LLViewerCamera::getInstance());
2589 } 2593 }
2590 2594
2591 LLMemType mt(LLMemType::MTYPE_PIPELINE); 2595 LLMemType mt(LLMemType::MTYPE_PIPELINE);
@@ -3055,7 +3059,7 @@ void LLPipeline::setupAvatarLights(BOOL for_edit)
3055 { 3059 {
3056 LLColor4 diffuse(0.8f, 0.8f, 0.8f, 0.f); 3060 LLColor4 diffuse(0.8f, 0.8f, 0.8f, 0.f);
3057 LLVector4 light_pos_cam(-8.f, 0.25f, 10.f, 0.f); // w==0 => directional light 3061 LLVector4 light_pos_cam(-8.f, 0.25f, 10.f, 0.f); // w==0 => directional light
3058 LLMatrix4 camera_mat = gCamera->getModelview(); 3062 LLMatrix4 camera_mat = LLViewerCamera::getInstance()->getModelview();
3059 LLMatrix4 camera_rot(camera_mat.getMat3()); 3063 LLMatrix4 camera_rot(camera_mat.getMat3());
3060 camera_rot.invert(); 3064 camera_rot.invert();
3061 LLVector4 light_pos = light_pos_cam * camera_rot; 3065 LLVector4 light_pos = light_pos_cam * camera_rot;
@@ -3161,7 +3165,7 @@ void LLPipeline::calcNearbyLights(LLCamera& camera)
3161 // begin() == the closest light and rbegin() == the farthest light 3165 // begin() == the closest light and rbegin() == the farthest light
3162 const S32 MAX_LOCAL_LIGHTS = 6; 3166 const S32 MAX_LOCAL_LIGHTS = 6;
3163// LLVector3 cam_pos = gAgent.getCameraPositionAgent(); 3167// LLVector3 cam_pos = gAgent.getCameraPositionAgent();
3164 LLVector3 cam_pos = LLViewerJoystick::sOverrideCamera ? 3168 LLVector3 cam_pos = LLViewerJoystick::getInstance()->getOverrideCamera() ?
3165 camera.getOrigin() : 3169 camera.getOrigin() :
3166 gAgent.getPositionAgent(); 3170 gAgent.getPositionAgent();
3167 3171
@@ -3397,7 +3401,7 @@ void LLPipeline::setupHWLights(LLDrawPool* pool)
3397 LLColor4 light_color = LLColor4::white; 3401 LLColor4 light_color = LLColor4::white;
3398 light_color.mV[3] = 0.0f; 3402 light_color.mV[3] = 0.0f;
3399 3403
3400 LLVector3 light_pos(gCamera->getOrigin()); 3404 LLVector3 light_pos(LLViewerCamera::getInstance()->getOrigin());
3401 LLVector4 light_pos_gl(light_pos, 1.0f); 3405 LLVector4 light_pos_gl(light_pos, 1.0f);
3402 3406
3403 F32 light_radius = 16.f; 3407 F32 light_radius = 16.f;
@@ -3958,8 +3962,8 @@ LLViewerObject* LLPipeline::pickObject(const LLVector3 &start, const LLVector3 &
3958{ 3962{
3959 LLDrawable* drawable = NULL; 3963 LLDrawable* drawable = NULL;
3960 3964
3961 for (LLWorld::region_list_t::iterator iter = gWorldp->getRegionList().begin(); 3965 for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin();
3962 iter != gWorldp->getRegionList().end(); ++iter) 3966 iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
3963 { 3967 {
3964 LLViewerRegion* region = *iter; 3968 LLViewerRegion* region = *iter;
3965 LLSpatialPartition* part = region->getSpatialPartition(LLViewerRegion::PARTITION_VOLUME); 3969 LLSpatialPartition* part = region->getSpatialPartition(LLViewerRegion::PARTITION_VOLUME);
@@ -4013,19 +4017,16 @@ void LLPipeline::resetVertexBuffers()
4013{ 4017{
4014 sRenderBump = gSavedSettings.getBOOL("RenderObjectBump"); 4018 sRenderBump = gSavedSettings.getBOOL("RenderObjectBump");
4015 4019
4016 if (gWorldp) 4020 for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin();
4021 iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
4017 { 4022 {
4018 for (LLWorld::region_list_t::iterator iter = gWorldp->getRegionList().begin(); 4023 LLViewerRegion* region = *iter;
4019 iter != gWorldp->getRegionList().end(); ++iter) 4024 for (U32 i = 0; i < LLViewerRegion::NUM_PARTITIONS; i++)
4020 { 4025 {
4021 LLViewerRegion* region = *iter; 4026 LLSpatialPartition* part = region->getSpatialPartition(i);
4022 for (U32 i = 0; i < LLViewerRegion::NUM_PARTITIONS; i++) 4027 if (part)
4023 { 4028 {
4024 LLSpatialPartition* part = region->getSpatialPartition(i); 4029 part->resetVertexBuffers();
4025 if (part)
4026 {
4027 part->resetVertexBuffers();
4028 }
4029 } 4030 }
4030 } 4031 }
4031 } 4032 }
@@ -4217,7 +4218,7 @@ void LLPipeline::generateReflectionMap(LLCubeMap* cube_map, LLCamera& cube_cam)
4217 glTranslatef(-origin.mV[0], -origin.mV[1], -origin.mV[2]); 4218 glTranslatef(-origin.mV[0], -origin.mV[1], -origin.mV[2]);
4218 cube_cam.setOrigin(origin); 4219 cube_cam.setOrigin(origin);
4219 LLViewerCamera::updateFrustumPlanes(cube_cam); 4220 LLViewerCamera::updateFrustumPlanes(cube_cam);
4220 cube_cam.setOrigin(gCamera->getOrigin()); 4221 cube_cam.setOrigin(LLViewerCamera::getInstance()->getOrigin());
4221 static LLCullResult result; 4222 static LLCullResult result;
4222 gPipeline.updateCull(cube_cam, result); 4223 gPipeline.updateCull(cube_cam, result);
4223 gPipeline.stateSort(cube_cam, result); 4224 gPipeline.stateSort(cube_cam, result);
@@ -4814,6 +4815,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
4814 4815
4815 mScreen.bindTexture(); 4816 mScreen.bindTexture();
4816 4817
4818 LLGLEnable multisample(GL_MULTISAMPLE_ARB);
4817 glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 4819 glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
4818 4820
4819 glDisable(GL_TEXTURE_RECTANGLE_ARB); 4821 glDisable(GL_TEXTURE_RECTANGLE_ARB);
@@ -4840,8 +4842,8 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
4840 4842
4841void LLPipeline::processImagery(LLCamera& camera) 4843void LLPipeline::processImagery(LLCamera& camera)
4842{ 4844{
4843 for (LLWorld::region_list_t::iterator iter = gWorldp->getRegionList().begin(); 4845 for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin();
4844 iter != gWorldp->getRegionList().end(); ++iter) 4846 iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
4845 { 4847 {
4846 LLViewerRegion* region = *iter; 4848 LLViewerRegion* region = *iter;
4847 LLSpatialPartition* part = region->getSpatialPartition(LLViewerRegion::PARTITION_VOLUME); 4849 LLSpatialPartition* part = region->getSpatialPartition(LLViewerRegion::PARTITION_VOLUME);
@@ -4886,7 +4888,7 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
4886 F32 pd; 4888 F32 pd;
4887 4889
4888 S32 water_clip = 0; 4890 S32 water_clip = 0;
4889 if (!gCamera->cameraUnderWater()) 4891 if (!LLViewerCamera::getInstance()->cameraUnderWater())
4890 { //camera is above water, clip plane points up 4892 { //camera is above water, clip plane points up
4891 pnorm.setVec(0,0,1); 4893 pnorm.setVec(0,0,1);
4892 pd = -height; 4894 pd = -height;
@@ -4903,7 +4905,7 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
4903 4905
4904 4906
4905 4907
4906 if (!gCamera->cameraUnderWater()) 4908 if (!LLViewerCamera::getInstance()->cameraUnderWater())
4907 { //generate planar reflection map 4909 { //generate planar reflection map
4908 LLViewerImage::unbindTexture(0, GL_TEXTURE_2D); 4910 LLViewerImage::unbindTexture(0, GL_TEXTURE_2D);
4909 glClearColor(0,0,0,0); 4911 glClearColor(0,0,0,0);
@@ -4948,13 +4950,12 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
4948 mRenderTypeMask = tmp; 4950 mRenderTypeMask = tmp;
4949 } 4951 }
4950 4952
4951 if (LLDrawPoolWater::sNeedsReflectionUpdate) 4953 if (LLDrawPoolWater::sNeedsDistortionUpdate)
4952 { 4954 {
4953 mRenderTypeMask &= ~((1<<LLPipeline::RENDER_TYPE_WATER) | 4955 mRenderTypeMask &= ~((1<<LLPipeline::RENDER_TYPE_WATER) |
4954 (1<<LLPipeline::RENDER_TYPE_GROUND) | 4956 (1<<LLPipeline::RENDER_TYPE_GROUND) |
4955 (1<<LLPipeline::RENDER_TYPE_SKY) | 4957 (1<<LLPipeline::RENDER_TYPE_SKY) |
4956 (1<<LLPipeline::RENDER_TYPE_CLOUDS) | 4958 (1<<LLPipeline::RENDER_TYPE_CLOUDS));
4957 (1<<LLPipeline::RENDER_TYPE_WL_SKY));
4958 4959
4959 if (gSavedSettings.getBOOL("RenderWaterReflections")) 4960 if (gSavedSettings.getBOOL("RenderWaterReflections"))
4960 { //mask out selected geometry based on reflection detail 4961 { //mask out selected geometry based on reflection detail
@@ -5000,7 +5001,7 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
5000 (1<<LLPipeline::RENDER_TYPE_GROUND)); 5001 (1<<LLPipeline::RENDER_TYPE_GROUND));
5001 stop_glerror(); 5002 stop_glerror();
5002 5003
5003 LLPipeline::sUnderWaterRender = gCamera->cameraUnderWater() ? FALSE : TRUE; 5004 LLPipeline::sUnderWaterRender = LLViewerCamera::getInstance()->cameraUnderWater() ? FALSE : TRUE;
5004 5005
5005 if (LLPipeline::sUnderWaterRender) 5006 if (LLPipeline::sUnderWaterRender)
5006 { 5007 {
@@ -5034,7 +5035,7 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
5034 LLPipeline::sUnderWaterRender = FALSE; 5035 LLPipeline::sUnderWaterRender = FALSE;
5035 mWaterDis.flush(); 5036 mWaterDis.flush();
5036 } 5037 }
5037 last_update = LLDrawPoolWater::sNeedsReflectionUpdate; 5038 last_update = LLDrawPoolWater::sNeedsReflectionUpdate && LLDrawPoolWater::sNeedsDistortionUpdate;
5038 5039
5039 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); 5040 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
5040 LLPipeline::sReflectionRender = FALSE; 5041 LLPipeline::sReflectionRender = FALSE;
@@ -5048,14 +5049,15 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
5048 gViewerWindow->setupViewport(); 5049 gViewerWindow->setupViewport();
5049 mRenderTypeMask = type_mask; 5050 mRenderTypeMask = type_mask;
5050 LLDrawPoolWater::sNeedsReflectionUpdate = FALSE; 5051 LLDrawPoolWater::sNeedsReflectionUpdate = FALSE;
5051 gCamera->setUserClipPlane(LLPlane(-pnorm, -pd)); 5052 LLDrawPoolWater::sNeedsDistortionUpdate = FALSE;
5053 LLViewerCamera::getInstance()->setUserClipPlane(LLPlane(-pnorm, -pd));
5052 LLPipeline::sUseOcclusion = occlusion; 5054 LLPipeline::sUseOcclusion = occlusion;
5053 } 5055 }
5054} 5056}
5055 5057
5056LLCubeMap* LLPipeline::findReflectionMap(const LLVector3& location) 5058LLCubeMap* LLPipeline::findReflectionMap(const LLVector3& location)
5057{ 5059{
5058 LLViewerRegion* region = gWorldp->getRegionFromPosAgent(location); 5060 LLViewerRegion* region = LLWorld::getInstance()->getRegionFromPosAgent(location);
5059 if (region) 5061 if (region)
5060 { 5062 {
5061 LLSpatialPartition* part = region->getSpatialPartition(LLViewerRegion::PARTITION_VOLUME); 5063 LLSpatialPartition* part = region->getSpatialPartition(LLViewerRegion::PARTITION_VOLUME);
@@ -5075,10 +5077,6 @@ LLCubeMap* LLPipeline::findReflectionMap(const LLVector3& location)
5075 5077
5076void LLPipeline::renderGroups(LLRenderPass* pass, U32 type, U32 mask, BOOL texture) 5078void LLPipeline::renderGroups(LLRenderPass* pass, U32 type, U32 mask, BOOL texture)
5077{ 5079{
5078#if !LL_RELEASE_FOR_DOWNLOAD
5079 LLGLState::checkClientArrays(mask);
5080#endif
5081
5082 for (LLCullResult::sg_list_t::iterator i = sCull->beginVisibleGroups(); i != sCull->endVisibleGroups(); ++i) 5080 for (LLCullResult::sg_list_t::iterator i = sCull->beginVisibleGroups(); i != sCull->endVisibleGroups(); ++i)
5083 { 5081 {
5084 LLSpatialGroup* group = *i; 5082 LLSpatialGroup* group = *i;
@@ -5105,22 +5103,23 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
5105 5103
5106 assertInitialized(); 5104 assertInitialized();
5107 5105
5108 if (!avatar->mImpostor.isComplete()) 5106 U32 mask;
5107 BOOL muted = LLMuteList::getInstance()->isMuted(avatar->getID());
5108
5109 if (muted)
5109 { 5110 {
5110 avatar->mImpostor.allocate(128,256,GL_RGBA,TRUE); 5111 mask = 1 << LLPipeline::RENDER_TYPE_AVATAR;
5111 avatar->mImpostor.bindTexture();
5112 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
5113 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
5114 LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
5115 } 5112 }
5116 5113 else
5117 U32 mask = (1<<LLPipeline::RENDER_TYPE_VOLUME) | 5114 {
5115 mask = (1<<LLPipeline::RENDER_TYPE_VOLUME) |
5118 (1<<LLPipeline::RENDER_TYPE_AVATAR) | 5116 (1<<LLPipeline::RENDER_TYPE_AVATAR) |
5119 (1<<LLPipeline::RENDER_TYPE_BUMP) | 5117 (1<<LLPipeline::RENDER_TYPE_BUMP) |
5120 (1<<LLPipeline::RENDER_TYPE_GRASS) | 5118 (1<<LLPipeline::RENDER_TYPE_GRASS) |
5121 (1<<LLPipeline::RENDER_TYPE_SIMPLE) | 5119 (1<<LLPipeline::RENDER_TYPE_SIMPLE) |
5122 (1<<LLPipeline::RENDER_TYPE_ALPHA) | 5120 (1<<LLPipeline::RENDER_TYPE_ALPHA) |
5123 (1<<LLPipeline::RENDER_TYPE_INVISIBLE); 5121 (1<<LLPipeline::RENDER_TYPE_INVISIBLE);
5122 }
5124 5123
5125 mask = mask & gPipeline.getRenderTypeMask(); 5124 mask = mask & gPipeline.getRenderTypeMask();
5126 U32 saved_mask = gPipeline.mRenderTypeMask; 5125 U32 saved_mask = gPipeline.mRenderTypeMask;
@@ -5131,7 +5130,7 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
5131 sReflectionRender = TRUE; 5130 sReflectionRender = TRUE;
5132 sImpostorRender = TRUE; 5131 sImpostorRender = TRUE;
5133 5132
5134 markVisible(avatar->mDrawable, *gCamera); 5133 markVisible(avatar->mDrawable, *LLViewerCamera::getInstance());
5135 LLVOAvatar::sUseImpostors = FALSE; 5134 LLVOAvatar::sUseImpostors = FALSE;
5136 5135
5137 LLVOAvatar::attachment_map_t::iterator iter; 5136 LLVOAvatar::attachment_map_t::iterator iter;
@@ -5142,36 +5141,18 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
5142 LLViewerObject* object = iter->second->getObject(); 5141 LLViewerObject* object = iter->second->getObject();
5143 if (object) 5142 if (object)
5144 { 5143 {
5145 markVisible(object->mDrawable->getSpatialBridge(), *gCamera); 5144 markVisible(object->mDrawable->getSpatialBridge(), *LLViewerCamera::getInstance());
5146 } 5145 }
5147 } 5146 }
5148 5147
5149 stateSort(*gCamera, result); 5148 stateSort(*LLViewerCamera::getInstance(), result);
5150 5149
5151 glClearColor(0.0f,0.0f,0.0f,0.0f);
5152 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
5153 glStencilMask(0xFFFFFFFF);
5154 glClearStencil(0);
5155
5156 {
5157 LLGLEnable scissor(GL_SCISSOR_TEST);
5158 glScissor(0, 0, 128, 256);
5159 avatar->mImpostor.bindTarget();
5160 avatar->mImpostor.getViewport(gGLViewport);
5161 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
5162 }
5163
5164 LLGLEnable stencil(GL_STENCIL_TEST);
5165
5166 glStencilFunc(GL_ALWAYS, 1, 0xFFFFFFFF);
5167 glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
5168
5169 const LLVector3* ext = avatar->mDrawable->getSpatialExtents(); 5150 const LLVector3* ext = avatar->mDrawable->getSpatialExtents();
5170 LLVector3 pos(avatar->getRenderPosition()+avatar->getImpostorOffset()); 5151 LLVector3 pos(avatar->getRenderPosition()+avatar->getImpostorOffset());
5171 5152
5172 LLCamera camera = *gCamera; 5153 LLCamera camera = *LLViewerCamera::getInstance();
5173 5154
5174 camera.lookAt(gCamera->getOrigin(), pos, gCamera->getUpAxis()); 5155 camera.lookAt(LLViewerCamera::getInstance()->getOrigin(), pos, LLViewerCamera::getInstance()->getUpAxis());
5175 5156
5176 LLVector2 tdim; 5157 LLVector2 tdim;
5177 5158
@@ -5190,9 +5171,13 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
5190 5171
5191 glMatrixMode(GL_PROJECTION); 5172 glMatrixMode(GL_PROJECTION);
5192 glPushMatrix(); 5173 glPushMatrix();
5193 glh::matrix4f ortho = gl_ortho(-tdim.mV[0], tdim.mV[0], -tdim.mV[1], tdim.mV[1], 1.0, 256.0); 5174 //glh::matrix4f ortho = gl_ortho(-tdim.mV[0], tdim.mV[0], -tdim.mV[1], tdim.mV[1], 1.0, 256.0);
5194 glh_set_current_projection(ortho); 5175 F32 distance = (pos-camera.getOrigin()).magVec();
5195 glLoadMatrixf(ortho.m); 5176 F32 fov = atanf(tdim.mV[1]/distance)*2.f*RAD_TO_DEG;
5177 F32 aspect = tdim.mV[0]/tdim.mV[1]; //128.f/256.f;
5178 glh::matrix4f persp = gl_perspective(fov, aspect, 1.f, 256.f);
5179 glh_set_current_projection(persp);
5180 glLoadMatrixf(persp.m);
5196 5181
5197 glMatrixMode(GL_MODELVIEW); 5182 glMatrixMode(GL_MODELVIEW);
5198 glPushMatrix(); 5183 glPushMatrix();
@@ -5204,24 +5189,68 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
5204 glLoadMatrixf(mat.m); 5189 glLoadMatrixf(mat.m);
5205 glh_set_current_modelview(mat); 5190 glh_set_current_modelview(mat);
5206 5191
5192 glClearColor(0.0f,0.0f,0.0f,0.0f);
5193 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
5194 glStencilMask(0xFFFFFFFF);
5195 glClearStencil(0);
5196
5197 // get the number of pixels per angle
5198 F32 pa = gViewerWindow->getWindowDisplayHeight() / (RAD_TO_DEG * LLViewerCamera::getInstance()->getView());
5199
5200 //get resolution based on angle width and height of impostor (double desired resolution to prevent aliasing)
5201 U32 resY = llmin(nhpo2((U32) (fov*pa)), (U32) 512);
5202 U32 resX = llmin(nhpo2((U32) (atanf(tdim.mV[0]/distance)*2.f*RAD_TO_DEG*pa)), (U32) 512);
5203
5204 if (!avatar->mImpostor.isComplete() || resX != avatar->mImpostor.getWidth() ||
5205 resY != avatar->mImpostor.getHeight())
5206 {
5207 avatar->mImpostor.allocate(resX,resY,GL_RGBA,TRUE);
5208 avatar->mImpostor.bindTexture();
5209 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
5210 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
5211 LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
5212 }
5213
5214 {
5215 LLGLEnable scissor(GL_SCISSOR_TEST);
5216 glScissor(0, 0, resX, resY);
5217 avatar->mImpostor.bindTarget();
5218 avatar->mImpostor.getViewport(gGLViewport);
5219 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
5220 }
5221
5222 LLGLEnable stencil(GL_STENCIL_TEST);
5223
5224 glStencilFunc(GL_ALWAYS, 1, 0xFFFFFFFF);
5225 glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
5226
5207 renderGeom(camera); 5227 renderGeom(camera);
5208 5228
5209 glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); 5229 glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
5210 glStencilFunc(GL_EQUAL, 1, 0xFFFFFF); 5230 glStencilFunc(GL_EQUAL, 1, 0xFFFFFF);
5211 5231
5212 { 5232 {
5213 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
5214 LLVector3 left = camera.getLeftAxis()*tdim.mV[0]*2.f; 5233 LLVector3 left = camera.getLeftAxis()*tdim.mV[0]*2.f;
5215 LLVector3 up = camera.getUpAxis()*tdim.mV[1]*2.f; 5234 LLVector3 up = camera.getUpAxis()*tdim.mV[1]*2.f;
5216 5235
5217 LLGLEnable blend(GL_BLEND); 5236 LLGLEnable blend(muted ? 0 : GL_BLEND);
5237
5238 if (muted)
5239 {
5240 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
5241 }
5242 else
5243 {
5244 glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE);
5245 }
5246
5218 gGL.blendFunc(GL_ONE, GL_ONE); 5247 gGL.blendFunc(GL_ONE, GL_ONE);
5219 LLImageGL::unbindTexture(0, GL_TEXTURE_2D); 5248 LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
5220 5249
5221 LLGLDepthTest depth(GL_FALSE, GL_FALSE); 5250 LLGLDepthTest depth(GL_FALSE, GL_FALSE);
5222 5251
5223 gGL.start(); 5252 gGL.start();
5224 gGL.color4ub(0,0,0,1); 5253 gGL.color4ub(64,64,64,1);
5225 gGL.begin(GL_QUADS); 5254 gGL.begin(GL_QUADS);
5226 gGL.vertex3fv((pos+left-up).mV); 5255 gGL.vertex3fv((pos+left-up).mV);
5227 gGL.vertex3fv((pos-left-up).mV); 5256 gGL.vertex3fv((pos-left-up).mV);
@@ -5230,9 +5259,11 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
5230 gGL.end(); 5259 gGL.end();
5231 gGL.stop(); 5260 gGL.stop();
5232 5261
5262
5233 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 5263 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
5234 } 5264 }
5235 5265
5266
5236 avatar->mImpostor.flush(); 5267 avatar->mImpostor.flush();
5237 5268
5238 avatar->setImpostorDim(tdim); 5269 avatar->setImpostorDim(tdim);
diff --git a/linden/indra/newview/pipeline.h b/linden/indra/newview/pipeline.h
index 0e3e1c0..a2a404f 100644
--- a/linden/indra/newview/pipeline.h
+++ b/linden/indra/newview/pipeline.h
@@ -72,6 +72,7 @@ void glh_set_current_modelview(glh::matrix4f& mat);
72glh::matrix4f glh_get_current_projection(); 72glh::matrix4f glh_get_current_projection();
73void glh_set_current_projection(glh::matrix4f& mat); 73void glh_set_current_projection(glh::matrix4f& mat);
74glh::matrix4f gl_ortho(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat znear, GLfloat zfar); 74glh::matrix4f gl_ortho(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat znear, GLfloat zfar);
75glh::matrix4f gl_perspective(GLfloat fovy, GLfloat aspect, GLfloat zNear, GLfloat zFar);
75 76
76class LLPipeline 77class LLPipeline
77{ 78{
@@ -179,6 +180,8 @@ public:
179 void grabReferences(LLCullResult& result); 180 void grabReferences(LLCullResult& result);
180 181
181 void renderGeom(LLCamera& camera, BOOL forceVBOUpdate = FALSE); 182 void renderGeom(LLCamera& camera, BOOL forceVBOUpdate = FALSE);
183 void renderGeomDeferred();
184
182 void processImagery(LLCamera& camera); 185 void processImagery(LLCamera& camera);
183 void generateWaterReflection(LLCamera& camera); 186 void generateWaterReflection(LLCamera& camera);
184 void renderHighlights(); 187 void renderHighlights();
@@ -328,10 +331,9 @@ public:
328 RENDER_DEBUG_TEXTURE_ANIM = 0x080000, 331 RENDER_DEBUG_TEXTURE_ANIM = 0x080000,
329 RENDER_DEBUG_LIGHTS = 0x100000, 332 RENDER_DEBUG_LIGHTS = 0x100000,
330 RENDER_DEBUG_BATCH_SIZE = 0x200000, 333 RENDER_DEBUG_BATCH_SIZE = 0x200000,
334 RENDER_DEBUG_SHAME = 0x400000,
331 }; 335 };
332 336
333 LLPointer<LLViewerImage> mAlphaSizzleImagep;
334
335public: 337public:
336 338
337 LLSpatialPartition* getSpatialPartition(LLViewerObject* vobj); 339 LLSpatialPartition* getSpatialPartition(LLViewerObject* vobj);
diff --git a/linden/indra/newview/releasenotes.txt b/linden/indra/newview/releasenotes.txt
index dfee1b0..040c1da 100644
--- a/linden/indra/newview/releasenotes.txt
+++ b/linden/indra/newview/releasenotes.txt
@@ -1,117 +1,155 @@
1Release Notes for Second Life 1.19.1(4) April 2nd, 2008 1Release Notes for Second Life 1.20(2) April 18th, 2008
2=====================================
3Changes:
4* Record Movie to Disk option missing intentionally removed (VWR-6315)
5* Color changes to improve text contrast in title bar, scroll bar and menu highlight (VWR-5080)
6* Updated disabled button art
7* Updated login/teleport progress screen art and colors
8* Set the top-level 'opaque' parameter to false in menu_viewer.xml
9
10Crash Fixes:
11* Fixed: VWR-6576: panel_speaker_controls.xml broken for german, korean, japanese viewers
12* Fixed: VWR-3822: ATI crashes on startup when in 16 bit color mode
13* Fixed: crash with attached obj using Avatar Rendering Cost
14* Fixed: Linux crash parsing command-line arguments
15* Fixed: crash on LLVertexBuffer::destroyGLBuffer
16
17Fixes:
18* Fixed: VWR-6269: Text in Chat Console does not show when Communicate window is minimized having last focus on Local Chat tab
19* Fixed: VWR-6298: Some RC settings don't persist properly when settings.xml is present
20* Fixed: VWR-6265: Various communications preferences arent saved
21* Fixed: VWR-6251: Snapshots no longer able to capture the full screen.
22* Fixed: VWR-5929: Some UI translation texts are ignored because of missing names in XUI files
23* Fixed: VWR-6430: Comment area of "Debug Settings" floater (dialog box) is aligned badly
24* Fixed: VWR-6232: Tap-Tap-Hold Running should be an 'Advanced' character preference
25* Fixed: Disabled buttons are darker than normal
26* Fixed: Better distinguish button-depressed from disabled state
27* Fixed: Can't drag custom colors in color picker to the color palette
28* Fixed: Age Verified Account cannot access plots blocked for age verification
29* Fixed: Voice can become totally disabled aftrer using multiple viewers
30* Fixed: Lag Meter help and close buttons hidden offscreen
31* Fixed: can not take hi-res snapshot with size bigger than 4k by 4k.
32* Fixed: Unexpected text on the Build Tool's Object tab
33
34Localization Fixes:
35* Fixed: Korean files floater_buy_object.xml and panel_voice_enable.xml have a leading CRLF before XML declaration
36* Fixed: Eliminate unused xml files in skins\xui\en-us and language folders
37
38
39Release Notes for Second Life 1.20(1) April 14th, 2008
40=====================================
41Changes:
42* The Tools menu now displays in the main menu when editing/creating objects. Click on the Build button or right click and select Create. Existing short cuts (CTL + 1, 2, 3) all still work and will also activate the Tools menu.
43* Disabled Avatar Imposters to address suspected cause of increased crashes on nVidia cards
44* Allowed disabling of Joystick devices globally and selectively for avatar/build/flycam
45* Backed out changes to put the Friends dropdown back on the world map.
46
47Fixes:
48* External slurls don't detect that viewer 1.20.0 is already running
49* VWR-6392: Voice Chat Setup doesn't work in Preferences dialog box.
50* VWR-5812: Some media sizes will be placed on the wrong size texture when played by the viewer
51* Primary clicks toggle flycam with Mighty Mouse
52* Logging In screen's Quit button does not exit
53* crash on LLUIImageList::onUIImageLoaded
54* crash on LLViewerJointMesh::updateFaceData
55* Person to Person voice calls UI, volume slider overlaps end call button
56* Window opens large, then small, then large on startup
57* VWR-5929: Some UI translation texts are ignored because of missing names in XUI files
58* VWR-6386, VWR- 6384, VWR-6385: Clean up duplicate and malformed sibling names in en-us xml
59* (potential fix) Runtime Library error after quitting SL
60* Restored some missing textures
61
62Open Source changes:
63* Added 3DConnexion library export
64* Updated llkdu.dll for 1.20 OSS export
65
66Release Notes for Second Life 1.20(0) April 9th, 2008
2===================================== 67=====================================
3New features and changes: 68New features and changes:
69* Updates to the user interface (UI) visual design and architecture:
70** A new, lighter color scheme
71** Improved UI graphics (icons, buttons, etc)
72** Ability to customize text color of Instant Messages
73** Enhancements to the UI texture rendering system
74** Ability to reference textures by filename
75** Support for non-powers-of-two textures
76** Support for PNG textures
4 77
5* Physically accurate atmospheric rendering and lighting (previously code named WindLight) 78* LSL scripting for object glow!
6** Animateable day cycles 79** Script a prim's glow attribute, details here:
7** Vastly improved realistic water with reflections and glimmer 80http://wiki.secondlife.com/wiki/LlSetPrimitiveParams
8** "Glow" as new object attribute 81
9** Avatar Impostoring, which can speed up crowded scenes tremendously 82* Improved Joystick and 3D input device support
10** A new cleaned-up, easy to use Graphics Preferences tab with simple and advanced options for performance/quality settings 83** Integrated a new open source library created by 3Dconnexion designed to integrate multi axis input devices with Second Life
11 84** Joystick devices can now control the Avatar, Edited Objects, or the Flycam (View menu > Joystick Flycam)
12* Parcel Media - adds the ability to display Web based media on a parcel 85** Added a "Joystick Setup" window to the Preferences under "Input & Camera" for adjusting multi axis input devices
13** New API for Media Rendering 86** Settings are currently optimized for Logitech's 3Dconnexion SpaceNavigator but should be tunable for any joystic or 3D imput device
14** Enables Web content inworld 87
15** Added two new click actions, one for playing movies, and one for opening media 88Changes:
16** Embedded web browser 89* Removed voice setup wizard from Viewer
17** Added support for Media resizing 90* Removed "Detecting hardware" from first-use startup to save 10 seconds of start time
18 91* Removed "Critical Message" string from startup community standards dialog
19* Estate-Level Abuse Reporting 92* Removed "Start Gesture" from menu bar
20** Estate owners and managers now have the ability (under World > Region/Estate) to enter an email address where abuse reports will be sent. 93* Removed "do you want streaming audio" dialog
21** If this address is empty, abuse reports will go to Linden Lab as usual. If the address is present, the abuse reports will be sent there instead. In both cases, all abuse reports are logged by Linden Lab. 94* Removed Friends dropdown on Map
22 95* Display the Camera and Movement controls by default
23* Voice changes 96* Added online offline notification to open IM windows
24** Changed the default voice volume to be a bit higher, to better match the volume of in-world sounds 97* One click sit not be available if you're already sitting
25** Changed the voice volume slider to default to the middle of its range, so voice volume can be boosted above the default 98* Replaced "(hippos)" and "(waiting)" with "(Loading...)"
26 99* Print the name of the missing gesture in the error message
27* Improved Linux Voice support 100* Double-tap forward to run
28** Better support for USB headsets and other devices 101* Adjusted the right-justified text on the splash screen
29** Better voice audio quality 102* Ctrl-shift-1 now displays Statistics in a floater
30 103* Login progress bar change
31* Additional rendering optimizations: 104* Option available to turn off all group titles to make name tags smaller
32** Faster, more reliable occlusion culling - occluded regions are discovered instantaneously, eliminating random bad frames due to the camera moving too quickly 105* Small UI tweaks made to the "near me" floater for usability
33** No geometry transform overhead on region crossing - results in region crossings being slightly smoother 106
34** Faster frustum culling - less time is spent determining what's visible, thus giving better overall framerates 107Fixes:
35** No copy-to-texture for ripple water - objects under water are rendered to texture at half resolution, resulting in better overall framerates 108* SVC-1072: Havok 4 -- Objects can exist up to 4096 meters up, but scripted rez above 1024 meters fails silently
36** Faster sky updates - the non-WindLight (aka no-shader) skies update quicker - even faster than the pre-WindLight skies! 109* SVC-747: Estate Banned Residents list doesn't increment higher than 252
37** Single pass shiny when using shaders - making an object shiny will no longer require it to be rendered twice, which results in virtually free shiny functionality from a performance standpoint 110* VWR-5498: WindLight Release Candidate doesn't rembember correct size of IM window between sessions
38** Single pass terrain when using shaders - the terrain is no longer drawn in two passes, which, from a performance standpoint, results in virtually free high detail terrain for shader friendly cards (See the System Recommendations at http://secondlife.com/corporate/sysreqs.php) 111* VWR-747: Texture preview should not have constrained aspect ratio
39** Improved object update code (less work for the CPU) - attachments are no longer added to the active list, which improves performance in crowded areas 112* VWR-3984: WindLight: Certain snapshot options incorrectly capture a part of the screen
40** Better scheduling of Avatar LOD (Level of Detail) updates - Avatar LOD is now calculated every 16 frames as opposed to every single frame, which removes redundant work 113* VWR-3438: WindLight: Glow (including water reflections) shows through HUD objects
41** Better Avatar culling through more accurate bounding boxes - Avatar bounding boxes now match their current animation, resulting in more optimized culling of avatars that are not visible in the frame 114* VWR-4616: Snapshot, clicking on more removes current pic
42** Better tree rendering (70% fewer matrix operations, no reliance on GL matrix stack) - results in improved performance for tree rendering 115* VWR-1405: llMapDestination does not work as designed for OS X/Intel viewers
43** Trimmed unused state in LLDrawable, LLSpatialGroup, LLOctree, and LLFace - results in memory savings 116* VWR-3625: Highlights don't affect non-root prims
44** 16-bit index buffers are now used instead of 32-bit buffers - improves memory bandwidth for rendering geometry 117* VWR-2113: Mac Auto Updater "hides", giving appearance of failing
45** For more information, see: https://wiki.secondlife.com/wiki/WindLight 118* VWR-2755: duplicate PARCEL_FLAG_RESTRICT_PUSHOBJECT line in keywords.ini
46** Known Issue: 119* VWR-442: Require confirmation when inviting a new group owner
47*** VWR-1749: Second Life viewer client freezes on MacBook Pro 120* VWR-4903: Show avatar's name in the "Eject" and "Freeze" confirmation screens
48 121* VWR-6066: "Are you sure you want to clear you browser cache" in "Perferences > Web > Clear Now" has a typo
49Fixes: 122* VWR-5656: Secondlife icon missing in Linux version 1.19.1 RC1 ?
50* VWR-5087: Attach To... from inventory ignores selected postion and attaches to stored location. 123* VWR-2600: Add option to enable Full-Scene Anti-Aliasing (FSAA) in the viewer
51* VWR-5372 Specific Search (People, Places, etc) queries are modified and words less then 3 characters are removed. Now allow searches for resident names of 2 characters, and place/group names containing 1 char words. 124* VWR-3633: Avatar impostor of not-yet-rezzed avatar not appearing
52* VWR-2628: Fix for crash in operator*(LLVector3 const&, LLQuaternion const&) / LL ... 125* Localization of camera controls/tooltips
53* VWR-2682: Possible crash fix when accessing dead cubemap 126* Fixed: glow is rendered on property lines and selection silhouettes
54* VWR-1852: Edit Manipulators have Wrong Orientation with Local Ruler Mode on Linked Objects 127* LLImageJ2C now indicates what en/decoding implementation is being used
55* VWR-4963: Group archive freezes viewer 128* New messaging to inform Residents about consequences of selecting "Can modify my objects"
56* VWR-2273: View menu > Instant Message should be changed to "Communicate" 129* Fixed: Estate tools in non-english UI cannot change maturity level of islands from PG to Mature.
57* VWR-1722: Profiles are editable in two places (including Search browser) 130* Fixed: Agent Limit spontaneously resets to zero
58* VWR-434: HUD textures are attaching but not being seen 131* Fixed: Web control code does not correctly reject sl:// links
59* VWR-2030: Avatar only turns half-way in Appearance Mode 132* Fixed: Wait before printing missing gestures if the name isn't yet available
60* VWR-2920: Sculptie LOD causes object to be deformed into a flattened sphere close while correct far 133* Abrupt velocity changes of SL camera are smoother
61* VWR-2164: Particle Alpha transition is done incorrectly 134* llMapDestination() can be used to open place dialog to teleport user without opening map
62* VWR-1609: disabling "Show Selection Beam" makes beam render incorrectly for others 135* Fixed: Cannot close Buy Land floater when (waiting for data) from web site
63* VWR-2834: Builds fail on 1.18.4.0 with no mozlib 136* Fixed: Gestures appear in random order
64* VWR-983: Particles -> Offscreen/hidden particles get extended life -> as of 1.16.x at least. 137* Fixed: Preference Help button is not pointing to the correct url
65* VWR-882: Group name showing as (???) in About Land, IM tabs, and object edit window 138* Added Hyperlink to MOTD.
66* VWR-4921: not recognising in Linux that client is already running 139* Fixed: Occlusion crash on SIS cards
67* VWR-4548: Linux Intel945 feature-blacklist not being applied (Unresponsive, blackscreen, if not using LL_GL_NOEXT=x) 140* Fixed: VBO related crash on ATI R100 cards
68* Propagate client language setting into search URL 141* Fixed: lowest avatar detail is higher than before
69* Fix for crash in LLViewerPartGroup::updateParticles 142* Fixed: Avatar Impostor sprites have opaque black edges
70* Updated help text for llGiveInventoryList. 143* Fixed: Impostors tilt
71* Notecards crash users when passed from person to person 144* Fixed: Impostors need to update once after they stop walking
72* Add "getting data" progress display to buy currency dialog. 145* Fixed: Provide way to visually mute "costly" avatars (check cost: client->rendering->info displays->avatar render cost)
73* Feature table and gpu table changes to help with lenovo.
74* SL Viewer's Client Memory Tool is missing
75* Fix for white areas on lenovo with ATI FireGL 5200
76* Fixed list of names in Friends List showing (Waiting)
77* Help menus have been combined
78* Clean up the Client and Server menu user interface: ctrl-alt-D now toggles the 'Advanced' menu, requesting god status does not display the 'Admin' menu
79* Place Information is hidden behind the tool bar when opened from Second Life Help
80* Fixed: bulk upload of a single file (on Windows) includes the path in the item name and description
81* "Mute" button on script permission dialogs closes all dialogs from the sender
82* Translated camera controls +64 in both directions.
83* Fixed a bug causing the viewer to update the wrong parcel.
84* revert name of "Local Chat(history)" tab to "Local Chat"
85* Removed confusing "Start in Push-to-Talk mode" preference.
86* JA, KO, DE localizations are truncated on Preferences>Graphics tab> Run in a window descriptor
87* commit JA,KO,DE localization changes to accommodate truncations
88* bumpmapping flips on active objects
89* Fixed various Teleport and Show on Map bugs
90* More Help Buttons in Graphics Preferences
91* (Linux) Working device enumeration A.K.A. USB headset support
92* Linux Voice quality issues in 1.19.0
93* Change the way local output volume is handled
94* Checkboxes in About Land untick when selected
95* Add missing header file to export list for public SVN repository
96* Copy To Inventory fail to execute without any output feedback when Notecard has changes but not saved
97* Resolve instant message crash report
98* Textures/Snapshots in a notecard are opened again when you click copy to inventory.
99* Packet-loss while viewing inventory currently results in perceived inventory loss
100* stop and pause Media and music buttons do not work
101* Displayed page in the client browser disappears when crossing property boundaries.
102* replace misspellings in alerts.xml parameters (<message name="messsage") (3 S's)
103* fix a misspelling of 'participants' in floater_chat_history.xml tool tip
104* Media browser history dropdown does not save items across sessions
105* XML CLEANUP: duplicate sibling names in en-us xml
106* Crash in LLTabContainer::draw() if selected tab is invalid
107* The Search floater does not enable the "Search" button until the user has typed 3 characters to reduce db load
108* truncated english word 'water' in Advanced Water Editor modal help dialog
109* sculpties on the top10 crash list
110* Adjust gpu-table based on data from default graphics level framerate for specific graphics cards in viewer stats
111* Added command line option to crash on command line startup (-crash).
112 146
113Source changes: 147Source changes:
114* VWR-3290: Linux scons build script doesn't work with distcc 148* The settings system has been significantly revamped. llcontroldef.cpp has been replaced with an XML file controlling all settings values: app_settings/settings.xml
149* The command line parser has also been revamped. All but a few special arguments are now associated with control settings and controlled by the file app_settings/cmd_line.xml
150* VWR-2645: Source typo RELEASE_FOR_DOWNLOAD should be LL_RELEASE_FOR_DOWNLOAD ?
151* Fixed: g++ 4 viewer compile issues
152* Dead code removal createLegacyWearableFromAvatar
115 153
116 154
117Release Notes for Second Life 1.19.0(4) February 28th, 2008 155Release Notes for Second Life 1.19.0(4) February 28th, 2008
@@ -250,3 +288,1311 @@ Source changes:
250* Rebuild and/or update libraries to use statically linked libs. 288* Rebuild and/or update libraries to use statically linked libs.
251* Remove llfloaterhtmlhelp.cpp / h and floater_html_help.xml 289* Remove llfloaterhtmlhelp.cpp / h and floater_html_help.xml
252 290
291<<<<<<< .working
292=======
293
294Release Notes for Second Life 1.18.5(3) November 29, 2007
295=====================================
296New features:
297* New inworld search via the 'All' tab
298** Includes improved search functionality on land parcels, profiles, groups, wiki documents, events, classifieds, and some individual objects
299** Classifieds are returned both within and next to search results
300
301Changes:
302* slurls with 3 slashes (secondlife:///app....) are now highlighted in the text window
303* UI elements placement/sizing updated to accommodate localized versions of Second Life viewer
304* Korean text displays correctly on Leopard (Mac OS X 10.5)
305* Permissions dialogs are now throttled to avoid griefing
306
307Fixes:
308* Public source bundle not getting all ares libs
309* VWR-2959: Windows (Visual Studio) solution file refers to a non-existing project "build_all"
310* VWR-2551: Error in macview.xcodeproj -- invalid dependencies
311* VWR-2856: libs package missing c-ares
312* VWR-3073: Right-clicking someone's attachments to view profile loads (???) (???) instead
313* VWR-592: crash in LLTemplateMessageBuilder::addString
314* VWR-2826: Several problems on handling Japanese input (and possiblly Chinese/Korean also)
315* VWR-2834: Builds fail on 1.18.4.0 with no mozlib
316* VWR-2030: Avatar only turns half-way in Appearance Mode
317* VWR-2803: Lag Meter network ping metric doesn't account for residents outside the USA
318* VWR-3311: Web UI elements' focus rectangle are offset from their displayed position
319
320
321Release Notes for Second Life 1.18.4(3) November 7, 2007
322=====================================
323New features:
324* Help > Lag Meter; monitors Client, Network and Server lag and reports possible causes
325
326Changes:
327* Visual changes in preparation for a forthcoming release of new in-world search
328** Opt-in and opt-out checkboxes for Resident Profile, Parcels, For Sale Objects, Not For Sale Objects, Regions, and Groups
329* About Land description field is now a three-line text box
330* Minimap indicators for "above" and "below" updated
331** After the next server update, friends will appear in a different color
332
333Bug fixes:
334* Fixed a sculptie LOD issue
335* Fixed region Mature setting reverting to PG after Estate/Region changes
336* Fixed several UI elements
337* Fixed new group not appearing in group window until relog
338* Fixed Trash folders in user inventory
339* Fixed missing line of information on land sales
340* Fixed parcel listings showing [AREA] instead of parcel size
341* Fixed bad teleports from landmarks
342* Fixed up/down arrows for Repeats Per Face
343* Fixed a viewer nested message crash
344* Fixed a viewer crash with editing classifieds
345* Fixed a viewer crash when pressing Ctrl-F with a minimized Search window
346* Fixed secondlife.log spam when group info window opens
347* Fixed Publish on Web not saving for parcels
348* Fixed missing dialog for Publish in Classifieds
349* Fixed updates for Land and L$
350* Fixed invisible sculpted prims when sculpted texture contains alpha
351* Fixed scope of drag-select with locked objects
352* Fixed link order of drag-selected objects
353* Fixed Accept Notices flag in Group Panel General tab not saving value
354* Fixed Linux viewer preferences for choosing the cache location or chat log location
355* Fixed Apply button disabled after setting group preferences
356* Fixed Apply button failing to grey out after selecting 'List Group in Profile'
357* Fixed filename filter for Linux/GTK file picker
358* Fixed Linux/GTK file picker not remembering most recent directory
359* Fixed channel argument in Linux client
360* Fixed muted particles not clearing
361* Fixed Show in Search option not carrying over to copied object
362* Fixed muted users disappearing from Active Speakers
363* Fixed Mature content flag when searching All
364* Fixed viewer crash when pasting/typing UTF8 text in the object For Sale price box
365* Fixed Gesture Editor sounds not initialized
366* Fixed Group enrollment fee accepting floating point
367* Fixed 'Quiet Snapshots to Disk' and 'Disable Camera Constraints' not persisting across sessions
368* Fixed dot characters in various fields
369* Fixed a crash on startup (due to empty list of rewritten login URIs)
370* Fixed a Viewer crash while trying to rez an object
371* Fixed a crash when editing classifieds
372* Fixed Land & L$ fields no longer update
373* Fixed a crash by minimizing the search window followed by Ctrl+F
374* Fixed parcel option doesnt save publish listing on the web setting
375* Fixed texture editing user interface is confusing
376* Fixed can't set Repeats Per Face with up/down arrows
377* Fixed Auction ID and Land Description Overlap in the 'About Land' window
378* Disabled Add to Outfit and Replace Outfit options on the top-level Clothing folder
379* MISC-567: Multiple system folders (e.g., '100 Lost and Found Folders') in inventory
380* VWR-2471: SL-viewer chrashes after opening the 10th group-info-window
381* VWR-2444: Menu background colors aren't settable in colors_base.xml
382* VWR-2291: LOD defaults are now too aggressive in RC 1.18.3
383* VWR-2283: Some changes to groups cannot be saved
384* VWR-2116: Viewer crashes when starting a new Group IM session under Japanese UI
385* VWR-2104: long avatar names overflow on the chat history window volume control/muting section
386* VWR-2065: Custom Snapshot setting do not save for next Snapshot
387* VWR-2041: Allow using voice component on another computer
388* VWR-1945: toolbox floater displays window elements incorrectly when minimized then moved.
389* VWR-1944: Active gestures sometimes fail to show in the Active Gestures list
390* VWR-1888: Characters missing in IM window
391* VWR-1724: HUD zoom snaps back after selecting another HUD object
392* VWR-1695: llGiveInventoryList objects spam the owner with messages when the recipient is in Busy mode
393* VWR-1590: Keyboard changes inventory selection after right-click
394* VWR-1562: llassert(mNumDescendantsSelected >= 0) with crash and loop. (Debug build)
395* VWR-1448: llSetText on non-root prims is unreliable (including after relogs)
396* VWR-1408: Online status viewable via Groups even if 'Make my online status visible only to my Friends' is set
397* VWR-1399: Client crashes when viewing details of an empty proposal window
398* VWR-1096: llPlaySound does not play whilst in HUD depending on HUD attachment point
399* VWR-1045: Client crashes with no warning when uploading corrupted TGA file
400* VWR-851: Viewer Crashes in high texture environments when moving or when panning with camera.
401* VWR-813: Recent Items tab shows folders with no matching items
402* VWR-738: SL crashes when loading with a GTK_IM scim module
403* VWR-379: Fix shell scripts to use bash and not sh when appropriate.
404* VWR-333: 'Unable to load gesture.' or 'Gesture is missing from database.' on login
405* VWR-315: Script changes in the editor may be cancelled because of lag
406* VWR-851: Viewer Crashes in high texture environments when moving or when panning with camera.
407* VWR-813: Recent Items tab shows folders with no matching items
408* VWR-738: SL crashes when loading with a GTK_IM scim module
409* VWR-379: Fix shell scripts to use bash and not sh when appropriate.
410* VWR-333: 'Unable to load gesture.' or 'Gesture is missing from database.' on login
411* VWR-315: Script changes in the editor may be cancelled because of lag
412
413Release Notes for Second Life 1.18.3(5) September 28, 2007
414
415=====================================
416Changes:
417* Changed Bug Reporting links to http:// instead of https://
418* Build mode no longer automatically turns on beacons
419* Removed 'Ping User' in statistics window (was returning 0, as userserver no longer exists)
420* Removed 'Open' menu option when clothing is selected (as 'Wear' is available)
421* Added minimize button to Inventory
422* Updated voice components to improve quality and address VWR-1532
423* Added name of viewer release channel to embedded browser agent ID string
424* Reverted map beacon behavior (per VWR-2270)
425
426Known issues:
427* Sculpted prims with alpha in the sculpted texture are invisible
428* The command line option '-drop' does not work on Linux or OSX clients.
429* VWR-2268: Role Description causes Apply Changes, Ignore Changes, Cancel alert even if you don't have rights to change
430* VWR-2551: Error in macview.xcodeproj -- invalid dependencies
431* VWR-2404: lossless texture compression on small textures not lossless
432* VWR-2552: Telehub gui very broken in RC
433
434LSL changes:
435* Ability to get details about an object by object key:
436** list llGetObjectDetails(key id, list params)
437*** id = the key of the object to get info about.
438*** params = a list of the object details requested: [OBJECT_NAME, OBJECT_OWNER]
439*** returns a list of values in the order requested: [ 'Object_Name', <the UUID key of the owner>]
440**** OBJECT_UNKNOWN_DETAIL Returned by llGetObjectDetails when passed an invalid object parameter type.
441**** OBJECT_NAME Used with llGetObjectDetails to get an object's name.
442**** OBJECT_DESC Used with llGetObjectDetails to get an object's description.
443**** OBJECT_POS Used with llGetObjectDetails to get an object's position.
444**** OBJECT_ROT Used with llGetObjectDetails to get an object's rotation.
445**** OBJECT_VELOCITY Used with llGetObjectDetails to get an object's velocity.
446**** OBJECT_OWNER Used with llGetObjectDetails to get an object's owner's key. Will be NULL_KEY if group owned.
447**** OBJECT_GROUP Used with llGetObjectDetails to get an object's group's key.
448**** OBJECT_CREATOR Used with llGetObjectDetails to get an object's creator's key.
449
450Bug fixes:
451* Fixed default eyes appearing gray
452* Fixed viewer source linking error
453* Enrollment fees are no longer displayed with decimals
454* Fixed inworld map region search failing if a space is included after the region name
455* Fixed Appearance editor preview squares after changing tabs
456* Fixed a bug with LODs for sculpted prims
457* Fixed flexy causes llTargetOmega child objects to not rotate
458* Fixed an incorrect Support link
459* Fixed clipboard capture on login screen's config info
460* Fixed web browser widget shows up blank when connecting via https
461* Fixed doubleclicking text entry fields should select a single word first, then the entire field
462* Fixed items renamed from Recent Items not displaying the correct name in All Items
463* Fixed physical memory calls with more than 4GB of memory
464* Fixed viewer crash by clicking Connect button repeatedly
465* Fixed crash in viewer when receiving bad HUD Effects
466* Fixed a Linux client crash
467* Fixed client on 64-bit Linux systems that cannot find their GL drivers
468* Improved Linux client threading
469* Improved client performance after closing an inventory folder with a large number of items
470* VWR-2487: Covenant Details between live version and release candidate version
471* VWR-2275: Linux 1.18.3 Won't Link
472* VWR-2152: Possible crash in llviewerobjectlist
473* VWR-2144: Client crashes when deleting unsaved gestures
474* VWR-2036: Build tools floater does not remember its position on restart
475* VWR-1987: Segfault on startup if audio doesn't initialize.
476* VWR-1976: Solaris' fprintf segfaults on NULL arguments
477* VWR-1968: Possible crash in llmultigesture.cpp
478* VWR-1951: Hide Particles is not working from the View > Beacons menu item
479* VWR-1942: An error in the do-while example of the LSL Scripting Guide could cause infinite looping.
480* VWR-1892: Use pkgconfig for more libraries in the standalone build
481* VWR-1891: Detect a Debian bulid-host, as is done for Fedora
482* VWR-1880: Modify 'Ctrl-F' to call Search/Replace Dialog when invoked inside Script Window
483* VWR-1872: An attempt to fix the 'empty inventory trash' crashes
484* VWR-1861: Renaming items in inventory folders does not update item sort order
485* VWR-1823: Bad typecast for 64 bit systems, llagent llfloatercustomize
486* VWR-1808: Possible crash in llviewerobjectlist
487* VWR-1761: Group Invite Suggestion--add 'view group info' to invite dialog box
488* VWR-1743: LLFloaterGroups source code inconsistencies
489* VWR-1736: Add a Invite to Group option to the Avatar Pie Menu
490* VWR-1722: Profiles are editable in two places (including Search browser)
491* VWR-1721: GUI quirk in groups
492* VWR-1714: Folders flashing in Inventory window with Filters and 'Always show folders' checked
493* VWR-1699: Sculpt map preview inaccurate
494* VWR-1647: 'Show end of last IM conversation' in Preferences/Communication automatically remains checked after OK-ing unchecked
495* VWR-1640: login retires cause LLFrameStatView::setup() to seg fault
496* VWR-1638: confused viewer - displays login and regular menus and buttons
497* VWR-1567: Change the default item name for 'snapshot to inventory' to something more usefull than 'snapshot'
498* VWR-1566: An attempt to fix the glDrawRangeElements crashes (refcount LLDrawInfo )
499* VWR-1564: Viewer crashes when started with the '-local' argument.
500* VWR-1460: Can not see permissions of objects in Buy Contents window when item has long name
501* VWR-1398: Appearance editor's previews do not render correctly (1.17.2)
502* VWR-1372: Sculpt prim topology reverts to sphere unexpectedly
503* VWR-1230: Text highlighting in Chat History window is cancelled when history scrolls
504* VWR-1225: Embedded notecards not functioning
505* VWR-1187: Profile > Classifieds tab shows confirmation dialog when no changes are made
506* VWR-1079: Group Notice dialog: message text can't be copied and pasted
507* VWR-942: logRanOffEndOfPacket is too terse when it logs packet data, add some more info
508* VWR-866: Sculpties suffer HORRIBLY from JPEG artifacts
509* VWR-819: Open the 'More>>' section of the edit tools by default and persist it across sessions
510* VWR-749: Bandwidth indicator: Kbps, should not have capital k
511* VWR-493: Statistics bar, Packet Loss: % sign is doubled
512* VWR-493: Objects with 'Linden' in their name can't be muted
513* VWR-423: Selecting group charter text causes Apply/Ignore/Cancel popup even if the text wasn't changed
514* VWR-240: Cannot input Japanese characters from keyboard on Linux
515* SVC-300: Spam upon TP out of Help Island Public, per calling card and landmark
516
517
518Release Notes for Second Life 1.18.2(1) September 19, 2007
519=====================================
520
521Changes:
522* Fix URL handler exploit described here: http://blog.secondlife.com/2007/09/18/second-life-url-handler-exploit/
523* Update voice components to improve quality and address VWR-1532
524* Add name of viewer release channel to embedded browser agent ID string
525
526
527Release Notes for Second Life 1.18.2(0) August 10, 2007
528=====================================
529
530Bug fixes:
531* VWR-1936: Line editor history missing from First Look: Voice
532* Adjusted thread priorities and buffering algorithms in SLVoice to improve performance on low-end machines
533* Added a DC bias removal filter to SLVoice, which should remove 'popping' artifacts heard with some microphones
534* Fixed: Audio devices added to a system after launch of client do not appear in the device menu
535* Fixed: The first time opening the prefs window after launch kicks the user out of their voice channel
536
537Release Notes for Second Life 1.18.1(2) August 2, 2007
538=====================================
539
540New Features:
541* In-World Voice Chat
542** In-world Voice Chat is now part of the main viewer.
543** You can see and manage all voice settings in Edit > Preferences > Voice Chat.
544** Voice is off by default. To enable (and disable) voice, visit Edit > Preferences > Voice Chat and check/uncheck the box beside 'Enable voice chat'.
545** A voice set-up wizard appears during first voice use to help residents set up voice and adjust their mic volume and tuning. You should run the voice set-up wizard even if you only want the ability to hear others and do not wish to speak.
546** Push-to-Talk is part of the Voice feature. Push-to-Talk is ON by default, which means Resident mics are OFF by default.
547** Speech gestures for voice are included in the Library, in Gestures > Speech Gestures. These gestures need to be activated in order to work; they are off by default.
548* Streaming video support for Linux client.
549
550Changes:
551* Shortcut keys for menu items in the Client & Server menus are now disabled if the menus are hidden.
552* Text from objects can be muted.
553
554Bug fixes:
555* VWR-1797: Remove mention of 'Live Help' from Crash Logger
556* VWR-1732: Pressing Enter, with multiple inventory objects selected, crashes viewer
557* VWR-1729: indra/lscript/lscript_compile/indra.l: avoid yyunput hack on Windows build
558* VWR-1723: Possible crash in llvopartgroup
559* VWR-1706: Minor quirk (and cleanup) in llfloater.cpp
560* VWR-1705: indra/lscript/lscript_compile/indra.y: disable compiler warning #4065 for 'switch' statements
561* VWR-1704: indra/llui/files.lst: delete llhtmlhelp.h entry
562* VWR-1698: Clean up parcel flag manipulation
563* VWR-1655: Script Warnings/errors window is hard to resize, resets size after closing tabs.
564* VWR-1646: Possible crash when login server is unavailable.
565* VWR-1626: Patch to avoid IM window from resizing when sessions open or close
566* VWR-1613: Overuse of virtual
567* VWR-1612: LLRenderPass::Pushbatch and LLViewerImage::addTextureStats tuning
568* VWR-1586: Mismatched delete in llviewerparcelmgr.cpp
569* VWR-1578: Two quirks in IM regarding 'xxxx is typing'
570* VWR-1471: Inspect (Pie menu > More > More > Inspect) shows nothing on first use when 'only select own objects' is enabled
571* VWR-1470: Buttons (IM, Teleport, Profile, ...) in friends list are disabled when opening friends list window
572* VWR-1468: LoginPacketNeverReceived dialog text is incorrect
573* VWR-1462: Order of right-click menu on Inventory is confusing
574* VWR-1453: A few old-school changes for llviewerregion.cpp
575* VWR-1434: Null pointer crash when terraforming
576* VWR-1406: Unchecking 'Go Away/AFK when idle' has no effect in 1.17.2.0
577* VWR-1382: Some scripted objects are highlighted in red while pressing Alt with tools open
578* VWR-1381: libpng12.a for MacOS X is missing in 1.17.1.0 and build fails.
579* VWR-1358: Physical objects remain red if tools window is closed while holding Alt key
580* VWR-1358: Physical objects remain red if tools window is closed while holding Alt key
581* VWR-1353: Misleading variable names in LLTextEditor
582* VWR-1344: Reverse order of popups, so that new ones appear underneath existing ones rather than on top.
583* VWR-1318: Selecting Cancel while saving a snapshot to disk still triggers snapshot gesture
584* VWR-1314: Multiple selection then individual deselection of attachments broken
585* VWR-1294: Possibly threads not fully cleaned up at end of program
586* VWR-1289: On logging in, sound volume for stream is low, despite the actual setting in the music control
587* VWR-1282: Better error handling when fonts are missing
588* VWR-1270: Script error window keeps reverting to a very small size
589* VWR-1246: Mac: File menu > Snapshot to Disk lists wrong shortcut key
590* VWR-1105: Set internal limit of particle count to max value from GUI preferences.
591* VWR-1092: Disable mouse hover text on HUDs, since it always only shows the owner's name and generally gets in the way of HUD functionality.
592* VWR-727: Torn of IM windows should be minimizable (was re: VWR-233: ... resizeable and minimizable)
593* VWR-447: Allow minimized windows to be repositioned in client
594* VWR-353: Rebake command - add a keyboard shortcut and put in tools menu
595* VWR-349: Change keyboard shortcuts, because entering { [ ] } on German and some other international keyboards (AltGr 7, 8, 9, 0) triggers Rendering Features accelerators Ctrl-Alt-7, 8, 9, 0 (previously resulting in unstable viewer)
596* VWR-238: Permissions of Roles and Rights in the german version are mased up.
597* VWR-102: md5 slow
598* SVC-371: Fix the legibility and grammar/consistency of the new llOwnerSay implementation
599* SVC-193: llParticleSystem - halo of rogue particles around original particle system after 1.15 update* SVC-373: Deleting a script's code results in a non-existent file and 'missing from database' error
600* Fixed preference for showing or hiding server combo box was not preserved
601* Fixed residents with negative L$ balance can't purchase items set for sale 'Original' or 'Copy' that are being sold for L$0
602* 'Copy SLURL to clipboard' is now enabled for an avatar's current coordinates
603* Macintosh viewer now correctly opens the map and selects the destination on a SLURL request
604* Leading and trailing spaces are now automatically trimmed from parcel media URLs
605* Corrected the spacing of the yellow 'next dialog' chevron (was partially blocked by the Mute button)
606* Corrected the error message shown when adding 11th Estate Manager
607* Added CPU detection for Intel Core Duo/Solo and Intel Core 2 Duo
608* 'Set Window Size...' setting is now correctly resumed after being minimized
609* Added link to Qa wiki in the viewer bug reporter menu.
610* Updated text in Second Life Crash Logger with new support portal information
611* Corrected an issue with UI font scaling in the bug reporter window
612
613
614Release Notes for Second Life 1.18.0(6) July 11, 2007
615=====================================
616Changes:
617* Message system changes to support transport via TCP (HTTP) as well as UDP.
618** More details are available here: http://blog.secondlife.com/2006/12/21/a-big-change-youll-barely-notice/
619** And here: http://blog.secondlife.com/2007/06/25/dia-de-la-liberacion/
620* German language added to the Windows installer
621* Updated translations for German language viewer
622* Updated translations for Japanese language viewer
623* Updated translations for Korean language viewer
624* Viewer 'channel' (Release, First Look, etc) now visible at login in the lower right corner next to the version number
625
626Bug fixes:
627* Fixed SVC-286: deleted fully-permissive objects owned by others skip trash
628* Fixed SVC-251: Death teleport fails when teleporting to a home point you no longer have access to
629* Fixed MISC-273: Enrollment fee is incorrectly deducted if you belong to max. # of groups and try to join new ones
630
631
632Release Notes for Second Life 1.17.3(0) July 5, 2007
633=====================================
634Changes:
635* Added muting for permissions requests
636* Added viewer channel info to Help > About Second Life...
637
638Bug fixes:
639* SVC-21: Request for making identification of llOwnerSay messages possible
640* VWR-1418: Progressive memory consumption (leak) since 1.17.1
641* VWR-1410: Quirk in net.cpp
642* VWR-1351: Violation against the conding standard in llfloaterchat.cpp
643* VWR-1203: Avatars eyes are constantly crossing in 1.17
644* VWR-1184: [Linux VWR] Signal 7 (SIGBUS) Error (caused by libtcmalloc)
645* VWR-1147: A patch set is provided to add an optional 'Confirm Exit' pop-up window for most user client exit methods. Prevents the 'Accidental Quit'.
646* VWR-605: Include the SL date & day with the time
647* VWR-561: Blurry arrows in camera control and other graphics issues
648* VWR-53: Inconsistency in order of AV texture layer between the upper and lower body
649* Fixed Top Scripts window not refreshing when button is pressed while Top Colliders list is still open
650* Fixed odd text overlay on About Land > General tab
651* Fixed format of llOwnerSay chat text
652
653
654Release Notes for Second Life 1.17.2(0) June 27, 2007
655=====================================
656Bug fixes:
657* VWR-1369: Creating, re-rezzing, then editing an object results in a viewer crash
658
659
660Release Notes for Second Life 1.17.1(0) June 25, 2007
661=====================================
662Changes:
663* VWR-650: Make 'Give money' permissions look different than the other permissions
664* VWR-427: Added new menu item: Tools > Edit Linked Parts
665* VWR-79: PNG image support submission
666* Sculpties now include a one-time explanation the first time a sculptie is created.
667* Client and Server menus now have a one-time dialog box to explain what they are.
668* 'Skip 'Show next time' Dialogs...' button added to Preferences > Popups tab to skip all one time dialog boxes.
669* Added Japanese and German language installers (Windows only)
670* The version of Mozilla used in the client is updated to 1.8.0.12
671* F1 help now opens an external browser to the Second Life support web site.
672* F1 Help will now open an external browser to language specific support websites for Japanese, Korean and Portuguese based on client's language.
673* Delay added to folder opening while dragging items in an inventory window with a vertical scroll bar.
674* Default messages for postcards are replaced when adding text.
675* In the Inventory window the Filter menu is consolidated into the File menu.
676* The sculptie texture picker UI has changed to differentiate it from the surface texture picker.
677
678LSL changes:
679* Added support for alternate sculptie edge stitching.
680* VWR-68: LSL constant expression folding and proper constant parsing
681
682Bug fixes:
683* Fixed MISC-217: Accounts with negative L$ balance can't buy L$0 freebie
684* Fixed SVC-306: Objects are visible at <0,0,0> (sometimes before moving to their correct position)
685* Fixed SVC-225: Searching for Classifieds with blank field results no results
686* Fixed VWR-1339: Asset upload fails for certain saves, eg scripts and appearance
687* Fixed VWR-1296: Minor memory leak in lltexturecache.cpp
688* Fixed VWR-1223: Camera Controls keyboard shortcuts broke
689* Fixed VWR-1221: Possible crash in llfloaterland.cpp / line 1556
690* Fixed VWR-1217: Built-in avatar animations stop suddenly, rather than fading out. (jerky head movement)
691* Fixed VWR-1203: Avatars eyes are constantly crossing in 1.17
692* Fixed VWR-1170: LLMuteList::loadFromFile() improperly parses the mute list returned from the service
693* Fixed VWR-1140: About Land floater is not resizable, ban and access lists too small
694* Fixed VWR-1049: Trivial sizeof() miscalculatuion results in incomplete copying of CPU Brand ID string in CProcessor::AnalyzeAMDProcessor()
695* Fixed VWR-1044: Unchecking 'Go Away/AFK When Idle' doesn't work when manually setting Away status
696* Fixed VWR-944: Boost inclusion is inconsistent
697* Fixed VWR-941: Reading length data for a four-byte Variable template message misstores the length
698* Fixed VWR-938: ELFIO is technically optional, make this easy to capitalise on
699* Fixed VWR-876: sculpt texture map does not load or low priority when the texture itself is not visible in viewer frame or not cached
700* Fixed VWR-873: Dead members 'eVertexDataMask;' in various objects
701* Fixed VWR-856: llvfs.cpp: possible loss of memory blocks in LLVFS:audit()
702* Fixed VWR-822: 'Create new...' clothing buttons don't auto-wear items
703* Fixed VWR-746: Incorrect menu item referred to when member of maximum number of groups and a group invite is received
704* Fixed VWR-660: When turning off Flexible Object rendering, flexible objects become permanently invisible
705* Fixed VWR-652: A harmless compiler warning in indra.l.cpp
706* Fixed VWR-606: Some source files (llprocessor.cpp and llsdserialize_tut.cpp) contain non-ASCII characters
707* Fixed VWR-597: Abuse report tool should autofill abuser name when reporting an object
708* Fixed VWR-560: Crash in llscrolllistctl.cpp when sorting scroll list
709* Fixed VWR-459: Unicode supplementary characters typed in from keybaord are not handled properly on Windows (and potentially on Linux)
710* Fixed VWR-446: Automatically start renaming new user-created assets and automatically select new user-created folders
711* Fixed VWR-383: Chat logs do not have timestamps
712* Fixed VWR-364: Viewer memory leak
713* Fixed VWR-287: Inconsistent behaviour between agent_slide_left / agent_slide_right, and the rest of the movement functions.
714* Fixed VWR-251: Keystrokes are eaten by IME when no text input is possible, on Windows using Japanese
715* Fixed VWR-248: Inexplicable folding of Avatars such that they are walking around with their heads up their arses
716* Fixed VWR-247: Viewer generates undesired dialog when IM comes in while minimized
717* Fixed VWR-227: If a Find/Search returns no results, the results list is still focused and an attempt is made to select the first result anyway.
718* Fixed VWR-218: SConstruct script makes many assumptions that are invalid outside LL
719* Fixed VWR-213: Calling DestroyWindow with NULL window handle (win32 version)
720* Fixed VWR-207: Textures become increasingly blurry over time on systems with > ~2GB RAM
721* Fixed VWR-143: Compiler errors in llwebbrowserctrl.h
722* Fixed VWR-132: seg fault in lldrawpool.cpp
723* Fixed VWR-119: Zero missing in Sub-unit snap grid. for small fraction like 1/16 and 1/32
724* Fixed VWR-101: Get rid of 'Return All'
725* Fixed Inventory's 'Recent Items' tab settings not persisting across logins
726* Fixed line breaks showing up as * in various windows.
727
728Release Notes for Second Life 1.17.0(12) June 13, 2007
729=====================================
730Changes:
731* Inventory transfers
732** Auto-accept inventory and auto-preview texture/notecard/landmark are now separate preferences.
733** Viewing an embedded notecard or landmark no longer adds it to your inventory.
734** Muting the sender of notecards, inventory, textures, etc., now removes all blue pop-ups in the upper right corner from that sender.
735** Offline inventory transfers and group invites now include the name of the item or group, along with group role, in the email.
736* Added 'Clear Browser Cache' button to web prefs.
737** This only affects the embedded browser, not any other browsers installed on your system
738* Embedded Mozilla browser now supports cookies.
739* Preliminary support added to the Windows installer for selecting a language (English, Korean)
740* Closing a changed Classified now confirms changes
741
742Bug fixes:
743* Fixed a client crash while in startup
744* Fixed group chat reopening with one message and an error after closing group chat
745* Fixed 'Stop All Animations' when stuck in an animation after teleporting
746* Fixed group messages to allow the use of UTF8 characters
747* Fixed 'Show Owners' from automatically turning on again
748* Fixed an issue with 'Release Controls' when an object is taken and rerezed.
749* Fixed an issue with texture picker not displaying any results unless inventory had been shown
750* Fixed chat history to not show muted resident chat
751* Fixed 'Mute Resident' button, now opens the user picker
752* Fixed group ability settings for group owners in German language viewer
753* Fixed embedded Mozilla browser to work with HTTPS sites (affected Windows only)
754* Notecards no longer display the 'Keep' and 'Discard' buttons when opened from inventory
755* Acquired date is now set for items dragged from the contents of a container prim
756* VWR-1040: crash when opening several gestures quickly
757* VWR-966: Minor memory leak in llfloaterpreferences.cpp and a tiny leak in llstatup.cpp
758* VWR-908: Various memory leaks in the group dialog
759* VWR-871: More bad f00d: Two minor (or inconsequential) misses of initializing object members
760* VWR-870: Memory violation through uninitialized variable (invisible or unrendered flexis)
761* VWR-869: Possible hard-loop (endless, viewer-hang) in script editor
762* VWR-827: Toruses are borked after making/editing sculpted prims
763* VWR-823: Two unintialized variables in lltexturefetch.cpp
764* VWR-822: 'Create new...' clothing buttons don't auto-wear items
765* VWR-810: Destructor forgets to delete mFloaterContros member in llui/llview.cpp
766* VWR-809: Destructor fails to clean up global menus in llviewermenu.cpp
767* VWR-808: Incorrect cleanup in message.cpp
768* VWR-807: Forgets to delete gToolInspect in lltoolmgr.cpp
769* VWR-804: Quirk in llviewerwindow.cpp
770* VWR-805: LLCurl not properly cleaned up
771* VWR-765: Cannot open embedded notecards in other notecards when Automatic preview of new notecards/textures/landmarks is off
772* VWR-409: New Feature -> UI -> Dialog -> Buy Copy/Contents -> Default Action -> Cancel
773* VWR-682: Text Editors should try to preserve X cursor position
774* VWR-671: Line editor history for recalling previously typed lines
775* VWR-648: Texture picker should highlight the texture in the swatch
776* VWR-412: Object editing arrows hidden but clickable on objects you can't edit.
777* VWR-364: Viewer memory leak
778
779Release Notes for Second Life 1.16.0(5) May 23, 2007
780=====================================
781New Features:
782* Sculpted Prims
783** Sculpted Prims are a new primitive type that uses a texture to control its 3D shape
784** See http://wiki.secondlife.com/wiki/Sculpted_Prims for FAQ and detailed information
785* Add 'Mute' button to block unwanted notecards, landmarks, and textures
786
787Changes:
788* Improved muting of particle systems
789
790LSL Changes:
791* New function: llRegionSay()
792** Allows object to communicate region-wide
793** Does not allow communication on channel 0
794** This is intended to reduce simulator load by eliminating the need for relay objects
795
796Bug fixes:
797* Text for several alert messages has been updated
798* Fixed positioning of maximize button when minimizing both script and lsl window
799* Fixed positioning of LSL help window after minimizing/maximizing main script window
800* Fixed group chat IM showing sender as the only participant until someone responds
801* Fixed group chat IM reopening with an error when sending a message after user closes group chat
802* Fixed '... has left the session' when leaving group chat after talking
803* Fixed failed email when no subject is included
804* Fixed object loss occuring when taking an item
805* VWR-657: Beta -> Linux -> Startup -> Crash
806
807Release Notes for Second Life 1.15.3(0) May 22, 2007 (Server-Only Update)
808=====================================
809Bug fixes:
810* SVC-213: llGiveInventoryList not creating a folder to place items
811
812
813Release Notes for Second Life 1.15.2(0) May 18, 2007 (Server-Only Update)
814=====================================
815Changes:
816* IMs and emails received when inventory is given now include the item name, owner, position and SLURL.
817** This is useful to track down spamming objects.
818
819Bug fixes:
820* SVC-85: Friends online in the grid does not reflect who is actually online
821* SVC-138: Land sales search sorting doesn't work
822* MISC-37: Continued breakdowns in group notice popup functionality
823* Teleporting to Help Island no longer allows you to teleport back to Orientation Island
824* No-copy objects that fail to rez now reappear in inventory (may require a relog)
825* Scripted attachments work again correctly on group land
826* Fixed a bug where email sent by script with an empty subject would fail (valid per RFC2822)
827* Fixed several server-side memory leaks, and changed to new memory allocation library
828* Fixed several server-side crashes
829
830
831Release Notes for Second Life 1.15.1(3) May 14, 2007
832=====================================
833Changes:
834* Soft shadow for text is now an option available via the text style flag
835* Expanded Tools->Report Bug to include additional information and links
836* Alt-Left and Alt-Right switch between tabs in IM
837* Ctrl-W closes one tab in IM window (Ctrl-T closes IM window)
838* Ctrl-Shift-W closes all windows
839* Inventory system folders may be sorted to top
840* Busy mode declines notecards and textures and silently sends all other transfers to Inventory
841* L$ balance displays 'Loading...' (instead of a blank) when first checking your balance
842* Minimap is enabled when Second Life runs for the first time
843* Texture transfers are limited to 5 items per 10 seconds
844
845Bug fixes:
846* Fixed windows maximizing when opening other windows
847* Fixed floating text inworld (original hard shadow restored)
848* Fixed LSL Help window restoring when clicking on script editor
849* Fixed LSL Wiki Help window forgetting its size
850* Fixed Ctrl-W closing the floater instead of one IM panel
851* Fixed a client crash when deleting an object from inventory
852* Fixed avatar eyeball shader
853* Fixed closing an inventory folder while selection is inside moves selection to 'My Inventory'
854* Fixed nametag text leaving background box while moving
855* Fixed graphics cards with unlisted memory sizes defaulting to 16MB
856* Fixed right-clicking on self failing if you are wearing a HUD
857* Fixed llSetText appearance on HUD attachments
858* Fixed Alt-WASD behavior when sitting
859* Fixed first digit in Pay dialog cannot be erased
860* Fixed reference ruler measuring to region edge instead of reference object
861* Fixed permissions on group-owned object's script when group member clicks New Script
862* Improved detection of Linux video memory
863* VWR-38: Magic Opening Folders
864* VWR-42: llSetSoundQueueing() is broken
865* VWR-71: Tabulating and moving by word (Ctrl-left, ctrl-right) off-by-one errors in scripting editor.
866* VWR-136: Seg fault in llpolymorph.cpp
867* VWR-148: llListStatistics tooltip wrong
868* VWR-154: typo in en-US/floater_mute.xml 'Resident' not 'resident'
869* VWR-155: typo in en-US/floater_mute.xml 'Resident' not 'Person'
870* VWR-165: First Digit in the 'Pay' dialog does not erase without entering more digits
871* VWR-166: moving of open folders in the inventory to an other indentation level leaves the contents on the previous level
872* VWR-192: textures in windows only stretches horizontally
873* VWR-326: Allow a 'limit texture recieving' in the client
874* VWR-346: Selecting Client>Character>Flush Animations immediately crashes 1.14.0.x
875* VWR-379: Fix shell scripts to use bash and not sh when appropriate.
876* VWR-414: 8-bit character in llagent.cpp comment confuses Japanese text editors
877* VWR-415: Definitions of WM_MOUSEWHEEL and WHEEL_DELTA need conditionals (on Windows)
878* VWR-429: add scons option making FMOD optional
879
880Release Notes for Second Life 1.15.0(2) April 25, 2007
881=====================================
882Changes:
883* Improved Help menu with links to additional resources
884* 'Add as Friend' button added to Profile
885* Added buttons to the IM window to scroll to the first and last tabs
886* Added parcel flag for Mature Content
887** Parcel searches use the parcel rating instead of the region rating
888* Share With Group checkbox is cleared after object is deeded to group
889* Groups list window taller and resizable
890* Residents are now notified if they are the only ones present in a group IM or conference session
891* Rating system removed from Profile
892* Group Search improvements
893** Searches are done against the full text of the group, including charter
894** Search index is updated daily; new groups may take 24 hours to appear
895** Clicking on a group found via search still shows up-to-date information
896* Alpha textures sorted more accurately
897** Example: the hollow inner surface of a sphere will no longer draw on top of the outer surface
898** This change may cause content using alpha textures to appear differently
899* Larger debug beacons (View > Beacon)
900** You can now set the beacon size in Preferences -> Adv. Graphics (Range is 1-127)
901
902LSL changes:
903* LSL Wiki browser embedded in the viewer
904** When editing a script, select a keyword, then select Help > LSL Wiki Help. in the Script window
905* New function: string llStringTrim(string src, integer trim_type)
906** STRING_TRIM_HEAD: trim all leading spaces in src
907** STRING_TRIM_TAIL: trim all trailing spaces in src
908** STRING_TRIM: trim all leading and trailing spaces in src
909
910Notes:
911* LSL Wiki is not editable from within the Second Life viewer
912* PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY and PARCEL_FLAG_ALLOW_GROUP_OBJECT_ENTRY flags
913 were added to llGetParcelFlags()/llSetParcelFlags in a previous release, but not
914 documented. These will now appear correctly in the script editor.
915* On systems with ATI Mobility X300/X600/X700 graphics cards, when upgrading from a previous
916 version of Second Life, sound may be disabled on the first run of the viewer. It
917 should function correctly on the second run.
918* HUD objects may temporarily appear in the wrong position following a region crossing.
919
920Bug fixes:
921* Removed First Land filter in Search
922* Improved performance of inventory operations
923* Improved recognition of some processor types
924* Fixed About Land reporting the wrong parcel when teleporting between estates
925* Fixed a source of stalled Pending Uploads
926* Fixed Texture Repeats Per Face rounding incorrectly when tabbing between fields
927* Fixed objects appearing in two places while moving in editor
928* Fixed a client crash with some mobile ATI chipsets
929* Fixed button images when first running SL
930* Fixed selecting group roles not updating UI
931* Fixed avatar names not appearing when Show Avatar Names Temporarily is enabled
932* Fixed New IM showing (nobody) for group names
933* Fixed task email failing between regions
934* Fixed broken embedded landmarks when editing their notecard
935* Fixed a case where you could not modify your modifiable object
936* Fixed attachments disappearing a minute after teleport
937* Fixed ability to set Mature on parcels in non-Mature regions
938* Fixed saving changes to notecards in contents
939* Fixed HUD positioning guide misaligning when UI Size changed
940* Fixed a case where no-copy objects could be lost during rez
941* Fixed textures in windows only stretching horizontally
942* Fixed texture animation rotation changing when Flip is enabled
943* Fixed erroneous 'User has left this session' messages
944* Fixed display bug with a cube with Path Cut Begin/End set to .150
945* Fixed disappearing alpha HUD prims
946* Fixed menu bar processing keystrokes when moused over
947* Fixed detached IM windows not resizing
948* Fixed animated textures when using llSetColor, llSetLinkColor, or PRIM_PROPERTIES
949* Fixed HUD object movement when logging in at a no-script area
950* Fixed HUD objects not loading new textures
951* Fixed HUD objects becoming invisible the first time they are attached from inworld
952* Fixed 'IM All Contacts In Folder'
953* Fixed a viewer crash in the name cache
954* Fixed Undo resetting position only on root prim
955* Fixed Texture Picker search not showing results
956* Fixed IM window reverting to default size
957* Fixed overriding stand-up animation freezing you in place
958* Fixed Appearance mode showing back of avatar
959* Fixed: VWR-14: Inconsistency with reading binary data in llpolymesh.cpp
960* Fixed: VWR-45: trivial patch, initialize variables
961* Fixed: VWR-94: Buffer overflow in decoding image.
962* Fixed: VWR-97: Several iterator bugs in llmessage
963* Fixed: VWR-100: Messages form OpenJPEG only in debug mode
964* Fixed: VWR-109: Characters from fallback fonts don't scale properly
965* Fixed: VWR-123: OpenJPEG meta decode, Second Life patches
966* Fixed: VWR-130: llimagejpeg.h remove jinclude.h
967* Fixed: VWR-144: HUD and possibly other alpha touch area problems
968* Fixed: VWR-188: Patch: Refactor options handling in SConstruct
969* Fixed: VWR-198: Missing line of code in source on FFSAVE_WAV
970* Fixed: VWR-200: money(); events in a linked sets fail to trigger
971* Fixed: VWR-261: lldir_mac.cpp @brief description is wrong
972
973
974Release Notes for Second Life 1.14.0(1) March 30, 2007
975=====================================
976Fixes:
977* Fixed: When going to recent items tab in inventory, inventory contents do not download
978* Fixed: Crash in llvlcomposition
979* Fixed: VWR-200: money(); events in a linked sets fail to trigger
980* Fixed: VWR-109: Characters from fallback fonts don't scale properly
981* Fixed: VWR-100: Messages form OpenJPEG only in debug mode
982* Fixed: VWR-97: Several iterator bugs in llmessage
983* Fixed: VWR-45: trivial patch, initialize variables
984* Fixed: VWR-14: Inconsistancy with reading binary data in llpolymesh.cpp
985
986Release Notes for Second Life 1.14.0(0) March 27, 2007
987=====================================
988New feature:
989* Linux client features embedded Mozilla
990
991Changes:
992* Texture Pipeline Architecture
993** Significant redesign of texture pipeline
994** Improved texture caching
995** Unlimited texture cache size
996** Cache location can be changed
997** Textures from last scene are pre fetched, improving loading speed of inital scene
998* Render Pipeline Architecture
999** Significant changes to render pipeline
1000** Introduction of Vertex Buffer Objects for improved stability
1001** Better batching of geometry for improved render performance (on some systems)
1002** Alpha sorting changes to improve performance
1003** Modified texture animations to use hardware acceleration
1004** Light objects now affect themselves.
1005*** NOTE: This may cause some objects that are lights to 'wash out' requiring some content to be adjusted
1006* Setting an object for sale enables 'Buy Copy' by default instead of 'Buy Original'
1007* User inworld money transaction history floater removed
1008** Transaction history can be viewed via secondlife.com
1009* Moving your avatar no longer deselects objects in build mode automatically
1010* Removed old reference to Announcements forum in a login error message
1011* Added Port setting in preferences to specify UDP port (ala -port argument)
1012* Added setting to change cache location
1013* Added 'Empty Lost and Found' option
1014* Added 'Use Custom Port' option to Preferences to specify network port
1015* Objects set for sale are Buy Copy by default (instead of Buy Original)
1016* Increased Classified's maximum L$ payable from 99999 to 999999
1017* Added '?' button next to Partner field explaining partnering
1018** Added display that shows intersection of prims with translation plane when building.
1019
1020LSL changes:
1021* New script commands
1022** void llSetLinkPrimitiveParams( integer linknumber, list rules )
1023** void llSetLinkTexture( integer linknumber, string texture, integer face )
1024* More documentation is available using Help > Scripting Guide...
1025* The following 4 particle commands have been deprecated for some time, and are now approximated by llParticleSystem
1026** llMakeExplosion http://wiki.secondlife.com/wiki/LlMakeExplosion
1027** llMakeFire http://wiki.secondlife.com/wiki/LlMakeFire
1028** llMakeFountain http://wiki.secondlife.com/wiki/LlMakeFountain
1029** llMakeSmoke http://wiki.secondlife.com/wiki/LlMakeSmoke
1030
1031Bug fixes:
1032* Fixed texturing all sides of multi-prim object failing under high latency
1033* Fixed sitting avatar standing when clothes are dragged onto the avatar
1034* Fixed llGiveInventoryList spamming owner with messages
1035* Fixed group members ability to set home to land only set to group (not deeded)
1036* Fixed objects from library being placed back in Library after editing
1037* Fixed loss of no-copy textures when applied to a prim
1038* Fixed delivery of Email to IM messages greater than 998 characters
1039* Fixed attachments leaving inventory after detaching
1040* Fixed Alt-menu taking focus after Alt-zooming
1041* Fixed menus not closing when something else is clicked
1042* Fixed Friends list not showing online friends on login if 'Can see my online status' is disabled
1043* Fixed World -> Buy Land menu failures
1044* Fixed LSL email converting numbers in the email body to 0
1045* Fixed focus issues when closing a window
1046* Fixed closed status of folders when opened in inventory
1047* Fixed a method of sitting on other avatars
1048* Fixed double-clicking on TOS switching to a different text display
1049* Fixed rezzed objects appearing at <0,0,0> if you have create rights but do not wear your title
1050* Fixed Offer Teleport appearing in your own profile
1051* Fixed Ctrl-P failing to open Preferences if Inventory has focus
1052* Fixed ability to set sale info on no-modify items
1053* Fixed ability to further limit permissions on items if they are already no-modify
1054* Fixed Object Entry rules also preventing rezzing from inventory
1055* Fixed single-click behavior for objects
1056* Fixed object selection while crossing region boundary
1057* Fixed textures leaving their window when resized
1058* Fixed single items being created in tabbed windows
1059* Fixed menus not closing when clicked a second time
1060* Fixed resizing of landmarks
1061* Fixed textures being applied to all sides when using Select Texture
1062* Fixed objects not deleting if they contain no-copy items
1063* Fixed Pay dialog while in busy mode
1064* Fixed loss of no-copy objects when using llGiveInventory() on a busy avatar
1065* Fixed script editor not regaining focus when function dropdown is used
1066* Fixed opening multiple inventory items not using tabbed windows
1067* Fixed a client crash when opening multiple inventory items (including a script)
1068* Fixed notecards opened in a tabbed window extending outside the preview window
1069* Fixed blurry web browser widgets when UI Scale is not 1.0
1070* Fixed focus not moving to next window when using Ctrl-W on detached IMs or Appearance
1071* Fixed Ctrl-W not closing snapshot floater
1072* Fixed widget overlap in group proposal tab of a searched group
1073* Fixed a client crash when deleting objects
1074* Fixed Capslock key detection
1075* Fixed context menu for items in an object
1076* Fixed avatar animations not changing when editing an attachment
1077* Fixed object counts in About Land changing when object loses focus
1078* Fixed ESC key behavior (closing tools and resetting camera)
1079* Fixed obscured status bar when debug is off
1080* Fixed client crash in People Search with Picks tab
1081* Fixed incorrect prim count in Buy dialog when using prim multipliers
1082* Fixed build button on toolbar remaining disabled when Create Objects is set to group
1083* Fixed a client crash while taking an object
1084* Fixed a script runtime error when using a list inside a while or do-while loop
1085* Fixed renaming a no-copy clothing item failing during Make New Outfit
1086* Fixed objects failing to attach when selected from a distance
1087* Fixed rare texture swapping on Mac
1088* Fixed non-Latin characters such as Japanese Kanji appearing as small square dots
1089* Fixed textures in the distance not reducing priority
1090* Avatars out of view are no longer animated
1091
1092Release Notes for Second Life 1.13.4(59510) March 22, 2007
1093=====================================
1094Changes:
1095* Legacy particle system replacements
1096* 'Share with Group' checkbox now cleared when deeding objects
1097
1098Bugs Fixed:
1099* Fixed llParticleSystem( [] ) not shutting down reliably
1100* Fixed SVC-48: llSetScriptState is failing in some tasks
1101* Fixed SVC-47: llSetPrimitiveParameters with multiple setposition calls capped at 10m, affecting home made TPs
1102* Fixed SVC-15: Random Prim Drift
1103
1104Release Notes for Second Life 1.13.4(59329) March 16, 2007
1105=====================================
1106Changes:
1107* Replaced deprecated legacy particle systems (llMakeExplosion, llMakeFire, llMakeSmoke, llMakeFountain)
1108 with llparticleSystem approximations
1109
1110Release Notes for Second Life 1.13.4(8) March 12, 2007
1111=====================================
1112Bug fixes:
1113* Fixed picks not appearing with older viewer
1114* Fixed money() event failing to fire in a linked set
1115
1116Release Notes for Second Life 1.13.4(7) March 9, 2007
1117=====================================
1118Changes:
1119* World -> Account History opens L$ transaction history instead of US$ transaction history
1120
1121Bug fixes:
1122* Fixed a simulator crash with llParcelDetails
1123* Fixed flex objects vanishing when LOD changes
1124* Fixed flex objects not updating when modified
1125* Fixed flex objects disappearing when linked
1126* Fixed repositioning of HUD attachments when viewer is resized
1127* Fixed objects copied to/from notecards stating they are missing from database
1128
1129Release Notes for Second Life 1.13.4(6) March 8, 2007
1130=====================================
1131Changes:
1132* Light emiting objects are now affected by their own light
1133
1134Fixes:
1135* Offline IMs now appear upon login
1136* Fixed autoupdate on Mac viewers
1137* Fixed Capslock key detection
1138* Fixed llSetLinkPrimitiveParams to move specified child prim
1139* Fixed linux client mozilla runtime
1140* Fixed texture animations to ignore texture 'Flip' flags
1141* Fixed animated textures with texture offset enabled
1142* Fixed attachments becoming disembodied when attaching an object
1143* Fixed a viewer crash that occurs when opening a script in a prim
1144* Fixed classifieds being deleted instead of auto-renewing
1145* Fixed jerky/stuttering physics based movement for hover vehicles
1146* Fix for paying child prim not triggering money event.
1147
1148
1149Release Notes for Second Life 1.13.3(58877) March 6, 2007
1150=====================================
1151Fixes:
1152* Fix for animated textures ignoring texture offset.
1153* Fix for animated textures not ignoring flip flags.
1154* Fix for light emitting objects not being lit by their own light.
1155* Fix for Textures not being applied to the entire prim
1156* Fix for Viewer occasionally getting stuck in drag select mode
1157* Fix for Client crashes when deleting objects
1158* Fix for Pay dialog is corrupted when attempting to pay while in busy mode
1159* Fix for Not able to delete objects which contain no copy items
1160
1161
1162Release Notes for Second Life 1.13.4(5) March 6, 2007
1163=====================================
1164Bug fixes:
1165* Fixed 'Select Texture' applying changes to all sides
1166* Fixed textures resizing outside their window
1167* Fixed object rezzing being affected by Object Entry rules instead of Create Object rules
1168* Fixed drag select mode sticking after mouse button release
1169* Fixed a client crash when viewing objects
1170* Fixed content icon for sounds and animations added to an object
1171* Fixed texture request for textures quickly cycling between visible and not visible
1172* Fixed several failure cases for offline IM-to-email
1173* Fixed retrieval of group member list
1174* Fixed landmark resizing after tear-off
1175* Fixed ability to delete objects containing no-copy items
1176* Fixed single items being created in tabbed window
1177
1178
1179Release Notes for Second Life 1.13.4(4) February 28, 2007
1180=====================================
1181Changes:
1182* Moving your avatar no longer deselects objects in build mode automatically
1183
1184Bug fixes:
1185* Fixed edit crosshairs moving while crossing region boundary
1186* Fixed text entry in Mac/Linux embedded browser
1187
1188Release Notes for Second Life 1.13.4(3) February 26, 2007
1189=====================================
1190Bug fixes:
1191* Fixed single-click failure for objects
1192* Fixed status bar obscured when debug is off
1193* Fixed escape key behavior
1194* Fixed strange object counts in About Land when no parcel selected
1195* Fixed avatar animations when editing an attached object
1196* Fixed Offer Teleport appearing in your own profile
1197* Fixed incorrect date display in group notices
1198
1199Release Notes for Second Life 1.13.4(2) February 26, 2007
1200=====================================
1201Bug fixes:
1202* Clicking a menu a second time closes the menu
1203* Fixed closing a blue dialog closes all dialogs
1204* Fixed retrieval of archived group proposals
1205* Fixed Ctrl-P shortcut failing when inventory has focus
1206* Fixed objects using llGiveInventoryList spamming owner when recipient is Busy
1207* Fixed no copy objects disappearing when given via llGiveInventory to a Busy avatar
1208
1209Release Notes for Second Life 1.13.4(1) February 21, 2007
1210=====================================
1211Changes:
1212* User inworld money transaction history floater removed
1213** Transaction history can be viewed via secondlife.com
1214* Added 'Empty Lost and Found' option
1215* Added 'Use Custom Port' option to Preferences to specify network port
1216* Objects set for sale are Buy Copy by default (instead of Buy Original)
1217* Increased Classified's maximum L$ payable from 99999 to 999999
1218* Added '?' button next to Partner field explaining partnering
1219
1220LSL changes:
1221* New script commands
1222** void llSetLinkPrimitiveParams( integer linknumber, list rules )
1223** void llSetLinkTexture( integer linknumber, string texture, integer face )
1224* More documentation is available using Help > Scripting Guide...
1225
1226Bug fixes:
1227* Fixed taken items not appearing until relog
1228* Fixed friends list abilities not being applied to friends
1229* Fixed objects failing to attach when selected from a distance
1230* Fixed replies to offline IM-to-email messages
1231* Fixed renaming a no-copy clothing item during Make New Outfit
1232* Fixed rezzed objects appearing at (0,0,0) if you have create rights, but are not wearing your title
1233* Fixed modify for gestures/notecards in a prim
1234* Fixed incorrect context menus for items in an object
1235* Fixed confirmation dialog when uploading immages, sounds, animations, or snapshots
1236* Fixed a viewer crash while taking an object
1237* Fixed a viewer crash after modifying a script inside a prim
1238* Fixed a viewer crash in People search with Picks tab
1239* Fixed a script runtime error (list inside a while/do-while loop)
1240* Fixed login screen not loading unless cache is cleared
1241* Fixed Ctrl-W not closing snapshot floater
1242* Fixed Ctrl-W not giving focus to next window
1243* Fixed Search->Places not showing public estate parcels while on private estate
1244* Fixed LSL converting numbers in body of email to 0
1245* Fixed rejection of avatars as sit targets
1246* Fixed blurry web browser widgets with UI Scale != 1.0
1247* Fixed notecards opened in tabbed windows extending outside the preview window
1248* Fixed opening multiple object inventory items not using tabbed windows
1249* Fixed accidental selection of highly transparent objects
1250* Fixed keyboard focus after selecting function dropdown in script editor
1251* Fixed Build button in toolbar disabled on land where 'Create Objects' is set to group, even when avatar is in the correct group
1252* Fixed Buy Dialog displays incorrect Prim Count when using prim multipliers
1253* Fixed folders not retaining their closed status once opened in inventory
1254* Fixed IMs of type IM_BUSY_AUTO_RESPONSE ignore mute
1255* Fixed World->Buy Land menu failures
1256* Fixed Friends list not displaying online friends on login if 'Can see my online status' is disabled
1257* Fixed menus remaining open when something else is clicked
1258* Fixed menus taking focus when leaving alt-zoom
1259* Fixed accidental loss of no-copy textures by applying them to a prim
1260* Fixed members of a group cannot set their home location when land is only set to a group and not deeded
1261* Fixed sitting avatar standing up when close are dragged onto the avatar
1262
1263Linux client fixes:
1264* Added Linux embedded Mozilla client
1265* Fixed Linux client crash on shutdown
1266
1267Release Notes for Second Life 1.13.3(2) January 30, 2007
1268=====================================
1269Changes:
1270* It is no longer possible to only search for online residents
1271* Online status is no longer indicated in the Search -> People results list
1272** The online status inside the profile shows 'Currently Online' or remains blank
1273*** Friends can see your Online status if you give permission via the Friends list
1274*** Anyone can see your Online status if 'Make my online status visible only to my Friends' is unchecked
1275
1276Release Notes for Second Life 1.13.3(58716) March 1, 2007
1277
1278Fixes:
1279* Fix for: Textures that quickly cycle between visible and not visible never getting successfully requested
1280* Fix for: Textures applied via 'Select Texture' are applied to all sides.
1281* Fix for: Object selection moves to the next sim when crossing region boundary while objects are selected
1282* Fix for: Landmarks window can be resized
1283* Fix for: Textures should remain within their window when the viewer is resized
1284* Fix for: Single items are being created in a tabbed window
1285* Fix for: 'linux mozilla embedding support should be compile-time optional'
1286
1287Beta Grid Only:
1288* Fix for: Object Entry rules block rezing of objects.
1289
1290Release Notes for Second Life 1.13.3(58603) March 1, 2007
1291
1292Changes:
1293(Note: this change was introduced several versions ago be we forgot to put this in the release notes)
1294* The following 4 particle commands have been deprecated for some time, and no longer work:
1295** llMakeExplosion http://wiki.secondlife.com/wiki/LlMakeExplosion
1296** llMakeFire http://wiki.secondlife.com/wiki/LlMakeFire
1297** llMakeFountain http://wiki.secondlife.com/wiki/LlMakeFountain
1298** llMakeSmoke http://wiki.secondlife.com/wiki/LlMakeSmoke
1299** Please use llParticleSystem (http://wiki.secondlife.com/wiki/LlParticleSystem) instead.
1300* Set the executable name back to SecondLifeFirstLook.exe (1.13.3(58537) inadvertently set it to SecondLifePreveiw.exe
1301
1302Fixes:
1303* Fixed a bug with image requests, should reduce the latency when loading uncached images
1304* Rediced frame rate spikes when spinning.
1305* Fixed bad normals on tapered geometry.
1306* Fix for bump maps not taking effect immediately.
1307* Fix for animated texture coordinates not resetting when animation stops.
1308
1309Release Notes for Second Life 1.13.3(58537) February 27, 2007
1310
1311Changes:
1312* Modified texture animations to use hardware acceleration
1313* Improved framerate when rotating in certain areas that were lagging
1314
1315From the main development branch since 1.13.3.2
1316(note: some of these were introduced in previous First Look releases)
1317
1318Changes:
1319* User inworld money transaction history floater removed
1320** Transaction history can be viewed via secondlife.com
1321* Added 'Empty Lost and Found' option
1322* Added 'Use Custom Port' option to Preferences to specify network port
1323* Objects set for sale are Buy Copy by default (instead of Buy Original)
1324* Increased Classified's maximum L$ payable from 99999 to 999999
1325* Added '?' button next to Partner field explaining partnering
1326
1327Bug fixes:
1328* Fixed single-click failure for objects
1329* Fixed status bar obscured when debug is off
1330* Fixed escape key behavior
1331* Fixed strange object counts in About Land when no parcel selected
1332* Fixed avatar animations when editing an attached object
1333* Fixed Offer Teleport appearing in your own profile
1334* Fixed incorrect date display in group notices
1335* Clicking a menu a second time closes the menu
1336* Fixed closing a blue dialog closes all dialogs
1337* Fixed retrieval of archived group proposals
1338* Fixed Ctrl-P shortcut failing when inventory has focus
1339* Fixed objects using llGiveInventoryList spamming owner when recipient is Busy
1340* Fixed no copy objects disappearing when given via llGiveInventory to a Busy avatar
1341* Fixed taken items not appearing until relog
1342* Fixed friends list abilities not being applied to friends
1343* Fixed objects failing to attach when selected from a distance
1344* Fixed replies to offline IM-to-email messages
1345* Fixed renaming a no-copy clothing item during Make New Outfit
1346* Fixed rezzed objects appearing at (0,0,0) if you have create rights, but are not wearing your title
1347* Fixed modify for gestures/notecards in a prim
1348* Fixed incorrect context menus for items in an object
1349* Fixed confirmation dialog when uploading immages, sounds, animations, or snapshots
1350* Fixed a viewer crash while taking an object
1351* Fixed a viewer crash after modifying a script inside a prim
1352* Fixed a viewer crash in People search with Picks tab
1353* Fixed a script runtime error (list inside a while/do-while loop)
1354* Fixed login screen not loading unless cache is cleared
1355* Fixed Ctrl-W not closing snapshot floater
1356* Fixed Ctrl-W not giving focus to next window
1357* Fixed Search->Places not showing public estate parcels while on private estate
1358* Fixed LSL converting numbers in body of email to 0
1359* Fixed rejection of avatars as sit targets
1360* Fixed blurry web browser widgets with UI Scale != 1.0
1361* Fixed notecards opened in tabbed windows extending outside the preview window
1362* Fixed opening multiple object inventory items not using tabbed windows
1363* Fixed accidental selection of highly transparent objects
1364* Fixed keyboard focus after selecting function dropdown in script editor
1365* Fixed Build button in toolbar disabled on land where 'Create Objects' is set to group, even when avatar is in the correct group
1366* Fixed Buy Dialog displays incorrect Prim Count when using prim multipliers
1367* Fixed folders not retaining their closed status once opened in inventory
1368* Fixed IMs of type IM_BUSY_AUTO_RESPONSE ignore mute
1369* Fixed World->Buy Land menu failures
1370* Fixed Friends list not displaying online friends on login if 'Can see my online status' is disabled
1371* Fixed menus remaining open when something else is clicked
1372* Fixed menus taking focus when leaving alt-zoom
1373* Fixed accidental loss of no-copy textures by applying them to a prim
1374* Fixed members of a group cannot set their home location when land is only set to a group and not deeded
1375* Fixed sitting avatar standing up when close are dragged onto the avatar
1376
1377Linux client fixes:
1378* Added Linux embedded Mozilla client
1379* Fixed Linux client crash on shutdown
1380
1381Release Notes for Second Life 1.13.3(58390) February 23, 2007
1382
1383Fixes:
1384* Fix for HUD objects being invisible on attach
1385* Fix for HUD objects not repositioning
1386* Fix for attachments getting left behind
1387* Fix for flexible objects not updating on modification.
1388* Fix for slow scrolling textures and tiny prims being invisible.
1389* Fix for not being able to change viewer language in firstlook
1390* Fix for Viewer crash when switching between full screen and windowes with multiple threads
1391* Fix for additional texture bandwidth usage in First look
1392* Fix for low detail terrain textures failing to load
1393* Fix for picking through transparent objects.
1394* Fix for Lighting turning bright orange or red intermittantly in rendering pipeline focus preview.
1395* Fix for dismissing one blue dialogs dismisses all blue dialogs
1396* Fix for Avatar not changing anmations while editing an attached object
1397* Fix for Object counts in About Land change when floater loses focus
1398* Fix for clicking a menu a second time not closing it
1399* Fix for First Look viewer interacting poorly with Norton Antivirus (Note: Unless you tell Norton Anti Virus to exclude the Second Life cache directory, it will delay texture loading, but should no longer affect frame rate)
1400* Fix for crash on 945G when editing objects.
1401
1402Release Notes for Second Life 1.13.3(58185) February 20, 2007
1403
1404Changes:
1405* Fixed a texture prioritization bug
1406* Sped up texture cache maintenance on startup
1407
1408Bug fixes:
1409* Fixed accidental loss of no-copy texture when applied to a prim
1410* Fixed incorrect context menu for items inside an object
1411* Fixed Linux client crash on startup
1412* Fixed Ctrl-W failing to give focus to the next window
1413* Fixed renaming no-copy object during Make New Outfit
1414* Fixed group members cannot set home when land is Set to group but not deeded
1415* Lost and Found now has an Empty folder option
1416
1417Release Notes for Second Life 1.13.3(58100) February 16, 2007
1418
1419New feature:
1420* Linux client features embedded Mozilla
1421
1422Changes:
1423* Texture Pipeline Architecture
1424** Significant redesign of texture pipeline
1425** Improved texture caching
1426** Unlimited texture cache size
1427** Texture cache can be relocated
1428* Render Pipeline Architecture
1429** Significant changes to render pipeline
1430** Introduction of Vertex Buffer Objects for improved stability
1431** Better batching of geometry for improved render performance (on some systems)
1432** Alpha sorting changes to improve performance
1433* Added display that shows intersection of prims with translation plane when building.
1434* Objects set for sale default to 'Buy Copy' instead of 'Buy Original'
1435
1436Bug fixes:
1437* Fixed a viewer crash when taking an object
1438* Fixed viewer not loading after logout if cache is not cleared
1439* Closing window passes focus to the next window
1440* Fixed blurry web browser widgets
1441* Fixed notecards in tabbd window extending outside the preview window
1442* Fixed web browser widgets blurred when UI scale != 1.0
1443* Updated link to Help -> Scripting Wiki
1444* Fixed viewer crash when opening a script at the same time as other inventory objects
1445* Fixed Build not enabling for group members on land where only group members can build
1446* Fixed World -> Buy Land menu failures
1447* Fixed menus not closing when other things are clicked
1448* Fixed objects rezed from Library, edited, and taken to inventory being placed in Library
1449
1450
1451Release Notes for Second Life 1.13.3(58018) February 14, 2007
1452
1453Changes:
1454* Removed particle throttling; while a performance win in some areas, caused too many bad artifacts
1455
1456Fixes:
1457* VWR-108 Fix for out of bounds error in avatar vertex shader attribute array.
1458* Fix for toggling selection beam
1459* Fix for LOD issues with small objects.
1460* Fix for planar guide grid swimming around in local grid mode.
1461* Fxed Texture priorities when turning around in place
1462
1463Release Notes for Second Life 1.13.3(57947) February 13, 2007
1464
1465Changes:
1466Significant changes to texture prioritization
1467
1468Fixes:
1469Fix for object flicker.
1470Fix for HUD objects not moving properly when viewer is resized.
1471Fix for scale handles not updating on mouse drag.
1472Fix for undo not working.
1473Fix for dark foot shadows.
1474Fix for tree picking alpha threshold too low.
1475Fix for stars staying out during the day.
1476
1477Release Notes for Second Life 1.13.3(57876) February 9, 2006
1478
1479Changes:
1480Improved LOD and alpha sorting
1481Improved edits reverting with linked objects
1482
1483Fixes:
1484* Fixed a few crashes
1485* 'Clear Cache' was failing if the cache location was on a changed
1486* 'Clear Cache' was not deleting the texture cache on OSX
1487* Some Textures were never caching correctly
1488
1489Release Notes for Second Life 1.13.3(57837) February 8, 2006
1490
1491Fixes:
1492* Fixed a major issue with texture requests where textures that first appeard behind you were not getting requested until you moved closer or zoomed in on them
1493* Fixed a bug where 'skip this message' settings were not being remembered
1494* Fixed several particle bugs, including some OSX specifix ones
1495* Fixed several crash bugs
1496
1497Release Notes for Second Life 1.13.3(57787) February 7, 2006
1498
1499Notes:
1500* This release will clear the cache on startup to eliminate potentially corrupt caches
1501Changes:
1502* Reduced the frequency of drag-edit updates to reduce the likelihood of changes reverting due to missed updates
1503Fixes:
1504* Fixed a bug where small flexi objects were sometimes stuck floating around an avatar
1505* Fixed a significant memory leak
1506* Fixed some issues with the texture cache
1507* Fixed a bug where textures that were partially mapped to objects were not rezing
1508* Fixed several crash bugs
1509* Wind volume slider now takes effect immediately
1510
1511Release Notes for Second Life 1.13.3(57679) February 5, 2006
1512Fixes:
1513* Fix: Animating textures (using llSetTextureAnim) do not update their pixel area
1514* Fix for disappearing hud objects.
1515* Fix for yellow avatars on some ATI cards.
1516* Fix for flexi LOD issues
1517* Fix for stars visible with 'Force Sun'
1518* Several crash bugs fixed
1519Fixes not specific to 'First Look'
1520* Fix for library objects returning to library after being taken from world
1521* Added help button for partner info in profile panel
1522* Added inventory cache verification to reduce bugs due to cache corruption
1523
1524Release Notes for Second Life 1.13.2(57573) February 1, 2006
1525
1526Fixes:
1527* Fixed: Chat text fadeout bug
1528* Fixed: Yellow fog in snapshots
1529* Fixed: Hardware detection incorrect for ATI X1900 and other cards
1530* Fixed: Several crash bugs
1531* Fixed: Missing login screen
1532* Fixed: Avatar preview in image update missing
1533
1534Release Notes for Second Life 1.13.2(57463) January 30, 2006
1535
1536Changes:
1537* Cache location can be set by residents
1538* Textures from last scene are pre fetched, improving loading speed of inital speed
1539
1540Fixes:
1541* Fixed: Avatars seated on objects don't move with objects
1542* Fixed: More issues with prim selection silhouettes
1543* Fixed: HUDS with transparent textures disappear when camera goes underwater
1544* Fixed: Slowdown rendering Alpha objects
1545* Fixed: Client crashes attempting to move a HUD attachment
1546
1547Release Notes for Second Life 1.13.2(57270) January 26, 2006
1548Changes:
1549Added display that shows intersection of prims with translation plane when building.
1550Fixes:
1551* Fixed crash when changing lighting detail.
1552* Fixed silhouette highlight render bug.
1553
1554Release Notes for Second Life 1.13.2(57208) January 25, 2006
1555Changes:
1556* IMPORTANT: 'First Look' now maintains its own settings. When this version is installed, settings will all be set to default values.
1557* IMPORTANT: Uninstalling 'First Look' will no longer remove any user settings
1558* More optimizations
1559* Stability improvements
1560Fixes:
1561* Fixed bright red/orange ambient lighting at night
1562* Fixed right-clicking on avatar names
1563* Fixed LOD flicker on trees
1564* Fixed missing avatar from upload window
1565* Fixed bug with HUD attachments not appearing or rezing at the correct resolution
1566* Fixed bug wit llSetPos
1567* Fixed prim selection silhouettes
1568* Fixed white invisiprim bug
1569* Fixed smoke texture bug
1570* Fixed alpha sorting issues
1571* Fixed Highlight Transparent
1572
1573Release Notes for Second Life 1.13.2(56900) January 18, 2006
1574Changes:
1575* More framerate improvements
1576* Improved texture LOD calculation
1577* 'Enable VBO' option now defaults to on in most cases, and no longer conflicts with similar trunk version option
1578Fixes:
1579* Appearance of other avatars not changing
1580* Shiny Brightness and Darkness don't work
1581* Shiny doesn't work on black objects
1582* Textures are failing to load to 100% clarity when repeats per face is less than 1.00
1583* Low res 'cutout' images not transparent
1584
1585Release Notes for Second Life 1.13.1(56671) January 11, 2006
1586Changes:
1587* Texture Pipeline Architecture
1588** Significant redesign of texture pipeline
1589** Improved texture caching
1590** Unlimited texture cache size
1591* Render Pipeline Architecture
1592** Significant changes to render pipeline
1593** Introduction of Vertex Buffer Objects for improved stability
1594** Better batching of geometry for improved render performance (on some systems)
1595** Alpha sorting changes to improve performance
1596** Better particle system limits
1597
1598>>>>>>> .merge-right.r83893
diff --git a/linden/indra/newview/secondlife setup build dazzle.bat b/linden/indra/newview/secondlife setup build dazzle.bat
new file mode 100644
index 0000000..f09f657
--- /dev/null
+++ b/linden/indra/newview/secondlife setup build dazzle.bat
@@ -0,0 +1,4 @@
1@rem Invoke the script which preps then runs the installer.
2@rem This batch file is customized per grid.
3
4@"secondlife setup build.bat" --channel="Second Life First Look Dazzle"
diff --git a/linden/indra/newview/skins/textures/textures.xml b/linden/indra/newview/skins/textures/textures.xml
index 785d944..6e7553f 100644
--- a/linden/indra/newview/skins/textures/textures.xml
+++ b/linden/indra/newview/skins/textures/textures.xml
@@ -1,458 +1,386 @@
1<textures version = "101"> 1<textures version="101">
2 <closebox.tga value="47a8c844-cd2a-4b1a-be01-df8b1612fe5d"/> 2 <sm_rounded_corners_simple.tga>
3 <close_in_blue.tga value="e5821134-23c0-4bd0-af06-7fa95b9fb01a"/> 3 <scale_rect left="4" top="4" bottom="4" right="4"/>
4 <tearoffbox.tga value="74e1a96f-4833-a24d-a1bb-1bce1468b0e7"/> 4 </sm_rounded_corners_simple.tga>
5 <tearoff_pressed.tga value="d2524c13-4ba6-af7c-e305-8ac6cc18d86a"/>
6 <resize_handle_bottom_right_blue.tga value="e3690e25-9690-4f6c-a745-e7dcd885285a"/>
7 <scrollbutton_up_out_blue.tga value="dad084d7-9a46-452a-b0ff-4b9f1cefdde9"/>
8 <scrollbutton_up_in_blue.tga value="a93abdf3-27b5-4e22-a8fa-c48216cd2e3a"/>
9 <scrollbutton_down_out_blue.tga value="b4ecdecf-5c8d-44e7-b882-17a77e88ed55"/>
10 <scrollbutton_down_in_blue.tga value="d2421bab-2eaf-4863-b8f6-5e4c52519247"/>
11 <scrollbutton_left_out_blue.tga value="43773e8d-49aa-48e0-80f3-a04715f4677a"/>
12 <scrollbutton_left_in_blue.tga value="ea137a32-6718-4d05-9c22-7d570d27b2cd"/>
13 <scrollbutton_right_out_blue.tga value="3d700d19-e708-465d-87f2-46c8c0ee7938"/>
14 <scrollbutton_right_in_blue.tga value="b749de64-e903-4c3c-ac0b-25fb6fa39cb5"/>
15 <spin_up_out_blue.tga value="56576e6e-6710-4e66-89f9-471b59122794"/>
16 <spin_up_in_blue.tga value="c8450082-96a0-4319-8090-d3ff900b4954"/>
17 <spin_down_out_blue.tga value="b6d240dd-5602-426f-b606-bbb49a30726d"/>
18 <spin_down_in_blue.tga value="a985ac71-052f-48e6-9c33-d931c813ac92"/>
19 <radio_active_false.tga value="7a1ba9b8-1047-4d1e-9cfc-bc478c80b63f"/>
20 <radio_active_true.tga value="52f09e07-5816-4052-953c-94c6c10479b7"/>
21 <radio_inactive_false.tga value="90688481-67ff-4af0-be69-4aa084bcad1e"/>
22 <radio_inactive_true.tga value="1975db39-aa29-4251-aea0-409ac09d414d"/>
23 <checkbox_enabled_false.tga value="05bb64ee-96fd-4243-b74e-f40a41bc53ba"/>
24 <checkbox_enabled_true.tga value="cf4a2ed7-1533-4686-9dde-df9a37ddca55"/>
25 <checkbox_disabled_false.tga value="7d94cb59-32a2-49bf-a516-9e5a2045f9d9"/>
26 <checkbox_disabled_true.tga value="c817c642-9abd-4236-9287-ae0513fe7d2b"/>
27 <tab_top_blue.tga value="1ed83f57-41cf-4052-a3b4-2e8bb78d8191"/>
28 <tab_top_selected_blue.tga value="16d032e8-817b-4368-8a4e-b7b947ae3889"/>
29 <tab_bottom_blue.tga value="bf0a8779-689b-48c3-bb9a-6af546366ef4"/>
30 <tab_bottom_selected_blue.tga value="c001d8fd-a869-4b6f-86a1-fdcb106df9c7"/>
31 <tab_left.tga value="1097dcb3-aef9-8152-f471-431d840ea89e"/>
32 <tab_left_selected.tga value="bea77041-5835-1661-f298-47e2d32b7a70"/>
33 <crosshairs.tga value="6e1a3980-bf2d-4274-8970-91e60d85fb52"/>
34 <move_backward_in.tga value="db11d956-5e7d-4aa5-b39d-7774d339fc5c"/>
35 <move_backward_out.tga value="3ae8bb18-ed97-4cd3-ae5c-d54bc8479fe7"/>
36 <move_down_in.tga value="b92a70b9-c841-4c94-b4b3-cee9eb460d48"/>
37 <move_down_out.tga value="b5abc9fa-9e62-4e03-bc33-82c4c1b6b689"/>
38 <move_forward_in.tga value="54197a61-f5d1-4c29-95d2-c071d08849cb"/>
39 <move_forward_out.tga value="a0eb4021-1b20-4a53-892d-8faa9265a6f5"/>
40 <move_left_in.tga value="724996f5-b956-46f6-9844-4fcfce1d5e83"/>
41 <move_left_out.tga value="82476321-0374-4c26-9567-521535ab4cd7"/>
42 <move_right_in.tga value="7eeb57d2-3f37-454d-a729-8b217b8be443"/>
43 <move_right_out.tga value="1fbe4e60-0607-44d1-a50a-032eff56ae75"/>
44 <move_turn_left_in.tga value="95463c78-aaa6-464d-892d-3a805b6bb7bf"/>
45 <move_turn_left_out.tga value="13a93910-6b44-45eb-ad3a-4d1324c59bac"/>
46 <move_turn_right_in.tga value="5e616d0d-4335-476f-9977-560bccd009da"/>
47 <move_turn_right_out.tga value="5a44fd04-f52b-4c30-8b00-4a31e27614bd"/>
48 <move_up_out.tga value="f887146d-829f-4e39-9211-cf872b78f97c"/>
49 <move_up_in.tga value="49b4b357-e430-4b56-b9e0-05b8759c3c82"/>
50 <cam_rotate_out.tga value="88745b46-da05-11d5-8ac0-0003477c4611"/>
51 <cam_rotate_in.tga value="70bf2262-3eed-4996-88ac-076907e8921d"/>
52 <cam_zoom_out.tga value="bb02e941-cb3b-4dd3-892a-6841b5de6e45"/>
53 <cam_zoom_plus_in.tga value="c7aefd32-ce13-4242-82cc-2631d44ff9d3"/>
54 <cam_zoom_minus_in.tga value="deed3f4b-93e9-4183-a3b0-a5a98a6de1bb"/>
55 <cam_tracking_out.tga value="95c4ea0e-e3c2-4904-b847-7d7676139ebb"/>
56 <cam_tracking_in.tga value="fe2fc73b-5a64-4a8e-aacc-46fa81faf96a"/>
57 <direction_arrow.tga value="586383e8-4d9b-4fba-9196-2b5938e79c2c"/>
58 <minimize.tga value="34c9398d-bb78-4643-9633-46a2fa3e9637"/>
59 <minimize_inactive.tga value="6e72abba-1378-437f-bf7a-f0c15f3e99a3"/>
60 <minimize_pressed.tga value="39801651-26cb-4926-af57-7af9352c273c"/>
61 <restore.tga value="111b39de-8928-4690-b7b2-e17d5c960277"/>
62 <restore_inactive.tga value="0eafa471-70af-4882-b8c1-40a310929744"/>
63 <restore_pressed.tga value="90a0ed5c-2e7b-4845-9958-a64a1b30f312"/>
64 <combobox_arrow.tga value="b31c1335-0e9c-4927-bc90-53277777d9c1"/>
65 <down_arrow.tga value="476353fe-70a2-d407-d0b7-94de812f6966"/>
66 <up_arrow.tga value="6880c510-5517-21f8-228c-47d5adcc682b"/>
67 <white.tga value="5748decc-f629-461c-9a36-a35a221fe21f"/>
68 <darkgray.tga value="267e26d3-e0e1-41b8-91b1-3b337102928d"/>
69 <lightgray.tga value="c520bf46-cc5d-412b-a60b-9f1bd245189f"/>
70 <eyes.tga value="6522e74d-1660-4e7f-b601-6f48c1659a77"/>
71 <hair.tga value="7ca39b4c-bd19-4699-aff7-f93fd03d3e7b"/>
72 <black.tga value="e2244626-f22f-4839-8123-1e7baddeb659"/>
73 <close_inactive_blue.tga value="779e4fa3-9b13-f74a-fba9-3886fe9c86ba"/>
74 <button_disabled_32x128.tga value="f8124d60-2875-c358-7847-2acb63e5400c"/>
75 <button_enabled_32x128.tga value="d8faf8cb-ee6e-b0b5-abd9-bde873ad3461"/>
76 <button_enabled_selected_32x128.tga value="1eddba75-b682-110a-104e-6cdcce616a25"/>
77 <button_anim_play_selected.tga value="119c37bb-24af-45fe-ae11-3a6bc3c85138"/>
78 <button_anim_pause_selected.tga value="ad65d67a-777b-fbfa-693d-4bdcfca2acca"/>
79 <button_anim_pause.tga value="db2d9c2d-0bbd-21e2-e83a-103ea2def7a8"/>
80 <button_anim_play.tga value="2a7f6738-5d82-2ff3-d419-30ed09cbb72b"/>
81 <button_anim_stop.tga value="e10c9e36-d9f6-c8b4-de96-557dccce9205"/>
82 <button_anim_stop_selected.tga value="b8c0e0aa-2771-439e-c919-d2f5dad69a1c"/>
83 <rounded_square.tga value="38ce8b3c-fb30-5c59-9926-bd643613f606"/>
84 <rounded_square_soft.tga value="4c95e6bc-fe77-9cb4-b58a-909848042c1e"/>
85 <badge_ok.tga value="211035a7-c313-378d-478c-e80bbd0fde63"/>
86 <badge_note.tga value="13f6e639-b3f9-28da-a1e6-e990a43052b6"/>
87 <badge_warn.tga value="0992d4bc-7af8-4a1f-f2e6-e6c4083b066e"/>
88 <badge_error.tga value="00c50485-8491-ab70-2ea8-43f26fd028e2"/>
89
90 <!--Status bar icons-->
91 <status_health.tga value="4330e8ce-b39b-1eb8-c2ec-a97c0b3947b5"/>
92 <status_no_fly.tga value="1e9ff1e7-814a-41fb-ad67-129bdb65987e"/>
93 <status_no_build.tga value="e8423f32-5901-4a5c-b5b0-9ec76b6e7b2c"/>
94 <status_no_scripts.tga value="c31bae59-425a-4697-9b38-66d22624ac01"/>
95 <status_buy_currency.tga value="f43a535a-59ac-26e3-84bc-c786735fabe4"/>1
96 <status_buy_currency_pressed.tga value="bfa5be70-37c7-8126-fecd-df55390954d5"/>
97 <status_buy_land.tga value="1a0edac5-3e50-fc9b-2752-70c1f69cb959"/>
98 <status_buy_land_pressed.tga value="257647b7-199f-99ff-8be9-f6753289a3aa"/>
99 <status_script_debug.tga value="7775b5cc-93a5-6efd-0d9b-4e079afac217"/>
100 <status_no_push.tga value="016189df-11d5-4531-bdd1-4c46268f4ab0"/>
101 <status_no_voice.tga value="16b0730f-1221-419c-9338-fc10c3edd93d"/>
102 <status_search.tga value="6846fb08-fe38-40be-b145-d8d7b2e1d0d8"/>
103 5
104 <icn_menubar-build-warn.tga value="2794164a-153d-4b91-8f74-550c05019037"/> 6 <icn_textfield_enabled.tga>
7 <scale_rect left="5" top="5" bottom="5" right="5"/>
8 </icn_textfield_enabled.tga>
9 <button_disabled_32x128.tga preload="true">
10 <scale_rect left="8" top="16" right="120" bottom="8"/>
11 </button_disabled_32x128.tga>
12 <button_enabled_32x128.tga preload="true">
13 <scale_rect left="8" top="16" right="120" bottom="8"/>
14 </button_enabled_32x128.tga>
15 <toolbar_btn_enabled.tga>
16 <scale_rect left="26" top="24" right="102" bottom="0" />
17 </toolbar_btn_enabled.tga>
105 18
106 <terrain_dirt.tga value="b8d3965a-ad78-bf43-699b-bff8eca6c975"/> 19 <progressbar_fill.tga preload="true">
107 <terrain_grass.tga value="abb783e6-3e93-26c0-248a-247666855da3"/> 20 <scale_rect left="4" top="7" right="71" bottom="7"/>
108 <terrain_mountain.tga value="179cdabd-398a-9b6b-1391-4dc333ba321f"/> 21 </progressbar_fill.tga>
109 <terrain_rock.tga value="beb169c7-11ea-fff2-efe5-0f24dc881df2"/> 22 <progressbar_track.tga preload="true">
110 <terrain_dirt_detail.tga value="0bc58228-74a0-7e83-89bc-5c23464bcec5"/> 23 <scale_rect left="3" top="7" right="87" bottom="7"/>
111 <terrain_grass_detail.tga value="63338ede-0037-c4fd-855b-015d77112fc8"/> 24 </progressbar_track.tga>
112 <terrain_mountain_detail.tga value="303cd381-8560-7579-23f1-f0a880799740"/> 25
113 <terrain_rock_detail.tga value="53a2f406-4895-1d13-d541-d2e3b86bc19c"/> 26
114 <square_btn_32x128.tga value="b28df901-6b8d-d31c-7903-4eb9676d4bfc"/> 27 <toolbar_btn_disabled.tga>
115 <square_btn_selected_32x128.tga value="c48c9e95-191b-96d3-08b2-6e8ada58b651"/> 28 <scale_rect left="26" top="24" right="102" bottom="0" />
116 <tree_pine_1.tga value="0187babf-6c0d-5891-ebed-4ecab1426683"/> 29 </toolbar_btn_disabled.tga>
117 <tree_oak.tga value="8a515889-eac9-fb55-8eba-d2dc09eb32c8"/> 30 <toolbar_btn_selected.tga>
118 <tree_tropical_1.tga value="5bc11cd6-2f40-071e-a8da-0903394204f9"/> 31 <scale_rect left="26" top="24" right="102" bottom="0" />
119 <tree_palm_1.tga value="ca4e8c27-473c-eb1c-2f5d-50ee3f07d85c"/> 32 </toolbar_btn_selected.tga>
120 <tree_dogwood.tga value="64367bd1-697e-b3e6-0b65-3f862a577366"/> 33 <button_enabled_selected_32x128.tga preload="true">
121 <tree_tropical_2.tga value="cdd9a9fc-6d0b-f90d-8416-c72b6019bca8"/> 34 <scale_rect left="12" top="12" right="118" bottom="14"/>
122 <tree_palm_2.tga value="2d784476-d0db-9979-0cff-9408745a7cf3"/> 35 </button_enabled_selected_32x128.tga>
123 <tree_cypress_1.tga value="fb2ae204-3fd1-df33-594f-c9f882830e66"/> 36 <checkbox_disabled_false.tga preload="true"/>
124 <tree_cypress_2.tga value="30047cec-269d-408e-0c30-b2603b887268"/> 37 <checkbox_disabled_true.tga preload="true"/>
125 <tree_pine_2.tga value="d691a01c-13b7-578d-57c0-5caef0b4e7e1"/> 38 <checkbox_enabled_false.tga preload="true"/>
126 <tree_plumeria.tga value="6de37e4e-7029-61f5-54b8-f5e63f983f58"/> 39 <checkbox_enabled_true.tga preload="true"/>
127 <winter_tree_aspen.tga value="7c0cf89b-44b1-1ce2-dd74-07102a98ac2a"/> 40 <close_in_blue.tga preload="true"/>
128 <winter_tree_pine_1.tga value="10d2a01a-0818-84b9-4b96-c2eb63256519"/> 41 <combobox_arrow.tga preload="true"/>
129 <winter_tree_pine_2.tga value="67931331-0c02-4876-1255-28770896c6a2"/> 42 <minimize.tga preload="true"/>
130 <tree_eucalyptus.tga value="a6162133-724b-54df-a12f-51cd070ad6f3"/> 43 <minimize_pressed.tga preload="true"/>
131 <tree_fern.tga value="8872f2b8-31db-42d8-580a-b3e4a91262de"/> 44 <radio_active_false.tga preload="true"/>
132 <tree_eelgrass.tga value="96b4de31-f4fa-337d-ec78-451e3609769e"/> 45 <radio_active_true.tga preload="true"/>
133 <tree_sea_sword.tga value="5894e2e7-ab8d-edfa-e61c-18cf16854ba3"/> 46 <radio_inactive_false.tga preload="true"/>
134 <tree_kelp_1.tga value="2caf1179-7861-6ff3-4b7d-46e17780bdfa"/> 47 <radio_inactive_true.tga preload="true"/>
135 <tree_kelp_2.tga value="2a4880b6-b7a3-690a-2049-bfbe38eafb9f"/> 48 <resize_handle_bottom_right_blue.tga preload="true"/>
136 <tree_beach_grass_1.tga value="18fb888b-e8f1-dce7-7da7-321d651ea6b0"/> 49 <rounded_square.tga preload="true">
137 <tool_dozer.tga value="d2a0d4d4-54eb-4d16-be4b-4eae43845c74"/> 50 <scale_rect left="8" top="16" right="120" bottom="8"/>
138 <tool_dozer_active.tga value="d4afdbbe-1550-4b7d-91de-95731f47e8e3"/> 51 </rounded_square.tga>
139 <tool_land.tga value="86fe4df4-0ecb-4382-b9ae-475925a92388"/> 52 <rounded_square_soft.tga preload="true">
140 <tool_land_active.tga value="34e60587-0791-4a07-8918-f5995fcc22a3"/> 53 <scale_rect left="8" top="16" right="120" bottom="8"/>
141 <tool_zoom.tga value="27eb8829-fe65-45ed-a49a-73aac42f4b38"/> 54 </rounded_square_soft.tga>
142 <tool_zoom_active.tga value="69445f58-5c8e-44e0-9d2e-47408bb43b39"/> 55 <toolbar_tab.tga preload="true">
143 <tool_orbit.tga value="06964fe4-033f-448a-95c9-30dc41d1be8b"/> 56 <scale_rect left="6" top="42" right="104" bottom="8"/>
144 <tool_orbit_active.tga value="ee4e07db-3f72-4098-bd4c-aef34515a7bc"/> 57 </toolbar_tab.tga>
145 <tool_pan.tga value="a32aa302-0a15-48d2-b2b1-4d69f1161173"/> 58 <toolbar_bg.tga preload="true">
146 <tool_pan_active.tga value="24d9ad33-0b42-4eb5-99a3-659d838bc5c0"/> 59 <scale_rect left="6" top="42" right="96" bottom="16"/>
147 <inv_folder_texture.tga value="743f035b-a049-43f4-16c7-7ec8daa2c481"/> 60 </toolbar_bg.tga>
148 <inv_folder_sound.tga value="e10cb910-1e71-da47-bd12-8c53f7793714"/> 61 <scrollbutton_down_in_blue.tga preload="true"/>
149 <inv_folder_callingcard.tga value="a3735971-e2b2-d78a-580d-d265cd8f2484"/> 62 <scrollbutton_down_out_blue.tga preload="true"/>
150 <inv_folder_landmark.tga value="9f921155-7c8c-e276-d5ec-03ac9340584d"/> 63 <scrollbutton_left_in_blue.tga preload="true"/>
151 <inv_folder_script.tga value="baa5c310-6a6d-cc48-51eb-65196ba31d77"/> 64 <scrollbutton_left_out_blue.tga preload="true"/>
152 <inv_folder_object.tga value="113e5133-fd0d-ee51-4a59-9d67ca10e8a7"/> 65 <scrollbutton_right_in_blue.tga preload="true"/>
153 <inv_folder_notecard.tga value="a9e75d84-5073-9cb7-10a9-1ca68ef5c7ba"/> 66 <scrollbutton_right_out_blue.tga preload="true"/>
154 <inv_folder_clothing.tga value="f1427d3d-b2e8-97c4-69ab-1f36d4c0e8f0"/> 67 <scrollbutton_up_in_blue.tga preload="true"/>
155 <inv_folder_bodypart.tga value="1fe05580-1d2f-0345-b28b-52b6e3a20e5d"/> 68 <scrollbutton_up_out_blue.tga preload="true"/>
156 <inv_folder_trash.tga value="88ad072e-ea0b-aabd-5ac0-b37862a6eb66"/> 69 <spin_down_in_blue.tga preload="true"/>
157 <inv_folder_plain_closed.tga value="86f00960-c3e9-9680-145d-3beffd743e9c"/> 70 <spin_down_out_blue.tga preload="true"/>
158 <inv_folder_plain_open.tga value="d15dc243-2d0b-47af-0ce1-ec376464bdc8"/> 71 <spin_up_in_blue.tga preload="true"/>
159 <inv_folder_snapshot.tga value="6efe85e7-800f-1843-296c-a5b7adffe091"/> 72 <spin_up_out_blue.tga preload="true"/>
160 <inv_folder_lostandfound.tga value="9a371a04-297d-bacf-0d16-5f49753efe1d"/> 73 <square_btn_32x128.tga preload="true">
161 <inv_folder_animation.tga value="4d59b3ee-f29d-b912-2bcc-9bb1f8a07ec6"/> 74 <scale_rect left="8" top="10" right="120" bottom="10"/>
162 <inv_folder_gesture.tga value="4de9129a-9fc1-d759-d739-364293906ba2"/> 75 </square_btn_32x128.tga>
163 <inv_item_texture.tga value="19f452d7-4eee-9f46-76cc-5497d17f1dd9"/> 76 <square_btn_selected_32x128.tga preload="true">
164 <inv_item_sound.tga value="eb414d69-c77d-d4e7-66e6-6c2e6f6c1976"/> 77 <scale_rect left="2" top="10" right="126" bottom="10"/>
165 <inv_item_callingcard_online.tga value="672cc53e-8dc0-ba91-2a4e-574104cf071c"/> 78 </square_btn_selected_32x128.tga>
166 <inv_item_callingcard_offline.tga value="d0afe86b-2489-7600-55b7-6abb0a63d9f9"/> 79 <tab_bottom_blue.tga preload="true">
167 <inv_item_landmark.tga value="bf25a2a0-85da-7fa0-0993-e461768d0221"/> 80 <scale_rect left="8" top="8" right="120" bottom="9"/>
168 <inv_item_landmark_visited.tga value="229fac85-5428-4ab7-adeb-eb8389e91092"/> 81 </tab_bottom_blue.tga>
169 <inv_item_script.tga value="59a3df81-ed76-06c9-7264-6dada535e7a3"/> 82 <tab_bottom_selected_blue.tga preload="true">
170 <inv_item_clothing.tga value="34dfe476-8e26-0e3a-11cf-76cc4a7126ce"/> 83 <scale_rect left="8" top="8" right="96" bottom="9"/>
171 <inv_item_object.tga value="0f0780a0-89c4-742a-ef28-26405a41cf85"/> 84 </tab_bottom_selected_blue.tga>
172 <inv_item_object_multi.tga value="75ce8027-e029-4e24-b3f4-21b0dff52632"/> 85 <tab_left.tga preload="true">
173 <inv_item_notecard.tga value="23ce8a2c-9ea2-d863-6572-806f0645b0c7"/> 86 <scale_rect left="8" top="8" right="120" bottom="9"/>
174 <inv_item_bodypart.tga value="d2a5362d-5c55-57dd-a9e9-5c814d1ddc16"/> 87 </tab_left.tga>
175 <inv_item_attach.tga value="5bcae41e-aa5d-02f8-edf1-605ebdd875ab"/> 88 <tab_left_selected.tga preload="true">
176 <inv_item_snapshot.tga value="3810d584-b092-7caa-57e0-010f192b9659"/> 89 <scale_rect left="8" top="8" right="96" bottom="9"/>
177 <inv_item_eyes.tga value="eaa5fd96-5c25-06ef-2280-7ef20203e167"/> 90 </tab_left_selected.tga>
178 <inv_item_gloves.tga value="117b11cb-c04e-5081-13da-1a8846070fd0"/> 91 <tab_top_blue.tga preload="true">
179 <inv_item_hair.tga value="6bca3bf4-ed6d-d438-63a0-2a7066d03a0b"/> 92 <scale_rect left="8" top="8" right="120" bottom="9"/>
180 <inv_item_jacket.tga value="8df59386-56e0-c811-0443-840da3acb3a5"/> 93 </tab_top_blue.tga>
181 <inv_item_pants.tga value="a87a58ca-f857-63b1-0acf-072711ed1bdb"/> 94 <tab_top_selected_blue.tga preload="true">
182 <inv_item_shape.tga value="4463e433-4db5-79ef-c1b0-4821b03ddb07"/> 95 <scale_rect left="8" top="8" right="96" bottom="9"/>
183 <inv_item_shirt.tga value="e2ffb62b-6abc-22d6-952d-764759b4d636"/> 96 </tab_top_selected_blue.tga>
184 <inv_item_shoes.tga value="cf384fa5-1edd-c37c-2134-283dd4fe3396"/> 97 <startup_logo.j2c preload="true"/>
185 <inv_item_skirt.tga value="0b43f826-2abc-2944-7d72-10777a51d19b"/> 98 <color_swatch_alpha.tga preload="true"/>
186 <inv_item_socks.tga value="22137c6d-6ec5-6eee-9a2e-2d7a9e6cbcd4"/> 99
187 <inv_item_underpants.tga value="2f15dc09-4385-526c-aa5d-d9d516ec7d99"/> 100 <active_voice_tab.tga/>
188 <inv_item_undershirt.tga value="f72ab629-a3ab-de0c-35c0-5285e27478ce"/> 101 <button_anim_pause.tga/>
189 <inv_item_animation.tga value="b5cda0d6-d196-ce48-63db-d04323ef8931"/> 102 <button_anim_pause_selected.tga/>
190 <inv_item_gesture.tga value="5579245d-d5bf-5f13-46b0-8624490de24c"/> 103 <button_anim_play.tga/>
191 <pixiesmall.tga value="168e6813-096e-07ea-97ae-fd416826f627"/> 104 <button_anim_play_selected.tga/>
192 <legend.tga value="ca7609c6-6ec6-32d9-332e-0d8f437ef644"/> 105 <button_anim_stop.tga/>
193 <propertyline.tga value="e3548c46-8d5e-03da-fcab-4fc36ad818bb"/> 106 <button_anim_stop_selected.tga/>
194 <startup_logo.tga value="66864f3c-e095-d9c8-058d-d6575e6ed1b8"/> 107 <crosshairs.tga/>
195 <grass_texture_1.tga value="79504bf5-c3ec-0763-6563-d843de66d0a1"/> 108 <direction_arrow.tga/>
196 <grass_texture_2.tga value="6c4727b8-ac79-ba44-3b81-f9aa887b47eb"/> 109 <foot_shadow.j2c use_mips="true"/>
197 <grass_texture_3.tga value="99bd60a2-3250-efc9-2e39-2fbcadefbecc"/> 110
198 <grass_texture_4.tga value="7a2b3a4a-53c2-53ac-5716-aac7d743c020"/> 111 <icon_auction.tga/>
199 <undergrowth_1.tga value="8f458549-173b-23ff-d4ff-bfaa5ea2371b"/> 112 <icon_avatar_offline.tga/>
200 <silhouette.tga value="da5d4079-7819-6b53-d2a4-dc9929381d7d"/> 113 <icon_avatar_online.tga/>
201 <avatar_thumb_bkgrnd.tga value="3a7f4f0d-be14-ee78-29e3-fc8b0b2a68d3"/> 114 <icon_day_cycle.tga/>
202 <missing_asset.tga value="32dfd1c8-7ff6-5909-d983-6d4adfb4255d"/> 115 <icon_diurnal.tga/>
203 <alpha_gradient.tga value="e97cf410-8e61-7005-ec06-629eba4cd1fb"/> 116 <icon_event.tga/>
204 <alpha_gradient_2d.tga value="38b86f85-2575-52a9-a531-23108d8da837"/> 117 <icon_event_mature.tga/>
205 <alpha_noise.tga value="b9e1cf8a-9660-c020-0c69-18f1ea27268a"/> 118 <icon_for_sale.tga/>
206 <alpha_sizzle.tga value="e121e2fc-7573-740f-edfd-0d45a9ba486e"/> 119 <icon_group.tga/>
207 <bump_woodgrain.tga value="058c75c0-a0d5-f2f8-43f3-e9699a89c2fc"/> 120 <icon_groupnotice.tga/>
208 <bump_bark.tga value="6c9fa78a-1c69-2168-325b-3e03ffa348ce"/> 121 <icon_groupnoticeinventory.tga/>
209 <bump_bricks.tga value="b8eed5f0-64b7-6e12-b67f-43fa8e773440"/> 122 <icon_lock.tga/>
210 <bump_checker.tga value="9deab416-9c63-78d6-d558-9a156f12044c"/> 123 <icon_place.tga/>
211 <bump_concrete.tga value="db9d39ec-a896-c287-1ced-64566217021e"/> 124 <icon_popular.tga/>
212 <bump_crustytile.tga value="f2d7b6f6-4200-1e9a-fd5b-96459e950f94"/> 125 <icon_top_pick.tga/>
213 <bump_cutstone.tga value="d9258671-868f-7511-c321-7baef9e948a4"/> 126
214 <bump_discs.tga value="d21e44ca-ff1c-a96e-b2ef-c0753426b7d9"/> 127 <inv_folder_animation.tga/>
215 <bump_gravel.tga value="4726f13e-bd07-f2fb-feb0-bfa2ac58ab61"/> 128 <inv_folder_bodypart.tga/>
216 <bump_petridish.tga value="e569711a-27c2-aad4-9246-0c910239a179"/> 129 <inv_folder_callingcard.tga/>
217 <bump_siding.tga value="073c9723-540c-5449-cdd4-0e87fdc159e3"/> 130 <inv_folder_clothing.tga/>
218 <bump_stonetile.tga value="ae874d1a-93ef-54fb-5fd3-eb0cb156afc0"/> 131 <inv_folder_gesture.tga/>
219 <bump_stucco.tga value="92e66e00-f56f-598a-7997-048aa64cde18"/> 132 <inv_folder_landmark.tga/>
220 <bump_suction.tga value="83b77fc6-10b4-63ec-4de7-f40629f238c5"/> 133 <inv_folder_lostandfound.tga/>
221 <bump_weave.tga value="735198cf-6ea0-2550-e222-21d3c6a341ae"/> 134 <inv_folder_notecard.tga/>
222 <icon_avatar_online.tga value="529ed15b-3d41-dcc1-79de-90bf21770b5b"/> 135 <inv_folder_object.tga/>
223 <icon_avatar_offline.tga value="34648c67-5bfb-5790-e05e-8bd6600fd087"/> 136 <inv_folder_plain_closed.tga/>
224 <icon_event.tga value="be235ae0-53cf-1d68-b3ae-cf375ed1fb58"/> 137 <inv_folder_script.tga/>
225 <icon_event_mature.tga value="cc090999-1b3e-2e97-7a38-c9f4afd10297"/> 138 <inv_folder_snapshot.tga/>
226 <icon_group.tga value="04237108-a879-5a95-9b0c-b18fd09bc447"/> 139 <inv_folder_sound.tga/>
227 <icon_place.tga value="ba0bac4e-815e-14e1-2895-5065b8c703b3"/> 140 <inv_folder_texture.tga/>
228 <icon_top_pick.tga value="77ca91a2-4431-aeaf-6249-3dd99c7dd86d"/> 141 <inv_folder_trash.tga/>
229 <icon_popular.tga value="bdd47da5-5b5b-c906-37ad-16aaa64f096f"/> 142 <inv_item_animation.tga/>
230 <icon_for_sale.tga value="f20728fd-1670-3771-2293-e0dd3f0bcaab"/> 143 <inv_item_skin.tga/>
231 <icon_auction.tga value="96abf5b1-335c-6b76-61e3-74ada07f3cb8"/> 144 <inv_item_callingcard_offline.tga/>
232 <icon_land_for_landless.tga value="c421ddf2-b9d7-b373-503c-f4c423f37f1c"/> 145 <inv_item_callingcard_online.tga/>
233 <icon_day_cycle.tga value="5b30a285-f1e3-92b1-dcd3-0d07366ced3e"/> 146 <inv_item_eyes.tga/>
234 <icon_lock.tga value="9beb8cdd-3dce-53c2-b28e-e1f3bc2ec0a4"/> 147 <inv_item_gesture.tga/>
235 <icon_diurnal.tga value="6002a571-549c-472c-9443-9ab35b1a55ed"/> 148 <inv_item_gloves.tga/>
236 <noentrylines.tga value="5d3e196b-fd4d-ada7-e4c1-99f8e9f1cfbf"/> 149 <inv_item_hair.tga/>
237 <noentrypasslines.tga value="ac8f8627-6a30-8da8-d4bd-958668eea7a0"/> 150 <inv_item_jacket.tga/>
238 <notify_tip_icon.tga value="74ba3584-58ea-9984-5b76-62d37942ab77"/> 151 <inv_item_landmark.tga/>
239 <notify_box_icon.tga value="b2ef2d31-9714-a07b-6ca7-31638166364b"/> 152 <inv_item_landmark_visited.tga/>
240 <notify_next.tga value="07d0ea4c-af0c-aad1-dbbf-c24020ff2b80"/> 153 <inv_item_notecard.tga/>
241 <notify_caution_icon.tga value="3a22ac15-39ac-409c-acec-b08b1b6b689b"/> 154 <inv_item_object.tga/>
242 <map_avatar_you_8.tga value="02fbdc40-5e07-a6e1-228b-58e10f8335b7"/> 155 <inv_item_object_multi.tga/>
243 <map_avatar_8.tga value="0be58a91-8065-c02b-7a12-2cc14dddbc37"/> 156 <inv_item_pants.tga/>
244 <map_avatar_16.tga value="db0dadd5-026a-88cf-f5c1-523a0a2daa3e"/> 157 <inv_item_script.tga/>
245 <map_avatar_above_8.tga value="a3097b85-8b24-4545-9593-9525720150b2"/> 158 <inv_item_shape.tga/>
246 <map_avatar_below_8.tga value="a450f6d5-9a17-4907-aec5-41f60407cba1"/> 159 <inv_item_shirt.tga/>
247 <map_telehub.tga value="bf1b2bb0-13b1-40ae-3354-b1b93761bdb4"/> 160 <inv_item_shoes.tga/>
248 <map_infohub.tga value="85b1a79a-7f6c-9df3-4d6c-17b1a4efb55a"/> 161 <inv_item_skirt.tga/>
249 <map_home.tga value="ae9b8f5f-03a1-2e71-db77-6eb27a1ba181"/> 162 <inv_item_snapshot.tga/>
250 <map_event.tga value="6008be5e-9267-2a3a-9798-e81b076c22ca"/> 163 <inv_item_socks.tga/>
251 <map_event_mature.tga value="f9cdba28-a227-d613-2f16-ce06209314ae"/> 164 <inv_item_sound.tga/>
252 <map_track_8.tga value="bfdc7bf6-e2ee-1754-f4df-cc25887714ad"/> 165 <inv_item_texture.tga/>
253 <map_track_16.tga value="a3878395-ef00-a0e6-ee9a-f45ed6b9ce59"/> 166 <inv_item_underpants.tga/>
254 <object_cone.tga value="c2b8c90a-7dca-26e3-1a63-7aa4a0389cf9"/> 167 <inv_item_undershirt.tga/>
255 <object_cone_active.tga value="cf69c64b-f19e-e1f3-a586-42fef31a23be"/> 168 <lag_status_critical.tga/>
256 <object_cube.tga value="70c747ac-1de3-a8b9-514d-101753ca6ccb"/> 169 <lag_status_good.tga/>
257 <object_cube_active.tga value="f9c5e213-1076-7a7d-7889-52388aad2c1a"/> 170 <lag_status_warning.tga/>
258 <object_cylinder.tga value="13e35d95-5f6c-9a91-1766-49dedf9b1267"/> 171 <legend.tga/>
259 <object_cylinder_active.tga value="3f3e4932-8412-e2a7-cfe9-92caf5978b1b"/> 172 <map_avatar_16.tga/>
260 <object_grass.tga value="7ca8e672-920b-4653-3970-1abc91abef58"/> 173 <map_avatar_8.tga/>
261 <object_grass_active.tga value="d0fc7cc9-646a-6860-cf7c-1d9e58cd6dab"/> 174 <map_avatar_you_8.tga/>
262 <object_hemi_cone.tga value="69d5e60c-739a-40b1-b526-84072121e394"/> 175 <map_event.tga/>
263 <object_hemi_cone_active.tga value="2e0c5435-95bb-1c0d-5da1-42336fb1cfc0"/> 176 <map_event_mature.tga/>
264 <object_hemi_cylinder.tga value="f4be3e06-24a8-f86e-acc7-7daefc0572b7"/> 177 <map_home.tga/>
265 <object_hemi_cylinder_active.tga value="67279486-cfc1-3633-de42-85db65db373c"/> 178 <map_infohub.tga/>
266 <object_hemi_sphere.tga value="b67251ab-1716-b9fb-f911-967ba3fe027b"/> 179 <map_telehub.tga/>
267 <object_hemi_sphere_active.tga value="6c489466-3058-6475-6b1b-e5fc1d49f1f3"/> 180 <map_track_16.tga/>
268 <object_pyramid.tga value="9dde8b56-2cc4-a932-b63a-38c3a83221ad"/> 181 <media_icon.tga file_name="icn_label_media.tga" />
269 <object_pyramid_active.tga value="e7217b1a-e3d8-e339-d28a-d7714d0b5bee"/> 182 <music_icon.tga file_name="icn_lable_music.tga" />
270 <object_sphere.tga value="7fa122c0-b994-460e-8636-cdc451d67268"/> 183 <noentrylines.j2c use_mips="true"/>
271 <object_sphere_active.tga value="f2c3bcbc-2904-41a5-1c22-688f176fd1ee"/> 184 <noentrypasslines.j2c use_mips="true"/>
272 <object_tetrahedron.tga value="e17db404-9fc5-9534-1038-777c82b2771f"/> 185 <notify_tip_icon.tga/>
273 <object_tetrahedron_active.tga value="2792ea3b-c052-85fe-d168-a62b2f4e9d7c"/> 186 <notify_caution_icon.tga/>
274 <object_tree.tga value="710d1bec-fb33-28f1-e77e-ddbb5b51f5ed"/> 187 <notify_box_icon.tga/>
275 <object_tree_active.tga value="da4835c7-b12a-41dd-11db-dae452f040c2"/> 188 <object_cone.tga/>
276 <object_prism.tga value="02935f3a-dcda-3b42-1874-da89d4c12870"/> 189 <object_cone_active.tga/>
277 <object_prism_active.tga value="223aac97-bd2f-ec2e-ad45-5641b77c78f9"/> 190 <object_cube.tga/>
278 <object_torus.tga value="19e1f4c9-6aa6-4414-981d-59a1343a6472"/> 191 <object_cube_active.tga/>
279 <object_torus_active.tga value="ef2bca77-5004-4547-b00a-3b96e463f89f"/> 192 <object_cylinder.tga/>
280 <object_tube.tga value="7ce81316-a478-480f-961c-435fcbdecaf0"/> 193 <object_cylinder_active.tga/>
281 <object_tube_active.tga value="55c3e4d1-cfdc-48a8-af32-a34844b91832"/> 194 <object_grass.tga/>
282 <object_ring_active.tga value="2c955a73-fa31-237b-a4a1-5c8ede3bae50"/> 195 <object_grass_active.tga/>
283 <object_ring.tga value="a7610e41-4647-16d8-0e0e-85a1211c1596"/> 196 <object_hemi_cone.tga/>
284 <container_animation.tga value="c4e657a1-4c86-0159-2da0-32ff948484e6"/> 197 <object_hemi_cone_active.tga/>
285 <container_bodypart.tga value="770cb2df-758d-34d5-36c7-e3de06db5b5d"/> 198 <object_hemi_cylinder.tga/>
286 <container_clothing.tga value="dd90406f-4c8f-a3f9-41df-d562f94f09e0"/> 199 <object_hemi_cylinder_active.tga/>
287 <container_gesture.tga value="59cd31c0-2791-3c48-f740-f0a36c68653e"/> 200 <object_hemi_sphere.tga/>
288 <container_landmark.tga value="24c63386-04f7-ce6f-4ff2-dfb215d2e21f"/> 201 <object_hemi_sphere_active.tga/>
289 <container_many_things.tga value="849d3292-d9fa-7186-5465-dd7b5fc1ec48"/> 202 <object_prism.tga/>
290 <container_object.tga value="ad887ae1-2bee-f2c9-6786-5599de3c95c4"/> 203 <object_prism_active.tga/>
291 <container_script.tga value="b93bd494-c4bd-bcdf-4a59-35a9497d03f3"/> 204 <object_pyramid.tga/>
292 <container_sound.tga value="5ddea031-cfa3-2776-43e3-c7146c1b4cd6"/> 205 <object_pyramid_active.tga/>
293 <container_texture.tga value="b3f95caf-bd62-bef3-0ded-dea752920629"/> 206 <object_ring.tga/>
294 <fringe.tga value="8ac54e9d-ec09-d804-60ab-47404a9b4a36"/> 207 <object_ring_active.tga/>
295 <foot_shadow.tga value="14e8a47d-1055-0a68-5d55-eafd9ad3da5b"/> 208 <object_sphere.tga/>
296 <img_smoke_poof.tga value="c734da52-f2ba-f0ba-d59e-15ea49f3d5e9"/> 209 <object_sphere_active.tga/>
297 <img_shot.tga value="173b05c7-53a9-4cf8-ce6b-5eec21c5c63f"/> 210 <object_tetrahedron.tga/>
298 <folder_arrow.tga value="09a324a8-acc1-d9cd-2cbd-7465d90d3a98"/> 211 <object_tetrahedron_active.tga/>
299 <color_swatch_alpha.tga value="f13db22f-c55c-8bdf-7b1c-221e56fde253"/> 212 <object_torus.tga/>
300 <script_error.tga value="e5a0ec29-f59e-d29e-2c59-ed66c187c26c"/> 213 <object_torus_active.tga/>
301 <water_normal.tga value="822ded49-9a6c-f61c-cb89-6df54f42cdf4"/> 214 <object_tree.tga/>
302 <icon_groupnotice.tga value="21579c81-a85e-f11c-2d80-33a4c007d88c"/> 215 <object_tree_active.tga/>
303 <icon_groupnoticeinventory.tga value="8fcca699-08e7-3d58-2f05-86c9d52bbe82"/> 216 <object_tube.tga/>
304 <tab_background_lightgrey.tga value="c769e547-c307-43ca-2b6a-51cad6d1c527"/> 217 <object_tube_active.tga/>
305 <tab_background_purple.tga value="0ae8a2e9-aff4-249c-fc4a-0f41f89847dd"/> 218 <pixiesmall.j2c use_mips="true"/>
306 <tab_background_darkpurple.tga value="38ff4f7e-3078-a749-8302-d6cc94b404c4"/> 219 <script_error.j2c use_mips="true"/>
307 <smicon_warn.tga value="f47c17a3-8bfb-3c9f-22b8-77923de7eed9"/> 220 <silhouette.j2c use_mips="true"/>
308 <uv_test1.tga value="f43b75f5-9aa5-18ec-d5d9-e6d1b8442613"/> 221 <status_no_build.tga/>
309 <uv_test2.tga value="300ce95f-3d3f-7c1a-3a22-3fc48f873fb9"/> 222 <status_voice.tga/>
310 <eye_button_active.tga value="2b42b375-f9b4-788e-46c7-7ef38762d0ba"/> 223 <status_buy_currency.tga/>
311 <eye_button_inactive.tga value="be1b7225-98b5-eb2a-2c86-ddaae3328a6e"/> 224 <status_buy_currency_pressed.tga/>
312 <account_id_blue.tga value="6ab9179a-7308-58db-6c9d-893d3b52bece"/> 225 <status_buy_land.tga/>
313 <account_id_orange.tga value="fbe89371-1251-4e77-d2d8-8eeccffe3ca8"/> 226 <status_buy_land_pressed.tga/>
314 <account_id_green.tga value="3bf64d5a-38d3-b752-cf52-3d9f8fca353a"/> 227 <status_no_fly.tga/>
315 <ff_visible_online.tga value="d609a41f-34c0-7aae-b2c6-2fc3ab26d916"/> 228 <status_health.tga/>
316 <ff_visible_map.tga value="20b52706-c1ab-414a-9dea-1cb788ad5689"/> 229 <status_no_push.tga/>
317 <ff_edit_mine.tga value="1baee0b9-4b89-39eb-8815-866d82300ab5"/> 230 <status_no_scripts.tga/>
318 <ff_edit_theirs.tga value="32e981cd-4700-da5a-7fc7-d573ec3742f4"/> 231 <tool_dozer.tga/>
319 <inv_item_script_dangerous.tga value="0b502db8-6fcd-c442-ecfe-483a0dce875e"/> 232 <tool_dozer_active.tga/>
320 <ff_visible_map_button.tga value="c1079bef-5cf9-90f3-6dcd-48989851c252"/> 233 <tool_zoom.tga/>
321 <ff_visible_online_button.tga value="36749b47-93d6-2c5e-7ebd-d38d30311163"/> 234 <tool_zoom_active.tga/>
322 <ff_edit_theirs_button.tga value="ca229f65-d7e0-133e-1bc2-674abc33f3d5"/> 235 <icn_active-speakers-dot-lvl0.tga/>
323 <ff_edit_mine_button.tga value="57f05b46-63d8-c3d5-66d6-8b915746b956"/> 236 <icn_active-speakers-dot-lvl1.tga/>
324 <ff_online_status_button.tga value="3b1b6a53-9c8c-568a-22c5-2a8f3e5286f5"/> 237 <icn_active-speakers-dot-lvl2.tga/>
325 <ptt_lock_on.tga value="e0c447a5-87dd-4778-bedb-0ccab01fe078"/> 238 <icn_active-speakers-typing1.tga/>
326 <ptt_lock_off.tga value="1de17e87-b392-4a7d-80d1-852e1e518ff0"/> 239 <icn_active-speakers-typing2.tga/>
327 <oi_hud_cen_0_0.tga value="3c650257-9caf-7cad-b26c-84c9eca560f1"/> 240 <icn_active-speakers-typing3.tga/>
328 <oi_hud_intro.tga value="7611fb3d-9ff2-abd3-d98f-805c1c87e757"/> 241 <icn_voice_ptt-off.tga/>
329 <oi_hud_underwater.tga value="cde61aea-83c2-3001-d598-6b348f7a8e0b"/> 242 <icn_voice_ptt-on.tga/>
330 <oi_hud_got_passport.tga value="1271838d-d777-b811-7c4c-2a00308bd80a"/> 243 <icn_voice_ptt-on-lvl1.tga/>
331 <oi_hud_texture_off_edge.tga value="852be205-b1ea-6356-58c8-8c5ee5a841a6"/> 244 <icn_voice_ptt-on-lvl2.tga/>
332 <oi_hud_texture_on_edge.tga value="ab11e6ff-a732-be70-67df-c43131274562"/> 245 <icn_voice_ptt-on-lvl3.tga/>
333 <oi_hud_flyingabovewater.tga value="c9d150d6-2739-5f8b-cce6-3cf98242920a"/> 246 <icn_voice-call-end.tga/>
334 <oi_hud_walkingabovewater.tga value="78284eeb-05f3-ff25-11a0-3cc9dbb30f0c"/> 247 <icn_voice-call-start.tga/>
335 <oi_hud_landmark.tga value="6cd9c221-9d42-a283-256b-09a113a87271"/> 248 <mute_icon.tga/>
336 <oi_hud_cus_5_3.tga value="7c12f4fb-f502-26d1-a2f3-cdb6aff61663"/> 249 <icn_slide-groove_dark.tga>
337 <oi_hud_cus_5_2.tga value="c52c9c94-adc0-0f4e-6658-ed33d6ea8829"/> 250 <scale_rect left="2" top="5" right="29" bottom="4"/>
338 <oi_hud_cus_5_1.tga value="9f6d5d11-6ca9-608c-e8a6-b77989350292"/> 251 </icn_slide-groove_dark.tga>
339 <oi_hud_cus_5_0.tga value="2000cff1-119f-2023-66c0-ac5630d2f96e"/> 252 <icn_slide-highlight.tga>
340 <oi_hud_cus_4_5.tga value="f302a935-ccd1-e2f5-3a38-e185cc262f3a"/> 253 <scale_rect left="2" top="5" right="29" bottom="4"/>
341 <oi_hud_cus_4_3.tga value="af8d5b3c-b40f-cea5-b0b2-440fbd84a11a"/> 254 </icn_slide-highlight.tga>
342 <oi_hud_cus_4_2.tga value="11b26901-8207-12bc-5224-10a12ac4c651"/> 255 <icn_slide-thumb_dark.tga>
343 <oi_hud_cus_4_1.tga value="41baadb7-1b94-907e-9443-54e92bba77cd"/> 256 <scale_rect left="2" top="5" right="29" bottom="4"/>
344 <oi_hud_cus_4_0.tga value="9d627f8e-092c-5d32-6c12-ef76ab81cedc"/> 257 </icn_slide-thumb_dark.tga>
345 <oi_hud_cus_3_4.tga value="b196486e-d0d2-4fd7-529a-c84b4495fc74"/> 258 <icn_speaker-muted_dark.tga/>
346 <oi_hud_cus_3_2.tga value="0b81c4bb-de33-e493-7bcb-e7221d97e5e7"/> 259 <icn_speaker_dark.tga/>
347 <oi_hud_cus_3_1.tga value="436dab74-25ae-8b60-c648-50663b7faa1d"/> 260 <icn_voice-localchat.tga/>
348 <oi_hud_cus_3_0.tga value="6c1594de-1e66-273c-a2ab-8f0ffa8b4633"/> 261 <icn_voice-groupfocus.tga/>
349 <oi_hud_cus_2_4.tga value="bb31fe48-8566-eec0-e96b-64025f832b63"/> 262 <icn_voice-pvtfocus.tga/>
350 <oi_hud_cus_2_2.tga value="c946959a-26ae-eb66-efa0-20154057789d"/> 263 <icn_media-pause.tga/>
351 <oi_hud_cus_2_1.tga value="c946959a-26ae-eb66-efa0-20154057789d"/> 264 <icn_media-play.tga/>
352 <oi_hud_cus_2_0.tga value="d7833106-b4a8-7666-bde1-64886de289f9"/> 265 <icn_music-play.tga/>
353 <oi_hud_cus_1_0.tga value="811ded22-5940-940c-4821-6fbbfb6611d6"/> 266 <icn_music-pause.tga/>
354 <oi_hud_cus_1_1.tga value="eda8513b-a343-5109-1fd6-f1c7ad89b703"/> 267 <icn_media_web.tga preload="true"/>
355 <oi_hud_cus_1_2.tga value="7a4ce18c-e715-34d4-dfee-704c270a8ac8"/> 268 <icn_media_movie.tga preload="true"/>
356 <oi_hud_cus_1_4.tga value="d3771c15-ac03-b762-b992-d9fd2fedf38a"/> 269 <icn_chatbar.tga/>
357 <oi_hud_com_4_4.tga value="d9e1e90d-3cc3-6269-128e-67f7a2b32d26"/> 270 <btn_chatbar.tga>
358 <oi_hud_com_4_2.tga value="0f649a26-6fdb-c73b-ffac-e50fc311d5ce"/> 271 <scale_rect left="16" top="24" right="48" bottom="0"/>
359 <oi_hud_com_4_1.tga value="ae5b1ce6-a2d2-22d2-f532-6280b3bc6adb"/> 272 </btn_chatbar.tga>
360 <oi_hud_com_4_0.tga value="12cda3a0-58c7-dfa8-7f9b-380e5bb8baf9"/> 273 <btn_chatbar_selected.tga>
361 <oi_hud_com_3_4.tga value="ff326257-0530-356a-e0f8-be535044e540"/> 274 <scale_rect left="16" top="24" right="48" bottom="0"/>
362 <oi_hud_com_3_2.tga value="66740ddb-1d56-89f9-f0c9-ae5eb7bb9537"/> 275 </btn_chatbar_selected.tga>
363 <oi_hud_com_3_1.tga value="55d662f4-6a28-6388-7c75-af1c9fd33055"/> 276 <icn_rounded-text-field.tga/>
364 <oi_hud_com_3_0.tga value="de9d318f-b69e-82f9-0c61-43b868c5ca6b"/> 277
365 <oi_hud_com_2_4.tga value="01d47e68-400a-d0e1-afb7-d6806d1d477e"/> 278 <flyout_btn_right_selected.tga>
366 <oi_hud_com_2_0.tga value="09c98850-27d4-6a12-abae-4af4bba23b6b"/> 279 <scale_rect left="6" top="12" right="26" bottom="12"/>
367 <oi_hud_com_1_3.tga value="5c2049b9-f797-6608-ca71-758f3716aa90"/> 280 </flyout_btn_right_selected.tga>
368 <oi_hud_com_1_1.tga value="1116ff68-cdc4-1cfc-e137-30f8426afeda"/> 281 <flyout_btn_right.tga>
369 <oi_hud_com_1_0.tga value="bd847d31-f5af-95f7-2b9c-af47d8ba53bd"/> 282 <scale_rect left="6" top="12" right="26" bottom="12"/>
370 <oi_hud_nav_4_5.tga value="66194280-b087-db94-35d9-41e8f7518515"/> 283 </flyout_btn_right.tga>
371 <oi_hud_nav_4_4.tga value="180c4241-e309-4c05-13ee-9080ab69498d"/> 284 <flyout_btn_right_disabled.tga>
372 <oi_hud_nav_4_3.tga value="e98a6ba6-99c6-fa15-84b6-9afadea6c467"/> 285 <scale_rect left="6" top="12" right="122" bottom="12"/>
373 <oi_hud_nav_4_2.tga value="2e19f352-1893-59a9-949b-4d2cfd3a8222"/> 286 </flyout_btn_right_disabled.tga>
374 <oi_hud_nav_4_1.tga value="13a1675b-fb5a-19b3-b5a3-74b0a6765f7d"/> 287 <flyout_btn_left_selected.tga>
375 <oi_hud_nav_4_0.tga value="e7526e8d-b085-b26c-b0ae-2708ec231401"/> 288 <scale_rect left="6" top="12" right="122" bottom="12"/>
376 <oi_hud_nav_3_5.tga value="5e67b0d0-29a2-6a08-c85e-b12d59e53d6e"/> 289 </flyout_btn_left_selected.tga>
377 <oi_hud_nav_3_4.tga value="2ed8fbc2-5c4d-53c2-b289-88baffceab1a"/> 290 <flyout_btn_left.tga>
378 <oi_hud_nav_3_3.tga value="e0a72f1a-282e-1c1a-2cb7-6423feb41759"/> 291 <scale_rect left="6" top="12" right="122" bottom="12"/>
379 <oi_hud_nav_3_2.tga value="4bcebb23-da5e-47d9-eac1-e4453f762c8c"/> 292 </flyout_btn_left.tga>
380 <oi_hud_nav_3_1.tga value="6ac87575-330e-3a2d-3b80-a34e7b277e50"/> 293 <flyout_btn_left_disabled.tga>
381 <oi_hud_nav_3_0.tga value="f1451e8e-7310-9152-47d5-5d037c28fef3"/> 294 <scale_rect left="6" top="12" right="122" bottom="12"/>
382 <oi_hud_nav_2_6.tga value="c60b42ff-ee60-98e4-e603-ca2470141d4b"/> 295 </flyout_btn_left_disabled.tga>
383 <oi_hud_nav_2_5.tga value="a02b5a1a-bbdb-5556-ae5b-a2e68494755a"/> 296
384 <oi_hud_nav_2_4.tga value="625535ab-8abf-b3e7-48fb-43f728b77c79"/> 297 <UIImgResizeBottomRightUUID file_name="resize_handle_bottom_right_blue.tga"/>
385 <oi_hud_nav_2_3.tga value="00a609c3-5750-3b5a-3ce3-458bdf632203"/> 298
386 <oi_hud_nav_2_2.tga value="94903387-d37f-092c-e4d2-c190f68577b8"/> 299 <UIImgBtnForwardOutUUID file_name="move_forward_out.tga" preload="true"/>
387 <oi_hud_nav_2_1.tga value="ee0cd82c-6ce8-8e73-307b-6d0dc77b19e8"/> 300 <UIImgBtnForwardInUUID file_name="move_forward_in.tga" preload="true"/>
388 <oi_hud_nav_2_0.tga value="3e10b379-ed2c-7424-1fe7-bef3558c7536"/> 301 <UIImgBtnSlideLeftOutUUID file_name="move_left_out.tga" preload="true"/>
389 <oi_hud_nav_1_4.tga value="bf8d0be8-2012-1664-3ea5-e69a71c206e9"/> 302 <UIImgBtnSlideLeftInUUID file_name="move_left_in.tga" preload="true"/>
390 <oi_hud_nav_1_2.tga value="72100f87-18a7-fc4a-4793-de281e8b02cc"/> 303 <UIImgBtnLeftOutUUID file_name="move_turn_left_out.tga" preload="true"/>
391 <oi_hud_nav_1_1.tga value="b048faf3-60ce-c3a2-d034-36613449d377"/> 304 <UIImgBtnLeftInUUID file_name="move_turn_left_in.tga" preload="true"/>
392 <oi_hud_nav_1_0.tga value="0ad45106-3b26-6448-0b90-feae8bd46c38"/> 305 <UIImgBtnRightOutUUID file_name="move_turn_right_out.tga" preload="true"/>
393 <oi_hud_mov_4_5.tga value="7c4a45c2-37dd-312c-c6ab-20896dd0a5a6"/> 306 <UIImgBtnRightInUUID file_name="move_turn_right_in.tga" preload="true"/>
394 <oi_hud_mov_4_3.tga value="8a88da1c-3735-c71e-d48a-016df0798de4"/> 307 <UIImgBtnSlideRightOutUUID file_name="move_right_out.tga" preload="true"/>
395 <oi_hud_mov_4_2.tga value="f55ae4d3-7d6a-e6ac-4cf7-03014ce14390"/> 308 <UIImgBtnSlideRightInUUID file_name="move_right_in.tga" preload="true"/>
396 <oi_hud_mov_4_1.tga value="1cc3fcf1-35c0-e222-27d2-6905cf5c4cee"/> 309 <UIImgBtnMoveUpInUUID file_name="move_up_in.tga" preload="true"/>
397 <oi_hud_mov_4_0.tga value="1ae592dc-46f4-616e-b7c6-0dff3e6f40e5"/> 310 <UIImgBtnMoveUpOutUUID file_name="move_up_out.tga" preload="true"/>
398 <oi_hud_mov_3_4.tga value="831b39be-99fc-45bd-ba85-708f9dc93bfd"/> 311 <UIImgBtnMoveDownInUUID file_name="move_down_in.tga" preload="true"/>
399 <oi_hud_mov_3_2.tga value="9f7e7373-92a9-d66a-ad5a-afb55ca6ac1f"/> 312 <UIImgBtnMoveDownOutUUID file_name="move_down_out.tga" preload="true"/>
400 <oi_hud_mov_3_1.tga value="ab37ed0d-7e66-1f77-3acf-b0fe4b74dbe8"/> 313
401 <oi_hud_mov_3_0.tga value="f5ff1f08-4c92-8606-1854-cc5b9d3e445c"/> 314 <UIImgBtnScrollUpOutUUID file_name="scrollbutton_up_out_blue.tga"/>
402 <oi_hud_mov_1_2.tga value="1e3abeed-e893-c44e-1f9d-5ecc76d21e5d"/> 315 <UIImgBtnScrollUpInUUID file_name="scrollbutton_up_in_blue.tga"/>
403 <oi_hud_mov_1_0.tga value="e300fc95-aa94-8e31-c501-ce903cac8b7c"/> 316 <UIImgBtnScrollDownOutUUID file_name="scrollbutton_down_out_blue.tga"/>
404 <eng_lng_1_0.jpg value="5fcaac05-0677-b208-e715-983ebf01d16f"/> 317 <UIImgBtnScrollDownInUUID file_name="scrollbutton_down_in_blue.tga"/>
405 <circle.tga value="0498c309-5306-43cd-82a2-ae31d096cdef"/> 318 <UIImgBtnScrollLeftOutUUID file_name="scrollbutton_left_out_blue.tga"/>
406 <mute_icon.tga value="37c8e000-6aa2-41ef-8f86-e0c2e60bfa42"/> 319 <UIImgBtnScrollLeftInUUID file_name="scrollbutton_left_in_blue.tga"/>
407 <active_speakers.tga value="c97bdfb5-b0da-4741-877c-7c1553957d30"/> 320 <UIImgBtnScrollRightOutUUID file_name="scrollbutton_right_out_blue.tga"/>
408 <active_voice_tab.tga value="33281629-74b3-4b0e-98e7-a6383eb277fa"/> 321 <UIImgBtnScrollRightInUUID file_name="scrollbutton_right_in_blue.tga"/>
409 <music_icon.tga value="9de3ef3d-ab90-4963-be15-ae77a122a484"/> 322
410 <media_icon.tga value="9724ad2b-b0ec-4b8c-9558-73f36661db26"/> 323 <UIImgBtnJumpLeftOutUUID file_name="3c18c87e-5f50-14e2-e744-f44734aa365f.tga"/>
411 <icn_active-speakers-dot-lvl0.tga value="73577b7b-19c3-4050-a19d-36bc2408aa79"/> 324 <UIImgBtnJumpLeftInUUID file_name="9cad3e6d-2d6d-107d-f8ab-5ba272b5bfe1.tga"/>
412 <icn_active-speakers-dot-lvl1.tga value="8f761ce3-5939-4d3a-8991-00064fdfacf9"/> 325 <UIImgBtnJumpRightOutUUID file_name="ff9a71eb-7414-4cf8-866e-a701deb7c3cf.tga"/>
413 <icn_active-speakers-dot-lvl2.tga value="0e82d24e-ed45-41bc-b090-94c97c1caab2"/> 326 <UIImgBtnJumpRightInUUID file_name="7dabc040-ec13-2309-ddf7-4f161f6de2f4.tga"/>
414 <icn_active-speakers-typing1.tga value="f9bbb2fe-584b-4c01-86fc-599c69534c1b"/> 327
415 <icn_active-speakers-typing2.tga value="e3369e02-93e1-43dc-b9c0-4533db0963d0"/> 328 <UIImgBtnSpinUpOutUUID file_name="spin_up_out_blue.tga"/>
416 <icn_active-speakers-typing3.tga value="13dd1d96-6836-461e-8a4c-36003065c59b"/> 329 <UIImgBtnSpinUpInUUID file_name="spin_up_in_blue.tga"/>
417 <icn_voice_ptt-off.tga value="ce19b99f-bd2d-4324-88ab-975c357f9e4e"/> 330 <UIImgBtnSpinDownOutUUID file_name="spin_down_out_blue.tga"/>
418 <icn_voice_ptt-on.tga value="67f672e1-576f-42ee-973f-c796cc8eefb1"/> 331 <UIImgBtnSpinDownInUUID file_name="spin_down_in_blue.tga"/>
419 <icn_voice_ptt-on-lvl1.tga value="24ebff50-ced7-4d52-8b74-77a5a901e701"/> 332
420 <icn_voice_ptt-on-lvl2.tga value="1a803501-0da7-4b80-80db-1f79a7842368"/> 333 <UIImgRadioActiveUUID file_name="radio_active_false.tga"/>
421 <icn_voice_ptt-on-lvl3.tga value="3342bfc4-0bd9-4c89-8e87-e5980aee00e5"/> 334 <UIImgRadioActiveSelectedUUID file_name="radio_active_true.tga"/>
422 <lag_status_good.tga value="e9f77149-a493-4a30-8a61-20428a580a46"/> 335 <UIImgRadioInactiveUUID file_name="radio_inactive_false.tga"/>
423 <lag_status_warning.tga value="197caaa6-30b1-4d9b-8bfa-65484346d322"/> 336 <UIImgRadioInactiveSelectedUUID file_name="radio_inactive_true.tga"/>
424 <lag_status_critical.tga value="e2c74120-e896-4952-bf9f-d70696e712a7"/> 337
425 <icn_voice-call-end.tga value="4e098514-89bb-4247-89c3-3ec86b9816d0"/> 338 <UIImgCheckboxActiveUUID file_name="checkbox_enabled_false.tga"/>
426 <icn_voice-call-start.tga value="4ae2166c-8558-497d-b221-b45513ed8adf"/> 339 <UIImgCheckboxActiveSelectedUUID file_name="checkbox_enabled_true.tga"/>
427 <icn-overlay_volume-panel.tga value="43f0a590-f3d3-48b5-b460-f5b3e6e03626"/> 340 <UIImgCheckboxInactiveUUID file_name="checkbox_disabled_false.tga"/>
428 <icn_slide-groove_dark.tga value="1e753359-d202-49a7-9d19-833683e0120c"/> 341 <UIImgCheckboxInactiveSelectedUUID file_name="checkbox_disabled_true.tga"/>
429 <icn_slide-highlight.tga value="71d6fb98-2167-4d53-a419-0c534488064d"/> 342
430 <icn_slide-thumb_dark.tga value="d27de39d-7c2d-4c8a-b1a5-520208f1abdf"/> 343 <UIImgBtnTabTopOutUUID file_name="tab_top_blue.tga"/>
431 <icn_speaker-muted_dark.tga value="26231899-b12b-45c6-9638-f460ea507a7c"/> 344 <UIImgBtnTabTopInUUID file_name="tab_top_selected_blue.tga"/>
432 <icn_speaker_dark.tga value="138403da-2622-4728-893b-8f6cb1eda176"/> 345 <UIImgBtnTabBottomOutUUID file_name="tab_bottom_blue.tga"/>
433 <icn_voice-localchat.tga value="0bcfbf8a-f366-4459-b0f6-9bc42977c2df"/> 346 <UIImgBtnTabBottomInUUID file_name="tab_bottom_selected_blue.tga"/>
434 <icn_voice-groupfocus.tga value="157d8dea-d5b9-457a-8f0e-af840029d9ea"/> 347
435 <icn_voice-pvtfocus.tga value="745c2927-ea6d-4e70-ba66-3c125ed08d9b"/> 348 <UIImgGrabUUID file_name="c63f124c-6340-4fbf-b59e-0869a44adb64.tga"/>
436 <icn_media-pause_active.tga value="c972e319-803b-421c-9f64-e33e67bbbe38"/> 349 <UIImgGrabSelectedUUID file_name="c1e21504-f136-451d-b8e9-929037812f1d.tga"/>
437 <icn_media-pause_disabled.tga value="c50debb7-1543-4bde-b1b5-9e5de1863a91"/> 350
438 <icn_media-pause_enabled.tga value="080fbe76-b155-432a-acbe-7ebb0accf4b6"/> 351 <!--<UIImgScaleUUID file_name="88a90fef-b448-4883-9344-ecf378a60433.tga"/>-->
439 <icn_media-play_active.tga value="ae08235b-cd86-4615-aa32-19e2d152b8df"/> 352
440 <icn_media-play_disabled.tga value="52392317-1608-4525-9216-020d4ae71e73"/> 353 <UIImgFaceUUID file_name="ce15fd63-b0b6-463c-a37d-ea6393208b3e.tga"/>
441 <icn_media-play_enabled.tga value="0245bea4-7db4-422a-8a85-7b1b83630f1a"/> 354 <UIImgFaceSelectedUUID file_name="b4870163-6208-42a9-9801-93133bf9a6cd.tga"/>
442 <icn_media-stop_active.tga value="5750810e-9e14-448c-b196-6b0bec30f088"/> 355
443 <icn_media-stop_disabled.tga value="da351b9f-e1cd-49ee-871c-866c11c8d3c5"/> 356 <UIImgCreateUUID file_name="7a0b1bdb-b5d9-4df5-bac2-ba230da93b5b.tga"/>
444 <icn_media-stop_enabled.tga value="e216379e-48ca-4149-afd1-abcc8642ec91"/> 357 <UIImgCreateSelectedUUID file_name="0098b015-3daf-4cfe-a72f-915369ea97c2.tga"/>
445 <icn_media.tga value="558ea4a7-1eff-4897-83ac-bd3081561109"/> 358
446 <icn_music.tga value="4de02b4c-8e16-47b1-9865-311ea58ae106"/> 359 <UIImgBtnCloseInactiveUUID file_name="close_inactive_blue.tga"/>
447 <icn_media_web.tga value="63d12b74-2c40-4dda-b7da-9a7fe0f87a8a"/> 360 <UIImgBtnCloseActiveUUID file_name="closebox.tga"/>
448 <icn_chatbar.tga value="e307dc85-9908-4b07-a639-60af8cf78739" /> 361 <UIImgBtnClosePressedUUID file_name="close_in_blue.tga"/>
449 <btn_chatbar.tga value="e6b15e8e-04c7-447f-aa66-f45c42c3bbc0" /> 362 <icn_clear_lineeditor.tga />
450 <btn_chatbar_selected.tga value="dafd367e-290a-4f55-a555-fbfffb191598" /> 363 <icn_scrollbar_thumb.tga preload="true">
451 <arrow_down.tga value="82125c62-ee7a-4854-872e-cf6e3e0107b8" /> 364 <scale_rect top="7" left="4" bottom="8" right="4" />
452 <arrow_up.tga value="2cb924dc-4adb-4a09-87e1-ab47e50a9bc0" /> 365</icn_scrollbar_thumb.tga>
453 <icn_rounded-text-field.tga value="1d5c38e5-1a3d-4e99-9349-196546f0f075" /> 366 <icn_scrollbar_bg.tga preload="true">
454 <flyout_btn_right_selected.tga value="9e23d9e1-82c0-4483-995f-edbb4b87ce21" /> 367 <scale_rect top="7" left="4" bottom="8
455 <flyout_btn_right.tga value="8f2b1112-b2fd-4589-9e69-7cf8634d75a7" /> 368 " right="4" />
456 <flyout_btn_left_selected.tga value="bcab2966-50c8-4142-8077-00ea9e400f22" /> 369</icn_scrollbar_bg.tga>
457 <flyout_btn_left.tga value="cae5d9a7-4bf0-4d47-8633-751e9a8f7539" /> 370
371 <UIImgBtnMinimizeInactiveUUID file_name="minimize_inactive.tga"/>
372 <UIImgBtnMinimizeActiveUUID file_name="minimize.tga"/>
373 <UIImgBtnMinimizePressedUUID file_name="minimize_pressed.tga"/>
374
375 <UIImgBtnRestoreInactiveUUID file_name="restore_inactive.tga"/>
376 <UIImgBtnRestoreActiveUUID file_name="restore.tga"/>
377 <UIImgBtnRestorePressedUUID file_name="restore_pressed.tga"/>
378
379 <UIImgBtnTearOffInactiveUUID file_name="tearoffbox.tga"/>
380 <UIImgBtnTearOffActiveUUID file_name="tearoffbox.tga"/>
381 <UIImgBtnTearOffPressedUUID file_name="tearoff_pressed.tga"/>
382
383 <UIImgCrosshairsUUID file_name="crosshairs.tga"/>
384 <icn_label_music.tga/>
385 <icn_label_media.tga/>
458</textures> 386</textures>
diff --git a/linden/indra/newview/skins/xui/de/floater_about_land.xml b/linden/indra/newview/skins/xui/de/floater_about_land.xml
index 62664c7..7ce63ec 100644
--- a/linden/indra/newview/skins/xui/de/floater_about_land.xml
+++ b/linden/indra/newview/skins/xui/de/floater_about_land.xml
@@ -551,9 +551,12 @@ ersetzen:
551 </text> 551 </text>
552 <button label="Hinzufügen..." label_selected="Hinzufügen..." name="add_allowed" /> 552 <button label="Hinzufügen..." label_selected="Hinzufügen..." name="add_allowed" />
553 <button label="Entfernen" label_selected="Entfernen" name="remove_allowed" /> 553 <button label="Entfernen" label_selected="Entfernen" name="remove_allowed" />
554 <check_box label="Verbannen" name="AccessCheck"> 554 <check_box label="Verbannen" name="BanCheck">
555 Verbannte Einwohner 555 Verbannte Einwohner
556 </check_box> 556 </check_box>
557 <check_box label="Zulassen" name="AccessCheck">
558 Zulässige Einwohner
559 </check_box>
557 <name_list name="AccessList" tool_tip="([LISTED] angezeigt, max. [MAX])"> 560 <name_list name="AccessList" tool_tip="([LISTED] angezeigt, max. [MAX])">
558 <column label="Allowed Residents" name="name" /> 561 <column label="Allowed Residents" name="name" />
559 </name_list> 562 </name_list>
diff --git a/linden/indra/newview/skins/xui/de/floater_critical.xml b/linden/indra/newview/skins/xui/de/floater_critical.xml
index 0b14792..a5589e7 100644
--- a/linden/indra/newview/skins/xui/de/floater_critical.xml
+++ b/linden/indra/newview/skins/xui/de/floater_critical.xml
@@ -2,9 +2,6 @@
2<floater name="modal container" title=" "> 2<floater name="modal container" title=" ">
3 <button label="Weiter" label_selected="Weiter" name="Continue" /> 3 <button label="Weiter" label_selected="Weiter" name="Continue" />
4 <button label="Abbrechen" label_selected="Abbrechen" name="Cancel" /> 4 <button label="Abbrechen" label_selected="Abbrechen" name="Cancel" />
5 <text name="tos_title">
6 Kritische Nachricht
7 </text>
8 <text name="tos_heading"> 5 <text name="tos_heading">
9 Lesen Sie folgenden Text bitte sorgfältig durch. 6 Lesen Sie folgenden Text bitte sorgfältig durch.
10 </text> 7 </text>
diff --git a/linden/indra/newview/skins/xui/de/floater_friends.xml b/linden/indra/newview/skins/xui/de/floater_friends.xml
deleted file mode 100644
index fc03e38..0000000
--- a/linden/indra/newview/skins/xui/de/floater_friends.xml
+++ /dev/null
@@ -1,35 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="friends" title="Freunde">
3 <scroll_list name="friend_list"
4 tool_tip="Hold shift or control while clicking to select multiple friends">
5 <column label="Name" name="friend_name" />
6 </scroll_list>
7 <panel name="rights_container">
8 <text name="friend_name_label">
9 Wählen Sie den/die Freund(e) aus, dessen/deren Rechte Sie ändern möchten...
10 </text>
11 <check_box label="Kann meinen Online-Status sehen" name="online_status_cb"
12 tool_tip="Festlegen, ob dieser Freund meinen Online-Status auf seiner Freundesliste oder Visitenkarte einsehen kann" />
13 <check_box label="Kann mich auf der Karte sehen" name="map_status_cb"
14 tool_tip="Festlegen, ob dieser Freund auf seiner Karte meinen Standort sehen kann" />
15 <check_box label="Kann meine Objekte verändern" name="modify_status_cb"
16 tool_tip="Festlegen, ob dieser Freund meine Objekte verändern kann" />
17 <text name="process_rights_label">
18 Rechte werden geändert...
19 </text>
20 </panel>
21 <button label="IM/Anruf" name="im_btn" tool_tip="Beginnt eine Instant Message-Sitzung" />
22 <button label="Teleport..." name="offer_teleport_btn"
23 tool_tip="Bieten Sie diesem Freund einen Teleport an Ihre Position an" />
24 <button label="Hinzufügen..." name="add_btn"
25 tool_tip="Bieten Sie einem Einwohner die Freundschaft an" />
26 <button label="Profil" name="profile_btn"
27 tool_tip="Bilder, Gruppen und andere Informationen anzeigen" />
28 <button label="Zahlen..." name="pay_btn"
29 tool_tip="Diesem Freund Linden-Dollar (L$) geben" />
30 <button label="Entfernen..." name="remove_btn"
31 tool_tip="Diese Person von Ihrer Freundesliste entfernen" />
32 <text name="Multiple">
33 Mehrere Freunde...
34 </text>
35</floater>
diff --git a/linden/indra/newview/skins/xui/de/floater_groups.xml b/linden/indra/newview/skins/xui/de/floater_groups.xml
deleted file mode 100644
index 70c7d4f..0000000
--- a/linden/indra/newview/skins/xui/de/floater_groups.xml
+++ /dev/null
@@ -1,19 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="groups" title="Gruppen">
3 <text type="string" length="1" name="groupdesc">
4 Die derzeit aktive Gruppe ist fett hervorgehoben.
5 </text>
6 <scroll_list name="group list">
7 <column label="" name="name" />
8 </scroll_list>
9 <text type="string" length="1" name="groupcount">
10 Sie sind Mitglied bei [COUNT] Gruppen (von max. [MAX]).
11 </text>
12 <button label="IM/Anruf" name="IM" tool_tip="Beginnt eine Instant Message-Sitzung" />
13 <button label="Aktivieren" label_selected="Aktivieren" name="Activate" />
14 <button label="Info" label_selected="Info" name="Info" />
15 <button label="Verlassen" label_selected="Verlassen" name="Leave" />
16 <button label="Erstellen..." label_selected="Erstellen" name="Create" />
17 <button label="Suchen..." label_selected="Suchen..." name="Search..." />
18 <button label="Schließen" label_selected="Schließen" name="Close" />
19</floater>
diff --git a/linden/indra/newview/skins/xui/de/floater_instant_message_ad_hoc.xml b/linden/indra/newview/skins/xui/de/floater_instant_message_ad_hoc.xml
index 02ed913..4b0719c 100644
--- a/linden/indra/newview/skins/xui/de/floater_instant_message_ad_hoc.xml
+++ b/linden/indra/newview/skins/xui/de/floater_instant_message_ad_hoc.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<floater label="(unbekannt)" name="im_floater" title="(unbekannt)"> 2<floater label="(unbekannt)" name="im_floater" title="(unbekannt)">
3 <layout_stack name=""> 3 <layout_stack name="panels">
4 <layout_panel name="im_contents_panel"> 4 <layout_panel name="im_contents_panel">
5 <button label="Anrufen" name="start_call_btn" /> 5 <button label="Anrufen" name="start_call_btn" />
6 <button label="Anruf beenden" name="end_call_btn" /> 6 <button label="Anruf beenden" name="end_call_btn" />
diff --git a/linden/indra/newview/skins/xui/de/floater_instant_message_group.xml b/linden/indra/newview/skins/xui/de/floater_instant_message_group.xml
index 8379644..118276e 100644
--- a/linden/indra/newview/skins/xui/de/floater_instant_message_group.xml
+++ b/linden/indra/newview/skins/xui/de/floater_instant_message_group.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<floater label="(unbekannt)" name="im_floater" title="(unbekannt)"> 2<floater label="(unbekannt)" name="im_floater" title="(unbekannt)">
3 <layout_stack name=""> 3 <layout_stack name="panels">
4 <layout_panel name="im_contents_panel"> 4 <layout_panel name="im_contents_panel">
5 <button label="Gruppeninfo..." name="group_info_btn" /> 5 <button label="Gruppeninfo..." name="group_info_btn" />
6 <button label="Gespräch beitreten" name="start_call_btn" /> 6 <button label="Gespräch beitreten" name="start_call_btn" />
diff --git a/linden/indra/newview/skins/xui/de/floater_joystick.xml b/linden/indra/newview/skins/xui/de/floater_joystick.xml
index f1404ba..8b4b7a5 100644
--- a/linden/indra/newview/skins/xui/de/floater_joystick.xml
+++ b/linden/indra/newview/skins/xui/de/floater_joystick.xml
@@ -1,54 +1,3 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater label="Direkt-Zoom" name="build options floater" title="Flycam-Optionen"> 2<floater name="Joystick">
3 <text name="x-axis">
4 X-Achse
5 </text>
6 <text name="y-axis">
7 Y-Achse
8 </text>
9 <text name="z-axis">
10 Z-Achse
11 </text>
12 <spinner label="Textur" name="FlycamAxis1" />
13 <spinner label="Textur" name="FlycamAxis2" />
14 <spinner label="Textur" name="FlycamAxis0" />
15 <spinner label="Skalieren" name="FlycamAxisScale1" />
16 <spinner label="Skalieren" name="FlycamAxisScale2" />
17 <spinner label="Skalieren" name="FlycamAxisScale0" />
18 <spinner label="Tote Zone" name="FlycamAxisDeadZone1" />
19 <spinner label="Tote Zone" name="FlycamAxisDeadZone2" />
20 <spinner label="Tote Zone" name="FlycamAxisDeadZone0" />
21 <text name="yaw">
22 Gieren
23 </text>
24 <text name="pitch">
25 Neigen
26 </text>
27 <text name="roll">
28 Rollen
29 </text>
30 <spinner label="Textur" name="FlycamAxis5" />
31 <spinner label="Textur" name="FlycamAxis4" />
32 <spinner label="Textur" name="FlycamAxis3" />
33 <spinner label="Skalieren" name="FlycamAxisScale5" />
34 <spinner label="Skalieren" name="FlycamAxisScale4" />
35 <spinner label="Skalieren" name="FlycamAxisScale3" />
36 <spinner label="Tote Zone" name="FlycamAxisDeadZone5" />
37 <spinner label="Tote Zone" name="FlycamAxisDeadZone4" />
38 <spinner label="Tote Zone" name="FlycamAxisDeadZone3" />
39 <text name="ZoomLabel">
40 Zoom
41 </text>
42 <spinner label="Textur" name="FlycamAxis6" />
43 <spinner label="Skalieren" name="FlycamAxisScale6" />
44 <spinner label="Tote Zone" name="FlycamAxisDeadZone6" />
45 <slider label="Auslaufen" name="FlycamFeathering" />
46 <check_box label="Automatisch ausrichten" name="FlycamAutoLeveling" />
47 <check_box label="3D-Cursor" name="FlycamAbsolute" />
48 <text name="JoystickMonitor">
49 Joystick-Monitor
50 </text>
51 <text name="Axis">
52 Achse [NUM]
53 </text>
54</floater> 3</floater>
diff --git a/linden/indra/newview/skins/xui/de/floater_preview_new_landmark.xml b/linden/indra/newview/skins/xui/de/floater_preview_new_landmark.xml
deleted file mode 100644
index 9294508..0000000
--- a/linden/indra/newview/skins/xui/de/floater_preview_new_landmark.xml
+++ /dev/null
@@ -1,9 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="landmark_preview">
3 <button label="Teleportieren" label_selected="" name="Teleport btn" />
4 <button label="Auf Karte" label_selected="" name="Show on Map btn" />
5 <button label="Verwerfen" label_selected="" name="Discard btn" />
6 <text type="string" length="1" name="desc txt">
7 Beschreibung:
8 </text>
9</floater>
diff --git a/linden/indra/newview/skins/xui/de/floater_rate.xml b/linden/indra/newview/skins/xui/de/floater_rate.xml
deleted file mode 100644
index 1e57993..0000000
--- a/linden/indra/newview/skins/xui/de/floater_rate.xml
+++ /dev/null
@@ -1,44 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="rate" title="Ihre Bewertung für Jeska Linden">
3 <radio_group name="behavior">
4 <radio_item type="string" length="1" name="Positive">
5 Positiv
6 </radio_item>
7 <radio_item type="string" length="1" name="No Rating">
8 Keine Einstufung
9 </radio_item>
10 </radio_group>
11 <radio_group name="appearance">
12 <radio_item type="string" length="1" name="Positive">
13 Positiv
14 </radio_item>
15 <radio_item type="string" length="1" name="No Rating">
16 Keine Einstufung
17 </radio_item>
18 </radio_group>
19 <radio_group name="building">
20 <radio_item type="string" length="1" name="Positive">
21 Positiv
22 </radio_item>
23 <radio_item type="string" length="1" name="No Rating">
24 Keine Einstufung
25 </radio_item>
26 </radio_group>
27 <button label="OK" label_selected="OK" name="OK" />
28 <button label="Abbrechen" label_selected="Abbrechen" name="Cancel" />
29 <text type="string" length="1" name="Overall behavior:">
30 Gesamtverhalten:
31 </text>
32 <text type="string" length="1" name="Skill at appearance (clothing and attachments):">
33 Fähigkeit in Aussehen (Kleider und Anhänge):
34 </text>
35 <text type="string" length="1" name="Skill at building:">
36 Fähigkeit in Bauen:
37 </text>
38 <text type="string" length="1" name="Message:">
39 Nachricht:
40 </text>
41 <text type="string" length="1" name="cost">
42 Kosten: [COST] L$ für jede Einstufung. Summe: [TOTAL] L$.
43 </text>
44</floater>
diff --git a/linden/indra/newview/skins/xui/de/menu_viewer.xml b/linden/indra/newview/skins/xui/de/menu_viewer.xml
index 1e20642..d72e7b7 100644
--- a/linden/indra/newview/skins/xui/de/menu_viewer.xml
+++ b/linden/indra/newview/skins/xui/de/menu_viewer.xml
@@ -15,7 +15,6 @@
15 <menu_item_call label="Foto machen" name="Take Snapshot" /> 15 <menu_item_call label="Foto machen" name="Take Snapshot" />
16 <menu_item_call label="Foto auf Datenträger" name="Snapshot to Disk" /> 16 <menu_item_call label="Foto auf Datenträger" name="Snapshot to Disk" />
17 <menu_item_separator label="-----------" name="separator4" /> 17 <menu_item_separator label="-----------" name="separator4" />
18 <menu_item_call label="Film auf Datenträger starten/stoppen" name="Start/Stop Movie to Disk" />
19 <menu label="Fenstergröße einstellen" name="Set Window Size"> 18 <menu label="Fenstergröße einstellen" name="Set Window Size">
20 <menu_item_call label="320x240" name="320x240" /> 19 <menu_item_call label="320x240" name="320x240" />
21 <menu_item_call label="640x480" name="640x480" /> 20 <menu_item_call label="640x480" name="640x480" />
@@ -141,6 +140,7 @@
141 <menu_item_separator label="-----------" name="separator3" /> 140 <menu_item_separator label="-----------" name="separator3" />
142 <menu_item_call label="Als abwesend anzeigen" name="Set Away" /> 141 <menu_item_call label="Als abwesend anzeigen" name="Set Away" />
143 <menu_item_call label="Als beschäftigt anzeigen" name="Set Busy" /> 142 <menu_item_call label="Als beschäftigt anzeigen" name="Set Busy" />
143 <menu_item_call label="Alle Animationen stoppen" name="Stop All Animations" />
144 <menu_item_separator label="-----------" name="separator4" /> 144 <menu_item_separator label="-----------" name="separator4" />
145 <menu_item_call label="Kontostatistik..." name="Account History..." /> 145 <menu_item_call label="Kontostatistik..." name="Account History..." />
146 <menu_item_call label="Mein Konto verwalten..." name="Manage My Account..." /> 146 <menu_item_call label="Mein Konto verwalten..." name="Manage My Account..." />
@@ -195,7 +195,6 @@
195 <menu_item_call label="Verknüpfung" name="Link" /> 195 <menu_item_call label="Verknüpfung" name="Link" />
196 <menu_item_call label="Verknüpfung aufheben" name="Unlink" /> 196 <menu_item_call label="Verknüpfung aufheben" name="Unlink" />
197 <menu_item_separator label="-----------" name="separator4" /> 197 <menu_item_separator label="-----------" name="separator4" />
198 <menu_item_call label="Alle Animationen stoppen" name="Stop All Animations" />
199 <menu_item_separator label="-----------" name="separator5" /> 198 <menu_item_separator label="-----------" name="separator5" />
200 <menu_item_call label="Fokus auf Auswahl" name="Focus on Selection" /> 199 <menu_item_call label="Fokus auf Auswahl" name="Focus on Selection" />
201 <menu_item_call label="Auf Auswahl zoomen" name="Zoom to Selection" /> 200 <menu_item_call label="Auf Auswahl zoomen" name="Zoom to Selection" />
@@ -253,6 +252,15 @@
253 <menu_item_call label="Rempler, Stöße und Schläge..." name="Bumps, Pushes &amp;amp; Hits..." /> 252 <menu_item_call label="Rempler, Stöße und Schläge..." name="Bumps, Pushes &amp;amp; Hits..." />
254 <menu_item_call label="Lag-Anzeige" name="Lag Meter" /> 253 <menu_item_call label="Lag-Anzeige" name="Lag Meter" />
255 <menu_item_separator label="-----------" name="separator5" /> 254 <menu_item_separator label="-----------" name="separator5" />
255 <menu label="Fehlermeldungen" name="Bug Reporting">
256 <menu_item_call label="Allgemeiner Probleme-Tracker..." name="Public Issue Tracker..." />
257 <menu_item_call label="Hilfe zum Allgemeinen Probleme-Tracker..."
258 name="Publc Issue Tracker Help..." />
259 <menu_item_call label="Fehlermeldungs-1x1..." name="Bug Reporing 101..." />
260 <menu_item_call label="Sicherheitsfragen..." name="Security Issues..." />
261 <menu_item_call label="QA-Wiki..." name="QA Wiki..." />
262 <menu_item_call label="Fehler melden..." name="Report Bug..." />
263 </menu>
256 <menu_item_call label="Versionshinweise..." name="Release Notes..." /> 264 <menu_item_call label="Versionshinweise..." name="Release Notes..." />
257 <menu_item_separator label="-----------" name="separator6" /> 265 <menu_item_separator label="-----------" name="separator6" />
258 <menu_item_call label="Über Second Life..." name="About Second Life..." /> 266 <menu_item_call label="Über Second Life..." name="About Second Life..." />
diff --git a/linden/indra/newview/skins/xui/de/panel_friends.xml b/linden/indra/newview/skins/xui/de/panel_friends.xml
index 6e55ba3..771e0cf 100644
--- a/linden/indra/newview/skins/xui/de/panel_friends.xml
+++ b/linden/indra/newview/skins/xui/de/panel_friends.xml
@@ -32,7 +32,8 @@
32 tool_tip="Bilder, Gruppen und andere Informationen anzeigen" /> 32 tool_tip="Bilder, Gruppen und andere Informationen anzeigen" />
33 <button label="Teleport" name="offer_teleport_btn" 33 <button label="Teleport" name="offer_teleport_btn"
34 tool_tip="Bieten Sie diesem Freund einen Teleport an Ihre Position an" /> 34 tool_tip="Bieten Sie diesem Freund einen Teleport an Ihre Position an" />
35 <button label="Zahlen" name="pay_btn" tool_tip="Diesem Freund Linden-Dollar (L$) geben" /> 35 <button label="Zahlen" name="pay_btn"
36 tool_tip="Diesem Freund Linden-Dollar (L$) geben" />
36 <button label="Entfernen" name="remove_btn" 37 <button label="Entfernen" name="remove_btn"
37 tool_tip="Diese Person von Ihrer Freundesliste entfernen" /> 38 tool_tip="Diese Person von Ihrer Freundesliste entfernen" />
38 <button label="Hinzufügen" name="add_btn" 39 <button label="Hinzufügen" name="add_btn"
diff --git a/linden/indra/newview/skins/xui/de/panel_music_remote.xml b/linden/indra/newview/skins/xui/de/panel_music_remote.xml
deleted file mode 100644
index 7755b83..0000000
--- a/linden/indra/newview/skins/xui/de/panel_music_remote.xml
+++ /dev/null
@@ -1,15 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="music_remote">
3 <text type="string" length="6" name="text">
4 Musik
5 </text>
6 <volume_slider name="volume_slider" tool_tip="Ändern Sie die Lautstärke mit dem Regler" />
7 <button label="" label_selected="" name="stop_btn" tool_tip="Medienwiedergabe anhalten" />
8 <button label="" label_selected="" name="play_btn"
9 tool_tip="Gibt den Medienstream wieder" />
10 <button label="" label_selected="" name="pause_btn"
11 tool_tip="Pausiert den Medienstream" />
12 <button name="music_stop" tool_tip="Medienwiedergabe anhalten" />
13 <button name="music_play" tool_tip="Gibt den Medienstream wieder" />
14 <button name="music_pause" tool_tip="Pausiert den Medienstream" />
15</panel>
diff --git a/linden/indra/newview/skins/xui/de/panel_overlaybar.xml b/linden/indra/newview/skins/xui/de/panel_overlaybar.xml
index a899bd1..3559f82 100644
--- a/linden/indra/newview/skins/xui/de/panel_overlaybar.xml
+++ b/linden/indra/newview/skins/xui/de/panel_overlaybar.xml
@@ -11,8 +11,8 @@
11 <button label="Aufstehen" label_selected="Aufstehen" name="Stand Up" 11 <button label="Aufstehen" label_selected="Aufstehen" name="Stand Up"
12 tool_tip="Klicken Sie hier, um aufzustehen." /> 12 tool_tip="Klicken Sie hier, um aufzustehen." />
13 <layout_stack name="overlay_layout_panel"> 13 <layout_stack name="overlay_layout_panel">
14 <layout_panel name=""> 14 <layout_panel name="main_panel">
15 <layout_stack name=""> 15 <layout_stack name="chatbar_and_buttons">
16 <layout_panel name="state_buttons"> 16 <layout_panel name="state_buttons">
17 <button label="IM erhalten" label_selected="IM erhalten" name="IM Received" 17 <button label="IM erhalten" label_selected="IM erhalten" name="IM Received"
18 tool_tip="Sie haben eine unbeantwortete Instant Message. Klicken Sie, um IMs anzuzeigen." /> 18 tool_tip="Sie haben eine unbeantwortete Instant Message. Klicken Sie, um IMs anzuzeigen." />
diff --git a/linden/indra/newview/skins/xui/de/panel_preferences_graphics2.xml b/linden/indra/newview/skins/xui/de/panel_preferences_graphics2.xml
deleted file mode 100644
index fbe56b6..0000000
--- a/linden/indra/newview/skins/xui/de/panel_preferences_graphics2.xml
+++ /dev/null
@@ -1,59 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel label="Grafikdetails" name="Display panel 3">
3 <text type="string" length="1" name="text">
4 Shader:
5 </text>
6 <check_box label="Vertex-Shader aktivieren" name="shaders"
7 tool_tip="Deaktivieren Sie diese Option, wenn der Grafikkartentreiber Abstürze verursacht." />
8 <check_box label="Bumpmapping und Glanz aktivieren" name="bumpshiny" />
9 <check_box label="Wellen auf Wasser aktivieren" name="ripple" />
10 <check_box label="Avatar Vertexprogramm" name="avatarvp" />
11 <text type="string" length="1" name="Avatar Rendering:">
12 Avatar-Darstellung:
13 </text>
14 <radio_group name="Avatar Appearance">
15 <radio_item type="string" length="1" name="Normal">
16 Normal
17 </radio_item>
18 <radio_item type="string" length="1" name="Bump">
19 Mit Bumpmap
20 </radio_item>
21 <radio_item type="string" length="1" name="Cloth">
22 Mit Bumpmap &amp; Stoff
23 </radio_item>
24 </radio_group>
25 <text type="string" length="1" name="Lighting Detail:">
26 Beleuchtungsdetails:
27 </text>
28 <radio_group name="lighting detail radio">
29 <radio_item type="string" length="1" name="SunMoon">
30 Nur Sonne und Mond
31 </radio_item>
32 <radio_item type="string" length="1" name="LocalLights">
33 Lokale Lichtquellen
34 </radio_item>
35 </radio_group>
36 <text type="string" length="1" name="Terrain Detail:">
37 Terraindetails:
38 </text>
39 <radio_group name="terrain detail radio">
40 <radio_item type="string" length="1" name="0">
41 Niedrig
42 </radio_item>
43 <radio_item type="string" length="1" name="2">
44 Hoch
45 </radio_item>
46 </radio_group>
47 <text type="string" length="1" name="Object Mesh Detail:">
48 Objekt-Gitterdetails:
49 </text>
50 <text type="string" length="1" name="Flexible Mesh Detail:">
51 Flexible-Gitterdetails:
52 </text>
53 <text type="string" length="1" name="Tree Mesh Detail:">
54 Baum-Gitterdetails:
55 </text>
56 <text type="string" length="1" name="Avatar Mesh Detail:">
57 Avatar-Gitterdetails:
58 </text>
59</panel>
diff --git a/linden/indra/newview/skins/xui/de/panel_preferences_graphics3.xml b/linden/indra/newview/skins/xui/de/panel_preferences_graphics3.xml
deleted file mode 100644
index 5e55598..0000000
--- a/linden/indra/newview/skins/xui/de/panel_preferences_graphics3.xml
+++ /dev/null
@@ -1,54 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel label="Erw. Grafikdetails" name="Display panel 2">
3 <text type="string" length="1" name="Filtering:">
4 Filtern:
5 </text>
6 <check_box label="Anisotropische Filterung (langsamer, wenn aktiviert)" name="ani" />
7 <spinner label="Gamma:" name="gamma" />
8 <text type="string" length="1" name="(brightness, lower is brighter)">
9 (Helligkeit, niedriger ist heller, 0=Standard)
10 </text>
11 <spinner label="Helligkeit bei Nacht:" name="nighttime_brightness" />
12 <text type="string" length="1" name="(higher is brighter, 1.0 is default)">
13 (höher ist heller, 1.0 = Standard)
14 </text>
15 <text type="string" length="1" name="Enable VBO:">
16 VBO aktivieren:
17 </text>
18 <check_box label="OpenGL Vertex-Buffer-Objekte aktivieren" name="vbo"
19 tool_tip="Bei einigen OpenGL-Treibern kann diese Option zum Absturz führen." />
20 <text type="string" length="1" name="Graphics Card Memory:">
21 Grafikkartenspeicher:
22 </text>
23 <radio_group name="video card memory radio">
24 <radio_item type="string" length="1" name="radio">
25 16 MB
26 </radio_item>
27 <radio_item type="string" length="1" name="radio2">
28 32 MB
29 </radio_item>
30 <radio_item type="string" length="1" name="radio3">
31 64 MB
32 </radio_item>
33 <radio_item type="string" length="1" name="radio4">
34 128 MB
35 </radio_item>
36 <radio_item type="string" length="1" name="radio5">
37 256 MB
38 </radio_item>
39 <radio_item type="string" length="1" name="radio6">
40 512 MB
41 </radio_item>
42 </radio_group>
43 <spinner label="Nebeldistanzverhältnis:" name="fog" />
44 <spinner label="Max. Partikelzahl:" name="particles" />
45 <spinner label="Outfit-Grenzwert:" name="comp limit"
46 tool_tip="Anzahl der kürzlich geänderten Outfits für Anzeige" />
47 <text type="string" length="1" name="(lower is faster)">
48 (niedriger ist schneller)
49 </text>
50 <spinner label="Beacon-Breite:" name="debug beacon line width" />
51 <check_box label="Grafikhardware beim nächsten Start automatisch erkennen"
52 name="probe_hardware_checkbox"
53 tool_tip="Second Life konfiguriert einige Grafikeinstellungen automatisch auf Basis Ihrer Hardware. Wenn Sie neue Hardware installieren, sollten Sie diese von Second Life neu erkennen lassen." />
54</panel>
diff --git a/linden/indra/newview/skins/xui/de/panel_settings_chat.xml b/linden/indra/newview/skins/xui/de/panel_settings_chat.xml
deleted file mode 100644
index d8661f8..0000000
--- a/linden/indra/newview/skins/xui/de/panel_settings_chat.xml
+++ /dev/null
@@ -1,57 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="chat" title="Unterhaltung">
3 <text>
4 Chat-Schriftgröße:
5 </text>
6 <radio_group name="chat font size">
7 <radio_item>
8 Klein
9 </radio_item>
10 <radio_item>
11 Mittel
12 </radio_item>
13 <radio_item>
14 Groß
15 </radio_item>
16 </radio_group>
17 <text>
18 Chat-Farbe:
19 </text>
20 <color_swatch label="System" name="system" />
21 <color_swatch label="Benutzer" name="users" />
22 <color_swatch label="Objekte" name="objects" />
23 <color_swatch label="Blase" name="background" />
24 <text>
25 Chat-Konsole:
26 </text>
27 <spinner label="Chat ausblenden nach" name="fade_chat_time" />
28 <text>
29 (Sekunden)
30 </text>
31 <spinner label="" name="max_chat_count" />
32 <text>
33 (# Zeilen)
34 </text>
35 <slider label="Deckkraft" name="console_opacity" />
36 <text>
37 Chat-Optionen:
38 </text>
39 <check_box label="Chat verwendet volle Bildbreite (nach Neustart)"
40 name="chat_full_width_check" />
41 <check_box label="Chat nach Drücken der Eingabetaste schließen"
42 name="close_chat_on_return_check" />
43 <check_box label="Pfeiltasten bewegen Avatar beim Chatten"
44 name="arrow_keys_move_avatar_check" />
45 <check_box label="Zeitstempel in Chat anzeigen" name="show_timestamps_check" />
46 <text>
47 Blasen-Chat:
48 </text>
49 <check_box label="Chat-Blasen anzeigen" name="bubble_text_chat" />
50 <slider label="Deckkraft" name="bubble_chat_opacity" />
51 <text>
52 Skriptfehler:
53 </text>
54 <check_box label="Skriptfehler und Warnungen als normalen Chat anzeigen"
55 name="script_errors_as_chat" />
56 <color_swatch label="Farbe" name="script_error" />
57</panel>
diff --git a/linden/indra/newview/skins/xui/de/panel_settings_im.xml b/linden/indra/newview/skins/xui/de/panel_settings_im.xml
deleted file mode 100644
index 844362f..0000000
--- a/linden/indra/newview/skins/xui/de/panel_settings_im.xml
+++ /dev/null
@@ -1,13 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="im" title="IM">
3 <text>
4 IM-Optionen:
5 </text>
6 <check_box label="IM an E-Mail senden" name="send_im_to_email"
7 tool_tip="Ändern Sie Ihre E-Mail-Adresse auf secondlife.com" />
8 <check_box label="IM in Chat-Verlauf einschließen" name="include_im_in_chat_history" />
9 <check_box label="Zeitstempel in IM anzeigen" name="show_timestamps_check" />
10 <text>
11 Beschäftigt-Modus-Antwort:
12 </text>
13</panel>
diff --git a/linden/indra/newview/skins/xui/de/panel_settings_msgbox.xml b/linden/indra/newview/skins/xui/de/panel_settings_msgbox.xml
deleted file mode 100644
index fe5a592..0000000
--- a/linden/indra/newview/skins/xui/de/panel_settings_msgbox.xml
+++ /dev/null
@@ -1,12 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel label="Popups" name="popups" title="Popups">
3 <text>
4 Popups nicht anzeigen:
5 </text>
6 <button label="Dieses Popup aktivieren" name="enable_popup" />
7 <text>
8 Popups anzeigen:
9 </text>
10 <button label="&apos;Nächstes Mal zeigen&apos;-Dialoge zurücksetzen..."
11 name="reset_dialogs_btn" />
12</panel>
diff --git a/linden/indra/newview/skins/xui/de/panel_settings_network.xml b/linden/indra/newview/skins/xui/de/panel_settings_network.xml
deleted file mode 100644
index bc8b335..0000000
--- a/linden/indra/newview/skins/xui/de/panel_settings_network.xml
+++ /dev/null
@@ -1,56 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="network" title="Netzwerk">
3 <text>
4 Maximale Bandbreite:
5 </text>
6 <slider label="" name="max_bandwidth" />
7 <text>
8 kbit/s (Kilobit pro Sekunde)
9 </text>
10 <text>
11 Größe Festplatten-Cache:
12 </text>
13 <radio_group name="disk cache">
14 <radio_item>
15 50 MB
16 </radio_item>
17 <radio_item>
18 200 MB
19 </radio_item>
20 <radio_item>
21 500 MB
22 </radio_item>
23 <radio_item>
24 1000 MB
25 </radio_item>
26 </radio_group>
27 <button label="Cache löschen/leeren" name="clear_cache" />
28 <text>
29 Proxy-Konfiguration:
30 </text>
31 <check_box label="Proxy verwenden" name="proxy_enabled" tool_tip="Proxy konfigurieren" />
32 <text>
33 Proxy:
34 </text>
35 <line_editor name="proxy_address" tool_tip="Name oder IP-Adresse des Proxys" />
36 <text>
37 Port:
38 </text>
39 <line_editor name="proxy_port" tool_tip="Die Port-Nummer des Proxys" />
40 <text>
41 Socken:
42 </text>
43 <radio_group name="socks_4_5">
44 <radio_item>
45 Socks v4
46 </radio_item>
47 <radio_item>
48 Socks v5
49 </radio_item>
50 </radio_group>
51 <text>
52 Kein Proxy:
53 </text>
54 <line_editor name="proxy_exclusions"
55 tool_tip="Namen oder IP-Adressen, für die kein Proxy verwendet werden soll" />
56</panel>
diff --git a/linden/indra/newview/skins/xui/de/panel_settings_web.xml b/linden/indra/newview/skins/xui/de/panel_settings_web.xml
deleted file mode 100644
index 626085b..0000000
--- a/linden/indra/newview/skins/xui/de/panel_settings_web.xml
+++ /dev/null
@@ -1,50 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="web" title="Web">
3 <check_box label="Externen Browser verwenden (Firefox, Safari, Internet Explorer)"
4 name="external_browser_check"
5 tool_tip="Externen Webbrowser für Hilfe, Weblinks usw. verwenden.\nIm Vollbildmodus nicht empfohlen." />
6 <text>
7 Browser-Homepage:
8 </text>
9 <line_editor name="home_page"
10 tool_tip="Die Webseite, die beim erstmaligen Öffnen des Second Life Webbrowsers geöffnet wird" />
11 <text>
12 Proxy-Konfiguration:
13 </text>
14 <check_box label="Proxy für internen Browser verwenden" name="proxy_enabled"
15 tool_tip="Proxy für internen Webbrowser konfigurieren" />
16 <text>
17 Proxy:
18 </text>
19 <line_editor name="proxy_address" tool_tip="Name oder IP-Adresse des Proxys" />
20 <text>
21 Port:
22 </text>
23 <line_editor name="proxy_port" tool_tip="Die Port-Nummer des Proxys" />
24 <text>
25 Socken:
26 </text>
27 <radio_group name="socks_4_5">
28 <radio_item>
29 Socks v4
30 </radio_item>
31 <radio_item>
32 Socks v5
33 </radio_item>
34 </radio_group>
35 <text>
36 Kein Proxy für:
37 </text>
38 <line_editor name="proxy_exclusions"
39 tool_tip="Namen oder IP-Adressen, für die kein Proxy verwendet werden soll" />
40 <check_box label="Webseiten auf Objekten anzeigen (im Test, erfordert Neustart)"
41 name="web_pages_on_prims_check" />
42 <text>
43 Vertrauenswürdige Sites:
44(zur Ansicht anmelden)
45 </text>
46 <button label="Hinzufügen" name="add_trusted" />
47 <line_editor name="trusted_site_entry"
48 tool_tip="Die Site, die zur Liste der vertrauenswürdigen Sites hinzugefügt werden soll" />
49 <button label="Entfernen" name="rem_trusted" />
50</panel>
diff --git a/linden/indra/newview/skins/xui/de/panel_speaker_controls.xml b/linden/indra/newview/skins/xui/de/panel_speaker_controls.xml
index 74e9286..4ab944f 100644
--- a/linden/indra/newview/skins/xui/de/panel_speaker_controls.xml
+++ b/linden/indra/newview/skins/xui/de/panel_speaker_controls.xml
@@ -3,10 +3,12 @@
3 <string name="moderator_label"> 3 <string name="moderator_label">
4 (Moderator) 4 (Moderator)
5 </string> 5 </string>
6 <layout_stack name=""> 6 <layout_stack name="panels">
7 <layout_panel name="moderation_mode_panel"> 7 <layout_panel name="moderation_mode_panel">
8 <combo_box name="moderation_mode"> 8 <combo_box name="moderation_mode">
9 Moderiertes Voice 9 <combo_item name="ModeratedVoice">
10 Moderiertes Voice
11 </combo_item>
10 </combo_box> 12 </combo_box>
11 </layout_panel> 13 </layout_panel>
12 <layout_panel name="moderate_chat_panel"> 14 <layout_panel name="moderate_chat_panel">
diff --git a/linden/indra/newview/skins/xui/de/panel_toolbar.xml b/linden/indra/newview/skins/xui/de/panel_toolbar.xml
index 37282ae..7aaaedf 100644
--- a/linden/indra/newview/skins/xui/de/panel_toolbar.xml
+++ b/linden/indra/newview/skins/xui/de/panel_toolbar.xml
@@ -1,9 +1,8 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="toolbar"> 2<panel name="toolbar">
3 <string name="Redock Windows">Fenster andocken</string>
4 <layout_stack name="toolbar_stack">
3 <button label="IM" name="im_btn" tool_tip="Instant Message an Ihre Freunde." /> 5 <button label="IM" name="im_btn" tool_tip="Instant Message an Ihre Freunde." />
4 <string name="Redock Windows">
5 Fenster andocken
6 </string>
7 <button label="Unterhalten" name="communicate_btn" 6 <button label="Unterhalten" name="communicate_btn"
8 tool_tip="Unterhalten Sie sich mit Freunden und in Gruppen." /> 7 tool_tip="Unterhalten Sie sich mit Freunden und in Gruppen." />
9 <button label="" name="chat_btn" tool_tip="Chat-Leiste anzeigen. (Eingabe)" /> 8 <button label="" name="chat_btn" tool_tip="Chat-Leiste anzeigen. (Eingabe)" />
@@ -20,4 +19,5 @@
20 tool_tip="Die Umgebungskarte. (Strg-Umschalt-M)" /> 19 tool_tip="Die Umgebungskarte. (Strg-Umschalt-M)" />
21 <button label="Karte" name="map_btn" tool_tip="Die Weltkarte. (Strg-M)" /> 20 <button label="Karte" name="map_btn" tool_tip="Die Weltkarte. (Strg-M)" />
22 <button label="Inventar" name="inventory_btn" tool_tip="Ihre Habseligkeiten. (Strg-I)" /> 21 <button label="Inventar" name="inventory_btn" tool_tip="Ihre Habseligkeiten. (Strg-I)" />
22 </layout_stack>
23</panel> 23</panel>
diff --git a/linden/indra/newview/skins/xui/en-us/alerts.xml b/linden/indra/newview/skins/xui/en-us/alerts.xml
index a39c213..d0ee7f0 100644
--- a/linden/indra/newview/skins/xui/en-us/alerts.xml
+++ b/linden/indra/newview/skins/xui/en-us/alerts.xml
@@ -23,11 +23,14 @@
23 <option name="OK"> 23 <option name="OK">
24 OK 24 OK
25 </option> 25 </option>
26 </alert> 26 </alert>
27 <alert modal="false" name="MOTD" title="Message of the Day"> 27 <alert modal="true" name="TutorialNotFound">
28 <message name="message"> 28 <message name="message">
29 [MOTD] 29 No tutorial is currently available.
30 </message> 30 </message>
31 <option name="OK">
32 OK
33 </option>
31 </alert> 34 </alert>
32 <alert modal="true" name="GenericAlert"> 35 <alert modal="true" name="GenericAlert">
33 <message name="message"> 36 <message name="message">
@@ -138,9 +141,9 @@ Visit the Webpage Studio exhibit to see it.
138 </alert> 141 </alert>
139 <alert modal="true" name="GrantModifyRights"> 142 <alert modal="true" name="GrantModifyRights">
140 <message name="message"> 143 <message name="message">
141 Granting modify rights to another resident allows them to change 144 Granting modify rights to another resident allows them to change,
142ANY objects you may have in-world. Be VERY careful when handing 145delete or take ANY objects you may have in-world. Be VERY careful
143out this permission. 146when handing out this permission.
144Do you want to grant modify rights for [FIRST_NAME] [LAST_NAME]? 147Do you want to grant modify rights for [FIRST_NAME] [LAST_NAME]?
145 </message> 148 </message>
146 <option name="Yes"> 149 <option name="Yes">
@@ -1339,6 +1342,22 @@ chat, or interact with the world.
1339 Cancel 1342 Cancel
1340 </option> 1343 </option>
1341 </alert> 1344 </alert>
1345 <alert modal="true" name="FreezeAvatarFullname">
1346 <message name="message">
1347 Freeze [AVATAR_NAME]?
1348He or she will temporarily be unable to move,
1349chat, or interact with the world.
1350 </message>
1351 <option name="Freeze">
1352 Freeze
1353 </option>
1354 <option name="Unfreeze">
1355 Unfreeze
1356 </option>
1357 <option name="Cancel">
1358 Cancel
1359 </option>
1360 </alert>
1342 <alert modal="true" name="EjectAvatar"> 1361 <alert modal="true" name="EjectAvatar">
1343 <message name="message"> 1362 <message name="message">
1344 Eject this avatar from your land? 1363 Eject this avatar from your land?
@@ -1353,6 +1372,20 @@ chat, or interact with the world.
1353 Cancel 1372 Cancel
1354 </option> 1373 </option>
1355 </alert> 1374 </alert>
1375 <alert modal="true" name="EjectAvatarFullname">
1376 <message name="message">
1377 Eject [AVATAR_NAME] from your land?
1378 </message>
1379 <option name="Eject">
1380 Eject
1381 </option>
1382 <option name="EjectandBan">
1383 Eject and Ban
1384 </option>
1385 <option name="Cancel">
1386 Cancel
1387 </option>
1388 </alert>
1356 <alert modal="true" name="InvalidUUID"> 1389 <alert modal="true" name="InvalidUUID">
1357 <message name="message"> 1390 <message name="message">
1358 Not a valid UUID. 1391 Not a valid UUID.
@@ -1727,7 +1760,13 @@ No parcel selected.
1727 <alert modal="true" name="CannotBuyLandNoRegion"> 1760 <alert modal="true" name="CannotBuyLandNoRegion">
1728 <message name="message"> 1761 <message name="message">
1729 Unable to buy land: 1762 Unable to buy land:
1730Cannot find the region this land is in. 1763 Cannot find the region this land is in.
1764 </message>
1765 </alert>
1766 <alert modal="true" name="CannotCloseFloaterBuyLand">
1767 <message name="message">
1768 You cannot close the Buy Land window until Second Life
1769estimates the price of this transaction.
1731 </message> 1770 </message>
1732 </alert> 1771 </alert>
1733 <alert modal="true" name="CannotDeedLandNothingSelected"> 1772 <alert modal="true" name="CannotDeedLandNothingSelected">
@@ -1762,22 +1801,6 @@ Try selecting a single parcel.
1762 Region Not Found 1801 Region Not Found
1763 </message> 1802 </message>
1764 </alert> 1803 </alert>
1765 <alert modal="true" name="ParcelCanPlayMusic">
1766 <message name="message">
1767 This location can play streaming music.
1768Music requires a fast Internet connection.
1769
1770Play music when available?
1771(You can change this option later under
1772Preferences &gt; Audio &amp; Video.)
1773 </message>
1774 <option name="PlayMusic">
1775 Play Music
1776 </option>
1777 <option name="Disable">
1778 Disable
1779 </option>
1780 </alert>
1781 <alert modal="true" name="ParcelCanPlayMedia"> 1804 <alert modal="true" name="ParcelCanPlayMedia">
1782 <message name="message"> 1805 <message name="message">
1783 This location can play streaming media. 1806 This location can play streaming media.
@@ -2615,6 +2638,18 @@ and the default for the &apos;Revert&apos; tool?
2615 You can only have [MAX_AGENTS] Allowed Residents. 2638 You can only have [MAX_AGENTS] Allowed Residents.
2616 </message> 2639 </message>
2617 </alert> 2640 </alert>
2641 <alert modal="true" name="MaxBannedAgentsOnRegion">
2642 <message name="message">
2643 You can only have [MAX_BANNED] Banned Residents.
2644 </message>
2645 </alert>
2646 <alert modal="true" name="MaxAgentOnRegionBatch">
2647 <message name="message">
2648 Failure while attempting to add [NUM_ADDED] agents:
2649Exceeds the [MAX_AGENTS] [LIST_TYPE] limit by [NUM_EXCESS].
2650 </message>
2651 </alert>
2652
2618 <alert modal="true" name="MaxAllowedGroupsOnRegion"> 2653 <alert modal="true" name="MaxAllowedGroupsOnRegion">
2619 <message name="message"> 2654 <message name="message">
2620 You can only have [MAX_GROUPS] Allowed Groups. 2655 You can only have [MAX_GROUPS] Allowed Groups.
@@ -2626,11 +2661,6 @@ and the default for the &apos;Revert&apos; tool?
2626 Cancel 2661 Cancel
2627 </option> 2662 </option>
2628 </alert> 2663 </alert>
2629 <alert modal="true" name="MaxBannedAgentsOnRegion">
2630 <message name="message">
2631 You can only have [MAX_BANNED] Banned Residents.
2632 </message>
2633 </alert>
2634 <alert modal="true" name="MaxManagersOnRegion"> 2664 <alert modal="true" name="MaxManagersOnRegion">
2635 <message name="message"> 2665 <message name="message">
2636 You can only have [MAX_MANAGER] Estate Managers. 2666 You can only have [MAX_MANAGER] Estate Managers.
@@ -2763,6 +2793,20 @@ Download to your Applications folder?
2763 Cancel 2793 Cancel
2764 </option> 2794 </option>
2765 </alert> 2795 </alert>
2796 <alert modal="true" name="WebLaunchExternalTarget">
2797 <message name="message">
2798 Open your system Web browser to view this content?
2799 </message>
2800 <ignore name="ignore">
2801 When opening your system browser to view a Web page
2802 </ignore>
2803 <option name="Open">
2804 OK
2805 </option>
2806 <option name="Cancel">
2807 Cancel
2808 </option>
2809 </alert>
2766 <alert modal="true" name="WebLaunchJoinNow"> 2810 <alert modal="true" name="WebLaunchJoinNow">
2767 <message name="message"> 2811 <message name="message">
2768 Go to www.secondlife.com to manage your account? 2812 Go to www.secondlife.com to manage your account?
@@ -3444,6 +3488,11 @@ spaceserver hiccup.
3444 Problems adding a new estate manager. One or more estates may have a full manager list. 3488 Problems adding a new estate manager. One or more estates may have a full manager list.
3445 </message> 3489 </message>
3446 </alert> 3490 </alert>
3491 <alert modal="true" name="ProblemAddingEstateGeneric">
3492 <message name="message">
3493 Problems adding to this estate list. One or more estates may have a full list.
3494 </message>
3495 </alert>
3447 <alert modal="true" name="UnableToLoadNotecard"> 3496 <alert modal="true" name="UnableToLoadNotecard">
3448 <message name="message"> 3497 <message name="message">
3449 Unable to load notecard&apos;s asset at this time. 3498 Unable to load notecard&apos;s asset at this time.
@@ -3547,8 +3596,7 @@ parcel. The range allowed is 1 to 10. Set at &apos;1&apos;, each 512m2 parcel
3547is allowed 117 objects. Set at &apos;2&apos;, each 512m2 parcel is 3596is allowed 117 objects. Set at &apos;2&apos;, each 512m2 parcel is
3548allowed 234, or twice as many, and so on. The max number of objects 3597allowed 234, or twice as many, and so on. The max number of objects
3549allowed per region remains 15,000 no matter what the 3598allowed per region remains 15,000 no matter what the
3550Object Bonus is. once set, be aware that lowering the Object Bonus may cause 3599Object Bonus is. Once set, be aware that lowering the Object Bonus may cause objects to be returned or deleted.
3551objects to be returned or deleted.
3552 3600
3553Default: 1.0 3601Default: 1.0
3554 </message> 3602 </message>
@@ -4311,7 +4359,7 @@ Linden Lab
4311 There is already an object attached to this point on your body. 4359 There is already an object attached to this point on your body.
4312Do you want to replace it with the selected object? 4360Do you want to replace it with the selected object?
4313 </message> 4361 </message>
4314 <ignore save_option="true"> 4362 <ignore name="ignore" save_option="true">
4315 When replacing existing attachments 4363 When replacing existing attachments
4316 </ignore> 4364 </ignore>
4317 <option ignore="Replace Automatically" name="Yes"> 4365 <option ignore="Replace Automatically" name="Yes">
@@ -4330,7 +4378,7 @@ this payment.
4330Would you like to leave Busy Mode before 4378Would you like to leave Busy Mode before
4331completing this transaction? 4379completing this transaction?
4332 </message> 4380 </message>
4333 <ignore save_option="true"> 4381 <ignore name="ignore" save_option="true">
4334 When paying a person or object in busy mode 4382 When paying a person or object in busy mode
4335 </ignore> 4383 </ignore>
4336 <option ignore="Always leave Busy Mode" name="Yes"> 4384 <option ignore="Always leave Busy Mode" name="Yes">
@@ -4357,8 +4405,7 @@ the contents of your Trash folder?
4357 </alert> 4405 </alert>
4358 <alert modal="true" name="ConfirmClearBrowserCache"> 4406 <alert modal="true" name="ConfirmClearBrowserCache">
4359 <message name="message"> 4407 <message name="message">
4360 Are you sure you want to clear your 4408 Are you sure you want to clear your browser cache?
4361browser cache?
4362 </message> 4409 </message>
4363 <option default="true" name="Yes"> 4410 <option default="true" name="Yes">
4364 Yes 4411 Yes
@@ -4890,3 +4937,4 @@ Would you like to visit the Second Life website to set this up?
4890 </url> 4937 </url>
4891 </alert> 4938 </alert>
4892</alerts> 4939</alerts>
4940
diff --git a/linden/indra/newview/skins/xui/en-us/floater_about.xml b/linden/indra/newview/skins/xui/en-us/floater_about.xml
index e9253ff..e5f963a 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_about.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_about.xml
@@ -3,41 +3,40 @@
3 can_resize="false" height="440" min_height="100" min_width="100" 3 can_resize="false" height="440" min_height="100" min_width="100"
4 name="floater_about" rect_control="FloaterAboutRect" 4 name="floater_about" rect_control="FloaterAboutRect"
5 title="About Second Life" width="470"> 5 title="About Second Life" width="470">
6 <text_editor bg_readonly_color="0, 0, 0, 0" bottom="-434" embedded_items="false" 6 <text_editor bottom="-434" embedded_items="false"
7 follows="left|top|right|bottom" font="SansSerifSmall" height="168" left="6" 7 follows="left|top|right|bottom" font="SansSerifSmall" height="168" left="6"
8 max_length="65536" mouse_opaque="true" name="credits_editor" 8 max_length="65536" mouse_opaque="true" name="credits_editor" width="458"
9 text_color="1, 1, 1, 1" text_readonly_color="1, 1, 1, 1" width="458" 9 word_wrap="true">
10 word_wrap="true"> 10 Second Life is brought to you by Philip, Andrew, Tessa, Cory, Frank, James, Doug, Hunter, Richard, John, Eric, Avi, AaronB, AaronY, Ian, Peter, Mark, Robin, Stephen, Tracy, Ryan, Alberto, Haney, Tanya, JimJ, Dan, Ben, Stephanie, Tim, Evan, Catherine, Colin, Chris, Reuben, Charity, Jeska, James, JonHenry, Kelly, Callum, Char, Daniel, DavidF, Don, Jeff, Lauren, Lee, Michael, Ramzi, Vektor, Steve, TomY, Tess, Kona, Brent, Clarissa, PeterP, Jesse, Annette, Cyn, Blue, Ginsu, Jonathan, Karen, Adam, Nova, Deana, Lizzie, Patsy, DavidK, Isaac, Pathfinder, Monroe, Jill, Benny, Altruima, Rheya, Jennifer, Jack, DaveP, Brad, Mick, Babbage, Elisabeth, Brian, Beth, Data, Ethan, Wendy, Nicole, Sky, Jeffrey, Zero, Coffee, Tesla, Kenny, Makiko, Nigel, Teeple, Lucy, Mia, Dee, Guy, Harry, Liana, Branka, Jimbo, Aura, Vasuda, SarahD, bethanye, Torley, Runitai, MikeS, PaulM, Milo, Hermia, JoeM, Melanie, Rejean, DSmith, SMiller, Susan, Jose, DongYun, Justin, Andrey, Syrah, Donovan, Henrik, Nora, Lexie, AC, Donna, ChrisC, Alex, Leyla, Kyle, Mathew, Devin, Joshua, DanC, Jessica, Harmony, Claudia, Tramel, Glenn, Betsy, Fritz, Jun, Adam, Cassandra, Ken, RyanW, Spike, Tofu, Varas, Andy, Luke, RobLa, Chiyo, JohnZ, Dustin, George, Del, PeterP, Migyeong, Matthew, RMullane, CChampion, JTurbin, JamesC, Viola, Lightfoot, Jacqui, Sturm, Adrian, Buttercup, Alfred, Sunil, Alfred, Noel, Irfan, Jill, Yool, Jane, Yuki, Yoz, Matthew, Arthur, Jennifer, Karl, Brian, Ben, Janine, Christopher, Madhavi, Everett, Anthony, Joon, Jake, sean, Adreanne, Stephany, KellyJo, Jeremy, Pramod, Joshua, Sean, Christopher, Amy, Ceren, Katherine, jon, Sudheendra, James, Stephan, Kari, Kartic, Todd, Thomas, Joki, Rebecca, Belinda, Bert, Roger, Bridie, Kristi, Brian, Maria, John, Aric, Nathanel, Melinda, Darrell, Jennifer, Sandy, Greg, Rob, Brad, Chris, Eric, Palmer, Asi, Katja, Lisa, Minda, Jen, Aaron, Bryan, Mark, Jonathan, Jamie, Laurel, William, Matthew, Steve, David, Remy, James, Tim, Lee, Brian, Ashlei, Sam, Mike, Ethan, Austin, Wanda, Paul, Brian, Rachel, Valentyn, Emma Williams, Autum, Steven, Laley, Charles, Jessica, Sue, Gillian, CG, Kip, Kristen, Shamiran, Blake, Brett, Erica, Kent, Joel, Plexus, Twilight, Joppa, Enus, Kraft, Naveen, Simon, Q, Ronp, Laurap, Ram, KyleJM, Marty, Kend, Daveh, Prospero, Melissa, Nat, Hamilton, Green, Seraph, Ekim, Miz, Jimmy, Kosmo, Rome, Doris, JT, Benoc, Whump, Mango, Trinity, Patch, TJ, Christy, Bao, Joohwan, Kate, Oreh, Angela, Johan, Cheah, Lan, Matias, Brandy, Cogsworth, Aleks, Mitchell, Space, Einstein, Bambers, Colton, Malbers, Maggie, Umesh, Santosh, Rose, Stash, Rothman, Winnie, Stella, Niall and many others.
11 Second Life is brought to you by Philip, Andrew, Tessa, Cory, Frank, James, Doug, Hunter, Richard, John, Eric, Avi, AaronB, AaronY, Ian, Peter, Mark, Robin, Stephen, Tracy, Ryan, Alberto, Haney, Tanya, JimJ, Dan, Ben, Stephanie, Tim, Evan, Catherine, Colin, Chris, Reuben, Charity, Jeska, James, JonHenry, Kelly, Callum, Char, Daniel, DavidF, Don, Jeff, Lauren, Lee, Michael, Ramzi, Vektor, Steve, TomY, Tess, Kona, Brent, Clarissa, PeterP, Jesse, Annette, Cyn, Blue, Ginsu, Jonathan, Karen, Adam, Nova, Deana, Lizzie, Patsy, DavidK, Isaac, Pathfinder, Monroe, Jill, Benny, Altruima, Rheya, Jennifer, Jack, DaveP, Brad, Mick, Babbage, Elisabeth, Brian, Beth, Data, Ethan, Wendy, Nicole, Sky, Jeffrey, Zero, Coffee, Tesla, Kenny, Makiko, Nigel, Teeple, Lucy, Mia, Dee, Guy, Harry, Liana, Branka, Jimbo, Aura, Vasuda, SarahD, bethanye, Torley, Runitai, MikeS, PaulM, Milo, Hermia, JoeM, Melanie, Rejean, DSmith, SMiller, Susan, Jose, DongYun, Justin, Andrey, Syrah, Donovan, Henrik, Nora, Lexie, AC, Donna, ChrisC, Alex, Leyla, Kyle, Mathew, Devin, Joshua, DanC, Jessica, Harmony, Claudia, Tramel, Glenn, Betsy, Fritz, Jun, Adam, Cassandra, Ken, RyanW, Spike, Tofu, Varas, Andy, Luke, RobLa, Chiyo, JohnZ, Dustin, George, Del, PeterP, Migyeong, Matthew, RMullane, CChampion, JTurbin, JamesC, Viola, Lightfoot, Jacqui, Sturm, Adrian, Buttercup, Alfred, Sunil, Alfred, Noel, Irfan, Jill, Yool, Jane, Yuki, Yoz, Matthew, Arthur, Jennifer, Karl, Brian, Ben, Janine, Christopher, Madhavi, Everett, Anthony, Joon, Jake, sean, Adreanne, Stephany, KellyJo, Jeremy, Pramod, Joshua, Sean, Christopher, Amy, Ceren, Katherine, jon, Sudheendra, James, Stephan, Kari, Kartic, Todd, Thomas, Joki, Rebecca, Belinda, Bert, Roger, Bridie, Kristi, Brian, Maria, John, Aric, Nathanel, Melinda, Darrell, Jennifer, Sandy, Greg, Rob, Brad, Chris, Eric, Palmer, Asi, Katja, Lisa, Minda, Jen, Aaron, Bryan, Mark, Jonathan, Jamie, Laurel, William, Matthew, Steve, David, Remy, James, Tim, Lee, Brian, Ashlei, Sam, Mike, Ethan, Austin, Wanda, Paul, Brian, Rachel, Valentyn, Emma Williams, Autum, Steven, Laley, Charles, Jessica, Sue, Gillian, CG, Kip, Kristen, Shamiran, Blake, Brett, Erica, Kent, Joel, Plexus, Twilight, Joppa, Enus, Kraft, Naveen, Simon, Q, Ronp, Laurap, Ram, KyleJM, Marty, Kend, Daveh, Prospero, Melissa, Nat, Hamilton, Green, Seraph, Ekim, Miz, Jimmy, Kosmo, Rome, Doris, JT, Benoc, Whump, Mango, Trinity, Patch, TJ, Christy, Bao, Joohwan, Kate, Oreh, Angela, Johan, Cheah, Lan, Matias, Brandy, Cogsworth, Aleks, Mitchell, Space, Einstein, Bambers, Colton, Malbers, Maggie, Umesh, Santosh, Rose, Stash, Rothman, Winnie, Stella, Niall and many others.
12 11
13Thank you to the following residents for helping to ensure that this is the best version yet: aaron23 decuir, Abelv Vollmar, Abyssin Otoro, ActingIll Igaly, Adamas Carter, Addy Broome, Adelia Menges, Alexandra Rucker, Alexandrea Fride, Alissa Sabre, Alyx Jonson, Ann Otoole, Anton Fargis, Aradia Dielli, Araina jewell, Arcane Clawtooth, arcangelo vantelli, Are Sperber, Argent Stonecutter, arkady yost, Ashcroft Burnham, Ashen Arida, Auron Forcella, Azadine Umarov, Azildin Furst, Balp Allen, Balpien Hammerer, Barney Boomslang, Barrett Slade, becky pippen, Beeflin Grut, Beer Dailey, Behemoth Greenwood, bigmanu greene, bitova loon, Bonca Chikuwa, Bonnie Bechir, Brandon Catteneo, buttonpusher jones, Carina Raymaker, Ceera Murakami, Celierra Darling, ChatNoir Moonsoo, Cheetah Hammerer, chet neurocam, Cinthya Loveless, Cold Spitteler, Coral Quinnell, Crash Pointe, CrazyTB Oh, Creem Pye, Crom Chaffe, ctrl althouse, dade carver, Dael Ra, dakota schwade, Dale Innis, Damian McLeod, Danger Lytton, danielluh ashton, DanOfWA Flanagan, Davec Horsforth, Davidius Morigi, davie zinner, Day Oh, DBDigital Epsilon, Deany Fall, deBruce Munro, Decaf Coffey, Dedric Mauriac, Deeso Saeed, Dekka Raymaker, dexter eberhart, Dildo Spitz, Dizzy Banjo, djcabello klaar, Dnali Anabuki, Domchi Underwood, Doran Zemlja, Drew Dwi, Duckless Vandyke, Duncan Stenvaag, Dylan Rickenbacker, dzogchen Moody, Dzonatas Sol, Eddy Stryker, Edward Griffith, Edward Pearse, ein duesenburg, Elle Pollack, Elle74 Zaftig, Emileigh Starbrook, Emma Nowhere, ener bing, Erdrick Balbozar, eric domela, Evangeline Biedermann, Excalibur Longstaff, Fake Fitzgerald, Feldspar Millgrove, Feynt Mistral, Fluf Fredriksson, Forbid Utorid, Fortyniner Beck, Francesco Despres, Francisco Koolhoven, Franta Burt, Fury Rosewood, garde Burrel, Garmin Kawaguichi, Gavin Ichigo, Gellan Glenelg, Genie Demina, Gennifer Meredith, Gigs Taggart, Goldie Katsu, Gwyneth Llewelyn, Haravikk Mistral, Harleen Gretzky, Haruki Watanabe, Heather Manatiso, Henri Beauchamp, Honey Fairweather, Hypatia Callisto, Ice Brodie, icktoofay Kamachi, IntLibber Brautigan, Janise Dreamscape, Jay Shinobu, Jenni Ryba, Jeremy Ondricek, JetZep Zabelin, Jims Smythe, Jini Hammerer, Jopy Weber, JustOneMore Loon, Kaluura Boa, Kara Markova, Kevin Susenko, Khyra Ares, Kii Lilliehook, Kitty Barnett, Kris Kuttelwascher, Lanita Wingtips, Laura18 Streeter, Lee Ludd, Lettrius Jewell, Liberty Tesla, LilyAnna Carter, Lindal Kidd, Lisa Lowe, Lisa McConnell, Lola Machin, luca peck, Lupus Clawtooth, M1sha Dallin, Macsima Dagostino, Mana Janus, Mani Canning, Manjusri Binder, marceledward edman, march Korda, marchino villota, Marcus Llewellyn, MartinRJ Fayray, Matthew Dowd, Max Kleiber, mazzy fastback, McCabe Maxsted, Mckailen Kohnke, Meghan Dench, Melvin Starbrook, Mercia Mcmahon, Miakoda Carnell, Michelle2 Zenovka, Michi Lumin, mick parnall, Milla Michinaga, Millie Thompson, miranda Ashby, Mircea Lobo, MIssSara Beck, mouse mimistrobell, Myria Boa, Nanci Barthelmess, Nargus Asturias, Natalya Debevec, Nedrae Messmer, Nexeus Fatale, Niky Zenovka, Nimrod Szondi, Ninane Yoshikawa, Noch Tripsa, nokithecat writer, Nyko Merlin, Onyx Halberd, oryx tempel, Osprey Therian, Pac Hyun, Panagea McMillan, Patrick Ferrentino, PattehPh0x Katsu, ponk bing, Poppy Linden, Prajna Vella, Precious Rhiano, Prokofy Neva, Randall Lovenkraft, Rascal Ratelle, Raydon Writer, Rhaorth Antonelli, Rock Hayek, Ron Crimson, Ron Khondji, Ronald Richez, Rui Clary, Ruud Lathrop, Sakkano Imako, Sam Reinard, Sascha Vandyke, Scrippy Scofield, Sean18 McCarey, Sedona Mills, Sekonda Huet, Seraph Nephilim, Sergei Milos, Shadowquine Maltz, shai khalifa, sheilah flatley, Sheri Underwood, Shuggy Husky, Sierra Janus, Sigma Avro, Simil Miles, simon kline, Simon Nolan, Sindy Tsure, Sparks Keynes, Squirrel Wood, Stahi Columbia, StarSong Bright, Summer Seale, Sunn Thunders, Susan Koltai, Syler Zhora, Synack Fitzgerald, Tayra Dagostino, Tee Cramer, Teravus Ousley, Thomas Shikami, Tia Araw, Tillie Ariantho, Topher Brooks, Torley Linden, Twosteppin Jewell, tx Oh, urantia jewell, vaguegirl Petty, VeC Merlin, venus petrov, vv33d Beck, vynka dean, zann canto, zeebster colasanti, Zi Ree, Zion Tristan, Zorin Frobozz, Zyzzy Zarf 12 Thank you to the following residents for helping to ensure that this is the best version yet: aaron23 decuir, Abelv Vollmar, Abyssin Otoro, ActingIll Igaly, Adamas Carter, Addy Broome, Adelia Menges, Alexandra Rucker, Alexandrea Fride, Alissa Sabre, Alyx Jonson, Ann Otoole, Anton Fargis, Aradia Dielli, Araina jewell, Arcane Clawtooth, arcangelo vantelli, Are Sperber, Argent Stonecutter, arkady yost, Ashcroft Burnham, Ashen Arida, Auron Forcella, Azadine Umarov, Azildin Furst, Balp Allen, Balpien Hammerer, Barney Boomslang, Barrett Slade, becky pippen, Beeflin Grut, Beer Dailey, Behemoth Greenwood, bigmanu greene, bitova loon, Bonca Chikuwa, Bonnie Bechir, Brandon Catteneo, buttonpusher jones, Carina Raymaker, Ceera Murakami, Celierra Darling, ChatNoir Moonsoo, Cheetah Hammerer, chet neurocam, Cinthya Loveless, Cold Spitteler, Coral Quinnell, Crash Pointe, CrazyTB Oh, Creem Pye, Crom Chaffe, ctrl althouse, dade carver, Dael Ra, dakota schwade, Dale Innis, Damian McLeod, Danger Lytton, danielluh ashton, DanOfWA Flanagan, Davec Horsforth, Davidius Morigi, davie zinner, Day Oh, DBDigital Epsilon, Deany Fall, deBruce Munro, Decaf Coffey, Dedric Mauriac, Deeso Saeed, Dekka Raymaker, dexter eberhart, Dildo Spitz, Dizzy Banjo, djcabello klaar, Dnali Anabuki, Domchi Underwood, Doran Zemlja, Drew Dwi, Duckless Vandyke, Duncan Stenvaag, Dylan Rickenbacker, dzogchen Moody, Dzonatas Sol, Eddy Stryker, Edward Griffith, Edward Pearse, ein duesenburg, Elle Pollack, Elle74 Zaftig, Emileigh Starbrook, Emma Nowhere, ener bing, Erdrick Balbozar, eric domela, Evangeline Biedermann, Excalibur Longstaff, Fake Fitzgerald, Feldspar Millgrove, Feynt Mistral, Fluf Fredriksson, Forbid Utorid, Fortyniner Beck, Francesco Despres, Francisco Koolhoven, Franta Burt, Fury Rosewood, garde Burrel, Garmin Kawaguichi, Gavin Ichigo, Gellan Glenelg, Genie Demina, Gennifer Meredith, Gigs Taggart, Goldie Katsu, Gwyneth Llewelyn, Haravikk Mistral, Harleen Gretzky, Haruki Watanabe, Heather Manatiso, Henri Beauchamp, Honey Fairweather, Hypatia Callisto, Ice Brodie, icktoofay Kamachi, IntLibber Brautigan, Janise Dreamscape, Jay Shinobu, Jenni Ryba, Jeremy Ondricek, JetZep Zabelin, Jims Smythe, Jini Hammerer, Jopy Weber, JustOneMore Loon, Kaluura Boa, Kara Markova, Kevin Susenko, Khyra Ares, Kii Lilliehook, Kitty Barnett, Kris Kuttelwascher, Lanita Wingtips, Laura18 Streeter, Lee Ludd, Lettrius Jewell, Liberty Tesla, LilyAnna Carter, Lindal Kidd, Lisa Lowe, Lisa McConnell, Lola Machin, luca peck, Lupus Clawtooth, M1sha Dallin, Macsima Dagostino, Mana Janus, Mani Canning, Manjusri Binder, marceledward edman, march Korda, marchino villota, Marcus Llewellyn, MartinRJ Fayray, Matthew Dowd, Max Kleiber, mazzy fastback, McCabe Maxsted, Mckailen Kohnke, Meghan Dench, Melvin Starbrook, Mercia Mcmahon, Miakoda Carnell, Michelle2 Zenovka, Michi Lumin, mick parnall, Milla Michinaga, Millie Thompson, miranda Ashby, Mircea Lobo, MIssSara Beck, mouse mimistrobell, Myria Boa, Nanci Barthelmess, Nargus Asturias, Natalya Debevec, Nedrae Messmer, Nexeus Fatale, Niky Zenovka, Nimrod Szondi, Ninane Yoshikawa, Noch Tripsa, nokithecat writer, Nyko Merlin, Onyx Halberd, oryx tempel, Osprey Therian, Pac Hyun, Panagea McMillan, Patrick Ferrentino, PattehPh0x Katsu, ponk bing, Poppy Linden, Prajna Vella, Precious Rhiano, Prokofy Neva, Randall Lovenkraft, Rascal Ratelle, Raydon Writer, Rhaorth Antonelli, Rock Hayek, Ron Crimson, Ron Khondji, Ronald Richez, Rui Clary, Ruud Lathrop, Sakkano Imako, Sam Reinard, Sascha Vandyke, Scrippy Scofield, Sean18 McCarey, Sedona Mills, Sekonda Huet, Seraph Nephilim, Sergei Milos, Shadowquine Maltz, shai khalifa, sheilah flatley, Sheri Underwood, Shuggy Husky, Sierra Janus, Sigma Avro, Simil Miles, simon kline, Simon Nolan, Sindy Tsure, Sparks Keynes, Squirrel Wood, Stahi Columbia, StarSong Bright, Summer Seale, Sunn Thunders, Susan Koltai, Syler Zhora, Synack Fitzgerald, Tayra Dagostino, Tee Cramer, Teravus Ousley, Thomas Shikami, Tia Araw, Tillie Ariantho, Topher Brooks, Torley Linden, Twosteppin Jewell, tx Oh, urantia jewell, vaguegirl Petty, VeC Merlin, venus petrov, vv33d Beck, vynka dean, zann canto, zeebster colasanti, Zi Ree, Zion Tristan, Zorin Frobozz, Zyzzy Zarf
14 13
15APR Copyright (C) 2000-2004 The Apache Software Foundation 14 3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion
16cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se) 15 APR Copyright (C) 2000-2004 The Apache Software Foundation
17expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd. 16 cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se)
18FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org). 17 expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
19GL Copyright (C) 1999-2004 Brian Paul. 18 FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org).
20Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited. 19 GL Copyright (C) 1999-2004 Brian Paul.
21jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW) 20 Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited.
22jpeglib Copyright (C) 1991-1998, Thomas G. Lane. 21 jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW)
23ogg/vorbis Copyright (C) 2001, Xiphophorus 22 jpeglib Copyright (C) 1991-1998, Thomas G. Lane.
24OpenSSL Copyright (C) 1998-2002 The OpenSSL Project. 23 ogg/vorbis Copyright (C) 2001, Xiphophorus
25SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga 24 OpenSSL Copyright (C) 1998-2002 The OpenSSL Project.
26SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 25 SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga
27xmlrpc-epi Copyright (C) 2000 Epinions, Inc. 26 SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
28zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler. 27 xmlrpc-epi Copyright (C) 2000 Epinions, Inc.
28 zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler.
29 29
30All rights reserved. See licenses.txt for details. 30 All rights reserved. See licenses.txt for details.
31 31
32Voice chat Audio coding: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C) 32 Voice chat Audio coding: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
33 33
34 34
35Happiness is a warm puppy. -- Charles M. Schulz 35 Happiness is a warm puppy. -- Charles M. Schulz</text_editor>
36 </text_editor> 36
37 <text_editor bg_readonly_color="0, 0, 0, 0" bottom_delta="174" embedded_items="false" 37 <text_editor bottom_delta="174" embedded_items="false"
38 follows="left|top|right|bottom" font="SansSerif" height="238" left="6" 38 follows="left|top|right|bottom" font="SansSerif" height="238" left="6"
39 max_length="65536" mouse_opaque="true" name="support_editor" 39 max_length="65536" mouse_opaque="true" name="support_editor" width="458"
40 text_color="1, 1, 1, 1" text_readonly_color="1, 1, 1, 1" width="458"
41 word_wrap="true" /> 40 word_wrap="true" />
42 <string name="you_are_at"> 41 <string name="you_are_at">
43 You are at [POSITION] 42 You are at [POSITION]
diff --git a/linden/indra/newview/skins/xui/en-us/floater_about_land.xml b/linden/indra/newview/skins/xui/en-us/floater_about_land.xml
index 8b21736..1d32b97 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_about_land.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_about_land.xml
@@ -1,12 +1,12 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater bottom="-554" can_close="true" can_drag_on_left="false" can_minimize="true" 2<floater bottom="-554" can_close="true" can_drag_on_left="false" can_minimize="true"
3 can_resize="true" can_tear_off="true" enabled="true" height="420" 3 can_resize="false" can_tear_off="false" enabled="true" height="420"
4 left="367" min_height="420" min_width="460" mouse_opaque="true" 4 left="367" min_height="420" min_width="460" mouse_opaque="true"
5 name="floaterland" rect_control="FloaterLandRect5" title="About Land" 5 name="floaterland" rect_control="FloaterLandRect5" title="About Land"
6 width="460"> 6 width="460">
7 <tab_container bottom="-390" enabled="true" follows="left|top|right|bottom" height="370" 7 <tab_container bottom="-420" enabled="true" follows="left|top|right|bottom" height="400"
8 left="0" mouse_opaque="false" name="landtab" tab_position="top" width="460"> 8 left="1" mouse_opaque="false" name="landtab" tab_position="top" width="459">
9 <panel border="false" bottom="-349" enabled="true" follows="left|top|right|bottom" 9 <panel border="true" bottom="-349" enabled="true" follows="left|top|right|bottom"
10 height="333" label="General" left="1" mouse_opaque="true" 10 height="333" label="General" left="1" mouse_opaque="true"
11 name="land_general_panel" width="458"> 11 name="land_general_panel" width="458">
12 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 12 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
@@ -17,9 +17,9 @@
17 </text> 17 </text>
18 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-20" 18 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-20"
19 enabled="true" follows="left|top|right" font="SansSerifSmall" 19 enabled="true" follows="left|top|right" font="SansSerifSmall"
20 handle_edit_keys_directly="false" height="16" left="78" max_length="63" 20 handle_edit_keys_directly="false" height="16" left="78"
21 mouse_opaque="true" name="Name" select_all_on_focus_received="false" 21 max_length="63" mouse_opaque="true" name="Name"
22 select_on_focus="false" text_readonly_color="0.576471 0.662745 0.835294 1" 22 select_all_on_focus_received="false" select_on_focus="false"
23 width="368" /> 23 width="368" />
24 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 24 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
25 bottom="-40" drop_shadow_visible="true" enabled="true" follows="left|top" 25 bottom="-40" drop_shadow_visible="true" enabled="true" follows="left|top"
@@ -32,8 +32,7 @@
32 font="SansSerifSmall" handle_edit_keys_directly="false" height="52" 32 font="SansSerifSmall" handle_edit_keys_directly="false" height="52"
33 left="76" max_length="255" mouse_opaque="true" name="Description" 33 left="76" max_length="255" mouse_opaque="true" name="Description"
34 select_all_on_focus_received="false" select_on_focus="false" 34 select_all_on_focus_received="false" select_on_focus="false"
35 text_readonly_color="0.576471 0.662745 0.835294 1" width="370" 35 width="370" word_wrap="true" />
36 word_wrap="true" />
37 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 36 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
38 bottom="-100" drop_shadow_visible="true" enabled="true" follows="left|top" 37 bottom="-100" drop_shadow_visible="true" enabled="true" follows="left|top"
39 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="4" 38 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="4"
@@ -229,8 +228,8 @@
229 (Sale Pending) 228 (Sale Pending)
230 </string> 229 </string>
231 </panel> 230 </panel>
232 <panel border="false" bottom="-349" enabled="true" follows="left|top|right|bottom" 231 <panel border="true" bottom="-349" enabled="true" follows="left|top|right|bottom"
233 height="333" label="Covenant" left="1" mouse_opaque="true" 232 height="333" label="Covenant" left="0" mouse_opaque="true"
234 name="land_covenant_panel" width="458"> 233 name="land_covenant_panel" width="458">
235 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 234 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
236 bottom="-20" drop_shadow_visible="true" enabled="true" follows="left|top" 235 bottom="-20" drop_shadow_visible="true" enabled="true" follows="left|top"
@@ -289,7 +288,7 @@
289 <text_editor type="string" length="1" bottom="-325" embedded_items="false" enabled="false" 288 <text_editor type="string" length="1" bottom="-325" embedded_items="false" enabled="false"
290 follows="left|top|right|bottom" font="SansSerifSmall" height="200" 289 follows="left|top|right|bottom" font="SansSerifSmall" height="200"
291 left="15" max_length="65535" mouse_opaque="true" name="covenant_editor" 290 left="15" max_length="65535" mouse_opaque="true" name="covenant_editor"
292 text_readonly_color="1 1 1 1" width="420" word_wrap="true"> 291 width="420" word_wrap="true">
293 There is no Covenant provided for this Estate. 292 There is no Covenant provided for this Estate.
294 </text_editor> 293 </text_editor>
295 <string name="can_resell"> 294 <string name="can_resell">
@@ -305,7 +304,7 @@
305 Purchased land in this region may not be joined or subdivided. 304 Purchased land in this region may not be joined or subdivided.
306 </string> 305 </string>
307 </panel> 306 </panel>
308 <panel border="false" bottom="-349" enabled="true" follows="left|top|right|bottom" 307 <panel border="true" bottom="-349" enabled="true" follows="left|top|right|bottom"
309 height="333" label="Objects" left="1" mouse_opaque="true" 308 height="333" label="Objects" left="1" mouse_opaque="true"
310 name="land_objects_panel" width="458"> 309 name="land_objects_panel" width="458">
311 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 310 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
@@ -457,18 +456,16 @@
457 name="Return objects..." width="164" /> 456 name="Return objects..." width="164" />
458 <name_list allow_calling_card_drop="false" background_visible="false" bottom="-329" 457 <name_list allow_calling_card_drop="false" background_visible="false" bottom="-329"
459 column_padding="0" draw_border="true" draw_heading="true" 458 column_padding="0" draw_border="true" draw_heading="true"
460 draw_stripes="true" enabled="true" fg_disable_color="1 1 1 1" 459 draw_stripes="true" enabled="true"
461 fg_selected_color="1 1 1 1" fg_unselected_color="1 1 1 1"
462 follows="left|top|right|bottom" height="117" left="4" mouse_opaque="true" 460 follows="left|top|right|bottom" height="117" left="4" mouse_opaque="true"
463 multi_select="false" name="owner list" name_column_index="2" width="450"> 461 multi_select="false" name="owner list" name_column_index="2" width="450">
464 <column label="Type" sort="online_status" width="24" /> 462 <column name="type" label="Type" sort="online_status" width="24" />
465 <column name="online_status" width="-1" /> 463 <column name="online_status" width="-1" />
466 <column dynamicwidth="true" label="Name" /> 464 <column name="name" dynamicwidth="true" label="Name" />
467 <column label="Count" width="70" /> 465 <column name="count" label="Count" width="70" />
468 </name_list> 466 </name_list>
469 /&gt;
470 </panel> 467 </panel>
471 <panel border="false" bottom="-349" enabled="true" follows="left|top|right|bottom" 468 <panel border="true" bottom="-349" enabled="true" follows="left|top|right|bottom"
472 height="333" label="Options" left="1" mouse_opaque="true" 469 height="333" label="Options" left="1" mouse_opaque="true"
473 name="land_options_panel" width="458"> 470 name="land_options_panel" width="458">
474 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 471 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
@@ -654,23 +651,11 @@
654 Restrict Pushing (Region Override) 651 Restrict Pushing (Region Override)
655 </string> 652 </string>
656 </panel> 653 </panel>
657 <panel border="false" bottom="-349" enabled="true" follows="left|top|right|bottom" 654 <panel border="true" bottom="-349" enabled="true" follows="left|top|right|bottom"
658 height="363" label="Media" left="1" mouse_opaque="true" 655 height="363" label="Media" left="1" mouse_opaque="true"
659 name="land_media_panel" width="458"> 656 name="land_media_panel" width="458">
660 <text type="string" length="1" bottom="-25" follows="left|top" font="SansSerifSmall" halign="left" 657 <text type="string" length="1" bottom="-25" follows="left|top" font="SansSerifSmall" halign="left" height="16"
661 height="16" left="10" name="at URL:" width="65"> 658 left="10" mouse_opaque="true" name="with media:" width="65">
662 Media URL:
663 </text>
664 <line_editor bottom_delta="0" follows="left|top|right" font="SansSerifSmall"
665 height="16" left="150"
666 name="media_url" right="-15"
667 select_all_on_focus_received="true" select_on_focus="true"
668 text_readonly_color="0.576471 0.662745 0.835294 1" />
669 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" halign="center"
670 height="16" label="Set..." label_selected="Set..." mouse_opaque="true"
671 name="set_media_url" left="80" scale_image="true" width="60" />
672 <text type="string" length="1" bottom_delta="-25" follows="left|top" font="SansSerifSmall" halign="left" height="16"
673 left="10" mouse_opaque="true" name="with media:" width="67">
674 Media Type: 659 Media Type:
675 </text> 660 </text>
676 <combo_box allow_text_entry="false" bottom_delta="0" follows="left|top" height="18" 661 <combo_box allow_text_entry="false" bottom_delta="0" follows="left|top" height="18"
@@ -680,14 +665,24 @@
680 <text bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" 665 <text bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16"
681 left_delta="130" name="mime_type" width="200" /> 666 left_delta="130" name="mime_type" width="200" />
682 <text type="string" length="1" bottom_delta="-20" follows="left|top" font="SansSerifSmall" halign="left" 667 <text type="string" length="1" bottom_delta="-20" follows="left|top" font="SansSerifSmall" halign="left"
683 height="16" left="10" name="Description:" width="65"> 668 height="16" left="10" name="at URL:" width="65">
669 Media URL:
670 </text>
671 <line_editor bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" left="80"
672 max_length="255" name="media_url" right="-80"
673 select_all_on_focus_received="true" select_on_focus="true"
674 text_readonly_color="0.576471 0.662745 0.835294 1" />
675 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" halign="center"
676 height="16" label="Set..." label_selected="Set..." mouse_opaque="true"
677 name="set_media_url" right="-12" scale_image="true" width="60" />
678 <text type="string" length="1" bottom_delta="-20" follows="left|top" font="SansSerifSmall" halign="left"
679 height="16" left="10" name="Description:" width="364">
684 Description: 680 Description:
685 </text> 681 </text>
686 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="0" 682 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="0"
687 follows="left|top|right" font="SansSerifSmall" height="16" left="80" 683 follows="left|top" font="SansSerifSmall" height="16" left="80"
688 max_length="255" name="url_description" right="-15" 684 max_length="255" name="url_description" right="-80"
689 select_all_on_focus_received="true" select_on_focus="true" 685 select_all_on_focus_received="true" select_on_focus="true"
690 text_readonly_color="0.576471 0.662745 0.835294 1"
691 tool_tip="Text displayed next to play/load button" /> 686 tool_tip="Text displayed next to play/load button" />
692 <text type="string" length="1" bottom_delta="-20" follows="left|top" font="SansSerifSmall" halign="left" 687 <text type="string" length="1" bottom_delta="-20" follows="left|top" font="SansSerifSmall" halign="left"
693 height="16" left="10" name="Media texture:" width="364"> 688 height="16" left="10" name="Media texture:" width="364">
@@ -753,11 +748,10 @@ Options:
753 Music URL: 748 Music URL:
754 </text> 749 </text>
755 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="0" 750 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="0"
756 enabled="true" follows="left|top|right" font="SansSerifSmall" 751 enabled="true" follows="left|top" font="SansSerifSmall"
757 handle_edit_keys_directly="false" height="16" left="80" max_length="255" 752 handle_edit_keys_directly="false" height="16" left="80" max_length="255"
758 mouse_opaque="true" name="music_url" right="-15" 753 mouse_opaque="true" name="music_url" right="-15"
759 select_all_on_focus_received="true" select_on_focus="true" 754 select_all_on_focus_received="true" select_on_focus="true"/>
760 text_readonly_color="0.576471 0.662745 0.835294 1" />
761 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 755 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
762 bottom_delta="-40" drop_shadow_visible="true" enabled="true" 756 bottom_delta="-40" drop_shadow_visible="true" enabled="true"
763 follows="left|top" font="SansSerifSmall" h_pad="0" halign="left" 757 follows="left|top" font="SansSerifSmall" h_pad="0" halign="left"
@@ -778,7 +772,7 @@ Options:
778 </text> 772 </text>
779 <radio_group bottom_delta="-40" draw_border="true" enabled="true" follows="left|top" 773 <radio_group bottom_delta="-40" draw_border="true" enabled="true" follows="left|top"
780 height="54" left="80" mouse_opaque="true" name="parcel_voice_channel" 774 height="54" left="80" mouse_opaque="true" name="parcel_voice_channel"
781 tab_stop="true" width="363"> 775 tab_stop="true" width="219">
782 <radio_item type="string" length="1" bottom="-19" enabled="true" follows="left|top" height="16" left="3" 776 <radio_item type="string" length="1" bottom="-19" enabled="true" follows="left|top" height="16" left="3"
783 mouse_opaque="true" name="Estate" width="463"> 777 mouse_opaque="true" name="Estate" width="463">
784 Use the Estate spatial channel 778 Use the Estate spatial channel
@@ -793,7 +787,7 @@ Options:
793 </radio_item> 787 </radio_item>
794 </radio_group> 788 </radio_group>
795 </panel> 789 </panel>
796 <panel border="false" bottom="-349" enabled="true" follows="left|top|right|bottom" 790 <panel border="true" bottom="-349" enabled="true" follows="left|top|right|bottom"
797 height="333" label="Access" left="1" mouse_opaque="true" 791 height="333" label="Access" left="1" mouse_opaque="true"
798 name="land_access_panel" width="458"> 792 name="land_access_panel" width="458">
799 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 793 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
@@ -857,35 +851,36 @@ Options:
857 mouse_opaque="true" name="AllowedText" radio_style="false" width="195"> 851 mouse_opaque="true" name="AllowedText" radio_style="false" width="195">
858 Allowed Residents 852 Allowed Residents
859 </text> 853 </text>
860 <name_list allow_calling_card_drop="false" background_visible="true" bottom="-320" 854 <name_list allow_calling_card_drop="false" background_visible="true" bottom="-304"
861 column_padding="0" draw_border="true" draw_heading="false" enabled="true" 855 column_padding="0" draw_border="true" draw_heading="false" enabled="true"
862 follows="left|top|bottom" heading_font="SansSerifSmall" heading_height="14" 856 follows="top|bottom" heading_font="SansSerifSmall" heading_height="14"
863 height="100" left="20" mouse_opaque="true" multi_select="true" 857 height="80" left="20" mouse_opaque="true" multi_select="true"
864 name="AccessList" tool_tip="([LISTED] listed, [MAX] max)" width="195" /> 858 name="AccessList" tool_tip="([LISTED] listed, [MAX] max)" width="195" />
865 <button bottom_delta="-20" enabled="true" follows="left|bottom" font="SansSerifSmall" 859 <button bottom_delta="-20" enabled="true" follows="bottom" font="SansSerifSmall"
866 halign="center" height="16" label="Add..." label_selected="Add..." 860 halign="center" height="16" label="Add..." label_selected="Add..."
867 left_delta="5" mouse_opaque="true" name="add_allowed" scale_image="true" 861 left_delta="5" mouse_opaque="true" name="add_allowed" scale_image="true"
868 width="80" /> 862 width="80" />
869 <button bottom_delta="0" enabled="true" follows="left|bottom" font="SansSerifSmall" 863 <button bottom_delta="0" enabled="true" follows="bottom" font="SansSerifSmall"
870 halign="center" height="16" label="Remove" label_selected="Remove" 864 halign="center" height="16" label="Remove" label_selected="Remove"
871 left_delta="100" mouse_opaque="true" name="remove_allowed" 865 left_delta="100" mouse_opaque="true" name="remove_allowed"
872 scale_image="true" width="80" /> 866 scale_image="true" width="80" />
873 <text bottom="-220" enabled="true" follows="left|right|top" font="SansSerifSmall" 867 <text bottom="-220" enabled="true" follows="left|right|top" font="SansSerifSmall"
874 height="16" initial_value="false" label="Ban" left="240" 868 height="16" initial_value="false"
875 mouse_opaque="true" name="BannedText" radio_style="false" width="195"> 869 label="Ban" left="240" mouse_opaque="true"
876 Banned Residents 870 name="BanCheck" radio_style="false" width="195">
871 Banned Residents
877 </text> 872 </text>
878 <name_list allow_calling_card_drop="false" background_visible="true" bottom="-320" 873 <name_list allow_calling_card_drop="false" background_visible="true" bottom="-304"
879 column_padding="0" draw_border="true" draw_heading="false" enabled="true" 874 column_padding="0" draw_border="true" draw_heading="false" enabled="true"
880 follows="left|right|top|bottom" heading_font="SansSerifSmall" 875 follows="top|bottom" heading_font="SansSerifSmall"
881 heading_height="14" height="100" left_delta="0" mouse_opaque="true" 876 heading_height="14" height="80" left_delta="0" mouse_opaque="true"
882 multi_select="true" name="BannedList" 877 multi_select="true" name="BannedList"
883 tool_tip="([LISTED] listed, [MAX] max)" width="195" /> 878 tool_tip="([LISTED] listed, [MAX] max)" width="195" />
884 <button bottom_delta="-20" enabled="true" follows="right|bottom" font="SansSerifSmall" 879 <button bottom_delta="-20" enabled="true" follows="bottom" font="SansSerifSmall"
885 halign="center" height="16" label="Add..." label_selected="Add..." 880 halign="center" height="16" label="Add..." label_selected="Add..."
886 left_delta="5" mouse_opaque="true" name="add_banned" scale_image="true" 881 left_delta="5" mouse_opaque="true" name="add_banned" scale_image="true"
887 width="80" /> 882 width="80" />
888 <button bottom_delta="0" enabled="false" follows="right|bottom" font="SansSerifSmall" 883 <button bottom_delta="0" enabled="false" follows="bottom" font="SansSerifSmall"
889 halign="center" height="16" label="Remove" label_selected="Remove" 884 halign="center" height="16" label="Remove" label_selected="Remove"
890 left_delta="100" mouse_opaque="true" name="remove_banned" 885 left_delta="100" mouse_opaque="true" name="remove_banned"
891 scale_image="true" width="80" /> 886 scale_image="true" width="80" />
diff --git a/linden/indra/newview/skins/xui/en-us/floater_avatar_textures.xml b/linden/indra/newview/skins/xui/en-us/floater_avatar_textures.xml
index 8ad36af..a404dc2 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_avatar_textures.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_avatar_textures.xml
@@ -2,10 +2,10 @@
2<floater can_close="true" can_drag_on_left="false" can_minimize="true" 2<floater can_close="true" can_drag_on_left="false" can_minimize="true"
3 can_resize="false" height="800" name="avatar_texture_debug" 3 can_resize="false" height="800" name="avatar_texture_debug"
4 title="Avatar Textures" width="960"> 4 title="Avatar Textures" width="960">
5 <text bottom="-40" height="16" left="10" name="" width="80"> 5 <text bottom="-40" height="16" left="10" name="baked_label" width="80">
6 Baked Textures 6 Baked Textures
7 </text> 7 </text>
8 <text bottom="-40" height="16" left="150" name="" width="120"> 8 <text bottom="-40" height="16" left="150" name="composite_label" width="120">
9 Composite Textures 9 Composite Textures
10 </text> 10 </text>
11 <texture_picker bottom_delta="-150" height="143" label="Head" left="10" name="baked_head" 11 <texture_picker bottom_delta="-150" height="143" label="Head" left="10" name="baked_head"
diff --git a/linden/indra/newview/skins/xui/en-us/floater_buy_contents.xml b/linden/indra/newview/skins/xui/en-us/floater_buy_contents.xml
index 929df7d..a9acccb 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_buy_contents.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_buy_contents.xml
@@ -8,9 +8,8 @@
8 mouse_opaque="true" name="contains_text" v_pad="0" width="281"> 8 mouse_opaque="true" name="contains_text" v_pad="0" width="281">
9 [NAME] contains: 9 [NAME] contains:
10 </text> 10 </text>
11 <scroll_list background_visible="false" bottom_delta="-152" column_padding="5" 11 <scroll_list background_visible="true" bottom_delta="-152" column_padding="5"
12 draw_border="true" fg_disable_color="1, 1, 1, 1" 12 draw_border="true"
13 fg_selected_color="1, 1, 1, 1" fg_unselected_color="1, 1, 1, 1"
14 follows="left|top|right|bottom" height="148" left="15" mouse_opaque="true" 13 follows="left|top|right|bottom" height="148" left="15" mouse_opaque="true"
15 multi_select="false" name="item_list" width="281"> 14 multi_select="false" name="item_list" width="281">
16 <column name="icon" width="16" /> 15 <column name="icon" width="16" />
diff --git a/linden/indra/newview/skins/xui/en-us/floater_buy_currency.xml b/linden/indra/newview/skins/xui/en-us/floater_buy_currency.xml
index e2e7fc7..f592d44 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_buy_currency.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_buy_currency.xml
@@ -3,41 +3,41 @@
3 can_resize="false" height="270" min_height="270" min_width="350" 3 can_resize="false" height="270" min_height="270" min_width="350"
4 name="buy currency" title="Buy Currency" width="350"> 4 name="buy currency" title="Buy Currency" width="350">
5 <text bottom_delta="-48" follows="top|left" font="SansSerifHuge" height="24" 5 <text bottom_delta="-48" follows="top|left" font="SansSerifHuge" height="24"
6 left="16" name="info_buying" right="-20" text_color="white"> 6 left="16" name="info_buying" right="-20" >
7 Buying Currency: 7 Buying Currency:
8 </text> 8 </text>
9 <text bottom_delta="0" follows="top|left" font="SansSerifHuge" height="24" left="16" 9 <text bottom_delta="0" follows="top|left" font="SansSerifHuge" height="24" left="16"
10 name="info_cannot_buy" right="-20" text_color="white"> 10 name="info_cannot_buy" right="-20" >
11 Cannot buy now: 11 Cannot buy now:
12 </text> 12 </text>
13 <text bottom_delta="0" follows="top|left" font="SansSerifHuge" height="24" left="16" 13 <text bottom_delta="0" follows="top|left" font="SansSerifHuge" height="24" left="16"
14 name="info_need_more" right="-20" text_color="white"> 14 name="info_need_more" right="-20" >
15 You need more currency: 15 You need more currency:
16 </text> 16 </text>
17 <icon bottom="-112" follows="top|left" height="64" image_name="badge_note.tga" 17 <icon bottom="-112" follows="top|left" height="64" image_name="badge_note.j2c"
18 left="0" name="step_error" width="64" /> 18 left="0" name="step_error" width="64" />
19 <text bottom_delta="-96" follows="top|left" height="140" left="72" 19 <text bottom_delta="-96" follows="top|left" height="140" left="72"
20 name="error_message" right="-20" text_color="white"> 20 name="error_message" right="-20" >
21 Something ain&apos;t right. 21 Something ain&apos;t right.
22 </text> 22 </text>
23 <button bottom_delta="-4" follows="bottom|left" height="20" label="Go to website" 23 <button bottom_delta="-4" follows="bottom|left" height="20" label="Go to website"
24 left="72" name="error_web" width="120" /> 24 left="72" name="error_web" width="120" />
25 <icon bottom="-112" follows="top|left" height="64" image_name="badge_note.tga" 25 <icon bottom="-112" follows="top|left" height="64" image_name="badge_note.j2c"
26 left="0" name="step_1" width="64" /> 26 left="0" name="step_1" width="64" />
27 <text bottom_delta="38" follows="top|left" height="16" left="72" name="contacting" 27 <text bottom_delta="38" follows="top|left" height="16" left="72" name="contacting"
28 right="-20" text_color="white"> 28 right="-20" >
29 Contacting LindeX... 29 Contacting LindeX...
30 </text> 30 </text>
31 <text bottom_delta="0" follows="top|left" height="16" left="72" 31 <text bottom_delta="0" follows="top|left" height="16" left="72"
32 name="buy_action_unknown" right="-20" text_color="white"> 32 name="buy_action_unknown" right="-20" >
33 Buy L$ on the LindeX currency exchange 33 Buy L$ on the LindeX currency exchange
34 </text> 34 </text>
35 <text bottom_delta="0" follows="top|left" height="16" left="72" name="buy_action" 35 <text bottom_delta="0" follows="top|left" height="16" left="72" name="buy_action"
36 right="-20" text_color="white"> 36 right="-20" >
37 [NAME] L$ [PRICE] 37 [NAME] L$ [PRICE]
38 </text> 38 </text>
39 <text bottom_delta="-20" follows="top|left" height="16" left="72" 39 <text bottom_delta="-20" follows="top|left" height="16" left="72"
40 name="currency_action" text_color="white" width="40"> 40 name="currency_action" width="40">
41 Buy L$ 41 Buy L$
42 </text> 42 </text>
43 <line_editor bottom_delta="0" follows="top|right" height="16" left_delta="45" 43 <line_editor bottom_delta="0" follows="top|right" height="16" left_delta="45"
@@ -45,11 +45,11 @@
45 1234 45 1234
46 </line_editor> 46 </line_editor>
47 <text bottom_delta="0" follows="top|right" height="16" left_delta="85" 47 <text bottom_delta="0" follows="top|right" height="16" left_delta="85"
48 name="currency_est" text_color="white" width="180"> 48 name="currency_est" width="180">
49 for approx. US$ [USD] 49 for approx. US$ [USD]
50 </text> 50 </text>
51 <text bottom_delta="0" follows="top|right" height="16" left_delta="5" 51 <text bottom_delta="0" follows="top|right" height="16" left_delta="5"
52 name="getting_data" text_color="white" width="180"> 52 name="getting_data" width="180">
53 Getting data... 53 Getting data...
54 </text> 54 </text>
55 <text bottom_delta="-32" follows="top|left" height="16" left="80" 55 <text bottom_delta="-32" follows="top|left" height="16" left="80"
@@ -77,12 +77,12 @@
77 L$ [AMT] 77 L$ [AMT]
78 </text> 78 </text>
79 <text bottom_delta="-48" follows="top|left" height="32" left="72" 79 <text bottom_delta="-48" follows="top|left" height="32" left="72"
80 name="purchase_warning_repurchase" right="-20" text_color="white"> 80 name="purchase_warning_repurchase" right="-20" >
81 Confirming this purchase only buys the currency. 81 Confirming this purchase only buys the currency.
82You&apos;ll need to try the operation again. 82You&apos;ll need to try the operation again.
83 </text> 83 </text>
84 <text bottom_delta="0" follows="top|left" height="32" left="72" 84 <text bottom_delta="0" follows="top|left" height="32" left="72"
85 name="purchase_warning_notenough" right="-20" text_color="white"> 85 name="purchase_warning_notenough" right="-20" >
86 You aren&apos;t buying enough currency 86 You aren&apos;t buying enough currency
87Increase the amount to buy. 87Increase the amount to buy.
88 </text> 88 </text>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_buy_land.xml b/linden/indra/newview/skins/xui/en-us/floater_buy_land.xml
index cadcf31..fe76e10 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_buy_land.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_buy_land.xml
@@ -2,62 +2,62 @@
2<floater can_close="true" can_drag_on_left="false" can_minimize="false" 2<floater can_close="true" can_drag_on_left="false" can_minimize="false"
3 can_resize="false" height="484" min_height="484" min_width="440" 3 can_resize="false" height="484" min_height="484" min_width="440"
4 name="buy land" title="Buy Land" width="740"> 4 name="buy land" title="Buy Land" width="740">
5 <text bg_readonly_color="clear" bottom_delta="-35" follows="left|top" 5 <text bottom_delta="-35" follows="left|top"
6 font="SansSerifSmall" height="14" left="440" name="region_name_label" 6 font="SansSerifSmall" height="14" left="440" name="region_name_label"
7 right="725" text_readonly_color="white" width="60" word_wrap="true"> 7 right="725" width="60" word_wrap="true">
8 Region: 8 Region:
9 </text> 9 </text>
10 <text bg_readonly_color="clear" bottom_delta="0" follows="left|top" 10 <text bottom_delta="0" follows="left|top"
11 font="SansSerifSmall" height="14" left="550" name="region_name_text" 11 font="SansSerifSmall" height="14" left="550" name="region_name_text"
12 text_readonly_color="white" width="130"> 12 width="130">
13 (unknown) 13 (unknown)
14 </text> 14 </text>
15 <text bg_readonly_color="clear" follows="left|top" font="SansSerifSmall" height="14" 15 <text follows="left|top" font="SansSerifSmall" height="14"
16 left="440" name="estate_name_label" right="725" text_readonly_color="white" 16 left="440" name="estate_name_label" right="725"
17 width="60" word_wrap="true"> 17 width="60" word_wrap="true">
18 Estate: 18 Estate:
19 </text> 19 </text>
20 <text bg_readonly_color="clear" bottom_delta="0" follows="left|top" 20 <text bottom_delta="0" follows="left|top"
21 font="SansSerifSmall" height="14" left="550" name="estate_name_text" 21 font="SansSerifSmall" height="14" left="550" name="estate_name_text"
22 text_readonly_color="white" width="130"> 22 width="130">
23 (unknown) 23 (unknown)
24 </text> 24 </text>
25 <text bg_readonly_color="clear" follows="left|top" font="SansSerifSmall" height="20" 25 <text follows="left|top" font="SansSerifSmall" height="20"
26 left="440" name="estate_owner_label" right="550" 26 left="440" name="estate_owner_label" right="550"
27 text_readonly_color="white" width="100" word_wrap="true"> 27 width="100" word_wrap="true">
28 Estate Owner: 28 Estate Owner:
29 </text> 29 </text>
30 <text bg_readonly_color="clear" bottom_delta="0" follows="left|top" 30 <text bottom_delta="0" follows="left|top"
31 font="SansSerifSmall" height="20" left="550" name="estate_owner_text" 31 font="SansSerifSmall" height="20" left="550" name="estate_owner_text"
32 text_readonly_color="white" width="130"> 32 width="130">
33 (unknown) 33 (unknown)
34 </text> 34 </text>
35 <text bg_readonly_color="clear" follows="left|top" font="SansSerif" height="16" 35 <text follows="left|top" font="SansSerif" height="16"
36 left="440" name="resellable_changeable_label" right="725" 36 left="440" name="resellable_changeable_label" right="725"
37 text_readonly_color="white" width="260" word_wrap="true"> 37 width="260" word_wrap="true">
38 Purchased land in this region: 38 Purchased land in this region:
39 </text> 39 </text>
40 <text bg_readonly_color="clear" follows="left|top" font="SansSerifSmall" height="16" 40 <text follows="left|top" font="SansSerifSmall" height="16"
41 left="470" name="resellable_clause" right="725" text_readonly_color="white" 41 left="470" name="resellable_clause" right="725"
42 width="260" word_wrap="true"> 42 width="260" word_wrap="true">
43 Purchased land in this region may or may not be resold. 43 Purchased land in this region may or may not be resold.
44 </text> 44 </text>
45 <text bg_readonly_color="clear" follows="left|top" font="SansSerifSmall" height="16" 45 <text follows="left|top" font="SansSerifSmall" height="16"
46 left="470" name="changeable_clause" right="725" text_readonly_color="white" 46 left="470" name="changeable_clause" right="725"
47 width="260" word_wrap="true"> 47 width="260" word_wrap="true">
48 may or may not be joined or subdivided. 48 may or may not be joined or subdivided.
49 </text> 49 </text>
50 <text follows="" height="16" left="440" name="covenant_text" right="725" 50 <text follows="" height="16" left="440" name="covenant_text" right="725"
51 text_color="white" width="260"> 51 width="260">
52 You must agree to the Estate Covenant: 52 You must agree to the Estate Covenant:
53 </text> 53 </text>
54 <text bg_readonly_color="clear" bottom_delta="-12" follows="left|top" 54 <text bottom_delta="-12" follows="left|top"
55 font="SansSerifSmall" height="12" left="515" name="covenant_timestamp_text" 55 font="SansSerifSmall" height="12" left="515" name="covenant_timestamp_text"
56 right="725" text_readonly_color="white" width="260" word_wrap="true" /> 56 right="725" width="260" word_wrap="true" />
57 <text_editor bg_readonly_color="clear" bottom_delta="-260" enabled="false" 57 <text_editor bottom_delta="-260" enabled="false"
58 follows="top|right" font="SansSerifSmall" height="255" left="440" 58 follows="top|right" font="SansSerifSmall" height="255" left="440"
59 max_length="65535" name="covenant_editor" right="725" 59 max_length="65535" name="covenant_editor" right="725"
60 text_readonly_color="white" width="275" word_wrap="true"> 60 width="275" word_wrap="true">
61 Loading... 61 Loading...
62 </text_editor> 62 </text_editor>
63 <check_box follows="left|top" height="20" label="I Agree to the Covenant Defined Above." 63 <check_box follows="left|top" height="20" label="I Agree to the Covenant Defined Above."
@@ -65,47 +65,47 @@
65 <texture_picker bottom_delta="290" enabled="false" follows="top|left" height="135" left="16" 65 <texture_picker bottom_delta="290" enabled="false" follows="top|left" height="135" left="16"
66 name="info_image" width="180" /> 66 name="info_image" width="180" />
67 <text bottom_delta="119" follows="top|left" font="SansSerifSmall" left="204" 67 <text bottom_delta="119" follows="top|left" font="SansSerifSmall" left="204"
68 name="info_parcel_label" text_color="white" width="48"> 68 name="info_parcel_label" width="48">
69 Parcel: 69 Parcel:
70 </text> 70 </text>
71 <text bottom_delta="-5" follows="top|left" font="SansSerif" height="16" 71 <text bottom_delta="-5" follows="top|left" font="SansSerif" height="16" left_delta="50"
72 left_delta="50" name="info_parcel" right="400" text_color="white"> 72 name="info_parcel" right="400" >
73 Scotopteryx 138,204 73 Scotopteryx 138,204
74 </text> 74 </text>
75 <text follows="top|left" font="SansSerifSmall" left="204" name="info_size_label" 75 <text follows="top|left" font="SansSerifSmall" left="204" name="info_size_label"
76 text_color="white" width="48"> 76 width="48">
77 Size: 77 Size:
78 </text> 78 </text>
79 <text bottom_delta="-21" follows="top|left" font="SansSerif" height="32" 79 <text bottom_delta="-21" follows="top|left" font="SansSerif" height="32" left_delta="50"
80 left_delta="50" name="info_size" right="400" text_color="white"> 80 name="info_size" right="400" >
81 1024 sq. m. 81 1024 sq. m.
82 </text> 82 </text>
83 <text follows="top|left" font="SansSerifSmall" left="204" name="info_price_label" 83 <text follows="top|left" font="SansSerifSmall" left="204" name="info_price_label"
84 text_color="white" width="48"> 84 width="48">
85 Price: 85 Price:
86 </text> 86 </text>
87 <text bottom_delta="-5" follows="top|left" font="SansSerif" height="16" 87 <text bottom_delta="-5" follows="top|left" font="SansSerif" height="16" left_delta="50"
88 left_delta="50" name="info_price" right="400" text_color="white"> 88 name="info_price" right="400" >
89 L$ 1500, objects included 89 L$ 1500, objects included
90 </text> 90 </text>
91 <text bottom="-180" follows="top|left" font="SansSerifHuge" height="24" left="16" 91 <text bottom="-180" follows="top|left" font="SansSerifHuge" height="24" left="16"
92 name="info_action" text_color="white" width="200"> 92 name="info_action" width="200">
93 Buying this land will: 93 Buying this land will:
94 </text> 94 </text>
95 <pad height="10" /> 95 <pad height="10" />
96 <icon follows="top|left" height="64" image_name="badge_note.tga" left="0" 96 <icon follows="top|left" height="64" image_name="badge_note.j2c" left="0"
97 name="step_error" width="64" /> 97 name="step_error" width="64" />
98 <text bottom_delta="-110" follows="top|left" height="160" left="72" 98 <text bottom_delta="-110" follows="top|left" height="160" left="72"
99 name="error_message" right="400" text_color="white" width="180"> 99 name="error_message" right="400" width="180">
100 Something ain&apos;t right. 100 Something ain&apos;t right.
101 </text> 101 </text>
102 <button bottom_delta="-4" follows="bottom|left" height="20" label="Go to website" 102 <button bottom_delta="-4" follows="bottom|left" height="20" label="Go to website"
103 left="72" name="error_web" width="120" /> 103 left="72" name="error_web" width="120" />
104 <pad height="-200" /> 104 <pad height="-200" />
105 <icon follows="top|left" height="64" image_name="badge_ok.tga" left="0" name="step_1" 105 <icon follows="top|left" height="64" image_name="badge_ok.j2c" left="0" name="step_1"
106 width="64" /> 106 width="64" />
107 <text bottom_delta="38" follows="top|left" height="16" left="72" 107 <text bottom_delta="38" follows="top|left" height="16" left="72"
108 name="account_action" right="400" text_color="white" width="180"> 108 name="account_action" right="400" width="180" font="SansSerifBig" >
109 Upgrade you to premium membership. 109 Upgrade you to premium membership.
110 </text> 110 </text>
111 <text follows="top|left" height="16" left="72" name="account_reason" right="400" 111 <text follows="top|left" height="16" left="72" name="account_reason" right="400"
@@ -124,29 +124,29 @@
124 </combo_item> 124 </combo_item>
125 </combo_box> 125 </combo_box>
126 <pad height="10" /> 126 <pad height="10" />
127 <icon follows="top|left" height="64" image_name="badge_note.tga" left="0" 127 <icon follows="top|left" height="64" image_name="badge_note.j2c" left="0"
128 name="step_2" width="64" /> 128 name="step_2" width="64" />
129 <text bottom_delta="38" follows="top|left" height="16" left="72" 129 <text bottom_delta="38" follows="top|left" height="16" left="72"
130 name="land_use_action" right="400" text_color="white" width="180"> 130 name="land_use_action" right="400" width="180" font="SansSerifBig" >
131 Increase your monthly land use fees to US$ 40/month. 131 Increase your monthly land use fees to US$ 40/month.
132 </text> 132 </text>
133 <text follows="top|left" height="32" left="72" name="land_use_reason" right="400" 133 <text follows="top|left" height="32" left="72" name="land_use_reason" right="400"
134 width="180"> 134 width="180">
135 You hold 1,309 square meters of land. 135 You hold 1,309 square meters of land.
136This parcel is 512 square meters of land. 136This parcel is 512 square meters of land.
137 </text> 137 </text>
138 <pad height="10" /> 138 <pad height="10" />
139 <icon follows="top|left" height="64" image_name="badge_note.tga" left="0" 139 <icon follows="top|left" height="64" image_name="badge_note.j2c" left="0"
140 name="step_3" width="64" /> 140 name="step_3" width="64" />
141 <text bottom_delta="38" follows="top|left" height="16" left="72" 141 <text bottom_delta="38" follows="top|left" height="16" left="72"
142 name="purchase_action" right="400" text_color="white"> 142 name="purchase_action" right="400" font="SansSerifBig" >
143 Pay Joe Resident L$4000 for the land 143 Pay Joe Resident L$4000 for the land
144 </text> 144 </text>
145 <text follows="top|left" height="16" left="72" name="currency_reason" right="400"> 145 <text follows="top|left" height="16" left="72" name="currency_reason" right="400">
146 You have L$2,100. 146 You have L$2,100.
147 </text> 147 </text>
148 <text bottom_delta="-25" follows="top|left" height="16" left="74" 148 <text bottom_delta="-25" follows="top|left" height="16" left="74"
149 name="currency_action" text_color="white" width="90"> 149 name="currency_action" width="90">
150 Buy additional L$ 150 Buy additional L$
151 </text> 151 </text>
152 <pad height="0" width="8" /> 152 <pad height="0" width="8" />
@@ -156,7 +156,7 @@ This parcel is 512 square meters of land.
156 </line_editor> 156 </line_editor>
157 <pad height="0" width="8" /> 157 <pad height="0" width="8" />
158 <text bottom_delta="3" follows="top|right" height="16" left="260" name="currency_est" 158 <text bottom_delta="3" follows="top|right" height="16" left="260" name="currency_est"
159 text_color="white" width="180"> 159 width="180">
160 for approx. US$ [AMOUNT2] 160 for approx. US$ [AMOUNT2]
161 </text> 161 </text>
162 <text follows="top|left" height="16" left="72" name="currency_balance" right="400"> 162 <text follows="top|left" height="16" left="72" name="currency_balance" right="400">
@@ -188,7 +188,7 @@ This parcel is 512 square meters of land.
188 No land selected. 188 No land selected.
189 </string> 189 </string>
190 <string name="multiple_parcels_selected"> 190 <string name="multiple_parcels_selected">
191 Multiple different parcels selected. 191 Multiple different parcels selected.
192Try selecting a smaller area. 192Try selecting a smaller area.
193 </string> 193 </string>
194 <string name="no_permission"> 194 <string name="no_permission">
@@ -210,15 +210,15 @@ Try selecting a smaller area.
210 The selected area has no public land. 210 The selected area has no public land.
211 </string> 211 </string>
212 <string name="not_owned_by_you"> 212 <string name="not_owned_by_you">
213 Land owned by another user is selected. 213 Land owned by another user is selected.
214Try selecting a smaller area. 214Try selecting a smaller area.
215 </string> 215 </string>
216 <string name="for_first_time_group"> 216 <string name="for_first_time_group">
217 This land is reserved for first time buyers. 217 This land is reserved for first time buyers.
218You cannot buy it for a group. 218You cannot buy it for a group.
219 </string> 219 </string>
220 <string name="for_first_time"> 220 <string name="for_first_time">
221 This land is reserved for first time buyers. 221 This land is reserved for first time buyers.
222You already own land. 222You already own land.
223 </string> 223 </string>
224 <string name="processing"> 224 <string name="processing">
diff --git a/linden/indra/newview/skins/xui/en-us/floater_buy_object.xml b/linden/indra/newview/skins/xui/en-us/floater_buy_object.xml
index 1c0f9fb..3d30171 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_buy_object.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_buy_object.xml
@@ -2,9 +2,8 @@
2<floater can_close="true" can_drag_on_left="false" can_minimize="true" can_resize="true" 2<floater can_close="true" can_drag_on_left="false" can_minimize="true" can_resize="true"
3 height="250" min_height="175" min_width="154" name="contents" 3 height="250" min_height="175" min_width="154" name="contents"
4 rect_control="FloaterBuyRect" title="Buy Copy of Object" width="300"> 4 rect_control="FloaterBuyRect" title="Buy Copy of Object" width="300">
5 <scroll_list background_visible="false" bottom="-60" column_padding="5" draw_border="true" 5 <scroll_list background_visible="true" bottom="-60" column_padding="5" draw_border="true"
6 fg_disable_color="1, 1, 1, 1" fg_selected_color="1, 1, 1, 1" 6 follows="left|top|right" height="36"
7 fg_unselected_color="1, 1, 1, 1" follows="left|top|right" height="36"
8 left="15" mouse_opaque="true" multi_select="false" name="object_list" 7 left="15" mouse_opaque="true" multi_select="false" name="object_list"
9 width="281"> 8 width="281">
10 <column name="icon" width="16" /> 9 <column name="icon" width="16" />
@@ -16,9 +15,8 @@
16 mouse_opaque="true" name="contents_text" v_pad="0" width="281"> 15 mouse_opaque="true" name="contents_text" v_pad="0" width="281">
17 and its contents: 16 and its contents:
18 </text> 17 </text>
19 <scroll_list background_visible="false" bottom_delta="-112" column_padding="5" 18 <scroll_list background_visible="true" bottom_delta="-112" column_padding="5"
20 draw_border="true" fg_disable_color="1, 1, 1, 1" 19 draw_border="true"
21 fg_selected_color="1, 1, 1, 1" fg_unselected_color="1, 1, 1, 1"
22 follows="left|top|right|bottom" height="108" left="15" mouse_opaque="true" 20 follows="left|top|right|bottom" height="108" left="15" mouse_opaque="true"
23 multi_select="false" name="item_list" width="281"> 21 multi_select="false" name="item_list" width="281">
24 <column name="icon" width="16" /> 22 <column name="icon" width="16" />
diff --git a/linden/indra/newview/skins/xui/en-us/floater_camera.xml b/linden/indra/newview/skins/xui/en-us/floater_camera.xml
new file mode 100644
index 0000000..44e12ef
--- /dev/null
+++ b/linden/indra/newview/skins/xui/en-us/floater_camera.xml
@@ -0,0 +1,19 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater can_close="true"
3 can_drag_on_left="false"
4 can_minimize="false"
5 can_resize="false"
6 can_tear_off="true"
7 follows="top"
8 min_height="100"
9 min_width="100"
10 mouse_opaque="true"
11 name="move floater"
12 rect_control="FloaterCameraRect3"
13 title=""
14 >
15 <!-- Icons are custom buttons in the code -->
16 <string name="rotate_tooltip">Rotate Camera Around Focus</string>
17 <string name="zoom_tooltip">Zoom Camera Towards Focus</string>
18 <string name="move_tooltip">Move Camera Up and Down, Left and Right</string>
19</floater>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_chat_history.xml b/linden/indra/newview/skins/xui/en-us/floater_chat_history.xml
index a887c54..91f3bdb 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_chat_history.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_chat_history.xml
@@ -18,11 +18,17 @@
18 <string name="voice_icon"> 18 <string name="voice_icon">
19 icn_voice-localchat.tga 19 icn_voice-localchat.tga
20 </string> 20 </string>
21 <string name="IM_logging_string">
22 -- Instant message logging enabled --
23 </string>
24 <string name="IM_end_log_string">
25 -- End of Log --
26 </string>
21 <layout_stack border="false" bottom="2" follows="left|top|right|bottom" height="250" left="2" 27 <layout_stack border="false" bottom="2" follows="left|top|right|bottom" height="250" left="2"
22 orientation="horizontal" width="430"> 28 orientation="horizontal" width="430" name="panels">
23 <layout_panel border="false" bottom="0" default_tab_group="1" height="130" left="0" 29 <layout_panel border="false" bottom="0" default_tab_group="1" height="130" left="0"
24 min_width="275" name="im_contents_panel" width="305"> 30 min_width="275" name="im_contents_panel" width="305">
25 <combo_box follows="left|top" height="20" label="Gestures" left="4" name="Gesture" 31 <combo_box follows="left|top" height="20" label="Gestures" left="5" name="Gesture"
26 width="120"> 32 width="120">
27 <combo_item name="Gestures"> 33 <combo_item name="Gestures">
28 Gestures 34 Gestures
@@ -32,29 +38,31 @@
32 height="20" initial_value="false" label="Show Muted Text" left_delta="125" 38 height="20" initial_value="false" label="Show Muted Text" left_delta="125"
33 name="show mutes" radio_style="false" width="116" /> 39 name="show mutes" radio_style="false" width="116" />
34 <button bottom_delta="0" follows="right|top" height="20" label="&lt; &lt;" 40 <button bottom_delta="0" follows="right|top" height="20" label="&lt; &lt;"
35 label_selected="&gt; &gt;" left="270" name="toggle_active_speakers_btn" 41 label_selected="&gt; &gt;" left="272" name="toggle_active_speakers_btn"
36 right="303" 42 right="305"
37 tool_tip="Click here to show list of active participants in this IM session." 43 tool_tip="Click here to show list of active participants in this IM session."
38 visible="true" width="70" /> 44 width="70" />
39 <text_editor type="string" length="1" bottom="28" embedded_items="false" enabled="false" 45 <text_editor type="string" length="1" bg_readonly_color="ChatHistoryBgColor" bg_writeable_color="ChatHistoryBgColor"
40 follows="left|top|right|bottom" font="SansSerif" height="70" left="6" 46 bottom="28" embedded_items="false" enabled="false"
47 follows="left|top|right|bottom" font="SansSerif" height="74" left="5"
41 max_length="2147483647" mouse_opaque="true" name="Chat History Editor" 48 max_length="2147483647" mouse_opaque="true" name="Chat History Editor"
42 text_color="1 1 1 1" text_readonly_color="1 1 1 1" width="300" 49 text_color="ChatHistoryTextColor"
43 word_wrap="true" /> 50 text_readonly_color="ChatHistoryTextColor" width="299" word_wrap="true" />
44 <text_editor type="string" length="1" bottom="28" embedded_items="false" enabled="false" 51 <text_editor type="string" length="1" bg_readonly_color="ChatHistoryBgColor" bg_writeable_color="ChatHistoryBgColor"
45 follows="left|top|right|bottom" font="SansSerif" height="70" left="6" 52 bottom="28" embedded_items="false" enabled="false"
53 follows="left|top|right|bottom" font="SansSerif" height="74" left="5"
46 max_length="2147483647" mouse_opaque="true" 54 max_length="2147483647" mouse_opaque="true"
47 name="Chat History Editor with mute" text_color="1 1 1 1" 55 name="Chat History Editor with mute" text_color="ChatHistoryTextColor"
48 text_readonly_color="1 1 1 1" width="300" word_wrap="true" /> 56 text_readonly_color="ChatHistoryTextColor" width="300" word_wrap="true" />
49 <panel bottom="3" follows="left|right|bottom" left="5" name="chat_panel" right="-5" 57 <panel bottom="5" follows="left|right|bottom" left="5" name="chat_panel" right="-5"
50 tab_group="1" top="25"> 58 tab_group="1" top="25">
51 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="0" 59 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="0"
52 enabled="true" follows="left|right|bottom" font="SansSerif" 60 enabled="true" follows="left|right|bottom" font="SansSerif"
53 handle_edit_keys_directly="false" height="20" label="Click here to chat." 61 handle_edit_keys_directly="false" height="20" label="Click here to chat."
54 left="0" max_length="254" mouse_opaque="true" name="Chat Editor" 62 left="0" max_length="254" mouse_opaque="true" name="Chat Editor"
55 right="-90" select_all_on_focus_received="false" select_on_focus="false" 63 right="-70" select_all_on_focus_received="false" select_on_focus="false"
56 tab_group="1" /> 64 tab_group="1" />
57 <flyout_button bottom="0" follows="right|bottom" height="20" label="Say" left="-80" 65 <flyout_button bottom="0" follows="right|bottom" height="20" label="Say" left="-65"
58 list_position="above" mouse_opaque="true" name="Say" tool_tip="(Enter)" 66 list_position="above" mouse_opaque="true" name="Say" tool_tip="(Enter)"
59 width="70"> 67 width="70">
60 <flyout_button_item value="shout"> 68 <flyout_button_item value="shout">
diff --git a/linden/indra/newview/skins/xui/en-us/floater_chatterbox.xml b/linden/indra/newview/skins/xui/en-us/floater_chatterbox.xml
index b836893..83059f2 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_chatterbox.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_chatterbox.xml
@@ -1,7 +1,12 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<multi_floater can_close="true" can_drag_on_left="false" can_minimize="true" can_resize="true" 2<multi_floater can_close="true" can_drag_on_left="false" can_minimize="true" can_resize="true"
3 height="390" min_height="340" min_width="400" name="floater_chatterbox" 3 height="390" name="floater_chatterbox"
4 rect_control="ChatterboxRect" title="Communicate" width="392"> 4 rect_control="ChatterboxRect" title="Communicate" width="392">
5 <tab_container bottom="2" follows="left|right|top|bottom" height="370" left="0" 5<icon enabled="false" image_name="tabarea.tga"
6 bg_alpha_color="blue" color="DefaultShadowLight" border="false"
7 bottom="-389" follows="left|right|bottom" height="17" left="1" scale_image="true"
8 mouse_opaque="false" name="chatterbox_tab_container" width="391"></icon>
9 <tab_container bottom="2" follows="left|right|top|bottom" height="370" left="0"
6 name="chatterbox_tabs" tab_position="bottom" tab_width="80" width="395" /> 10 name="chatterbox_tabs" tab_position="bottom" tab_width="80" width="395" />
7</multi_floater> 11</multi_floater>
12
diff --git a/linden/indra/newview/skins/xui/en-us/floater_critical.xml b/linden/indra/newview/skins/xui/en-us/floater_critical.xml
index 58c8c16..126a8ac 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_critical.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_critical.xml
@@ -8,22 +8,13 @@
8 <button bottom="-484" font="SansSerif" halign="center" height="20" label="Cancel" 8 <button bottom="-484" font="SansSerif" halign="center" height="20" label="Cancel"
9 label_selected="Cancel" left_delta="108" mouse_opaque="true" name="Cancel" 9 label_selected="Cancel" left_delta="108" mouse_opaque="true" name="Cancel"
10 width="100" /> 10 width="100" />
11 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 11 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" bottom="-31" drop_shadow_visible="true" follows="left|top" font="SansSerif" h_pad="0" halign="left" height="15" left="16" mouse_opaque="true" name="tos_title" v_pad="0" width="568">
12 bottom="-31" drop_shadow_visible="true" follows="left|top" font="SansSerif" 12 Critical Message
13 h_pad="0" halign="left" height="15" left="16" mouse_opaque="true" 13 </text>
14 name="tos_title" v_pad="0" width="568"> 14 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" bottom="-77" drop_shadow_visible="true" follows="left|top" font="SansSerif" h_pad="0" halign="left" height="30" left="32" mouse_opaque="true" name="tos_heading" v_pad="0" width="552">
15 Critical Message
16 </text>
17 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
18 bottom="-77" drop_shadow_visible="true" follows="left|top" font="SansSerif"
19 h_pad="0" halign="left" height="30" left="32" mouse_opaque="true"
20 name="tos_heading" v_pad="0" width="552">
21 Please read the following message carefully. 15 Please read the following message carefully.
22 </text> 16 </text>
23 <text_editor bottom="-376" embedded_items="false" follows="left|top" font="SansSerif" 17 <text_editor bottom="-376" embedded_items="false" follows="left|top" font="SansSerif" height="283" left="16" max_length="65536" mouse_opaque="true" text_readonly_color="255,255,255,255" bg_readonly_color="0, 30, 80, 200" name="tos_text" width="568" word_wrap="true">
24 height="283" left="16" max_length="65536" mouse_opaque="true"
25 name="tos_text" text_readonly_color="1, 1, 1, 1" width="568"
26 word_wrap="true">
27 TOS_TEXT 18 TOS_TEXT
28 </text_editor> 19 </text_editor>
29</floater> 20</floater> \ No newline at end of file
diff --git a/linden/indra/newview/skins/xui/en-us/floater_customize.xml b/linden/indra/newview/skins/xui/en-us/floater_customize.xml
index 1123355..e7a7a7b 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_customize.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_customize.xml
@@ -7,7 +7,7 @@
7 <tab_container bottom="-507" height="483" left="0" mouse_opaque="false" 7 <tab_container bottom="-507" height="483" left="0" mouse_opaque="false"
8 name="customize tab container" tab_min_width="96" tab_position="left" 8 name="customize tab container" tab_min_width="96" tab_position="left"
9 width="492"> 9 width="492">
10 <panel label="Body Parts" placeholder="true" /> 10 <panel label="Body Parts" placeholder="true" name="body_parts_placeholder" />
11 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="481" 11 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="481"
12 label="Shape" left="102" mouse_opaque="true" name="Shape" width="389"> 12 label="Shape" left="102" mouse_opaque="true" name="Shape" width="389">
13 <icon bottom="-21" color="1 1 1 1" follows="top|right" height="16" 13 <icon bottom="-21" color="1 1 1 1" follows="top|right" height="16"
@@ -370,7 +370,7 @@ scratch and wear it.
370 height="20" label="Revert" label_selected="Revert" left="299" 370 height="20" label="Revert" label_selected="Revert" left="299"
371 mouse_opaque="true" name="Revert" scale_image="true" width="82" /> 371 mouse_opaque="true" name="Revert" scale_image="true" width="82" />
372 </panel> 372 </panel>
373 <panel label="Clothes" placeholder="true" /> 373 <panel label="Clothes" placeholder="true" name="clothes_placeholder" />
374 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="481" 374 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="481"
375 label="Shirt" left="102" mouse_opaque="true" name="Shirt" width="389"> 375 label="Shirt" left="102" mouse_opaque="true" name="Shirt" width="389">
376 <icon bottom="-21" color="1 1 1 1" follows="top|right" height="16" 376 <icon bottom="-21" color="1 1 1 1" follows="top|right" height="16"
diff --git a/linden/indra/newview/skins/xui/en-us/floater_day_cycle_options.xml b/linden/indra/newview/skins/xui/en-us/floater_day_cycle_options.xml
index c1a4261..84812b9 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_day_cycle_options.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_day_cycle_options.xml
@@ -1,12 +1,12 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater bottom="-150" can_close="true" can_drag_on_left="false" can_minimize="true" 2<floater bottom="-150" can_close="true" can_drag_on_left="false" can_minimize="true"
3 can_resize="false" height="275" hidden="false" left="50" min_height="180" 3 can_resize="false" height="275" left="50" min_height="180"
4 min_width="400" mouse_opaque="true" name="Day Cycle Floater" 4 min_width="400" mouse_opaque="true" name="Day Cycle Floater"
5 rect_control="FloaterDayCycleRect" title="Day Cycle Editor" width="646"> 5 rect_control="FloaterDayCycleRect" title="Day Cycle Editor" width="646">
6 <tab_container bottom="-275" follows="left|top" height="255" hidden="false" left="0" 6 <tab_container bottom="-275" follows="left|top" height="255" left="0"
7 mouse_opaque="false" name="Day Cycle Tabs" tab_position="top" width="644"> 7 mouse_opaque="false" name="Day Cycle Tabs" tab_position="top" width="644">
8 <panel border="true" bottom="-255" follows="left|top|right|bottom" height="255" 8 <panel border="true" bottom="-255" follows="left|top|right|bottom" height="255"
9 hidden="false" label="Day Cycle" left="1" mouse_opaque="false" 9 label="Day Cycle" left="1" mouse_opaque="false"
10 name="Day Cycle" width="642"> 10 name="Day Cycle" width="642">
11 <button bottom_delta="-18" follows="left|top" font="SansSerifSmall" height="15" 11 <button bottom_delta="-18" follows="left|top" font="SansSerifSmall" height="15"
12 label="?" left="612" name="WLDayCycleHelp" width="18" /> 12 label="?" left="612" name="WLDayCycleHelp" width="18" />
@@ -24,146 +24,146 @@
24 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true" 24 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true"
25 bottom="-80" control_name="WL12am" drop_shadow_visible="true" 25 bottom="-80" control_name="WL12am" drop_shadow_visible="true"
26 follows="left|top|right" font="SansSerifSmall" h_pad="0" halign="left" 26 follows="left|top|right" font="SansSerifSmall" h_pad="0" halign="left"
27 height="6" hidden="false" left="8" mouse_opaque="true" name="WL12am" 27 height="6" left="8" mouse_opaque="true" name="WL12am"
28 v_pad="0" width="55"> 28 v_pad="0" width="55">
29 12am 29 12am
30 </text> 30 </text>
31 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true" 31 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true"
32 bottom_delta="0" control_name="WL3am" drop_shadow_visible="true" 32 bottom_delta="0" control_name="WL3am" drop_shadow_visible="true"
33 follows="left|top|right" font="SansSerifSmall" h_pad="0" halign="left" 33 follows="left|top|right" font="SansSerifSmall" h_pad="0" halign="left"
34 height="6" hidden="false" left_delta="65" mouse_opaque="true" name="WL3am" 34 height="6" left_delta="65" mouse_opaque="true" name="WL3am"
35 v_pad="0" width="55"> 35 v_pad="0" width="55">
36 3am 36 3am
37 </text> 37 </text>
38 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true" 38 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true"
39 bottom_delta="0" control_name="WL6am" drop_shadow_visible="true" 39 bottom_delta="0" control_name="WL6am" drop_shadow_visible="true"
40 follows="left|top|right" font="SansSerifSmall" h_pad="0" halign="left" 40 follows="left|top|right" font="SansSerifSmall" h_pad="0" halign="left"
41 height="6" hidden="false" left_delta="65" mouse_opaque="true" name="WL6am" 41 height="6" left_delta="65" mouse_opaque="true" name="WL6am"
42 v_pad="0" width="55"> 42 v_pad="0" width="55">
43 6am 43 6am
44 </text> 44 </text>
45 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true" 45 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true"
46 bottom_delta="0" control_name="WL9am" drop_shadow_visible="true" 46 bottom_delta="0" control_name="WL9am" drop_shadow_visible="true"
47 follows="left|top|right" font="SansSerifSmall" h_pad="0" halign="left" 47 follows="left|top|right" font="SansSerifSmall" h_pad="0" halign="left"
48 height="6" hidden="false" left_delta="65" mouse_opaque="true" 48 height="6" left_delta="65" mouse_opaque="true"
49 name="WL9amHash" v_pad="0" width="55"> 49 name="WL9amHash" v_pad="0" width="55">
50 9am 50 9am
51 </text> 51 </text>
52 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true" 52 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true"
53 bottom_delta="0" control_name="WL12pm" drop_shadow_visible="true" 53 bottom_delta="0" control_name="WL12pm" drop_shadow_visible="true"
54 follows="left|top|right" font="SansSerifSmall" h_pad="0" halign="left" 54 follows="left|top|right" font="SansSerifSmall" h_pad="0" halign="left"
55 height="6" hidden="false" left_delta="65" mouse_opaque="true" 55 height="6" left_delta="65" mouse_opaque="true"
56 name="WL12pmHash" v_pad="0" width="55"> 56 name="WL12pmHash" v_pad="0" width="55">
57 12pm 57 12pm
58 </text> 58 </text>
59 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true" 59 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true"
60 bottom_delta="0" control_name="WL3pm" drop_shadow_visible="true" 60 bottom_delta="0" control_name="WL3pm" drop_shadow_visible="true"
61 follows="left|top|right" font="SansSerifSmall" h_pad="0" halign="left" 61 follows="left|top|right" font="SansSerifSmall" h_pad="0" halign="left"
62 height="6" hidden="false" left_delta="65" mouse_opaque="true" name="WL3pm" 62 height="6" left_delta="65" mouse_opaque="true" name="WL3pm"
63 v_pad="0" width="55"> 63 v_pad="0" width="55">
64 3pm 64 3pm
65 </text> 65 </text>
66 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true" 66 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true"
67 bottom_delta="0" control_name="WL6pm" drop_shadow_visible="true" 67 bottom_delta="0" control_name="WL6pm" drop_shadow_visible="true"
68 follows="left|top|right" font="SansSerifSmall" h_pad="0" halign="left" 68 follows="left|top|right" font="SansSerifSmall" h_pad="0" halign="left"
69 height="6" hidden="false" left_delta="65" mouse_opaque="true" name="WL6pm" 69 height="6" left_delta="65" mouse_opaque="true" name="WL6pm"
70 v_pad="0" width="55"> 70 v_pad="0" width="55">
71 6pm 71 6pm
72 </text> 72 </text>
73 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true" 73 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true"
74 bottom_delta="0" control_name="WL9pm" drop_shadow_visible="true" 74 bottom_delta="0" control_name="WL9pm" drop_shadow_visible="true"
75 follows="left|top|right" font="SansSerifSmall" h_pad="0" halign="left" 75 follows="left|top|right" font="SansSerifSmall" h_pad="0" halign="left"
76 height="6" hidden="false" left_delta="65" mouse_opaque="true" name="WL9pm" 76 height="6" left_delta="65" mouse_opaque="true" name="WL9pm"
77 v_pad="0" width="55"> 77 v_pad="0" width="55">
78 9pm 78 9pm
79 </text> 79 </text>
80 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true" 80 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true"
81 bottom_delta="0" control_name="WL12am2" drop_shadow_visible="true" 81 bottom_delta="0" control_name="WL12am2" drop_shadow_visible="true"
82 follows="left|top|right" font="SansSerifSmall" h_pad="0" halign="left" 82 follows="left|top|right" font="SansSerifSmall" h_pad="0" halign="left"
83 height="6" hidden="false" left_delta="65" mouse_opaque="true" 83 height="6" left_delta="65" mouse_opaque="true"
84 name="WL12am2" v_pad="0" width="55"> 84 name="WL12am2" v_pad="0" width="55">
85 12am 85 12am
86 </text> 86 </text>
87 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true" 87 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true"
88 bottom="-68" control_name="WL12amHash" drop_shadow_visible="true" 88 bottom="-68" control_name="WL12amHash" drop_shadow_visible="true"
89 follows="left|top|right" font="SansSerif" h_pad="0" halign="left" 89 follows="left|top|right" font="SansSerif" h_pad="0" halign="left"
90 height="14" hidden="false" left="20" mouse_opaque="true" name="WL12amHash" 90 height="14" left="20" mouse_opaque="true" name="WL12amHash"
91 v_pad="0" width="4"> 91 v_pad="0" width="4">
92 | 92 |
93 </text> 93 </text>
94 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true" 94 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true"
95 bottom_delta="0" control_name="WL3amHash" drop_shadow_visible="true" 95 bottom_delta="0" control_name="WL3amHash" drop_shadow_visible="true"
96 follows="left|top|right" font="SansSerif" h_pad="0" halign="left" 96 follows="left|top|right" font="SansSerif" h_pad="0" halign="left"
97 height="11" hidden="false" left_delta="65" mouse_opaque="true" 97 height="11" left_delta="65" mouse_opaque="true"
98 name="WL3amHash" v_pad="0" width="4"> 98 name="WL3amHash" v_pad="0" width="4">
99 I 99 I
100 </text> 100 </text>
101 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true" 101 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true"
102 bottom_delta="0" control_name="WL6amHash" drop_shadow_visible="true" 102 bottom_delta="0" control_name="WL6amHash" drop_shadow_visible="true"
103 follows="left|top|right" font="SansSerif" h_pad="0" halign="left" 103 follows="left|top|right" font="SansSerif" h_pad="0" halign="left"
104 height="14" hidden="false" left_delta="65" mouse_opaque="true" 104 height="14" left_delta="65" mouse_opaque="true"
105 name="WL6amHash" v_pad="0" width="4"> 105 name="WL6amHash" v_pad="0" width="4">
106 | 106 |
107 </text> 107 </text>
108 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true" 108 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true"
109 bottom_delta="0" control_name="WL9amHash" drop_shadow_visible="true" 109 bottom_delta="0" control_name="WL9amHash" drop_shadow_visible="true"
110 follows="left|top|right" font="SansSerif" h_pad="0" halign="left" 110 follows="left|top|right" font="SansSerif" h_pad="0" halign="left"
111 height="11" hidden="false" left_delta="65" mouse_opaque="true" 111 height="11" left_delta="65" mouse_opaque="true"
112 name="WL9amHash2" v_pad="0" width="4"> 112 name="WL9amHash2" v_pad="0" width="4">
113 I 113 I
114 </text> 114 </text>
115 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true" 115 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true"
116 bottom_delta="0" control_name="WL12pmHash" drop_shadow_visible="true" 116 bottom_delta="0" control_name="WL12pmHash" drop_shadow_visible="true"
117 follows="left|top|right" font="SansSerif" h_pad="0" halign="left" 117 follows="left|top|right" font="SansSerif" h_pad="0" halign="left"
118 height="14" hidden="false" left_delta="65" mouse_opaque="true" 118 height="14" left_delta="65" mouse_opaque="true"
119 name="WL12pmHash2" v_pad="0" width="4"> 119 name="WL12pmHash2" v_pad="0" width="4">
120 | 120 |
121 </text> 121 </text>
122 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true" 122 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true"
123 bottom_delta="0" control_name="WL3pmHash" drop_shadow_visible="true" 123 bottom_delta="0" control_name="WL3pmHash" drop_shadow_visible="true"
124 follows="left|top|right" font="SansSerif" h_pad="0" halign="left" 124 follows="left|top|right" font="SansSerif" h_pad="0" halign="left"
125 height="11" hidden="false" left_delta="65" mouse_opaque="true" 125 height="11" left_delta="65" mouse_opaque="true"
126 name="WL3pmHash" v_pad="0" width="4"> 126 name="WL3pmHash" v_pad="0" width="4">
127 I 127 I
128 </text> 128 </text>
129 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true" 129 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true"
130 bottom_delta="0" control_name="WL6pmHash" drop_shadow_visible="true" 130 bottom_delta="0" control_name="WL6pmHash" drop_shadow_visible="true"
131 follows="left|top|right" font="SansSerif" h_pad="0" halign="left" 131 follows="left|top|right" font="SansSerif" h_pad="0" halign="left"
132 height="14" hidden="false" left_delta="65" mouse_opaque="true" 132 height="14" left_delta="65" mouse_opaque="true"
133 name="WL6pmHash" v_pad="0" width="4"> 133 name="WL6pmHash" v_pad="0" width="4">
134 | 134 |
135 </text> 135 </text>
136 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true" 136 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true"
137 bottom_delta="0" control_name="WL9pmHash" drop_shadow_visible="true" 137 bottom_delta="0" control_name="WL9pmHash" drop_shadow_visible="true"
138 follows="left|top|right" font="SansSerif" h_pad="0" halign="left" 138 follows="left|top|right" font="SansSerif" h_pad="0" halign="left"
139 height="11" hidden="false" left_delta="65" mouse_opaque="true" 139 height="11" left_delta="65" mouse_opaque="true"
140 name="WL9pmHash" v_pad="0" width="4"> 140 name="WL9pmHash" v_pad="0" width="4">
141 I 141 I
142 </text> 142 </text>
143 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true" 143 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true"
144 bottom_delta="0" control_name="WL12amHash2" drop_shadow_visible="true" 144 bottom_delta="0" control_name="WL12amHash2" drop_shadow_visible="true"
145 follows="left|top|right" font="SansSerif" h_pad="0" halign="left" 145 follows="left|top|right" font="SansSerif" h_pad="0" halign="left"
146 height="14" hidden="false" left_delta="65" mouse_opaque="true" 146 height="14" left_delta="65" mouse_opaque="true"
147 name="WL12amHash2" v_pad="0" width="4"> 147 name="WL12amHash2" v_pad="0" width="4">
148 | 148 |
149 </text> 149 </text>
150 <button bottom="-40" enabled="true" font="SansSerif" halign="center" height="20" 150 <button bottom="-40" enabled="true" font="SansSerif" halign="center" height="20"
151 hidden="false" label="Add Key" label_selected="Add Key" left="550" 151 label="Add Key" label_selected="Add Key" left="550"
152 mouse_opaque="true" name="WLAddKey" scale_image="true" width="80" /> 152 mouse_opaque="true" name="WLAddKey" scale_image="true" width="80" />
153 <button bottom="-65" enabled="true" font="SansSerif" halign="center" height="20" 153 <button bottom="-65" enabled="true" font="SansSerif" halign="center" height="20"
154 hidden="false" label="Delete Key" label_selected="Delete Key" left="550" 154 label="Delete Key" label_selected="Delete Key" left="550"
155 mouse_opaque="true" name="WLDeleteKey" scale_image="true" width="80" /> 155 mouse_opaque="true" name="WLDeleteKey" scale_image="true" width="80" />
156 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true" 156 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true"
157 bottom="-120" control_name="DayCycleText" drop_shadow_visible="true" 157 bottom="-120" control_name="DayCycleText" drop_shadow_visible="true"
158 follows="left|top|right" font="SansSerif" h_pad="0" halign="left" 158 follows="left|top|right" font="SansSerif" h_pad="0" halign="left"
159 height="16" hidden="false" left="20" mouse_opaque="true" 159 height="16" left="20" mouse_opaque="true"
160 name="WLCurKeyFrameText" v_pad="0" width="150"> 160 name="WLCurKeyFrameText" v_pad="0" width="150">
161 Key Frame Settings: 161 Key Frame Settings:
162 </text> 162 </text>
163 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true" 163 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true"
164 bottom="-140" control_name="DayCycleText" drop_shadow_visible="true" 164 bottom="-140" control_name="DayCycleText" drop_shadow_visible="true"
165 follows="left|top|right" font="SansSerif" h_pad="0" halign="left" 165 follows="left|top|right" font="SansSerif" h_pad="0" halign="left"
166 height="16" hidden="false" left="30" mouse_opaque="true" 166 height="16" left="30" mouse_opaque="true"
167 name="WLCurKeyTimeText" v_pad="0" width="100"> 167 name="WLCurKeyTimeText" v_pad="0" width="100">
168 Key Time: 168 Key Time:
169 </text> 169 </text>
@@ -179,7 +179,7 @@
179 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true" 179 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true"
180 bottom_delta="-25" control_name="WLCurKeyTimeText" 180 bottom_delta="-25" control_name="WLCurKeyTimeText"
181 drop_shadow_visible="true" follows="left|top|right" font="SansSerif" 181 drop_shadow_visible="true" follows="left|top|right" font="SansSerif"
182 h_pad="0" halign="left" height="16" hidden="false" left="30" 182 h_pad="0" halign="left" height="16" left="30"
183 mouse_opaque="true" name="WLCurKeyTimeText2" v_pad="0" width="120"> 183 mouse_opaque="true" name="WLCurKeyTimeText2" v_pad="0" width="120">
184 Key Preset: 184 Key Preset:
185 </text> 185 </text>
@@ -191,7 +191,7 @@
191 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true" 191 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true"
192 bottom="-130" control_name="DayCycleText" drop_shadow_visible="true" 192 bottom="-130" control_name="DayCycleText" drop_shadow_visible="true"
193 follows="left|top|right" font="SansSerif" h_pad="0" halign="left" 193 follows="left|top|right" font="SansSerif" h_pad="0" halign="left"
194 height="16" hidden="false" left="220" mouse_opaque="true" 194 height="16" left="220" mouse_opaque="true"
195 name="DayCycleText" v_pad="0" width="120"> 195 name="DayCycleText" v_pad="0" width="120">
196 Snap: 196 Snap:
197 </text> 197 </text>
@@ -201,7 +201,7 @@
201 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true" 201 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true"
202 bottom="-180" control_name="DayCycleText" drop_shadow_visible="true" 202 bottom="-180" control_name="DayCycleText" drop_shadow_visible="true"
203 follows="left|top|right" font="SansSerif" h_pad="0" halign="left" 203 follows="left|top|right" font="SansSerif" h_pad="0" halign="left"
204 height="16" hidden="false" left="220" mouse_opaque="true" 204 height="16" left="220" mouse_opaque="true"
205 name="DayCycleText2" v_pad="0" width="120"> 205 name="DayCycleText2" v_pad="0" width="120">
206 Length of Cycle: 206 Length of Cycle:
207 </text> 207 </text>
@@ -223,26 +223,26 @@
223 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true" 223 <text type="string" length="1" bg_visible="true" border_drop_shadow_visible="false" border_visible="true"
224 bottom="-130" control_name="DayCycleText" drop_shadow_visible="true" 224 bottom="-130" control_name="DayCycleText" drop_shadow_visible="true"
225 follows="left|top|right" font="SansSerif" h_pad="0" halign="left" 225 follows="left|top|right" font="SansSerif" h_pad="0" halign="left"
226 height="16" hidden="false" left="310" mouse_opaque="true" 226 height="16" left="310" mouse_opaque="true"
227 name="DayCycleText3" v_pad="0" width="120"> 227 name="DayCycleText3" v_pad="0" width="120">
228 Preview: 228 Preview:
229 </text> 229 </text>
230 <button bottom="-155" enabled="true" font="SansSerif" halign="center" height="20" 230 <button bottom="-155" enabled="true" font="SansSerif" halign="center" height="20"
231 hidden="false" label="Play" label_selected="Play" left="310" 231 label="Play" label_selected="Play" left="310"
232 mouse_opaque="true" name="WLAnimSky" scale_image="true" width="50" /> 232 mouse_opaque="true" name="WLAnimSky" scale_image="true" width="50" />
233 <button bottom="-155" enabled="true" font="SansSerif" halign="center" height="20" 233 <button bottom="-155" enabled="true" font="SansSerif" halign="center" height="20"
234 hidden="false" label="Stop!" label_selected="Stop" left_delta="55" 234 label="Stop!" label_selected="Stop" left_delta="55"
235 mouse_opaque="true" name="WLStopAnimSky" scale_image="true" width="50" /> 235 mouse_opaque="true" name="WLStopAnimSky" scale_image="true" width="50" />
236 <button bottom="-155" enabled="true" font="SansSerif" halign="center" height="20" 236 <button bottom="-155" enabled="true" font="SansSerif" halign="center" height="20"
237 hidden="false" label="Use Estate Time" label_selected="Go to Estate Time" 237 label="Use Estate Time" label_selected="Go to Estate Time"
238 left_delta="55" mouse_opaque="true" name="WLUseLindenTime" 238 left_delta="55" mouse_opaque="true" name="WLUseLindenTime"
239 scale_image="true" width="140" /> 239 scale_image="true" width="140" />
240 <button bottom="-195" enabled="true" font="SansSerif" halign="center" height="20" 240 <button bottom="-195" enabled="true" font="SansSerif" halign="center" height="20"
241 hidden="false" label="Save Test Day" label_selected="Save Test Day" 241 label="Save Test Day" label_selected="Save Test Day"
242 left="480" mouse_opaque="true" name="WLSaveDayCycle" scale_image="true" 242 left="480" mouse_opaque="true" name="WLSaveDayCycle" scale_image="true"
243 width="150" /> 243 width="150" />
244 <button bottom="-220" enabled="true" font="SansSerif" halign="center" height="20" 244 <button bottom="-220" enabled="true" font="SansSerif" halign="center" height="20"
245 hidden="false" label="Load Test Day" label_selected="Load Test Day" 245 label="Load Test Day" label_selected="Load Test Day"
246 left="480" mouse_opaque="true" name="WLLoadDayCycle" scale_image="true" 246 left="480" mouse_opaque="true" name="WLLoadDayCycle" scale_image="true"
247 width="150" /> 247 width="150" />
248 </panel> 248 </panel>
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 aff0db9..7714d67 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_directory.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_directory.xml
@@ -139,10 +139,7 @@
139 <button bottom="-533" follows="left|bottom" font="SansSerif" halign="center" 139 <button bottom="-533" follows="left|bottom" font="SansSerif" halign="center"
140 height="20" label="Delete" label_selected="Delete" left="80" 140 height="20" label="Delete" label_selected="Delete" left="80"
141 mouse_opaque="true" name="Delete" width="80" /> 141 mouse_opaque="true" name="Delete" width="80" />
142 <scroll_list background_visible="false" bottom="-513" column_padding="0" draw_border="true" 142 <scroll_list background_visible="true" bottom="-513" column_padding="0" draw_border="true" draw_heading="true" follows="left|top|right|bottom" height="464" left="4" mouse_opaque="true"
143 draw_heading="true" fg_disable_color="1, 1, 1, 1"
144 fg_selected_color="1, 1, 1, 1" fg_unselected_color="1, 1, 1, 1"
145 follows="left|top|right|bottom" height="464" left="4" mouse_opaque="true"
146 multi_select="false" name="results" search_column="2" width="339"> 143 multi_select="false" name="results" search_column="2" width="339">
147 <column label="" name="icon" width="24" /> 144 <column label="" name="icon" width="24" />
148 <column label="" name="type" width="-1" /> 145 <column label="" name="type" width="-1" />
@@ -180,7 +177,7 @@
180 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 177 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
181 bottom="-36" drop_shadow_visible="true" follows="left|top" font="SansSerif" 178 bottom="-36" drop_shadow_visible="true" follows="left|top" font="SansSerif"
182 h_pad="0" halign="center" height="14" left_delta="40" mouse_opaque="true" 179 h_pad="0" halign="center" height="14" left_delta="40" mouse_opaque="true"
183 name="date_text" text_color="1, 1, 1, 1" v_pad="0" width="48"> 180 name="date_text" v_pad="0" width="48">
184 6/6 181 6/6
185 </text> 182 </text>
186 <button bottom="-40" follows="left|top" font="SansSerif" halign="center" height="20" 183 <button bottom="-40" follows="left|top" font="SansSerif" halign="center" height="20"
@@ -253,9 +250,7 @@
253 <button bottom="-533" follows="left|bottom" font="SansSerif" halign="center" 250 <button bottom="-533" follows="left|bottom" font="SansSerif" halign="center"
254 height="20" label="Delete" label_selected="Delete" left="80" 251 height="20" label="Delete" label_selected="Delete" left="80"
255 mouse_opaque="true" name="Delete" width="80" /> 252 mouse_opaque="true" name="Delete" width="80" />
256 <scroll_list background_visible="false" bottom="-513" column_padding="0" draw_border="true" 253 <scroll_list background_visible="true" bottom="-513" column_padding="0" draw_border="true" draw_heading="true"
257 draw_heading="true" fg_disable_color="1, 1, 1, 1"
258 fg_selected_color="1, 1, 1, 1" fg_unselected_color="1, 1, 1, 1"
259 follows="left|top|right|bottom" height="464" left="4" mouse_opaque="true" 254 follows="left|top|right|bottom" height="464" left="4" mouse_opaque="true"
260 multi_select="false" name="results" search_column="2" width="339"> 255 multi_select="false" name="results" search_column="2" width="339">
261 <column label="" name="icon" width="24" /> 256 <column label="" name="icon" width="24" />
@@ -308,9 +303,7 @@
308 These are the most popular places in the world, as measured by traffic, 303 These are the most popular places in the world, as measured by traffic,
309the amount of time people spend there. 304the amount of time people spend there.
310 </text> 305 </text>
311 <scroll_list background_visible="false" bottom="-513" column_padding="0" draw_border="true" 306 <scroll_list background_visible="true" bottom="-513" column_padding="0" draw_border="true" draw_heading="true"
312 draw_heading="true" fg_disable_color="1, 1, 1, 1"
313 fg_selected_color="1, 1, 1, 1" fg_unselected_color="1, 1, 1, 1"
314 follows="left|top|right|bottom" height="464" left="4" mouse_opaque="true" 307 follows="left|top|right|bottom" height="464" left="4" mouse_opaque="true"
315 multi_select="false" name="results" search_column="2" width="339"> 308 multi_select="false" name="results" search_column="2" width="339">
316 <column label="" name="icon" width="24" /> 309 <column label="" name="icon" width="24" />
@@ -389,9 +382,7 @@ the amount of time people spend there.
389 Land can be bought direct for Linden Dollars (L$) or at auction for either L$ or US$. 382 Land can be bought direct for Linden Dollars (L$) or at auction for either L$ or US$.
390To buy direct, visit the land and click on the place name in the title bar. 383To buy direct, visit the land and click on the place name in the title bar.
391 </text> 384 </text>
392 <scroll_list background_visible="false" bottom="-513" column_padding="0" draw_border="true" 385 <scroll_list background_visible="true" bottom="-513" column_padding="0" draw_border="true" draw_heading="true"
393 draw_heading="true" fg_disable_color="1, 1, 1, 1"
394 fg_selected_color="1, 1, 1, 1" fg_unselected_color="1, 1, 1, 1"
395 follows="left|top|right|bottom" height="464" left="4" mouse_opaque="true" 386 follows="left|top|right|bottom" height="464" left="4" mouse_opaque="true"
396 multi_select="false" name="results" search_column="2" width="387"> 387 multi_select="false" name="results" search_column="2" width="387">
397 <column label="" name="icon" width="24" /> 388 <column label="" name="icon" width="24" />
@@ -479,10 +470,8 @@ To buy direct, visit the land and click on the place name in the title bar.
479 <button bottom="-26" follows="left|top" font="SansSerif" halign="center" height="20" 470 <button bottom="-26" follows="left|top" font="SansSerif" halign="center" height="20"
480 label="Search" label_selected="Search" left_delta="136" mouse_opaque="true" 471 label="Search" label_selected="Search" left_delta="136" mouse_opaque="true"
481 name="Search" width="70" /> 472 name="Search" width="70" />
482 <scroll_list background_visible="false" bottom="-513" column_padding="0" draw_border="true" 473 <scroll_list background_visible="true" bottom="-513" column_padding="0" draw_border="true"
483 draw_heading="true" fg_disable_color="1, 1, 1, 1" 474 draw_heading="true" follows="left|top|right|bottom" height="464" left="4" mouse_opaque="true"
484 fg_selected_color="1, 1, 1, 1" fg_unselected_color="1, 1, 1, 1"
485 follows="left|top|right|bottom" height="464" left="4" mouse_opaque="true"
486 multi_select="false" name="results" search_column="2" width="339"> 475 multi_select="false" name="results" search_column="2" width="339">
487 <column label="" name="icon" width="24" /> 476 <column label="" name="icon" width="24" />
488 <column label="" name="type" width="-1" /> 477 <column label="" name="type" width="-1" />
@@ -521,9 +510,7 @@ To buy direct, visit the land and click on the place name in the title bar.
521 <button bottom="-26" follows="left|top" font="SansSerif" halign="center" height="20" 510 <button bottom="-26" follows="left|top" font="SansSerif" halign="center" height="20"
522 label="Search" label_selected="Search" left_delta="210" mouse_opaque="true" 511 label="Search" label_selected="Search" left_delta="210" mouse_opaque="true"
523 name="Search" width="70" /> 512 name="Search" width="70" />
524 <scroll_list background_visible="false" bottom="-513" column_padding="0" draw_border="true" 513 <scroll_list background_visible="true" bottom="-513" column_padding="0" draw_border="true" draw_heading="true"
525 draw_heading="true" fg_disable_color="1, 1, 1, 1"
526 fg_selected_color="1, 1, 1, 1" fg_unselected_color="1, 1, 1, 1"
527 follows="left|top|right|bottom" height="464" left="4" mouse_opaque="true" 514 follows="left|top|right|bottom" height="464" left="4" mouse_opaque="true"
528 multi_select="false" name="results" search_column="2" width="326"> 515 multi_select="false" name="results" search_column="2" width="326">
529 <column label="" name="icon" width="24" /> 516 <column label="" name="icon" width="24" />
@@ -566,9 +553,7 @@ To buy direct, visit the land and click on the place name in the title bar.
566 font="SansSerifSmall" height="16" initial_value="false" 553 font="SansSerifSmall" height="16" initial_value="false"
567 label="Include Mature groups" left="42" mouse_opaque="true" 554 label="Include Mature groups" left="42" mouse_opaque="true"
568 name="incmature" width="204" /> 555 name="incmature" width="204" />
569 <scroll_list background_visible="false" bottom="-513" column_padding="0" draw_border="true" 556 <scroll_list background_visible="true" bottom="-513" column_padding="0" draw_border="true" draw_heading="true"
570 draw_heading="true" fg_disable_color="1, 1, 1, 1"
571 fg_selected_color="1, 1, 1, 1" fg_unselected_color="1, 1, 1, 1"
572 follows="left|top|right|bottom" height="464" left="4" mouse_opaque="true" 557 follows="left|top|right|bottom" height="464" left="4" mouse_opaque="true"
573 multi_select="false" name="results" search_column="2" width="339"> 558 multi_select="false" name="results" search_column="2" width="339">
574 <column label="" name="icon" sort="score" sort_ascending="false" width="24" /> 559 <column label="" name="icon" sort="score" sort_ascending="false" width="24" />
@@ -613,9 +598,7 @@ To buy direct, visit the land and click on the place name in the title bar.
613 font="SansSerifSmall" height="16" initial_value="false" 598 font="SansSerifSmall" height="16" initial_value="false"
614 label="Include Mature content" left_delta="78" mouse_opaque="true" 599 label="Include Mature content" left_delta="78" mouse_opaque="true"
615 name="incmature" width="156" /> 600 name="incmature" width="156" />
616 <scroll_list background_visible="false" bottom="-513" column_padding="0" draw_border="true" 601 <scroll_list background_visible="true" bottom="-513" column_padding="0" draw_border="true" draw_heading="false"
617 draw_heading="false" fg_disable_color="1, 1, 1, 1"
618 fg_selected_color="1, 1, 1, 1" fg_unselected_color="1, 1, 1, 1"
619 follows="left|top|right|bottom" height="464" left="4" mouse_opaque="true" 602 follows="left|top|right|bottom" height="464" left="4" mouse_opaque="true"
620 multi_select="false" name="results" search_column="1" width="339"> 603 multi_select="false" name="results" search_column="1" width="339">
621 <column label="" name="icon" width="24" /> 604 <column label="" name="icon" width="24" />
diff --git a/linden/indra/newview/skins/xui/en-us/floater_env_settings.xml b/linden/indra/newview/skins/xui/en-us/floater_env_settings.xml
index 31feeb4..e2bafbf 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_env_settings.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_env_settings.xml
@@ -1,17 +1,17 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater bottom="-130" can_close="true" can_drag_on_left="false" can_minimize="true" 2<floater bottom="-130" can_close="true" can_drag_on_left="false" can_minimize="true"
3 can_resize="false" height="150" hidden="false" left="50" min_height="150" 3 can_resize="false" height="150" left="50" min_height="150"
4 min_width="600" mouse_opaque="true" name="Environment Editor Floater" 4 min_width="600" mouse_opaque="true" name="Environment Editor Floater"
5 rect_control="FloaterEnvRect" title="Environment Editor" width="600"> 5 rect_control="FloaterEnvRect" title="Environment Editor" width="600">
6 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 6 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
7 bottom="-48" drop_shadow_visible="true" follows="left|top|right" 7 bottom="-48" drop_shadow_visible="true" follows="left|top|right"
8 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 8 font="SansSerif" h_pad="0" halign="left" height="16"
9 left="10" mouse_opaque="true" name="EnvTimeText" v_pad="0" width="140"> 9 left="10" mouse_opaque="true" name="EnvTimeText" v_pad="0" width="140">
10 Time of Day 10 Time of Day
11 </text> 11 </text>
12 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 12 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
13 bottom_delta="-30" drop_shadow_visible="true" follows="left|top|right" 13 bottom_delta="-30" drop_shadow_visible="true" follows="left|top|right"
14 font="SansSerifSmall" h_pad="0" halign="left" height="16" hidden="false" 14 font="SansSerifSmall" h_pad="0" halign="left" height="16"
15 left="15" mouse_opaque="true" name="EnvTimeText2" v_pad="0" width="140"> 15 left="15" mouse_opaque="true" name="EnvTimeText2" v_pad="0" width="140">
16 12:00 PM 16 12:00 PM
17 </text> 17 </text>
@@ -24,7 +24,7 @@
24 width="200" /> 24 width="200" />
25 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 25 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
26 bottom="-102" drop_shadow_visible="true" follows="left|top|right" 26 bottom="-102" drop_shadow_visible="true" follows="left|top|right"
27 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 27 font="SansSerif" h_pad="0" halign="left" height="16"
28 left="10" mouse_opaque="true" name="EnvCloudText" v_pad="0" width="140"> 28 left="10" mouse_opaque="true" name="EnvCloudText" v_pad="0" width="140">
29 Cloud Cover 29 Cloud Cover
30 </text> 30 </text>
@@ -35,18 +35,18 @@
35 width="210" /> 35 width="210" />
36 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 36 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
37 bottom="-55" drop_shadow_visible="true" follows="left|top|right" 37 bottom="-55" drop_shadow_visible="true" follows="left|top|right"
38 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 38 font="SansSerif" h_pad="0" halign="left" height="16"
39 left="310" mouse_opaque="true" name="EnvWaterColorText" v_pad="0" 39 left="310" mouse_opaque="true" name="EnvWaterColorText" v_pad="0"
40 width="140"> 40 width="140">
41 Water Color 41 Water Color
42 </text> 42 </text>
43 <color_swatch border_color="0.45098, 0.517647, 0.607843, 1" bottom="-80" 43 <color_swatch border_color="0.45098, 0.517647, 0.607843, 1" bottom="-80"
44 can_apply_immediately="true" color="0.5, 0.5, 0.5, 1" follows="left|top" 44 can_apply_immediately="true" color="0.5, 0.5, 0.5, 1" follows="left|top"
45 height="50" hidden="false" label="" left="390" mouse_opaque="true" 45 height="50" label="" left="390" mouse_opaque="true"
46 name="EnvWaterColor" tool_tip="Click to open Color Picker" width="40" /> 46 name="EnvWaterColor" tool_tip="Click to open Color Picker" width="40" />
47 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 47 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
48 bottom="-102" drop_shadow_visible="true" follows="left|top|right" 48 bottom="-102" drop_shadow_visible="true" follows="left|top|right"
49 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 49 font="SansSerif" h_pad="0" halign="left" height="16"
50 left="310" mouse_opaque="true" name="EnvWaterFogText" v_pad="0" width="140"> 50 left="310" mouse_opaque="true" name="EnvWaterFogText" v_pad="0" width="140">
51 Water Fog 51 Water Fog
52 </text> 52 </text>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_friends.xml b/linden/indra/newview/skins/xui/en-us/floater_friends.xml
deleted file mode 100644
index 540b066..0000000
--- a/linden/indra/newview/skins/xui/en-us/floater_friends.xml
+++ /dev/null
@@ -1,65 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater can_close="true" can_drag_on_left="false" can_minimize="true" can_resize="true"
3 min_height="300" min_width="350" name="friends"
4 rect_control="FloaterFriendsRect" title="Friends">
5 <scroll_list bottom="90" can_resize="true" column_padding="0" draw_heading="true"
6 follows="left|top|bottom|right" left="10" multi_select="true"
7 name="friend_list" right="-100" search_column="1"
8 tool_tip="Hold shift or control while clicking to select multiple friends"
9 top="-20">
10 <column image="ff_online_status_button.tga" name="icon_online_status" width="20" />
11 <column dynamicwidth="true" label="Name" name="friend_name" />
12 <column image="ff_visible_online_button.tga" name="icon_visible_online" width="20" />
13 <column image="ff_visible_map_button.tga" name="icon_visible_map" width="20" />
14 <column image="ff_edit_mine_button.tga" name="icon_edit_mine" width="20" />
15 <column image="ff_edit_theirs_button.tga" name="icon_edit_theirs" width="20" />
16 </scroll_list>
17 <panel background_opaque="true" background_visible="true" bevel_style="in"
18 bg_alpha_color="blue" bg_opaque_color="0,0,0,0.3" border="true" bottom="10"
19 can_resize="false" follows="left|right|bottom" height="70" left="10"
20 mouse_opaque="true" name="rights_container" right="-100">
21 <text bottom_delta="-11" follows="top|left" font="SansSerifSmall" left="10"
22 name="friend_name_label">
23 Select friend(s) to change rights...
24 </text>
25 <check_box bottom_delta="-21" enabled="false" follows="bottom|left" font="SansSerifSmall"
26 height="16" initial_value="false" label="Can see my online status"
27 left="10" mouse_opaque="true" name="online_status_cb" radio_style="false"
28 tool_tip="Set whether this friend see my online status in their friends list or calling cards"
29 width="200" />
30 <check_box bottom_delta="-18" enabled="false" follows="bottom|left" font="SansSerifSmall"
31 height="16" initial_value="false" label="Can see me on the map" left="25"
32 mouse_opaque="true" name="map_status_cb" radio_style="false"
33 tool_tip="Set whether this friend see my location on their map" width="200" />
34 <check_box bottom_delta="-18" enabled="false" follows="bottom|left" font="SansSerifSmall"
35 height="16" initial_value="false" label="Can modify my objects" left="10"
36 mouse_opaque="true" name="modify_status_cb" radio_style="false"
37 tool_tip="Set whether this friend can modify my objects" width="200" />
38 <text bottom_delta="25" follows="top|left" font="SansSerif" left="10"
39 name="process_rights_label">
40 Processing rights change...
41 </text>
42 </panel>
43 <pad bottom="-17" height="0" left="-90" width="1" />
44 <button bottom_delta="-25" follows="top|right" font="SansSerif" height="22"
45 label="Profile" left_delta="0" name="profile_btn"
46 tool_tip="Show picture, groups, and other information" width="80" />
47 <button bottom_delta="-25" follows="top|right" font="SansSerif" height="22"
48 label="IM/Call" left_delta="0" name="im_btn"
49 tool_tip="Open Instant Message session" width="80" />
50 <button bottom_delta="-25" follows="top|right" font="SansSerif" height="22"
51 label="Teleport..." left_delta="0" name="offer_teleport_btn"
52 tool_tip="Offer this friend a teleport to your current location" width="80" />
53 <button bottom_delta="-25" follows="top|right" font="SansSerif" height="22"
54 label="Pay..." left_delta="0" name="pay_btn"
55 tool_tip="Give Linden dollars (L$) to this friend" width="80" />
56 <button bottom_delta="-25" follows="top|right" font="SansSerif" height="22"
57 label="Remove..." left_delta="0" name="remove_btn"
58 tool_tip="Remove this person from your friends list" width="80" />
59 <button bottom_delta="-35" follows="top|right" font="SansSerif" height="22"
60 label="Add..." left_delta="0" name="add_btn"
61 tool_tip="Offer friendship to a resident" width="80" />
62 <string name="Multiple">
63 Multiple friends...
64 </string>
65</floater>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_gesture.xml b/linden/indra/newview/skins/xui/en-us/floater_gesture.xml
index 62d8dd2..b8a7174 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_gesture.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_gesture.xml
@@ -1,23 +1,25 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater can_close="true" can_drag_on_left="false" can_minimize="true" can_resize="true" 2<floater can_close="true" can_drag_on_left="false" can_minimize="true" can_resize="true"
3 height="465" min_height="200" min_width="375" name="gestures" 3 height="465" min_height="200" min_width="350" name="gestures"
4 title="Active Gestures" width="375"> 4 title="Active Gestures" width="350">
5 <text bottom="-30" follows="top|left" font="SansSerifSmall" left="15" 5 <text bottom="-30" follows="top|left" font="SansSerifSmall" left="15"
6 name="help_label"> 6 name="help_label">
7 Click a gesture or press a key to play animations and sounds. 7 Double-click a gesture to play animations and sounds.
8 </text> 8 </text>
9 <scroll_list bottom_delta="-380" draw_border="true" draw_heading="true" 9 <scroll_list bottom_delta="-390" draw_border="true" draw_heading="true"
10 follows="top|left|bottom|right" height="370" left="15" multi_select="false" 10 follows="top|left|bottom|right" height="380" left="15" multi_select="false"
11 name="gesture_list" width="345"> 11 name="gesture_list" right="-15">
12 <column label="Trigger" name="trigger" width="70" /> 12 <column label="Trigger" name="trigger" width="70" />
13 <column label="Key" name="shortcut" width="70" /> 13 <column label="Key" name="shortcut" width="70" />
14 <column label="" name="key" width="-1" /> 14 <column label="" name="key" width="-1" />
15 <column label="Name" name="name" width="160" /> 15 <column label="Name" name="name" width="160" />
16 </scroll_list> 16 </scroll_list>
17 <button bottom_delta="-30" follows="bottom|right" height="20" label="New" left="-365" 17 <button bottom_delta="-30" follows="bottom|right" height="20" label="New" left="15"
18 name="new_gesture_btn" width="83" /> 18 name="new_gesture_btn" width="83" />
19 <!--
19 <button bottom_delta="0" follows="bottom|right" height="20" label="Inventory" 20 <button bottom_delta="0" follows="bottom|right" height="20" label="Inventory"
20 left_delta="89" name="inventory_btn" width="83" /> 21 left_delta="89" name="inventory_btn" width="83" />
22 -->
21 <button bottom_delta="0" follows="bottom|right" height="20" label="Edit" 23 <button bottom_delta="0" follows="bottom|right" height="20" label="Edit"
22 left_delta="89" name="edit_btn" width="83" /> 24 left_delta="89" name="edit_btn" width="83" />
23 <button bottom_delta="0" follows="bottom|right" height="20" label="Play" 25 <button bottom_delta="0" follows="bottom|right" height="20" label="Play"
diff --git a/linden/indra/newview/skins/xui/en-us/floater_groups.xml b/linden/indra/newview/skins/xui/en-us/floater_groups.xml
deleted file mode 100644
index ceeefd9..0000000
--- a/linden/indra/newview/skins/xui/en-us/floater_groups.xml
+++ /dev/null
@@ -1,39 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater bottom="-371" can_close="true" can_drag_on_left="false" can_minimize="true"
3 can_resize="true" can_tear_off="false" enabled="true" follows="left|top"
4 height="300" left="280" min_height="250" min_width="350"
5 mouse_opaque="true" name="groups" title="Groups" width="350">
6 <scroll_list background_visible="true" bottom="45" column_padding="5" draw_border="true"
7 draw_heading="false" draw_stripes="true" enabled="true"
8 follows="left|top|right|bottom" left="10" mouse_opaque="true"
9 multi_select="false" name="group list" tab_stop="true" top="-20"
10 width="240">
11 <column label="" name="name" width="248" />
12 </scroll_list>
13 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
14 bottom="22" drop_shadow_visible="true" enabled="true" follows="left|bottom"
15 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="12"
16 mouse_opaque="false" name="groupdesc" v_pad="0" width="248">
17 Your currently active group is displayed in bold.
18 </text>
19 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
20 bottom="5" drop_shadow_visible="true" enabled="true" follows="left|bottom"
21 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="12"
22 mouse_opaque="false" name="groupcount" v_pad="0" width="248">
23 You belong to [COUNT] groups (of [MAX] maximum).
24 </text>
25 <pad bottom="-17" height="0" left="-90" width="1" />
26 <button bottom_delta="-25" follows="top|right" font="SansSerif" height="22"
27 label="Info" name="Info" width="80" />
28 <button bottom_delta="-25" follows="top|right" font="SansSerif" height="22"
29 label="IM/Call" left_delta="0" name="IM"
30 tool_tip="Open Instant Message session" width="80" />
31 <button bottom_delta="-25" follows="top|right" font="SansSerif" height="22"
32 label="Activate" name="Activate" width="80" />
33 <button bottom_delta="-25" follows="top|right" font="SansSerif" height="22"
34 label="Leave" name="Leave" width="80" />
35 <button bottom_delta="-35" follows="top|right" font="SansSerif" height="22"
36 label="Create..." name="Create" width="80" />
37 <button bottom_delta="-25" follows="top|right" font="SansSerif" height="22"
38 label="Search..." name="Search..." width="80" />
39</floater>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_hardware_settings.xml b/linden/indra/newview/skins/xui/en-us/floater_hardware_settings.xml
index 64a3c6b..5773142 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_hardware_settings.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_hardware_settings.xml
@@ -1,53 +1,82 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater bottom="-400" can_close="true" can_drag_on_left="false" can_minimize="true" 2<floater bottom="-400" can_close="true" can_drag_on_left="false"
3 can_resize="false" height="205" hidden="false" left="50" min_height="200" 3 can_minimize="true" can_resize="false" height="224"
4 min_width="600" mouse_opaque="true" name="Hardware Settings Floater" 4 left="50" min_height="200" min_width="600" mouse_opaque="true"
5 title="Hardware Settings" width="500"> 5 name="Hardware Settings Floater" title="Hardware Settings" width="500">
6 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 6 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
7 bottom="-42" drop_shadow_visible="true" enabled="true" follows="left|top" 7 bottom="-42" drop_shadow_visible="true" enabled="true" follows="left|top"
8 font="SansSerifSmall" h_pad="0" halign="left" height="12" hidden="false" 8 font="SansSerifSmall" h_pad="0" halign="left" height="12"
9 left="10" mouse_opaque="true" name="Filtering:" v_pad="0" width="128"> 9 left="10" mouse_opaque="true" name="Filtering:" v_pad="0" width="128">
10 Filtering: 10 Filtering:
11 </text> 11 </text>
12 <check_box bottom="-46" control_name="RenderAnisotropic" enabled="true" follows="left|top" 12 <check_box bottom="-46" control_name="RenderAnisotropic" enabled="true" follows="left|top"
13 font="SansSerifSmall" height="16" hidden="false" initial_value="false" 13 font="SansSerifSmall" height="16" initial_value="false"
14 label="Anisotropic Filtering (slower when enabled)" left="148" 14 label="Anisotropic Filtering (slower when enabled)" left="148"
15 mouse_opaque="true" name="ani" radio_style="false" width="256" /> 15 mouse_opaque="true" name="ani" radio_style="false" width="256" />
16 <spinner bottom="-65" control_name="RenderGamma" decimal_digits="2" enabled="true" 16 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
17 follows="left|top" height="16" hidden="false" increment="0.01" 17 bottom="-61" drop_shadow_visible="true" enabled="true" follows="left|top"
18 font="SansSerifSmall" h_pad="0" halign="left" height="12"
19 left="10" mouse_opaque="true" name="Antialiasing:" v_pad="0" width="128">
20 Antialiasing:
21 </text>
22 <combo_box bottom="-65" control_name="RenderFSAASamples" enabled="true" follows="left|top"
23 font="SansSerifSmall" height="16" initial_value="false"
24 label="Antialiasing" left="148"
25 mouse_opaque="true" name="fsaa" width="64">
26 <combo_item name="FSAADisabled" value="0">
27 Disabled
28 </combo_item>
29 <combo_item name="2x" value="2">
30 2x
31 </combo_item>
32 <combo_item name="4x" value="4">
33 4x
34 </combo_item>
35 <combo_item name="8x" value="8">
36 8x
37 </combo_item>
38 <combo_item name="16x" value="16">
39 16x
40 </combo_item>
41 </combo_box>
42 <spinner bottom_delta="-21" control_name="RenderGamma" decimal_digits="2" enabled="true"
43 follows="left|top" height="16" increment="0.01"
18 initial_val="1" label="Gamma:" label_width="138" left="10" max_val="2" 44 initial_val="1" label="Gamma:" label_width="138" left="10" max_val="2"
19 min_val="0.0" mouse_opaque="true" name="gamma" width="202" /> 45 min_val="0.0" mouse_opaque="true" name="gamma" width="202" />
20 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 46 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
21 bottom="-61" drop_shadow_visible="true" enabled="true" follows="left|top" 47 bottom_delta="2" drop_shadow_visible="true" enabled="true" follows="left|top"
22 font="SansSerifSmall" h_pad="0" halign="left" height="12" hidden="false" 48 font="SansSerifSmall" h_pad="0" halign="left" height="12"
23 left="222" mouse_opaque="true" name="(brightness, lower is brighter)" 49 left="222" mouse_opaque="true" name="(brightness, lower is brighter)"
24 v_pad="0" width="315"> 50 v_pad="0" width="315">
25 (brightness, lower is brighter, 0=use default) 51 (brightness, lower is brighter, 0=use default)
26 </text> 52 </text>
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="-104" drop_shadow_visible="true" enabled="true" follows="left|top" 54 bottom_delta="-20" drop_shadow_visible="true" enabled="true" follows="left|top"
29 font="SansSerifSmall" h_pad="0" halign="left" height="12" hidden="false" 55 font="SansSerifSmall" h_pad="0" halign="left" height="12"
30 left="10" mouse_opaque="true" name="Enable VBO:" v_pad="0" width="128"> 56 left="10" mouse_opaque="true" name="Enable VBO:" v_pad="0"
57 width="128">
31 Enable VBO: 58 Enable VBO:
32 </text> 59 </text>
33 <check_box bottom="-108" control_name="RenderVBOEnable" enabled="true" follows="left|top" 60 <check_box bottom_delta="-5" control_name="RenderVBOEnable" enabled="true" follows="left|top"
34 font="SansSerifSmall" height="16" hidden="false" initial_value="true" 61 font="SansSerifSmall" height="16" initial_value="true"
35 label="Enable OpenGL Vertex Buffer Objects" left="148" mouse_opaque="true" 62 label="Enable OpenGL Vertex Buffer Objects" left="148"
36 name="vbo" radio_style="false" 63 mouse_opaque="true" name="vbo" radio_style="false"
37 tool_tip="Enabling this on modern hardware gives a performance gain. However, older hardware often has poor implementations of VBOs and you may get crashes when this is enabled." 64 tool_tip="Enabling this on modern hardware gives a performance gain. However, older hardware often has poor implementations of VBOs and you may get crashes when this is enabled."
38 width="315" /> 65 width="315" />
39 <slider bottom="-133" can_edit_text="false" control_name="TextureMemory" 66
40 decimal_digits="0" enabled="true" follows="left|top" height="16" 67 <slider bottom_delta="-21" can_edit_text="false" control_name="TextureMemory"
41 hidden="false" increment="16" initial_val="32" label="Texture Memory (MB):" 68 decimal_digits="0" enabled="true"
42 label_width="135" left="10" max_val="4096" min_val="0" mouse_opaque="true" 69 follows="left|top" height="16" increment="16"
43 name="GrapicsCardTextureMemory" 70 initial_val="32" label="Texture Memory (MB):" label_width="135" left="10"
44 tool_tip="Amount of memory to allocate for textures. Defaults to Video Card Memory. Reducing this may improve performance but may also make textures blurry." 71 max_val="4096" min_val="0" mouse_opaque="true" name="GrapicsCardTextureMemory"
45 width="300" /> 72 tool_tip="Amount of memory to allocate for textures. Defaults to Video Card Memory. Reducing this may improve performance but may also make textures blurry."
46 <spinner bottom="-157" control_name="RenderFogRatio" decimal_digits="1" enabled="true" 73 width="300" />
47 follows="left|top" height="16" hidden="false" increment="0.1" 74
75 <spinner bottom_delta="-24" control_name="RenderFogRatio" decimal_digits="1" enabled="true"
76 follows="left|top" height="16" increment="0.1"
48 initial_val="4" label="Fog Distance Ratio:" label_width="138" left="10" 77 initial_val="4" label="Fog Distance Ratio:" label_width="138" left="10"
49 max_val="10" min_val="0.5" mouse_opaque="true" name="fog" width="202" /> 78 max_val="10" min_val="0.5" mouse_opaque="true" name="fog" width="202" />
50 <button bottom="10" enabled="true" follows="right|bottom" font="SansSerif" 79 <button bottom="10" enabled="true" follows="right|bottom" font="SansSerif"
51 halign="center" height="20" hidden="false" label="OK" label_selected="OK" 80 halign="center" height="20" label="OK" label_selected="OK"
52 left="-110" mouse_opaque="true" name="OK" scale_image="true" width="90" /> 81 left="-110" mouse_opaque="true" name="OK" scale_image="true" width="90" />
53</floater> 82</floater>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_html.xml b/linden/indra/newview/skins/xui/en-us/floater_html.xml
index 6edeec2..227e41b 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_html.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_html.xml
@@ -11,12 +11,12 @@
11 <button bottom_delta="0" follows="top|left" font="SansSerifSmall" height="20" 11 <button bottom_delta="0" follows="top|left" font="SansSerifSmall" height="20"
12 label="Forward" left_delta="73" name="forward_btn" width="70" /> 12 label="Forward" left_delta="73" name="forward_btn" width="70" />
13 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="0" 13 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="0"
14 follows="top|left|right" font="SansSerifSmall" height="20" left_delta="85" 14 follows="top|left|right" font="SansSerifSmall" height="20" left_delta="85"
15 max_length="256" mouse_opaque="true" name="url_edit" 15 max_length="256" mouse_opaque="true" name="url_edit"
16 select_all_on_focus_received="true" width="435" /> 16 select_all_on_focus_received="true" width="435" />
17 <button bottom_delta="0" follows="top|right" font="SansSerifSmall" height="20" 17 <button bottom_delta="0" follows="top|right" font="SansSerifSmall" height="20"
18 label="Go" left_delta="440" name="go_btn" width="70" /> 18 label="Go" left_delta="440" name="go_btn" width="70" />
19 <string name="home_page_url"> 19 <string name="home_page_url">
20 http://www.secondlife.com 20 http://www.secondlife.com
21 </string> 21 </string>
22</floater> 22</floater>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_hud.xml b/linden/indra/newview/skins/xui/en-us/floater_hud.xml
new file mode 100644
index 0000000..6a72920
--- /dev/null
+++ b/linden/indra/newview/skins/xui/en-us/floater_hud.xml
@@ -0,0 +1,9 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater can_close="true" can_drag_on_left="false" can_minimize="false" can_resize="false"
3 height="272" min_height="272" width="342" min_width="342" name="floater_hud"
4 title="Tutorial">
5 <web_browser border_visible="false" left="0" bottom="0" right="-1" top="-16" caret_color="1 1 1 1" follows="top|left|bottom|right"
6 name="floater_hud_browser"
7 start_url="data:text/html,%3Chtml%3E%3Chead%3E%3C/head%3E%3Cbody bgcolor=%22#000000%22 text=%22ffffff%22%3E%3Ch1%3E%3Ctt%3E%0D%0A%0D%0ALoading...%3C/tt%3E%3C/h1%3E%3C/body%3E%3C/html%3E"
8 />
9</floater>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_instant_message.xml b/linden/indra/newview/skins/xui/en-us/floater_instant_message.xml
index 66a6768..cb27be6 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_instant_message.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_instant_message.xml
@@ -31,36 +31,36 @@
31 <string name="default_text_label"> 31 <string name="default_text_label">
32 Click here to instant message. 32 Click here to instant message.
33 </string> 33 </string>
34 <button bottom="-40" follows="left|top" height="20" label="Profile..." left="4" 34 <button bottom="-40" follows="left|top" height="20" label="Profile..." left="5"
35 name="profile_callee_btn" width="80" /> 35 name="profile_callee_btn" width="80" />
36 <button bottom="-40" follows="left|top" halign="center" height="20" 36 <button bottom="-40" follows="left|top" halign="center" height="20"
37 image_overlay="icn_voice-call-start.tga" image_overlay_alignment="left" 37 image_overlay="icn_voice-call-start.tga" image_overlay_alignment="left"
38 label="Call" left_delta="85" name="start_call_btn" width="90" /> 38 label="Call" left_delta="85" name="start_call_btn" width="100" />
39 <button bottom="-40" follows="left|top" halign="right" height="20" 39 <button bottom="-40" follows="left|top" halign="center" height="20"
40 image_overlay="icn_voice-call-end.tga" image_overlay_alignment="left" 40 image_overlay="icn_voice-call-end.tga" image_overlay_alignment="left"
41 label="End Call" left_delta="0" name="end_call_btn" pad_right="10" 41 label="End Call" left_delta="0" name="end_call_btn" pad_right="10"
42 visible="false" width="90" /> 42 visible="false" width="100" />
43 <panel border="false" bottom="-40" follows="left|top|right" height="20" 43 <panel border="false" bottom="-37" follows="left|top|right" height="20"
44 left_delta="77" name="speaker_controls" width="344"> 44 left_delta="96" name="speaker_controls" width="100">
45 <volume_slider bottom="0" follows="left|bottom" height="15" increment="0.05" initial_val="0.5" 45 <volume_slider bottom="0" follows="left|bottom" height="15" increment="0.05" initial_val="0.5"
46 left="0" max_val="1.0" min_val="0.0" name="speaker_volume" width="80" /> 46 left_delta="0" max_val="1.0" min_val="0.0" name="speaker_volume" width="56" />
47 <button bottom_delta="0" height="20" image_selected="icn_speaker-muted_dark.tga" 47 <button bottom_delta="0" height="20" image_selected="icn_speaker-muted_dark.tga"
48 image_unselected="icn_speaker_dark.tga" label="" left_delta="85" 48 image_unselected="icn_speaker_dark.tga" label="" left_delta="56"
49 name="mute_btn" tool_tip="Mute voice" width="25" /> 49 name="mute_btn" tool_tip="Mute voice" width="25" />
50 </panel> 50 </panel>
51 <text_editor type="string" length="1" bg_readonly_color="ChatHistoryBgColor" bg_writeable_color="ChatHistoryBgColor" 51 <text_editor type="string" length="1" bg_readonly_color="ChatHistoryBgColor" bg_writeable_color="ChatHistoryBgColor"
52 bottom="28" embedded_items="false" enabled="false" 52 bottom="30" embedded_items="false" enabled="false"
53 follows="left|top|right|bottom" font="SansSerif" height="225" left="4" 53 follows="left|top|right|bottom" font="SansSerif" height="221" left="5"
54 max_length="2147483647" mouse_opaque="true" name="im_history" 54 max_length="2147483647" mouse_opaque="true" name="im_history"
55 text_color="ChatHistoryTextColor" 55 text_color="ChatHistoryTextColor"
56 text_readonly_color="ChatHistoryTextColor" width="490" word_wrap="true" /> 56 text_readonly_color="ChatHistoryTextColor" width="487" word_wrap="true" />
57 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="5" 57 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="7"
58 follows="left|right|bottom" font="SansSerif" height="20" 58 follows="left|right|bottom" font="SansSerif" height="20"
59 label="Click here to instant message" left="6" max_length="1022" 59 label="Click here to instant message" left="5" max_length="1022"
60 mouse_opaque="true" name="chat_editor" select_all_on_focus_received="false" 60 mouse_opaque="true" name="chat_editor" select_all_on_focus_received="false"
61 select_on_focus="false" tab_group="1" width="421" /> 61 select_on_focus="false" tab_group="1" width="423" />
62 <button bottom="4" follows="right|bottom" font="SansSerif" halign="center" height="20" 62 <button bottom="7" follows="right|bottom" font="SansSerif" halign="center" height="20"
63 label="Send" left="432" mouse_opaque="true" name="send_btn" 63 label="Send" left="433" mouse_opaque="true" name="send_btn"
64 scale_image="true" width="60" /> 64 scale_image="true" width="60" />
65 <string name="live_help_dialog"> 65 <string name="live_help_dialog">
66 *** Welcome to Help Request *** 66 *** Welcome to Help Request ***
diff --git a/linden/indra/newview/skins/xui/en-us/floater_instant_message_ad_hoc.xml b/linden/indra/newview/skins/xui/en-us/floater_instant_message_ad_hoc.xml
index 6eb4f9b..b47c788 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_instant_message_ad_hoc.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_instant_message_ad_hoc.xml
@@ -28,36 +28,36 @@
28 <string name="default_text_label"> 28 <string name="default_text_label">
29 Click here to instant message. 29 Click here to instant message.
30 </string> 30 </string>
31 <layout_stack border="false" bottom="1" follows="left|top|right|bottom" height="277" left="2" 31 <layout_stack border="false" bottom="0" follows="left|top|right|bottom" height="277" left="2"
32 orientation="horizontal" tab_group="1" width="495"> 32 orientation="horizontal" tab_group="1" width="495" name="panels">
33 <layout_panel border="false" bottom="0" default_tab_group="1" follows="left|top|bottom|right" 33 <layout_panel border="false" bottom="0" default_tab_group="1" follows="left|top|bottom|right"
34 height="295" left="0" min_width="115" name="im_contents_panel" width="495"> 34 height="295" left="0" min_width="115" name="im_contents_panel" width="495">
35 <button bottom="-24" enabled="false" follows="left|top" halign="center" height="20" 35 <button bottom="-20" enabled="false" follows="left|top" halign="center" height="20"
36 image_overlay="icn_voice-call-start.tga" image_overlay_alignment="left" 36 image_overlay="icn_voice-call-start.tga" image_overlay_alignment="left"
37 label="Call" left="4" name="start_call_btn" width="80" /> 37 label="Call" left="5" name="start_call_btn" width="80" />
38 <button bottom_delta="0" follows="left|top" halign="right" height="20" 38 <button bottom_delta="0" follows="left|top" halign="center" height="20"
39 image_overlay="icn_voice-call-end.tga" image_overlay_alignment="left" 39 image_overlay="icn_voice-call-end.tga" image_overlay_alignment="left"
40 label="End Call" left_delta="0" name="end_call_btn" visible="false" 40 label="End Call" left_delta="0" name="end_call_btn" visible="false"
41 width="80" /> 41 width="80" />
42 <button bottom_delta="0" follows="right|top" height="20" label="&lt; &lt;" 42 <button bottom_delta="0" follows="right|top" height="20" label="&lt; &lt;"
43 label_selected="&gt; &gt;" left="460" name="toggle_active_speakers_btn" 43 label_selected="&gt; &gt;" left="463" name="toggle_active_speakers_btn"
44 right="493" 44 right="496"
45 tool_tip="Click here to toggle list of active partipants in this IM session." 45 tool_tip="Click here to toggle list of active partipants in this IM session."
46 visible="true" width="80" /> 46 visible="true" width="80" />
47 <text_editor type="string" length="1" bg_readonly_color="ChatHistoryBgColor" bg_writeable_color="ChatHistoryBgColor" 47 <text_editor type="string" length="1" bg_readonly_color="ChatHistoryBgColor" bg_writeable_color="ChatHistoryBgColor"
48 bottom="-268" embedded_items="false" enabled="false" 48 bottom="-265" embedded_items="false" enabled="false"
49 follows="left|top|right|bottom" font="SansSerif" height="240" left="4" 49 follows="left|top|right|bottom" font="SansSerif" height="239" left="5"
50 max_length="2147483647" mouse_opaque="true" name="im_history" 50 max_length="2147483647" mouse_opaque="true" name="im_history"
51 text_color="ChatHistoryTextColor" 51 text_color="ChatHistoryTextColor"
52 text_readonly_color="ChatHistoryTextColor" width="490" word_wrap="true" /> 52 text_readonly_color="ChatHistoryTextColor" width="490" word_wrap="true" />
53 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="4" 53 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="7"
54 enabled="true" follows="left|right|bottom" font="SansSerif" 54 enabled="true" follows="left|right|bottom" font="SansSerif"
55 handle_edit_keys_directly="false" height="20" 55 handle_edit_keys_directly="false" height="20"
56 label="Click here to instant message" left="4" max_length="1022" 56 label="Click here to instant message" left="5" max_length="1022"
57 mouse_opaque="true" name="chat_editor" select_all_on_focus_received="false" 57 mouse_opaque="true" name="chat_editor" select_all_on_focus_received="false"
58 select_on_focus="false" tab_group="1" width="425" /> 58 select_on_focus="false" tab_group="1" width="426" />
59 <button bottom_delta="-1" enabled="true" follows="right|bottom" font="SansSerif" 59 <button bottom_delta="0" enabled="true" follows="right|bottom" font="SansSerif"
60 halign="center" height="20" label="Send" left="433" mouse_opaque="true" 60 halign="center" height="20" label="Send" left="436" mouse_opaque="true"
61 name="send_btn" scale_image="true" width="60" /> 61 name="send_btn" scale_image="true" width="60" />
62 </layout_panel> 62 </layout_panel>
63 <layout_panel auto_resize="false" bottom="0" can_resize="true" 63 <layout_panel auto_resize="false" bottom="0" can_resize="true"
diff --git a/linden/indra/newview/skins/xui/en-us/floater_instant_message_group.xml b/linden/indra/newview/skins/xui/en-us/floater_instant_message_group.xml
index 131ec66..9ccfedb 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_instant_message_group.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_instant_message_group.xml
@@ -40,11 +40,11 @@
40 <string name="muted_text_label"> 40 <string name="muted_text_label">
41 Text chat has been disabled by a Group Moderator. 41 Text chat has been disabled by a Group Moderator.
42 </string> 42 </string>
43 <layout_stack border="false" bottom="1" follows="left|top|right|bottom" height="276" left="2" 43 <layout_stack border="false" bottom="0" follows="left|top|right|bottom" height="276" left="0"
44 orientation="horizontal" tab_group="1" width="495"> 44 orientation="horizontal" tab_group="1" width="495" name="panels">
45 <layout_panel border="false" bottom="0" default_tab_group="1" follows="left|top|bottom|right" 45 <layout_panel border="false" bottom="0" default_tab_group="1" follows="left|top|bottom|right"
46 height="130" left="0" min_width="210" name="im_contents_panel" width="175"> 46 height="130" left="0" min_width="210" name="im_contents_panel" width="175">
47 <button follows="left|top" height="20" label="Group Info" left="4" 47 <button bottom="-20" follows="left|top" height="20" label="Group Info" left="5"
48 name="group_info_btn" tab_group="0" width="80" /> 48 name="group_info_btn" tab_group="0" width="80" />
49 <button bottom_delta="0" enabled="false" follows="left|top" halign="right" height="20" 49 <button bottom_delta="0" enabled="false" follows="left|top" halign="right" height="20"
50 image_overlay="icn_voice-call-start.tga" image_overlay_alignment="left" 50 image_overlay="icn_voice-call-start.tga" image_overlay_alignment="left"
@@ -55,24 +55,24 @@
55 label="End Call" left_delta="0" name="end_call_btn" pad_right="12" 55 label="End Call" left_delta="0" name="end_call_btn" pad_right="12"
56 visible="false" width="80" /> 56 visible="false" width="80" />
57 <button bottom_delta="0" follows="right|top" height="20" label="&lt; &lt;" 57 <button bottom_delta="0" follows="right|top" height="20" label="&lt; &lt;"
58 label_selected="&gt; &gt;" left="140" name="toggle_active_speakers_btn" 58 label_selected="&gt; &gt;" left="143" name="toggle_active_speakers_btn"
59 right="173" 59 right="176"
60 tool_tip="Click here to toggle list of active partipants in this IM session." 60 tool_tip="Click here to toggle list of active partipants in this IM session."
61 visible="true" width="70" /> 61 visible="true" width="30" />
62 <text_editor type="string" length="1" bg_readonly_color="ChatHistoryBgColor" bg_writeable_color="ChatHistoryBgColor" 62 <text_editor type="string" length="1" bg_readonly_color="ChatHistoryBgColor" bg_writeable_color="ChatHistoryBgColor"
63 bottom="27" embedded_items="false" enabled="false" 63 bottom="30" embedded_items="false" enabled="false"
64 follows="left|top|right|bottom" font="SansSerif" left="4" 64 follows="left|top|right|bottom" font="SansSerif" left="4"
65 max_length="2147483647" mouse_opaque="true" name="im_history" 65 max_length="2147483647" mouse_opaque="true" name="im_history"
66 text_color="ChatHistoryTextColor" 66 text_color="ChatHistoryTextColor"
67 text_readonly_color="ChatHistoryTextColor" top="102" width="170" 67 text_readonly_color="ChatHistoryTextColor" top="104" width="170"
68 word_wrap="true" /> 68 word_wrap="true" />
69 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="4" 69 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="7"
70 enabled="true" follows="left|right|bottom" font="SansSerif" height="20" 70 enabled="true" follows="left|right|bottom" font="SansSerif" height="20"
71 left="4" max_length="1022" mouse_opaque="true" name="chat_editor" 71 left="5" max_length="1022" mouse_opaque="true" name="chat_editor"
72 select_all_on_focus_received="false" select_on_focus="false" tab_group="1" 72 select_all_on_focus_received="false" select_on_focus="false" tab_group="1"
73 width="105" /> 73 width="106" />
74 <button bottom="3" enabled="true" follows="right|bottom" font="SansSerif" 74 <button bottom="7" enabled="true" follows="right|bottom" font="SansSerif"
75 halign="center" height="20" label="Send" left="113" mouse_opaque="true" 75 halign="right" height="20" label="Send" left="116" mouse_opaque="true"
76 name="send_btn" scale_image="true" width="60" /> 76 name="send_btn" scale_image="true" width="60" />
77 </layout_panel> 77 </layout_panel>
78 <layout_panel auto_resize="false" bottom="0" can_resize="true" 78 <layout_panel auto_resize="false" bottom="0" can_resize="true"
diff --git a/linden/indra/newview/skins/xui/en-us/floater_inventory.xml b/linden/indra/newview/skins/xui/en-us/floater_inventory.xml
index 68b1e36..1cb1da0 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_inventory.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_inventory.xml
@@ -19,7 +19,7 @@
19 </tab_container> 19 </tab_container>
20 <menu_bar bottom="-34" drop_shadow="false" follows="left|top|right" height="18" left="2" 20 <menu_bar bottom="-34" drop_shadow="false" follows="left|top|right" height="18" left="2"
21 mouse_opaque="false" name="Inventory Menu" opaque="false" width="461"> 21 mouse_opaque="false" name="Inventory Menu" opaque="false" width="461">
22 <menu bottom_delta="16" color="0, 0, 0, 1" drop_shadow="true" height="101" 22 <menu bottom_delta="16" drop_shadow="true" height="101"
23 label="File" left="0" mouse_opaque="false" name="File" opaque="true" 23 label="File" left="0" mouse_opaque="false" name="File" opaque="true"
24 tear_off="true" width="128"> 24 tear_off="true" width="128">
25 <menu_item_call bottom_delta="-18" height="18" label="Open" left="0" mouse_opaque="true" 25 <menu_item_call bottom_delta="-18" height="18" label="Open" left="0" mouse_opaque="true"
@@ -53,7 +53,7 @@
53 <on_click filter="" function="Inventory.EmptyTrash" userdata="" /> 53 <on_click filter="" function="Inventory.EmptyTrash" userdata="" />
54 </menu_item_call> 54 </menu_item_call>
55 </menu> 55 </menu>
56 <menu bottom_delta="80" color="0, 0, 0, 1" drop_shadow="true" height="121" 56 <menu bottom_delta="80" drop_shadow="true" height="121"
57 label="Create" left="0" mouse_opaque="false" name="Create" opaque="true" 57 label="Create" left="0" mouse_opaque="false" name="Create" opaque="true"
58 tear_off="true" width="121"> 58 tear_off="true" width="121">
59 <menu_item_call bottom_delta="-18" height="18" label="New Folder" left="0" mouse_opaque="true" 59 <menu_item_call bottom_delta="-18" height="18" label="New Folder" left="0" mouse_opaque="true"
@@ -72,7 +72,7 @@
72 name="New Gesture" width="121"> 72 name="New Gesture" width="121">
73 <on_click filter="" function="Inventory.DoCreate" userdata="gesture" /> 73 <on_click filter="" function="Inventory.DoCreate" userdata="gesture" />
74 </menu_item_call> 74 </menu_item_call>
75 <menu bottom_delta="-689" color="0, 0, 0, 1" drop_shadow="true" height="175" left="0" 75 <menu bottom_delta="-689" drop_shadow="true" height="175" left="0"
76 mouse_opaque="false" name="New Clothes" opaque="true" width="125"> 76 mouse_opaque="false" name="New Clothes" opaque="true" width="125">
77 <menu_item_call bottom_delta="-18" height="18" label="New Shirt" left="0" mouse_opaque="true" 77 <menu_item_call bottom_delta="-18" height="18" label="New Shirt" left="0" mouse_opaque="true"
78 name="New Shirt" width="125"> 78 name="New Shirt" width="125">
@@ -111,7 +111,7 @@
111 <on_click filter="" function="Inventory.DoCreate" userdata="underpants" /> 111 <on_click filter="" function="Inventory.DoCreate" userdata="underpants" />
112 </menu_item_call> 112 </menu_item_call>
113 </menu> 113 </menu>
114 <menu bottom_delta="-599" color="0, 0, 0, 1" drop_shadow="true" height="85" left="0" 114 <menu bottom_delta="-599" drop_shadow="true" height="85" left="0"
115 mouse_opaque="false" name="New Body Parts" opaque="true" width="118"> 115 mouse_opaque="false" name="New Body Parts" opaque="true" width="118">
116 <menu_item_call bottom_delta="-18" height="18" label="New Shape" left="0" mouse_opaque="true" 116 <menu_item_call bottom_delta="-18" height="18" label="New Shape" left="0" mouse_opaque="true"
117 name="New Shape" width="118"> 117 name="New Shape" width="118">
@@ -131,7 +131,7 @@
131 </menu_item_call> 131 </menu_item_call>
132 </menu> 132 </menu>
133 </menu> 133 </menu>
134 <menu bottom_delta="64" color="0, 0, 0, 1" drop_shadow="true" height="49" 134 <menu bottom_delta="64" drop_shadow="true" height="49"
135 label="Sort" left="0" mouse_opaque="false" name="Sort" opaque="true" 135 label="Sort" left="0" mouse_opaque="false" name="Sort" opaque="true"
136 tear_off="true" width="118"> 136 tear_off="true" width="118">
137 <menu_item_check bottom_delta="-18" control_name="Inventory.SortByName" height="18" 137 <menu_item_check bottom_delta="-18" control_name="Inventory.SortByName" height="18"
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 8d94ae1..18f39dd 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_joystick.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_joystick.xml
@@ -1,106 +1,121 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater bottom="-297" can_close="true" can_drag_on_left="false" can_minimize="true" 2<floater bottom="0" can_minimize="true" can_resize="false" height="500" left="0"
3 can_resize="false" follows="right" height="580" left="298" min_height="151" 3 name="Joystick" title="Joystick Configuration" width="550">
4 min_width="240" mouse_opaque="true" name="build options floater" 4
5 rect_control="FloaterJoystickRect" title="Flycam Options" width="400"> 5 <check_box name="enable_joystick" bottom="-38" left="14" width="60" halign="left" border_drop_shadow_visible="true" control_name="JoystickEnabled">Enable Joystick:</check_box>
6 <text bottom="-40" left="14" name="x-axis"> 6 <text name="joystick_type" bottom="-32" left="120" width="380" halign="left"></text>
7 X-Axis 7
8 <spinner bottom="-48" left="20" width="140" label_width="100" control_name="JoystickAxis1" name="JoystickAxis1" label="X Axis Mapping" decimal_digits="0" increment="1" min_val="-1" max_val="5"/>
9 <spinner bottom="-48" left="190" width="140" label_width="100" control_name="JoystickAxis2" name="JoystickAxis2" label="Y Axis Mapping" decimal_digits="0" increment="1" min_val="-1" max_val="5"/>
10 <spinner bottom="-48" left="360" width="140" label_width="100" control_name="JoystickAxis0" name="JoystickAxis0" label="Z Axis Mapping" decimal_digits="0" increment="1" min_val="-1" max_val="5"/>
11
12 <spinner bottom="-68" left="20" width="140" label_width="100" control_name="JoystickAxis4" name="JoystickAxis4" label="Pitch Mapping" decimal_digits="0" increment="1" min_val="-1" max_val="5"/>
13 <spinner bottom="-68" left="190" width="140" label_width="100" control_name="JoystickAxis5" name="JoystickAxis5" label="Yaw Mapping" decimal_digits="0" increment="1" min_val="-1" max_val="5"/>
14 <spinner bottom="-68" left="360" width="140" label_width="100" control_name="JoystickAxis3" name="JoystickAxis3" label="Roll Mapping" decimal_digits="0" increment="1" min_val="-1" max_val="5"/>
15
16 <spinner bottom="-88" left="20" width="140" label_width="100" control_name="JoystickAxis6" name="JoystickAxis6" label="Zoom Mapping" decimal_digits="0" increment="1" min_val="-1" max_val="5"/>
17 <check_box bottom="-96" left="185" control_name="ZoomDirect" label="Direct Zoom" name="ZoomDirect" />
18 <check_box bottom="-96" left="310" control_name="Cursor3D" label="3D Cursor" name="Cursor3D" />
19 <check_box bottom="-96" left="420" control_name="AutoLeveling" label="Auto Level" name="AutoLeveling" />
20
21 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
22 bottom="-120" drop_shadow_visible="true" enabled="true" follows="left|top"
23 font="SansSerifSmall" h_pad="0" halign="right" height="10" hidden="false"
24 left="12" mouse_opaque="false" v_pad="0" width="102" name="Control Modes:">
25 Control Modes:
8 </text> 26 </text>
9 <text bottom="-40" left="142" name="y-axis"> 27
10 Y-Axis 28 <check_box bottom="-127" left="125" width="60" halign="center" border_drop_shadow_visible="true" control_name="JoystickAvatarEnabled" name="JoystickAvatarEnabled">Avatar</check_box>
11 </text> 29 <check_box bottom="-127" left="194" width="60" halign="center" border_drop_shadow_visible="true" control_name="JoystickBuildEnabled" name="JoystickBuildEnabled">Build</check_box>
12 <text bottom="-40" left="270" name="z-axis"> 30 <check_box bottom="-127" left="262" width="60" halign="center" border_drop_shadow_visible="true" control_name="JoystickFlycamEnabled" name="JoystickFlycamEnabled">Flycam</check_box>
13 Z-Axis 31
14 </text> 32 <text bottom="-144" left="20" width="94" halign="right" name="XScale">X Scale</text>
15 <spinner bottom="-61" control_name="FlycamAxis1" decimal_digits="0" increment="1" 33 <spinner bottom="-144" left="125" width="56" label_width="0" control_name="AvatarAxisScale1" name="AvatarAxisScale1" decimal_digits="2" increment="1" min_val="-1" max_val="1"/>
16 label="Mapping" label_width="64" left="14" max_val="7" min_val="-1" 34 <spinner bottom="-144" left="195" width="56" label_width="0" control_name="BuildAxisScale1" name="BuildAxisScale1" decimal_digits="2" increment="0.1" min_val="-1024" max_val="1024"/>
17 name="FlycamAxis1" width="120" /> 35 <spinner bottom="-144" left="265" width="56" label_width="0" control_name="FlycamAxisScale1" name="FlycamAxisScale1" decimal_digits="2" increment="0.1" min_val="-1024" max_val="1024"/>
18 <spinner bottom="-61" control_name="FlycamAxis2" decimal_digits="0" increment="1" 36
19 label="Mapping" label_width="64" left="142" max_val="7" min_val="-1" 37 <text bottom="-164" left="20" width="94" halign="right" name="YScale">Y Scale</text>
20 name="FlycamAxis2" width="120" /> 38 <spinner bottom="-164" left="125" width="56" label_width="0" control_name="AvatarAxisScale2" name="AvatarAxisScale2" decimal_digits="2" increment="1" min_val="-1" max_val="1"/>
21 <spinner bottom="-61" control_name="FlycamAxis0" decimal_digits="0" increment="1" 39 <spinner bottom="-164" left="195" width="56" label_width="0" control_name="BuildAxisScale2" name="BuildAxisScale2" decimal_digits="2" increment="0.1" min_val="-1024" max_val="1024"/>
22 label="Mapping" label_width="64" left="270" max_val="7" min_val="-1" 40 <spinner bottom="-164" left="265" width="56" label_width="0" control_name="FlycamAxisScale2" name="FlycamAxisScale2" decimal_digits="2" increment="0.1" min_val="-1024" max_val="1024"/>
23 name="FlycamAxis0" width="120" /> 41
24 <spinner bottom="-82" control_name="FlycamAxisScale1" decimal_digits="2" increment="0.1" 42 <text bottom="-184" left="20" width="94" halign="right" name="ZScale">Z Scale</text>
25 label="Scale" label_width="64" left="14" max_val="1024" min_val="-1024" 43 <spinner bottom="-184" left="125" width="56" label_width="0" control_name="AvatarAxisScale0" name="AvatarAxisScale0" decimal_digits="2" increment="1" min_val="-1" max_val="1"/>
26 name="FlycamAxisScale1" width="120" /> 44 <spinner bottom="-184" left="195" width="56" label_width="0" control_name="BuildAxisScale0" name="BuildAxisScale0" decimal_digits="2" increment="0.1" min_val="-1024" max_val="1024"/>
27 <spinner bottom="-82" control_name="FlycamAxisScale2" decimal_digits="2" increment="0.1" 45 <spinner bottom="-184" left="265" width="56" label_width="0" control_name="FlycamAxisScale0" name="FlycamAxisScale0" decimal_digits="2" increment="0.1" min_val="-1024" max_val="1024"/>
28 label="Scale" label_width="64" left="142" max_val="1024" min_val="-1024" 46
29 name="FlycamAxisScale2" width="120" /> 47 <text bottom="-204" left="20" width="94" halign="right" name="PitchScale">Pitch Scale</text>
30 <spinner bottom="-82" control_name="FlycamAxisScale0" decimal_digits="2" increment="0.1" 48 <spinner bottom="-204" left="125" width="56" label_width="0" control_name="AvatarAxisScale4" name="AvatarAxisScale4" decimal_digits="2" increment="0.1" min_val="-1024" max_val="1024"/>
31 label="Scale" label_width="64" left="270" max_val="1024" min_val="-1024" 49 <spinner bottom="-204" left="195" width="56" label_width="0" control_name="BuildAxisScale4" name="BuildAxisScale4" decimal_digits="2" increment="0.1" min_val="-1024" max_val="1024"/>
32 name="FlycamAxisScale0" width="120" /> 50 <spinner bottom="-204" left="265" width="56" label_width="0" control_name="FlycamAxisScale4" name="FlycamAxisScale4" decimal_digits="2" increment="0.1" min_val="-1024" max_val="1024"/>
33 <spinner bottom="-103" control_name="FlycamAxisDeadZone1" decimal_digits="2" 51
34 increment="0.01" label="Dead Zone" label_width="64" left="14" max_val="1" 52 <text bottom="-224" left="20" width="94" halign="right" name="YawScale">Yaw Scale</text>
35 min_val="0" name="FlycamAxisDeadZone1" width="120" /> 53 <spinner bottom="-224" left="125" width="56" label_width="0" control_name="AvatarAxisScale5" name="AvatarAxisScale5" decimal_digits="2" increment="0.1" min_val="-1024" max_val="1024"/>
36 <spinner bottom="-103" control_name="FlycamAxisDeadZone2" decimal_digits="2" 54 <spinner bottom="-224" left="195" width="56" label_width="0" control_name="BuildAxisScale5" name="BuildAxisScale5" decimal_digits="2" increment="0.1" min_val="-1024" max_val="1024"/>
37 increment="0.01" label="Dead Zone" label_width="64" left="142" max_val="1" 55 <spinner bottom="-224" left="265" width="56" label_width="0" control_name="FlycamAxisScale5" name="FlycamAxisScale5" decimal_digits="2" increment="0.1" min_val="-1024" max_val="1024"/>
38 min_val="0" name="FlycamAxisDeadZone2" width="120" /> 56
39 <spinner bottom="-103" control_name="FlycamAxisDeadZone0" decimal_digits="2" 57 <text bottom="-244" left="20" width="94" halign="right" name="RollScale">Roll Scale</text>
40 increment="0.01" label="Dead Zone" label_width="64" left="270" max_val="1" 58 <spinner bottom="-244" left="195" width="56" label_width="0" control_name="BuildAxisScale3" name="BuildAxisScale3" decimal_digits="2" increment="0.1" min_val="-1024" max_val="1024"/>
41 min_val="0" name="FlycamAxisDeadZone0" width="120" /> 59 <spinner bottom="-244" left="265" width="56" label_width="0" control_name="FlycamAxisScale3" name="FlycamAxisScale3" decimal_digits="2" increment="0.1" min_val="-1024" max_val="1024"/>
42 <text bottom="-132" left="14" name="yaw"> 60
43 Yaw 61
44 </text> 62 <text bottom="-274" left="20" width="94" halign="right" name="XDeadZone">X Dead Zone</text>
45 <text bottom="-132" left="142" name="pitch"> 63 <spinner bottom="-274" left="125" width="56" label_width="0" control_name="AvatarAxisDeadZone1" name="AvatarAxisDeadZone1" decimal_digits="2" increment="0.01" min_val="0" max_val="1"/>
46 Pitch 64 <spinner bottom="-274" left="195" width="56" label_width="0" control_name="BuildAxisDeadZone1" name="BuildAxisDeadZone1" decimal_digits="2" increment="0.01" min_val="0" max_val="1"/>
47 </text> 65 <spinner bottom="-274" left="265" width="56" label_width="0" control_name="FlycamAxisDeadZone1" name="FlycamAxisDeadZone1" decimal_digits="2" increment="0.01" min_val="0" max_val="1"/>
48 <text bottom="-132" left="270" name="roll"> 66
49 Roll 67 <text bottom="-294" left="20" width="94" halign="right" name="YDeadZone">Y Dead Zone</text>
50 </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"/>
51 <spinner bottom="-153" control_name="FlycamAxis5" decimal_digits="0" increment="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"/>
52 label="Mapping" label_width="64" left="14" max_val="7" min_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"/>
53 name="FlycamAxis5" width="120" /> 71
54 <spinner bottom="-153" control_name="FlycamAxis4" decimal_digits="0" increment="1" 72 <text bottom="-314" left="20" width="94" halign="right" name="ZDeadZone">Z Dead Zone</text>
55 label="Mapping" label_width="64" left="142" max_val="7" min_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"/>
56 name="FlycamAxis4" width="120" /> 74 <spinner bottom="-314" left="195" width="56" label_width="0" control_name="BuildAxisDeadZone0" name="BuildAxisDeadZone0" decimal_digits="2" increment="0.01" min_val="0" max_val="1"/>
57 <spinner bottom="-153" control_name="FlycamAxis3" decimal_digits="0" increment="1" 75 <spinner bottom="-314" left="265" width="56" label_width="0" control_name="FlycamAxisDeadZone0" name="FlycamAxisDeadZone0" decimal_digits="2" increment="0.01" min_val="0" max_val="1"/>
58 label="Mapping" label_width="64" left="270" max_val="7" min_val="-1" 76
59 name="FlycamAxis3" width="120" /> 77 <text bottom="-334" left="20" width="94" halign="right" name="PitchDeadZone">Pitch Dead Zone</text>
60 <spinner bottom="-174" control_name="FlycamAxisScale5" decimal_digits="2" 78 <spinner bottom="-334" left="125" width="56" label_width="0" control_name="AvatarAxisDeadZone4" name="AvatarAxisDeadZone4" decimal_digits="2" increment="0.01" min_val="0" max_val="1"/>
61 increment="0.1" label="Scale" label_width="64" left="14" max_val="1024" 79 <spinner bottom="-334" left="195" width="56" label_width="0" control_name="BuildAxisDeadZone4" name="BuildAxisDeadZone4" decimal_digits="2" increment="0.01" min_val="0" max_val="1"/>
62 min_val="-1024" name="FlycamAxisScale5" width="120" /> 80 <spinner bottom="-334" left="265" width="56" label_width="0" control_name="FlycamAxisDeadZone4" name="FlycamAxisDeadZone4" decimal_digits="2" increment="0.01" min_val="0" max_val="1"/>
63 <spinner bottom="-174" control_name="FlycamAxisScale4" decimal_digits="2" 81
64 increment="0.1" label="Scale" label_width="64" left="142" max_val="1024" 82 <text bottom="-354" left="20" width="94" halign="right" name="YawDeadZone">Yaw Dead Zone</text>
65 min_val="-1024" name="FlycamAxisScale4" width="120" /> 83 <spinner bottom="-354" left="125" width="56" label_width="0" control_name="AvatarAxisDeadZone5" name="AvatarAxisDeadZone5" decimal_digits="2" increment="0.01" min_val="0" max_val="1"/>
66 <spinner bottom="-174" control_name="FlycamAxisScale3" decimal_digits="2" 84 <spinner bottom="-354" left="195" width="56" label_width="0" control_name="BuildAxisDeadZone5" name="BuildAxisDeadZone5" decimal_digits="2" increment="0.01" min_val="0" max_val="1"/>
67 increment="0.1" label="Scale" label_width="64" left="270" max_val="1024" 85 <spinner bottom="-354" left="265" width="56" label_width="0" control_name="FlycamAxisDeadZone5" name="FlycamAxisDeadZone5" decimal_digits="2" increment="0.01" min_val="0" max_val="1"/>
68 min_val="-1024" name="FlycamAxisScale3" width="120" /> 86
69 <spinner bottom="-195" control_name="FlycamAxisDeadZone5" decimal_digits="2" 87 <text bottom="-374" left="20" width="94" halign="right" name="RollDeadZone">Roll Dead Zone</text>
70 increment="0.01" label="Dead Zone" label_width="64" left="14" max_val="1" 88 <spinner bottom="-374" left="195" width="56" label_width="0" control_name="BuildAxisDeadZone3" name="BuildAxisDeadZone3" decimal_digits="2" increment="0.01" min_val="0" max_val="1"/>
71 min_val="0" name="FlycamAxisDeadZone5" width="120" /> 89 <spinner bottom="-374" left="265" width="56" label_width="0" control_name="FlycamAxisDeadZone3" name="FlycamAxisDeadZone3" decimal_digits="2" increment="0.01" min_val="0" max_val="1"/>
72 <spinner bottom="-195" control_name="FlycamAxisDeadZone4" decimal_digits="2" 90
73 increment="0.01" label="Dead Zone" label_width="64" left="142" max_val="1" 91 <text bottom="-402" left="20" width="94" halign="right" name="Feathering">Feathering</text>
74 min_val="0" name="FlycamAxisDeadZone4" width="120" /> 92 <slider bottom="-408" left="116" can_edit_text="false" control_name="AvatarFeathering"
75 <spinner bottom="-195" control_name="FlycamAxisDeadZone3" decimal_digits="2" 93 decimal_digits="0" follows="left|top" height="16" increment="1"
76 increment="0.01" label="Dead Zone" label_width="64" left="270" max_val="1" 94 initial_val="0.7" label="" max_val="32" min_val="1"
77 min_val="0" name="FlycamAxisDeadZone3" width="120" /> 95 mouse_opaque="true" name="AvatarFeathering" show_text="false" value="0.7"
78 <text bottom="-224" left="14" name="ZoomLabel"> 96 width="73" />
79 Zoom 97 <slider bottom="-408" left="186" can_edit_text="false" control_name="BuildFeathering"
80 </text> 98 decimal_digits="0" follows="left|top" height="16" increment="1"
81 <spinner bottom="-245" control_name="FlycamAxis6" decimal_digits="0" increment="1" 99 initial_val="0.7" label="" max_val="32" min_val="1"
82 label="Mapping" label_width="64" left="14" max_val="7" min_val="-1" 100 mouse_opaque="true" name="BuildFeathering" show_text="false" value="0.7"
83 name="FlycamAxis6" width="120" /> 101 width="73" />
84 <spinner bottom="-266" control_name="FlycamAxisScale6" decimal_digits="2" 102 <slider bottom="-408" left="256" can_edit_text="false" control_name="FlycamFeathering"
85 increment="0.1" label="Scale" label_width="64" left="14" max_val="1024" 103 decimal_digits="0" follows="left|top" height="16" increment="1"
86 min_val="-1024" name="FlycamAxisScale6" width="120" /> 104 initial_val="0.7" label="" max_val="32" min_val="1"
87 <spinner bottom="-287" control_name="FlycamAxisDeadZone6" decimal_digits="2" 105 mouse_opaque="true" name="FlycamFeathering" show_text="false" value="0.7"
88 increment="0.01" label="Dead Zone" label_width="64" left="14" max_val="1" 106 width="73" />
89 min_val="0" name="FlycamAxisDeadZone6" width="120" /> 107
90 <check_box bottom_delta="-21" control_name="FlycamZoomDirect" label="Direct Zoom" /> 108 <text bottom="-430" left="20" width="94" halign="right" name="ZoomScale2">Zoom Scale</text>
91 <slider bottom_delta="-29" can_edit_text="false" control_name="FlycamFeathering" 109 <spinner bottom="-430" left="265" width="56" label_width="0" control_name="FlycamAxisScale6" name="FlycamAxisScale6" label="" decimal_digits="2" increment="0.1" min_val="-1024" max_val="1024"/>
92 decimal_digits="0" follows="left" height="16" increment="1" 110 <text bottom="-450" left="20" width="94" halign="right" name="ZoomDeadZone">Zoom Dead Zone</text>
93 initial_val="0.7" label="Feathering" left="14" max_val="32" min_val="1" 111 <spinner bottom="-450" left="265" width="56" label_width="0" control_name="FlycamAxisDeadZone6" name="FlycamAxisDeadZone6" label="" decimal_digits="2" increment="0.01" min_val="0" max_val="1"/>
94 mouse_opaque="true" name="FlycamFeathering" show_text="false" value="0.7" 112
95 width="128" /> 113 <button bottom="-451" left="336" enabled="true" follows="left|top" font="SansSerif"
96 <check_box bottom_delta="-21" control_name="FlycamAutoLeveling" label="Auto Level" 114 halign="center" height="22" hidden="false"
97 name="FlycamAutoLeveling" /> 115 label="SpaceNavigator Defaults" mouse_opaque="true"
98 <check_box bottom_delta="-21" control_name="FlycamAbsolute" label="3D Cursor" 116 name="SpaceNavigatorDefaults" scale_image="true" width="200" />
99 name="FlycamAbsolute" /> 117
100 <string name="JoystickMonitor"> 118 <string name="JoystickMonitor">Joystick Monitor</string>
101 Joystick Monitor 119 <string name="Axis">Axis [NUM]</string>
102 </string> 120 <string name="NoDevice">no device detected</string>
103 <string name="Axis"> 121</floater> \ No newline at end of file
104 Axis [NUM]
105 </string>
106</floater>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_lagmeter.xml b/linden/indra/newview/skins/xui/en-us/floater_lagmeter.xml
index 905d795..4fa24dd 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_lagmeter.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_lagmeter.xml
@@ -1,7 +1,7 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater can_close="true" can_drag_on_left="false" can_minimize="true" 2<floater can_close="true" can_drag_on_left="false" can_minimize="true"
3 can_resize="false" height="150" name="floater_lagmeter" 3 can_resize="false" height="150" name="floater_lagmeter"
4 rect_control="FloaterLagMeter" title="Lag Meter" width="370"> 4 rect_control="FloaterLagMeter" title="Lag Meter" width="350">
5 <button bottom="-40" enabled="true" follows="top|left" font="SansSerif" halign="center" 5 <button bottom="-40" enabled="true" follows="top|left" font="SansSerif" halign="center"
6 height="16" image_selected="lag_status_good.tga" 6 height="16" image_selected="lag_status_good.tga"
7 image_unselected="lag_status_good.tga" label="" label_selected="" left="8" 7 image_unselected="lag_status_good.tga" label="" label_selected="" left="8"
diff --git a/linden/indra/newview/skins/xui/en-us/floater_live_lsleditor.xml b/linden/indra/newview/skins/xui/en-us/floater_live_lsleditor.xml
index 330c3aa..62cf350 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_live_lsleditor.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_live_lsleditor.xml
@@ -9,8 +9,8 @@
9 <check_box bottom="-545" enabled="false" follows="left|bottom" font="SansSerif" 9 <check_box bottom="-545" enabled="false" follows="left|bottom" font="SansSerif"
10 height="18" initial_value="true" label="Running" left="12" 10 height="18" initial_value="true" label="Running" left="12"
11 mouse_opaque="true" name="running" radio_style="false" width="100" /> 11 mouse_opaque="true" name="running" radio_style="false" width="100" />
12 <panel bottom="-527" enabled="true" follows="left|top|right|bottom" height="506" 12 <panel bottom="-524" enabled="true" follows="left|top|right|bottom" height="506"
13 left="1" name="script ed panel" width="498" /> 13 left="1" name="script ed panel" width="497" />
14 <string name="not_allowed"> 14 <string name="not_allowed">
15 You are not allowed to view this script. 15 You are not allowed to view this script.
16 </string> 16 </string>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_moveview.xml b/linden/indra/newview/skins/xui/en-us/floater_moveview.xml
index e87c1e7..7add633 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_moveview.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_moveview.xml
@@ -1,8 +1,9 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater bottom="-976" can_close="true" can_drag_on_left="false" can_minimize="false" 2<floater bottom="-976" can_close="true" can_drag_on_left="false" can_minimize="false"
3 can_resize="false" can_tear_off="true" enabled="true" follows="bottom" 3 can_resize="false" can_tear_off="true" enabled="true" follows="bottom"
4 height="58" left="521" min_height="100" min_width="100" mouse_opaque="true" 4 height="58" left="521" min_height="100" min_width="100"
5 name="move floater" rect_control="FloaterMoveRect" title="" width="185"> 5 mouse_opaque="true" name="move floater" rect_control="FloaterMoveRect2"
6 title="" width="135">
6 <button bottom="-54" enabled="true" follows="left|bottom" font="SansSerif" 7 <button bottom="-54" enabled="true" follows="left|bottom" font="SansSerif"
7 halign="center" height="25" image_disabled="UIImgBtnLeftOutUUID" 8 halign="center" height="25" image_disabled="UIImgBtnLeftOutUUID"
8 image_disabled_selected="UIImgBtnLeftInUUID" 9 image_disabled_selected="UIImgBtnLeftInUUID"
@@ -30,10 +31,12 @@
30 image_unselected="UIImgBtnMoveDownOutUUID" label="" label_selected="" 31 image_unselected="UIImgBtnMoveDownOutUUID" label="" label_selected=""
31 left="91" mouse_opaque="true" name="move down btn" scale_image="false" 32 left="91" mouse_opaque="true" name="move down btn" scale_image="false"
32 tool_tip="Crouch or Fly Down" width="25" /> 33 tool_tip="Crouch or Fly Down" width="25" />
34 <!--
33 <button bottom="-54" control_name="FlyBtnState" enabled="true" follows="left|bottom" 35 <button bottom="-54" control_name="FlyBtnState" enabled="true" follows="left|bottom"
34 font="SansSerif" halign="center" height="20" label="Fly" 36 font="SansSerif" halign="center" height="20" label="Fly"
35 label_selected="Fly" left="116" mouse_opaque="true" name="fly btn" 37 label_selected="Fly" left="116" mouse_opaque="true" name="fly btn"
36 scale_image="true" tool_tip="Start or stop flying" width="65" /> 38 scale_image="true" tool_tip="Start or stop flying" width="65" />
39 -->
37 <joystick_slide bottom="-29" enabled="true" follows="left|bottom" halign="center" height="25" 40 <joystick_slide bottom="-29" enabled="true" follows="left|bottom" halign="center" height="25"
38 image_selected="UIImgBtnSlideLeftInUUID" 41 image_selected="UIImgBtnSlideLeftInUUID"
39 image_unselected="UIImgBtnSlideLeftOutUUID" left="20" mouse_opaque="true" 42 image_unselected="UIImgBtnSlideLeftOutUUID" left="20" mouse_opaque="true"
diff --git a/linden/indra/newview/skins/xui/en-us/floater_mute.xml b/linden/indra/newview/skins/xui/en-us/floater_mute.xml
index 338d391..b1ab115 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_mute.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_mute.xml
@@ -4,10 +4,9 @@
4 min_height="140" min_width="220" mouse_opaque="true" name="mute floater" 4 min_height="140" min_width="220" mouse_opaque="true" name="mute floater"
5 rect_control="FloaterMuteRect3" short_title="Mute List" 5 rect_control="FloaterMuteRect3" short_title="Mute List"
6 title="Muted Residents &amp; Objects" width="300"> 6 title="Muted Residents &amp; Objects" width="300">
7 <scroll_list background_visible="false" bottom="-220" column_padding="5" draw_border="true" 7 <scroll_list background_visible="true" bottom="-220" column_padding="5" draw_border="true"
8 draw_heading="false" draw_stripes="true" enabled="true" 8 draw_heading="false" draw_stripes="true" enabled="true"
9 fg_disable_color="1 1 1 1" fg_selected_color="1 1 1 1" 9 follows="left|top|right|bottom" height="200"
10 fg_unselected_color="1 1 1 1" follows="left|top|right|bottom" height="200"
11 left="4" mouse_opaque="true" multi_select="false" name="mutes" 10 left="4" mouse_opaque="true" multi_select="false" name="mutes"
12 tool_tip="List of currently muted residents" width="292" /> 11 tool_tip="List of currently muted residents" width="292" />
13 <button bottom="-244" enabled="true" follows="left|bottom" font="SansSerif" 12 <button bottom="-244" enabled="true" follows="left|bottom" font="SansSerif"
diff --git a/linden/indra/newview/skins/xui/en-us/floater_mute_object.xml b/linden/indra/newview/skins/xui/en-us/floater_mute_object.xml
index 2c277e7..4033058 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_mute_object.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_mute_object.xml
@@ -3,7 +3,7 @@
3 can_resize="false" height="140" min_height="140" min_width="375" 3 can_resize="false" height="140" min_height="140" min_width="375"
4 name="mute by name" title="Mute object by name" width="375"> 4 name="mute by name" title="Mute object by name" width="375">
5 <text bottom_delta="-50" follows="top|left" font="SansSerif" height="16" left="20" 5 <text bottom_delta="-50" follows="top|left" font="SansSerif" height="16" left="20"
6 left_delta="25" name="message" right="380" text_color="white"> 6 left_delta="25" name="message" right="380">
7 Mute by name only affects object chat and IM, not sounds. 7 Mute by name only affects object chat and IM, not sounds.
8You must type the object&apos;s name exactly. 8You must type the object&apos;s name exactly.
9 </text> 9 </text>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_my_friends.xml b/linden/indra/newview/skins/xui/en-us/floater_my_friends.xml
index 1d5bf90..181c7de 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_my_friends.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_my_friends.xml
@@ -3,8 +3,8 @@
3 can_resize="true" can_tear_off="true" height="390" min_height="240" 3 can_resize="true" can_tear_off="true" height="390" min_height="240"
4 min_width="365" name="floater_my_friends" 4 min_width="365" name="floater_my_friends"
5 rect_control="FloaterContactsRect" title="Contacts" width="395"> 5 rect_control="FloaterContactsRect" title="Contacts" width="395">
6 <tab_container bottom="10" follows="left|right|top|bottom" height="360" left="0" 6 <tab_container bottom="6" follows="left|right|top|bottom" height="364" left="4"
7 name="friends_and_groups" tab_position="top" tab_width="80" width="388"> 7 name="friends_and_groups" tab_position="top" tab_width="80" width="383">
8 <panel bottom="0" filename="panel_friends.xml" label="Friends" left="0" 8 <panel bottom="0" filename="panel_friends.xml" label="Friends" left="0"
9 name="friends_panel" width="370" /> 9 name="friends_panel" width="370" />
10 <panel bottom="0" filename="panel_groups.xml" label="Groups" left="0" 10 <panel bottom="0" filename="panel_groups.xml" label="Groups" left="0"
diff --git a/linden/indra/newview/skins/xui/en-us/floater_post_process.xml b/linden/indra/newview/skins/xui/en-us/floater_post_process.xml
index 0eb8150..31691a8 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_post_process.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_post_process.xml
@@ -1,20 +1,20 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater bottom="-350" can_close="true" can_drag_on_left="false" can_minimize="true" 2<floater bottom="-350" can_close="true" can_drag_on_left="false" can_minimize="true"
3 can_resize="false" height="400" hidden="false" left="50" min_height="400" 3 can_resize="false" height="400" left="50" min_height="400"
4 min_width="300" mouse_opaque="true" name="Post-Process Floater" 4 min_width="300" mouse_opaque="true" name="Post-Process Floater"
5 title="Post-Process Settings" width="400"> 5 title="Post-Process Settings" width="400">
6 <tab_container bottom="-400" follows="left|top" height="400" hidden="false" left="0" 6 <tab_container bottom="-400" follows="left|top" height="400" left="0"
7 mouse_opaque="false" name="Post-Process Tabs" tab_position="top" 7 mouse_opaque="false" name="Post-Process Tabs" tab_position="top"
8 width="400"> 8 width="400">
9 <panel border="true" bottom="-400" follows="left|top|right|bottom" height="400" 9 <panel border="true" bottom="-400" follows="left|top|right|bottom" height="400"
10 hidden="false" label="Color Filter" left="1" mouse_opaque="false" 10 label="Color Filter" left="1" mouse_opaque="false"
11 name="wmiColorFilterPanel" width="398"> 11 name="wmiColorFilterPanel" width="398">
12 <check_box bottom="-20" control_name="wmiColorFilterToggle" follows="left|top" 12 <check_box bottom="-20" control_name="wmiColorFilterToggle" follows="left|top"
13 font="SansSerifSmall" height="16" initial_value="false" label="Enable" 13 font="SansSerifSmall" height="16" initial_value="false" label="Enable"
14 left="14" mouse_opaque="true" name="wmiColorFilterToggle" width="200" /> 14 left="14" mouse_opaque="true" name="wmiColorFilterToggle" width="200" />
15 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 15 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
16 bottom_delta="-20" drop_shadow_visible="true" follows="left|top|right" 16 bottom_delta="-20" drop_shadow_visible="true" follows="left|top|right"
17 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 17 font="SansSerif" h_pad="0" halign="left" height="16"
18 left="10" mouse_opaque="true" name="wmiColorFilterBrightnessText" v_pad="0" 18 left="10" mouse_opaque="true" name="wmiColorFilterBrightnessText" v_pad="0"
19 width="355"> 19 width="355">
20 Brightness 20 Brightness
@@ -26,7 +26,7 @@
26 show_text="true" value="1.0" width="200" /> 26 show_text="true" value="1.0" width="200" />
27 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 27 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
28 bottom_delta="-20" drop_shadow_visible="true" follows="left|top|right" 28 bottom_delta="-20" drop_shadow_visible="true" follows="left|top|right"
29 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 29 font="SansSerif" h_pad="0" halign="left" height="16"
30 left="10" mouse_opaque="true" name="wmiColorFilterSaturationText" v_pad="0" 30 left="10" mouse_opaque="true" name="wmiColorFilterSaturationText" v_pad="0"
31 width="355"> 31 width="355">
32 Saturation 32 Saturation
@@ -38,7 +38,7 @@
38 name="wmiColorFilterSaturation" show_text="true" value="1.0" width="200" /> 38 name="wmiColorFilterSaturation" show_text="true" value="1.0" width="200" />
39 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 39 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
40 bottom_delta="-20" drop_shadow_visible="true" follows="left|top|right" 40 bottom_delta="-20" drop_shadow_visible="true" follows="left|top|right"
41 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 41 font="SansSerif" h_pad="0" halign="left" height="16"
42 left="10" mouse_opaque="true" name="wmiColorFilterContrastText" v_pad="0" 42 left="10" mouse_opaque="true" name="wmiColorFilterContrastText" v_pad="0"
43 width="355"> 43 width="355">
44 Contrast 44 Contrast
@@ -50,7 +50,7 @@
50 value="1.0" width="200" /> 50 value="1.0" width="200" />
51 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 51 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
52 bottom_delta="-20" drop_shadow_visible="true" follows="left|top|right" 52 bottom_delta="-20" drop_shadow_visible="true" follows="left|top|right"
53 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 53 font="SansSerif" h_pad="0" halign="left" height="16"
54 left="10" mouse_opaque="true" name="wmiColorFilterBaseText" v_pad="0" 54 left="10" mouse_opaque="true" name="wmiColorFilterBaseText" v_pad="0"
55 width="355"> 55 width="355">
56 Contrast Base Color 56 Contrast Base Color
@@ -77,14 +77,14 @@
77 width="200" /> 77 width="200" />
78 </panel> 78 </panel>
79 <panel border="true" bottom="-180" follows="left|top|right|bottom" height="400" 79 <panel border="true" bottom="-180" follows="left|top|right|bottom" height="400"
80 hidden="false" label="Night Vision" left="1" mouse_opaque="false" 80 label="Night Vision" left="1" mouse_opaque="false"
81 name="wmiNightVisionPanel" width="398"> 81 name="wmiNightVisionPanel" width="398">
82 <check_box bottom="-20" control_name="wmiNightVisionToggle" follows="left|top" 82 <check_box bottom="-20" control_name="wmiNightVisionToggle" follows="left|top"
83 font="SansSerifSmall" height="16" initial_value="false" label="Enable" 83 font="SansSerifSmall" height="16" initial_value="false" label="Enable"
84 left="14" mouse_opaque="true" name="wmiNightVisionToggle" width="200" /> 84 left="14" mouse_opaque="true" name="wmiNightVisionToggle" width="200" />
85 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 85 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
86 bottom_delta="-21" drop_shadow_visible="true" follows="left|top|right" 86 bottom_delta="-21" drop_shadow_visible="true" follows="left|top|right"
87 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 87 font="SansSerif" h_pad="0" halign="left" height="16"
88 left="10" mouse_opaque="true" name="wmiNightVisionBrightMultText" v_pad="0" 88 left="10" mouse_opaque="true" name="wmiNightVisionBrightMultText" v_pad="0"
89 width="355"> 89 width="355">
90 Light Amplification Multiple 90 Light Amplification Multiple
@@ -96,7 +96,7 @@
96 name="wmiNightVisionBrightMult" show_text="true" value="0.7" width="200" /> 96 name="wmiNightVisionBrightMult" show_text="true" value="0.7" width="200" />
97 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 97 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
98 bottom_delta="-20" drop_shadow_visible="true" follows="left|top|right" 98 bottom_delta="-20" drop_shadow_visible="true" follows="left|top|right"
99 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 99 font="SansSerif" h_pad="0" halign="left" height="16"
100 left="10" mouse_opaque="true" name="wmiNightVisionNoiseSizeText" v_pad="0" 100 left="10" mouse_opaque="true" name="wmiNightVisionNoiseSizeText" v_pad="0"
101 width="355"> 101 width="355">
102 Noise Size 102 Noise Size
@@ -108,7 +108,7 @@
108 value="1.0" width="200" /> 108 value="1.0" width="200" />
109 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 109 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
110 bottom_delta="-20" drop_shadow_visible="true" follows="left|top|right" 110 bottom_delta="-20" drop_shadow_visible="true" follows="left|top|right"
111 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 111 font="SansSerif" h_pad="0" halign="left" height="16"
112 left="10" mouse_opaque="true" name="wmiNightVisionNoiseStrengthText" 112 left="10" mouse_opaque="true" name="wmiNightVisionNoiseStrengthText"
113 v_pad="0" width="355"> 113 v_pad="0" width="355">
114 Noise Strength 114 Noise Strength
@@ -120,14 +120,14 @@
120 name="wmiNightVisionNoiseStrength" show_text="true" value="1.0" width="200" /> 120 name="wmiNightVisionNoiseStrength" show_text="true" value="1.0" width="200" />
121 </panel> 121 </panel>
122 <panel border="true" bottom="-180" follows="left|top|right|bottom" height="400" 122 <panel border="true" bottom="-180" follows="left|top|right|bottom" height="400"
123 hidden="false" label="Bloom" left="1" mouse_opaque="true" 123 label="Bloom" left="1" mouse_opaque="true"
124 name="wmiBloomPanel" width="398"> 124 name="wmiBloomPanel" width="398">
125 <check_box bottom="-20" control_name="wmiBloomToggle" follows="left|top" 125 <check_box bottom="-20" control_name="wmiBloomToggle" follows="left|top"
126 font="SansSerifSmall" height="16" initial_value="false" label="Enable" 126 font="SansSerifSmall" height="16" initial_value="false" label="Enable"
127 left="14" mouse_opaque="true" name="wmiBloomToggle" width="200" /> 127 left="14" mouse_opaque="true" name="wmiBloomToggle" width="200" />
128 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 128 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
129 bottom_delta="-21" drop_shadow_visible="true" follows="left|top|right" 129 bottom_delta="-21" drop_shadow_visible="true" follows="left|top|right"
130 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 130 font="SansSerif" h_pad="0" halign="left" height="16"
131 left="10" mouse_opaque="true" name="wmiBloomExtractText" v_pad="0" 131 left="10" mouse_opaque="true" name="wmiBloomExtractText" v_pad="0"
132 width="355"> 132 width="355">
133 Luminosity Extraction 133 Luminosity Extraction
@@ -139,7 +139,7 @@
139 width="200" /> 139 width="200" />
140 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 140 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
141 bottom_delta="-20" drop_shadow_visible="true" follows="left|top|right" 141 bottom_delta="-20" drop_shadow_visible="true" follows="left|top|right"
142 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 142 font="SansSerif" h_pad="0" halign="left" height="16"
143 left="10" mouse_opaque="true" name="wmiBloomSizeText" v_pad="0" width="355"> 143 left="10" mouse_opaque="true" name="wmiBloomSizeText" v_pad="0" width="355">
144 Bloom Size 144 Bloom Size
145 </text> 145 </text>
@@ -150,7 +150,7 @@
150 width="200" /> 150 width="200" />
151 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 151 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
152 bottom_delta="-20" drop_shadow_visible="true" follows="left|top|right" 152 bottom_delta="-20" drop_shadow_visible="true" follows="left|top|right"
153 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 153 font="SansSerif" h_pad="0" halign="left" height="16"
154 left="10" mouse_opaque="true" name="wmiBloomStrengthText" v_pad="0" 154 left="10" mouse_opaque="true" name="wmiBloomStrengthText" v_pad="0"
155 width="355"> 155 width="355">
156 Bloom Strength 156 Bloom Strength
@@ -162,20 +162,20 @@
162 width="200" /> 162 width="200" />
163 </panel> 163 </panel>
164 <panel border="true" bottom="-180" follows="left|top|right|bottom" height="400" 164 <panel border="true" bottom="-180" follows="left|top|right|bottom" height="400"
165 hidden="false" label="Extras" left="1" mouse_opaque="false" name="Extras" 165 label="Extras" left="1" mouse_opaque="false" name="Extras"
166 width="398"> 166 width="398">
167 <button bottom="-33" enabled="true" font="SansSerif" halign="center" height="20" 167 <button bottom="-33" enabled="true" font="SansSerif" halign="center" height="20"
168 hidden="false" label="LoadEffect" label_selected="LoadEffect" left="15" 168 label="LoadEffect" label_selected="LoadEffect" left="15"
169 mouse_opaque="true" name="PPLoadEffect" scale_image="true" width="100" /> 169 mouse_opaque="true" name="PPLoadEffect" scale_image="true" width="100" />
170 <button bottom="-60" enabled="true" font="SansSerif" halign="center" height="20" 170 <button bottom="-60" enabled="true" font="SansSerif" halign="center" height="20"
171 hidden="false" label="SaveEffect" label_selected="SaveEffect" left="15" 171 label="SaveEffect" label_selected="SaveEffect" left="15"
172 mouse_opaque="true" name="PPSaveEffect" scale_image="true" width="100" /> 172 mouse_opaque="true" name="PPSaveEffect" scale_image="true" width="100" />
173 <combo_box allow_text_entry="false" bottom="-33" follows="left|top" height="18" 173 <combo_box allow_text_entry="false" bottom="-33" follows="left|top" height="18"
174 left_delta="120" max_chars="20" mouse_opaque="true" name="PPEffectsCombo" 174 left_delta="120" max_chars="20" mouse_opaque="true" name="PPEffectsCombo"
175 width="150" /> 175 width="150" />
176 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-75" 176 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-75"
177 enabled="true" follows="left|right|bottom" font="SansSerif" 177 enabled="true" follows="left|right|bottom" font="SansSerif"
178 handle_edit_keys_directly="false" height="20" hidden="false" 178 handle_edit_keys_directly="false" height="20"
179 label="Effect Name" left="135" max_length="40" mouse_opaque="true" 179 label="Effect Name" left="135" max_length="40" mouse_opaque="true"
180 name="PPEffectNameEditor" select_all_on_focus_received="false" 180 name="PPEffectNameEditor" select_all_on_focus_received="false"
181 select_on_focus="false" tab_group="1" width="150" /> 181 select_on_focus="false" tab_group="1" width="150" />
diff --git a/linden/indra/newview/skins/xui/en-us/floater_preview_gesture.xml b/linden/indra/newview/skins/xui/en-us/floater_preview_gesture.xml
index ef4da1d..25121ff 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_preview_gesture.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_preview_gesture.xml
@@ -43,10 +43,10 @@
43 name="modifier_combo" width="50" /> 43 name="modifier_combo" width="50" />
44 <combo_box bottom_delta="0" follows="left|top" height="20" label="None" left_delta="60" 44 <combo_box bottom_delta="0" follows="left|top" height="20" label="None" left_delta="60"
45 name="key_combo" width="45" /> 45 name="key_combo" width="45" />
46 <text bottom_delta="-23" follows="top|left" font="SansSerif" left="16"> 46 <text bottom_delta="-23" follows="top|left" font="SansSerif" left="16" name="library_label">
47 Library: 47 Library:
48 </text> 48 </text>
49 <text bottom_delta="0" follows="top|left" font="SansSerif" left="220"> 49 <text bottom_delta="0" follows="top|left" font="SansSerif" left="220" name="steps_label">
50 Steps: 50 Steps:
51 </text> 51 </text>
52 <scroll_list bottom_delta="-120" draw_border="true" follows="top|left" height="110" 52 <scroll_list bottom_delta="-120" draw_border="true" follows="top|left" height="110"
@@ -82,11 +82,11 @@ unless you add wait steps.
82 <radio_group bottom_delta="-20" draw_border="false" follows="top|left" height="40" 82 <radio_group bottom_delta="-20" draw_border="false" follows="top|left" height="40"
83 left="340" name="animation_trigger_type" width="80"> 83 left="340" name="animation_trigger_type" width="80">
84 <radio_item bottom_delta="-5" follows="left|top" height="16" left="3" mouse_opaque="true" 84 <radio_item bottom_delta="-5" follows="left|top" height="16" left="3" mouse_opaque="true"
85 width="80"> 85 width="80" name="start">
86 Start 86 Start
87 </radio_item> 87 </radio_item>
88 <radio_item bottom_delta="-10" follows="left|top" height="16" left="3" mouse_opaque="true" 88 <radio_item bottom_delta="-10" follows="left|top" height="16" left="3" mouse_opaque="true"
89 width="80"> 89 width="80" name="stop">
90 Stop 90 Stop
91 </radio_item> 91 </radio_item>
92 </radio_group> 92 </radio_group>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_preview_new_landmark.xml b/linden/indra/newview/skins/xui/en-us/floater_preview_new_landmark.xml
deleted file mode 100644
index 7b3316e..0000000
--- a/linden/indra/newview/skins/xui/en-us/floater_preview_new_landmark.xml
+++ /dev/null
@@ -1,28 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater bottom="-97" can_close="true" can_drag_on_left="false" can_minimize="true"
3 can_resize="false" enabled="true" height="90" left="201" min_height="370"
4 min_width="90" mouse_opaque="true" name="landmark_preview" width="370">
5 <button bottom="-77" enabled="true" font="SansSerif" halign="center" height="20"
6 label="Teleport" label_selected="" left="13" mouse_opaque="true"
7 name="Teleport btn" width="100" />
8 <button bottom="-77" enabled="true" follows="left|bottom" font="SansSerif"
9 halign="center" height="20" label="Show on Map" label_selected=""
10 left="126" mouse_opaque="true" name="Show on Map btn" width="100" />
11 <button bottom="-77" enabled="true" follows="right|bottom" font="SansSerif"
12 halign="center" height="20" label="Discard" label_selected="" left="239"
13 mouse_opaque="true" name="Discard btn" width="100" />
14 <icon bottom="-21" color="1 1 1 1" enabled="true" follows="left|top" height="16"
15 image_name="inv_item_landmark_visited.tga" left="5" mouse_opaque="true"
16 name="icon_landmark" width="16" />
17 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
18 bottom="-38" drop_shadow_visible="true" enabled="true" follows="left|top"
19 font="SansSerif" h_pad="0" halign="left" height="19" left="13"
20 mouse_opaque="true" name="desc txt" v_pad="0" width="80">
21 Description:
22 </text>
23 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-38"
24 enabled="true" follows="left|top|right" font="SansSerif"
25 handle_edit_keys_directly="false" height="19" left="93" max_length="127"
26 mouse_opaque="true" name="desc" select_all_on_focus_received="false"
27 select_on_focus="false" width="264" />
28</floater>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_preview_notecard_keep_discard.xml b/linden/indra/newview/skins/xui/en-us/floater_preview_notecard_keep_discard.xml
index a26f1c2..32af593 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_preview_notecard_keep_discard.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_preview_notecard_keep_discard.xml
@@ -2,7 +2,7 @@
2<floater bottom="-484" can_close="true" can_drag_on_left="false" can_minimize="true" 2<floater bottom="-484" can_close="true" can_drag_on_left="false" can_minimize="true"
3 can_resize="true" enabled="true" height="400" left="138" min_height="243" 3 can_resize="true" enabled="true" height="400" left="138" min_height="243"
4 min_width="234" mouse_opaque="true" name="preview_notecard" width="400"> 4 min_width="234" mouse_opaque="true" name="preview_notecard" width="400">
5 <text_editor type="string" length="1" bg_readonly_color="0.392157 0.392157 0.392157 1" bottom="-366" 5 <text_editor type="string" length="1" bottom="-366"
6 embedded_items="true" enabled="true" follows="left|top|right|bottom" 6 embedded_items="true" enabled="true" follows="left|top|right|bottom"
7 font="SansSerif" height="320" ignore_tab="false" left="4" 7 font="SansSerif" height="320" ignore_tab="false" left="4"
8 max_length="65536" mouse_opaque="true" name="Notecard Editor" width="392" 8 max_length="65536" mouse_opaque="true" name="Notecard Editor" width="392"
diff --git a/linden/indra/newview/skins/xui/en-us/floater_rate.xml b/linden/indra/newview/skins/xui/en-us/floater_rate.xml
deleted file mode 100644
index 8467e6d..0000000
--- a/linden/indra/newview/skins/xui/en-us/floater_rate.xml
+++ /dev/null
@@ -1,81 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater bottom="-576" can_close="true" can_drag_on_left="false" can_minimize="true"
3 can_resize="false" enabled="true" height="400" left="380" min_height="100"
4 min_width="100" mouse_opaque="true" name="rate"
5 title="Your Rating of Jeska Linden" width="310">
6 <radio_group bottom="-96" draw_border="false" enabled="true" follows="left|top" height="54"
7 left="32" mouse_opaque="true" name="behavior" width="110">
8 <radio_item type="string" length="1" bottom="-16" enabled="true" follows="left|top" height="16" left="0"
9 mouse_opaque="true" name="Positive" width="100">
10 Positive
11 </radio_item>
12 <radio_item type="string" length="1" bottom="-34" enabled="true" follows="left|top" height="16" left="0"
13 mouse_opaque="true" name="No Rating" width="100">
14 No Rating
15 </radio_item>
16 </radio_group>
17 <radio_group bottom="-186" draw_border="false" enabled="true" follows="left|top" height="54"
18 left="32" mouse_opaque="true" name="appearance" width="110">
19 <radio_item type="string" length="1" bottom="-16" enabled="true" follows="left|top" height="16" left="0"
20 mouse_opaque="true" name="Positive" width="100">
21 Positive
22 </radio_item>
23 <radio_item type="string" length="1" bottom="-34" enabled="true" follows="left|top" height="16" left="0"
24 mouse_opaque="true" name="No Rating" width="100">
25 No Rating
26 </radio_item>
27 </radio_group>
28 <radio_group bottom="-276" draw_border="false" enabled="true" follows="left|top" height="54"
29 left="32" mouse_opaque="true" name="building" width="110">
30 <radio_item type="string" length="1" bottom="-16" enabled="true" follows="left|top" height="16" left="0"
31 mouse_opaque="true" name="Positive" width="100">
32 Positive
33 </radio_item>
34 <radio_item type="string" length="1" bottom="-34" enabled="true" follows="left|top" height="16" left="0"
35 mouse_opaque="true" name="No Rating" width="100">
36 No Rating
37 </radio_item>
38 </radio_group>
39 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-328"
40 enabled="true" follows="left|top" font="SansSerifSmall"
41 handle_edit_keys_directly="false" height="16" left="16" max_length="254"
42 mouse_opaque="true" name="mesg editor" select_all_on_focus_received="false"
43 select_on_focus="false" width="278" />
44 <button bottom="-392" enabled="false" font="SansSerif" halign="center" height="20"
45 label="OK" label_selected="OK" left="134" mouse_opaque="true" name="OK"
46 scale_image="true" width="72" />
47 <button bottom="-392" enabled="true" font="SansSerif" halign="center" height="20"
48 label="Cancel" label_selected="Cancel" left="222" mouse_opaque="true"
49 name="Cancel" scale_image="true" width="72" />
50 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
51 bottom="-40" drop_shadow_visible="true" enabled="true" follows="left|top"
52 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="16"
53 mouse_opaque="true" name="Overall behavior:" v_pad="0" width="278">
54 Overall behavior:
55 </text>
56 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
57 bottom="-130" drop_shadow_visible="true" enabled="true" follows="left|top"
58 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="16"
59 mouse_opaque="true" name="Skill at appearance (clothing and attachments):"
60 v_pad="0" width="278">
61 Skill at appearance (clothing and attachments):
62 </text>
63 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
64 bottom="-220" drop_shadow_visible="true" enabled="true" follows="left|top"
65 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="16"
66 mouse_opaque="true" name="Skill at building:" v_pad="0" width="278">
67 Skill at building:
68 </text>
69 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
70 bottom="-310" drop_shadow_visible="true" enabled="true" follows="left|top"
71 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="16"
72 mouse_opaque="true" name="Message:" v_pad="0" width="278">
73 Message:
74 </text>
75 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
76 bottom="-362" drop_shadow_visible="true" enabled="true" follows="left|top"
77 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="16"
78 mouse_opaque="true" name="cost" v_pad="0" width="278">
79 Cost: L$[COST] to change each rating. Total charge: L$[TOTAL].
80 </text>
81</floater>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_report_abuse.xml b/linden/indra/newview/skins/xui/en-us/floater_report_abuse.xml
index 61aa835..5055885 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_report_abuse.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_report_abuse.xml
@@ -116,11 +116,11 @@
116 mouse_opaque="true" name="abuser_name_title" v_pad="0" width="180"> 116 mouse_opaque="true" name="abuser_name_title" v_pad="0" width="180">
117 Abuser name: 117 Abuser name:
118 </text> 118 </text>
119 <line_editor bevel_style="in" bg_readonly_color="0, 0, 0, 0" border_style="line" 119 <line_editor bevel_style="in" border_style="line"
120 border_thickness="1" bottom_delta="-18" follows="left|top" 120 border_thickness="1" bottom_delta="-18" follows="left|top"
121 font="SansSerifSmall" height="16" left="16" max_length="32" 121 font="SansSerifSmall" height="16" left="16" max_length="32"
122 mouse_opaque="true" name="abuser_name_edit" 122 mouse_opaque="true" name="abuser_name_edit"
123 text_readonly_color="1, 1, 1, 1" width="180" /> 123 width="180" />
124 <button bottom_delta="-2" font="SansSerif" halign="center" height="20" 124 <button bottom_delta="-2" font="SansSerif" halign="center" height="20"
125 label="Choose Resident" label_selected="" left_delta="190" 125 label="Choose Resident" label_selected="" left_delta="190"
126 mouse_opaque="true" name="select_abuser" 126 mouse_opaque="true" name="select_abuser"
@@ -131,21 +131,21 @@
131 mouse_opaque="true" name="abuser_name_title2" v_pad="0" width="180"> 131 mouse_opaque="true" name="abuser_name_title2" v_pad="0" width="180">
132 Location of Abuse: 132 Location of Abuse:
133 </text> 133 </text>
134 <line_editor bevel_style="in" bg_readonly_color="0, 0, 0, 0" border_style="line" 134 <line_editor bevel_style="in" border_style="line"
135 border_thickness="1" bottom_delta="-18" follows="left|top" 135 border_thickness="1" bottom_delta="-18" follows="left|top"
136 font="SansSerifSmall" height="16" left="16" max_length="256" 136 font="SansSerifSmall" height="16" left="16" max_length="256"
137 mouse_opaque="true" name="abuse_location_edit" 137 mouse_opaque="true" name="abuse_location_edit"
138 text_readonly_color="1, 1, 1, 1" width="356" /> 138 width="356" />
139 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 139 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
140 bottom_delta="-24" drop_shadow_visible="true" follows="left|top" 140 bottom_delta="-24" drop_shadow_visible="true" follows="left|top"
141 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="16" 141 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="16"
142 mouse_opaque="true" name="sum_title" v_pad="0" width="180"> 142 mouse_opaque="true" name="sum_title" v_pad="0" width="180">
143 Summary: 143 Summary:
144 </text> 144 </text>
145 <line_editor bevel_style="in" bg_readonly_color="0, 0, 0, 0" border_style="line" 145 <line_editor bevel_style="in" border_style="line"
146 border_thickness="1" bottom_delta="-18" follows="left|top" 146 border_thickness="1" bottom_delta="-18" follows="left|top"
147 font="SansSerifSmall" height="16" left="16" max_length="64" 147 font="SansSerifSmall" height="16" left="16" max_length="64"
148 mouse_opaque="true" name="summary_edit" text_readonly_color="1, 1, 1, 1" 148 mouse_opaque="true" name="summary_edit"
149 width="356" /> 149 width="356" />
150 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 150 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
151 bottom_delta="-24" drop_shadow_visible="true" follows="left|top" 151 bottom_delta="-24" drop_shadow_visible="true" follows="left|top"
@@ -161,10 +161,10 @@
161abuse, relevant chat/IM text, and select the object 161abuse, relevant chat/IM text, and select the object
162if possible. 162if possible.
163 </text> 163 </text>
164 <text_editor bg_readonly_color="0, 0, 0, 0" bottom_delta="-152" embedded_items="false" 164 <text_editor bottom_delta="-152" embedded_items="false"
165 follows="left|top" font="SansSerifSmall" height="146" left="16" 165 follows="left|top" font="SansSerifSmall" height="146" left="16"
166 max_length="800" mouse_opaque="false" name="details_edit" 166 max_length="800" mouse_opaque="false" name="details_edit"
167 text_readonly_color="1, 1, 1, 1" width="356" word_wrap="true" /> 167 width="356" word_wrap="true" />
168 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 168 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
169 bottom_delta="-24" drop_shadow_visible="true" follows="left|top" 169 bottom_delta="-24" drop_shadow_visible="true" follows="left|top"
170 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="16" 170 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="16"
diff --git a/linden/indra/newview/skins/xui/en-us/floater_report_bug.xml b/linden/indra/newview/skins/xui/en-us/floater_report_bug.xml
index 4583137..9499690 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_report_bug.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_report_bug.xml
@@ -137,10 +137,10 @@
137 mouse_opaque="true" name="sum_title" v_pad="0" width="180"> 137 mouse_opaque="true" name="sum_title" v_pad="0" width="180">
138 Summary: 138 Summary:
139 </text> 139 </text>
140 <line_editor bevel_style="in" bg_readonly_color="0, 0, 0, 0" border_style="line" 140 <line_editor bevel_style="in" border_style="line"
141 border_thickness="1" bottom_delta="-16" follows="left|top" 141 border_thickness="1" bottom_delta="-16" follows="left|top"
142 font="SansSerifSmall" height="16" left="16" max_length="64" 142 font="SansSerifSmall" height="16" left="16" max_length="64"
143 mouse_opaque="true" name="summary_edit" text_readonly_color="1, 1, 1, 1" 143 mouse_opaque="true" name="summary_edit"
144 width="356" /> 144 width="356" />
145 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 145 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
146 bottom_delta="-20" drop_shadow_visible="true" follows="left|top" 146 bottom_delta="-20" drop_shadow_visible="true" follows="left|top"
@@ -148,10 +148,10 @@
148 mouse_opaque="true" name="dscr_title" v_pad="0" width="342"> 148 mouse_opaque="true" name="dscr_title" v_pad="0" width="342">
149 Details: (Please provide as much information as possible) 149 Details: (Please provide as much information as possible)
150 </text> 150 </text>
151 <text_editor bg_readonly_color="0, 0, 0, 0" bottom_delta="-112" embedded_items="false" 151 <text_editor bottom_delta="-112" embedded_items="false"
152 follows="left|top" font="SansSerifSmall" height="112" left="16" 152 follows="left|top" font="SansSerifSmall" height="112" left="16"
153 max_length="900" mouse_opaque="false" name="details_edit" 153 max_length="900" mouse_opaque="false" name="details_edit"
154 text_readonly_color="1, 1, 1, 1" width="356" word_wrap="true"> 154 width="356" word_wrap="true">
155 Steps to reproduce the bug: 155 Steps to reproduce the bug:
156 156
157Observed results: 157Observed results:
diff --git a/linden/indra/newview/skins/xui/en-us/floater_script_ed_panel.xml b/linden/indra/newview/skins/xui/en-us/floater_script_ed_panel.xml
index 1e020eb..6bc26b9 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_script_ed_panel.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_script_ed_panel.xml
@@ -1,7 +1,7 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel bottom="-550" enabled="true" follows="left|top|right|bottom" height="508" 2<panel bottom="-550" enabled="true" follows="left|top|right|bottom" height="508"
3 left="0" mouse_opaque="true" name="script panel" width="500"> 3 left="0" mouse_opaque="true" name="script panel" width="500">
4 <text_editor type="string" length="1" bg_readonly_color="0.392157 0.392157 0.392157 1" bottom="-393" 4 <text_editor type="string" length="1" bottom="-393"
5 embedded_items="false" enabled="true" follows="left|top|right|bottom" 5 embedded_items="false" enabled="true" follows="left|top|right|bottom"
6 font="Monospace" height="376" ignore_tab="false" left="4" 6 font="Monospace" height="376" ignore_tab="false" left="4"
7 max_length="65536" mouse_opaque="true" name="Script Editor" width="492" 7 max_length="65536" mouse_opaque="true" name="Script Editor" width="492"
@@ -26,7 +26,7 @@
26 <menu_bar bottom="-15" drop_shadow="false" enabled="true" follows="left|top|right" 26 <menu_bar bottom="-15" drop_shadow="false" enabled="true" follows="left|top|right"
27 height="18" left="8" mouse_opaque="false" name="script_menu" opaque="false" 27 height="18" left="8" mouse_opaque="false" name="script_menu" opaque="false"
28 tear_off="false" width="476"> 28 tear_off="false" width="476">
29 <menu bottom="0" color="0 0 0 1" drop_shadow="true" enabled="true" height="62" 29 <menu bottom="0" drop_shadow="true" enabled="true" height="62"
30 left="0" mouse_opaque="false" name="File" opaque="true" tear_off="false" 30 left="0" mouse_opaque="false" name="File" opaque="true" tear_off="false"
31 width="138"> 31 width="138">
32 <menu_item_call bottom_delta="-30" height="20" label="Save" left="0" mouse_opaque="true" 32 <menu_item_call bottom_delta="-30" height="20" label="Save" left="0" mouse_opaque="true"
@@ -36,7 +36,7 @@
36 <menu_item_call bottom_delta="-58" height="20" label="Revert All Changes" left="0" 36 <menu_item_call bottom_delta="-58" height="20" label="Revert All Changes" left="0"
37 mouse_opaque="true" name="Revert All Changes" width="138" /> 37 mouse_opaque="true" name="Revert All Changes" width="138" />
38 </menu> 38 </menu>
39 <menu bottom="665" color="0 0 0 1" drop_shadow="true" enabled="true" height="198" 39 <menu bottom="665" drop_shadow="true" enabled="true" height="198"
40 left="222" mouse_opaque="false" name="Edit" opaque="true" tear_off="false" 40 left="222" mouse_opaque="false" name="Edit" opaque="true" tear_off="false"
41 width="139"> 41 width="139">
42 <menu_item_call bottom_delta="-30" enabled="false" height="20" label="Undo" left="0" 42 <menu_item_call bottom_delta="-30" enabled="false" height="20" label="Undo" left="0"
@@ -62,7 +62,7 @@
62 <menu_item_call bottom_delta="-194" enabled="true" height="20" label="Search / Replace..." 62 <menu_item_call bottom_delta="-194" enabled="true" height="20" label="Search / Replace..."
63 left="0" mouse_opaque="true" name="Search / Replace..." width="139" /> 63 left="0" mouse_opaque="true" name="Search / Replace..." width="139" />
64 </menu> 64 </menu>
65 <menu bottom="-18" color="0 0 0 1" drop_shadow="true" enabled="true" height="34" 65 <menu bottom="-18" drop_shadow="true" enabled="true" height="34"
66 left="0" mouse_opaque="false" name="Help" opaque="true" tear_off="false" 66 left="0" mouse_opaque="false" name="Help" opaque="true" tear_off="false"
67 width="112"> 67 width="112">
68 <menu_item_call bottom="-30" enabled="true" height="20" label="Help..." left="0" 68 <menu_item_call bottom="-30" enabled="true" height="20" label="Help..." left="0"
diff --git a/linden/indra/newview/skins/xui/en-us/floater_script_preview.xml b/linden/indra/newview/skins/xui/en-us/floater_script_preview.xml
index 4118438..167aeb7 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_script_preview.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_script_preview.xml
@@ -5,7 +5,7 @@
5 rect_control="PreviewScriptRect" title="Script: Rotation Script" 5 rect_control="PreviewScriptRect" title="Script: Rotation Script"
6 width="500"> 6 width="500">
7 <panel bottom="-550" enabled="true" follows="left|top|right|bottom" height="508" 7 <panel bottom="-550" enabled="true" follows="left|top|right|bottom" height="508"
8 left="0" mouse_opaque="true" name="script panel" width="500" /> 8 left="0" mouse_opaque="true" name="script panel" width="497" />
9 <icon bottom="-19" color="1 1 1 1" enabled="true" follows="top|right" height="16" 9 <icon bottom="-19" color="1 1 1 1" enabled="true" follows="top|right" height="16"
10 image_name="icon_lock.tga" left="444" mouse_opaque="true" name="lock" 10 image_name="icon_lock.tga" left="444" mouse_opaque="true" name="lock"
11 width="16" /> 11 width="16" />
diff --git a/linden/indra/newview/skins/xui/en-us/floater_sell_land.xml b/linden/indra/newview/skins/xui/en-us/floater_sell_land.xml
index 82ed992..c549e29 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_sell_land.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_sell_land.xml
@@ -5,29 +5,29 @@
5 <texture_picker bottom_delta="-155" enabled="false" follows="top|left" height="135" left="244" 5 <texture_picker bottom_delta="-155" enabled="false" follows="top|left" height="135" left="244"
6 name="info_image" right="424" width="180" /> 6 name="info_image" right="424" width="180" />
7 <text bottom_delta="119" follows="top|left" font="SansSerifSmall" left="16" 7 <text bottom_delta="119" follows="top|left" font="SansSerifSmall" left="16"
8 name="info_parcel_label" text_color="white" width="48"> 8 name="info_parcel_label" width="48">
9 Parcel: 9 Parcel:
10 </text> 10 </text>
11 <text bottom_delta="-5" follows="top|left" font="SansSerif" height="16" left="56" 11 <text bottom_delta="-5" follows="top|left" font="SansSerif" height="16" left="56"
12 name="info_parcel" right="-20" text_color="white"> 12 name="info_parcel" right="-20" >
13 PARCEL NAME 13 PARCEL NAME
14 </text> 14 </text>
15 <text follows="top|left" font="SansSerifSmall" left="16" name="info_size_label" 15 <text follows="top|left" font="SansSerifSmall" left="16" name="info_size_label"
16 text_color="white" width="48"> 16 width="48">
17 Size: 17 Size:
18 </text> 18 </text>
19 <text bottom_delta="-21" follows="top|left" font="SansSerif" height="32" left="56" 19 <text bottom_delta="-21" follows="top|left" font="SansSerif" height="32" left="56"
20 name="info_size" right="-20" text_color="white"> 20 name="info_size" right="-20" >
21 [AREA] sq. m. 21 [AREA] sq. m.
22 </text> 22 </text>
23 <text bottom_delta="-64" follows="top|left" font="SansSerifHuge" height="24" 23 <text bottom_delta="-64" follows="top|left" font="SansSerifHuge" height="24"
24 left="16" name="info_action" text_color="white" width="200"> 24 left="16" name="info_action" text_color="white" width="200">
25 To sell this parcel: 25 To sell this parcel:
26 </text> 26 </text>
27 <icon bottom_delta="-96" follows="top|left" height="64" image_name="badge_note.tga" 27 <icon bottom_delta="-96" follows="top|left" height="64" image_name="badge_note.j2c"
28 left="0" name="step_price" width="64" /> 28 left="0" name="step_price" width="64" />
29 <text bottom_delta="38" follows="top|left" height="16" left="72" name="price_label" 29 <text bottom_delta="38" follows="top|left" height="16" left="72" name="price_label"
30 right="-20" text_color="white"> 30 right="-20" font="SansSerifBig" >
31 Set a price: 31 Set a price:
32 </text> 32 </text>
33 <text follows="top|left" height="16" left="72" name="price_text" right="-20"> 33 <text follows="top|left" height="16" left="72" name="price_text" right="-20">
@@ -41,10 +41,10 @@
41 <text bottom_delta="0" height="16" left_delta="110" name="price_per_m" width="200"> 41 <text bottom_delta="0" height="16" left_delta="110" name="price_per_m" width="200">
42 (L$[PER_METER] per square meter) 42 (L$[PER_METER] per square meter)
43 </text> 43 </text>
44 <icon follows="top|left" height="64" image_name="badge_note.tga" left="0" 44 <icon follows="top|left" height="64" image_name="badge_note.j2c" left="0"
45 name="step_sell_to" width="64" /> 45 name="step_sell_to" width="64" />
46 <text bottom_delta="38" follows="top|left" height="16" left="72" name="sell_to_label" 46 <text bottom_delta="38" follows="top|left" height="16" left="72" name="sell_to_label"
47 right="-20" text_color="white"> 47 right="-20" font="SansSerifBig" >
48 Sell the land to: 48 Sell the land to:
49 </text> 49 </text>
50 <text follows="top|left" height="16" left="72" name="sell_to_text" right="-20"> 50 <text follows="top|left" height="16" left="72" name="sell_to_text" right="-20">
@@ -63,13 +63,13 @@
63 </combo_item> 63 </combo_item>
64 </combo_box> 64 </combo_box>
65 <line_editor bottom_delta="-20" enabled="false" follows="top|right" height="16" 65 <line_editor bottom_delta="-20" enabled="false" follows="top|right" height="16"
66 name="sell_to_agent" text_color="white" width="150" /> 66 name="sell_to_agent" width="150" />
67 <button bottom_delta="0" height="16" label="Select..." left_delta="155" 67 <button bottom_delta="0" height="16" label="Select..." left_delta="155"
68 name="sell_to_select_agent" width="60" /> 68 name="sell_to_select_agent" width="60" />
69 <icon follows="top|left" height="64" image_name="badge_note.tga" left="0" 69 <icon follows="top|left" height="64" image_name="badge_note.j2c" left="0"
70 name="step_sell_objects" width="64" /> 70 name="step_sell_objects" width="64" />
71 <text bottom_delta="38" follows="top|left" height="16" left="72" 71 <text bottom_delta="38" follows="top|left" height="16" left="72"
72 name="sell_objects_label" right="-20" text_color="white"> 72 name="sell_objects_label" right="-20" font="SansSerifBig" >
73 Sell the objects with the land? 73 Sell the objects with the land?
74 </text> 74 </text>
75 <text bottom_delta="-20" follows="top|left" height="16" left="72" 75 <text bottom_delta="-20" follows="top|left" height="16" left="72"
@@ -89,7 +89,7 @@
89 <button bottom_delta="4" height="16" label="Show Objects" name="show_objects" 89 <button bottom_delta="4" height="16" label="Show Objects" name="show_objects"
90 right="414" width="110" /> 90 right="414" width="110" />
91 <text bottom_delta="-35" follows="top|left" height="16" left="72" 91 <text bottom_delta="-35" follows="top|left" height="16" left="72"
92 name="nag_message_label" right="-20" text_color="white"> 92 name="nag_message_label" right="-20" font="SansSerifBig" >
93 REMEMBER: All sales are final. 93 REMEMBER: All sales are final.
94 </text> 94 </text>
95 <button bottom="-479" follows="bottom|left" height="20" label="Set Land For Sale" 95 <button bottom="-479" follows="bottom|left" height="20" label="Set Land For Sale"
diff --git a/linden/indra/newview/skins/xui/en-us/floater_settings_debug.xml b/linden/indra/newview/skins/xui/en-us/floater_settings_debug.xml
index ed31742..a8c0840 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_settings_debug.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_settings_debug.xml
@@ -4,7 +4,7 @@
4 title="Debug Settings" width="350"> 4 title="Debug Settings" width="350">
5 <combo_box allow_text_entry="true" bottom="-50" follows="top|left" font="SansSerifSmall" 5 <combo_box allow_text_entry="true" bottom="-50" follows="top|left" font="SansSerifSmall"
6 height="20" left="15" max_chars="255" name="settings_combo" /> 6 height="20" left="15" max_chars="255" name="settings_combo" />
7 <text_editor bottom_delta="-75" enabled="false" height="60" hide_scrollbar="true" 7 <text_editor bottom_delta="-75" enabled="false" height="60" width="320" hide_scrollbar="true"
8 name="comment_text" word_wrap="true" /> 8 name="comment_text" word_wrap="true" />
9 <combo_box bottom_delta="-30" follows="top|left" font="SansSerifSmall" height="20" 9 <combo_box bottom_delta="-30" follows="top|left" font="SansSerifSmall" height="20"
10 left="15" name="boolean_combo" visible="false"> 10 left="15" name="boolean_combo" visible="false">
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 2199db9..3966ac6 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_snapshot.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_snapshot.xml
@@ -33,11 +33,11 @@
33 <button bottom_delta="0" follows="left|top" height="20" label="Cancel" left="120" 33 <button bottom_delta="0" follows="left|top" height="20" label="Cancel" left="120"
34 name="discard_btn" width="85" /> 34 name="discard_btn" width="85" />
35 <button bottom="-290" follows="left|top" font="SansSerifSmall" halign="center" 35 <button bottom="-290" follows="left|top" font="SansSerifSmall" halign="center"
36 height="20" hidden="false" label="More &gt;&gt;" left="10" 36 height="20" label="More &gt;&gt;" left="10"
37 mouse_opaque="true" name="more_btn" scale_image="TRUE" 37 mouse_opaque="true" name="more_btn" scale_image="TRUE"
38 tool_tip="Advanced Options" width="80" /> 38 tool_tip="Advanced Options" width="80" />
39 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" halign="center" 39 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" halign="center"
40 height="20" hidden="false" label="&lt;&lt; Less" left_delta="0" 40 height="20" label="&lt;&lt; Less" left_delta="0"
41 mouse_opaque="true" name="less_btn" scale_image="TRUE" 41 mouse_opaque="true" name="less_btn" scale_image="TRUE"
42 tool_tip="Advanced Options" width="80" /> 42 tool_tip="Advanced Options" width="80" />
43 <text bottom_delta="-20" follows="top|left" height="15" left="10" name="type_label2" 43 <text bottom_delta="-20" follows="top|left" height="15" left="10" name="type_label2"
diff --git a/linden/indra/newview/skins/xui/en-us/floater_tools.xml b/linden/indra/newview/skins/xui/en-us/floater_tools.xml
index 969a89c..5531090 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_tools.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_tools.xml
@@ -1,8 +1,12 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater bottom="-359" can_close="true" can_drag_on_left="false" can_minimize="true" 2<floater bottom="-359" can_close="true" can_drag_on_left="false" can_minimize="true"
3 can_resize="false" follows="left|top" height="550" left="308" 3 can_resize="false" follows="left|top" height="550"
4 min_height="100" min_width="100" mouse_opaque="true" name="toolbox floater" 4 left="308" min_height="100" min_width="100" mouse_opaque="true"
5 rect_control="ToolboxRect" sound_flags="0" title="" width="272"> 5 name="toolbox floater" rect_control="ToolboxRect" sound_flags="0" title=""
6 width="272">
7
8<!-- Main floater tabs -->
9
6 <button bottom="-34" follows="left|top" font="SansSerif" halign="center" height="32" 10 <button bottom="-34" follows="left|top" font="SansSerif" halign="center" height="32"
7 image_disabled="tool_zoom.tga" 11 image_disabled="tool_zoom.tga"
8 image_disabled_selected="tool_zoom_active.tga" 12 image_disabled_selected="tool_zoom_active.tga"
@@ -33,6 +37,9 @@
33 image_selected="tool_dozer_active.tga" image_unselected="tool_dozer.tga" 37 image_selected="tool_dozer_active.tga" image_unselected="tool_dozer.tga"
34 label="" label_selected="" left="148" mouse_opaque="true" 38 label="" label_selected="" left="148" mouse_opaque="true"
35 name="button land" tool_tip="Land" width="32" /> 39 name="button land" tool_tip="Land" width="32" />
40
41<!-- Focus panel -->
42
36 <check_box bottom="-70" follows="left|top" font="SansSerifSmall" height="16" 43 <check_box bottom="-70" follows="left|top" font="SansSerifSmall" height="16"
37 initial_value="false" label="Zoom" left="4" mouse_opaque="true" 44 initial_value="false" label="Zoom" left="4" mouse_opaque="true"
38 name="radio zoom" radio_style="true" width="114" /> 45 name="radio zoom" radio_style="true" width="114" />
@@ -43,8 +50,11 @@
43 initial_value="false" label="Orbit (Ctrl)" left="4" mouse_opaque="true" 50 initial_value="false" label="Orbit (Ctrl)" left="4" mouse_opaque="true"
44 name="radio orbit" radio_style="true" width="114" /> 51 name="radio orbit" radio_style="true" width="114" />
45 <check_box bottom_delta="-15" follows="left|top" font="SansSerifSmall" height="16" 52 <check_box bottom_delta="-15" follows="left|top" font="SansSerifSmall" height="16"
46 initial_value="false" label="Pan (Ctrl-Shift)" left="4" mouse_opaque="true" 53 initial_value="false" label="Pan (Ctrl-Shift)" left="4"
47 name="radio pan" radio_style="true" width="114" /> 54 mouse_opaque="true" name="radio pan" radio_style="true" width="114" />
55
56<!-- Move panel -->
57
48 <check_box bottom="-70" follows="left|top" font="SansSerifSmall" height="16" 58 <check_box bottom="-70" follows="left|top" font="SansSerifSmall" height="16"
49 initial_value="false" label="Move" left="4" mouse_opaque="true" 59 initial_value="false" label="Move" left="4" mouse_opaque="true"
50 name="radio move" radio_style="true" width="114" /> 60 name="radio move" radio_style="true" width="114" />
@@ -54,6 +64,9 @@
54 <check_box bottom_delta="-15" follows="left|top" font="SansSerifSmall" height="16" 64 <check_box bottom_delta="-15" follows="left|top" font="SansSerifSmall" height="16"
55 initial_value="false" label="Spin (Ctrl-Shift)" left="4" 65 initial_value="false" label="Spin (Ctrl-Shift)" left="4"
56 mouse_opaque="true" name="radio spin" radio_style="true" width="114" /> 66 mouse_opaque="true" name="radio spin" radio_style="true" width="114" />
67
68<!-- Edit panel -->
69
57 <check_box bottom="-70" follows="left|top" font="SansSerifSmall" height="16" 70 <check_box bottom="-70" follows="left|top" font="SansSerifSmall" height="16"
58 initial_value="false" label="Position" left="4" mouse_opaque="true" 71 initial_value="false" label="Position" left="4" mouse_opaque="true"
59 name="radio position" radio_style="true" width="114" /> 72 name="radio position" radio_style="true" width="114" />
@@ -103,112 +116,118 @@
103 <button bottom_delta="-14" follows="left|top" font="SansSerifSmall" halign="center" 116 <button bottom_delta="-14" follows="left|top" font="SansSerifSmall" halign="center"
104 height="16" label="Options..." label_selected="Options..." left_delta="20" 117 height="16" label="Options..." label_selected="Options..." left_delta="20"
105 mouse_opaque="true" name="Options..." scale_image="TRUE" width="80" /> 118 mouse_opaque="true" name="Options..." scale_image="TRUE" width="80" />
119
120<!-- Help text -->
121
106 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 122 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
107 bottom="-52" drop_shadow_visible="true" follows="left|top" 123 bottom="-52" drop_shadow_visible="true" follows="left|top"
108 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="4" 124 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="4"
109 mouse_opaque="true" name="text status" v_pad="0" width="264"> 125 mouse_opaque="true" name="text status" v_pad="0" width="264">
110 Drag to move, shift-drag to copy 126 Drag to move, shift-drag to copy
111 </text> 127 </text>
112 <button bottom="-75" follows="left|top" font="SansSerif" halign="center" height="24" 128
129<!-- Create panel -->
130
131 <button bottom="-78" follows="left|top" font="SansSerif" halign="center" height="30"
113 image_disabled="object_cube.tga" 132 image_disabled="object_cube.tga"
114 image_disabled_selected="object_cube_active.tga" 133 image_disabled_selected="object_cube_active.tga"
115 image_selected="object_cube_active.tga" image_unselected="object_cube.tga" 134 image_selected="object_cube_active.tga" image_unselected="object_cube.tga"
116 label="" label_selected="" left="4" mouse_opaque="true" name="ToolCube" 135 label="" label_selected="" left="4" mouse_opaque="true" name="ToolCube"
117 scale_image="TRUE" width="24" /> 136 scale_image="TRUE" width="30" tool_tip="Cube"/>
118 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center" 137 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center"
119 height="24" image_disabled="object_prism.tga" 138 height="30" image_disabled="object_prism.tga"
120 image_disabled_selected="object_prism_active.tga" 139 image_disabled_selected="object_prism_active.tga"
121 image_selected="object_prism_active.tga" 140 image_selected="object_prism_active.tga"
122 image_unselected="object_prism.tga" label="" label_selected="" 141 image_unselected="object_prism.tga" label="" label_selected=""
123 left_delta="23" mouse_opaque="true" name="ToolPrism" scale_image="TRUE" 142 left_delta="28" mouse_opaque="true" name="ToolPrism" scale_image="TRUE"
124 width="24" /> 143 tool_tip="Prism" width="30" />
125 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center" 144 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center"
126 height="24" image_disabled="object_pyramid.tga" 145 height="30" image_disabled="object_pyramid.tga"
127 image_disabled_selected="object_pyramid_active.tga" 146 image_disabled_selected="object_pyramid_active.tga"
128 image_selected="object_pyramid_active.tga" 147 image_selected="object_pyramid_active.tga"
129 image_unselected="object_pyramid.tga" label="" label_selected="" 148 image_unselected="object_pyramid.tga" label="" label_selected=""
130 left_delta="23" mouse_opaque="true" name="ToolPyramid" scale_image="TRUE" 149 left_delta="28" mouse_opaque="true" name="ToolPyramid" scale_image="TRUE"
131 width="24" /> 150 tool_tip="Pyramid" width="30" />
132 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center" 151 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center"
133 height="24" image_disabled="object_tetrahedron.tga" 152 height="30" image_disabled="object_tetrahedron.tga"
134 image_disabled_selected="object_tetrahedron_active.tga" 153 image_disabled_selected="object_tetrahedron_active.tga"
135 image_selected="object_tetrahedron_active.tga" 154 image_selected="object_tetrahedron_active.tga"
136 image_unselected="object_tetrahedron.tga" label="" label_selected="" 155 image_unselected="object_tetrahedron.tga" label="" label_selected=""
137 left_delta="23" mouse_opaque="true" name="ToolTetrahedron" 156 left_delta="23" mouse_opaque="true" name="ToolTetrahedron"
138 scale_image="TRUE" width="24" /> 157 scale_image="TRUE" tool_tip="Tetrahedron" width="30" />
139 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center" 158 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center"
140 height="24" image_disabled="object_cylinder.tga" 159 height="24" image_disabled="object_cylinder.tga"
141 image_disabled_selected="object_cylinder_active.tga" 160 image_disabled_selected="object_cylinder_active.tga"
142 image_selected="object_cylinder_active.tga" 161 image_selected="object_cylinder_active.tga"
143 image_unselected="object_cylinder.tga" label="" label_selected="" 162 image_unselected="object_cylinder.tga" label="" label_selected=""
144 left_delta="23" mouse_opaque="true" name="ToolCylinder" scale_image="TRUE" 163 left_delta="23" mouse_opaque="true" tool_tip="Cylinder" name="ToolCylinder" scale_image="TRUE"
145 width="24" /> 164 width="30" />
146 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center" 165 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center"
147 height="24" image_disabled="object_hemi_cylinder.tga" 166 height="24" image_disabled="object_hemi_cylinder.tga"
148 image_disabled_selected="object_hemi_cylinder_active.tga" 167 image_disabled_selected="object_hemi_cylinder_active.tga"
149 image_selected="object_hemi_cylinder_active.tga" 168 image_selected="object_hemi_cylinder_active.tga"
150 image_unselected="object_hemi_cylinder.tga" label="" label_selected="" 169 image_unselected="object_hemi_cylinder.tga" label="" label_selected=""
151 left_delta="23" mouse_opaque="true" name="ToolHemiCylinder" 170 left_delta="23" mouse_opaque="true" name="ToolHemiCylinder"
152 scale_image="TRUE" width="24" /> 171 scale_image="TRUE" tool_tip="Hemicylinder" width="30" />
153 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center" 172 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center"
154 height="24" image_disabled="object_cone.tga" 173 height="24" image_disabled="object_cone.tga"
155 image_disabled_selected="object_cone_active.tga" 174 image_disabled_selected="object_cone_active.tga"
156 image_selected="object_cone_active.tga" image_unselected="object_cone.tga" 175 image_selected="object_cone_active.tga" image_unselected="object_cone.tga"
157 label="" label_selected="" left_delta="23" mouse_opaque="true" 176 label="" label_selected="" left_delta="23" mouse_opaque="true"
158 name="ToolCone" scale_image="TRUE" width="24" /> 177 name="ToolCone" scale_image="TRUE" tool_tip="Cone" width="30" />
159 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center" 178 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center"
160 height="24" image_disabled="object_hemi_cone.tga" 179 height="24" image_disabled="object_hemi_cone.tga"
161 image_disabled_selected="object_hemi_cone_active.tga" 180 image_disabled_selected="object_hemi_cone_active.tga"
162 image_selected="object_hemi_cone_active.tga" 181 image_selected="object_hemi_cone_active.tga"
163 image_unselected="object_hemi_cone.tga" label="" label_selected="" 182 image_unselected="object_hemi_cone.tga" label="" label_selected=""
164 left_delta="23" mouse_opaque="true" name="ToolHemiCone" scale_image="TRUE" 183 left_delta="23" mouse_opaque="true" name="ToolHemiCone" scale_image="TRUE"
165 width="24" /> 184 tool_tip="Hemicone" width="30" />
166 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center" 185 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center"
167 height="24" image_disabled="object_sphere.tga" 186 height="24" image_disabled="object_sphere.tga"
168 image_disabled_selected="object_sphere_active.tga" 187 image_disabled_selected="object_sphere_active.tga"
169 image_selected="object_sphere_active.tga" 188 image_selected="object_sphere_active.tga"
170 image_unselected="object_sphere.tga" label="" label_selected="" 189 image_unselected="object_sphere.tga" label="" label_selected=""
171 left_delta="23" mouse_opaque="true" name="ToolSphere" scale_image="TRUE" 190 left_delta="23" mouse_opaque="true" name="ToolSphere" scale_image="TRUE"
172 width="24" /> 191 width="30" tool_tip="Sphere" />
173 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center" 192 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center"
174 height="24" image_disabled="object_hemi_sphere.tga" 193 height="24" image_disabled="object_hemi_sphere.tga"
175 image_disabled_selected="object_hemi_sphere_active.tga" 194 image_disabled_selected="object_hemi_sphere_active.tga"
176 image_selected="object_hemi_sphere_active.tga" 195 image_selected="object_hemi_sphere_active.tga"
177 image_unselected="object_hemi_sphere.tga" label="" label_selected="" 196 image_unselected="object_hemi_sphere.tga" label="" label_selected=""
178 left_delta="23" mouse_opaque="true" name="ToolHemiSphere" 197 left_delta="23" mouse_opaque="true" name="ToolHemiSphere"
179 scale_image="TRUE" width="24" /> 198 scale_image="TRUE" tool_tip="Hemisphere" width="30" />
180 <button bottom_delta="-23" follows="left|top" font="SansSerif" halign="center" 199 <button bottom_delta="-23" follows="left|top" font="SansSerif" halign="center"
181 height="24" image_disabled="object_torus.tga" 200 height="24" image_disabled="object_torus.tga"
182 image_disabled_selected="object_torus_active.tga" 201 image_disabled_selected="object_torus_active.tga"
183 image_selected="object_torus_active.tga" 202 image_selected="object_torus_active.tga"
184 image_unselected="object_torus.tga" label="" label_selected="" left="4" 203 image_unselected="object_torus.tga" label="" label_selected="" left="4"
185 mouse_opaque="true" name="ToolTorus" scale_image="TRUE" width="24" /> 204 mouse_opaque="true" name="ToolTorus" scale_image="TRUE" tool_tip="Torus" width="30" />
186 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center" 205 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center"
187 height="24" image_disabled="object_tube.tga" 206 height="24" image_disabled="object_tube.tga"
188 image_disabled_selected="object_tube_active.tga" 207 image_disabled_selected="object_tube_active.tga"
189 image_selected="object_tube_active.tga" image_unselected="object_tube.tga" 208 image_selected="object_tube_active.tga" image_unselected="object_tube.tga"
190 label="" label_selected="" left_delta="23" mouse_opaque="true" 209 label="" label_selected="" left_delta="23" mouse_opaque="true"
191 name="ToolTube" scale_image="TRUE" width="24" /> 210 name="ToolTube" scale_image="TRUE" tool_tip="Tube" width="30" />
192 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center" 211 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center"
193 height="24" image_disabled="object_ring.tga" 212 height="24" image_disabled="object_ring.tga"
194 image_disabled_selected="object_ring_active.tga" 213 image_disabled_selected="object_ring_active.tga"
195 image_selected="object_ring_active.tga" image_unselected="object_ring.tga" 214 image_selected="object_ring_active.tga" image_unselected="object_ring.tga"
196 label="" label_selected="" left_delta="23" mouse_opaque="true" 215 label="" label_selected="" left_delta="23" mouse_opaque="true"
197 name="ToolRing" scale_image="TRUE" width="24" /> 216 name="ToolRing" scale_image="TRUE" tool_tip="Ring" width="30" />
198 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center" 217 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center"
199 height="24" image_disabled="object_tree.tga" 218 height="24" image_disabled="object_tree.tga"
200 image_disabled_selected="object_tree_active.tga" 219 image_disabled_selected="object_tree_active.tga"
201 image_selected="object_tree_active.tga" image_unselected="object_tree.tga" 220 image_selected="object_tree_active.tga" image_unselected="object_tree.tga"
202 label="" label_selected="" left_delta="23" mouse_opaque="true" 221 label="" label_selected="" left_delta="23" mouse_opaque="true"
203 name="ToolTree" scale_image="TRUE" width="24" /> 222 name="ToolTree" scale_image="TRUE" tool_tip="Tree" width="30" />
204 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center" 223 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center"
205 height="24" image_disabled="object_grass.tga" 224 height="24" image_disabled="object_grass.tga"
206 image_disabled_selected="object_grass_active.tga" 225 image_disabled_selected="object_grass_active.tga"
207 image_selected="object_grass_active.tga" 226 image_selected="object_grass_active.tga"
208 image_unselected="object_grass.tga" label="" label_selected="" 227 image_unselected="object_grass.tga" label="" label_selected=""
209 left_delta="23" mouse_opaque="true" name="ToolGrass" scale_image="TRUE" 228 left_delta="28" mouse_opaque="true" name="ToolGrass" scale_image="TRUE"
210 width="24" /> 229 tool_tip="Grass" width="30" />
211 <check_box bottom="-117" control_name="CreateToolKeepSelected" follows="left|top" 230 <check_box bottom="-120" control_name="CreateToolKeepSelected" follows="left|top"
212 font="SansSerifSmall" height="16" initial_value="false" 231 font="SansSerifSmall" height="16" initial_value="false"
213 label="Keep Tool Selected" left="4" mouse_opaque="true" 232 label="Keep Tool Selected" left="4" mouse_opaque="true"
214 name="checkbox sticky" width="128" /> 233 name="checkbox sticky" width="128" />
@@ -223,6 +242,9 @@
223 <check_box bottom_delta="-15" control_name="CreateToolCopyRotates" follows="left|top" 242 <check_box bottom_delta="-15" control_name="CreateToolCopyRotates" follows="left|top"
224 font="SansSerifSmall" height="16" initial_value="false" label="Rotate Copy" 243 font="SansSerifSmall" height="16" initial_value="false" label="Rotate Copy"
225 left_delta="0" mouse_opaque="true" name="checkbox copy rotates" width="134" /> 244 left_delta="0" mouse_opaque="true" name="checkbox copy rotates" width="134" />
245
246<!-- Land panel -->
247
226 <check_box bottom="-70" follows="left|top" font="SansSerifSmall" height="16" 248 <check_box bottom="-70" follows="left|top" font="SansSerifSmall" height="16"
227 initial_value="false" label="Select Land" left="4" mouse_opaque="true" 249 initial_value="false" label="Select Land" left="4" mouse_opaque="true"
228 name="radio select land" radio_style="true" width="114" /> 250 name="radio select land" radio_style="true" width="114" />
@@ -271,8 +293,11 @@
271 height="20" label="&lt;&lt; Less" left_delta="0" mouse_opaque="true" 293 height="20" label="&lt;&lt; Less" left_delta="0" mouse_opaque="true"
272 name="button less" scale_image="TRUE" tool_tip="Advanced Options" 294 name="button less" scale_image="TRUE" tool_tip="Advanced Options"
273 width="80" /> 295 width="80" />
296
297<!-- Sub-tabs -->
298
274 <tab_container bottom="-550" follows="left|top" height="384" left="0" mouse_opaque="false" 299 <tab_container bottom="-550" follows="left|top" height="384" left="0" mouse_opaque="false"
275 name="Object Info Tabs" tab_max_width="52" tab_min_width="60" 300 name="Object Info Tabs" tab_max_width="52" tab_min_width="40"
276 tab_position="top" width="272"> 301 tab_position="top" width="272">
277 <panel border="true" bottom="-383" follows="left|top|right|bottom" height="367" 302 <panel border="true" bottom="-383" follows="left|top|right|bottom" height="367"
278 label="General" left="1" mouse_opaque="false" name="General" width="270"> 303 label="General" left="1" mouse_opaque="false" name="General" width="270">
@@ -437,6 +462,8 @@
437 </text> 462 </text>
438 <combo_box allow_text_entry="false" bottom_delta="-25" follows="left|top" height="18" 463 <combo_box allow_text_entry="false" bottom_delta="-25" follows="left|top" height="18"
439 left="10" max_chars="20" mouse_opaque="true" name="clickaction" width="150"> 464 left="10" max_chars="20" mouse_opaque="true" name="clickaction" width="150">
465 <!-- Do not reorder these items, the index numbers are
466 used internally. JC -->
440 <combo_item name="Touch/grab(default)" value="Touch/grab (default)"> 467 <combo_item name="Touch/grab(default)" value="Touch/grab (default)">
441 Touch/grab (default) 468 Touch/grab (default)
442 </combo_item> 469 </combo_item>
@@ -511,6 +538,9 @@
511 Must select entire object to set permissions. 538 Must select entire object to set permissions.
512 </string> 539 </string>
513 </panel> 540 </panel>
541
542<!-- Object sub-tab -->
543
514 <panel border="true" bottom="-383" follows="left|top|right|bottom" height="367" 544 <panel border="true" bottom="-383" follows="left|top|right|bottom" height="367"
515 label="Object" left="1" mouse_opaque="false" name="Object" width="270"> 545 label="Object" left="1" mouse_opaque="false" name="Object" width="270">
516 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 546 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
@@ -552,15 +582,15 @@
552 <spinner bottom_delta="-20" decimal_digits="3" follows="left|top" height="16" 582 <spinner bottom_delta="-20" decimal_digits="3" follows="left|top" height="16"
553 increment="0.01" initial_val="0" label="X" label_width="10" left="10" 583 increment="0.01" initial_val="0" label="X" label_width="10" left="10"
554 max_val="512" min_val="-256" mouse_opaque="true" name="Pos X" 584 max_val="512" min_val="-256" mouse_opaque="true" name="Pos X"
555 text_enabled_color="1, 0.25, 0, 1" width="87" /> 585 text_enabled_color="110, 15, 15, 255" width="87" />
556 <spinner bottom_delta="-18" decimal_digits="3" follows="left|top" height="16" 586 <spinner bottom_delta="-18" decimal_digits="3" follows="left|top" height="16"
557 increment="0.01" initial_val="0" label="Y" label_width="10" left="10" 587 increment="0.01" initial_val="0" label="Y" label_width="10" left="10"
558 max_val="512" min_val="-256" mouse_opaque="true" name="Pos Y" 588 max_val="512" min_val="-256" mouse_opaque="true" name="Pos Y"
559 text_enabled_color="0, 1, 0, 1" width="87" /> 589 text_enabled_color="0, 100, 40, 255" width="87" />
560 <spinner bottom_delta="-18" decimal_digits="3" follows="left|top" height="16" 590 <spinner bottom_delta="-18" decimal_digits="3" follows="left|top" height="16"
561 increment="0.01" initial_val="0" label="Z" label_width="10" left="10" 591 increment="0.01" initial_val="0" label="Z" label_width="10" left="10"
562 max_val="768" min_val="0" mouse_opaque="true" name="Pos Z" 592 max_val="4096" min_val="0" mouse_opaque="true" name="Pos Z"
563 text_enabled_color="0, 0.5, 1, 1" width="87" /> 593 text_enabled_color="0, 67, 132, 255" width="87" />
564 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 594 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
565 bottom_delta="-16" drop_shadow_visible="true" follows="left|top" 595 bottom_delta="-16" drop_shadow_visible="true" follows="left|top"
566 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10" 596 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10"
@@ -840,6 +870,9 @@
840 </combo_item> 870 </combo_item>
841 </combo_box> 871 </combo_box>
842 </panel> 872 </panel>
873
874<!-- Features sub-tab -->
875
843 <panel border="true" bottom="-383" follows="left|top|right|bottom" height="367" 876 <panel border="true" bottom="-383" follows="left|top|right|bottom" height="367"
844 label="Features" left="1" mouse_opaque="false" name="Features" width="270"> 877 label="Features" left="1" mouse_opaque="false" name="Features" width="270">
845 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 878 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
@@ -916,6 +949,9 @@
916 left_delta="0" max_val="2" min_val="0" mouse_opaque="true" 949 left_delta="0" max_val="2" min_val="0" mouse_opaque="true"
917 name="Light Falloff" width="128" /> 950 name="Light Falloff" width="128" />
918 </panel> 951 </panel>
952
953<!-- Texture sub-tab -->
954
919 <panel border="true" bottom="-383" follows="left|top|right|bottom" height="367" 955 <panel border="true" bottom="-383" follows="left|top|right|bottom" height="367"
920 label="Texture" left="1" mouse_opaque="false" name="Texture" width="270"> 956 label="Texture" left="1" mouse_opaque="false" name="Texture" width="270">
921 <texture_picker allow_no_texture="false" bottom="-90" can_apply_immediately="true" 957 <texture_picker allow_no_texture="false" bottom="-90" can_apply_immediately="true"
@@ -937,12 +973,12 @@
937 mouse_opaque="true" name="ColorTrans" width="80" /> 973 mouse_opaque="true" name="ColorTrans" width="80" />
938 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 974 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
939 bottom_delta="-12" drop_shadow_visible="true" follows="left|top" 975 bottom_delta="-12" drop_shadow_visible="true" follows="left|top"
940 font="SansSerifSmall" h_pad="0" halign="left" height="10" hidden="false" 976 font="SansSerifSmall" h_pad="0" halign="left" height="10"
941 left="180" mouse_opaque="true" name="glow label" v_pad="0" width="80"> 977 left="180" mouse_opaque="true" name="glow label" v_pad="0" width="80">
942 Glow 978 Glow
943 </text> 979 </text>
944 <spinner bottom_delta="-20" decimal_digits="2" follows="left|top" height="16" 980 <spinner bottom_delta="-20" decimal_digits="2" follows="left|top" height="16"
945 hidden="false" increment="0.1" initial_val="0" left="180" max_val="1" 981 increment="0.1" initial_val="0" left="180" max_val="1"
946 min_val="0" mouse_opaque="true" name="glow" width="80" /> 982 min_val="0" mouse_opaque="true" name="glow" width="80" />
947 <check_box bottom_delta="-23" follows="left|top" font="SansSerifSmall" height="16" 983 <check_box bottom_delta="-23" follows="left|top" font="SansSerifSmall" height="16"
948 initial_value="false" label="Full Bright" left="180" mouse_opaque="true" 984 initial_value="false" label="Full Bright" left="180" mouse_opaque="true"
@@ -1121,12 +1157,16 @@
1121 <panel border="true" bottom="-383" follows="left|top|right|bottom" height="367" 1157 <panel border="true" bottom="-383" follows="left|top|right|bottom" height="367"
1122 label="Content" left="1" mouse_opaque="false" name="Contents" width="270"> 1158 label="Content" left="1" mouse_opaque="false" name="Contents" width="270">
1123 <button bottom="-30" follows="left|top" font="SansSerif" halign="center" height="20" 1159 <button bottom="-30" follows="left|top" font="SansSerif" halign="center" height="20"
1124 label="New Script..." label_selected="New Script..." left="10" 1160 label="New Script..." label_selected="New Script..."
1125 mouse_opaque="true" name="button new script" scale_image="TRUE" width="130" /> 1161 left="10" mouse_opaque="true" name="button new script" scale_image="TRUE"
1126 <panel bottom_delta="-330" follows="left|top" height="325" left="10" 1162 width="130" />
1163 <panel bottom_delta="-330" follows="left|top" height="325" left="10"
1127 mouse_opaque="true" name="ContentsInventory" width="252" /> 1164 mouse_opaque="true" name="ContentsInventory" width="252" />
1128 </panel> 1165 </panel>
1129 </tab_container> 1166 </tab_container>
1167
1168<!-- Land Info sub-tab -->
1169
1130 <panel bottom="-550" follows="left|top" height="384" left="0" mouse_opaque="true" 1170 <panel bottom="-550" follows="left|top" height="384" left="0" mouse_opaque="true"
1131 name="land info panel" width="272"> 1171 name="land info panel" width="272">
1132 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 1172 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
diff --git a/linden/indra/newview/skins/xui/en-us/floater_top_objects.xml b/linden/indra/newview/skins/xui/en-us/floater_top_objects.xml
index a46671f..2003548 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_top_objects.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_top_objects.xml
@@ -18,27 +18,27 @@
18 left="10" name="id_text" width="100"> 18 left="10" name="id_text" width="100">
19 Object ID: 19 Object ID:
20 </text> 20 </text>
21 <line_editor bg_readonly_color="clear" bottom_delta="3" enabled="false" 21 <line_editor bottom_delta="3" enabled="false"
22 follows="left|bottom|right" font="SansSerifSmall" height="20" left="80" 22 follows="left|bottom|right" font="SansSerifSmall" height="20" left="80"
23 name="id_editor" text_readonly_color="white" width="250" /> 23 name="id_editor" width="250" />
24 <button bottom_delta="0" follows="bottom|right" height="20" label="Show Beacon" 24 <button bottom_delta="0" follows="bottom|right" height="20" label="Show Beacon"
25 name="show_beacon_btn" right="-10" width="100" /> 25 name="show_beacon_btn" right="-10" width="100" />
26 <text bottom_delta="-30" follows="left|bottom" font="SansSerifSmall" height="20" 26 <text bottom_delta="-30" follows="left|bottom" font="SansSerifSmall" height="20"
27 left="10" name="obj_name_text" width="100"> 27 left="10" name="obj_name_text" width="100">
28 Object Name: 28 Object Name:
29 </text> 29 </text>
30 <line_editor bg_readonly_color="clear" bottom_delta="3" enabled="true" 30 <line_editor bottom_delta="3" enabled="true"
31 follows="left|bottom|right" font="SansSerifSmall" height="20" left="80" 31 follows="left|bottom|right" font="SansSerifSmall" height="20" left="80"
32 name="object_name_editor" text_readonly_color="white" width="250" /> 32 name="object_name_editor" width="250" />
33 <button bottom_delta="0" follows="bottom|right" height="20" label="Filter" 33 <button bottom_delta="0" follows="bottom|right" height="20" label="Filter"
34 name="filter_object_btn" right="-10" width="100" /> 34 name="filter_object_btn" right="-10" width="100" />
35 <text bottom_delta="-30" follows="left|bottom" font="SansSerifSmall" height="20" 35 <text bottom_delta="-30" follows="left|bottom" font="SansSerifSmall" height="20"
36 left="10" name="owner_name_text" width="100"> 36 left="10" name="owner_name_text" width="100">
37 Owner Name: 37 Owner Name:
38 </text> 38 </text>
39 <line_editor bg_readonly_color="clear" bottom_delta="3" enabled="true" 39 <line_editor bottom_delta="3" enabled="true"
40 follows="left|bottom|right" font="SansSerifSmall" height="20" left="80" 40 follows="left|bottom|right" font="SansSerifSmall" height="20" left="80"
41 name="owner_name_editor" text_readonly_color="white" width="250" /> 41 name="owner_name_editor" width="250" />
42 <button bottom_delta="0" follows="bottom|right" height="20" label="Filter" 42 <button bottom_delta="0" follows="bottom|right" height="20" label="Filter"
43 name="filter_owner_btn" right="-10" width="100" /> 43 name="filter_owner_btn" right="-10" width="100" />
44 <button bottom="35" follows="bottom|left" height="20" label="Return Selected" left="10" 44 <button bottom="35" follows="bottom|left" height="20" label="Return Selected" left="10"
diff --git a/linden/indra/newview/skins/xui/en-us/floater_tos.xml b/linden/indra/newview/skins/xui/en-us/floater_tos.xml
index 4f0a4da..68ddae0 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_tos.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_tos.xml
@@ -34,15 +34,15 @@ you must accept the agreement.
34 </text> 34 </text>
35 <text_editor bottom="-376" embedded_items="false" follows="left|top" font="SansSerif" 35 <text_editor bottom="-376" embedded_items="false" follows="left|top" font="SansSerif"
36 height="283" left="16" max_length="65536" mouse_opaque="true" 36 height="283" left="16" max_length="65536" mouse_opaque="true"
37 name="tos_text" text_readonly_color="1, 1, 1, 1" width="568" 37 name="tos_text" width="568"
38 word_wrap="true"> 38 word_wrap="true">
39 TOS_TEXT 39 TOS_TEXT
40 </text_editor> 40 </text_editor>
41 <web_browser bottom="-376" embedded_items="false" follows="left|top" font="SansSerif" 41 <web_browser bottom="-376" embedded_items="false" follows="left|top" font="SansSerif"
42 height="283" left="16" max_length="65536" mouse_opaque="true" 42 height="283" left="16" max_length="65536" mouse_opaque="true"
43 name="tos_html" 43 name="tos_html"
44 start_url="data:text/html,%3Chtml%3E%3Chead%3E%3C/head%3E%3Cbody bgcolor=%22#ffffff%22 text=%22000000%22%3E%3Ch1%3E%3Ctt%3Eloading...%3C/tt%3E%3C/h1%3E %3C/body%3E %3C/html%3E" 44 start_url="data:text/html,%3Chtml%3E%3Chead%3E%3C/head%3E%3Cbody text=%22000000%22%3E%3Ch1%3E%3Ctt%3Eloading...%3C/tt%3E%3C/h1%3E %3C/body%3E %3C/html%3E"
45 text_readonly_color="1, 1, 1, 1" width="568" word_wrap="true" /> 45 width="568" word_wrap="true" />
46 <string name="real_url"> 46 <string name="real_url">
47 http://secondlife.com/app/tos/ 47 http://secondlife.com/app/tos/
48 </string> 48 </string>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_water.xml b/linden/indra/newview/skins/xui/en-us/floater_water.xml
index bd63105..5b65837 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_water.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_water.xml
@@ -1,12 +1,12 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater bottom="-150" can_close="true" can_drag_on_left="false" can_minimize="true" 2<floater bottom="-150" can_close="true" can_drag_on_left="false" can_minimize="true"
3 can_resize="false" height="240" hidden="false" left="50" min_height="200" 3 can_resize="false" height="240" left="50" min_height="200"
4 min_width="400" mouse_opaque="true" name="Water Floater" 4 min_width="400" mouse_opaque="true" name="Water Floater"
5 rect_control="FloaterAdvancedWaterRect" title="Advanced Water Editor" 5 rect_control="FloaterAdvancedWaterRect" title="Advanced Water Editor"
6 width="700"> 6 width="700">
7 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 7 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
8 bottom="-50" drop_shadow_visible="true" follows="left|top|right" 8 bottom="-50" drop_shadow_visible="true" follows="left|top|right"
9 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 9 font="SansSerif" h_pad="0" halign="left" height="16"
10 left="10" mouse_opaque="true" name="KeyFramePresetsText" v_pad="0" 10 left="10" mouse_opaque="true" name="KeyFramePresetsText" v_pad="0"
11 width="110"> 11 width="110">
12 Water Presets: 12 Water Presets:
@@ -15,22 +15,22 @@
15 left_delta="110" max_chars="20" mouse_opaque="true" 15 left_delta="110" max_chars="20" mouse_opaque="true"
16 name="WaterPresetsCombo" width="150" /> 16 name="WaterPresetsCombo" width="150" />
17 <button bottom="-53" enabled="true" font="SansSerif" halign="center" height="20" 17 <button bottom="-53" enabled="true" font="SansSerif" halign="center" height="20"
18 hidden="false" label="New" label_selected="New" left_delta="170" 18 label="New" label_selected="New" left_delta="170"
19 mouse_opaque="true" name="WaterNewPreset" scale_image="true" width="70" /> 19 mouse_opaque="true" name="WaterNewPreset" scale_image="true" width="70" />
20 <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20" 20 <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20"
21 hidden="false" label="Save" label_selected="Save" left_delta="80" 21 label="Save" label_selected="Save" left_delta="80"
22 mouse_opaque="true" name="WaterSavePreset" scale_image="true" width="70" /> 22 mouse_opaque="true" name="WaterSavePreset" scale_image="true" width="70" />
23 <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20" 23 <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20"
24 hidden="false" label="Delete" label_selected="Delete" left_delta="80" 24 label="Delete" label_selected="Delete" left_delta="80"
25 mouse_opaque="true" name="WaterDeletePreset" scale_image="true" width="70" /> 25 mouse_opaque="true" name="WaterDeletePreset" scale_image="true" width="70" />
26 <tab_container bottom="-240" follows="left|top" height="180" hidden="false" left="0" 26 <tab_container bottom="-240" follows="left|top" height="180" left="0"
27 mouse_opaque="false" name="Water Tabs" tab_position="top" width="700"> 27 mouse_opaque="false" name="Water Tabs" tab_position="top" width="700">
28 <panel border="true" bottom="-240" follows="left|top|right|bottom" height="180" 28 <panel border="true" bottom="-240" follows="left|top|right|bottom" height="180"
29 hidden="false" label="Settings" left="1" mouse_opaque="false" 29 label="Settings" left="1" mouse_opaque="false"
30 name="Settings" width="698"> 30 name="Settings" width="698">
31 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 31 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
32 bottom="-20" drop_shadow_visible="true" follows="left|top|right" 32 bottom="-20" drop_shadow_visible="true" follows="left|top|right"
33 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 33 font="SansSerif" h_pad="0" halign="left" height="16"
34 left="10" mouse_opaque="true" name="BHText" v_pad="0" width="355"> 34 left="10" mouse_opaque="true" name="BHText" v_pad="0" width="355">
35 Water Fog Color 35 Water Fog Color
36 </text> 36 </text>
@@ -38,11 +38,11 @@
38 left="160" name="WaterFogColorHelp" width="18" /> 38 left="160" name="WaterFogColorHelp" width="18" />
39 <color_swatch border_color="0.45098, 0.517647, 0.607843, 1" bottom="-80" 39 <color_swatch border_color="0.45098, 0.517647, 0.607843, 1" bottom="-80"
40 can_apply_immediately="true" color="0.5, 0.5, 0.5, 1" follows="left|top" 40 can_apply_immediately="true" color="0.5, 0.5, 0.5, 1" follows="left|top"
41 height="50" hidden="false" label="" left="40" mouse_opaque="true" 41 height="50" label="" left="40" mouse_opaque="true"
42 name="WaterFogColor" tool_tip="Click to open Color Picker" width="40" /> 42 name="WaterFogColor" tool_tip="Click to open Color Picker" width="40" />
43 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 43 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
44 bottom="-90" drop_shadow_visible="true" follows="left|top|right" 44 bottom="-90" drop_shadow_visible="true" follows="left|top|right"
45 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 45 font="SansSerif" h_pad="0" halign="left" height="16"
46 left="10" mouse_opaque="true" name="WaterFogDensText" v_pad="0" width="355"> 46 left="10" mouse_opaque="true" name="WaterFogDensText" v_pad="0" width="355">
47 Fog Density Exponent 47 Fog Density Exponent
48 </text> 48 </text>
@@ -55,7 +55,7 @@
55 width="200" /> 55 width="200" />
56 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 56 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
57 bottom="-130" drop_shadow_visible="true" follows="left|top|right" 57 bottom="-130" drop_shadow_visible="true" follows="left|top|right"
58 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 58 font="SansSerif" h_pad="0" halign="left" height="16"
59 left="10" mouse_opaque="true" name="WaterUnderWaterFogModText" v_pad="0" 59 left="10" mouse_opaque="true" name="WaterUnderWaterFogModText" v_pad="0"
60 width="355"> 60 width="355">
61 Underwater Fog Modifier 61 Underwater Fog Modifier
@@ -68,7 +68,7 @@
68 name="WaterUnderWaterFogMod" show_text="true" value="0.25" width="200" /> 68 name="WaterUnderWaterFogMod" show_text="true" value="0.25" width="200" />
69 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 69 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
70 bottom="-20" drop_shadow_visible="true" follows="left|top|right" 70 bottom="-20" drop_shadow_visible="true" follows="left|top|right"
71 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 71 font="SansSerif" h_pad="0" halign="left" height="16"
72 left="245" mouse_opaque="true" name="BDensText" v_pad="0" width="355"> 72 left="245" mouse_opaque="true" name="BDensText" v_pad="0" width="355">
73 Reflection Wavelet Scale 73 Reflection Wavelet Scale
74 </text> 74 </text>
@@ -76,19 +76,19 @@
76 left="395" name="WaterNormalScaleHelp" width="18" /> 76 left="395" name="WaterNormalScaleHelp" width="18" />
77 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 77 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
78 bottom="-37" drop_shadow_visible="true" follows="left|top|right" 78 bottom="-37" drop_shadow_visible="true" follows="left|top|right"
79 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 79 font="SansSerifSmall" h_pad="0" halign="center" height="16"
80 left="245" mouse_opaque="true" name="BHText2" v_pad="0" width="10"> 80 left="245" mouse_opaque="true" name="BHText2" v_pad="0" width="10">
81 1 81 1
82 </text> 82 </text>
83 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 83 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
84 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right" 84 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right"
85 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 85 font="SansSerifSmall" h_pad="0" halign="center" height="16"
86 left_delta="0" mouse_opaque="true" name="BHText3" v_pad="0" width="10"> 86 left_delta="0" mouse_opaque="true" name="BHText3" v_pad="0" width="10">
87 2 87 2
88 </text> 88 </text>
89 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 89 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
90 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right" 90 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right"
91 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 91 font="SansSerifSmall" h_pad="0" halign="center" height="16"
92 left_delta="0" mouse_opaque="true" name="BHText4" v_pad="0" width="10"> 92 left_delta="0" mouse_opaque="true" name="BHText4" v_pad="0" width="10">
93 3 93 3
94 </text> 94 </text>
@@ -109,7 +109,7 @@
109 width="200" /> 109 width="200" />
110 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 110 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
111 bottom="-80" drop_shadow_visible="true" follows="left|top|right" 111 bottom="-80" drop_shadow_visible="true" follows="left|top|right"
112 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 112 font="SansSerif" h_pad="0" halign="left" height="16"
113 left="245" mouse_opaque="true" name="HDText" v_pad="0" width="355"> 113 left="245" mouse_opaque="true" name="HDText" v_pad="0" width="355">
114 Fresnel Scale 114 Fresnel Scale
115 </text> 115 </text>
@@ -122,7 +122,7 @@
122 width="200" /> 122 width="200" />
123 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 123 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
124 bottom="-115" drop_shadow_visible="true" follows="left|top|right" 124 bottom="-115" drop_shadow_visible="true" follows="left|top|right"
125 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 125 font="SansSerif" h_pad="0" halign="left" height="16"
126 left="245" mouse_opaque="true" name="FresnelOffsetText" v_pad="0" 126 left="245" mouse_opaque="true" name="FresnelOffsetText" v_pad="0"
127 width="355"> 127 width="355">
128 Fresnel Offset 128 Fresnel Offset
@@ -136,7 +136,7 @@
136 width="200" /> 136 width="200" />
137 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 137 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
138 bottom="-20" drop_shadow_visible="true" follows="left|top|right" 138 bottom="-20" drop_shadow_visible="true" follows="left|top|right"
139 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 139 font="SansSerif" h_pad="0" halign="left" height="16"
140 left="480" mouse_opaque="true" name="DensMultText" v_pad="0" width="355"> 140 left="480" mouse_opaque="true" name="DensMultText" v_pad="0" width="355">
141 Refract Scale Above 141 Refract Scale Above
142 </text> 142 </text>
@@ -149,7 +149,7 @@
149 width="200" /> 149 width="200" />
150 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 150 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
151 bottom="-53" drop_shadow_visible="true" follows="left|top|right" 151 bottom="-53" drop_shadow_visible="true" follows="left|top|right"
152 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 152 font="SansSerif" h_pad="0" halign="left" height="16"
153 left="480" mouse_opaque="true" name="WaterScaleBelowText" v_pad="0" 153 left="480" mouse_opaque="true" name="WaterScaleBelowText" v_pad="0"
154 width="355"> 154 width="355">
155 Refract Scale Below 155 Refract Scale Below
@@ -163,7 +163,7 @@
163 width="200" /> 163 width="200" />
164 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 164 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
165 bottom="-87" drop_shadow_visible="true" follows="left|top|right" 165 bottom="-87" drop_shadow_visible="true" follows="left|top|right"
166 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 166 font="SansSerif" h_pad="0" halign="left" height="16"
167 left="480" mouse_opaque="true" name="MaxAltText" v_pad="0" width="355"> 167 left="480" mouse_opaque="true" name="MaxAltText" v_pad="0" width="355">
168 Blur Multiplier 168 Blur Multiplier
169 </text> 169 </text>
@@ -176,11 +176,11 @@
176 width="200" /> 176 width="200" />
177 </panel> 177 </panel>
178 <panel border="true" bottom="-240" follows="left|top|right|bottom" height="180" 178 <panel border="true" bottom="-240" follows="left|top|right|bottom" height="180"
179 hidden="false" label="Image" left="1" mouse_opaque="false" name="Waves" 179 label="Image" left="1" mouse_opaque="false" name="Waves"
180 width="698"> 180 width="698">
181 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 181 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
182 bottom="-20" drop_shadow_visible="true" follows="left|top|right" 182 bottom="-20" drop_shadow_visible="true" follows="left|top|right"
183 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 183 font="SansSerif" h_pad="0" halign="left" height="16"
184 left="10" mouse_opaque="true" name="BHText" v_pad="0" width="355"> 184 left="10" mouse_opaque="true" name="BHText" v_pad="0" width="355">
185 Big Wave Direction 185 Big Wave Direction
186 </text> 186 </text>
@@ -188,14 +188,14 @@
188 left="155" name="WaterWave1Help" width="18" /> 188 left="155" name="WaterWave1Help" width="18" />
189 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 189 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
190 bottom="-37" drop_shadow_visible="true" follows="left|top|right" 190 bottom="-37" drop_shadow_visible="true" follows="left|top|right"
191 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 191 font="SansSerifSmall" h_pad="0" halign="center" height="16"
192 left="10" mouse_opaque="true" name="WaterWave1DirXText" v_pad="0" 192 left="10" mouse_opaque="true" name="WaterWave1DirXText" v_pad="0"
193 width="10"> 193 width="10">
194 X 194 X
195 </text> 195 </text>
196 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 196 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
197 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right" 197 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right"
198 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 198 font="SansSerifSmall" h_pad="0" halign="center" height="16"
199 left_delta="0" mouse_opaque="true" name="WaterWave1DirYText" v_pad="0" 199 left_delta="0" mouse_opaque="true" name="WaterWave1DirYText" v_pad="0"
200 width="10"> 200 width="10">
201 Y 201 Y
@@ -212,7 +212,7 @@
212 width="200" /> 212 width="200" />
213 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 213 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
214 bottom="-70" drop_shadow_visible="true" follows="left|top|right" 214 bottom="-70" drop_shadow_visible="true" follows="left|top|right"
215 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 215 font="SansSerif" h_pad="0" halign="left" height="16"
216 left="10" mouse_opaque="true" name="BHText2" v_pad="0" width="355"> 216 left="10" mouse_opaque="true" name="BHText2" v_pad="0" width="355">
217 Little Wave Direction 217 Little Wave Direction
218 </text> 218 </text>
@@ -220,14 +220,14 @@
220 left="155" name="WaterWave2Help" width="18" /> 220 left="155" name="WaterWave2Help" width="18" />
221 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 221 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
222 bottom="-87" drop_shadow_visible="true" follows="left|top|right" 222 bottom="-87" drop_shadow_visible="true" follows="left|top|right"
223 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 223 font="SansSerifSmall" h_pad="0" halign="center" height="16"
224 left="10" mouse_opaque="true" name="WaterWave2DirXText" v_pad="0" 224 left="10" mouse_opaque="true" name="WaterWave2DirXText" v_pad="0"
225 width="10"> 225 width="10">
226 X 226 X
227 </text> 227 </text>
228 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 228 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
229 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right" 229 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right"
230 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 230 font="SansSerifSmall" h_pad="0" halign="center" height="16"
231 left_delta="0" mouse_opaque="true" name="WaterWave2DirYText" v_pad="0" 231 left_delta="0" mouse_opaque="true" name="WaterWave2DirYText" v_pad="0"
232 width="10"> 232 width="10">
233 Y 233 Y
@@ -244,7 +244,7 @@
244 width="200" /> 244 width="200" />
245 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 245 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
246 bottom="-20" drop_shadow_visible="true" follows="left|top|right" 246 bottom="-20" drop_shadow_visible="true" follows="left|top|right"
247 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 247 font="SansSerif" h_pad="0" halign="left" height="16"
248 left="240" mouse_opaque="true" name="BHText3" v_pad="0" width="355"> 248 left="240" mouse_opaque="true" name="BHText3" v_pad="0" width="355">
249 Normal Map 249 Normal Map
250 </text> 250 </text>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_windlight_options.xml b/linden/indra/newview/skins/xui/en-us/floater_windlight_options.xml
index ff51de0..11859cc 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_windlight_options.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_windlight_options.xml
@@ -1,12 +1,12 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater bottom="-150" can_close="true" can_drag_on_left="false" can_minimize="true" 2<floater bottom="-150" can_close="true" can_drag_on_left="false" can_minimize="true"
3 can_resize="false" height="220" hidden="false" left="50" min_height="180" 3 can_resize="false" height="220" left="50" min_height="180"
4 min_width="400" mouse_opaque="true" name="WindLight floater" 4 min_width="400" mouse_opaque="true" name="WindLight floater"
5 rect_control="FloaterAdvancedSkyRect" title="Advanced Sky Editor" 5 rect_control="FloaterAdvancedSkyRect" title="Advanced Sky Editor"
6 width="700"> 6 width="700">
7 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 7 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
8 bottom="-50" drop_shadow_visible="true" follows="left|top|right" 8 bottom="-50" drop_shadow_visible="true" follows="left|top|right"
9 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 9 font="SansSerif" h_pad="0" halign="left" height="16"
10 left="10" mouse_opaque="true" name="KeyFramePresetsText" v_pad="0" 10 left="10" mouse_opaque="true" name="KeyFramePresetsText" v_pad="0"
11 width="110"> 11 width="110">
12 Sky Presets: 12 Sky Presets:
@@ -15,26 +15,26 @@
15 left_delta="110" max_chars="20" mouse_opaque="true" name="WLPresetsCombo" 15 left_delta="110" max_chars="20" mouse_opaque="true" name="WLPresetsCombo"
16 width="150" /> 16 width="150" />
17 <button bottom="-53" enabled="true" font="SansSerif" halign="center" height="20" 17 <button bottom="-53" enabled="true" font="SansSerif" halign="center" height="20"
18 hidden="false" label="New" label_selected="New" left_delta="170" 18 label="New" label_selected="New" left_delta="170"
19 mouse_opaque="true" name="WLNewPreset" scale_image="true" width="70" /> 19 mouse_opaque="true" name="WLNewPreset" scale_image="true" width="70" />
20 <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20" 20 <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20"
21 hidden="false" label="Save" label_selected="Save" left_delta="80" 21 label="Save" label_selected="Save" left_delta="80"
22 mouse_opaque="true" name="WLSavePreset" scale_image="true" width="70" /> 22 mouse_opaque="true" name="WLSavePreset" scale_image="true" width="70" />
23 <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20" 23 <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20"
24 hidden="false" label="Delete" label_selected="Delete" left_delta="80" 24 label="Delete" label_selected="Delete" left_delta="80"
25 mouse_opaque="true" name="WLDeletePreset" scale_image="true" width="70" /> 25 mouse_opaque="true" name="WLDeletePreset" scale_image="true" width="70" />
26 <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20" 26 <button bottom_delta="0" enabled="true" font="SansSerif" halign="center" height="20"
27 hidden="false" label="Day Cycle Editor" label_selected="Day Cycle Editor" 27 label="Day Cycle Editor" label_selected="Day Cycle Editor"
28 left_delta="120" mouse_opaque="true" name="WLDayCycleMenuButton" 28 left_delta="120" mouse_opaque="true" name="WLDayCycleMenuButton"
29 scale_image="true" width="120" /> 29 scale_image="true" width="120" />
30 <tab_container bottom="-220" follows="left|top" height="160" hidden="false" left="0" 30 <tab_container bottom="-220" follows="left|top" height="160" left="0"
31 mouse_opaque="false" name="WindLight Tabs" tab_position="top" width="700"> 31 mouse_opaque="false" name="WindLight Tabs" tab_position="top" width="700">
32 <panel border="true" bottom="-220" follows="left|top|right|bottom" height="160" 32 <panel border="true" bottom="-220" follows="left|top|right|bottom" height="160"
33 hidden="false" label="Atmosphere" left="1" mouse_opaque="false" 33 label="Atmosphere" left="1" mouse_opaque="false"
34 name="Atmosphere" width="698"> 34 name="Atmosphere" width="698">
35 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 35 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
36 bottom="-20" drop_shadow_visible="true" follows="left|top|right" 36 bottom="-20" drop_shadow_visible="true" follows="left|top|right"
37 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 37 font="SansSerif" h_pad="0" halign="left" height="16"
38 left="10" mouse_opaque="true" name="BHText" v_pad="0" width="355"> 38 left="10" mouse_opaque="true" name="BHText" v_pad="0" width="355">
39 Blue Horizon 39 Blue Horizon
40 </text> 40 </text>
@@ -42,25 +42,25 @@
42 left="160" name="WLBlueHorizonHelp" width="18" /> 42 left="160" name="WLBlueHorizonHelp" width="18" />
43 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 43 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
44 bottom="-37" drop_shadow_visible="true" follows="left|top|right" 44 bottom="-37" drop_shadow_visible="true" follows="left|top|right"
45 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 45 font="SansSerifSmall" h_pad="0" halign="center" height="16"
46 left="10" mouse_opaque="true" name="BHText2" v_pad="0" width="10"> 46 left="10" mouse_opaque="true" name="BHText2" v_pad="0" width="10">
47 R 47 R
48 </text> 48 </text>
49 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 49 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
50 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right" 50 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right"
51 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 51 font="SansSerifSmall" h_pad="0" halign="center" height="16"
52 left_delta="0" mouse_opaque="true" name="BHText3" v_pad="0" width="10"> 52 left_delta="0" mouse_opaque="true" name="BHText3" v_pad="0" width="10">
53 G 53 G
54 </text> 54 </text>
55 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 55 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
56 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right" 56 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right"
57 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 57 font="SansSerifSmall" h_pad="0" halign="center" height="16"
58 left_delta="0" mouse_opaque="true" name="BHText4" v_pad="0" width="10"> 58 left_delta="0" mouse_opaque="true" name="BHText4" v_pad="0" width="10">
59 B 59 B
60 </text> 60 </text>
61 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 61 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
62 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right" 62 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right"
63 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 63 font="SansSerifSmall" h_pad="0" halign="center" height="16"
64 left_delta="0" mouse_opaque="true" name="BHText5" v_pad="0" width="10"> 64 left_delta="0" mouse_opaque="true" name="BHText5" v_pad="0" width="10">
65 I 65 I
66 </text> 66 </text>
@@ -86,7 +86,7 @@
86 width="200" /> 86 width="200" />
87 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 87 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
88 bottom="-87" drop_shadow_visible="true" follows="left|top|right" 88 bottom="-87" drop_shadow_visible="true" follows="left|top|right"
89 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 89 font="SansSerif" h_pad="0" halign="left" height="16"
90 left="10" mouse_opaque="true" name="BDensText" v_pad="0" width="355"> 90 left="10" mouse_opaque="true" name="BDensText" v_pad="0" width="355">
91 Haze Horizon 91 Haze Horizon
92 </text> 92 </text>
@@ -99,7 +99,7 @@
99 width="200" /> 99 width="200" />
100 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 100 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
101 bottom="-20" drop_shadow_visible="true" follows="left|top|right" 101 bottom="-20" drop_shadow_visible="true" follows="left|top|right"
102 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 102 font="SansSerif" h_pad="0" halign="left" height="16"
103 left="245" mouse_opaque="true" name="BDensText2" v_pad="0" width="355"> 103 left="245" mouse_opaque="true" name="BDensText2" v_pad="0" width="355">
104 Blue Density 104 Blue Density
105 </text> 105 </text>
@@ -107,25 +107,25 @@
107 left="395" name="WLBlueDensityHelp" width="18" /> 107 left="395" name="WLBlueDensityHelp" width="18" />
108 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 108 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
109 bottom="-37" drop_shadow_visible="true" follows="left|top|right" 109 bottom="-37" drop_shadow_visible="true" follows="left|top|right"
110 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 110 font="SansSerifSmall" h_pad="0" halign="center" height="16"
111 left="245" mouse_opaque="true" name="BHText6" v_pad="0" width="10"> 111 left="245" mouse_opaque="true" name="BHText6" v_pad="0" width="10">
112 R 112 R
113 </text> 113 </text>
114 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 114 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
115 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right" 115 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right"
116 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 116 font="SansSerifSmall" h_pad="0" halign="center" height="16"
117 left_delta="0" mouse_opaque="true" name="BHText7" v_pad="0" width="10"> 117 left_delta="0" mouse_opaque="true" name="BHText7" v_pad="0" width="10">
118 G 118 G
119 </text> 119 </text>
120 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 120 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
121 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right" 121 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right"
122 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 122 font="SansSerifSmall" h_pad="0" halign="center" height="16"
123 left_delta="0" mouse_opaque="true" name="BHText8" v_pad="0" width="10"> 123 left_delta="0" mouse_opaque="true" name="BHText8" v_pad="0" width="10">
124 B 124 B
125 </text> 125 </text>
126 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 126 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
127 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right" 127 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right"
128 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 128 font="SansSerifSmall" h_pad="0" halign="center" height="16"
129 left_delta="0" mouse_opaque="true" name="BHText9" v_pad="0" width="10"> 129 left_delta="0" mouse_opaque="true" name="BHText9" v_pad="0" width="10">
130 I 130 I
131 </text> 131 </text>
@@ -151,7 +151,7 @@
151 width="200" /> 151 width="200" />
152 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 152 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
153 bottom="-87" drop_shadow_visible="true" follows="left|top|right" 153 bottom="-87" drop_shadow_visible="true" follows="left|top|right"
154 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 154 font="SansSerif" h_pad="0" halign="left" height="16"
155 left="245" mouse_opaque="true" name="HDText" v_pad="0" width="355"> 155 left="245" mouse_opaque="true" name="HDText" v_pad="0" width="355">
156 Haze Density 156 Haze Density
157 </text> 157 </text>
@@ -164,7 +164,7 @@
164 width="200" /> 164 width="200" />
165 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 165 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
166 bottom="-20" drop_shadow_visible="true" follows="left|top|right" 166 bottom="-20" drop_shadow_visible="true" follows="left|top|right"
167 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 167 font="SansSerif" h_pad="0" halign="left" height="16"
168 left="480" mouse_opaque="true" name="DensMultText" v_pad="0" width="355"> 168 left="480" mouse_opaque="true" name="DensMultText" v_pad="0" width="355">
169 Density Multiplier 169 Density Multiplier
170 </text> 170 </text>
@@ -177,7 +177,7 @@
177 width="200" /> 177 width="200" />
178 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 178 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
179 bottom="-53" drop_shadow_visible="true" follows="left|top|right" 179 bottom="-53" drop_shadow_visible="true" follows="left|top|right"
180 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 180 font="SansSerif" h_pad="0" halign="left" height="16"
181 left="480" mouse_opaque="true" name="WLDistanceMultText" v_pad="0" 181 left="480" mouse_opaque="true" name="WLDistanceMultText" v_pad="0"
182 width="355"> 182 width="355">
183 Distance Multiplier 183 Distance Multiplier
@@ -191,7 +191,7 @@
191 width="207" /> 191 width="207" />
192 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 192 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
193 bottom="-87" drop_shadow_visible="true" follows="left|top|right" 193 bottom="-87" drop_shadow_visible="true" follows="left|top|right"
194 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 194 font="SansSerif" h_pad="0" halign="left" height="16"
195 left="480" mouse_opaque="true" name="MaxAltText" v_pad="0" width="355"> 195 left="480" mouse_opaque="true" name="MaxAltText" v_pad="0" width="355">
196 Max Altitude 196 Max Altitude
197 </text> 197 </text>
@@ -204,11 +204,11 @@
204 width="205" /> 204 width="205" />
205 </panel> 205 </panel>
206 <panel border="true" bottom="-180" follows="left|top|right|bottom" height="160" 206 <panel border="true" bottom="-180" follows="left|top|right|bottom" height="160"
207 hidden="false" label="Lighting" left="1" mouse_opaque="true" 207 label="Lighting" left="1" mouse_opaque="true"
208 name="Lighting" width="698"> 208 name="Lighting" width="698">
209 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 209 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
210 bottom="-20" drop_shadow_visible="true" follows="left|top|right" 210 bottom="-20" drop_shadow_visible="true" follows="left|top|right"
211 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 211 font="SansSerif" h_pad="0" halign="left" height="16"
212 left="10" mouse_opaque="true" name="SLCText" v_pad="0" width="355"> 212 left="10" mouse_opaque="true" name="SLCText" v_pad="0" width="355">
213 Sun/Moon Color 213 Sun/Moon Color
214 </text> 214 </text>
@@ -216,25 +216,25 @@
216 left="160" name="WLSunlightColorHelp" width="18" /> 216 left="160" name="WLSunlightColorHelp" width="18" />
217 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 217 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
218 bottom="-37" drop_shadow_visible="true" follows="left|top|right" 218 bottom="-37" drop_shadow_visible="true" follows="left|top|right"
219 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 219 font="SansSerifSmall" h_pad="0" halign="center" height="16"
220 left="10" mouse_opaque="true" name="BHText" v_pad="0" width="10"> 220 left="10" mouse_opaque="true" name="BHText" v_pad="0" width="10">
221 R 221 R
222 </text> 222 </text>
223 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 223 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
224 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right" 224 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right"
225 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 225 font="SansSerifSmall" h_pad="0" halign="center" height="16"
226 left_delta="0" mouse_opaque="true" name="BHText2" v_pad="0" width="10"> 226 left_delta="0" mouse_opaque="true" name="BHText2" v_pad="0" width="10">
227 G 227 G
228 </text> 228 </text>
229 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 229 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
230 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right" 230 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right"
231 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 231 font="SansSerifSmall" h_pad="0" halign="center" height="16"
232 left_delta="0" mouse_opaque="true" name="BHText3" v_pad="0" width="10"> 232 left_delta="0" mouse_opaque="true" name="BHText3" v_pad="0" width="10">
233 B 233 B
234 </text> 234 </text>
235 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 235 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
236 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right" 236 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right"
237 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 237 font="SansSerifSmall" h_pad="0" halign="center" height="16"
238 left_delta="0" mouse_opaque="true" name="BHText4" v_pad="0" width="10"> 238 left_delta="0" mouse_opaque="true" name="BHText4" v_pad="0" width="10">
239 I 239 I
240 </text> 240 </text>
@@ -260,7 +260,7 @@
260 width="200" /> 260 width="200" />
261 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 261 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
262 bottom="-87" drop_shadow_visible="true" follows="left|top|right" 262 bottom="-87" drop_shadow_visible="true" follows="left|top|right"
263 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 263 font="SansSerif" h_pad="0" halign="left" height="16"
264 left="10" mouse_opaque="true" name="TODText" v_pad="0" width="355"> 264 left="10" mouse_opaque="true" name="TODText" v_pad="0" width="355">
265 Sun/Moon Position 265 Sun/Moon Position
266 </text> 266 </text>
@@ -275,7 +275,7 @@
275 width="204" /> 275 width="204" />
276 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 276 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
277 bottom="-20" drop_shadow_visible="true" follows="left|top|right" 277 bottom="-20" drop_shadow_visible="true" follows="left|top|right"
278 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 278 font="SansSerif" h_pad="0" halign="left" height="16"
279 left="245" mouse_opaque="true" name="WLAmbientText" v_pad="0" width="355"> 279 left="245" mouse_opaque="true" name="WLAmbientText" v_pad="0" width="355">
280 Ambient 280 Ambient
281 </text> 281 </text>
@@ -283,25 +283,25 @@
283 left="395" name="WLAmbientHelp" width="18" /> 283 left="395" name="WLAmbientHelp" width="18" />
284 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 284 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
285 bottom="-37" drop_shadow_visible="true" follows="left|top|right" 285 bottom="-37" drop_shadow_visible="true" follows="left|top|right"
286 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 286 font="SansSerifSmall" h_pad="0" halign="center" height="16"
287 left="245" mouse_opaque="true" name="BHText5" v_pad="0" width="10"> 287 left="245" mouse_opaque="true" name="BHText5" v_pad="0" width="10">
288 R 288 R
289 </text> 289 </text>
290 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 290 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
291 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right" 291 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right"
292 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 292 font="SansSerifSmall" h_pad="0" halign="center" height="16"
293 left_delta="0" mouse_opaque="true" name="BHText6" v_pad="0" width="10"> 293 left_delta="0" mouse_opaque="true" name="BHText6" v_pad="0" width="10">
294 G 294 G
295 </text> 295 </text>
296 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 296 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
297 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right" 297 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right"
298 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 298 font="SansSerifSmall" h_pad="0" halign="center" height="16"
299 left_delta="0" mouse_opaque="true" name="BHText7" v_pad="0" width="10"> 299 left_delta="0" mouse_opaque="true" name="BHText7" v_pad="0" width="10">
300 B 300 B
301 </text> 301 </text>
302 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 302 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
303 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right" 303 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right"
304 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 304 font="SansSerifSmall" h_pad="0" halign="center" height="16"
305 left_delta="0" mouse_opaque="true" name="BHText8" v_pad="0" width="10"> 305 left_delta="0" mouse_opaque="true" name="BHText8" v_pad="0" width="10">
306 I 306 I
307 </text> 307 </text>
@@ -326,7 +326,7 @@
326 width="200" /> 326 width="200" />
327 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 327 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
328 bottom="-87" drop_shadow_visible="true" follows="left|top|right" 328 bottom="-87" drop_shadow_visible="true" follows="left|top|right"
329 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 329 font="SansSerif" h_pad="0" halign="left" height="16"
330 left="245" mouse_opaque="true" name="WLEastAngleText" v_pad="0" width="355"> 330 left="245" mouse_opaque="true" name="WLEastAngleText" v_pad="0" width="355">
331 East Angle 331 East Angle
332 </text> 332 </text>
@@ -339,7 +339,7 @@
339 width="200" /> 339 width="200" />
340 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 340 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
341 bottom="-20" drop_shadow_visible="true" follows="left|top|right" 341 bottom="-20" drop_shadow_visible="true" follows="left|top|right"
342 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 342 font="SansSerif" h_pad="0" halign="left" height="16"
343 left="480" mouse_opaque="true" name="SunGlowText" v_pad="0" width="355"> 343 left="480" mouse_opaque="true" name="SunGlowText" v_pad="0" width="355">
344 Sun Glow 344 Sun Glow
345 </text> 345 </text>
@@ -355,7 +355,7 @@
355 mouse_opaque="true" name="WLGlowR" show_text="true" value="1.0" width="200" /> 355 mouse_opaque="true" name="WLGlowR" show_text="true" value="1.0" width="200" />
356 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 356 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
357 bottom="-67" drop_shadow_visible="true" follows="left|top|right" 357 bottom="-67" drop_shadow_visible="true" follows="left|top|right"
358 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 358 font="SansSerif" h_pad="0" halign="left" height="16"
359 left="480" mouse_opaque="true" name="SceneGammaText" v_pad="0" width="200"> 359 left="480" mouse_opaque="true" name="SceneGammaText" v_pad="0" width="200">
360 Scene Gamma 360 Scene Gamma
361 </text> 361 </text>
@@ -367,7 +367,7 @@
367 mouse_opaque="true" name="WLGamma" show_text="true" value="2.0" width="207" /> 367 mouse_opaque="true" name="WLGamma" show_text="true" value="2.0" width="207" />
368 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 368 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
369 bottom="-102" drop_shadow_visible="true" follows="left|top|right" 369 bottom="-102" drop_shadow_visible="true" follows="left|top|right"
370 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 370 font="SansSerif" h_pad="0" halign="left" height="16"
371 left="480" mouse_opaque="true" name="WLStarText" v_pad="0" width="355"> 371 left="480" mouse_opaque="true" name="WLStarText" v_pad="0" width="355">
372 Star Brightness 372 Star Brightness
373 </text> 373 </text>
@@ -380,11 +380,11 @@
380 width="200" /> 380 width="200" />
381 </panel> 381 </panel>
382 <panel border="true" bottom="-180" follows="left|top|right|bottom" height="160" 382 <panel border="true" bottom="-180" follows="left|top|right|bottom" height="160"
383 hidden="false" label="Clouds" left="1" mouse_opaque="false" name="Clouds" 383 label="Clouds" left="1" mouse_opaque="false" name="Clouds"
384 width="698"> 384 width="698">
385 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 385 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
386 bottom="-20" drop_shadow_visible="true" follows="left|top|right" 386 bottom="-20" drop_shadow_visible="true" follows="left|top|right"
387 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 387 font="SansSerif" h_pad="0" halign="left" height="16"
388 left="10" mouse_opaque="true" name="WLCloudColorText" v_pad="0" width="355"> 388 left="10" mouse_opaque="true" name="WLCloudColorText" v_pad="0" width="355">
389 Cloud Color 389 Cloud Color
390 </text> 390 </text>
@@ -392,25 +392,25 @@
392 left="160" name="WLCloudColorHelp" width="18" /> 392 left="160" name="WLCloudColorHelp" width="18" />
393 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 393 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
394 bottom="-37" drop_shadow_visible="true" follows="left|top|right" 394 bottom="-37" drop_shadow_visible="true" follows="left|top|right"
395 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 395 font="SansSerifSmall" h_pad="0" halign="center" height="16"
396 left="10" mouse_opaque="true" name="BHText" v_pad="0" width="10"> 396 left="10" mouse_opaque="true" name="BHText" v_pad="0" width="10">
397 R 397 R
398 </text> 398 </text>
399 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 399 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
400 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right" 400 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right"
401 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 401 font="SansSerifSmall" h_pad="0" halign="center" height="16"
402 left_delta="0" mouse_opaque="true" name="BHText2" v_pad="0" width="10"> 402 left_delta="0" mouse_opaque="true" name="BHText2" v_pad="0" width="10">
403 G 403 G
404 </text> 404 </text>
405 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 405 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
406 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right" 406 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right"
407 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 407 font="SansSerifSmall" h_pad="0" halign="center" height="16"
408 left_delta="0" mouse_opaque="true" name="BHText3" v_pad="0" width="10"> 408 left_delta="0" mouse_opaque="true" name="BHText3" v_pad="0" width="10">
409 B 409 B
410 </text> 410 </text>
411 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 411 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
412 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right" 412 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right"
413 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 413 font="SansSerifSmall" h_pad="0" halign="center" height="16"
414 left_delta="0" mouse_opaque="true" name="BHText4" v_pad="0" width="10"> 414 left_delta="0" mouse_opaque="true" name="BHText4" v_pad="0" width="10">
415 I 415 I
416 </text> 416 </text>
@@ -436,7 +436,7 @@
436 width="200" /> 436 width="200" />
437 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 437 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
438 bottom="-87" drop_shadow_visible="true" follows="left|top|right" 438 bottom="-87" drop_shadow_visible="true" follows="left|top|right"
439 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 439 font="SansSerif" h_pad="0" halign="left" height="16"
440 left="10" mouse_opaque="true" name="WLCloudColorText2" v_pad="0" 440 left="10" mouse_opaque="true" name="WLCloudColorText2" v_pad="0"
441 width="355"> 441 width="355">
442 Cloud XY/Density 442 Cloud XY/Density
@@ -445,19 +445,19 @@
445 left="160" name="WLCloudDensityHelp" width="18" /> 445 left="160" name="WLCloudDensityHelp" width="18" />
446 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 446 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
447 bottom="-103" drop_shadow_visible="true" follows="left|top|right" 447 bottom="-103" drop_shadow_visible="true" follows="left|top|right"
448 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 448 font="SansSerifSmall" h_pad="0" halign="center" height="16"
449 left="10" mouse_opaque="true" name="BHText5" v_pad="0" width="10"> 449 left="10" mouse_opaque="true" name="BHText5" v_pad="0" width="10">
450 X 450 X
451 </text> 451 </text>
452 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 452 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
453 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right" 453 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right"
454 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 454 font="SansSerifSmall" h_pad="0" halign="center" height="16"
455 left_delta="0" mouse_opaque="true" name="BHText6" v_pad="0" width="10"> 455 left_delta="0" mouse_opaque="true" name="BHText6" v_pad="0" width="10">
456 Y 456 Y
457 </text> 457 </text>
458 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 458 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
459 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right" 459 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right"
460 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 460 font="SansSerifSmall" h_pad="0" halign="center" height="16"
461 left_delta="0" mouse_opaque="true" name="BHText7" v_pad="0" width="10"> 461 left_delta="0" mouse_opaque="true" name="BHText7" v_pad="0" width="10">
462 D 462 D
463 </text> 463 </text>
@@ -477,7 +477,7 @@
477 width="200" /> 477 width="200" />
478 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 478 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
479 bottom="-20" drop_shadow_visible="true" follows="left|top|right" 479 bottom="-20" drop_shadow_visible="true" follows="left|top|right"
480 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 480 font="SansSerif" h_pad="0" halign="left" height="16"
481 left="245" mouse_opaque="true" name="WLCloudCoverageText" v_pad="0" 481 left="245" mouse_opaque="true" name="WLCloudCoverageText" v_pad="0"
482 width="355"> 482 width="355">
483 Cloud Coverage 483 Cloud Coverage
@@ -491,7 +491,7 @@
491 width="200" /> 491 width="200" />
492 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 492 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
493 bottom="-55" drop_shadow_visible="true" follows="left|top|right" 493 bottom="-55" drop_shadow_visible="true" follows="left|top|right"
494 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 494 font="SansSerif" h_pad="0" halign="left" height="16"
495 left="245" mouse_opaque="true" name="WLCloudScaleText" v_pad="0" 495 left="245" mouse_opaque="true" name="WLCloudScaleText" v_pad="0"
496 width="355"> 496 width="355">
497 Cloud Scale 497 Cloud Scale
@@ -505,7 +505,7 @@
505 width="200" /> 505 width="200" />
506 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 506 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
507 bottom="-87" drop_shadow_visible="true" follows="left|top|right" 507 bottom="-87" drop_shadow_visible="true" follows="left|top|right"
508 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 508 font="SansSerif" h_pad="0" halign="left" height="16"
509 left="245" mouse_opaque="true" name="WLCloudDetailText" v_pad="0" 509 left="245" mouse_opaque="true" name="WLCloudDetailText" v_pad="0"
510 width="355"> 510 width="355">
511 Cloud Detail (XY/Density) 511 Cloud Detail (XY/Density)
@@ -514,19 +514,19 @@
514 left="395" name="WLCloudDetailHelp" width="18" /> 514 left="395" name="WLCloudDetailHelp" width="18" />
515 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 515 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
516 bottom="-103" drop_shadow_visible="true" follows="left|top|right" 516 bottom="-103" drop_shadow_visible="true" follows="left|top|right"
517 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 517 font="SansSerifSmall" h_pad="0" halign="center" height="16"
518 left="245" mouse_opaque="true" name="BHText8" v_pad="0" width="10"> 518 left="245" mouse_opaque="true" name="BHText8" v_pad="0" width="10">
519 X 519 X
520 </text> 520 </text>
521 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 521 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
522 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right" 522 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right"
523 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 523 font="SansSerifSmall" h_pad="0" halign="center" height="16"
524 left_delta="0" mouse_opaque="true" name="BHText9" v_pad="0" width="10"> 524 left_delta="0" mouse_opaque="true" name="BHText9" v_pad="0" width="10">
525 Y 525 Y
526 </text> 526 </text>
527 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 527 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
528 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right" 528 bottom_delta="-11" drop_shadow_visible="true" follows="left|top|right"
529 font="SansSerifSmall" h_pad="0" halign="center" height="16" hidden="false" 529 font="SansSerifSmall" h_pad="0" halign="center" height="16"
530 left_delta="0" mouse_opaque="true" name="BHText10" v_pad="0" width="10"> 530 left_delta="0" mouse_opaque="true" name="BHText10" v_pad="0" width="10">
531 D 531 D
532 </text> 532 </text>
@@ -547,7 +547,7 @@
547 value="1.0" width="200" /> 547 value="1.0" width="200" />
548 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 548 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
549 bottom="-20" drop_shadow_visible="true" follows="left|top|right" 549 bottom="-20" drop_shadow_visible="true" follows="left|top|right"
550 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 550 font="SansSerif" h_pad="0" halign="left" height="16"
551 left="480" mouse_opaque="true" name="WLCloudScrollXText" v_pad="0" 551 left="480" mouse_opaque="true" name="WLCloudScrollXText" v_pad="0"
552 width="355"> 552 width="355">
553 Cloud Scroll X 553 Cloud Scroll X
@@ -564,7 +564,7 @@
564 width="200" /> 564 width="200" />
565 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 565 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
566 bottom="-60" drop_shadow_visible="true" follows="left|top|right" 566 bottom="-60" drop_shadow_visible="true" follows="left|top|right"
567 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 567 font="SansSerif" h_pad="0" halign="left" height="16"
568 left="480" mouse_opaque="true" name="WLCloudScrollYText" v_pad="0" 568 left="480" mouse_opaque="true" name="WLCloudScrollYText" v_pad="0"
569 width="355"> 569 width="355">
570 Cloud Scroll Y 570 Cloud Scroll Y
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 bd74b05..b8341f2 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
@@ -180,9 +180,8 @@
180 mouse_opaque="true" name="search_label" v_pad="0" width="222"> 180 mouse_opaque="true" name="search_label" v_pad="0" width="222">
181 Search Results: 181 Search Results:
182 </text> 182 </text>
183 <scroll_list background_visible="false" bottom_delta="-306" draw_border="true" 183 <scroll_list background_visible="true" bottom_delta="-306" draw_border="true"
184 draw_stripes="false" fg_disable_color="1, 1, 1, 1" 184 draw_stripes="false"
185 fg_selected_color="1, 1, 1, 1" fg_unselected_color="1, 1, 1, 1"
186 follows="top|right|bottom" height="300" left="1013" multi_select="false" 185 follows="top|right|bottom" height="300" left="1013" multi_select="false"
187 name="search_results" width="222"> 186 name="search_results" width="222">
188 <column label="" name="icon" width="16" /> 187 <column label="" name="icon" width="16" />
@@ -203,7 +202,7 @@
203 mouse_opaque="true" name="spin y" 202 mouse_opaque="true" name="spin y"
204 tool_tip="Y coordinate of location to show on map" width="66" /> 203 tool_tip="Y coordinate of location to show on map" width="66" />
205 <spinner bottom_delta="0" decimal_digits="0" follows="bottom|right" height="16" 204 <spinner bottom_delta="0" decimal_digits="0" follows="bottom|right" height="16"
206 increment="1" initial_val="0" left_delta="68" max_val="768" min_val="0" 205 increment="1" initial_val="0" left_delta="68" max_val="4096" min_val="0"
207 mouse_opaque="true" name="spin z" 206 mouse_opaque="true" name="spin z"
208 tool_tip="Z coordinate of location to show on map" width="66" /> 207 tool_tip="Z coordinate of location to show on map" width="66" />
209 <button bottom="-625" follows="right|bottom" font="SansSerif" halign="center" 208 <button bottom="-625" follows="right|bottom" font="SansSerif" halign="center"
diff --git a/linden/indra/newview/skins/xui/en-us/menu_inventory.xml b/linden/indra/newview/skins/xui/en-us/menu_inventory.xml
index 925c2a4..31288ac 100644
--- a/linden/indra/newview/skins/xui/en-us/menu_inventory.xml
+++ b/linden/indra/newview/skins/xui/en-us/menu_inventory.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<menu bottom="100" color="0, 0, 0, 1" drop_shadow="true" height="101" left="100" 2<menu bottom="100" color="MenuDefaultBgColor" drop_shadow="true" height="101" left="100"
3 mouse_opaque="false" name="Popup" opaque="true" width="128"> 3 mouse_opaque="false" name="Popup" opaque="true" width="128">
4 <menu_item_call bottom_delta="-18" height="18" label="Buy" left="0" mouse_opaque="true" 4 <menu_item_call bottom_delta="-18" height="18" label="Buy" left="0" mouse_opaque="true"
5 name="Task Buy" width="128"> 5 name="Task Buy" width="128">
@@ -49,7 +49,7 @@
49 name="New Gesture" width="128"> 49 name="New Gesture" width="128">
50 <on_click filter="" function="Inventory.DoCreate" userdata="gesture" /> 50 <on_click filter="" function="Inventory.DoCreate" userdata="gesture" />
51 </menu_item_call> 51 </menu_item_call>
52 <menu bottom_delta="0" color="0, 0, 0, 1" drop_shadow="true" height="175" left="0" 52 <menu bottom_delta="0" color="MenuDefaultBgColor" drop_shadow="true" height="175" left="0"
53 mouse_opaque="false" name="New Clothes" opaque="true" tear_off="false" 53 mouse_opaque="false" name="New Clothes" opaque="true" tear_off="false"
54 width="125"> 54 width="125">
55 <menu_item_call bottom_delta="-18" height="18" label="New Shirt" left="0" mouse_opaque="true" 55 <menu_item_call bottom_delta="-18" height="18" label="New Shirt" left="0" mouse_opaque="true"
@@ -89,7 +89,7 @@
89 <on_click filter="" function="Inventory.DoCreate" userdata="underpants" /> 89 <on_click filter="" function="Inventory.DoCreate" userdata="underpants" />
90 </menu_item_call> 90 </menu_item_call>
91 </menu> 91 </menu>
92 <menu bottom_delta="0" color="0, 0, 0, 1" drop_shadow="true" height="175" left="0" 92 <menu bottom_delta="0" color="MenuDefaultBgColor" drop_shadow="true" height="175" left="0"
93 mouse_opaque="false" name="New Body Parts" opaque="true" tear_off="false" 93 mouse_opaque="false" name="New Body Parts" opaque="true" tear_off="false"
94 width="125"> 94 width="125">
95 <menu_item_call bottom_delta="-18" height="18" label="New Shape" left="0" mouse_opaque="true" 95 <menu_item_call bottom_delta="-18" height="18" label="New Shape" left="0" mouse_opaque="true"
diff --git a/linden/indra/newview/skins/xui/en-us/menu_login.xml b/linden/indra/newview/skins/xui/en-us/menu_login.xml
index 92170ae..d7ff80b 100644
--- a/linden/indra/newview/skins/xui/en-us/menu_login.xml
+++ b/linden/indra/newview/skins/xui/en-us/menu_login.xml
@@ -20,7 +20,7 @@
20 </menu> 20 </menu>
21 <menu bottom="219" create_jump_keys="true" drop_shadow="true" enabled="true" 21 <menu bottom="219" create_jump_keys="true" drop_shadow="true" enabled="true"
22 height="317" label="Help" left="80" mouse_opaque="false" name="Help" 22 height="317" label="Help" left="80" mouse_opaque="false" name="Help"
23 opaque="true" tear_off="falsoe" width="166"> 23 opaque="true" tear_off="false" width="166">
24 <menu_item_call bottom="-29" enabled="true" height="19" label="Second Life Help" left="0" 24 <menu_item_call bottom="-29" enabled="true" height="19" label="Second Life Help" left="0"
25 mouse_opaque="true" name="Second Life Help" shortcut="F1" width="166"> 25 mouse_opaque="true" name="Second Life Help" shortcut="F1" width="166">
26 <on_click function="ShowFloater" userdata="help f1" /> 26 <on_click function="ShowFloater" userdata="help f1" />
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 2d07c98..cdba314 100644
--- a/linden/indra/newview/skins/xui/en-us/menu_viewer.xml
+++ b/linden/indra/newview/skins/xui/en-us/menu_viewer.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<menu_bar bottom="-18" drop_shadow="false" enabled="true" follows="left|top|right" 2<menu_bar bottom="-18" drop_shadow="false" enabled="true" follows="left|top|right"
3 height="18" left="0" mouse_opaque="true" name="Main Menu" opaque="true" 3 height="18" left="0" mouse_opaque="true" name="Main Menu" opaque="false"
4 tear_off="false" width="802"> 4 tear_off="false" width="802">
5 <menu bottom="273" create_jump_keys="true" drop_shadow="true" enabled="true" 5 <menu bottom="273" create_jump_keys="true" drop_shadow="true" enabled="true"
6 height="263" label="File" left="0" mouse_opaque="false" name="File" 6 height="263" label="File" left="0" mouse_opaque="false" name="File"
@@ -62,11 +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_item_call bottom="-213" enabled="true" height="19" label="Start/Stop Movie to Disk"
66 left="0" mouse_opaque="true" name="Start/Stop Movie to Disk"
67 shortcut="control|shift|A" width="243">
68 <on_click function="File.SaveMovie" userdata="" />
69 </menu_item_call>
70 <menu bottom="-554" create_jump_keys="true" drop_shadow="true" enabled="true" 65 <menu bottom="-554" create_jump_keys="true" drop_shadow="true" enabled="true"
71 height="117" label="Set Window Size" left="0" mouse_opaque="false" 66 height="117" label="Set Window Size" left="0" mouse_opaque="false"
72 name="Set Window Size" opaque="true" tear_off="true" width="125"> 67 name="Set Window Size" opaque="true" tear_off="true" width="125">
@@ -270,6 +265,12 @@
270 <on_click function="View.BuildMode" userdata="" /> 265 <on_click function="View.BuildMode" userdata="" />
271 <on_check function="View.CheckBuildMode" /> 266 <on_check function="View.CheckBuildMode" />
272 </menu_item_check> 267 </menu_item_check>
268 <menu_item_check bottom="-48" enabled="true" height="19" label="Joystick Flycam" left="0"
269 mouse_opaque="true" name="Joystick Flycam" shortcut="alt|shift|F"
270 width="211">
271 <on_click function="View.JoystickFlycam" userdata="" />
272 <on_check function="View.CheckJoystickFlycam" />
273 </menu_item_check>
273 <menu_item_call bottom="-67" enabled="true" height="19" label="Reset View" left="0" 274 <menu_item_call bottom="-67" enabled="true" height="19" label="Reset View" left="0"
274 mouse_opaque="true" name="Reset View" shortcut="Esc" width="211"> 275 mouse_opaque="true" name="Reset View" shortcut="Esc" width="211">
275 <on_click function="View.ResetView" userdata="" /> 276 <on_click function="View.ResetView" userdata="" />
@@ -437,26 +438,26 @@
437 <on_click function="View.ToggleRenderType" userdata="hideparticles" /> 438 <on_click function="View.ToggleRenderType" userdata="hideparticles" />
438 <on_check function="View.CheckRenderType" userdata="hideparticles" /> 439 <on_check function="View.CheckRenderType" userdata="hideparticles" />
439 </menu_item_check> 440 </menu_item_check>
440 <menu_item_separator bottom="-186" enabled="true" height="8" hidden="false" label="-----------" 441 <menu_item_separator bottom="-186" enabled="true" height="8" label="-----------" left="0"
441 left="0" mouse_opaque="true" name="separator3" width="129" /> 442 mouse_opaque="true" name="separator3" width="129" />
442 <menu bottom="-205" color="0 0 0 1" create_jump_keys="true" drop_shadow="true" 443 <menu bottom="-205" color="0 0 0 1" create_jump_keys="true" drop_shadow="true"
443 enabled="true" height="117" hidden="false" label="Beacon Width" left="0" 444 enabled="true" height="117" label="Beacon Width" left="0"
444 mouse_opaque="false" name="Beacon Width" opaque="true" tear_off="true" 445 mouse_opaque="false" name="Beacon Width" opaque="true" tear_off="true"
445 width="129"> 446 width="129">
446 <menu_item_call bottom="-19" enabled="true" height="19" hidden="false" label="1" left="0" 447 <menu_item_call bottom="-19" enabled="true" height="19" label="1" left="0" mouse_opaque="true"
447 mouse_opaque="true" name="Beacon Width 1" width="188"> 448 name="Beacon Width 1" width="188">
448 <on_click function="View.BeaconWidth" userdata="1" /> 449 <on_click function="View.BeaconWidth" userdata="1" />
449 </menu_item_call> 450 </menu_item_call>
450 <menu_item_call bottom="-19" enabled="true" height="19" hidden="false" label="4" left="0" 451 <menu_item_call bottom="-19" enabled="true" height="19" label="4" left="0" mouse_opaque="true"
451 mouse_opaque="true" name="Beacon Width 4" width="188"> 452 name="Beacon Width 4" width="188">
452 <on_click function="View.BeaconWidth" userdata="4" /> 453 <on_click function="View.BeaconWidth" userdata="4" />
453 </menu_item_call> 454 </menu_item_call>
454 <menu_item_call bottom="-19" enabled="true" height="19" hidden="false" label="16" left="0" 455 <menu_item_call bottom="-19" enabled="true" height="19" label="16" left="0" mouse_opaque="true"
455 mouse_opaque="true" name="Beacon Width 16" width="188"> 456 name="Beacon Width 16" width="188">
456 <on_click function="View.BeaconWidth" userdata="16" /> 457 <on_click function="View.BeaconWidth" userdata="16" />
457 </menu_item_call> 458 </menu_item_call>
458 <menu_item_call bottom="-19" enabled="true" height="19" hidden="false" label="32" left="0" 459 <menu_item_call bottom="-19" enabled="true" height="19" label="32" left="0" mouse_opaque="true"
459 mouse_opaque="true" name="Beacon Width 32" width="188"> 460 name="Beacon Width 32" width="188">
460 <on_click function="View.BeaconWidth" userdata="32" /> 461 <on_click function="View.BeaconWidth" userdata="32" />
461 </menu_item_call> 462 </menu_item_call>
462 </menu> 463 </menu>
@@ -500,10 +501,6 @@
500 mouse_opaque="true" name="Chat" shortcut="" width="185"> 501 mouse_opaque="true" name="Chat" shortcut="" width="185">
501 <on_click function="World.Chat" userdata="" /> 502 <on_click function="World.Chat" userdata="" />
502 </menu_item_call> 503 </menu_item_call>
503 <menu_item_call bottom="-48" enabled="true" height="19" label="Start Gesture" left="0"
504 mouse_opaque="true" name="Start Gesture" shortcut="/" width="185">
505 <on_click function="World.StartGesture" userdata="" />
506 </menu_item_call>
507 <menu_item_check bottom="-67" enabled="true" height="19" label="Always Run" left="0" 504 <menu_item_check bottom="-67" enabled="true" height="19" label="Always Run" left="0"
508 mouse_opaque="true" name="Always Run" shortcut="control|R" width="185"> 505 mouse_opaque="true" name="Always Run" shortcut="control|R" width="185">
509 <on_click function="World.AlwaysRun" userdata="" /> 506 <on_click function="World.AlwaysRun" userdata="" />
@@ -544,6 +541,10 @@
544 mouse_opaque="true" name="Set Busy" width="185"> 541 mouse_opaque="true" name="Set Busy" width="185">
545 <on_click function="World.SetBusy" userdata="" /> 542 <on_click function="World.SetBusy" userdata="" />
546 </menu_item_call> 543 </menu_item_call>
544 <menu_item_call bottom="-281" enabled="false" height="19" label="Stop All Animations" left="0"
545 mouse_opaque="true" name="Stop All Animations" width="250">
546 <on_click function="Tools.StopAllAnimations" userdata="" />
547 </menu_item_call>
547 <menu_item_separator bottom="-213" enabled="true" height="8" label="-----------" left="0" 548 <menu_item_separator bottom="-213" enabled="true" height="8" label="-----------" left="0"
548 mouse_opaque="true" name="separator4" width="185" /> 549 mouse_opaque="true" name="separator4" width="185" />
549 <menu_item_call bottom="-232" enabled="true" height="19" label="Account History..." left="0" 550 <menu_item_call bottom="-232" enabled="true" height="19" label="Account History..." left="0"
@@ -604,18 +605,17 @@
604 left="0" mouse_opaque="true" name="Revert to Region Default" width="169"> 605 left="0" mouse_opaque="true" name="Revert to Region Default" width="169">
605 <on_click function="World.EnvSettings" userdata="default" /> 606 <on_click function="World.EnvSettings" userdata="default" />
606 </menu_item_call> 607 </menu_item_call>
607 <menu_item_separator bottom="-113" enabled="true" height="8" hidden="false" label="-----------" 608 <menu_item_separator bottom="-113" enabled="true" height="8" label="-----------" left="0"
608 left="0" mouse_opaque="true" name="separator" width="169" /> 609 mouse_opaque="true" name="separator" width="169" />
609 <menu_item_call bottom="-132" enabled="false" height="19" hidden="false" 610 <menu_item_call bottom="-132" enabled="false" height="19" label="Environment Editor" left="0"
610 label="Environment Editor" left="0" mouse_opaque="true" 611 mouse_opaque="true" name="Environment Editor" width="169">
611 name="Environment Editor" width="169">
612 <on_click function="World.EnvSettings" userdata="editor" /> 612 <on_click function="World.EnvSettings" userdata="editor" />
613 </menu_item_call> 613 </menu_item_call>
614 </menu> 614 </menu>
615 </menu> 615 </menu>
616 <menu bottom="-18" create_jump_keys="true" drop_shadow="true" enabled="true" 616 <menu bottom="-18" create_jump_keys="true" drop_shadow="true" enabled="true"
617 height="510" label="Tools" left="0" mouse_opaque="false" name="Tools" 617 height="510" label="Tools" left="0" mouse_opaque="false" name="Tools"
618 opaque="true" tear_off="true" width="250"> 618 opaque="true" tear_off="true" visible="false" width="250">
619 <menu bottom="-554" create_jump_keys="true" drop_shadow="true" enabled="true" 619 <menu bottom="-554" create_jump_keys="true" drop_shadow="true" enabled="true"
620 height="109" label="Select Tool" left="0" mouse_opaque="false" 620 height="109" label="Select Tool" left="0" mouse_opaque="false"
621 name="Select Tool" opaque="true" tear_off="true" width="118"> 621 name="Select Tool" opaque="true" tear_off="true" width="118">
@@ -720,12 +720,6 @@
720 </menu_item_call> 720 </menu_item_call>
721 <menu_item_separator bottom="-289" enabled="true" height="8" label="-----------" left="0" 721 <menu_item_separator bottom="-289" enabled="true" height="8" label="-----------" left="0"
722 mouse_opaque="true" name="separator4" width="250" /> 722 mouse_opaque="true" name="separator4" width="250" />
723 <menu_item_call bottom="-281" enabled="false" height="19" label="Stop All Animations" left="0"
724 mouse_opaque="true" name="Stop All Animations" width="250">
725 <on_click function="Tools.StopAllAnimations" userdata="" />
726 </menu_item_call>
727 <menu_item_separator bottom="-289" enabled="true" height="8" label="-----------" left="0"
728 mouse_opaque="true" name="separator5" width="250" />
729 <menu_item_call bottom="-308" enabled="false" height="19" label="Focus on Selection" left="0" 723 <menu_item_call bottom="-308" enabled="false" height="19" label="Focus on Selection" left="0"
730 mouse_opaque="true" name="Focus on Selection" shortcut="H" width="250"> 724 mouse_opaque="true" name="Focus on Selection" shortcut="H" width="250">
731 <on_click function="Tools.LookAtSelection" userdata="focus" /> 725 <on_click function="Tools.LookAtSelection" userdata="focus" />
@@ -789,46 +783,6 @@
789 <on_click function="Tools.SelectedScriptAction" userdata="stop" /> 783 <on_click function="Tools.SelectedScriptAction" userdata="stop" />
790 <on_enable function="EditableSelected" /> 784 <on_enable function="EditableSelected" />
791 </menu_item_call> 785 </menu_item_call>
792 <menu_item_separator bottom="-411" enabled="true" height="8" label="-----------" left="0"
793 mouse_opaque="true" name="separator7" width="250" />
794 <menu bottom="-554" create_jump_keys="true" drop_shadow="true" enabled="true"
795 height="109" label="Bug Reporting" left="0" mouse_opaque="false"
796 name="Bug Reporting" opaque="true" tear_off="true" width="118">
797 <menu_item_call bottom="-94" enabled="true" height="19" label="Public Issue Tracker..."
798 left="0" mouse_opaque="true" name="Public Issue Tracker..." width="166">
799 <on_click function="PromptShowURL"
800 userdata="WebLaunchPublicIssue,http://jira.secondlife.com" />
801 </menu_item_call>
802 <menu_item_call bottom="-94" enabled="true" height="19" label="Public Issue Tracker Help..."
803 left="0" mouse_opaque="true" name="Publc Issue Tracker Help..." width="166">
804 <on_click function="PromptShowURL"
805 userdata="WebLaunchPublicIssueHelp,http://wiki.secondlife.com/wiki/Issue_tracker" />
806 </menu_item_call>
807 <menu_item_separator bottom="-411" enabled="true" height="8" label="-----------" left="0"
808 mouse_opaque="true" name="separator7" width="250" />
809 <menu_item_call bottom="-94" enabled="true" height="19" label="Bug Reporting 101..." left="0"
810 mouse_opaque="true" name="Bug Reporing 101..." width="166">
811 <on_click function="PromptShowURL"
812 userdata="WebLaunchBugReport101,http://wiki.secondlife.com/wiki/Bug_Reporting_101" />
813 </menu_item_call>
814 <menu_item_call bottom="-94" enabled="true" height="19" label="Security Issues..." left="0"
815 mouse_opaque="true" name="Security Issues..." width="166">
816 <on_click function="PromptShowURL"
817 userdata="WebLaunchSecurityIssues,http://wiki.secondlife.com/wiki/Security_issues" />
818 </menu_item_call>
819 <menu_item_call bottom="-94" enabled="true" height="19" label="QA Wiki..." left="0"
820 mouse_opaque="true" name="QA Wiki..." width="166">
821 <on_click function="PromptShowURL"
822 userdata="WebLaunchQAWiki,http://wiki.secondlife.com/wiki/QA_Portal" />
823 </menu_item_call>
824 <menu_item_separator bottom="-411" enabled="true" height="8" label="-----------" left="0"
825 mouse_opaque="true" name="separator72" width="250" />
826 <menu_item_call bottom="-240" enabled="true" height="19" label="Report Bug..." left="0"
827 mouse_opaque="true" name="Report Bug..." width="166">
828 <on_click function="PromptShowURL"
829 userdata="WebLaunchPublicIssue,http://jira.secondlife.com" />
830 </menu_item_call>
831 </menu>
832 </menu> 786 </menu>
833 <menu bottom="219" create_jump_keys="true" drop_shadow="true" enabled="true" 787 <menu bottom="219" create_jump_keys="true" drop_shadow="true" enabled="true"
834 height="317" label="Help" left="227" mouse_opaque="false" name="Help" 788 height="317" label="Help" left="227" mouse_opaque="false" name="Help"
@@ -837,6 +791,10 @@
837 mouse_opaque="true" name="Second Life Help" shortcut="F1" width="166"> 791 mouse_opaque="true" name="Second Life Help" shortcut="F1" width="166">
838 <on_click function="ShowFloater" userdata="help f1" /> 792 <on_click function="ShowFloater" userdata="help f1" />
839 </menu_item_call> 793 </menu_item_call>
794 <menu_item_call bottom="-48" enabled="true" height="19" label="Tutorial" left="0"
795 mouse_opaque="true" name="Tutorial" width="166">
796 <on_click function="ShowFloater" userdata="help tutorial" />
797 </menu_item_call>
840 <menu_item_separator bottom="-75" enabled="true" height="8" label="-----------" left="0" 798 <menu_item_separator bottom="-75" enabled="true" height="8" label="-----------" left="0"
841 mouse_opaque="true" name="separator" width="166" /> 799 mouse_opaque="true" name="separator" width="166" />
842 <menu_item_call bottom="-94" enabled="true" height="19" label="Official Linden Blog..." 800 <menu_item_call bottom="-94" enabled="true" height="19" label="Official Linden Blog..."
@@ -857,12 +815,6 @@
857 </menu_item_call> 815 </menu_item_call>
858 <menu_item_separator bottom="-148" enabled="true" height="8" label="-----------" left="0" 816 <menu_item_separator bottom="-148" enabled="true" height="8" label="-----------" left="0"
859 mouse_opaque="true" name="separator3" width="166" /> 817 mouse_opaque="true" name="separator3" width="166" />
860 <menu_item_call bottom="-167" enabled="true" height="19" label="Message of the Day..." left="0"
861 mouse_opaque="true" name="Message of the Day..." width="166">
862 <on_click function="Help.MOTD" userdata="" />
863 </menu_item_call>
864 <menu_item_separator bottom="-175" enabled="true" height="8" label="-----------" left="0"
865 mouse_opaque="true" name="separator4" width="166" />
866 <menu_item_call bottom="-194" enabled="true" height="19" label="Report Abuse..." left="0" 818 <menu_item_call bottom="-194" enabled="true" height="19" label="Report Abuse..." left="0"
867 mouse_opaque="true" name="Report Abuse..." width="166"> 819 mouse_opaque="true" name="Report Abuse..." width="166">
868 <on_click function="ShowFloater" userdata="complaint reporter" /> 820 <on_click function="ShowFloater" userdata="complaint reporter" />
@@ -875,6 +827,46 @@
875 <menu_item_call label="Lag Meter" name="Lag Meter"> 827 <menu_item_call label="Lag Meter" name="Lag Meter">
876 <on_click function="ShowFloater" userdata="lag meter" /> 828 <on_click function="ShowFloater" userdata="lag meter" />
877 </menu_item_call> 829 </menu_item_call>
830 <menu_item_separator bottom="-411" enabled="true" height="8" label="-----------" left="0"
831 mouse_opaque="true" name="separator7" width="250" />
832 <menu bottom="-554" create_jump_keys="true" drop_shadow="true" enabled="true"
833 height="109" label="Bug Reporting" left="0" mouse_opaque="false"
834 name="Bug Reporting" opaque="true" tear_off="true" width="118">
835 <menu_item_call bottom="-94" enabled="true" height="19" label="Public Issue Tracker..."
836 left="0" mouse_opaque="true" name="Public Issue Tracker..." width="166">
837 <on_click function="PromptShowURL"
838 userdata="WebLaunchPublicIssue,http://jira.secondlife.com" />
839 </menu_item_call>
840 <menu_item_call bottom="-94" enabled="true" height="19" label="Public Issue Tracker Help..."
841 left="0" mouse_opaque="true" name="Publc Issue Tracker Help..." width="166">
842 <on_click function="PromptShowURL"
843 userdata="WebLaunchPublicIssueHelp,http://wiki.secondlife.com/wiki/Issue_tracker" />
844 </menu_item_call>
845 <menu_item_separator bottom="-411" enabled="true" height="8" label="-----------" left="0"
846 mouse_opaque="true" name="separator7" width="250" />
847 <menu_item_call bottom="-94" enabled="true" height="19" label="Bug Reporting 101..." left="0"
848 mouse_opaque="true" name="Bug Reporing 101..." width="166">
849 <on_click function="PromptShowURL"
850 userdata="WebLaunchBugReport101,http://wiki.secondlife.com/wiki/Bug_Reporting_101" />
851 </menu_item_call>
852 <menu_item_call bottom="-94" enabled="true" height="19" label="Security Issues..." left="0"
853 mouse_opaque="true" name="Security Issues..." width="166">
854 <on_click function="PromptShowURL"
855 userdata="WebLaunchSecurityIssues,http://wiki.secondlife.com/wiki/Security_issues" />
856 </menu_item_call>
857 <menu_item_call bottom="-94" enabled="true" height="19" label="QA Wiki..." left="0"
858 mouse_opaque="true" name="QA Wiki..." width="166">
859 <on_click function="PromptShowURL"
860 userdata="WebLaunchQAWiki,http://wiki.secondlife.com/wiki/QA_Portal" />
861 </menu_item_call>
862 <menu_item_separator bottom="-411" enabled="true" height="8" label="-----------" left="0"
863 mouse_opaque="true" name="separator9" width="250" />
864 <menu_item_call bottom="-240" enabled="true" height="19" label="Report Bug..." left="0"
865 mouse_opaque="true" name="Report Bug..." width="166">
866 <on_click function="PromptShowURL"
867 userdata="WebLaunchPublicIssue,http://jira.secondlife.com" />
868 </menu_item_call>
869 </menu>
878 <menu_item_separator bottom="-221" enabled="true" height="8" label="-----------" left="0" 870 <menu_item_separator bottom="-221" enabled="true" height="8" label="-----------" left="0"
879 mouse_opaque="true" name="separator5" width="166" /> 871 mouse_opaque="true" name="separator5" width="166" />
880 <menu_item_call bottom="-121" enabled="true" height="19" label="Release Notes..." left="0" 872 <menu_item_call bottom="-121" enabled="true" height="19" label="Release Notes..." 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 0427727..a0ac9d8 100644
--- a/linden/indra/newview/skins/xui/en-us/mime_types.xml
+++ b/linden/indra/newview/skins/xui/en-us/mime_types.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<mimetypes> 2<mimetypes name="default">
3 <defaultlabel> 3 <defaultlabel>
4 (Unknown) 4 (Unknown)
5 </defaultlabel> 5 </defaultlabel>
@@ -40,7 +40,7 @@
40 video/* 40 video/*
41 </default_type> 41 </default_type>
42 <icon> 42 <icon>
43 icn_media.tga 43 icn_media_movie.tga
44 </icon> 44 </icon>
45 <tooltip> 45 <tooltip>
46 There is a movie to play here 46 There is a movie to play here
@@ -130,7 +130,7 @@
130 movie 130 movie
131 </widgettype> 131 </widgettype>
132 </scheme> 132 </scheme>
133 <mimetype name=""> 133 <mimetype name="blank">
134 <label> 134 <label>
135 - None - 135 - None -
136 </label> 136 </label>
diff --git a/linden/indra/newview/skins/xui/en-us/panel_audio.xml b/linden/indra/newview/skins/xui/en-us/panel_audio.xml
index 13200e8..b9877c8 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_audio.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_audio.xml
@@ -4,7 +4,7 @@
4 <slider bottom_delta="-20" control_name="AudioLevelMaster" follows="left|top|right" 4 <slider bottom_delta="-20" control_name="AudioLevelMaster" follows="left|top|right"
5 height="15" increment="0.05" initial_val="0.5" label="Master" 5 height="15" increment="0.05" initial_val="0.5" label="Master"
6 label_width="55" left="10" max_val="1" min_val="0" mouse_opaque="true" 6 label_width="55" left="10" max_val="1" min_val="0" mouse_opaque="true"
7 name="System Volume" show_text="false" volume="true" width="200" /> 7 name="System Volume" show_text="false" volume="true" width="180" />
8 <button bottom_delta="0" control_name="MuteAudio" follows="top|right" height="16" 8 <button bottom_delta="0" control_name="MuteAudio" follows="top|right" height="16"
9 image_selected="icn_speaker-muted_dark.tga" 9 image_selected="icn_speaker-muted_dark.tga"
10 image_unselected="icn_speaker_dark.tga" label="" label_width="55" 10 image_unselected="icn_speaker_dark.tga" label="" label_width="55"
@@ -12,7 +12,7 @@
12 <slider bottom_delta="-30" control_name="AudioLevelMusic" follows="left|top|right" 12 <slider bottom_delta="-30" control_name="AudioLevelMusic" follows="left|top|right"
13 height="15" increment="0.05" initial_val="0.5" label="Music" 13 height="15" increment="0.05" initial_val="0.5" label="Music"
14 label_width="55" left="10" max_val="1" min_val="0" name="Music Volume" 14 label_width="55" left="10" max_val="1" min_val="0" name="Music Volume"
15 show_text="false" volume="true" width="200" /> 15 show_text="false" volume="true" width="180" />
16 <button bottom_delta="0" control_name="MuteMusic" follows="top|right" height="16" 16 <button bottom_delta="0" control_name="MuteMusic" follows="top|right" height="16"
17 image_selected="icn_speaker-muted_dark.tga" 17 image_selected="icn_speaker-muted_dark.tga"
18 image_unselected="icn_speaker_dark.tga" label="" label_width="55" 18 image_unselected="icn_speaker_dark.tga" label="" label_width="55"
@@ -20,7 +20,7 @@
20 <slider bottom_delta="-20" control_name="AudioLevelMedia" follows="left|top|right" 20 <slider bottom_delta="-20" control_name="AudioLevelMedia" follows="left|top|right"
21 height="15" increment="0.05" initial_val="0.5" label="Media" 21 height="15" increment="0.05" initial_val="0.5" label="Media"
22 label_width="55" left="10" max_val="1" min_val="0" name="Media Volume" 22 label_width="55" left="10" max_val="1" min_val="0" name="Media Volume"
23 show_text="false" volume="true" width="200" /> 23 show_text="false" volume="true" width="180" />
24 <button bottom_delta="0" control_name="MuteMedia" follows="top|right" height="16" 24 <button bottom_delta="0" control_name="MuteMedia" follows="top|right" height="16"
25 image_selected="icn_speaker-muted_dark.tga" 25 image_selected="icn_speaker-muted_dark.tga"
26 image_unselected="icn_speaker_dark.tga" label="" label_width="55" 26 image_unselected="icn_speaker_dark.tga" label="" label_width="55"
@@ -28,7 +28,7 @@
28 <slider bottom_delta="-20" control_name="AudioLevelVoice" follows="left|top|right" 28 <slider bottom_delta="-20" control_name="AudioLevelVoice" follows="left|top|right"
29 height="15" increment="0.05" initial_val="0.5" label="Voice" 29 height="15" increment="0.05" initial_val="0.5" label="Voice"
30 label_width="55" left="10" max_val="1" min_val="0" name="Voice Volume" 30 label_width="55" left="10" max_val="1" min_val="0" name="Voice Volume"
31 show_text="false" volume="true" width="200" /> 31 show_text="false" volume="true" width="180" />
32 <button bottom_delta="0" control_name="MuteVoice" follows="top|right" height="16" 32 <button bottom_delta="0" control_name="MuteVoice" follows="top|right" height="16"
33 image_selected="icn_speaker-muted_dark.tga" 33 image_selected="icn_speaker-muted_dark.tga"
34 image_unselected="icn_speaker_dark.tga" label="" label_width="55" 34 image_unselected="icn_speaker_dark.tga" label="" label_width="55"
@@ -36,7 +36,7 @@
36 <slider bottom_delta="-20" control_name="AudioLevelSFX" follows="left|top|right" 36 <slider bottom_delta="-20" control_name="AudioLevelSFX" follows="left|top|right"
37 height="15" increment="0.05" initial_val="0.5" label="Sounds" 37 height="15" increment="0.05" initial_val="0.5" label="Sounds"
38 label_width="55" left="10" max_val="1" min_val="0" name="SFX Volume" 38 label_width="55" left="10" max_val="1" min_val="0" name="SFX Volume"
39 show_text="false" volume="true" width="200" /> 39 show_text="false" volume="true" width="180" />
40 <button bottom_delta="0" control_name="MuteSounds" follows="top|right" height="16" 40 <button bottom_delta="0" control_name="MuteSounds" follows="top|right" height="16"
41 image_selected="icn_speaker-muted_dark.tga" 41 image_selected="icn_speaker-muted_dark.tga"
42 image_unselected="icn_speaker_dark.tga" label="" label_width="55" 42 image_unselected="icn_speaker_dark.tga" label="" label_width="55"
@@ -44,7 +44,7 @@
44 <slider bottom_delta="-20" control_name="AudioLevelAmbient" follows="left|top|right" 44 <slider bottom_delta="-20" control_name="AudioLevelAmbient" follows="left|top|right"
45 height="15" increment="0.05" initial_val="0.5" label="Ambient" 45 height="15" increment="0.05" initial_val="0.5" label="Ambient"
46 label_width="55" left="10" max_val="1" min_val="0" name="Wind Volume" 46 label_width="55" left="10" max_val="1" min_val="0" name="Wind Volume"
47 show_text="false" volume="true" width="200" /> 47 show_text="false" volume="true" width="180" />
48 <button bottom_delta="0" control_name="MuteAmbient" follows="top|right" height="16" 48 <button bottom_delta="0" control_name="MuteAmbient" follows="top|right" height="16"
49 image_selected="icn_speaker-muted_dark.tga" 49 image_selected="icn_speaker-muted_dark.tga"
50 image_unselected="icn_speaker_dark.tga" label="" label_width="55" 50 image_unselected="icn_speaker_dark.tga" label="" label_width="55"
@@ -52,7 +52,7 @@
52 <slider bottom_delta="-20" control_name="AudioLevelUI" follows="left|top|right" 52 <slider bottom_delta="-20" control_name="AudioLevelUI" follows="left|top|right"
53 height="15" increment="0.05" initial_val="0.5" label="UI" label_width="55" 53 height="15" increment="0.05" initial_val="0.5" label="UI" label_width="55"
54 left="10" max_val="1" min_val="0" name="UI Volume" show_text="false" 54 left="10" max_val="1" min_val="0" name="UI Volume" show_text="false"
55 volume="true" width="200" /> 55 volume="true" width="180" />
56 <button bottom_delta="0" control_name="MuteUI" follows="top|right" height="16" 56 <button bottom_delta="0" control_name="MuteUI" follows="top|right" height="16"
57 image_selected="icn_speaker-muted_dark.tga" 57 image_selected="icn_speaker-muted_dark.tga"
58 image_unselected="icn_speaker_dark.tga" label="" label_width="55" 58 image_unselected="icn_speaker_dark.tga" label="" label_width="55"
diff --git a/linden/indra/newview/skins/xui/en-us/panel_avatar.xml b/linden/indra/newview/skins/xui/en-us/panel_avatar.xml
index 53d25c0..78884cd 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_avatar.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_avatar.xml
@@ -1,7 +1,7 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel bottom="-550" height="486" left="350" name="Panel Avatar" width="430"> 2<panel bottom="-550" height="486" left="350" name="Panel Avatar" width="430">
3 <tab_container bottom="-486" height="486" left="0" mouse_opaque="false" name="tab" 3 <tab_container bottom="-486" height="486" left="0" mouse_opaque="false" name="tab"
4 tab_min_width="50" tab_position="top" width="420"> 4 tab_min_width="50" tab_position="top" width="419">
5 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466" 5 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466"
6 label="2nd Life" left="1" mouse_opaque="true" name="2nd Life" width="418"> 6 label="2nd Life" left="1" mouse_opaque="true" name="2nd Life" width="418">
7 <string name="CaptionTextAcctInfo"> 7 <string name="CaptionTextAcctInfo">
@@ -42,11 +42,11 @@
42 mouse_opaque="true" name="Name:" v_pad="0" width="70"> 42 mouse_opaque="true" name="Name:" v_pad="0" width="70">
43 Name: 43 Name:
44 </text> 44 </text>
45 <name_editor bevel_style="in" bg_readonly_color="0, 0, 0, 0" border_style="line" 45 <name_editor bevel_style="in" border_style="line"
46 border_thickness="1" bottom="-24" enabled="false" follows="left|top" 46 border_thickness="1" bottom="-24" enabled="false" follows="left|top"
47 font="SansSerifSmall" height="16" is_unicode="false" left_delta="75" 47 font="SansSerifSmall" height="16" is_unicode="false" left_delta="75"
48 max_length="254" mouse_opaque="false" name="name" 48 max_length="254" mouse_opaque="false" name="name"
49 text_readonly_color="1, 1, 1, 1" width="180" /> 49 width="180" />
50 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 50 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
51 bottom="-24" drop_shadow_visible="true" follows="left|top" 51 bottom="-24" drop_shadow_visible="true" follows="left|top"
52 font="SansSerifsmall" h_pad="0" halign="left" height="16" left="279" 52 font="SansSerifsmall" h_pad="0" halign="left" height="16" left="279"
@@ -59,11 +59,11 @@
59 mouse_opaque="true" name="label" v_pad="0" width="121"> 59 mouse_opaque="true" name="label" v_pad="0" width="121">
60 Born: 60 Born:
61 </text> 61 </text>
62 <line_editor bevel_style="in" bg_readonly_color="0, 0, 0, 0" border_style="line" 62 <line_editor bevel_style="in" border_style="line"
63 border_thickness="1" bottom_delta="-16" enabled="true" follows="left|top" 63 border_thickness="1" bottom_delta="-16" enabled="true" follows="left|top"
64 font="SansSerifSmall" height="16" is_unicode="false" left="279" 64 font="SansSerifSmall" height="16" is_unicode="false" left="279"
65 max_length="254" mouse_opaque="false" name="born" 65 max_length="254" mouse_opaque="false" name="born"
66 text_readonly_color="1, 1, 1, 1" width="121" /> 66 width="121" />
67 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 67 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
68 bottom_delta="-20" drop_shadow_visible="true" follows="left|top" 68 bottom_delta="-20" drop_shadow_visible="true" follows="left|top"
69 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="279" 69 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="279"
@@ -72,10 +72,10 @@
72 </text> 72 </text>
73 <view_border bevel_style="in" bottom_delta="-48" follows="left|top" height="48" left="279" 73 <view_border bevel_style="in" bottom_delta="-48" follows="left|top" height="48" left="279"
74 mouse_opaque="false" name="acct_border" width="121" /> 74 mouse_opaque="false" name="acct_border" width="121" />
75 <text bg_color="0, 0, 0, 0" bg_visible="false" border_drop_shadow_visible="false" 75 <text bg_visible="false" border_drop_shadow_visible="false"
76 border_visible="true" bottom_delta="0" drop_shadow_visible="true" 76 border_visible="true" bottom_delta="0" drop_shadow_visible="true"
77 follows="left|top" font="SansSerifSmall" height="48" left="279" 77 follows="left|top" font="SansSerifSmall" height="48" left="279"
78 mouse_opaque="false" name="acct" text_color="1, 1, 1, 1" width="121" /> 78 mouse_opaque="false" name="acct" width="121" />
79 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 79 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
80 bottom_delta="-20" drop_shadow_visible="true" follows="left|top" 80 bottom_delta="-20" drop_shadow_visible="true" follows="left|top"
81 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="279" 81 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="279"
@@ -84,18 +84,17 @@
84 v_pad="0" width="130"> 84 v_pad="0" width="130">
85 Partner: 85 Partner:
86 </text> 86 </text>
87 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center" 87 <button bottom_delta="2" follows="left|top" font="SansSerif" halign="center"
88 height="18" label="i" label_selected="i" left_delta="44" 88 height="16" label="i" label_selected="i" left_delta="44"
89 mouse_opaque="true" name="partner_info" 89 mouse_opaque="true" name="partner_info"
90 tool_tip="Click to open partner&apos;s profile" width="18" /> 90 tool_tip="Click to open partner&apos;s profile" width="18" />
91 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center" 91 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center"
92 height="18" label="?" label_selected="?" left_delta="24" 92 height="16" label="?" label_selected="?" left_delta="24"
93 mouse_opaque="true" name="partner_help" width="18" /> 93 mouse_opaque="true" name="partner_help" width="18" />
94 <line_editor bevel_style="in" bg_readonly_color="0, 0, 0, 0" border_style="line" 94 <line_editor bevel_style="in" border_style="line"
95 border_thickness="1" bottom_delta="-16" enabled="true" follows="left|top" 95 border_thickness="1" bottom_delta="-16" enabled="true" follows="left|top"
96 font="SansSerifSmall" height="16" is_unicode="false" left="279" 96 font="SansSerifSmall" height="16" is_unicode="false" left="279"
97 max_length="254" mouse_opaque="false" name="partner_edit" 97 max_length="254" mouse_opaque="false" name="partner_edit"
98 text_readonly_color="1, 1, 1, 1"
99 tool_tip="Second Life partner. For more info on how to set, see www.secondlife.com/partner" 98 tool_tip="Second Life partner. For more info on how to set, see www.secondlife.com/partner"
100 width="121"> 99 width="121">
101 [FIRST] [LAST] 100 [FIRST] [LAST]
@@ -116,8 +115,7 @@
116 mouse_opaque="true" name="Groups:" v_pad="0" width="70"> 115 mouse_opaque="true" name="Groups:" v_pad="0" width="70">
117 Groups: 116 Groups:
118 </text> 117 </text>
119 <scroll_list background_visible="false" bottom="-258" column_padding="5" draw_border="true" 118 <scroll_list background_visible="true" bottom="-258" column_padding="5" draw_border="true"
120 fg_disable_color="1, 1, 1, 1" fg_unselected_color="1, 1, 1, 1"
121 follows="left|top" height="90" left="79" mouse_opaque="false" 119 follows="left|top" height="90" left="79" mouse_opaque="false"
122 multi_select="false" name="groups" width="321" /> 120 multi_select="false" name="groups" width="321" />
123 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 121 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
@@ -132,10 +130,10 @@
132 mouse_opaque="true" name="(500 chars)" v_pad="0" width="70"> 130 mouse_opaque="true" name="(500 chars)" v_pad="0" width="70">
133 (500 chars) 131 (500 chars)
134 </text> 132 </text>
135 <text_editor bg_readonly_color="0, 0, 0, 0" bottom="-375" embedded_items="false" 133 <text_editor bottom="-375" embedded_items="false"
136 enabled="true" follows="left|top" font="SansSerifSmall" height="110" 134 enabled="true" follows="left|top" font="SansSerifSmall" height="110"
137 is_unicode="false" left="79" max_length="511" mouse_opaque="true" 135 is_unicode="false" left="79" max_length="511" mouse_opaque="true"
138 name="about" text_readonly_color="1, 1, 1, 1" width="321" word_wrap="true" /> 136 name="about" width="321" word_wrap="true" />
139 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 137 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
140 bottom="-403" drop_shadow_visible="true" follows="left|top" 138 bottom="-403" drop_shadow_visible="true" follows="left|top"
141 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="0" 139 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="0"
@@ -189,7 +187,7 @@
189 height="18" label="Home" label_selected="Home" left="10" 187 height="18" label="Home" label_selected="Home" left="10"
190 mouse_opaque="true" name="home" width="55" /> 188 mouse_opaque="true" name="home" width="55" />
191 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" halign="center" 189 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" halign="center"
192 height="18" label="Load" label_selected="Load" left_delta="0" 190 height="18" label="Load" label_selected="Load" left_delta="60"
193 mouse_opaque="true" name="load" 191 mouse_opaque="true" name="load"
194 tool_tip="Load this profile page with embedded web browser." width="60" /> 192 tool_tip="Load this profile page with embedded web browser." width="60" />
195 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" halign="center" 193 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" halign="center"
@@ -202,14 +200,14 @@
202 mouse_opaque="true" name="web_profile_help" width="18" /> 200 mouse_opaque="true" name="web_profile_help" width="18" />
203 <check_box bottom_delta="0" follows="right|top" font="SansSerifSmall" height="16" 201 <check_box bottom_delta="0" follows="right|top" font="SansSerifSmall" height="16"
204 initial_value="false" label="Automatically load web profiles" 202 initial_value="false" label="Automatically load web profiles"
205 left_delta="90" mouse_opaque="true" name="auto_load" 203 left_delta="30" mouse_opaque="true" name="auto_load"
206 tool_tip="Automatically load ALL profile webpages without asking first." 204 tool_tip="Automatically load ALL profile webpages without asking first."
207 width="127" /> 205 width="127" />
208 <line_editor bevel_style="in" bg_readonly_color="0, 0, 0, 0" border_style="line" 206 <line_editor bevel_style="in" border_style="line"
209 border_thickness="1" bottom_delta="-18" enabled="false" follows="left|top" 207 border_thickness="1" bottom_delta="-18" enabled="false" follows="left|top"
210 font="SansSerifSmall" height="16" is_unicode="false" left="10" 208 font="SansSerifSmall" height="16" is_unicode="false" left="10"
211 max_length="254" mouse_opaque="true" name="url_edit" 209 max_length="254" mouse_opaque="true" name="url_edit"
212 text_readonly_color="1, 1, 1, 1" width="400" /> 210 width="400" />
213 <web_browser border_visible="false" bottom="-444" follows="top|left|right" height="400" 211 <web_browser border_visible="false" bottom="-444" follows="top|left|right" height="400"
214 ignore_ui_scale="false" left="10" name="profile_html" start_url="" 212 ignore_ui_scale="false" left="10" name="profile_html" start_url=""
215 width="400" /> 213 width="400" />
@@ -248,11 +246,11 @@
248 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" 246 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16"
249 initial_value="false" label="Hire" left_delta="170" mouse_opaque="true" 247 initial_value="false" label="Hire" left_delta="170" mouse_opaque="true"
250 name="chk7" width="92" /> 248 name="chk7" width="92" />
251 <line_editor bevel_style="in" bg_readonly_color="0, 0, 0, 0" border_style="line" 249 <line_editor bevel_style="in" border_style="line"
252 border_thickness="1" bottom_delta="-20" enabled="true" follows="left|top" 250 border_thickness="1" bottom_delta="-20" enabled="true" follows="left|top"
253 font="SansSerifSmall" height="16" is_unicode="false" left="74" 251 font="SansSerifSmall" height="16" is_unicode="false" left="74"
254 max_length="254" mouse_opaque="true" name="want_to_edit" 252 max_length="254" mouse_opaque="true" name="want_to_edit"
255 text_readonly_color="1, 1, 1, 1" width="330" /> 253 width="330" />
256 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 254 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
257 bottom_delta="-26" drop_shadow_visible="true" follows="left|top" 255 bottom_delta="-26" drop_shadow_visible="true" follows="left|top"
258 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4" 256 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4"
@@ -277,22 +275,22 @@
277 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16" 275 <check_box bottom_delta="0" follows="left|top" font="SansSerifSmall" height="16"
278 initial_value="false" label="Custom Characters" left_delta="170" 276 initial_value="false" label="Custom Characters" left_delta="170"
279 mouse_opaque="true" name="schk5" width="127" /> 277 mouse_opaque="true" name="schk5" width="127" />
280 <line_editor bevel_style="in" bg_readonly_color="0, 0, 0, 0" border_style="line" 278 <line_editor bevel_style="in" border_style="line"
281 border_thickness="1" bottom_delta="-20" enabled="true" follows="left|top" 279 border_thickness="1" bottom_delta="-20" enabled="true" follows="left|top"
282 font="SansSerifSmall" height="16" is_unicode="false" left="74" 280 font="SansSerifSmall" height="16" is_unicode="false" left="74"
283 max_length="254" mouse_opaque="true" name="skills_edit" 281 max_length="254" mouse_opaque="true" name="skills_edit"
284 text_readonly_color="1, 1, 1, 1" width="330" /> 282 width="330" />
285 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 283 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
286 bottom_delta="-30" drop_shadow_visible="true" follows="left|top" 284 bottom_delta="-30" drop_shadow_visible="true" follows="left|top"
287 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4" 285 font="SansSerifSmall" h_pad="0" halign="right" height="16" left="4"
288 mouse_opaque="true" name="Languages:" v_pad="0" width="70"> 286 mouse_opaque="true" name="Languages:" v_pad="0" width="70">
289 Languages: 287 Languages:
290 </text> 288 </text>
291 <line_editor bevel_style="in" bg_readonly_color="0, 0, 0, 0" border_style="line" 289 <line_editor bevel_style="in" border_style="line"
292 border_thickness="1" bottom_delta="0" enabled="true" follows="left|top" 290 border_thickness="1" bottom_delta="0" enabled="true" follows="left|top"
293 font="SansSerifSmall" height="16" is_unicode="false" left="74" 291 font="SansSerifSmall" height="16" is_unicode="false" left="74"
294 max_length="254" mouse_opaque="true" name="languages_edit" 292 max_length="254" mouse_opaque="true" name="languages_edit"
295 text_readonly_color="1, 1, 1, 1" width="330" /> 293 width="330" />
296 </panel> 294 </panel>
297 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466" 295 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466"
298 label="Picks" left="1" mouse_opaque="true" name="Picks" width="418"> 296 label="Picks" left="1" mouse_opaque="true" name="Picks" width="418">
@@ -369,10 +367,10 @@
369 mouse_opaque="true" name="(250 chars)" v_pad="0" width="65"> 367 mouse_opaque="true" name="(250 chars)" v_pad="0" width="65">
370 (250 chars) 368 (250 chars)
371 </text> 369 </text>
372 <text_editor bg_readonly_color="0, 0, 0, 0" bottom="-347" embedded_items="false" 370 <text_editor bottom="-347" embedded_items="false"
373 enabled="true" follows="left|top" font="SansSerifSmall" height="160" 371 enabled="true" follows="left|top" font="SansSerifSmall" height="160"
374 is_unicode="false" left="70" max_length="254" mouse_opaque="false" 372 is_unicode="false" left="70" max_length="254" mouse_opaque="false"
375 name="about" text_readonly_color="1, 1, 1, 1" width="330" word_wrap="true" /> 373 name="about" width="330" word_wrap="true" />
376 </panel> 374 </panel>
377 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466" 375 <panel border="true" bottom="-482" follows="left|top|right|bottom" height="466"
378 label="My Notes" left="1" mouse_opaque="true" name="My Notes" width="418"> 376 label="My Notes" left="1" mouse_opaque="true" name="My Notes" width="418">
@@ -393,12 +391,12 @@ notes. This person cannot see them, nor can other people.
393 word_wrap="false" /> 391 word_wrap="false" />
394 </panel> 392 </panel>
395 </tab_container> 393 </tab_container>
396 <button bottom="-482" font="SansSerif" halign="center" height="20" label="OK" 394 <button bottom="-483" font="SansSerif" halign="center" height="20" label="OK"
397 label_selected="OK" left="34" mouse_opaque="true" name="OK" width="100" /> 395 label_selected="OK" left="208" mouse_opaque="true" name="OK" width="100" />
398 <button bottom_delta="0" font="SansSerif" halign="center" height="20" label="Cancel" 396 <button bottom_delta="0" font="SansSerif" halign="center" height="20" label="Cancel"
399 label_selected="Cancel" left_delta="264" mouse_opaque="true" name="Cancel" 397 label_selected="Cancel" left_delta="105" mouse_opaque="true" name="Cancel"
400 width="100" /> 398 width="100" />
401 <button bottom_delta="135" font="SansSerif" halign="center" height="20" label="Kick" 399 <button bottom_delta="132" font="SansSerif" halign="center" height="20" label="Kick"
402 label_selected="Kick" left="4" mouse_opaque="true" name="Kick" width="72" /> 400 label_selected="Kick" left="4" mouse_opaque="true" name="Kick" width="72" />
403 <button bottom_delta="-24" font="SansSerif" halign="center" height="20" label="Freeze" 401 <button bottom_delta="-24" font="SansSerif" halign="center" height="20" label="Freeze"
404 label_selected="Freeze" left="4" mouse_opaque="true" name="Freeze" 402 label_selected="Freeze" left="4" mouse_opaque="true" name="Freeze"
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 7cc1a60..001d6d6 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
@@ -3,17 +3,15 @@
3 name="Classified" title="Classified" width="350"> 3 name="Classified" title="Classified" width="350">
4 <texture_picker bottom="-165" follows="left|top" height="155" left="10" name="snapshot_ctrl" 4 <texture_picker bottom="-165" follows="left|top" height="155" left="10" name="snapshot_ctrl"
5 width="207" /> 5 width="207" />
6 <line_editor bg_readonly_color="clear" bottom_delta="-8" enabled="false" follows="left|top" 6 <line_editor bottom_delta="-8" enabled="false" follows="left|top"
7 font="SansSerif" height="20" left="10" name="given_name_editor" 7 font="SansSerif" height="20" left="10" name="given_name_editor"
8 text_readonly_color="white"
9 tool_tip="Name must begin with a letter or number, not punctuation." 8 tool_tip="Name must begin with a letter or number, not punctuation."
10 width="280" /> 9 width="280" />
11 <text_editor bg_readonly_color="clear" enabled="false" follows="left|top" 10 <text_editor enabled="false" follows="left|top"
12 font="SansSerifSmall" height="70" left="10" max_length="1023" 11 font="SansSerifSmall" height="70" left="10" max_length="1023"
13 name="desc_editor" text_readonly_color="white" width="280" word_wrap="true" /> 12 name="desc_editor" width="280" word_wrap="true" />
14 <line_editor bg_readonly_color="clear" enabled="false" follows="left|top" 13 <line_editor enabled="false" follows="left|top"
15 font="SansSerifSmall" height="20" left="10" name="location_editor" 14 font="SansSerifSmall" height="20" left="10" name="location_editor"
16 text_readonly_color="white"
17 tool_tip="Set the location for this classified to your current position." 15 tool_tip="Set the location for this classified to your current position."
18 width="280" /> 16 width="280" />
19 <button bottom_delta="-27" follows="left|top" height="20" label="Set Location" 17 <button bottom_delta="-27" follows="left|top" height="20" label="Set Location"
@@ -26,16 +24,14 @@
26 name="classified_category_combo" right="150" /> 24 name="classified_category_combo" right="150" />
27 <check_box bottom_delta="-1" follows="left|top" height="20" label="Mature" left="160" 25 <check_box bottom_delta="-1" follows="left|top" height="20" label="Mature" left="160"
28 name="classified_mature_check" width="80" /> 26 name="classified_mature_check" width="80" />
29 <text bg_readonly_color="clear" bottom_delta="-25" follows="left|top" 27 <text bottom_delta="-25" follows="left|top"
30 font="SansSerifSmall" height="18" left="10" name="classified_info_text" 28 font="SansSerifSmall" height="18" left="10" name="classified_info_text"
31 text_readonly_color="white"
32 tool_tip="The more you choose to pay for your ad, the higher in the list it appears." 29 tool_tip="The more you choose to pay for your ad, the higher in the list it appears."
33 width="300"> 30 width="300">
34 Ad placed: Not yet published 31 Ad placed: Not yet published
35 </text> 32 </text>
36 <text bg_readonly_color="clear" bottom_delta="-18" follows="left|top" 33 <text bottom_delta="-18" follows="left|top"
37 font="SansSerifSmall" height="18" left="10" name="click_through_text" 34 font="SansSerifSmall" height="18" left="10" name="click_through_text"
38 text_readonly_color="white"
39 tool_tip="Total number of clicks on each button since this classified was placed." 35 tool_tip="Total number of clicks on each button since this classified was placed."
40 width="300"> 36 width="300">
41 Clicks: 37 Clicks:
diff --git a/linden/indra/newview/skins/xui/en-us/panel_avatar_pick.xml b/linden/indra/newview/skins/xui/en-us/panel_avatar_pick.xml
index 3f8a9e4..af8b58c 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_avatar_pick.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_avatar_pick.xml
@@ -3,15 +3,15 @@
3 title="Pick" width="350"> 3 title="Pick" width="350">
4 <texture_picker bottom="-190" follows="left|top" height="180" left="10" name="snapshot_ctrl" 4 <texture_picker bottom="-190" follows="left|top" height="180" left="10" name="snapshot_ctrl"
5 width="290" /> 5 width="290" />
6 <line_editor bg_readonly_color="clear" bottom_delta="-8" enabled="false" follows="left|top" 6 <line_editor bottom_delta="-8" enabled="false" follows="left|top"
7 font="SansSerif" height="20" left="10" name="given_name_editor" 7 font="SansSerif" height="20" left="10" name="given_name_editor"
8 text_readonly_color="white" width="290" /> 8 width="290" />
9 <text_editor bg_readonly_color="clear" enabled="false" follows="left|top" 9 <text_editor enabled="false" follows="left|top"
10 font="SansSerifSmall" height="100" left="10" max_length="1023" 10 font="SansSerifSmall" height="100" left="10" max_length="1023"
11 name="desc_editor" text_readonly_color="white" width="290" word_wrap="true" /> 11 name="desc_editor" width="290" word_wrap="true" />
12 <line_editor bg_readonly_color="clear" enabled="false" follows="left|top" 12 <line_editor enabled="false" follows="left|top"
13 font="SansSerifSmall" height="20" left="10" name="location_editor" 13 font="SansSerifSmall" height="20" left="10" name="location_editor"
14 text_readonly_color="white" width="290" /> 14 width="290" />
15 <button bottom_delta="-27" follows="left|top" height="20" label="Set Location" 15 <button bottom_delta="-27" follows="left|top" height="20" label="Set Location"
16 left="180" name="set_location_btn" width="120" /> 16 left="180" name="set_location_btn" width="120" />
17 <button bottom_delta="0" follows="left|top" height="20" label="Teleport" left="10" 17 <button bottom_delta="0" follows="left|top" height="20" label="Teleport" left="10"
diff --git a/linden/indra/newview/skins/xui/en-us/panel_bg_tab.xml b/linden/indra/newview/skins/xui/en-us/panel_bg_tab.xml
index def7a87..4da6be0 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_bg_tab.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_bg_tab.xml
@@ -1,10 +1,7 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel bottom="0" default_tab_group="1" follows="left|bottom|right|top" height="20" 2<panel bottom="0" default_tab_group="1" follows="left|bottom|right|top" height="21"
3 left="0" name="bg_tab" use_bounding_rect="true" width="100"> 3 left="0" name="bg_tab" use_bounding_rect="true" width="100">
4 <icon bottom="-36" color="DefaultShadowDark" follows="left|right|top|bottom" 4 <icon bottom="-24" color="255,255,255,245" scale_image="true"
5 height="38" image_name="rounded_square.tga" left="1" width="100" /> 5 follows="left|right|top|bottom" height="26" image_name="toolbar_tab.tga"
6 <icon bottom="-36" color="DefaultHighlightLight" follows="left|right|top|bottom" 6 left="1" width="100" />
7 height="38" image_name="rounded_square.tga" left="0" width="98" />
8 <icon bottom="-36" color="FocusBackgroundColor" follows="left|right|top|bottom"
9 height="37" image_name="rounded_square.tga" left="1" width="99" />
10</panel> 7</panel>
diff --git a/linden/indra/newview/skins/xui/en-us/panel_bg_toolbar.xml b/linden/indra/newview/skins/xui/en-us/panel_bg_toolbar.xml
new file mode 100644
index 0000000..af91e4e
--- /dev/null
+++ b/linden/indra/newview/skins/xui/en-us/panel_bg_toolbar.xml
@@ -0,0 +1,7 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel bottom="0" default_tab_group="1" follows="left|bottom|right|top" height="21"
3 left="0" name="bg_toolbar" use_bounding_rect="true" width="100">
4 <icon bottom="-24" color="255,255,255,255" scale_image="true"
5 follows="left|right|top|bottom" height="26" image_name="toolbar_bg.tga"
6 left="0" width="100" />
7</panel>
diff --git a/linden/indra/newview/skins/xui/en-us/panel_chat_bar.xml b/linden/indra/newview/skins/xui/en-us/panel_chat_bar.xml
index c4c6c12..20a63db 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_chat_bar.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_chat_bar.xml
@@ -1,20 +1,20 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel bottom="0" default_tab_group="1" follows="left|bottom|right" height="23" 2<panel bottom="-1" default_tab_group="1" follows="left|bottom|right" height="25"
3 left="0" name="chat_bar" width="395"> 3 left="0" name="chat_bar" width="395">
4 <panel bottom="0" follows="left|right|bottom" height="23" left="-397" 4 <panel bottom="1" follows="left|right|bottom" height="23" left="0"
5 use_bounding_rect="true" width="397"> 5 use_bounding_rect="true" width="397" bg_visible="false" border="false" border_visible="false">
6 <panel bottom="0" filename="panel_bg_tab.xml" height="23" left="0" width="397" /> 6 <panel bottom="0" filename="panel_bg_tab.xml" height="22" left="-398" width="396" />
7 </panel> 7 </panel>
8 <button bottom="-23" follows="left|bottom" font="SansSerif" halign="center" height="22" 8 <button bottom="-23" follows="left|bottom" font="SansSerif" halign="center" height="20"
9 label="Local Chat" left="1" name="History" 9 label="Local Chat" left="7" name="History"
10 tool_tip="Click here to see what has been said" width="100" /> 10 tool_tip="Click here to see what has been said" width="93" />
11 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-22" 11 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-23"
12 follows="left|right|bottom" font="SansSerif" 12 follows="left|right|bottom" font="SansSerif"
13 handle_edit_keys_directly="false" height="19" label="Click here to chat." 13 handle_edit_keys_directly="false" height="20" label="Click here to chat."
14 left="107" max_length="254" name="Chat Editor" 14 left="107" max_length="254" name="Chat Editor"
15 select_all_on_focus_received="false" select_on_focus="false" tab_group="1" 15 select_all_on_focus_received="false" select_on_focus="false" tab_group="1"
16 tool_tip="Press Enter to say, Ctrl-Enter to shout." width="105" /> 16 tool_tip="Press Enter to say, Ctrl-Enter to shout." width="105" />
17 <flyout_button bottom="-23" follows="right|bottom" height="22" label="Say" left_delta="110" 17 <flyout_button bottom="-23" follows="right|bottom" height="20" label="Say" left_delta="110"
18 list_position="above" mouse_opaque="true" name="Say" tool_tip="(Enter)" 18 list_position="above" mouse_opaque="true" name="Say" tool_tip="(Enter)"
19 width="80"> 19 width="80">
20 <flyout_button_item value="say"> 20 <flyout_button_item value="say">
@@ -24,8 +24,8 @@
24 Shout 24 Shout
25 </flyout_button_item> 25 </flyout_button_item>
26 </flyout_button> 26 </flyout_button>
27 <combo_box allow_text_entry="false" bottom="-22" follows="right|bottom" height="19" 27 <combo_box allow_text_entry="false" bottom="-23" follows="right|bottom" height="20"
28 label="Gestures" left_delta="85" max_chars="20" name="Gesture" width="80"> 28 label="Gestures" left_delta="85" max_chars="20" name="Gesture" width="90">
29 <combo_item name="Gestures"> 29 <combo_item name="Gestures">
30 Gestures 30 Gestures
31 </combo_item> 31 </combo_item>
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 5ff802a..bc7a4d1 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_classified.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_classified.xml
@@ -3,16 +3,15 @@
3 name="Classified" title="Classified" width="450"> 3 name="Classified" title="Classified" width="450">
4 <texture_picker bottom="-315" follows="left|top" height="300" left="20" name="snapshot_ctrl" 4 <texture_picker bottom="-315" follows="left|top" height="300" left="20" name="snapshot_ctrl"
5 width="400" /> 5 width="400" />
6 <line_editor bg_readonly_color="clear" bottom_delta="-8" enabled="false" follows="left|top" 6 <line_editor bottom_delta="-8" enabled="false" follows="left|top"
7 font="SansSerif" height="20" left="20" name="given_name_editor" 7 font="SansSerif" height="20" left="20" name="given_name_editor"
8 text_readonly_color="white"
9 tool_tip="Name must begin with a letter or number, not punctuation." 8 tool_tip="Name must begin with a letter or number, not punctuation."
10 width="400" /> 9 width="400" />
11 <text_editor bg_readonly_color="clear" enabled="false" follows="left|top" 10 <text_editor enabled="false" follows="left|top"
12 font="SansSerifSmall" height="90" left="20" max_length="1023" 11 font="SansSerifSmall" height="90" left="20" max_length="1023"
13 name="desc_editor" text_readonly_color="white" width="400" word_wrap="true" /> 12 name="desc_editor" width="400" word_wrap="true" />
14 <line_editor bg_readonly_color="clear" enabled="false" follows="left|top" font="SansSerif" 13 <line_editor enabled="false" follows="left|top" font="SansSerif"
15 height="20" left="20" name="location_editor" text_readonly_color="white" 14 height="20" left="20" name="location_editor"
16 tool_tip="Set the location for this classified to your current position." 15 tool_tip="Set the location for this classified to your current position."
17 width="400" /> 16 width="400" />
18 <button bottom_delta="0" follows="left|top" height="20" label="Set" left="380" 17 <button bottom_delta="0" follows="left|top" height="20" label="Set" left="380"
@@ -24,10 +23,9 @@
24 <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"
25 name="classified_profile_btn" width="100" /> 24 name="classified_profile_btn" width="100" />
26 <check_box bottom="422" follows="left|top" height="20" label="Mature" left="30" 25 <check_box bottom="422" follows="left|top" height="20" label="Mature" left="30"
27 name="classified_mature_check" text_readonly_color="white" width="80" /> 26 name="classified_mature_check" width="80" />
28 <combo_box bg_readonly_color="grey" bottom="445" follows="left|top" height="18" label="" 27 <combo_box bottom="445" follows="left|top" height="18" label=""
29 left="20" name="classified_category_combo" right="150" 28 left="20" name="classified_category_combo" right="150" />
30 text_readonly_color="white" />
31 <button bottom="400" follows="left|top" height="20" label="Update" left="30" 29 <button bottom="400" follows="left|top" height="20" label="Update" left="30"
32 name="classified_update_btn" width="70" /> 30 name="classified_update_btn" width="70" />
33 <string name="ad_placed_paid"> 31 <string name="ad_placed_paid">
diff --git a/linden/indra/newview/skins/xui/en-us/panel_friends.xml b/linden/indra/newview/skins/xui/en-us/panel_friends.xml
index 7bb08d2..f6eacb1 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_friends.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_friends.xml
@@ -16,7 +16,7 @@
16 <column image="ff_visible_map_button.tga" name="icon_visible_map" 16 <column image="ff_visible_map_button.tga" name="icon_visible_map"
17 tool_tip="Friend can locate you on the map" width="20" /> 17 tool_tip="Friend can locate you on the map" width="20" />
18 <column image="ff_edit_mine_button.tga" name="icon_edit_mine" 18 <column image="ff_edit_mine_button.tga" name="icon_edit_mine"
19 tool_tip="Friend can edit your objects" width="20" /> 19 tool_tip="Friend can edit, delete or take objects" width="20" />
20 <column image="ff_edit_theirs_button.tga" name="icon_edit_theirs" 20 <column image="ff_edit_theirs_button.tga" name="icon_edit_theirs"
21 tool_tip="You can edit this friend&apos;s objects" width="20" /> 21 tool_tip="You can edit this friend&apos;s objects" width="20" />
22 <column name="friend_last_update_generation" width="0" /> 22 <column name="friend_last_update_generation" width="0" />
diff --git a/linden/indra/newview/skins/xui/en-us/panel_group.xml b/linden/indra/newview/skins/xui/en-us/panel_group.xml
index 67cdbb8..775c7b9 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_group.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_group.xml
@@ -9,7 +9,7 @@
9 Do you want to apply these changes? 9 Do you want to apply these changes?
10 </string> 10 </string>
11 <tab_container border="false" bottom="27" follows="all" height="483" left="0" 11 <tab_container border="false" bottom="27" follows="all" height="483" left="0"
12 name="group_tab_container" tab_position="top" width="420"> 12 name="group_tab_container" tab_position="top" width="419">
13 <panel filename="panel_group_general.xml" name="general_tab" /> 13 <panel filename="panel_group_general.xml" name="general_tab" />
14 <panel filename="panel_group_roles.xml" name="roles_tab" /> 14 <panel filename="panel_group_roles.xml" name="roles_tab" />
15 <panel filename="panel_group_notices.xml" name="notices_tab" /> 15 <panel filename="panel_group_notices.xml" name="notices_tab" />
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 9825cb1..7332cdf 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
@@ -39,14 +39,14 @@ Hover your mouse over the options for more help.
39 Group Charter 39 Group Charter
40 </text> 40 </text>
41 <texture_picker bottom_delta="-129" follows="left|top" height="144" 41 <texture_picker bottom_delta="-129" follows="left|top" height="144"
42 image_name="icon_groupnotice.tga" label="Group Insignia" left="7" 42 label="Group Insignia" left="7"
43 mouse_opaque="true" name="insignia" tool_tip="Click to choose a picture" 43 mouse_opaque="true" name="insignia" tool_tip="Click to choose a picture"
44 width="128" /> 44 width="128" />
45 <text_editor bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 45 <text_editor bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
46 bottom_delta="-30" drop_shadow_visible="false" follows="left|top" 46 bottom_delta="-30" drop_shadow_visible="false" follows="left|top"
47 font="SansSerifSmall" h_pad="0" halign="left" height="160" 47 font="SansSerifSmall" h_pad="0" halign="left" height="160"
48 hide_scrollbar="true" max_length="511" mouse_opaque="true" name="charter" 48 hide_scrollbar="true" max_length="511" mouse_opaque="true" name="charter"
49 right="410" text_readonly_color="0.57647, 0.66275, 0.83529" v_pad="0" 49 right="410" v_pad="0"
50 width="265" word_wrap="true"> 50 width="265" word_wrap="true">
51 Group Charter 51 Group Charter
52 </text_editor> 52 </text_editor>
@@ -75,31 +75,28 @@ Hover your mouse over the options for more help.
75 <text bottom_delta="-18" font="SansSerif" name="text_group_preferences"> 75 <text bottom_delta="-18" font="SansSerif" name="text_group_preferences">
76 Group Preferences 76 Group Preferences
77 </text> 77 </text>
78 <panel background_opaque="true" background_visible="true" bevel_style="in" 78 <panel background_opaque="true" background_visible="false" bevel_style="in"
79 bg_alpha_color="blue" bg_opaque_color="0,0,0,0.3" border="true" 79 border="true"
80 bottom_delta="-104" follows="left|top" height="96" left_delta="0" 80 bottom_delta="-104" follows="left|top" height="96" left_delta="0"
81 mouse_opaque="true" name="preferences_container" width="404"> 81 mouse_opaque="true" name="preferences_container" width="404">
82 <check_box bottom="-20" follows="left|top" font="SansSerifSmall" height="16" 82 <check_box bottom="-20" follows="left|top" font="SansSerifSmall" height="16"
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 text_disabled_color="0.67647, 0.76275, 0.93529, 0.45"
86 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" />
87 <check_box bottom_delta="-18" follows="left|top" font="SansSerifSmall" height="16" 86 <check_box bottom_delta="-18" follows="left|top" font="SansSerifSmall" height="16"
88 initial_value="false" label="Mature group" left_delta="0" 87 initial_value="false" label="Mature group" left_delta="0"
89 mouse_opaque="true" name="mature" radio_style="false" 88 mouse_opaque="true" name="mature" radio_style="false"
90 text_disabled_color="0.67647, 0.76275, 0.93529, 0.45"
91 tool_tip="Sets whether your group information is considered mature." 89 tool_tip="Sets whether your group information is considered mature."
92 visible="true" width="95" /> 90 visible="true" width="95" />
93 <check_box bottom_delta="-18" follows="right|top" font="SansSerifSmall" height="16" 91 <check_box bottom_delta="-18" follows="right|top" font="SansSerifSmall" height="16"
94 initial_value="false" label="Open enrollment" left="4" mouse_opaque="true" 92 initial_value="false" label="Open enrollment" left="4" mouse_opaque="true"
95 name="open_enrollement" radio_style="false" 93 name="open_enrollement" radio_style="false"
96 text_disabled_color="0.67647, 0.76275, 0.93529, 0.45"
97 tool_tip="Sets whether this group allows new members to join without being invited." 94 tool_tip="Sets whether this group allows new members to join without being invited."
98 width="95" /> 95 width="95" />
99 <check_box bottom_delta="-18" follows="left|top" font="SansSerifSmall" height="16" 96 <check_box bottom_delta="-18" follows="left|top" font="SansSerifSmall" height="16"
100 initial_value="false" label="Enrollment fee: L$" left_delta="16" 97 initial_value="false" label="Enrollment fee: L$" left_delta="16"
101 max_length="5" mouse_opaque="true" name="check_enrollment_fee" 98 max_length="5" mouse_opaque="true" name="check_enrollment_fee"
102 radio_style="false" text_disabled_color="0.67647, 0.76275, 0.93529, 0.45" 99 radio_style="false"
103 tool_tip="Sets whether to require an enrollment fee to join the group." 100 tool_tip="Sets whether to require an enrollment fee to join the group."
104 width="95" /> 101 width="95" />
105 <spinner bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 102 <spinner bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
@@ -107,7 +104,6 @@ Hover your mouse over the options for more help.
107 follows="left|top" font="SansSerif" h_pad="0" halign="left" height="16" 104 follows="left|top" font="SansSerif" h_pad="0" halign="left" height="16"
108 increment="1" label_width="10" left_delta="116" max_val="99999" min_val="0" 105 increment="1" label_width="10" left_delta="116" max_val="99999" min_val="0"
109 mouse_opaque="true" name="spin_enrollment_fee" right_delta="170" 106 mouse_opaque="true" name="spin_enrollment_fee" right_delta="170"
110 text_disabled_color="0.67647, 0.76275, 0.93529, 0.45"
111 tool_tip="New members must pay this fee to join the group when Enrollment Fee is checked." 107 tool_tip="New members must pay this fee to join the group when Enrollment Fee is checked."
112 v_pad="0" width="65" /> 108 v_pad="0" width="65" />
113 <panel background_opaque="false" border="false" bottom="-31" height="32" left="225" 109 <panel background_opaque="false" border="false" bottom="-31" height="32" left="225"
diff --git a/linden/indra/newview/skins/xui/en-us/panel_group_invite.xml b/linden/indra/newview/skins/xui/en-us/panel_group_invite.xml
index e11c6f6..8c5cbb5 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_group_invite.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_group_invite.xml
@@ -1,7 +1,7 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel border="false" bottom="0" height="380" label="Invite a Member" left="0" 2<panel border="false" bottom="0" height="380" label="Invite a Member" left="0"
3 name="invite_panel" select="false" width="210"> 3 name="invite_panel" select="false" width="210">
4 <text bottom_delta="-78" height="54" left="7" width="200"> 4 <text bottom_delta="-78" height="54" left="7" width="200" name="help_text">
5 You can select multiple residents to 5 You can select multiple residents to
6invite to your group. Click &apos;Open 6invite to your group. Click &apos;Open
7Person Chooser&apos; to start. 7Person Chooser&apos; to start.
@@ -10,27 +10,31 @@ Person Chooser&apos; to start.
10 label="Open Person Chooser" left="5" name="add_button" tool_tip="" 10 label="Open Person Chooser" left="5" name="add_button" tool_tip=""
11 width="200" /> 11 width="200" />
12 <name_list allow_calling_card_drop="true" background_visible="true" bottom_delta="-178" 12 <name_list allow_calling_card_drop="true" background_visible="true" bottom_delta="-178"
13 column_padding="0" draw_border="true" fg_disable_color="grey" 13 column_padding="0" draw_border="true" height="174" left="5"
14 fg_selected_color="black" fg_unselected_color="black" height="174" left="5"
15 multi_select="true" name="invitee_list" 14 multi_select="true" name="invitee_list"
16 tool_tip="Hold the Ctrl key and click resident names to multi-select." 15 tool_tip="Hold the Ctrl key and click resident names to multi-select."
17 width="200" /> 16 width="200" />
18 <button bottom_delta="-24" font="SansSerifSmall" halign="center" height="20" 17 <button bottom_delta="-24" font="SansSerifSmall" halign="center" height="20"
19 label="Remove Selected from List" left_delta="0" name="remove_button" 18 label="Remove Selected from List" left_delta="0" name="remove_button"
20 tool_tip="Removes residents selected above from the invite list." 19 tool_tip="Removes residents selected above from the invite list."
21 width="200" /> 20 width="200" />
22 <text bottom_delta="-21" height="16" left="9" width="200"> 21 <text bottom_delta="-21" height="16" left="9" width="200" name="role_text">
23 Choose what Role to assign them to: 22 Choose what Role to assign them to:
24 </text> 23 </text>
25 <combo_box bottom_delta="-16" follows="left|top" height="16" left_delta="0" 24 <combo_box bottom_delta="-16" follows="left|top" height="16" left_delta="0"
26 name="role_name" 25 name="role_name"
27 tool_tip="Choose from the list of Roles you are allowed to assign members to." 26 tool_tip="Choose from the list of Roles you are allowed to assign members to."
28 width="196" /> 27 width="196" />
29 <button bottom="4" font="SansSerifSmall" halign="center" height="20" 28 <button bottom="4" font="SansSerifSmall" halign="center" height="20"
30 label="Send Invitations" left="4" name="ok_button" width="130" /> 29 label="Send Invitations" left="4" name="ok_button" width="130" />
31 <button bottom_delta="0" font="SansSerifSmall" halign="center" height="20" 30 <button bottom_delta="0" font="SansSerifSmall" halign="center" height="20"
32 label="Cancel" left_delta="132" name="cancel_button" width="70" /> 31 label="Cancel" left_delta="132" name="cancel_button" width="70" />
33 <string name="loading"> 32 <string name="confirm_invite_owner_str">
34 (loading...) 33 Are you sure you want to invite new owner(s)? This action is permanent!
35 </string> 34 </string>
35 <!--button bottom="25" font="SansSerifSmall" halign="center" height="20"
36 label="Send Invitations" left="65" name="ok_button" width="140" />
37 <button bottom_delta="-22" font="SansSerifSmall" halign="center" height="20"
38 label="Cancel" left_delta="0" name="cancel_button" width="140" /-->
39 <string name="loading">(loading...)</string>
36</panel> 40</panel>
diff --git a/linden/indra/newview/skins/xui/en-us/panel_group_land_money.xml b/linden/indra/newview/skins/xui/en-us/panel_group_land_money.xml
index f93e9ad..f6b8838 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_group_land_money.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_group_land_money.xml
@@ -26,7 +26,7 @@ provide information about the group&apos;s finances.
26 mouse_opaque="true" name="group_land_heading" v_pad="0" width="150"> 26 mouse_opaque="true" name="group_land_heading" v_pad="0" width="150">
27 Group Owned Land 27 Group Owned Land
28 </text> 28 </text>
29 <scroll_list background_visible="true" bottom_delta="-124" column_padding="5" 29 <scroll_list background_visible="true" bottom_delta="-126" column_padding="5"
30 draw_border="true" draw_heading="true" follows="top" font="SansSerifSmall" 30 draw_border="true" draw_heading="true" follows="top" font="SansSerifSmall"
31 heading_font="SansSerifSmall" heading_height="14" height="120" left="7" 31 heading_font="SansSerifSmall" heading_height="14" height="120" left="7"
32 mouse_opaque="true" multi_select="false" name="group_parcel_list" 32 mouse_opaque="true" multi_select="false" name="group_parcel_list"
@@ -99,10 +99,10 @@ provide information about the group&apos;s finances.
99 sq. meters ([AMOUNT] max) 99 sq. meters ([AMOUNT] max)
100 </text> 100 </text>
101 <icon bottom_delta="-27" height="16" image_name="smicon_warn.tga" left="9" 101 <icon bottom_delta="-27" height="16" image_name="smicon_warn.tga" left="9"
102 name="group_over_limit_icon" width="16" /> 102 name="group_over_limit_icon" width="16" visible="false"/>
103 <text border_drop_shadow_visible="false" border_visible="false" bottom_delta="-1" 103 <text border_drop_shadow_visible="false" border_visible="false" bottom_delta="-1"
104 drop_shadow_visible="false" h_pad="0" height="16" left_delta="21" 104 drop_shadow_visible="false" h_pad="0" height="16" left_delta="21"
105 name="group_over_limit_text" text_color="1.00000, 0.81961, 0.00000" 105 name="group_over_limit_text" text_color="GroupOverTierColor"
106 v_pad="0" width="400"> 106 v_pad="0" width="400">
107 Group members must contribute more land credits to support land in use. 107 Group members must contribute more land credits to support land in use.
108 </text> 108 </text>
@@ -117,9 +117,7 @@ provide information about the group&apos;s finances.
117 <panel border="true" bottom_delta="-260" follows="left|top|right|bottom" height="255" 117 <panel border="true" bottom_delta="-260" follows="left|top|right|bottom" height="255"
118 label="Planning" left="1" mouse_opaque="true" 118 label="Planning" left="1" mouse_opaque="true"
119 name="group_money_planning_tab" width="398"> 119 name="group_money_planning_tab" width="398">
120 <icon bottom="1" height="161" image_name="darkgray.tga" left="1" name="sub_tab_bg" 120 <text_editor bg_readonly_color="0.784314, 0.819608, 0.8, 1" bottom="8"
121 width="402" />
122 <text_editor bg_readonly_color="0.784314, 0.819608, 0.8, 1" bottom_delta="7"
123 embedded_items="false" follows="left|top|right|bottom" font="Monospace" 121 embedded_items="false" follows="left|top|right|bottom" font="Monospace"
124 height="239" is_unicode="false" left="8" max_length="4096" 122 height="239" is_unicode="false" left="8" max_length="4096"
125 mouse_opaque="true" name="group_money_planning_text" width="382" 123 mouse_opaque="true" name="group_money_planning_text" width="382"
@@ -130,8 +128,6 @@ provide information about the group&apos;s finances.
130 <panel border="true" bottom_delta="-250" follows="left|top|right|bottom" height="250" 128 <panel border="true" bottom_delta="-250" follows="left|top|right|bottom" height="250"
131 label="Details" left="1" mouse_opaque="true" name="group_money_details_tab" 129 label="Details" left="1" mouse_opaque="true" name="group_money_details_tab"
132 width="398"> 130 width="398">
133 <icon bottom="1" height="161" image_name="darkgray.tga" left="1" name="sub_tab_bg"
134 width="402" />
135 <text_editor bg_readonly_color="0.784314, 0.819608, 0.8, 1" bottom="26" 131 <text_editor bg_readonly_color="0.784314, 0.819608, 0.8, 1" bottom="26"
136 embedded_items="false" follows="left|top|right|bottom" font="Monospace" 132 embedded_items="false" follows="left|top|right|bottom" font="Monospace"
137 height="216" is_unicode="false" left="8" max_length="4096" 133 height="216" is_unicode="false" left="8" max_length="4096"
@@ -151,9 +147,7 @@ provide information about the group&apos;s finances.
151 <panel border="true" bottom_delta="-250" follows="left|top|right|bottom" height="250" 147 <panel border="true" bottom_delta="-250" follows="left|top|right|bottom" height="250"
152 label="Sales" left="1" mouse_opaque="true" name="group_money_sales_tab" 148 label="Sales" left="1" mouse_opaque="true" name="group_money_sales_tab"
153 width="398"> 149 width="398">
154 <icon bottom="1" height="161" image_name="darkgray.tga" left="1" name="sub_tab_bg" 150 <text_editor bg_readonly_color="0.784314, 0.819608, 0.8, 1" bottom="26"
155 width="402" />
156 <text_editor bg_readonly_color="0.784314, 0.819608, 0.8, 1" bottom_delta="25"
157 embedded_items="false" follows="left|top|right|bottom" font="Monospace" 151 embedded_items="false" follows="left|top|right|bottom" font="Monospace"
158 height="216" is_unicode="false" left="8" max_length="4096" 152 height="216" is_unicode="false" left="8" max_length="4096"
159 mouse_opaque="true" name="group_money_sales_text" width="382" 153 mouse_opaque="true" name="group_money_sales_text" width="382"
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 4e00c66..7f0c0f7 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
@@ -27,9 +27,9 @@ the General tab.
27 Notices are kept for 30 days. Click the notice below you wish to view. 27 Notices are kept for 30 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.
29 </text> 29 </text>
30 <scroll_list background_visible="false" bottom_delta="-137" column_padding="0" 30 <scroll_list background_visible="true" bottom_delta="-137" column_padding="0"
31 draw_border="true" draw_heading="true" enabled="true" 31 draw_border="true" draw_heading="true" enabled="true"
32 fg_unselected_color="200,200,200,255" heading_font="SansSerifSmall" 32 heading_font="SansSerifSmall"
33 heading_height="14" height="109" left="7" mouse_opaque="true" 33 heading_height="14" height="109" left="7" mouse_opaque="true"
34 multi_select="false" name="notice_list" width="404"> 34 multi_select="false" name="notice_list" width="404">
35 <column label="" name="icon" width="16" /> 35 <column label="" name="icon" width="16" />
@@ -70,7 +70,7 @@ and you can&apos;t send a folder.
70 name="lbl3" v_pad="0" width="55"> 70 name="lbl3" v_pad="0" width="55">
71 Subject: 71 Subject:
72 </text> 72 </text>
73 <line_editor bevel_style="in" bg_readonly_color="0, 0, 0, 0" border_style="line" 73 <line_editor bevel_style="in" border_style="line"
74 border_thickness="1" bottom_delta="0" font="SansSerifSmall" height="16" 74 border_thickness="1" bottom_delta="0" font="SansSerifSmall" height="16"
75 is_unicode="false" left_delta="58" max_length="63" mouse_opaque="true" 75 is_unicode="false" left_delta="58" max_length="63" mouse_opaque="true"
76 name="create_subject" prevalidate="printable_not_pipe" width="264" /> 76 name="create_subject" prevalidate="printable_not_pipe" width="264" />
@@ -80,7 +80,7 @@ and you can&apos;t send a folder.
80 name="lbl4" v_pad="0" width="55"> 80 name="lbl4" v_pad="0" width="55">
81 Message: 81 Message:
82 </text> 82 </text>
83 <text_editor bg_readonly_color="0, 0, 0, 0" bottom_delta="-106" embedded_items="false" 83 <text_editor bottom_delta="-106" embedded_items="false"
84 font="SansSerifSmall" height="120" hide_scrollbar="true" is_unicode="false" 84 font="SansSerifSmall" height="120" hide_scrollbar="true" is_unicode="false"
85 left_delta="58" max_length="511" mouse_opaque="true" name="create_message" 85 left_delta="58" max_length="511" mouse_opaque="true" name="create_message"
86 width="346" word_wrap="true" /> 86 width="346" word_wrap="true" />
@@ -93,7 +93,7 @@ and you can&apos;t send a folder.
93 <line_editor bg_visible="false" border_visible="false" bottom_delta="-2" enabled="false" 93 <line_editor bg_visible="false" border_visible="false" bottom_delta="-2" enabled="false"
94 font="SansSerifSmall" height="16" is_unicode="false" left_delta="59" 94 font="SansSerifSmall" height="16" is_unicode="false" left_delta="59"
95 max_length="63" mouse_opaque="false" name="create_inventory_name" 95 max_length="63" mouse_opaque="false" name="create_inventory_name"
96 text_readonly_color="0.784, 0.819, 0.8, 1" width="211" /> 96 width="211" />
97 <icon bottom_delta="0" height="16" left_delta="0" mouse_opaque="false" 97 <icon bottom_delta="0" height="16" left_delta="0" mouse_opaque="false"
98 name="create_inv_icon" width="16" /> 98 name="create_inv_icon" width="16" />
99 <button bottom_delta="0" font="SansSerif" halign="center" height="20" 99 <button bottom_delta="0" font="SansSerif" halign="center" height="20"
@@ -130,21 +130,21 @@ and you can&apos;t send a folder.
130 name="lbl3" v_pad="0" visible="false" width="55"> 130 name="lbl3" v_pad="0" visible="false" width="55">
131 Subject: 131 Subject:
132 </text> 132 </text>
133 <line_editor bevel_style="in" bg_readonly_color="0, 0, 0, 0" border_style="line" 133 <line_editor bevel_style="in" border_style="line"
134 border_thickness="1" bottom_delta="0" enabled="false" font="SansSerifSmall" 134 border_thickness="1" bottom_delta="0" enabled="false" font="SansSerifSmall"
135 height="16" is_unicode="false" left_delta="58" max_length="63" 135 height="16" is_unicode="false" left_delta="58" max_length="63"
136 mouse_opaque="true" name="view_subject" 136 mouse_opaque="true" name="view_subject"
137 text_readonly_color="200,200,200, 255" visible="false" width="346" /> 137 visible="false" width="346" />
138 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 138 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
139 bottom_delta="-18" drop_shadow_visible="true" font="SansSerifSmall" 139 bottom_delta="-18" drop_shadow_visible="true" font="SansSerifSmall"
140 h_pad="0" halign="right" height="16" left="7" mouse_opaque="true" 140 h_pad="0" halign="right" height="16" left="7" mouse_opaque="true"
141 name="lbl4" v_pad="0" visible="false" width="55"> 141 name="lbl4" v_pad="0" visible="false" width="55">
142 Message: 142 Message:
143 </text> 143 </text>
144 <text_editor bg_readonly_color="0, 0, 0, 0" bottom_delta="-148" embedded_items="false" 144 <text_editor bottom_delta="-148" embedded_items="false"
145 enabled="false" font="SansSerifSmall" height="206" hide_scrollbar="true" 145 enabled="false" font="SansSerifSmall" height="206" hide_scrollbar="true"
146 is_unicode="false" left_delta="0" max_length="511" mouse_opaque="true" 146 is_unicode="false" left_delta="0" max_length="511" mouse_opaque="true"
147 name="view_message" text_readonly_color="200,200,200, 255" width="404" 147 name="view_message" width="404"
148 word_wrap="true" /> 148 word_wrap="true" />
149 <button bottom_delta="-24" font="SansSerif" halign="center" height="20" 149 <button bottom_delta="-24" font="SansSerif" halign="center" height="20"
150 label="Open Attachment" label_selected="Open Attachment" left="7" 150 label="Open Attachment" label_selected="Open Attachment" left="7"
@@ -152,7 +152,7 @@ and you can&apos;t send a folder.
152 <line_editor bg_visible="false" border_visible="false" bottom_delta="3" enabled="false" 152 <line_editor bg_visible="false" border_visible="false" bottom_delta="3" enabled="false"
153 font="SansSerifSmall" height="16" is_unicode="false" left="120" 153 font="SansSerifSmall" height="16" is_unicode="false" left="120"
154 max_length="63" mouse_opaque="false" name="view_inventory_name" 154 max_length="63" mouse_opaque="false" name="view_inventory_name"
155 text_readonly_color="0.784, 0.819, 0.8, 1" width="264" /> 155 width="264" />
156 <icon bottom_delta="0" height="16" left_delta="0" mouse_opaque="false" 156 <icon bottom_delta="0" height="16" left_delta="0" mouse_opaque="false"
157 name="view_inv_icon" width="16" /> 157 name="view_inv_icon" width="16" />
158 </panel> 158 </panel>
diff --git a/linden/indra/newview/skins/xui/en-us/panel_group_roles.xml b/linden/indra/newview/skins/xui/en-us/panel_group_roles.xml
index 925d224..bea5dc4 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_group_roles.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_group_roles.xml
@@ -61,9 +61,7 @@ execute the Ability.
61 name="roles_tab_container" tab_position="top" width="406"> 61 name="roles_tab_container" tab_position="top" width="406">
62 <panel border="true" bottom="0" height="164" label="Members" left="1" 62 <panel border="true" bottom="0" height="164" label="Members" left="1"
63 name="members_sub_tab" select="true" tool_tip="Members" width="406"> 63 name="members_sub_tab" select="true" tool_tip="Members" width="406">
64 <icon bottom="1" height="162" image_name="darkgray.tga" left="1" name="sub_tab_bg" 64 <line_editor bevel_style="in" border_style="line"
65 width="402" />
66 <line_editor bevel_style="in" bg_readonly_color="0, 0, 0, 0" border_style="line"
67 border_thickness="1" bottom="143" follows="left|top" font="SansSerifSmall" 65 border_thickness="1" bottom="143" follows="left|top" font="SansSerifSmall"
68 height="16" is_unicode="false" left="4" max_length="63" mouse_opaque="true" 66 height="16" is_unicode="false" left="4" max_length="63" mouse_opaque="true"
69 name="search_text" width="100" /> 67 name="search_text" width="100" />
@@ -74,8 +72,7 @@ execute the Ability.
74 width="80" /> 72 width="80" />
75 <name_list allow_calling_card_drop="false" background_visible="true" bottom_delta="-121" 73 <name_list allow_calling_card_drop="false" background_visible="true" bottom_delta="-121"
76 column_padding="0" draw_border="true" draw_heading="true" 74 column_padding="0" draw_border="true" draw_heading="true"
77 fg_disable_color="grey" fg_selected_color="black" 75 heading_font="SansSerifSmall"
78 fg_unselected_color="black" heading_font="SansSerifSmall"
79 heading_height="14" height="120" left="4" multi_select="true" 76 heading_height="14" height="120" left="4" multi_select="true"
80 name="member_list" width="396"> 77 name="member_list" width="396">
81 <column label="Member Name" name="name" width="136" /> 78 <column label="Member Name" name="name" width="136" />
@@ -91,13 +88,11 @@ execute the Ability.
91Select multiple Members by holding the Ctrl key and 88Select multiple Members by holding the Ctrl key and
92clicking on their names. 89clicking on their names.
93 </string> 90 </string>
94 <icon image_name="inv_folder_plain_closed.tga" name="power_folder_icon" /> 91 <icon image_name="inv_folder_plain_closed.tga" name="power_folder_icon" width="16" height="16" visible="false"/> <!-- Hiding this until we can figure out why it's not showing up in the right place. -BG -->
95 </panel> 92 </panel>
96 <panel background_visible="true" border="true" bottom="0" height="164" label="Roles" 93 <panel background_visible="true" border="true" bottom="0" height="164" label="Roles"
97 left="1" name="roles_sub_tab" width="398"> 94 left="1" name="roles_sub_tab" width="398">
98 <icon bottom="1" height="162" image_name="darkgray.tga" left="1" name="sub_tab_bg" 95 <line_editor bevel_style="in" border_style="line"
99 width="402" />
100 <line_editor bevel_style="in" bg_readonly_color="0, 0, 0, 0" border_style="line"
101 border_thickness="1" bottom="143" follows="left|top" font="SansSerifSmall" 96 border_thickness="1" bottom="143" follows="left|top" font="SansSerifSmall"
102 height="16" is_unicode="false" left="4" max_length="63" mouse_opaque="true" 97 height="16" is_unicode="false" left="4" max_length="63" mouse_opaque="true"
103 name="search_text" width="100" /> 98 name="search_text" width="100" />
@@ -108,8 +103,7 @@ clicking on their names.
108 width="80" /> 103 width="80" />
109 <scroll_list allow_calling_card_drop="false" background_visible="true" bottom_delta="-120" 104 <scroll_list allow_calling_card_drop="false" background_visible="true" bottom_delta="-120"
110 column_padding="0" draw_border="true" draw_heading="true" enabled="true" 105 column_padding="0" draw_border="true" draw_heading="true" enabled="true"
111 fg_disable_color="grey" fg_selected_color="black" 106 follows="left|top"
112 fg_unselected_color="black" follows="left|top"
113 heading_font="SansSerifSmall" heading_height="14" height="120" left="4" 107 heading_font="SansSerifSmall" heading_height="14" height="120" left="4"
114 mouse_opaque="true" multi_select="false" name="role_list" width="396"> 108 mouse_opaque="true" multi_select="false" name="role_list" width="396">
115 <column label="Role Name" name="name" width="126" /> 109 <column label="Role Name" name="name" width="126" />
@@ -129,18 +123,16 @@ including the Everyone and Owner Roles.
129 <string name="cant_delete_role"> 123 <string name="cant_delete_role">
130 The &apos;Everyone&apos; and &apos;Owners&apos; Roles are special and cannot be deleted. 124 The &apos;Everyone&apos; and &apos;Owners&apos; Roles are special and cannot be deleted.
131 </string> 125 </string>
132 <icon height="0" image_name="inv_folder_plain_closed.tga" name="power_folder_icon" 126 <icon height="16" image_name="inv_folder_plain_closed.tga" name="power_folder_icon"
133 width="0" /> 127 width="16" visible="false"/> <!-- Hiding this until we can figure out why it's not showing up in the right place. -BG -->
134 <icon height="0" image_name="checkbox_enabled_true.tga" name="power_all_have_icon" 128 <icon height="16" image_name="checkbox_enabled_true.tga" name="power_all_have_icon"
135 width="0" /> 129 width="16" visible="false"/> <!-- Hiding this until we can figure out why it's not showing up in the right place. -BG -->
136 <icon height="0" image_name="checkbox_enabled_false.tga" name="power_partial_icon" 130 <icon height="16" image_name="checkbox_enabled_false.tga" name="power_partial_icon"
137 width="0" /> 131 width="16" visible="false"/> <!-- Hiding this until we can figure out why it's not showing up in the right place. -BG -->
138 </panel> 132 </panel>
139 <panel background_visible="true" bg_alpha_color="red" border="true" bottom="0" 133 <panel background_visible="true" bg_alpha_color="red" border="true" bottom="0"
140 height="164" label="Abilities" left="1" name="actions_sub_tab" width="398"> 134 height="164" label="Abilities" left="1" name="actions_sub_tab" width="398">
141 <icon bottom="1" height="162" image_name="darkgray.tga" left="1" name="sub_tab_bg" 135 <line_editor bevel_style="in" border_style="line"
142 width="402" />
143 <line_editor bevel_style="in" bg_readonly_color="0, 0, 0, 0" border_style="line"
144 border_thickness="1" bottom="143" follows="left|top" font="SansSerifSmall" 136 border_thickness="1" bottom="143" follows="left|top" font="SansSerifSmall"
145 height="16" is_unicode="false" left="6" max_length="63" mouse_opaque="true" 137 height="16" is_unicode="false" left="6" max_length="63" mouse_opaque="true"
146 name="search_text" width="100" /> 138 name="search_text" width="100" />
@@ -151,8 +143,8 @@ including the Everyone and Owner Roles.
151 width="80" /> 143 width="80" />
152 <scroll_list allow_calling_card_drop="false" background_visible="true" bottom_delta="-134" 144 <scroll_list allow_calling_card_drop="false" background_visible="true" bottom_delta="-134"
153 column_padding="0" draw_border="true" draw_heading="false" 145 column_padding="0" draw_border="true" draw_heading="false"
154 draw_stripes="false" fg_disable_color="grey" fg_selected_color="black" 146 draw_stripes="false"
155 fg_unselected_color="black" follows="left|top" height="134" left="6" 147 follows="left|top" height="134" left="6"
156 mouse_opaque="true" multi_select="true" name="action_list" 148 mouse_opaque="true" multi_select="true" name="action_list"
157 search_column="1" tool_tip="Select an Ability to view more details." 149 search_column="1" tool_tip="Select an Ability to view more details."
158 width="392"> 150 width="392">
@@ -163,7 +155,7 @@ including the Everyone and Owner Roles.
163 Abilities allow Members in Roles to do specific 155 Abilities allow Members in Roles to do specific
164things in this group. There&apos;s a broad variety of Abilities. 156things in this group. There&apos;s a broad variety of Abilities.
165 </string> 157 </string>
166 <icon image_name="inv_folder_plain_closed.tga" name="power_folder_icon" /> 158 <icon image_name="inv_folder_plain_closed.tga" name="power_folder_icon" width="16" height="16" visible="false"/> <!-- Hiding this until we can figure out why it's not showing up in the right place. -BG -->
167 </panel> 159 </panel>
168 </tab_container> 160 </tab_container>
169 <panel border="false" bottom_delta="-235" height="215" left="7" name="members_footer" 161 <panel border="false" bottom_delta="-235" height="215" left="7" name="members_footer"
@@ -200,15 +192,15 @@ things in this group. There&apos;s a broad variety of Abilities.
200 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 192 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
201 bottom_delta="0" drop_shadow_visible="false" font="SansSerif" halign="left" 193 bottom_delta="0" drop_shadow_visible="false" font="SansSerif" halign="left"
202 height="16" left="150" name="static2" 194 height="16" left="150" name="static2"
203 text_readonly_color="0.57647, 0.66275, 0.83529" width="100"> 195 width="100">
204 Description 196 Description
205 </text> 197 </text>
206 <line_editor bevel_style="in" bg_readonly_color="0, 0, 0, 0" bg_visible="false" 198 <line_editor bevel_style="in" bg_visible="false"
207 border_drop_shadow_visible="false" border_style="line" border_thickness="1" 199 border_drop_shadow_visible="false" border_style="line" border_thickness="1"
208 border_visible="false" bottom_delta="-16" drop_shadow_visible="false" 200 border_visible="false" bottom_delta="-16" drop_shadow_visible="false"
209 follows="left|top" font="SansSerifSmall" height="16" is_unicode="false" 201 follows="left|top" font="SansSerifSmall" height="16" is_unicode="false"
210 left="0" max_length="20" mouse_opaque="true" name="role_name" 202 left="0" max_length="20" mouse_opaque="true" name="role_name"
211 text_readonly_color="0.57647, 0.66275, 0.83529" width="145"> 203 width="145">
212 Employees 204 Employees
213 </line_editor> 205 </line_editor>
214 <text bottom_delta="-16" font="SansSerif" halign="left" height="16" left="0" 206 <text bottom_delta="-16" font="SansSerif" halign="left" height="16" left="0"
@@ -220,14 +212,14 @@ things in this group. There&apos;s a broad variety of Abilities.
220 bottom_delta="-16" drop_shadow_visible="false" follows="left|top" 212 bottom_delta="-16" drop_shadow_visible="false" follows="left|top"
221 font="SansSerifSmall" height="16" is_unicode="false" left="0" 213 font="SansSerifSmall" height="16" is_unicode="false" left="0"
222 max_length="20" mouse_opaque="true" name="role_title" 214 max_length="20" mouse_opaque="true" name="role_title"
223 text_readonly_color="0.57647, 0.66275, 0.83529" width="145"> 215 width="145">
224 (waiting) 216 (waiting)
225 </line_editor> 217 </line_editor>
226 <text_editor bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 218 <text_editor bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
227 bottom_delta="0" drop_shadow_visible="false" font="SansSerifSmall" 219 bottom_delta="0" drop_shadow_visible="false" font="SansSerifSmall"
228 h_pad="0" halign="left" height="48" hide_scrollbar="true" left="150" 220 h_pad="0" halign="left" height="48" hide_scrollbar="true" left="150"
229 max_length="254" name="role_description" 221 max_length="254" name="role_description"
230 text_readonly_color="0.57647, 0.66275, 0.83529" v_pad="0" width="254" 222 v_pad="0" width="254"
231 word_wrap="true"> 223 word_wrap="true">
232 (waiting) 224 (waiting)
233 </text_editor> 225 </text_editor>
@@ -265,10 +257,10 @@ things in this group. There&apos;s a broad variety of Abilities.
265 name="static" width="100"> 257 name="static" width="100">
266 Description 258 Description
267 </text> 259 </text>
268 <text_editor bevel_style="in" bg_readonly_color="0,0,0,0.3" bottom_delta="-48" 260 <text_editor bevel_style="in" bottom_delta="-48"
269 enabled="false" font="SansSerifSmall" h_pad="0" halign="left" height="48" 261 enabled="false" font="SansSerifSmall" h_pad="0" halign="left" height="48"
270 hide_scrollbar="true" left="0" max_length="512" name="action_description" 262 hide_scrollbar="true" left="0" max_length="512" name="action_description"
271 text_readonly_color="white" v_pad="0" width="404" word_wrap="true"> 263 v_pad="0" width="404" word_wrap="true">
272 This Ability is &apos;Eject Members from this Group&apos;. Only an Owner can eject another Owner. 264 This Ability is &apos;Eject Members from this Group&apos;. Only an Owner can eject another Owner.
273 </text_editor> 265 </text_editor>
274 <text bottom_delta="-26" font="SansSerif" halign="left" height="16" left="0" 266 <text bottom_delta="-26" font="SansSerif" halign="left" height="16" left="0"
diff --git a/linden/indra/newview/skins/xui/en-us/panel_group_voting.xml b/linden/indra/newview/skins/xui/en-us/panel_group_voting.xml
index 1ab0ca9..e044f34 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_group_voting.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_group_voting.xml
@@ -9,11 +9,11 @@ the proper powers, you can create proposals,
9vote on open proposals, and view old proposals. 9vote on open proposals, and view old proposals.
10 </string> 10 </string>
11 <panel background_opaque="true" background_visible="true" bevel_style="in" 11 <panel background_opaque="true" background_visible="true" bevel_style="in"
12 bg_alpha_color="blue" bg_opaque_color="0,0,0,0.3" border="true" 12 bg_alpha_color="blue" border="true"
13 bottom_delta="-210" follows="left|top" height="170" left="7" 13 bottom_delta="-225" follows="left|top" height="170" left="7"
14 mouse_opaque="false" name="open_proposals_container" width="404" /> 14 mouse_opaque="false" name="open_proposals_container" width="404" />
15 <panel background_opaque="true" background_visible="true" bevel_style="in" 15 <panel background_opaque="true" background_visible="true" bevel_style="in"
16 bg_alpha_color="blue" bg_opaque_color="0,0,0,0.3" border="true" bottom="7" 16 bg_alpha_color="blue" border="true" bottom="7"
17 follows="left|top" height="175" left="7" mouse_opaque="false" 17 follows="left|top" height="175" left="7" mouse_opaque="false"
18 name="voting_history_container" width="404" /> 18 name="voting_history_container" width="404" />
19 <button bottom="-24" font="SansSerif" halign="center" height="16" label="?" left="391" 19 <button bottom="-24" font="SansSerif" halign="center" height="16" label="?" left="391"
@@ -57,8 +57,7 @@ vote on open proposals, and view old proposals.
57 border_visible="false" bottom="300" drop_shadow_visible="false" 57 border_visible="false" bottom="300" drop_shadow_visible="false"
58 embedded_items="false" follows="left|top" font="SansSerif" height="90" 58 embedded_items="false" follows="left|top" font="SansSerif" height="90"
59 is_unicode="false" left="11" max_length="254" mouse_opaque="true" 59 is_unicode="false" left="11" max_length="254" mouse_opaque="true"
60 name="proposal_text" text_readonly_color="0.57647, 0.66275, 0.83529" 60 name="proposal_text" width="289" word_wrap="true" />
61 width="289" word_wrap="true" />
62 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center" 61 <button bottom_delta="0" follows="left|top" font="SansSerif" halign="center"
63 height="20" label="View List" label_selected="View List" left="304" 62 height="20" label="View List" label_selected="View List" left="304"
64 mouse_opaque="true" name="btn_view_proposal_list" width="101" /> 63 mouse_opaque="true" name="btn_view_proposal_list" width="101" />
@@ -180,7 +179,7 @@ vote on open proposals, and view old proposals.
180 follows="left|top" font="SansSerif" h_pad="0" height="126" 179 follows="left|top" font="SansSerif" h_pad="0" height="126"
181 hide_scrollbar="true" is_unicode="false" left="10" max_length="1024" 180 hide_scrollbar="true" is_unicode="false" left="10" max_length="1024"
182 mouse_opaque="true" name="vote_text" 181 mouse_opaque="true" name="vote_text"
183 text_readonly_color="0.57647, 0.66275, 0.83529" text_wrap="true" v_pad="0" 182 text_wrap="true" v_pad="0"
184 width="396" word_wrap="false" /> 183 width="396" word_wrap="false" />
185 <button bottom_delta="-25" follows="top" font="SansSerif" halign="center" height="20" 184 <button bottom_delta="-25" follows="top" font="SansSerif" halign="center" height="20"
186 label="View List" label_selected="View List" left="287" mouse_opaque="true" 185 label="View List" label_selected="View List" left="287" mouse_opaque="true"
diff --git a/linden/indra/newview/skins/xui/en-us/panel_land_covenant.xml b/linden/indra/newview/skins/xui/en-us/panel_land_covenant.xml
index f2e36d3..3d5ee66 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_land_covenant.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_land_covenant.xml
@@ -1,49 +1,49 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel border="true" bottom="0" follows="top|left" height="220" left="0" 2<panel border="true" bottom="0" follows="top|left" height="220" left="0"
3 name="Covenant" title="Covenant" width="480"> 3 name="Covenant" title="Covenant" width="480">
4 <text bg_readonly_color="clear" bottom_delta="-5" follows="left|top" 4 <text bottom_delta="-5" follows="left|top"
5 font="SansSerifSmall" height="20" left="180" name="covenant_timestamp_text" 5 font="SansSerifSmall" height="20" left="180" name="covenant_timestamp_text"
6 text_readonly_color="white" width="250" /> 6 width="250" />
7 <text bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="20" 7 <text bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="20"
8 left="10" name="region_name_lbl" width="100"> 8 left="10" name="region_name_lbl" width="100">
9 Region: 9 Region:
10 </text> 10 </text>
11 <text bg_readonly_color="clear" bottom_delta="0" follows="left|top" 11 <text bottom_delta="0" follows="left|top"
12 font="SansSerifSmall" height="20" left="120" name="region_name_text" 12 font="SansSerifSmall" height="20" left="120" name="region_name_text"
13 text_readonly_color="white" width="150"> 13 width="150">
14 (unknown) 14 (unknown)
15 </text> 15 </text>
16 <text bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="20" 16 <text bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="20"
17 left="10" name="estate_name_lbl" width="100"> 17 left="10" name="estate_name_lbl" width="100">
18 Estate: 18 Estate:
19 </text> 19 </text>
20 <text bg_readonly_color="clear" bottom_delta="0" follows="left|top" 20 <text bottom_delta="0" follows="left|top"
21 font="SansSerifSmall" height="20" left="120" name="estate_name_text" 21 font="SansSerifSmall" height="20" left="120" name="estate_name_text"
22 text_readonly_color="white" width="150"> 22 width="150">
23 (unknown) 23 (unknown)
24 </text> 24 </text>
25 <text bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="20" 25 <text bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="20"
26 left="10" name="estate_owner_lbl" width="100"> 26 left="10" name="estate_owner_lbl" width="100">
27 Estate Owner: 27 Estate Owner:
28 </text> 28 </text>
29 <text bg_readonly_color="clear" bottom_delta="0" follows="left|top" 29 <text bottom_delta="0" follows="left|top"
30 font="SansSerifSmall" height="20" left="120" name="estate_owner_text" 30 font="SansSerifSmall" height="20" left="120" name="estate_owner_text"
31 text_readonly_color="white" width="150"> 31 width="150">
32 (unknown) 32 (unknown)
33 </text> 33 </text>
34 <text bg_readonly_color="clear" bottom_delta="-20" follows="left|top" 34 <text bottom_delta="-20" follows="left|top"
35 font="SansSerif" height="20" left="60" name="resellable_clause" 35 font="SansSerif" height="20" left="60" name="resellable_clause"
36 text_readonly_color="white" width="300"> 36 width="300">
37 Purchased land in this region may or may not be resold. 37 Purchased land in this region may or may not be resold.
38 </text> 38 </text>
39 <text bg_readonly_color="clear" bottom_delta="-20" follows="left|top" 39 <text bottom_delta="-20" follows="left|top"
40 font="SansSerif" height="20" left="60" name="changeable_clause" 40 font="SansSerif" height="20" left="60" name="changeable_clause"
41 text_readonly_color="white" width="375"> 41 width="375">
42 Purchased land in this region may or may not be joined or subdivided. 42 Purchased land in this region may or may not be joined or subdivided.
43 </text> 43 </text>
44 <text_editor bg_readonly_color="clear" bottom_delta="-200" enabled="false" 44 <text_editor bottom_delta="-200" enabled="false"
45 follows="left|top" font="SansSerifSmall" height="200" left="15" 45 follows="left|top" font="SansSerifSmall" height="200" left="15"
46 max_length="65535" name="covenant_editor" text_readonly_color="white" 46 max_length="65535" name="covenant_editor"
47 width="425" word_wrap="true" /> 47 width="425" word_wrap="true" />
48 <string name="can_resell"> 48 <string name="can_resell">
49 string land in this region may be resold. 49 string land in this region may be resold.
diff --git a/linden/indra/newview/skins/xui/en-us/panel_login.xml b/linden/indra/newview/skins/xui/en-us/panel_login.xml
index 8d2a658..b5f276d 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_login.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_login.xml
@@ -13,43 +13,43 @@
13 </string> 13 </string>
14 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 14 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
15 bottom="54" drop_shadow_visible="true" follows="left|bottom" 15 bottom="54" drop_shadow_visible="true" follows="left|bottom"
16 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 16 font="SansSerif" h_pad="0" halign="left" height="16"
17 left="32" mouse_opaque="true" name="first_name_text" v_pad="0" width="120"> 17 left="32" mouse_opaque="true" name="first_name_text" v_pad="0" width="120">
18 First Name: 18 First Name:
19 </text> 19 </text>
20 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="-24" 20 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="-24"
21 follows="left|bottom" font="SansSerif" handle_edit_keys_directly="true" 21 follows="left|bottom" font="SansSerif" handle_edit_keys_directly="true"
22 height="20" hidden="false" left="32" max_length="31" mouse_opaque="true" 22 height="20" left="32" max_length="31" mouse_opaque="true"
23 name="first_name_edit" select_all_on_focus_received="true" width="120" /> 23 name="first_name_edit" select_all_on_focus_received="true" width="120" />
24 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 24 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
25 bottom="54" drop_shadow_visible="true" follows="left|bottom" 25 bottom="54" drop_shadow_visible="true" follows="left|bottom"
26 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 26 font="SansSerif" h_pad="0" halign="left" height="16"
27 left="164" mouse_opaque="true" name="last_name_text" v_pad="0" width="120"> 27 left="164" mouse_opaque="true" name="last_name_text" v_pad="0" width="120">
28 Last Name: 28 Last Name:
29 </text> 29 </text>
30 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="-24" 30 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="-24"
31 follows="left|bottom" font="SansSerif" handle_edit_keys_directly="true" 31 follows="left|bottom" font="SansSerif" handle_edit_keys_directly="true"
32 height="20" hidden="false" left="164" max_length="31" mouse_opaque="true" 32 height="20" left="164" max_length="31" mouse_opaque="true"
33 name="last_name_edit" select_all_on_focus_received="true" width="120" /> 33 name="last_name_edit" select_all_on_focus_received="true" width="120" />
34 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 34 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
35 bottom="54" drop_shadow_visible="true" follows="left|bottom" 35 bottom="54" drop_shadow_visible="true" follows="left|bottom"
36 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 36 font="SansSerif" h_pad="0" halign="left" height="16"
37 left="296" mouse_opaque="true" name="password_text" v_pad="0" width="120"> 37 left="296" mouse_opaque="true" name="password_text" v_pad="0" width="120">
38 Password: 38 Password:
39 </text> 39 </text>
40 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="-24" 40 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="-24"
41 follows="left|bottom" font="SansSerif" handle_edit_keys_directly="true" 41 follows="left|bottom" font="SansSerif" handle_edit_keys_directly="true"
42 height="20" hidden="false" left="296" max_length="16" mouse_opaque="true" 42 height="20" left="296" max_length="16" mouse_opaque="true"
43 name="password_edit" select_all_on_focus_received="true" width="120" /> 43 name="password_edit" select_all_on_focus_received="true" width="120" />
44 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 44 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
45 bottom="10" drop_shadow_visible="true" follows="left|bottom" 45 bottom="10" drop_shadow_visible="true" follows="left|bottom"
46 font="SansSerif" h_pad="0" halign="left" height="16" hidden="false" 46 font="SansSerif" h_pad="0" halign="left" height="16"
47 left="32" mouse_opaque="true" name="start_location_text" v_pad="0" 47 left="32" mouse_opaque="true" name="start_location_text" v_pad="0"
48 width="95"> 48 width="95">
49 Start Location: 49 Start Location:
50 </text> 50 </text>
51 <combo_box allow_text_entry="true" bottom="8" follows="left|bottom" height="18" 51 <combo_box allow_text_entry="true" bottom="8" follows="left|bottom" height="18"
52 hidden="false" left_delta="97" max_chars="128" mouse_opaque="true" 52 left_delta="97" max_chars="128" mouse_opaque="true"
53 name="start_location_combo" width="155"> 53 name="start_location_combo" width="155">
54 <combo_item name="MyHome" value="My Home"> 54 <combo_item name="MyHome" value="My Home">
55 My Home 55 My Home
@@ -62,36 +62,37 @@
62 </combo_item> 62 </combo_item>
63 </combo_box> 63 </combo_box>
64 <check_box bottom="10" follows="left|bottom" font="SansSerifSmall" height="16" 64 <check_box bottom="10" follows="left|bottom" font="SansSerifSmall" height="16"
65 hidden="false" initial_value="false" label="Remember password" 65 initial_value="false" label="Remember password"
66 left_delta="165" mouse_opaque="true" name="remember_check" width="138" /> 66 left_delta="165" mouse_opaque="true" name="remember_check" width="138" />
67 <button bottom="28" follows="left|bottom" font="SansSerif" halign="center" height="24" 67 <button bottom="28" follows="left|bottom" font="SansSerif" halign="center"
68 hidden="false" label="Connect" label_selected="Connect" left="440" 68 height="24" label="Connect" label_selected="Connect"
69 mouse_opaque="true" name="connect_btn" scale_image="TRUE" width="120" /> 69 left="440" mouse_opaque="true" name="connect_btn" scale_image="TRUE"
70 <button bottom="28" follows="left|bottom" font="SansSerif" halign="center" height="24" 70 width="120" />
71 hidden="false" label="Quit" label_selected="Quit" left="572" 71 <button bottom="28" follows="left|bottom" font="SansSerif" halign="center"
72 height="24" label="Quit" label_selected="Quit" left="572"
72 mouse_opaque="true" name="quit_btn" scale_image="TRUE" width="120" /> 73 mouse_opaque="true" name="quit_btn" scale_image="TRUE" width="120" />
73 <combo_box allow_text_entry="true" bottom="32" follows="left|bottom" height="18" 74 <combo_box allow_text_entry="true" bottom="32" follows="left|bottom" height="18"
74 hidden="false" left_delta="135" max_chars="20" mouse_opaque="true" 75 left_delta="135" max_chars="20" mouse_opaque="true"
75 name="server_combo" width="120" /> 76 name="server_combo" width="120" />
76 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 77 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
77 bottom="30" drop_shadow_visible="true" follows="right|bottom" 78 bottom="42" drop_shadow_visible="true" follows="right|bottom"
78 font="SansSerifSmall" h_pad="0" halign="right" height="12" hidden="false" 79 font="SansSerifSmall" h_pad="0" halign="right" height="12"
79 hover="true" left="-202" mouse_opaque="true" name="channel_text" v_pad="0" 80 left="-210" mouse_opaque="true" name="channel_text" v_pad="0" width="200"
80 width="200"> 81 hover="true">
81 [Viewer Channel Name] 82 [Viewer Channel Name]
82 </text> 83 </text>
83 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 84 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
84 bottom="18" drop_shadow_visible="true" follows="right|bottom" 85 bottom="30" drop_shadow_visible="true" follows="right|bottom"
85 font="SansSerifSmall" h_pad="0" halign="right" height="12" hidden="false" 86 font="SansSerifSmall" h_pad="0" halign="right" height="12"
86 hover="true" left="-102" mouse_opaque="true" name="version_text" v_pad="0" 87 left="-110" mouse_opaque="true" name="version_text" v_pad="0" width="100"
87 width="100"> 88 hover="true">
88 1.23.4 (5) 89 1.23.4 (5)
89 </text> 90 </text>
90 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 91 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
91 bottom="2" drop_shadow_visible="true" follows="right|bottom" 92 bottom="10" drop_shadow_visible="true" follows="right|bottom"
92 font="SansSerifSmall" h_pad="0" halign="right" height="12" hidden="false" 93 font="SansSerifSmall" h_pad="0" halign="right" height="12"
93 hover="true" left="-172" mouse_opaque="true" name="forgot_password_text" 94 left="-180" mouse_opaque="true" name="forgot_password_text" v_pad="0" width="170"
94 v_pad="0" width="170"> 95 hover="true">
95 Forgot your password? 96 Forgot your password?
96 </text> 97 </text>
97</panel> 98</panel>
diff --git a/linden/indra/newview/skins/xui/en-us/panel_master_volume.xml b/linden/indra/newview/skins/xui/en-us/panel_master_volume.xml
index 80ef984..27bace7 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_master_volume.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_master_volume.xml
@@ -1,7 +1,7 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel bg_visible="false" border="false" border_visible="false" bottom="-34" 2<panel bg_visible="false" border="false" border_visible="false" bottom="-34"
3 name="master_volume"> 3 name="master_volume">
4 <button bottom="-22" height="22" image_overlay="icn-overlay_volume-panel.tga" label="" 4 <button bottom="-22" height="22" label=""
5 left="2" name="volume" toggle="true" 5 left="2" name="volume" toggle="true"
6 tool_tip="Master Volume Control, click for volume settings" width="28" /> 6 tool_tip="Master Volume Control, click for volume settings" width="28" />
7 <volume_slider bottom="-20" control_name="AudioLevelMaster" height="17" increment="0.05" 7 <volume_slider bottom="-20" control_name="AudioLevelMaster" height="17" increment="0.05"
diff --git a/linden/indra/newview/skins/xui/en-us/panel_media_controls.xml b/linden/indra/newview/skins/xui/en-us/panel_media_controls.xml
index 9a39f0e..fe392a6 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_media_controls.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_media_controls.xml
@@ -1,62 +1,76 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel bg_visible="false" border="false" border_visible="false" bottom="2" 2<panel bg_visible="false" border="false" border_visible="false" bottom="1"
3 enabled="true" follows="right|bottom" height="20" left="0" 3 enabled="true" follows="right|bottom" height="20" left="0"
4 name="media_controls" width="250"> 4 name="media_controls" width="220">
5 <icon bottom="-22" enabled="true" follows="left|top" height="22" hidden="false" 5 <icon bottom="-18" enabled="true" follows="left|top" height="14"
6 image_name="icn_music.tga" label="" left_delta="2" mouse_opaque="true" 6 image_name="icn_label_music.tga" label="" left_delta="6" mouse_opaque="true"
7 name="music_icon" scale_image="true" tool_tip="Play/pause streaming music" 7 name="music_icon" scale_image="true" tool_tip="Play/pause streaming music"
8 width="20" /> 8 width="14" />
9 <button bottom="-22" enabled="true" follows="left|top" height="22" 9 <button bottom="-21" enabled="true" follows="left|top" height="20"
10 image_disabled="icn_media-play_disabled.tga" 10 image_overlay="icn_play.tga"
11 image_selected="icn_media-play_active.tga" 11 image_unselected="flyout_btn_left.tga"
12 image_unselected="icn_media-play_enabled.tga" label="" left_delta="22" 12 image_selected="flyout_btn_left_selected.tga"
13 image_disabled="flyout_btn_left_disabled.tga"
14 label="" left_delta="16"
13 mouse_opaque="true" name="music_play" scale_image="true" toggle="false" 15 mouse_opaque="true" name="music_play" scale_image="true" toggle="false"
14 tool_tip="Play/pause streaming music" width="20" /> 16 tool_tip="Play/pause streaming music" width="20" />
15 <button bottom="-22" enabled="false" follows="left|top" height="22" hidden="false" 17 <button bottom="-21" enabled="false" follows="left|top" height="20"
16 image_disabled="icn_media-pause_disabled.tga" 18 image_overlay="icn_pause.tga"
17 image_selected="icn_media-pause_active.tga" 19 image_unselected="flyout_btn_left.tga"
18 image_unselected="icn_media-pause_enabled.tga" label="" left_delta="0" 20 image_selected="flyout_btn_left_selected.tga"
21 image_disabled="flyout_btn_left_disabled.tga"
22 label="" left_delta="0"
19 mouse_opaque="true" name="music_pause" scale_image="true" toggle="false" 23 mouse_opaque="true" name="music_pause" scale_image="true" toggle="false"
20 tool_tip="Pause streaming music" width="20" /> 24 tool_tip="Pause streaming music" width="20" />
21 <button bottom="-22" enabled="true" follows="left|top" height="22" 25 <button bottom="-21" enabled="true" follows="left|top" height="20"
22 image_disabled="icn_media-stop_disabled.tga" 26 image_overlay="icn_stop.tga"
23 image_selected="icn_media-stop_active.tga" 27 image_unselected="flyout_btn_right.tga"
24 image_unselected="icn_media-stop_enabled.tga" label="" left_delta="20" 28 image_selected="flyout_btn_right_selected.tga"
29 image_disabled="flyout_btn_right_disabled.tga"
30 label="" left_delta="20"
25 mouse_opaque="true" name="music_stop" scale_image="true" toggle="false" 31 mouse_opaque="true" name="music_stop" scale_image="true" toggle="false"
26 tool_tip="Stop streaming music" width="20" /> 32 tool_tip="Stop streaming music" width="20" />
27 <icon bottom="-22" enabled="true" follows="left|top" height="22" hidden="false" 33 <icon bottom="-18" enabled="true" follows="left|top" height="14"
28 image_name="icn_media.tga" label="" left_delta="22" mouse_opaque="true" 34 image_name="icn_label_media.tga"
35 label="" left_delta="22" mouse_opaque="true"
29 name="media_icon" scale_image="true" tool_tip="Play/pause streaming music" 36 name="media_icon" scale_image="true" tool_tip="Play/pause streaming music"
30 width="20" /> 37 width="17" />
31 <button bottom="-22" enabled="true" follows="left|top" height="22" hidden="false" 38 <button bottom="-21" enabled="true" follows="left|top" height="20"
32 image_disabled="icn_media-play_disabled.tga" 39 image_overlay="icn_play.tga"
33 image_selected="icn_media-play_active.tga" 40 image_unselected="flyout_btn_left.tga"
34 image_unselected="icn_media-play_enabled.tga" label="" left_delta="22" 41 image_selected="flyout_btn_left_selected.tga"
42 image_disabled="flyout_btn_left_disabled.tga"
43 label="" left_delta="19"
35 mouse_opaque="true" name="media_play" scale_image="true" toggle="false" 44 mouse_opaque="true" name="media_play" scale_image="true" toggle="false"
36 tool_tip="Play/pause streaming music" width="20" /> 45 tool_tip="Play/pause streaming music" width="20" />
37 <button bottom="-22" enabled="false" follows="left|top" height="22" hidden="false" 46 <button bottom="-21" enabled="false" follows="left|top" height="20"
38 image_disabled="icn_media-pause_disabled.tga" 47 image_overlay="icn_pause.tga"
39 image_selected="icn_media-pause_active.tga" 48 image_unselected="flyout_btn_left.tga"
40 image_unselected="icn_media-pause_enabled.tga" label="" left_delta="0" 49 image_selected="flyout_btn_left_selected.tga"
50 image_disabled="flyout_btn_left_disabled.tga"
51 label="" left_delta="0"
41 mouse_opaque="true" name="media_pause" scale_image="true" toggle="false" 52 mouse_opaque="true" name="media_pause" scale_image="true" toggle="false"
42 tool_tip="Pause streaming media" width="20" /> 53 tool_tip="Pause streaming media" width="20" />
43 <button bottom="-22" enabled="true" follows="left|top" height="22" hidden="false" 54 <button bottom="-21" enabled="true" follows="left|top" height="20"
44 image_disabled="icn_media-stop_disabled.tga" 55 image_overlay="icn_stop.tga"
45 image_selected="icn_media-stop_active.tga" 56 image_unselected="flyout_btn_right.tga"
46 image_unselected="icn_media-stop_enabled.tga" label="" left_delta="20" 57 image_selected="flyout_btn_right_selected.tga"
58 image_disabled="flyout_btn_right_disabled.tga"
59 label="" left_delta="20"
47 mouse_opaque="true" name="media_stop" scale_image="true" toggle="false" 60 mouse_opaque="true" name="media_stop" scale_image="true" toggle="false"
48 tool_tip="Stop streaming media" width="20" /> 61 tool_tip="Stop streaming media" width="20" />
49 <volume_slider bottom="-20" control_name="AudioLevelMaster" height="22" increment="0.05" 62 <volume_slider bottom="-23" control_name="AudioLevelMaster" height="22" increment="0.05"
50 initial_val="0.5" left_delta="20" max_val="1" min_val="0" 63 initial_val="0.5" left_delta="20" max_val="1" min_val="0"
51 mouse_opaque="true" name="volume_slider" tool_tip="Master Volume" 64 mouse_opaque="true" name="volume_slider" tool_tip="Master Volume"
52 width="60" /> 65 width="56" />
53 <button bottom="-20" control_name="MuteAudio" height="20" 66 <button bottom="-19" control_name="MuteAudio" height="20"
54 image_selected="icn_speaker-muted_dark.tga" 67 image_selected="icn_speaker-muted_dark.tga"
55 image_unselected="icn_speaker_dark.tga" label="" left_delta="60" 68 image_unselected="icn_speaker_dark.tga" label="" left_delta="56"
56 name="mute_master" toggle="true" tool_tip="Master Mute" width="25" /> 69 name="mute_master" toggle="true" tool_tip="Master Mute" width="25" />
57 <button bottom="-22" control_name="ShowVolumeSettingsPopup" height="22" label="" 70 <button bottom="-21" control_name="ShowVolumeSettingsPopup" height="20" label=""
58 left_delta="25" name="expand" scale_image="true" toggle="true" 71 left_delta="19" name="expand" scale_image="true" toggle="true"
59 tool_tip="Adjust individual volume levels" width="22" /> 72 tool_tip="Adjust individual volume levels" width="20" />
73
60 <string name="play_label"> 74 <string name="play_label">
61 Play 75 Play
62 </string> 76 </string>
diff --git a/linden/indra/newview/skins/xui/en-us/panel_media_remote.xml b/linden/indra/newview/skins/xui/en-us/panel_media_remote.xml
index 8f37b89..86c977d 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_media_remote.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_media_remote.xml
@@ -1,7 +1,7 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel bg_visible="false" border="false" border_visible="false" bottom="1" 2<panel bg_visible="false" border="false" border_visible="false" bottom="0"
3 enabled="true" follows="right|bottom" height="20" left="0" 3 enabled="true" follows="right|bottom" height="20" left="0"
4 name="media_remote" use_bounding_rect="true" width="250"> 4 name="media_remote" use_bounding_rect="true" width="220">
5 <panel bottom="0" filename="panel_bg_tab.xml" height="22" left="0" width="250" /> 5 <panel bottom="1" filename="panel_bg_tab.xml" height="22" left="0" width="220" />
6 <panel bottom="0" filename="panel_media_controls.xml" height="20" left="0" width="250" /> 6 <panel bottom="3" filename="panel_media_controls.xml" height="20" left="0" width="220" />
7</panel> 7</panel>
diff --git a/linden/indra/newview/skins/xui/en-us/panel_media_remote_expanded.xml b/linden/indra/newview/skins/xui/en-us/panel_media_remote_expanded.xml
index 147497c..3c3f8b1 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_media_remote_expanded.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_media_remote_expanded.xml
@@ -1,9 +1,33 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel bg_visible="false" border="false" border_visible="false" bottom="1" 2<panel bg_visible="false" border="false" border_visible="false" bottom="1"
3 follows="right|bottom" height="185" left="0" name="media_remote" 3 follows="right|bottom" height="185" left="0" name="media_remote"
4 use_bounding_rect="true" width="250"> 4 use_bounding_rect="true" width="220">
5 <panel bottom="0" filename="panel_bg_tab.xml" height="187" left="0" width="250" /> 5 <panel bottom="0" filename="panel_bg_tab.xml" height="187" left="0" width="220" />
6 <panel border="false" bottom="20" filename="panel_audio.xml" height="160" 6 <panel border="false" bottom="22" filename="panel_audio.xml" height="160"
7 label="Audio &amp; Video" name="Volume Panel" width="250" /> 7 label="Audio &amp; Video" name="Volume Panel" width="220" />
8 <panel bottom_delta="-10" filename="panel_media_controls.xml" left="0" /> 8 <panel bottom_delta="-10" filename="panel_media_controls.xml" left="0" />
9 <string name="play_label">
10 Play
11 </string>
12 <string name="stop_label">
13 Stop
14 </string>
15 <string name="pause_label">
16 Pause
17 </string>
18 <string name="default_tooltip_label">
19 No Media Specified
20 </string>
21 <string name="media_hidden_label">
22 (URL hidden by parcel owner)
23 </string>
24 <string name="media_icon_tooltip_web">
25 This location displays content from the World Wide Web. Click the Play button to display Web content.
26 </string>
27 <string name="media_icon_tooltip_movie">
28 This location displays Video content. Click the Play button to play the video.
29 </string>
30 <string name="media_play_tooltip">
31 Display Web content at this location.
32 </string>
9</panel> 33</panel>
diff --git a/linden/indra/newview/skins/xui/en-us/panel_music_remote.xml b/linden/indra/newview/skins/xui/en-us/panel_music_remote.xml
deleted file mode 100644
index 6f8f3db..0000000
--- a/linden/indra/newview/skins/xui/en-us/panel_music_remote.xml
+++ /dev/null
@@ -1,23 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel bg_visible="false" border="false" border_visible="false" bottom="-34"
3 enabled="true" follows="left|top" mouse_opaque="true" name="music_remote">
4 <icon bottom="-19" height="16" image_name="music_icon.tga" left="5" name="music_icon"
5 width="16" />
6 <button bottom="-20" enabled="false" follows="left|top" font="SansSerif"
7 halign="center" height="17" image_selected="button_anim_stop_selected.tga"
8 image_unselected="button_anim_stop.tga" label="" label_selected=""
9 left_delta="25" mouse_opaque="true" name="music_stop" scale_image="true"
10 tool_tip="Stop media" width="17" />
11 <button bottom="-20" enabled="true" follows="left|top" font="SansSerif" halign="center"
12 height="17" image_selected="button_anim_play_selected.tga"
13 image_unselected="button_anim_play.tga" label="" label_selected=""
14 left_delta="17" mouse_opaque="true" name="music_play" scale_image="true"
15 tool_tip="Play media stream" width="17" />
16 <button bottom="-20" enabled="false" follows="left|top" font="SansSerif"
17 halign="center" height="17" image_disabled="button_disabled_32x128.tga"
18 image_disabled_selected="button_disabled_32x128.tga"
19 image_selected="button_anim_pause_selected.tga"
20 image_unselected="button_anim_pause.tga" label="" label_selected=""
21 left_delta="0" mouse_opaque="true" name="music_pause" scale_image="true"
22 tool_tip="Pause media stream" width="17" />
23</panel>
diff --git a/linden/indra/newview/skins/xui/en-us/panel_overlaybar.xml b/linden/indra/newview/skins/xui/en-us/panel_overlaybar.xml
index defefde..bcd7bbc 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_overlaybar.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_overlaybar.xml
@@ -1,12 +1,12 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel follows="left|right|bottom|top" height="200" left="-1" mouse_opaque="false" 2<panel follows="left|right|bottom|top" height="200" left="-1" mouse_opaque="false"
3 name="overlay" use_bounding_rect="true" width="728"> 3 name="overlay" use_bounding_rect="true" width="728">
4 <layout_stack bottom="0" follows="left|right|bottom" height="200" left="1" 4 <layout_stack bottom="0" follows="left|right|bottom" height="200" left="0"
5 mouse_opaque="false" name="overlay_layout_panel" orientation="horizontal" 5 mouse_opaque="false" name="overlay_layout_panel" orientation="horizontal"
6 right="-1" use_bounding_rect="true"> 6 right="-1" use_bounding_rect="true">
7 <layout_panel auto_resize="true" bottom="0" left="0" min_width="420" mouse_opaque="false" 7 <layout_panel auto_resize="true" bottom="0" left="0" min_width="420" mouse_opaque="false"
8 use_bounding_rect="true" user_resize="false" width="420"> 8 use_bounding_rect="true" user_resize="false" width="420" name="main_panel">
9 <layout_stack bottom="0" follows="left|right|bottom|top" height="50" left="1" 9 <layout_stack bottom="0" follows="left|right|bottom|top" height="50" left="0"
10 mouse_opaque="false" name="chatbar_and_buttons" orientation="vertical" 10 mouse_opaque="false" name="chatbar_and_buttons" orientation="vertical"
11 right="420" use_bounding_rect="true"> 11 right="420" use_bounding_rect="true">
12 <layout_panel auto_resize="true" bottom="0" follows="left|bottom|right|top" height="0" 12 <layout_panel auto_resize="true" bottom="0" follows="left|bottom|right|top" height="0"
@@ -42,19 +42,19 @@
42 </layout_panel> 42 </layout_panel>
43 <layout_panel auto_resize="false" background_visible="false" border="false" bottom="0" 43 <layout_panel auto_resize="false" background_visible="false" border="false" bottom="0"
44 filename="panel_chat_bar.xml" follows="left|right|bottom" left="0" 44 filename="panel_chat_bar.xml" follows="left|right|bottom" left="0"
45 min_height="23" mouse_opaque="false" name="chat_bar" 45 min_height="24" mouse_opaque="false" name="chat_bar"
46 use_bounding_rect="true" width="395" /> 46 use_bounding_rect="true" width="395" />
47 </layout_stack> 47 </layout_stack>
48 </layout_panel> 48 </layout_panel>
49 <layout_panel auto_resize="false" bottom="0" left="0" min_width="250" mouse_opaque="false" 49 <layout_panel auto_resize="false" bottom="0" left="0" min_width="220" mouse_opaque="false"
50 name="media_remote_container" use_bounding_rect="true" user_resize="false" 50 name="media_remote_container" use_bounding_rect="true" user_resize="false"
51 width="250"> 51 width="220">
52 <panel background_visible="false" border="false" bottom="1" name="media_remote" /> 52 <panel background_visible="false" border="false" bottom="0" name="media_remote" />
53 </layout_panel> 53 </layout_panel>
54 <layout_panel auto_resize="false" bottom="0" left="0" min_width="128" mouse_opaque="false" 54 <layout_panel auto_resize="false" bottom="0" left="0" min_width="130" mouse_opaque="false"
55 name="voice_remote_container" use_bounding_rect="true" user_resize="false" 55 name="voice_remote_container" use_bounding_rect="true" user_resize="false"
56 width="128"> 56 width="128">
57 <panel background_visible="false" border="false" bottom="1" name="voice_remote" /> 57 <panel background_visible="false" border="false" bottom="0" name="voice_remote" />
58 </layout_panel> 58 </layout_panel>
59 </layout_stack> 59 </layout_stack>
60</panel> 60</panel>
diff --git a/linden/indra/newview/skins/xui/en-us/panel_place.xml b/linden/indra/newview/skins/xui/en-us/panel_place.xml
index 5d3e40b..d960a1a 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_place.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_place.xml
@@ -4,27 +4,27 @@
4 name="Place" title="Place" width="450"> 4 name="Place" title="Place" width="450">
5 <texture_picker bottom="95" follows="left|top" height="300" left="20" name="snapshot_ctrl" 5 <texture_picker bottom="95" follows="left|top" height="300" left="20" name="snapshot_ctrl"
6 width="400" /> 6 width="400" />
7 <text bottom_delta="-10" follows="left|top" font="SansSerif" height="20" left="20"> 7 <text bottom_delta="-10" follows="left|top" font="SansSerif" height="20" left="20" name="name_label">
8 Name: 8 Name:
9 </text> 9 </text>
10 <text bottom_delta="0" follows="left|top" font="SansSerif" height="20" left="60" 10 <text bottom_delta="0" follows="left|top" font="SansSerif" height="20" left="60"
11 name="name_editor" text_color="white" width="361" /> 11 name="name_editor" width="361" />
12 <text bottom_delta="-20" follows="left|top" font="SansSerif" height="20" left="20"> 12 <text bottom_delta="-20" follows="left|top" font="SansSerif" height="20" left="20" name="description_label">
13 Description: 13 Description:
14 </text> 14 </text>
15 <text_editor bg_readonly_color="clear" bottom_delta="-68" enabled="false" follows="left|top" 15 <text_editor bottom_delta="-68" enabled="false" follows="left|top"
16 font="SansSerif" height="70" left="20" max_length="1023" name="desc_editor" 16 font="SansSerif" height="70" left="20" max_length="1023" name="desc_editor"
17 text_readonly_color="white" width="400" word_wrap="true" /> 17 width="400" word_wrap="true" />
18 <text bottom_delta="-25" follows="left|top" font="SansSerif" height="20" left="20"> 18 <text bottom_delta="-25" follows="left|top" font="SansSerif" height="20" left="20" name="information_label">
19 Information: 19 Information:
20 </text> 20 </text>
21 <text bottom_delta="0" follows="left|top" font="SansSerif" height="20" left="95" 21 <text bottom_delta="0" follows="left|top" font="SansSerif" height="20" left="95"
22 name="info_editor" text_color="white" width="328" /> 22 name="info_editor" width="328" />
23 <text bottom_delta="-20" follows="left|top" font="SansSerif" height="20" left="20"> 23 <text bottom_delta="-20" follows="left|top" font="SansSerif" height="20" left="20" name="location_label">
24 Location: 24 Location:
25 </text> 25 </text>
26 <text bottom_delta="0" follows="left|top" font="SansSerif" height="20" left="95" 26 <text bottom_delta="0" follows="left|top" font="SansSerif" height="20" left="95"
27 name="location_editor" text_color="white" width="342" /> 27 name="location_editor" width="342" />
28 <button bottom_delta="-20" follows="left|top" height="20" label="Teleport" left="20" 28 <button bottom_delta="-20" follows="left|top" height="20" label="Teleport" left="20"
29 name="teleport_btn" width="100" /> 29 name="teleport_btn" width="100" />
30 <button bottom_delta="0" follows="left|top" height="20" label="Show on Map" left="130" 30 <button bottom_delta="0" follows="left|top" height="20" label="Show on Map" left="130"
diff --git a/linden/indra/newview/skins/xui/en-us/panel_place_small.xml b/linden/indra/newview/skins/xui/en-us/panel_place_small.xml
index e237bb9..1020a0a 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_place_small.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_place_small.xml
@@ -4,27 +4,27 @@
4 name="Place" title="Place" width="450"> 4 name="Place" title="Place" width="450">
5 <texture_picker bottom="-274" follows="left|top" height="270" left="20" name="snapshot_ctrl" 5 <texture_picker bottom="-274" follows="left|top" height="270" left="20" name="snapshot_ctrl"
6 width="360" /> 6 width="360" />
7 <text bottom_delta="-12" follows="left|top" font="SansSerif" height="20" left="20"> 7 <text bottom_delta="-12" follows="left|top" font="SansSerif" height="20" left="20" name="name_label">
8 Name: 8 Name:
9 </text> 9 </text>
10 <text bottom_delta="0" follows="left|top" font="SansSerif" height="20" left="60" 10 <text bottom_delta="0" follows="left|top" font="SansSerif" height="20" left="60"
11 name="name_editor" text_color="white" width="320" /> 11 name="name_editor" width="320" />
12 <text bottom_delta="-24" follows="left|top" font="SansSerif" height="20" left="20"> 12 <text bottom_delta="-24" follows="left|top" font="SansSerif" height="20" left="20" name="description_label">
13 Description: 13 Description:
14 </text> 14 </text>
15 <text_editor bg_readonly_color="clear" bottom_delta="-68" enabled="false" follows="left|top" 15 <text_editor bg_readonly_color="clear" bottom_delta="-68" enabled="false" follows="left|top"
16 font="SansSerif" height="70" left="20" max_length="1023" name="desc_editor" 16 font="SansSerif" height="70" left="20" max_length="1023" name="desc_editor"
17 text_readonly_color="white" width="360" word_wrap="true" /> 17 width="360" word_wrap="true" />
18 <text bottom_delta="-30" follows="left|top" font="SansSerif" height="20" left="20"> 18 <text bottom_delta="-30" follows="left|top" font="SansSerif" height="20" left="20" name="information_label">
19 Information: 19 Information:
20 </text> 20 </text>
21 <text bottom_delta="0" follows="left|top" font="SansSerif" height="20" left="95" 21 <text bottom_delta="0" follows="left|top" font="SansSerif" height="20" left="95"
22 name="info_editor" text_color="white" width="328" /> 22 name="info_editor" width="328" />
23 <text bottom_delta="-30" follows="left|top" font="SansSerif" height="20" left="20"> 23 <text bottom_delta="-30" follows="left|top" font="SansSerif" height="20" left="20" name="location_label">
24 Location: 24 Location:
25 </text> 25 </text>
26 <text bottom_delta="0" follows="left|top" font="SansSerif" height="20" left="95" 26 <text bottom_delta="0" follows="left|top" font="SansSerif" height="20" left="95"
27 name="location_editor" text_color="white" width="342" /> 27 name="location_editor" width="342" />
28 <button bottom_delta="-25" follows="left|top" height="20" label="Teleport" left="20" 28 <button bottom_delta="-25" follows="left|top" height="20" label="Teleport" left="20"
29 name="teleport_btn" width="100" /> 29 name="teleport_btn" width="100" />
30 <button bottom_delta="0" follows="left|top" height="20" label="Show on Map" left="130" 30 <button bottom_delta="0" follows="left|top" height="20" label="Show on Map" left="130"
diff --git a/linden/indra/newview/skins/xui/en-us/panel_preferences_audio.xml b/linden/indra/newview/skins/xui/en-us/panel_preferences_audio.xml
index 377e9a4..92978ab 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_preferences_audio.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_preferences_audio.xml
@@ -34,7 +34,7 @@
34 left="142" mouse_opaque="true" name="streaming_video" radio_style="false" 34 left="142" mouse_opaque="true" name="streaming_video" radio_style="false"
35 width="338" /> 35 width="338" />
36 <check_box bottom_delta="-20" control_name="ParcelMediaAutoPlayEnable" enabled="true" 36 <check_box bottom_delta="-20" control_name="ParcelMediaAutoPlayEnable" enabled="true"
37 follows="left|top" font="SansSerifSmall" height="16" hidden="false" 37 follows="left|top" font="SansSerifSmall" height="16"
38 initial_value="true" label="Automatically play media" left="162" 38 initial_value="true" label="Automatically play media" left="162"
39 mouse_opaque="true" name="auto_streaming_video" radio_style="false" 39 mouse_opaque="true" name="auto_streaming_video" radio_style="false"
40 width="338" /> 40 width="338" />
diff --git a/linden/indra/newview/skins/xui/en-us/panel_preferences_chat.xml b/linden/indra/newview/skins/xui/en-us/panel_preferences_chat.xml
index 4ac9ddd..27ec29a 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_preferences_chat.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_preferences_chat.xml
@@ -31,33 +31,37 @@
31 Chat Color: 31 Chat Color:
32 </text> 32 </text>
33 <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-140" 33 <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-140"
34 can_apply_immediately="true" color="1 1 1 1" control_name="AgentChatColor"
35 enabled="true" follows="left|top" height="56" label="Chat" left="148"
36 mouse_opaque="true" name="users" width="44" />
37 <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-140"
38 can_apply_immediately="true" color="0.6 0.6 1 1" control_name="IMChatColor"
39 enabled="true" follows="left|top" height="56" label="IM" left_delta="48"
40 mouse_opaque="true" name="im" width="44" />
41 <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-140"
34 can_apply_immediately="true" color="0.8 1 1 1" 42 can_apply_immediately="true" color="0.8 1 1 1"
35 control_name="SystemChatColor" enabled="true" follows="left|top" 43 control_name="SystemChatColor" enabled="true" follows="left|top"
36 height="56" label="System" left="148" mouse_opaque="true" name="system" 44 height="56" label="System" left_delta="48" mouse_opaque="true"
37 width="48" /> 45 name="system" width="44" />
38 <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-140"
39 can_apply_immediately="true" color="1 1 1 1" control_name="AgentChatColor"
40 enabled="true" follows="left|top" height="56" label="Users" left_delta="54"
41 mouse_opaque="true" name="users" width="48" />
42 <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-140" 46 <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-140"
43 can_apply_immediately="true" color="0.7 0.9 0.7 1" 47 can_apply_immediately="true" color="0.7 0.9 0.7 1"
44 control_name="ObjectChatColor" enabled="true" follows="left|top" 48 control_name="ObjectChatColor" enabled="true" follows="left|top"
45 height="56" label="Objects" left_delta="54" mouse_opaque="true" 49 height="56" label="Objects" left_delta="48" mouse_opaque="true"
46 name="objects" width="48" /> 50 name="objects" width="44" />
47 <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-140" 51 <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-140"
48 can_apply_immediately="true" color="0.7 0.9 0.7 1" 52 can_apply_immediately="true" color="0.7 0.9 0.7 1"
49 control_name="llOwnerSayChatColor" enabled="true" follows="left|top" 53 control_name="llOwnerSayChatColor" enabled="true" follows="left|top"
50 height="56" label="Owner" left_delta="54" mouse_opaque="true" name="owner" 54 height="56" label="Owner" left_delta="48" mouse_opaque="true" name="owner"
51 width="48" /> 55 width="44" />
52 <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-140" 56 <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-140"
53 can_apply_immediately="true" color="0 0 0 1" 57 can_apply_immediately="true" color="0 0 0 1"
54 control_name="BackgroundChatColor" enabled="true" follows="left|top" 58 control_name="BackgroundChatColor" enabled="true" follows="left|top"
55 height="56" label="Bubble" left_delta="54" mouse_opaque="true" 59 height="56" label="Bubble" left_delta="48" mouse_opaque="true"
56 name="background" width="48" /> 60 name="background" width="44" />
57 <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-140" 61 <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-140"
58 can_apply_immediately="true" color="0.6 0.6 1 1" 62 can_apply_immediately="true" color="0.6 0.6 1 1"
59 control_name="HTMLLinkColor" enabled="true" follows="left|top" height="56" 63 control_name="HTMLLinkColor" enabled="true" follows="left|top" height="56"
60 label="URLs" left_delta="54" mouse_opaque="true" name="links" width="48" /> 64 label="URLs" left_delta="48" mouse_opaque="true" name="links" width="44" />
61 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 65 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
62 bottom="-160" drop_shadow_visible="true" enabled="true" follows="left|top" 66 bottom="-160" drop_shadow_visible="true" enabled="true" follows="left|top"
63 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="12" 67 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="12"
diff --git a/linden/indra/newview/skins/xui/en-us/panel_preferences_general.xml b/linden/indra/newview/skins/xui/en-us/panel_preferences_general.xml
index bca8cf9..e679537 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_preferences_general.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_preferences_general.xml
@@ -16,57 +16,62 @@
16 font="SansSerifSmall" height="16" initial_value="true" 16 font="SansSerifSmall" height="16" initial_value="true"
17 label="Show Start Location on Login Screen" left="151" mouse_opaque="true" 17 label="Show Start Location on Login Screen" left="151" mouse_opaque="true"
18 name="show_location_checkbox" radio_style="false" width="256" /> 18 name="show_location_checkbox" radio_style="false" width="256" />
19 <radio_group bottom="-108" control_name="RenderName" draw_border="true" enabled="true" 19 <combo_box bottom_delta="-25" follows="left|top" height="18" left="155"
20 follows="left|top" height="54" left="155" mouse_opaque="true" 20 mouse_opaque="true" name="fade_out_combobox" width="146">
21 name="fade_out_radio" width="128"> 21 <combo_item name="Never" value="Never">
22 <radio_item type="string" length="1" bottom="-19" enabled="true" follows="left|top" height="16" left="6"
23 mouse_opaque="true" name="Never" width="463">
24 Never 22 Never
25 </radio_item> 23 </combo_item>
26 <radio_item type="string" length="1" bottom="-35" enabled="true" follows="left|top" height="16" left="6" 24 <combo_item name="Show Temporarily" value="Show Temporarily">
27 mouse_opaque="true" name="Temporarily" width="463">
28 Show Temporarily 25 Show Temporarily
29 </radio_item> 26 </combo_item>
30 <radio_item type="string" length="1" bottom="-51" enabled="true" follows="left|top" height="16" left="6" 27 <combo_item name="Always" value="Always">
31 mouse_opaque="true" name="Always" width="463">
32 Always 28 Always
33 </radio_item> 29 </combo_item>
34 </radio_group> 30 </combo_box>
35 <check_box bottom="-134" control_name="RenderNameHideSelf" enabled="true" 31 <check_box bottom_delta="-25" control_name="SmallAvatarNames" follows="left|top"
36 follows="left|top" font="SansSerifSmall" height="16" initial_value="false"
37 label="Hide My Name On My Screen" left="151" mouse_opaque="true"
38 name="show_my_name_checkbox" radio_style="false" width="256" />
39 <check_box bottom="-152" control_name="RenderHideGroupTitle" enabled="true"
40 follows="left|top" font="SansSerifSmall" height="16" initial_value="false"
41 label="Hide My Group Title" left="151" mouse_opaque="true"
42 name="show_my_title_checkbox" radio_style="false" width="256" />
43 <check_box bottom="-170" control_name="SmallAvatarNames" enabled="true" follows="left|top"
44 font="SansSerifSmall" height="16" initial_value="true" 32 font="SansSerifSmall" height="16" initial_value="true"
45 label="Small Avatar Names" left="151" mouse_opaque="true" 33 label="Small Avatar Names" left="151" name="small_avatar_names_checkbox"
46 name="small_avatar_names_checkbox" radio_style="false" width="256" /> 34 width="200" />
47 <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-214" 35 <check_box bottom_delta="-18" control_name="RenderNameHideSelf" follows="left|top"
36 font="SansSerifSmall" height="16" initial_value="false"
37 label="Hide My Name On My Screen" left="151" name="show_my_name_checkbox"
38 width="200" />
39 <text type="string" length="1" bottom_delta="-24" follows="left|top" font="SansSerifSmall" h_pad="0"
40 halign="left" height="16" left="10" name="group_titles_textbox" v_pad="0"
41 width="394">
42 Group Titles:
43 </text>
44 <check_box bottom_delta="0" control_name="RenderHideGroupTitleAll" follows="left|top"
45 font="SansSerifSmall" height="16" initial_value="false"
46 label="Hide All Group Titles" left="151" mouse_opaque="true"
47 name="show_all_title_checkbox" radio_style="false" width="256" />
48 <check_box bottom_delta="-18" control_name="RenderHideGroupTitle" follows="left|top"
49 font="SansSerifSmall" height="16" initial_value="false"
50 label="Hide My Group Title" left="151" name="show_my_title_checkbox"
51 radio_style="false" width="256" />
52 <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-210"
48 can_apply_immediately="false" color="1 1 1 1" control_name="EffectColor" 53 can_apply_immediately="false" color="1 1 1 1" control_name="EffectColor"
49 enabled="true" follows="left|top" height="36" label="" left="153" 54 enabled="true" follows="left|top" height="48" label="" left="153"
50 mouse_opaque="true" name="effect_color_swatch" 55 mouse_opaque="true" name="effect_color_swatch"
51 tool_tip="Click to open Color Picker" width="20" /> 56 tool_tip="Click to open Color Picker" width="32" />
52 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 57 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
53 bottom="-215" drop_shadow_visible="true" enabled="true" follows="left|top" 58 bottom="-215" drop_shadow_visible="true" enabled="true" follows="left|top"
54 font="SansSerifSmall" h_pad="0" halign="left" height="12" hidden="false" 59 font="SansSerifSmall" h_pad="0" halign="left" height="12" left="10"
55 left="10" mouse_opaque="true" name="UI Size:" v_pad="0" width="128"> 60 mouse_opaque="true" name="UI Size:" v_pad="0" width="128">
56 UI Size: 61 UI Size:
57 </text> 62 </text>
58 <slider bottom="-217" can_edit_text="true" control_name="UIScaleFactor" 63 <slider bottom="-217" can_edit_text="true" control_name="UIScaleFactor"
59 decimal_digits="3" enabled="true" height="16" hidden="false" 64 decimal_digits="3" enabled="true" height="16" increment="0.025"
60 increment="0.025" initial_val="1" left="148" max_val="1.4" min_val="0.75" 65 initial_val="1" left="148" max_val="1.4" min_val="0.75" mouse_opaque="true"
61 mouse_opaque="true" name="UI Scale" show_text="true" value="1" width="256" /> 66 name="UI Scale" show_text="true" value="1" width="256" />
62 <check_box bottom="-236" control_name="UIAutoScale" enabled="true" follows="left|top" 67 <check_box bottom="-236" control_name="UIAutoScale" enabled="true" follows="left|top"
63 font="SansSerifSmall" height="16" hidden="false" initial_value="false" 68 font="SansSerifSmall" height="16" initial_value="false"
64 label="Use resolution independent scale" left="148" mouse_opaque="true" 69 label="Use resolution independent scale" left="151" mouse_opaque="true"
65 name="ui_auto_scale" radio_style="false" width="256" /> 70 name="ui_auto_scale" radio_style="false" width="256" />
66 <spinner bottom="-260" control_name="AFKTimeout" enabled="true" follows="left|top" 71 <spinner bottom="-260" control_name="AFKTimeout" decimal_digits="0" enabled="true"
67 height="16" increment="1" initial_val="300" label="Away Timeout:" 72 follows="left|top" height="16" increment="1" initial_val="300"
68 label_width="141" left="10" max_val="600" min_val="30" mouse_opaque="true" 73 label="Away Timeout:" label_width="141" left="10" max_val="600"
69 name="afk_timeout_spinner" width="202" /> 74 min_val="30" mouse_opaque="true" name="afk_timeout_spinner" width="202" />
70 <check_box bottom="-286" control_name="ChatOnlineNotification" enabled="true" 75 <check_box bottom="-286" control_name="ChatOnlineNotification" enabled="true"
71 follows="left|top" font="SansSerifSmall" height="16" initial_value="false" 76 follows="left|top" font="SansSerifSmall" height="16" initial_value="false"
72 label="Show Online Friend Notifications" left="151" mouse_opaque="true" 77 label="Show Online Friend Notifications" left="151" mouse_opaque="true"
@@ -87,7 +92,7 @@
87 tool_tip="Use the default system color picker instead of the one built into Second Life." 92 tool_tip="Use the default system color picker instead of the one built into Second Life."
88 width="256" /> 93 width="256" />
89 <check_box bottom="-358" control_name="ShowSearchBar" enabled="true" follows="left|top" 94 <check_box bottom="-358" control_name="ShowSearchBar" enabled="true" follows="left|top"
90 font="SansSerifSmall" height="16" hidden="false" initial_value="false" 95 font="SansSerifSmall" height="16" initial_value="false"
91 label="Show search panel in overlay bar" left="151" mouse_opaque="true" 96 label="Show search panel in overlay bar" left="151" mouse_opaque="true"
92 name="show_search_panel" radio_style="false" 97 name="show_search_panel" radio_style="false"
93 tool_tip="Display the embedded search panel." width="256" /> 98 tool_tip="Display the embedded search panel." width="256" />
@@ -104,7 +109,7 @@
104 Show Names: 109 Show Names:
105 </text> 110 </text>
106 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 111 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
107 bottom="-190" drop_shadow_visible="true" enabled="true" follows="left|top" 112 bottom="-184" drop_shadow_visible="true" enabled="true" follows="left|top"
108 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10" 113 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10"
109 mouse_opaque="true" name="effects_color_textbox" v_pad="0" width="394"> 114 mouse_opaque="true" name="effects_color_textbox" v_pad="0" width="394">
110 Color For My Effects: 115 Color For My Effects:
@@ -150,7 +155,7 @@
150 Never send 155 Never send
151 </combo_item> 156 </combo_item>
152 </combo_box> 157 </combo_box>
153 <combo_box allow_text_entry="true" bottom="-402" control_name="Language" enabled="true" 158 <combo_box allow_text_entry="true" bottom="-400" control_name="Language" enabled="true"
154 follows="left|bottom" height="16" left="153" max_chars="135" 159 follows="left|bottom" height="16" left="153" max_chars="135"
155 mouse_opaque="true" name="language_combobox" width="146"> 160 mouse_opaque="true" name="language_combobox" width="146">
156 <combo_item type="string" length="1" enabled="true" name="System Default Language" value="default"> 161 <combo_item type="string" length="1" enabled="true" name="System Default Language" value="default">
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 71ba4bf..fbcb773 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
@@ -5,12 +5,12 @@
5 <button bottom="-22" follows="left|top" font="SansSerif" height="18" label="?" 5 <button bottom="-22" follows="left|top" font="SansSerif" height="18" label="?"
6 left="470" name="GraphicsPreferencesHelpButton" width="22" /> 6 left="470" name="GraphicsPreferencesHelpButton" width="22" />
7 <check_box bottom="-23" enabled="true" follows="left|top" font="SansSerifSmall" 7 <check_box bottom="-23" enabled="true" follows="left|top" font="SansSerifSmall"
8 height="16" hidden="false" initial_value="false" 8 height="16" initial_value="false"
9 label="Run Second Life in a window" left="10" mouse_opaque="true" 9 label="Run Second Life in a window" left="10" mouse_opaque="true"
10 name="windowed mode" radio_style="false" width="100" /> 10 name="windowed mode" radio_style="false" width="100" />
11 <text_editor type="string" length="1" allow_html="false" bg_readonly_color="0 0 0 0" bottom="-43" 11 <text_editor type="string" length="1" allow_html="false" bg_readonly_color="0 0 0 0" bottom="-43"
12 embedded_items="false" enabled="false" follows="left|top" 12 embedded_items="false" enabled="false" follows="left|top"
13 font="SansSerifSmall" height="20" hidden="false" hide_border="true" 13 font="SansSerifSmall" height="20" hide_border="true"
14 hide_scrollbar="true" left="10" max_length="65535" mouse_opaque="true" 14 hide_scrollbar="true" left="10" max_length="65535" mouse_opaque="true"
15 name="FullScreenInfo" tab_stop="false" width="350" word_wrap="true"> 15 name="FullScreenInfo" tab_stop="false" width="350" word_wrap="true">
16 If unchecked, viewer will display full-screen when logged in. 16 If unchecked, viewer will display full-screen when logged in.
@@ -26,7 +26,7 @@
26 name="fullscreen combo" width="150" /> 26 name="fullscreen combo" width="150" />
27 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 27 <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" 28 bottom="-62" drop_shadow_visible="true" enabled="true" follows="left|top"
29 font="SansSerifSmall" h_pad="0" halign="left" height="12" hidden="false" 29 font="SansSerifSmall" h_pad="0" halign="left" height="12"
30 left="10" mouse_opaque="true" name="AspectRatioLabel1" 30 left="10" mouse_opaque="true" name="AspectRatioLabel1"
31 tool_tip="width / height" v_pad="0" width="160"> 31 tool_tip="width / height" v_pad="0" width="160">
32 Aspect Ratio: 32 Aspect Ratio:
@@ -53,60 +53,60 @@
53 name="aspect_auto_detect" radio_style="false" width="256" /> 53 name="aspect_auto_detect" radio_style="false" width="256" />
54 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 54 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
55 bottom="-85" drop_shadow_visible="true" enabled="true" follows="left|top" 55 bottom="-85" drop_shadow_visible="true" enabled="true" follows="left|top"
56 font="SansSerifSmall" h_pad="0" halign="left" height="12" hidden="false" 56 font="SansSerifSmall" h_pad="0" halign="left" height="12"
57 left="10" mouse_opaque="true" name="HigherText" v_pad="0" width="80"> 57 left="10" mouse_opaque="true" name="HigherText" v_pad="0" width="80">
58 Quality and 58 Quality and
59 </text> 59 </text>
60 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 60 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
61 bottom_delta="-14" drop_shadow_visible="true" enabled="true" 61 bottom_delta="-14" drop_shadow_visible="true" enabled="true"
62 follows="left|top" font="SansSerifSmall" h_pad="0" halign="left" 62 follows="left|top" font="SansSerifSmall" h_pad="0" halign="left"
63 height="12" hidden="false" left_delta="0" mouse_opaque="true" 63 height="12" left_delta="0" mouse_opaque="true"
64 name="QualityText" v_pad="0" width="95"> 64 name="QualityText" v_pad="0" width="95">
65 Performance: 65 Performance:
66 </text> 66 </text>
67 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 67 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
68 bottom="-86" drop_shadow_visible="true" enabled="true" follows="left|top" 68 bottom="-86" drop_shadow_visible="true" enabled="true" follows="left|top"
69 font="SansSerifSmall" h_pad="0" halign="left" height="12" hidden="false" 69 font="SansSerifSmall" h_pad="0" halign="left" height="12"
70 left="115" mouse_opaque="true" name="FasterText" v_pad="0" width="80"> 70 left="115" mouse_opaque="true" name="FasterText" v_pad="0" width="80">
71 Faster 71 Faster
72 </text> 72 </text>
73 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 73 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
74 bottom="-105" drop_shadow_visible="true" enabled="true" follows="left|top" 74 bottom="-105" drop_shadow_visible="true" enabled="true" follows="left|top"
75 font="SansSerifSmall" h_pad="0" halign="left" height="12" hidden="false" 75 font="SansSerifSmall" h_pad="0" halign="left" height="12"
76 left="158" mouse_opaque="true" name="ShadersPrefText" v_pad="0" width="40"> 76 left="158" mouse_opaque="true" name="ShadersPrefText" v_pad="0" width="40">
77 Low 77 Low
78 </text> 78 </text>
79 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 79 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
80 bottom_delta="0" drop_shadow_visible="true" enabled="true" 80 bottom_delta="0" drop_shadow_visible="true" enabled="true"
81 follows="left|top" font="SansSerifSmall" h_pad="0" halign="left" 81 follows="left|top" font="SansSerifSmall" h_pad="0" halign="left"
82 height="12" hidden="false" left_delta="47" mouse_opaque="true" 82 height="12" left_delta="47" mouse_opaque="true"
83 name="ShadersPrefText2" v_pad="0" width="40"> 83 name="ShadersPrefText2" v_pad="0" width="40">
84 Mid 84 Mid
85 </text> 85 </text>
86 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 86 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
87 bottom_delta="0" drop_shadow_visible="true" enabled="true" 87 bottom_delta="0" drop_shadow_visible="true" enabled="true"
88 follows="left|top" font="SansSerifSmall" h_pad="0" halign="left" 88 follows="left|top" font="SansSerifSmall" h_pad="0" halign="left"
89 height="12" hidden="false" left_delta="47" mouse_opaque="true" 89 height="12" left_delta="47" mouse_opaque="true"
90 name="ShadersPrefText3" v_pad="0" width="40"> 90 name="ShadersPrefText3" v_pad="0" width="40">
91 High 91 High
92 </text> 92 </text>
93 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 93 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
94 bottom_delta="0" drop_shadow_visible="true" enabled="true" 94 bottom_delta="0" drop_shadow_visible="true" enabled="true"
95 follows="left|top" font="SansSerifSmall" h_pad="0" halign="left" 95 follows="left|top" font="SansSerifSmall" h_pad="0" halign="left"
96 height="12" hidden="false" left_delta="47" mouse_opaque="true" 96 height="12" left_delta="47" mouse_opaque="true"
97 name="ShadersPrefText4" v_pad="0" width="40"> 97 name="ShadersPrefText4" v_pad="0" width="40">
98 Ultra 98 Ultra
99 </text> 99 </text>
100 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 100 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
101 bottom="-80" drop_shadow_visible="true" enabled="true" follows="left|top" 101 bottom="-80" drop_shadow_visible="true" enabled="true" follows="left|top"
102 font="SansSerifSmall" h_pad="0" halign="left" height="12" hidden="false" 102 font="SansSerifSmall" h_pad="0" halign="left" height="12"
103 left="334" mouse_opaque="true" name="HigherText2" v_pad="0" width="80"> 103 left="334" mouse_opaque="true" name="HigherText2" v_pad="0" width="80">
104 Higher 104 Higher
105 </text> 105 </text>
106 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 106 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
107 bottom_delta="-14" drop_shadow_visible="true" enabled="true" 107 bottom_delta="-14" drop_shadow_visible="true" enabled="true"
108 follows="left|top" font="SansSerifSmall" h_pad="0" halign="left" 108 follows="left|top" font="SansSerifSmall" h_pad="0" halign="left"
109 height="12" hidden="false" left_delta="0" mouse_opaque="true" 109 height="12" left_delta="0" mouse_opaque="true"
110 name="QualityText2" v_pad="0" width="95"> 110 name="QualityText2" v_pad="0" width="95">
111 Quality 111 Quality
112 </text> 112 </text>
@@ -124,64 +124,64 @@
124 width="2" /> 124 width="2" />
125 <slider bottom="-90" can_edit_text="false" control_name="RenderQualityPerformance" 125 <slider bottom="-90" can_edit_text="false" control_name="RenderQualityPerformance"
126 decimal_digits="0" enabled="true" follows="left|top" height="16" 126 decimal_digits="0" enabled="true" follows="left|top" height="16"
127 hidden="false" increment="1" initial_val="0" label="" label_width="0" 127 increment="1" initial_val="0" label="" label_width="0"
128 left="165" max_val="3" min_val="0" mouse_opaque="true" 128 left="165" max_val="3" min_val="0" mouse_opaque="true"
129 name="QualityPerformanceSelection" show_text="false" width="150" /> 129 name="QualityPerformanceSelection" show_text="false" width="150" />
130 <check_box bottom="-91" control_name="RenderCustomSettings" enabled="true" 130 <check_box bottom="-91" control_name="RenderCustomSettings" enabled="true"
131 follows="left|top" font="SansSerifSmall" height="16" hidden="false" 131 follows="left|top" font="SansSerifSmall" height="16"
132 initial_value="true" label="Custom" left="385" mouse_opaque="true" 132 initial_value="true" label="Custom" left="385" mouse_opaque="true"
133 name="CustomSettings" radio_style="false" width="256" /> 133 name="CustomSettings" radio_style="false" width="256" />
134 <view_border bevel_style="none" border_thickness="1" bottom="-375" follows="top|left" 134 <view_border bevel_style="none" border_thickness="1" bottom="-375" follows="top|left"
135 height="260" left="5" name="GraphicsBorder" width="485" /> 135 height="260" left="5" name="GraphicsBorder" width="485" />
136 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 136 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
137 bottom="-130" drop_shadow_visible="true" enabled="true" follows="left|top" 137 bottom="-130" drop_shadow_visible="true" enabled="true" follows="left|top"
138 font="SansSerifSmall" h_pad="0" halign="left" height="12" hidden="false" 138 font="SansSerifSmall" h_pad="0" halign="left" height="12"
139 left="10" mouse_opaque="true" name="ShadersText" v_pad="0" width="128"> 139 left="10" mouse_opaque="true" name="ShadersText" v_pad="0" width="128">
140 Shaders: 140 Shaders:
141 </text> 141 </text>
142 <check_box bottom="-153" control_name="RenderObjectBump" enabled="true" follows="left|top" 142 <check_box bottom="-153" control_name="RenderObjectBump" enabled="true" follows="left|top"
143 font="SansSerifSmall" height="16" hidden="false" initial_value="true" 143 font="SansSerifSmall" height="16" initial_value="true"
144 label="Bump Mapping and Shiny" left="10" mouse_opaque="true" 144 label="Bump Mapping and Shiny" left="10" mouse_opaque="true"
145 name="BumpShiny" radio_style="false" width="256" /> 145 name="BumpShiny" radio_style="false" width="256" />
146 <check_box bottom_delta="-17" control_name="VertexShaderEnable" enabled="true" 146 <check_box bottom_delta="-17" control_name="VertexShaderEnable" enabled="true"
147 follows="left|top" font="SansSerifSmall" height="16" hidden="false" 147 follows="left|top" font="SansSerifSmall" height="16"
148 initial_value="true" label="Basic Shaders" left_delta="0" 148 initial_value="true" label="Basic Shaders" left_delta="0"
149 mouse_opaque="true" name="BasicShaders" radio_style="false" 149 mouse_opaque="true" name="BasicShaders" radio_style="false"
150 tool_tip="Disabling this option may prevent some graphics card drivers from crashing." 150 tool_tip="Disabling this option may prevent some graphics card drivers from crashing."
151 width="315" /> 151 width="315" />
152 <check_box bottom_delta="-17" control_name="WindLightUseAtmosShaders" enabled="true" 152 <check_box bottom_delta="-17" control_name="WindLightUseAtmosShaders" enabled="true"
153 follows="left|top" font="SansSerifSmall" height="16" hidden="false" 153 follows="left|top" font="SansSerifSmall" height="16"
154 initial_value="true" label="Atmospheric Shaders" left_delta="0" 154 initial_value="true" label="Atmospheric Shaders" left_delta="0"
155 mouse_opaque="true" name="WindLightUseAtmosShaders" radio_style="false" 155 mouse_opaque="true" name="WindLightUseAtmosShaders" radio_style="false"
156 width="256" /> 156 width="256" />
157 <check_box bottom_delta="-17" control_name="RenderWaterReflections" enabled="true" 157 <check_box bottom_delta="-17" control_name="RenderWaterReflections" enabled="true"
158 follows="left|top" font="SansSerifSmall" height="16" hidden="false" 158 follows="left|top" font="SansSerifSmall" height="16"
159 initial_value="true" label="Water Reflections" left_delta="0" 159 initial_value="true" label="Water Reflections" left_delta="0"
160 mouse_opaque="true" name="Reflections" radio_style="false" width="256" /> 160 mouse_opaque="true" name="Reflections" radio_style="false" width="256" />
161 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 161 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
162 bottom="-223" drop_shadow_visible="true" enabled="true" follows="left|top" 162 bottom="-223" drop_shadow_visible="true" enabled="true" follows="left|top"
163 font="SansSerifSmall" h_pad="0" halign="left" height="12" hidden="false" 163 font="SansSerifSmall" h_pad="0" halign="left" height="12"
164 left="10" mouse_opaque="true" name="ReflectionDetailText" v_pad="0" 164 left="10" mouse_opaque="true" name="ReflectionDetailText" v_pad="0"
165 width="128"> 165 width="128">
166 Reflection Detail: 166 Reflection Detail:
167 </text> 167 </text>
168 <radio_group bottom_delta="-73" control_name="RenderReflectionDetail" draw_border="false" 168 <radio_group bottom_delta="-73" control_name="RenderReflectionDetail" draw_border="false"
169 enabled="true" follows="left|top" height="70" hidden="false" 169 enabled="true" follows="left|top" height="70"
170 left_delta="-2" mouse_opaque="true" name="ReflectionDetailRadio" 170 left_delta="-2" mouse_opaque="true" name="ReflectionDetailRadio"
171 width="321"> 171 width="321">
172 <radio_item type="string" length="1" bottom="-19" enabled="true" follows="left|top" height="16" hidden="false" 172 <radio_item type="string" length="1" bottom="-19" enabled="true" follows="left|top" height="16"
173 left="3" mouse_opaque="true" name="0" width="315"> 173 left="3" mouse_opaque="true" name="0" width="315">
174 Terrain and Trees 174 Terrain and Trees
175 </radio_item> 175 </radio_item>
176 <radio_item type="string" length="1" bottom="-35" enabled="true" follows="left|top" height="16" hidden="false" 176 <radio_item type="string" length="1" bottom="-35" enabled="true" follows="left|top" height="16"
177 left="3" mouse_opaque="true" name="1" width="315"> 177 left="3" mouse_opaque="true" name="1" width="315">
178 All Static Objects 178 All Static Objects
179 </radio_item> 179 </radio_item>
180 <radio_item type="string" length="1" bottom="-51" enabled="true" follows="left|top" height="16" hidden="false" 180 <radio_item type="string" length="1" bottom="-51" enabled="true" follows="left|top" height="16"
181 left="3" mouse_opaque="true" name="2" width="315"> 181 left="3" mouse_opaque="true" name="2" width="315">
182 All Avatars and Objects 182 All Avatars and Objects
183 </radio_item> 183 </radio_item>
184 <radio_item type="string" length="1" bottom="-67" enabled="true" follows="left|top" height="16" hidden="false" 184 <radio_item type="string" length="1" bottom="-67" enabled="true" follows="left|top" height="16"
185 left="3" mouse_opaque="true" name="3" width="315"> 185 left="3" mouse_opaque="true" name="3" width="315">
186 Everything 186 Everything
187 </radio_item> 187 </radio_item>
@@ -206,32 +206,32 @@
206 radio_style="false" width="256" /> 206 radio_style="false" width="256" />
207 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 207 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
208 bottom="-131" drop_shadow_visible="true" enabled="true" follows="left|top" 208 bottom="-131" drop_shadow_visible="true" enabled="true" follows="left|top"
209 font="SansSerifSmall" h_pad="0" halign="left" height="12" hidden="false" 209 font="SansSerifSmall" h_pad="0" halign="left" height="12"
210 left="457" mouse_opaque="true" name="DrawDistanceMeterText1" v_pad="0" 210 left="457" mouse_opaque="true" name="DrawDistanceMeterText1" v_pad="0"
211 width="128"> 211 width="128">
212 m 212 m
213 </text> 213 </text>
214 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 214 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
215 bottom="-131" drop_shadow_visible="true" enabled="true" follows="left|top" 215 bottom="-131" drop_shadow_visible="true" enabled="true" follows="left|top"
216 font="SansSerifSmall" h_pad="0" halign="left" height="12" hidden="false" 216 font="SansSerifSmall" h_pad="0" halign="left" height="12"
217 left="463" mouse_opaque="true" name="DrawDistanceMeterText2" v_pad="0" 217 left="463" mouse_opaque="true" name="DrawDistanceMeterText2" v_pad="0"
218 width="128"> 218 width="128">
219 m 219 m
220 </text> 220 </text>
221 <slider bottom="-135" can_edit_text="false" control_name="RenderFarClip" 221 <slider bottom="-135" can_edit_text="false" control_name="RenderFarClip"
222 decimal_digits="0" enabled="true" follows="left|top" height="16" 222 decimal_digits="0" enabled="true" follows="left|top" height="16"
223 hidden="false" increment="8" initial_val="160" label="Draw Distance:" 223 increment="8" initial_val="160" label="Draw Distance:"
224 label_width="140" left="215" max_val="512" min_val="64" mouse_opaque="true" 224 label_width="140" left="215" max_val="512" min_val="64" mouse_opaque="true"
225 name="DrawDistance" show_text="true" width="255" /> 225 name="DrawDistance" show_text="true" width="255" />
226 <slider bottom_delta="-20" can_edit_text="false" control_name="RenderMaxPartCount" 226 <slider bottom_delta="-20" can_edit_text="false" control_name="RenderMaxPartCount"
227 decimal_digits="0" enabled="true" follows="left|top" height="16" 227 decimal_digits="0" enabled="true" follows="left|top" height="16"
228 hidden="false" increment="256" initial_val="4096" 228 increment="256" initial_val="4096"
229 label="Max. Particle Count:" label_width="140" left_delta="0" 229 label="Max. Particle Count:" label_width="140" left_delta="0"
230 max_val="8192" min_val="0" mouse_opaque="true" name="MaxParticleCount" 230 max_val="8192" min_val="0" mouse_opaque="true" name="MaxParticleCount"
231 show_text="true" width="262" /> 231 show_text="true" width="262" />
232 <slider bottom_delta="-20" can_edit_text="false" control_name="RenderGlowResolutionPow" 232 <slider bottom_delta="-20" can_edit_text="false" control_name="RenderGlowResolutionPow"
233 decimal_digits="0" enabled="true" follows="left|top" height="16" 233 decimal_digits="0" enabled="true" follows="left|top" height="16"
234 hidden="false" increment="1" initial_val="8" label="Post Process Quality:" 234 increment="1" initial_val="8" label="Post Process Quality:"
235 label_width="140" left_delta="0" max_val="9" min_val="8" 235 label_width="140" left_delta="0" max_val="9" min_val="8"
236 mouse_opaque="true" name="RenderPostProcess" show_text="false" width="223" /> 236 mouse_opaque="true" name="RenderPostProcess" show_text="false" width="223" />
237 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 237 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
@@ -243,43 +243,43 @@
243 </text> 243 </text>
244 <slider bottom_delta="-22" can_edit_text="false" control_name="RenderVolumeLODFactor" 244 <slider bottom_delta="-22" can_edit_text="false" control_name="RenderVolumeLODFactor"
245 decimal_digits="3" enabled="true" follows="left|top" height="16" 245 decimal_digits="3" enabled="true" follows="left|top" height="16"
246 hidden="false" increment="0.125" initial_val="160" label=" Objects:" 246 increment="0.125" initial_val="160" label=" Objects:"
247 label_width="140" left_delta="0" max_val="2" min_val="0" 247 label_width="140" left_delta="0" max_val="2" min_val="0"
248 mouse_opaque="true" name="ObjectMeshDetail" show_text="false" width="223" /> 248 mouse_opaque="true" name="ObjectMeshDetail" show_text="false" width="223" />
249 <slider bottom_delta="-20" can_edit_text="false" control_name="RenderFlexTimeFactor" 249 <slider bottom_delta="-20" can_edit_text="false" control_name="RenderFlexTimeFactor"
250 decimal_digits="3" enabled="true" follows="left|top" height="16" 250 decimal_digits="3" enabled="true" follows="left|top" height="16"
251 hidden="false" increment="0.1" initial_val="160" label=" Flexiprims:" 251 increment="0.1" initial_val="160" label=" Flexiprims:"
252 label_width="140" left_delta="0" max_val="1" min_val="0" 252 label_width="140" left_delta="0" max_val="1" min_val="0"
253 mouse_opaque="true" name="FlexibleMeshDetail" show_text="false" width="223" /> 253 mouse_opaque="true" name="FlexibleMeshDetail" show_text="false" width="223" />
254 <slider bottom_delta="-20" can_edit_text="false" control_name="RenderTreeLODFactor" 254 <slider bottom_delta="-20" can_edit_text="false" control_name="RenderTreeLODFactor"
255 decimal_digits="3" enabled="true" follows="left|top" height="16" 255 decimal_digits="3" enabled="true" follows="left|top" height="16"
256 hidden="false" increment="0.125" initial_val="160" label=" Trees:" 256 increment="0.125" initial_val="160" label=" Trees:"
257 label_width="140" left_delta="0" max_val="1" min_val="0" 257 label_width="140" left_delta="0" max_val="1" min_val="0"
258 mouse_opaque="true" name="TreeMeshDetail" show_text="false" width="223" /> 258 mouse_opaque="true" name="TreeMeshDetail" show_text="false" width="223" />
259 <slider bottom_delta="-20" can_edit_text="false" control_name="RenderAvatarLODFactor" 259 <slider bottom_delta="-20" can_edit_text="false" control_name="RenderAvatarLODFactor"
260 decimal_digits="3" enabled="true" follows="left|top" height="16" 260 decimal_digits="3" enabled="true" follows="left|top" height="16"
261 hidden="false" increment="0.125" initial_val="160" label=" Avatars:" 261 increment="0.125" initial_val="160" label=" Avatars:"
262 label_width="140" left_delta="0" max_val="1" min_val="0" 262 label_width="140" left_delta="0" max_val="1" min_val="0"
263 mouse_opaque="true" name="AvatarMeshDetail" show_text="false" width="223" /> 263 mouse_opaque="true" name="AvatarMeshDetail" show_text="false" width="223" />
264 <slider bottom_delta="-20" can_edit_text="false" control_name="RenderTerrainLODFactor" 264 <slider bottom_delta="-20" can_edit_text="false" control_name="RenderTerrainLODFactor"
265 decimal_digits="3" enabled="true" follows="left|top" height="16" 265 decimal_digits="3" enabled="true" follows="left|top" height="16"
266 hidden="false" increment="0.125" initial_val="160" label=" Terrain:" 266 increment="0.125" initial_val="160" label=" Terrain:"
267 label_width="140" left_delta="0" max_val="2" min_val="1" 267 label_width="140" left_delta="0" max_val="2" min_val="1"
268 mouse_opaque="true" name="TerrainMeshDetail" show_text="false" width="223" /> 268 mouse_opaque="true" name="TerrainMeshDetail" show_text="false" width="223" />
269 <slider bottom_delta="-20" can_edit_text="false" control_name="WLSkyDetail" 269 <slider bottom_delta="-20" can_edit_text="false" control_name="WLSkyDetail"
270 decimal_digits="0" enabled="true" follows="left|top" height="16" 270 decimal_digits="0" enabled="true" follows="left|top" height="16"
271 hidden="false" increment="8" initial_val="160" label=" Sky:" 271 increment="8" initial_val="160" label=" Sky:"
272 label_width="140" left_delta="0" max_val="128" min_val="16" 272 label_width="140" left_delta="0" max_val="128" min_val="16"
273 mouse_opaque="true" name="SkyMeshDetail" show_text="false" width="223" /> 273 mouse_opaque="true" name="SkyMeshDetail" show_text="false" width="223" />
274 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 274 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
275 bottom="-172" drop_shadow_visible="true" enabled="true" follows="left|top" 275 bottom="-172" drop_shadow_visible="true" enabled="true" follows="left|top"
276 font="SansSerifSmall" h_pad="0" halign="left" height="12" hidden="false" 276 font="SansSerifSmall" h_pad="0" halign="left" height="12"
277 left="444" mouse_opaque="true" name="PostProcessText" v_pad="0" width="128"> 277 left="444" mouse_opaque="true" name="PostProcessText" v_pad="0" width="128">
278 Low 278 Low
279 </text> 279 </text>
280 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 280 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
281 bottom="-210" drop_shadow_visible="true" enabled="true" follows="left|top" 281 bottom="-210" drop_shadow_visible="true" enabled="true" follows="left|top"
282 font="SansSerifSmall" h_pad="0" halign="left" height="12" hidden="false" 282 font="SansSerifSmall" h_pad="0" halign="left" height="12"
283 left="444" mouse_opaque="true" name="ObjectMeshDetailText" v_pad="0" 283 left="444" mouse_opaque="true" name="ObjectMeshDetailText" v_pad="0"
284 width="128"> 284 width="128">
285 Low 285 Low
@@ -287,53 +287,53 @@
287 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 287 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
288 bottom_delta="-20" drop_shadow_visible="true" enabled="true" 288 bottom_delta="-20" drop_shadow_visible="true" enabled="true"
289 follows="left|top" font="SansSerifSmall" h_pad="0" halign="left" 289 follows="left|top" font="SansSerifSmall" h_pad="0" halign="left"
290 height="12" hidden="false" left_delta="0" mouse_opaque="true" 290 height="12" left_delta="0" mouse_opaque="true"
291 name="FlexibleMeshDetailText" v_pad="0" width="128"> 291 name="FlexibleMeshDetailText" v_pad="0" width="128">
292 Low 292 Low
293 </text> 293 </text>
294 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 294 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
295 bottom_delta="-20" drop_shadow_visible="true" enabled="true" 295 bottom_delta="-20" drop_shadow_visible="true" enabled="true"
296 follows="left|top" font="SansSerifSmall" h_pad="0" halign="left" 296 follows="left|top" font="SansSerifSmall" h_pad="0" halign="left"
297 height="12" hidden="false" left_delta="0" mouse_opaque="true" 297 height="12" left_delta="0" mouse_opaque="true"
298 name="TreeMeshDetailText" v_pad="0" width="128"> 298 name="TreeMeshDetailText" v_pad="0" width="128">
299 Low 299 Low
300 </text> 300 </text>
301 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 301 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
302 bottom_delta="-20" drop_shadow_visible="true" enabled="true" 302 bottom_delta="-20" drop_shadow_visible="true" enabled="true"
303 follows="left|top" font="SansSerifSmall" h_pad="0" halign="left" 303 follows="left|top" font="SansSerifSmall" h_pad="0" halign="left"
304 height="12" hidden="false" left_delta="0" mouse_opaque="true" 304 height="12" left_delta="0" mouse_opaque="true"
305 name="AvatarMeshDetailText" v_pad="0" width="128"> 305 name="AvatarMeshDetailText" v_pad="0" width="128">
306 Low 306 Low
307 </text> 307 </text>
308 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 308 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
309 bottom_delta="-20" drop_shadow_visible="true" enabled="true" 309 bottom_delta="-20" drop_shadow_visible="true" enabled="true"
310 follows="left|top" font="SansSerifSmall" h_pad="0" halign="left" 310 follows="left|top" font="SansSerifSmall" h_pad="0" halign="left"
311 height="12" hidden="false" left_delta="0" mouse_opaque="true" 311 height="12" left_delta="0" mouse_opaque="true"
312 name="TerrainMeshDetailText" v_pad="0" width="128"> 312 name="TerrainMeshDetailText" v_pad="0" width="128">
313 Low 313 Low
314 </text> 314 </text>
315 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 315 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
316 bottom_delta="-20" drop_shadow_visible="true" enabled="true" 316 bottom_delta="-20" drop_shadow_visible="true" enabled="true"
317 follows="left|top" font="SansSerifSmall" h_pad="0" halign="left" 317 follows="left|top" font="SansSerifSmall" h_pad="0" halign="left"
318 height="12" hidden="false" left_delta="0" mouse_opaque="true" 318 height="12" left_delta="0" mouse_opaque="true"
319 name="SkyMeshDetailText" v_pad="0" width="128"> 319 name="SkyMeshDetailText" v_pad="0" width="128">
320 Low 320 Low
321 </text> 321 </text>
322 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 322 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
323 bottom="-331" drop_shadow_visible="true" enabled="true" follows="left|top" 323 bottom="-331" drop_shadow_visible="true" enabled="true" follows="left|top"
324 font="SansSerifSmall" h_pad="0" halign="left" height="12" hidden="false" 324 font="SansSerifSmall" h_pad="0" halign="left" height="12"
325 left="210" mouse_opaque="true" name="LightingDetailText" v_pad="0" 325 left="210" mouse_opaque="true" name="LightingDetailText" v_pad="0"
326 width="128"> 326 width="128">
327 Lighting Detail: 327 Lighting Detail:
328 </text> 328 </text>
329 <radio_group bottom_delta="-43" control_name="RenderLightingDetail" draw_border="false" 329 <radio_group bottom_delta="-43" control_name="RenderLightingDetail" draw_border="false"
330 enabled="true" follows="left|top" height="38" hidden="false" left_delta="0" 330 enabled="true" follows="left|top" height="38" left_delta="0"
331 mouse_opaque="true" name="LightingDetailRadio" width="321"> 331 mouse_opaque="true" name="LightingDetailRadio" width="321">
332 <radio_item type="string" length="1" bottom="-19" enabled="true" follows="left|top" height="16" hidden="false" 332 <radio_item type="string" length="1" bottom="-19" enabled="true" follows="left|top" height="16"
333 left="3" mouse_opaque="true" name="SunMoon" width="156"> 333 left="3" mouse_opaque="true" name="SunMoon" width="156">
334 Sun and moon only 334 Sun and moon only
335 </radio_item> 335 </radio_item>
336 <radio_item type="string" length="1" bottom="-35" enabled="true" follows="left|top" height="16" hidden="false" 336 <radio_item type="string" length="1" bottom="-35" enabled="true" follows="left|top" height="16"
337 left="3" mouse_opaque="true" name="LocalLights" width="156"> 337 left="3" mouse_opaque="true" name="LocalLights" width="156">
338 Nearby local lights 338 Nearby local lights
339 </radio_item> 339 </radio_item>
@@ -345,22 +345,22 @@
345 Terrain Detail: 345 Terrain Detail:
346 </text> 346 </text>
347 <radio_group bottom_delta="-43" control_name="RenderTerrainDetail" draw_border="false" 347 <radio_group bottom_delta="-43" control_name="RenderTerrainDetail" draw_border="false"
348 enabled="true" follows="left|top" height="38" hidden="false" left_delta="0" 348 enabled="true" follows="left|top" height="38" left_delta="0"
349 mouse_opaque="true" name="TerrainDetailRadio" width="321"> 349 mouse_opaque="true" name="TerrainDetailRadio" width="321">
350 <radio_item type="string" length="1" bottom="-19" enabled="true" follows="left|top" height="16" hidden="false" 350 <radio_item type="string" length="1" bottom="-19" enabled="true" follows="left|top" height="16"
351 left="3" mouse_opaque="true" name="0" width="315"> 351 left="3" mouse_opaque="true" name="0" width="315">
352 Low 352 Low
353 </radio_item> 353 </radio_item>
354 <radio_item type="string" length="1" bottom="-35" enabled="true" follows="left|top" height="16" hidden="false" 354 <radio_item type="string" length="1" bottom="-35" enabled="true" follows="left|top" height="16"
355 left="3" mouse_opaque="true" name="2" width="315"> 355 left="3" mouse_opaque="true" name="2" width="315">
356 High 356 High
357 </radio_item> 357 </radio_item>
358 </radio_group> 358 </radio_group>
359 <button bottom="-400" enabled="true" font="SansSerif" halign="center" height="20" 359 <button bottom="-400" enabled="true" font="SansSerif" halign="center" height="20"
360 hidden="false" label="Recommended Settings" left="130" mouse_opaque="true" 360 label="Recommended Settings" left="130" mouse_opaque="true"
361 name="Defaults" scale_image="true" width="170" /> 361 name="Defaults" scale_image="true" width="170" />
362 <button bottom="-400" enabled="true" font="SansSerif" halign="center" height="20" 362 <button bottom="-400" enabled="true" font="SansSerif" halign="center" height="20"
363 hidden="false" label="Hardware Options" label_selected="Hardware Options" 363 label="Hardware Options" label_selected="Hardware Options"
364 left="310" mouse_opaque="true" name="GraphicsHardwareButton" 364 left="310" mouse_opaque="true" name="GraphicsHardwareButton"
365 scale_image="true" width="170" /> 365 scale_image="true" width="170" />
366 <string name="resolution_format"> 366 <string name="resolution_format">
diff --git a/linden/indra/newview/skins/xui/en-us/panel_preferences_input.xml b/linden/indra/newview/skins/xui/en-us/panel_preferences_input.xml
index 982775b..85aab95 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_preferences_input.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_preferences_input.xml
@@ -39,33 +39,57 @@
39 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 39 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
40 bottom="-110" drop_shadow_visible="true" enabled="true" follows="left|top" 40 bottom="-110" drop_shadow_visible="true" enabled="true" follows="left|top"
41 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="148" 41 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="148"
42 mouse_opaque="true" name="Camera Springiness:" v_pad="0" width="128"> 42 mouse_opaque="true" name="Camera Follow Distance:" v_pad="0" width="128">
43 Camera Springiness: 43 Camera Follow Distance:
44 </text> 44 </text>
45 <slider bottom="-116" can_edit_text="true" control_name="DynamicCameraStrength" 45 <slider bottom="-116" can_edit_text="true" control_name="DynamicCameraStrength"
46 decimal_digits="0" enabled="true" follows="left|top" height="16" 46 decimal_digits="0" enabled="true" follows="left|top" height="16"
47 increment="1" initial_val="2" left="276" max_val="10" min_val="0" 47 increment="1" initial_val="2" left="276" max_val="10" min_val="0"
48 mouse_opaque="true" name="dynamic camera" show_text="true" value="2" 48 mouse_opaque="true" name="DynamicCameraStrength" show_text="true" value="2"
49 width="128" /> 49 width="128" />
50 <check_box bottom="-134" control_name="EditCameraMovement" enabled="true" 50 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
51 bottom="-134" drop_shadow_visible="true" enabled="true" follows="left|top"
52 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="148"
53 mouse_opaque="true" name="Camera Transition Time:" v_pad="0" width="128">
54 Camera Transition Time:
55 </text>
56 <slider bottom="-140" can_edit_text="true" control_name="ZoomTime" decimal_digits="1"
57 enabled="true" follows="left|top" height="16" increment="0.1"
58 initial_val="0.4" left="276" max_val="4" min_val="0" mouse_opaque="true"
59 name="ZoomTime" show_text="true" value="2" width="128" />
60 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
61 bottom="-158" drop_shadow_visible="true" enabled="true" follows="left|top"
62 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="148"
63 mouse_opaque="true" name="Camera Smoothing:" v_pad="0" width="128">
64 Camera Smoothing:
65 </text>
66 <slider bottom="-164" can_edit_text="true" control_name="CameraPositionSmoothing"
67 decimal_digits="1" enabled="true" follows="left|top" height="16"
68 increment="0.1" initial_val="1" left="276" max_val="9" min_val="0"
69 mouse_opaque="true" name="CameraPositionSmoothing" show_text="true" value="2"
70 width="128" />
71 <check_box bottom="-188" control_name="EditCameraMovement" enabled="true"
51 follows="left|top" font="SansSerifSmall" height="16" initial_value="false" 72 follows="left|top" font="SansSerifSmall" height="16" initial_value="false"
52 label="Automatic Edit Camera Movement" left="148" mouse_opaque="true" 73 label="Automatic Edit Camera Movement" left="148" mouse_opaque="true"
53 name="edit camera movement" radio_style="false" 74 name="edit camera movement" radio_style="false"
54 tool_tip="Use automatic camera positioning when entering and exiting edit mode" 75 tool_tip="Use automatic camera positioning when entering and exiting edit mode"
55 width="201" /> 76 width="201" />
56 <check_box bottom="-152" control_name="AppearanceCameraMovement" enabled="true" 77 <check_box bottom="-206" control_name="AppearanceCameraMovement" enabled="true"
57 follows="left|top" font="SansSerifSmall" height="16" initial_value="false" 78 follows="left|top" font="SansSerifSmall" height="16" initial_value="false"
58 label="Automatic Appearance Camera Movement" left="148" mouse_opaque="true" 79 label="Automatic Appearance Camera Movement" left="148" mouse_opaque="true"
59 name="appearance camera movement" radio_style="false" 80 name="appearance camera movement" radio_style="false"
60 tool_tip="Use automatic camera positioning while in edit mode" width="242" /> 81 tool_tip="Use automatic camera positioning while in edit mode" width="242" />
61 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 82 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
62 bottom="-186" drop_shadow_visible="true" enabled="true" follows="left|top" 83 bottom="-228" drop_shadow_visible="true" enabled="true" follows="left|top"
63 font="SansSerifSmall" h_pad="0" halign="left" height="12" hidden="false" 84 font="SansSerifSmall" h_pad="0" halign="left" height="12" left="10"
64 left="10" mouse_opaque="true" name="text2" v_pad="0" width="128"> 85 mouse_opaque="true" name="text2" v_pad="0" width="128">
65 Avatar Display Options: 86 Avatar Display Options:
66 </text> 87 </text>
67 <check_box bottom="-190" control_name="FirstPersonAvatarVisible" enabled="true" 88 <check_box bottom="-232" control_name="FirstPersonAvatarVisible" enabled="true"
68 follows="left|top" font="SansSerifSmall" height="16" hidden="false" 89 follows="left|top" font="SansSerifSmall" height="16" initial_value="false"
69 initial_value="false" label="Show Avatar in Mouselook" left="148" 90 label="Show Avatar in Mouselook" left="148" mouse_opaque="true" name="avfp"
70 mouse_opaque="true" name="avfp" radio_style="false" width="256" /> 91 radio_style="false" width="256" />
92 <button bottom_delta="-30" follows="left|top" font="SansSerif" height="20"
93 label="Joystick Setup" left_delta="0" mouse_opaque="true"
94 name="joystic_setup_button" width="155" />
71</panel> 95</panel>
diff --git a/linden/indra/newview/skins/xui/en-us/panel_preferences_popups.xml b/linden/indra/newview/skins/xui/en-us/panel_preferences_popups.xml
index 8563ad0..5e8f871 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_preferences_popups.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_preferences_popups.xml
@@ -1,13 +1,13 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel border="true" bottom="0" height="500" label="Popups" left="0" name="popups" 2<panel border="true" bottom="0" height="500" label="Popups" left="0" name="popups"
3 title="Popups" width="400"> 3 title="Popups" width="400">
4 <text bottom="-20" follows="top|left" left="15" width="300"> 4 <text bottom="-20" follows="top|left" left="15" width="300" name="dont_show_label">
5 Do not show popups: 5 Do not show popups:
6 </text> 6 </text>
7 <scroll_list follows="top|left" height="88" left="15" name="disabled_popups" width="480" /> 7 <scroll_list follows="top|left" height="88" left="15" name="disabled_popups" width="480" />
8 <button follows="top|left" height="20" label="Enable this popup" left="15" 8 <button follows="top|left" height="20" label="Enable this popup" left="15"
9 name="enable_popup" width="150" /> 9 name="enable_popup" width="150" />
10 <text follows="top|left" left="15" width="128"> 10 <text follows="top|left" left="15" width="128" name="show_label">
11 Show popups: 11 Show popups:
12 </text> 12 </text>
13 <scroll_list follows="top|left" height="88" left="15" name="enabled_popups" width="480" /> 13 <scroll_list follows="top|left" height="88" left="15" name="enabled_popups" width="480" />
diff --git a/linden/indra/newview/skins/xui/en-us/panel_preferences_voice.xml b/linden/indra/newview/skins/xui/en-us/panel_preferences_voice.xml
index 1314971..62fb7b7 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_preferences_voice.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_preferences_voice.xml
@@ -78,12 +78,9 @@
78 font="SansSerifSmall" height="35" hide_border="true" hide_scrollbar="true" 78 font="SansSerifSmall" height="35" hide_border="true" hide_scrollbar="true"
79 left_delta="-20" max_length="65535" mouse_opaque="true" 79 left_delta="-20" max_length="65535" mouse_opaque="true"
80 name="device_settings_text" tab_stop="false" width="450" word_wrap="true"> 80 name="device_settings_text" tab_stop="false" width="450" word_wrap="true">
81 NOTE: Running the Device Settings or Voice Chat Setup will temporarily disconnect you from Voice Chat. 81 NOTE: Running the Device Settings will temporarily disconnect you from Voice Chat.
82 </text_editor> 82 </text_editor>
83 <button bottom_delta="-30" follows="left|top" font="SansSerif" height="20" 83 <button bottom_delta="-30" follows="left|top" font="SansSerif" height="20"
84 label="Device Settings" left_delta="0" mouse_opaque="true" 84 label="Device Settings" left_delta="0" mouse_opaque="true"
85 name="device_settings_btn" width="155" /> 85 name="device_settings_btn" width="155" />
86 <button bottom_delta="-30" follows="left|top" font="SansSerif" height="20"
87 label="Voice Chat Setup" left_delta="0" mouse_opaque="true"
88 name="launch_voice_wizard_button" width="155" />
89</panel> 86</panel>
diff --git a/linden/indra/newview/skins/xui/en-us/panel_region_covenant.xml b/linden/indra/newview/skins/xui/en-us/panel_region_covenant.xml
index 1c49932..9bb7d90 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_region_covenant.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_region_covenant.xml
@@ -9,46 +9,46 @@
9 left="10" name="region_name_lbl" width="75"> 9 left="10" name="region_name_lbl" width="75">
10 Region: 10 Region:
11 </text> 11 </text>
12 <text bg_readonly_color="clear" bottom_delta="-14" follows="left|top" 12 <text bottom_delta="-14" follows="left|top"
13 font="SansSerifSmall" height="20" left_delta="0" name="region_name_text" 13 font="SansSerifSmall" height="20" left_delta="0" name="region_name_text"
14 text_readonly_color="white" width="130"> 14 width="130">
15 (unknown) 15 (unknown)
16 </text> 16 </text>
17 <text bottom_delta="-22" follows="left|top" font="SansSerifSmall" height="20" 17 <text bottom_delta="-22" follows="left|top" font="SansSerifSmall" height="20"
18 left="10" name="estate_name_lbl" width="75"> 18 left="10" name="estate_name_lbl" width="75">
19 Estate: 19 Estate:
20 </text> 20 </text>
21 <text bg_readonly_color="clear" bottom_delta="-14" follows="left|top" 21 <text bottom_delta="-14" follows="left|top"
22 font="SansSerifSmall" height="20" left_delta="0" name="estate_name_text" 22 font="SansSerifSmall" height="20" left_delta="0" name="estate_name_text"
23 text_readonly_color="white" width="130"> 23 width="130">
24 (unknown) 24 (unknown)
25 </text> 25 </text>
26 <text bottom_delta="-22" follows="left|top" font="SansSerifSmall" height="20" 26 <text bottom_delta="-22" follows="left|top" font="SansSerifSmall" height="20"
27 left="10" name="estate_owner_lbl" width="300"> 27 left="10" name="estate_owner_lbl" width="300">
28 Estate Owner: 28 Estate Owner:
29 </text> 29 </text>
30 <text bg_readonly_color="clear" bottom_delta="-14" follows="left|top" 30 <text bottom_delta="-14" follows="left|top"
31 font="SansSerifSmall" height="20" left_delta="0" name="estate_owner_text" 31 font="SansSerifSmall" height="20" left_delta="0" name="estate_owner_text"
32 text_readonly_color="white" width="120"> 32 width="120">
33 (unknown) 33 (unknown)
34 </text> 34 </text>
35 <text bg_readonly_color="clear" bottom_delta="-28" follows="left|top" 35 <text bottom_delta="-28" follows="left|top"
36 font="SansSerif" height="20" left_delta="0" name="resellable_clause" 36 font="SansSerif" height="20" left_delta="0" name="resellable_clause"
37 text_readonly_color="white" width="465"> 37 width="465">
38 Purchased land in this region may or may not be resold. 38 Purchased land in this region may or may not be resold.
39 </text> 39 </text>
40 <text bg_readonly_color="clear" bottom_delta="-18" follows="left|top" 40 <text bottom_delta="-18" follows="left|top"
41 font="SansSerif" height="20" left_delta="0" name="changeable_clause" 41 font="SansSerif" height="20" left_delta="0" name="changeable_clause"
42 text_readonly_color="white" width="465"> 42 width="465">
43 Purchased land in this region may or may not be joined or subdivided. 43 Purchased land in this region may or may not be joined or subdivided.
44 </text> 44 </text>
45 <text bottom_delta="-22" follows="left|top" font="SansSerifSmall" height="16" 45 <text bottom_delta="-22" follows="left|top" font="SansSerifSmall" height="16"
46 left_delta="0" name="covenent_instructions" width="465"> 46 left_delta="0" name="covenent_instructions" width="465">
47 Drag and drop a notecard to change the Covenant for this Estate. 47 Drag and drop a notecard to change the Covenant for this Estate.
48 </text> 48 </text>
49 <text_editor bg_readonly_color="clear" bottom_delta="-242" enabled="false" 49 <text_editor bottom_delta="-242" enabled="false"
50 follows="left|top" font="SansSerifSmall" height="238" left_delta="0" 50 follows="left|top" font="SansSerifSmall" height="238" left_delta="0"
51 max_length="65535" name="covenant_editor" text_readonly_color="white" 51 max_length="65535" name="covenant_editor"
52 width="460" word_wrap="true"> 52 width="460" word_wrap="true">
53 Loading... 53 Loading...
54 </text_editor> 54 </text_editor>
diff --git a/linden/indra/newview/skins/xui/en-us/panel_region_debug.xml b/linden/indra/newview/skins/xui/en-us/panel_region_debug.xml
index 4392888..b1c2bb7 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_region_debug.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_region_debug.xml
@@ -30,17 +30,17 @@
30 left="10" name="choose_avatar_btn" width="150" /> 30 left="10" name="choose_avatar_btn" width="150" />
31 <text bottom_delta="0" follows="left|top" height="20" left="170" 31 <text bottom_delta="0" follows="left|top" height="20" left="170"
32 name="target_avatar_name" width="150" /> 32 name="target_avatar_name" width="150" />
33 <button bottom_delta="-20" follows="left|top" height="20" 33 <button bottom_delta="-23" follows="left|top" height="20"
34 label="Return avatar&apos;s scripted objects on other people&apos;s land" 34 label="Return avatar&apos;s scripted objects on other people&apos;s land"
35 left="50" name="return_scripted_other_land_btn" width="350" /> 35 left="50" name="return_scripted_other_land_btn" width="350" />
36 <button bottom_delta="-20" follows="left|top" height="20" 36 <button bottom_delta="-23" follows="left|top" height="20"
37 label="Return ALL of avatar&apos;s scripted objects" left="50" 37 label="Return ALL of avatar&apos;s scripted objects" left="50"
38 name="return_scripted_all_btn" width="350" /> 38 name="return_scripted_all_btn" width="350" />
39 <button bottom_delta="-50" follows="left|top" height="20" label="Get Top Colliders..." 39 <button bottom_delta="-50" follows="left|top" height="20" label="Get Top Colliders..."
40 left="10" name="top_colliders_btn" 40 left="10" name="top_colliders_btn"
41 tool_tip="List of objects experiencing the most potential collisions" 41 tool_tip="List of objects experiencing the most potential collisions"
42 width="150" /> 42 width="150" />
43 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" height="18" label="?" 43 <button bottom_delta="-3" follows="left|top" font="SansSerifSmall" height="18" label="?"
44 left="170" name="top_colliders_help" width="18" /> 44 left="170" name="top_colliders_help" width="18" />
45 <button bottom_delta="-20" follows="left|top" height="20" label="Get Top Scripts..." 45 <button bottom_delta="-20" follows="left|top" height="20" label="Get Top Scripts..."
46 left="10" name="top_scripts_btn" 46 left="10" name="top_scripts_btn"
@@ -51,7 +51,7 @@
51 <button bottom_delta="-50" follows="left|top" height="20" label="Restart Region" 51 <button bottom_delta="-50" follows="left|top" height="20" label="Restart Region"
52 left="10" name="restart_btn" 52 left="10" name="restart_btn"
53 tool_tip="Give 2 minute countdown and restart region" width="130" /> 53 tool_tip="Give 2 minute countdown and restart region" width="130" />
54 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" height="18" label="?" 54 <button bottom_delta="-3" follows="left|top" font="SansSerifSmall" height="18" label="?"
55 left="150" name="restart_help" width="18" /> 55 left="150" name="restart_help" width="18" />
56 <button bottom_delta="-20" follows="left|top" height="20" label="Delay Restart" 56 <button bottom_delta="-20" follows="left|top" height="20" label="Delay Restart"
57 left="10" name="cancel_restart_btn" 57 left="10" name="cancel_restart_btn"
diff --git a/linden/indra/newview/skins/xui/en-us/panel_region_estate.xml b/linden/indra/newview/skins/xui/en-us/panel_region_estate.xml
index 6132489..393ce42 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_region_estate.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_region_estate.xml
@@ -10,18 +10,18 @@ regions in the estate.
10 name="estate_text" width="80"> 10 name="estate_text" width="80">
11 Estate: 11 Estate:
12 </text> 12 </text>
13 <text bg_readonly_color="clear" bottom_delta="-16" follows="left|top" 13 <text bottom_delta="-16" follows="left|top"
14 font="SansSerif" height="20" left_delta="0" name="estate_name" 14 font="SansSerif" height="20" left_delta="0" name="estate_name"
15 text_readonly_color="white" width="150"> 15 width="150">
16 (unknown) 16 (unknown)
17 </text> 17 </text>
18 <text bottom_delta="-22" follows="left|top" font="SansSerif" height="20" left="10" 18 <text bottom_delta="-22" follows="left|top" font="SansSerif" height="20" left="10"
19 name="owner_text" width="80"> 19 name="owner_text" width="80">
20 Owner: 20 Owner:
21 </text> 21 </text>
22 <text bg_readonly_color="clear" bottom_delta="-16" follows="left|top" 22 <text bottom_delta="-16" follows="left|top"
23 font="SansSerif" height="20" left_delta="0" name="estate_owner" 23 font="SansSerif" height="20" left_delta="0" name="estate_owner"
24 text_readonly_color="white" width="150"> 24 width="150">
25 (unknown) 25 (unknown)
26 </text> 26 </text>
27 <view_border bevel_style="in" border="true" border_thickness="1" bottom_delta="-295" 27 <view_border bevel_style="in" border="true" border_thickness="1" bottom_delta="-295"
@@ -93,7 +93,7 @@ regions in the estate.
93 name="estate_manager_help" right="470" width="18" /> 93 name="estate_manager_help" right="470" width="18" />
94 <view_border bevel_style="none" border_thickness="1" bottom_delta="-60" follows="top|left" 94 <view_border bevel_style="none" border_thickness="1" bottom_delta="-60" follows="top|left"
95 right="470" width="200" /> 95 right="470" width="200" />
96 <name_list bottom_delta="0" follows="left|top" height="60" left_delta="0" 96 <name_list bottom_delta="0" follows="left|top" height="60" left_delta="0" multi_select="true"
97 name="estate_manager_name_list" width="200" /> 97 name="estate_manager_name_list" width="200" />
98 <button bottom_delta="-26" enabled="true" follows="left|top" height="20" 98 <button bottom_delta="-26" enabled="true" follows="left|top" height="20"
99 label="Remove..." name="remove_estate_manager_btn" right="470" width="90" /> 99 label="Remove..." name="remove_estate_manager_btn" right="470" width="90" />
@@ -107,7 +107,7 @@ regions in the estate.
107 name="allow_resident_help" right="470" width="18" /> 107 name="allow_resident_help" right="470" width="18" />
108 <view_border bevel_style="none" border_thickness="1" bottom_delta="-60" follows="top|left" 108 <view_border bevel_style="none" border_thickness="1" bottom_delta="-60" follows="top|left"
109 height="60" right="470" width="200" /> 109 height="60" right="470" width="200" />
110 <name_list bottom_delta="0" follows="left|top" height="60" left_delta="0" 110 <name_list bottom_delta="0" follows="left|top" height="60" left_delta="0" multi_select="true"
111 name="allowed_avatar_name_list" width="200" /> 111 name="allowed_avatar_name_list" width="200" />
112 <button bottom_delta="-26" enabled="true" follows="left|top" height="20" 112 <button bottom_delta="-26" enabled="true" follows="left|top" height="20"
113 label="Remove..." name="remove_allowed_avatar_btn" right="470" width="90" /> 113 label="Remove..." name="remove_allowed_avatar_btn" right="470" width="90" />
@@ -121,7 +121,7 @@ regions in the estate.
121 name="allow_group_help" right="470" width="18" /> 121 name="allow_group_help" right="470" width="18" />
122 <view_border bevel_style="none" border_thickness="1" bottom_delta="-60" follows="top|left" 122 <view_border bevel_style="none" border_thickness="1" bottom_delta="-60" follows="top|left"
123 height="60" right="470" width="200" /> 123 height="60" right="470" width="200" />
124 <name_list bottom_delta="0" follows="left|top" height="60" left_delta="0" 124 <name_list bottom_delta="0" follows="left|top" height="60" left_delta="0" multi_select="true"
125 name="allowed_group_name_list" width="200" /> 125 name="allowed_group_name_list" width="200" />
126 <button bottom_delta="-26" enabled="true" follows="left|top" height="20" 126 <button bottom_delta="-26" enabled="true" follows="left|top" height="20"
127 label="Remove..." name="remove_allowed_group_btn" right="470" width="90" /> 127 label="Remove..." name="remove_allowed_group_btn" right="470" width="90" />
@@ -135,7 +135,7 @@ regions in the estate.
135 name="ban_resident_help" right="470" width="18" /> 135 name="ban_resident_help" right="470" width="18" />
136 <view_border bevel_style="none" border_thickness="1" bottom_delta="-60" follows="top|left" 136 <view_border bevel_style="none" border_thickness="1" bottom_delta="-60" follows="top|left"
137 height="60" right="470" width="200" /> 137 height="60" right="470" width="200" />
138 <name_list bottom_delta="0" follows="left|top" height="60" left_delta="0" 138 <name_list bottom_delta="0" follows="left|top" height="60" left_delta="0" multi_select="true"
139 name="banned_avatar_name_list" width="200" /> 139 name="banned_avatar_name_list" width="200" />
140 <button bottom_delta="-26" enabled="true" follows="left|top" height="20" 140 <button bottom_delta="-26" enabled="true" follows="left|top" height="20"
141 label="Remove..." name="remove_banned_avatar_btn" right="470" width="90" /> 141 label="Remove..." name="remove_banned_avatar_btn" right="470" width="90" />
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 f3074b8..fa12fca 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
@@ -42,7 +42,7 @@
42 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" height="18" label="?" 42 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" height="18" label="?"
43 left="205" name="parcel_search_help" width="18" /> 43 left="205" name="parcel_search_help" width="18" />
44 <spinner bottom_delta="-40" follows="left|top" height="20" increment="1" 44 <spinner bottom_delta="-40" follows="left|top" height="20" increment="1"
45 label="Agent Limit" label_width="97" left="10" max_val="100" min_val="0" 45 label="Agent Limit" label_width="97" left="10" max_val="100" min_val="1"
46 name="agent_limit_spin" width="170" /> 46 name="agent_limit_spin" width="170" />
47 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" height="18" label="?" 47 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" height="18" label="?"
48 left="205" name="agent_limit_help" width="18" /> 48 left="205" name="agent_limit_help" width="18" />
@@ -57,10 +57,10 @@
57 </text> 57 </text>
58 <combo_box bottom_delta="0" follows="left|top" height="20" label="Mature" left="110" 58 <combo_box bottom_delta="0" follows="left|top" height="20" label="Mature" left="110"
59 name="access_combo" width="85"> 59 name="access_combo" width="85">
60 <combo_item name="PG"> 60 <combo_item name="PG" value="PG">
61 PG 61 PG
62 </combo_item> 62 </combo_item>
63 <combo_item name="Mature"> 63 <combo_item name="Mature" value="Mature">
64 Mature 64 Mature
65 </combo_item> 65 </combo_item>
66 </combo_box> 66 </combo_box>
@@ -70,9 +70,8 @@
70 left="108" name="apply_btn" width="100" /> 70 left="108" name="apply_btn" width="100" />
71 <button bottom_delta="-80" follows="left|top" height="20" 71 <button bottom_delta="-80" follows="left|top" height="20"
72 label="Teleport Home One User..." left="10" name="kick_btn" width="250" /> 72 label="Teleport Home One User..." left="10" name="kick_btn" width="250" />
73 <button bottom_delta="-20" follows="left|top" height="20" 73 <button bottom_delta="-23" follows="left|top" height="20"
74 label="Teleport Home All Users..." left="10" name="kick_all_btn" 74 label="Teleport Home All Users..." left="10" name="kick_all_btn" width="250" />
75 width="250" />
76 <button bottom_delta="-40" follows="left|top" height="20" 75 <button bottom_delta="-40" follows="left|top" height="20"
77 label="Send Message To Region..." left="10" name="im_btn" width="200" /> 76 label="Send Message To Region..." left="10" name="im_btn" width="200" />
78 <button bottom="-50" follows="left|top" height="20" label="Manage Telehub..." 77 <button bottom="-50" follows="left|top" height="20" label="Manage Telehub..."
diff --git a/linden/indra/newview/skins/xui/en-us/panel_region_terrain.xml b/linden/indra/newview/skins/xui/en-us/panel_region_terrain.xml
index 30f5f6b..e93e87c 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_region_terrain.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_region_terrain.xml
@@ -46,7 +46,7 @@
46 tool_tip="Available only to estate owners, not managers" width="170" /> 46 tool_tip="Available only to estate owners, not managers" width="170" />
47 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" height="18" label="?" 47 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" height="18" label="?"
48 left="190" name="download_raw_help" width="18" /> 48 left="190" name="download_raw_help" width="18" />
49 <button bottom_delta="-20" follows="left|top" height="20" label="Upload RAW terrain..." 49 <button bottom_delta="-23" follows="left|top" height="20" label="Upload RAW terrain..."
50 left="10" name="upload_raw_btn" 50 left="10" name="upload_raw_btn"
51 tool_tip="Available only to estate owners, not managers" width="170" /> 51 tool_tip="Available only to estate owners, not managers" width="170" />
52 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" height="18" label="?" 52 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" height="18" label="?"
diff --git a/linden/indra/newview/skins/xui/en-us/panel_settings_chat.xml b/linden/indra/newview/skins/xui/en-us/panel_settings_chat.xml
deleted file mode 100644
index 1c7aff7..0000000
--- a/linden/indra/newview/skins/xui/en-us/panel_settings_chat.xml
+++ /dev/null
@@ -1,76 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel border="true" bottom="0" height="500" left="0" name="chat" title="Conversation"
3 width="400">
4 <text bottom="-20" follows="top|left" left="12" width="128">
5 Chat Font Size:
6 </text>
7 <radio_group bottom="-72" follows="top|left" height="60" left="148" name="chat font size"
8 width="128">
9 <radio_item>
10 Small
11 </radio_item>
12 <radio_item>
13 Medium
14 </radio_item>
15 <radio_item>
16 Large
17 </radio_item>
18 </radio_group>
19 <text bottom="-95" follows="top|left" left="12" width="128">
20 Chat Color:
21 </text>
22 <color_swatch bottom="-140" follows="top|left" height="56" label="System" left="148"
23 name="system" width="40" />
24 <color_swatch bottom="-140" follows="top|left" height="56" label="Users" left="210"
25 name="users" width="40" />
26 <color_swatch bottom="-140" follows="top|left" height="56" label="Objects" left="272"
27 name="objects" width="40" />
28 <color_swatch bottom="-140" follows="top|left" height="56" label="Bubble" left="334"
29 name="background" width="40" />
30 <text bottom="-167" follows="top|left" left="12" width="128">
31 Chat Console:
32 </text>
33 <spinner bottom="-173" decimal_digits="0" follows="top|left" increment="1"
34 initial_val="10" label="Fade chat after" label_width="80" left="148"
35 max_val="60" min_val="2" name="fade_chat_time" width="130" />
36 <text bottom="-167" follows="top|left" left="282" width="80">
37 (seconds)
38 </text>
39 <spinner bottom="-170" decimal_digits="0" follows="top|left" increment="1"
40 initial_val="10" label="" label_width="0" left="340" max_val="50"
41 min_val="1" name="max_chat_count" width="60" />
42 <text bottom="-167" follows="top|left" left="405" width="60">
43 (# lines)
44 </text>
45 <slider bottom="-192" follows="top|left" height="12" increment="0.05" initial_val="1"
46 label="Opacity" left="148" name="console_opacity" width="200" />
47 <text bottom_delta="-20" follows="top|left" left="12" width="128">
48 Chat Options:
49 </text>
50 <check_box bottom_delta="-7" follows="top|left"
51 label="Chat uses full screen width (after restart)" left="148"
52 name="chat_full_width_check" />
53 <check_box bottom_delta="-20" follows="top|left" label="Close chat after hitting return"
54 left="148" name="close_chat_on_return_check" />
55 <check_box bottom_delta="-20" follows="top|left"
56 label="Arrow keys move avatar when chatting" left="148"
57 name="arrow_keys_move_avatar_check" />
58 <check_box bottom_delta="-20" follows="top|left" label="Show timestamps in chat"
59 left="148" name="show_timestamps_check" />
60 <text bottom_delta="-20" follows="top|left" left="12" width="128">
61 Bubble Chat:
62 </text>
63 <check_box bottom_delta="-7" follows="top|left" label="Show chat bubbles" left="148"
64 name="bubble_text_chat" />
65 <slider bottom_delta="-20" follows="top|left" height="12" increment="0.05"
66 initial_val="1" label="Opacity" left="148" name="bubble_chat_opacity"
67 width="200" />
68 <text bottom_delta="-20" follows="top|left" left="12" width="128">
69 Script Errors:
70 </text>
71 <check_box bottom_delta="-7" follows="top|left"
72 label="Show script errors and warnings as regular chat" left="148"
73 name="script_errors_as_chat" />
74 <color_swatch bottom_delta="-60" follows="top|left" height="56" label="Color" left="148"
75 name="script_error" width="40" />
76</panel>
diff --git a/linden/indra/newview/skins/xui/en-us/panel_settings_im.xml b/linden/indra/newview/skins/xui/en-us/panel_settings_im.xml
deleted file mode 100644
index 3a497fa..0000000
--- a/linden/indra/newview/skins/xui/en-us/panel_settings_im.xml
+++ /dev/null
@@ -1,18 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel border="true" bottom="0" height="500" left="0" name="im" title="IM" width="400">
3 <text bottom="-20" left="12" width="128">
4 IM Options:
5 </text>
6 <check_box bottom_delta="-5" follows="top|left" label="Send IM to e-mail" left="148"
7 name="send_im_to_email"
8 tool_tip="Change your email address at secondlife.com" />
9 <check_box bottom_delta="-20" follows="top|left" label="Include IM in Chat History"
10 left="148" name="include_im_in_chat_history" />
11 <check_box bottom_delta="-20" follows="top|left" label="Show timestamps in IM" left="148"
12 name="show_timestamps_check" />
13 <text bottom_delta="-20" follows="top|left" left="12" width="128">
14 Busy Mode Response:
15 </text>
16 <text_editor bottom_delta="-60" follows="top|left" font="SansSerifSmall" height="70"
17 left="148" name="busy_response" width="330" word_wrap="true" />
18</panel>
diff --git a/linden/indra/newview/skins/xui/en-us/panel_settings_network.xml b/linden/indra/newview/skins/xui/en-us/panel_settings_network.xml
deleted file mode 100644
index 866634c..0000000
--- a/linden/indra/newview/skins/xui/en-us/panel_settings_network.xml
+++ /dev/null
@@ -1,71 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel border="true" bottom="0" height="500" left="0" name="network" title="Network"
3 width="400">
4 <text bottom="-20" follows="top|left" left="12" width="128">
5 Maximum Bandwidth:
6 </text>
7 <slider bottom_delta="-5" can_edit_text="true" decimal_digits="0" follows="top|left"
8 height="15" increment="10" initial_val="50" label="" left="148"
9 max_val="1000" min_val="50" name="max_bandwidth" width="200" />
10 <text bottom="-20" follows="top|left" left="350" width="140">
11 kbps (kilobits per second)
12 </text>
13 <text bottom_delta="-25" follows="top|left" left="12" width="128">
14 Disk Cache Size:
15 </text>
16 <radio_group bottom_delta="-70" follows="top|left" height="80" left="148" name="disk cache"
17 width="128">
18 <radio_item>
19 50 MB
20 </radio_item>
21 <radio_item>
22 200 MB
23 </radio_item>
24 <radio_item>
25 500 MB
26 </radio_item>
27 <radio_item>
28 1000 MB
29 </radio_item>
30 </radio_group>
31 <button bottom_delta="-120" follows="left|bottom" height="20" label="Clear Cache"
32 left="148" name="clear_cache" width="128" />
33 <text bottom="-180" follows="top|left" left="12" width="128">
34 Proxy configuration:
35 </text>
36 <check_box bottom_delta="-5" follows="top|left" label="Use proxy" left="148"
37 name="proxy_enabled" tool_tip="Specify the proxy configuration" />
38 <text bottom_delta="-22" follows="top|left" left="148" width="140">
39 Proxy:
40 </text>
41 <line_editor bottom_delta="-8" follows="top|left" font="SansSerifSmall" height="20"
42 left="205" name="proxy_address"
43 tool_tip="The name or IP address of the proxy you would like to use"
44 width="205" word_wrap="false" />
45 <text bottom="-300" follows="left" left="428" width="75">
46 Port:
47 </text>
48 <line_editor bottom_delta="-7" follows="left" font="SansSerifSmall" height="20" left="460"
49 name="proxy_port"
50 tool_tip="The port number of the proxy you would like to use" width="35"
51 word_wrap="false" />
52 <text bottom="-330" follows="left" left="148" width="75">
53 Socks:
54 </text>
55 <radio_group bottom="-265" follows="top|left" height="40" left="205" name="socks_4_5"
56 width="205">
57 <radio_item>
58 Socks v4
59 </radio_item>
60 <radio_item>
61 Socks v5
62 </radio_item>
63 </radio_group>
64 <text bottom_delta="-23" follows="top|left" left="148" width="140">
65 No proxy:
66 </text>
67 <line_editor bottom_delta="-5" follows="top|left" font="SansSerifSmall" height="20"
68 left="205" name="proxy_exclusions"
69 tool_tip="The names or IP addresses you don&apos;t want to use the proxy for"
70 width="205" word_wrap="false" />
71</panel>
diff --git a/linden/indra/newview/skins/xui/en-us/panel_settings_web.xml b/linden/indra/newview/skins/xui/en-us/panel_settings_web.xml
deleted file mode 100644
index 2df660f..0000000
--- a/linden/indra/newview/skins/xui/en-us/panel_settings_web.xml
+++ /dev/null
@@ -1,72 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel border="true" bottom="0" height="500" left="0" name="web" title="Web"
3 width="400">
4 <check_box follows="top|left"
5 label="Use external web browser (Firefox, Safari, Internet Explorer)"
6 left="150" name="external_browser_check"
7 tool_tip="Use outside web browser for help, web links, etc.\nNot recommended if running full screen."
8 width="480" />
9 <text bottom="-65" follows="top|left" left="15" width="128">
10 Browser home page:
11 </text>
12 <line_editor bottom_delta="-5" follows="top|left" font="SansSerifSmall" height="20"
13 left="150" name="home_page"
14 tool_tip="Web page to visit the first time you use the open the Second Life browser"
15 width="345" word_wrap="false" />
16 <text bottom="-95" follows="top|left" left="15" width="128">
17 Proxy configuration:
18 </text>
19 <check_box bottom_delta="-5" follows="top|left" label="Use proxy for internal Web browser"
20 left="148" name="proxy_enabled"
21 tool_tip="Specify the proxy configuration for the internal Web Browser" />
22 <text bottom_delta="-22" follows="top|left" left="180" width="140">
23 Proxy:
24 </text>
25 <line_editor bottom_delta="-5" follows="top|left" font="SansSerifSmall" height="20"
26 left="260" name="proxy_address"
27 tool_tip="The name or IP address of the proxy you would like to use"
28 width="165" word_wrap="false" />
29 <text bottom="285" follows="left" left="432" width="75">
30 Port:
31 </text>
32 <line_editor bottom="280" follows="left" font="SansSerifSmall" height="20" left="460"
33 name="proxy_port"
34 tool_tip="The port number of the proxy you would like to use" width="35"
35 word_wrap="false" />
36 <text bottom_delta="-15" follows="left" left="180" width="75">
37 Socks:
38 </text>
39 <radio_group bottom="325" follows="top|left" height="40" left="260" name="socks_4_5"
40 width="235">
41 <radio_item>
42 Socks v4
43 </radio_item>
44 <radio_item>
45 Socks v5
46 </radio_item>
47 </radio_group>
48 <text bottom_delta="-23" follows="top|left" left="180" width="140">
49 No proxy for:
50 </text>
51 <line_editor bottom_delta="-5" follows="top|left" font="SansSerifSmall" height="20"
52 left="260" name="proxy_exclusions"
53 tool_tip="The names or IP addresses you don&apos;t want to use the proxy for"
54 width="235" word_wrap="false" />
55 <check_box bottom_delta="-30" follows="top|left"
56 label="Show web pages on objects (experimental, requires restart)"
57 left="150" name="web_pages_on_prims_check" width="480" />
58 <text bottom_delta="-16" follows="top|left" left="15" width="140">
59 Trusted sites:
60(log in to view)
61 </text>
62 <scroll_list bottom_delta="-95" follows="top|left" height="100" left="155"
63 name="trusted_sites_list" width="340" />
64 <button bottom_delta="-25" follows="top|left" height="20" label="Add" left="150"
65 name="add_trusted" width="100" />
66 <line_editor bottom_delta="-1" follows="top|left" font="SansSerifSmall" height="20"
67 left="260" name="trusted_site_entry"
68 tool_tip="The site to add to the trusted list" width="235"
69 word_wrap="false" />
70 <button bottom_delta="-25" follows="top|left" height="20" label="Remove" left="150"
71 name="rem_trusted" width="100" />
72</panel>
diff --git a/linden/indra/newview/skins/xui/en-us/panel_speaker_controls.xml b/linden/indra/newview/skins/xui/en-us/panel_speaker_controls.xml
index ec55c55..1a9b6a8 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_speaker_controls.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_speaker_controls.xml
@@ -4,8 +4,8 @@
4 <string name="moderator_label"> 4 <string name="moderator_label">
5 (Moderator) 5 (Moderator)
6 </string> 6 </string>
7 <layout_stack border="false" bottom="0" follows="left|top|right|bottom" height="120" left="0" 7 <layout_stack border="false" bottom="0" follows="left|top|right|bottom" height="123" left="0"
8 orientation="vertical" tab_group="1" width="140"> 8 orientation="vertical" tab_group="1" width="140" name="panels">
9 <layout_panel auto_resize="false" bottom="0" can_resize="false" height="25" left="0" 9 <layout_panel auto_resize="false" bottom="0" can_resize="false" height="25" left="0"
10 min_height="25" name="moderation_mode_panel" top_delta="0" 10 min_height="25" name="moderation_mode_panel" top_delta="0"
11 user_resize="false" visible="false" width="140"> 11 user_resize="false" visible="false" width="140">
@@ -33,21 +33,21 @@
33 <panel border="false" bottom="0" can_resize="false" follows="left|bottom|right" 33 <panel border="false" bottom="0" can_resize="false" follows="left|bottom|right"
34 height="77" left="0" mouse_opaque="true" name="speaker_controls" 34 height="77" left="0" mouse_opaque="true" name="speaker_controls"
35 width="140"> 35 width="140">
36 <button bottom="-28" enabled="false" follows="left|top" height="24" 36 <button bottom="-28" enabled="false" follows="left|top" height="20"
37 image_overlay="icon_avatar_offline.tga" label="" left="0" 37 image_overlay="icon_avatar_offline.tga" label="" left="4"
38 name="profile_btn" right="30" /> 38 name="profile_btn" right="34" scale_image="true"/>
39 <text bottom_delta="9" follows="left|top|right" font="SansSerif" left_delta="34" 39 <text bottom_delta="9" follows="left|top|right" font="SansSerif" left_delta="34"
40 name="resident_name" valign="center" width="140"> 40 name="resident_name" valign="center" width="140">
41 Rumplstiltskin Califragilistic 41 Rumplstiltskin Califragilistic
42 </text> 42 </text>
43 <volume_slider bottom_delta="-29" follows="left|top" height="15" increment="0.05" 43 <volume_slider bottom_delta="-29" follows="left|top" height="15" increment="0.05"
44 initial_val="0.5" left="5" max_val="1.0" min_val="0.0" 44 initial_val="0.5" left="0" max_val="1.0" min_val="0.0"
45 name="speaker_volume" width="110" /> 45 name="speaker_volume" width="110" />
46 <button bottom_delta="0" height="20" image_selected="icn_speaker-muted_dark.tga" 46 <button bottom_delta="0" height="20" image_selected="icn_speaker-muted_dark.tga"
47 image_unselected="icn_speaker_dark.tga" label="" left_delta="110" 47 image_unselected="icn_speaker_dark.tga" label="" left_delta="110"
48 name="mute_btn" tool_tip="Mute voice for this resident" width="25" /> 48 name="mute_btn" tool_tip="Mute voice for this resident" width="25" />
49 <check_box bottom_delta="-25" enabled="false" follows="left|top" height="25" 49 <check_box bottom_delta="-25" enabled="false" follows="left|top" height="25"
50 label="Mute Text" left="4" name="mute_text_btn" width="50" /> 50 label="Mute Text" left="3" name="mute_text_btn" width="50" />
51 </panel> 51 </panel>
52 </layout_panel> 52 </layout_panel>
53 <layout_panel auto_resize="false" bottom="0" can_resize="false" height="60" left="0" 53 <layout_panel auto_resize="false" bottom="0" can_resize="false" height="60" left="0"
diff --git a/linden/indra/newview/skins/xui/en-us/panel_status_bar.xml b/linden/indra/newview/skins/xui/en-us/panel_status_bar.xml
index 9f39fd6..1def3fb 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_status_bar.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_status_bar.xml
@@ -7,30 +7,30 @@
7 bottom="-22" drop_shadow_visible="true" enabled="true" 7 bottom="-22" drop_shadow_visible="true" enabled="true"
8 follows="left|right|bottom" font="SansSerifSmall" h_pad="0" halign="left" 8 follows="left|right|bottom" font="SansSerifSmall" h_pad="0" halign="left"
9 height="18" hover="true" left="561" mouse_opaque="true" 9 height="18" hover="true" left="561" mouse_opaque="true"
10 name="ParcelNameText" 10 name="ParcelNameText" text_color="ParcelTextColor" hover_color="ParcelHoverColor"
11 tool_tip="Name of land parcel on which you are standing. Click for About Land." 11 tool_tip="Name of land parcel on which you are standing. Click for About Land."
12 v_pad="2" width="1039"> 12 v_pad="2" width="1039">
13 parcel name goes here 13 parcel name goes here
14 </text> 14 </text>
15 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 15 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
16 bottom="-20" disabled_color="0 1 0 1" drop_shadow_visible="true" 16 bottom="-20" disabled_color="BalanceTextColor" drop_shadow_visible="true"
17 enabled="true" follows="right|bottom" font="SansSerifSmall" h_pad="0" 17 enabled="true" follows="right|bottom" font="SansSerifSmall" h_pad="0"
18 halign="right" height="18" left="-210" mouse_opaque="true" 18 halign="right" height="18" left="-210" mouse_opaque="true"
19 name="BalanceText" text_color="0 1 0 1" tool_tip="Account Balance" 19 name="BalanceText" text_color="BalanceTextColor" tool_tip="Account Balance"
20 v_pad="2" width="76"> 20 v_pad="2" width="76">
21 Loading... 21 Loading...
22 </text> 22 </text>
23 <button bottom="-18" enabled="true" follows="right|bottom" font="SansSerif" 23 <button bottom="-17" enabled="true" follows="right|bottom" font="SansSerif"
24 halign="center" height="16" 24 halign="center" height="16"
25 image_selected="status_buy_currency_pressed.tga" 25 image_selected="status_buy_currency_pressed.tga"
26 image_unselected="status_buy_currency.tga" label="" label_selected="" 26 image_unselected="status_buy_currency.tga" label="" label_selected=""
27 left="-210" mouse_opaque="true" name="buycurrency" scale_image="true" 27 left="-210" mouse_opaque="true" name="buycurrency" scale_image="true"
28 tool_tip="Buy currency" width="16" /> 28 tool_tip="Buy currency" width="16" />
29 <text type="string" length="12" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 29 <text type="string" length="12" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
30 bottom="-20" disabled_color="1 1 1 1" drop_shadow_visible="true" 30 bottom="-20" disabled_color="TimeTextColor" drop_shadow_visible="true"
31 enabled="true" follows="right|bottom" font="SansSerifSmall" h_pad="0" 31 enabled="true" follows="right|bottom" font="SansSerifSmall" h_pad="0"
32 halign="right" height="18" left="-300" mouse_opaque="true" name="TimeText" 32 halign="right" height="18" left="-300" mouse_opaque="true" name="TimeText"
33 text_color="1 1 1 1" tool_tip="Current Time (Pacific)" v_pad="2" width="80"> 33 text_color="TimeTextColor" tool_tip="Current Time (Pacific)" v_pad="2" width="80">
34 12:00 AM 34 12:00 AM
35 </text> 35 </text>
36 <string name="StatBarDaysOfWeek"> 36 <string name="StatBarDaysOfWeek">
@@ -50,10 +50,10 @@
50 mouse_opaque="true" name="health" scale_image="false" tool_tip="Health" 50 mouse_opaque="true" name="health" scale_image="false" tool_tip="Health"
51 visible="false" width="24" /> 51 visible="false" width="24" />
52 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 52 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
53 bottom="-18" disabled_color="1 1 1 1" drop_shadow_visible="true" 53 bottom="-18" disabled_color="HealthTextColor" drop_shadow_visible="true"
54 enabled="true" follows="rsight|bottom" font="SansSerifSmall" h_pad="0" 54 enabled="true" follows="rsight|bottom" font="SansSerifSmall" h_pad="0"
55 halign="left" height="18" left="418" mouse_opaque="true" name="HealthText" 55 halign="left" height="18" left="418" mouse_opaque="true" name="HealthText"
56 text_color="1 1 1 1" tool_tip="Health" v_pad="2" visible="false" width="31"> 56 text_color="HealthTextColor" tool_tip="Health" v_pad="2" visible="false" width="31">
57 100% 57 100%
58 </text> 58 </text>
59 <button bottom="-22" enabled="true" follows="right|bottom" font="SansSerif" 59 <button bottom="-22" enabled="true" follows="right|bottom" font="SansSerif"
@@ -81,27 +81,38 @@
81 image_unselected="status_no_voice.tga" label="" label_selected="" 81 image_unselected="status_no_voice.tga" label="" label_selected=""
82 left="545" mouse_opaque="true" name="status_no_voice" scale_image="false" 82 left="545" mouse_opaque="true" name="status_no_voice" scale_image="false"
83 tool_tip="Voice not available here" visible="false" width="24" /> 83 tool_tip="Voice not available here" visible="false" width="24" />
84 <button bottom="-18" enabled="true" follows="right|bottom" font="SansSerif" 84 <button bottom="-17" enabled="true" follows="right|bottom" font="SansSerif"
85 halign="center" height="16" image_selected="status_buy_land_pressed.tga" 85 halign="center" height="16" image_selected="status_buy_land_pressed.tga"
86 image_unselected="status_buy_land.tga" label="" label_selected="" 86 image_unselected="status_buy_land.tga" label="" label_selected=""
87 left="569" mouse_opaque="true" name="buyland" scale_image="true" 87 left="576" mouse_opaque="true" name="buyland" scale_image="true"
88 tool_tip="Buy this parcel" visible="false" width="16" /> 88 tool_tip="Buy this parcel" visible="false" width="16" />
89 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-18" 89
90 <!-- Totally unsexy button hack to get a sexy bevel for sexy search bevel -brent -->
91 <button bottom="-17" height="16" left="-97" width="96"
92 image_unselected="sm_rounded_corners_simple.tga"
93 image_selected="sm_rounded_corners_simple.tga"
94 image_hover_selected="sm_rounded_corners_simple.tga"
95 image_hover_unselected="sm_rounded_corners_simple.tga"
96 image_disabled_selected="sm_rounded_corners_simple.tga"
97 image_disabled="sm_rounded_corners_simple.tga"
98 label="" scale_image="true" enabled="true" mouse_opaque="false" name="menubar_search_bevel_bg" />
99
100 <line_editor bevel_style="none" border_style="line" border_thickness="0" bottom="-16"
90 commit_on_focus_lost="false" enabled="true" follows="right|bottom" 101 commit_on_focus_lost="false" enabled="true" follows="right|bottom"
91 font="SansSerif" handle_edit_keys_directly="false" height="20" 102 font="SansSerifSmall" handle_edit_keys_directly="false" height="13"
92 label="Search" left="-125" max_length="254" mouse_opaque="true" 103 label="Search" left="-95" max_length="254" mouse_opaque="true"
93 name="search_editor" select_all_on_focus_received="false" 104 name="search_editor" select_all_on_focus_received="false"
94 select_on_focus="false" tab_group="1" tool_tip="Search Second Life" 105 select_on_focus="false" tab_group="1" tool_tip="Search Second Life"
95 width="104" /> 106 width="80" />
96 <button bottom="-17" enabled="true" follows="right|bottom" font="SansSerifSmall" 107 <button bottom="-16" enabled="true" follows="right|bottom" font="SansSerifSmall"
97 halign="center" height="20" image_disabled="status_search.tga" 108 halign="center" height="12" image_disabled="status_search.tga"
98 image_disabled_selected="status_search.tga" 109 image_disabled_selected="status_search.tga"
99 image_selected="status_search.tga" image_unselected="status_search.tga" 110 image_selected="status_search.tga" image_unselected="status_search.tga"
100 label="" label_selected="" left="-20" mouse_opaque="true" name="search_btn" 111 label="" label_selected="" left="-16" mouse_opaque="true" name="search_btn"
101 tool_tip="Search Second Life" width="20" /> 112 tool_tip="Search Second Life" width="12" scale_image="true"/>
102 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 113 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
103 bottom="-17" enabled="false" follows="right|bottom" font="SansSerifSmall" 114 bottom="-16" enabled="false" follows="right|bottom" font="SansSerifSmall"
104 halign="center" height="20" hidden="false" left="-20" mouse_opaque="true" 115 halign="center" height="12" left="-20" mouse_opaque="true"
105 name="stat_btn" width="20" /> 116 name="stat_btn" width="20" />
106 <string name="packet_loss_tooltip"> 117 <string name="packet_loss_tooltip">
107 Packet Loss 118 Packet Loss
diff --git a/linden/indra/newview/skins/xui/en-us/panel_toolbar.xml b/linden/indra/newview/skins/xui/en-us/panel_toolbar.xml
index da06c58..1009b3d 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_toolbar.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_toolbar.xml
@@ -1,34 +1,77 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel background_opaque="true" background_visible="true" bottom="0" can_close="true" 2<panel background_opaque="false" background_visible="false" bottom="0" can_close="true"
3 can_minimize="false" can_resize="false" follows="left|right|bottom" 3 can_minimize="false" can_resize="false" follows="left|right|bottom"
4 height="26" name="toolbar" width="1024"> 4 height="28" name="toolbar" width="1024">
5 <string name="Redock Windows"> 5
6 Redock Windows 6 <string name="Redock Windows">Redock Windows</string>
7 </string> 7 <panel bottom="0" filename="panel_bg_toolbar.xml" height="28" left="0" width="1024" />
8 <button bottom="0" font="SansSerif" height="24" image_overlay="icn_chatbar.tga" 8 <layout_stack name="toolbar_stack" follows="left|right|bottom|top" bottom="2" left="1" width="1022" height="26" min_width="200" min_height="26" orientation="horizontal" border_size="0">
9 image_selected="btn_chatbar_selected.tga" 9 <icon image_name="spacer24.tga" width="2" height="2" follows="left|right" auto_resize="false" color="0,0,0,0" left="0" />
10 image_unselected="btn_chatbar.tga" label="" left="0" name="chat_btn" 10 <button bottom="0" font="SansSerif" height="24"
11 scale_image="true" tool_tip="Show Chat Bar. (Enter)" width="50" /> 11 image_selected="btn_chatbar_selected.tga" scale_image="true"
12 <flyout_button bottom="0" font="SansSerif" height="24" label="Communicate" left="0" 12 image_unselected="btn_chatbar.tga" label="" left="2" name="chat_btn"
13 list_position="above" name="communicate_btn" 13 image_overlay="icn_chatbar.tga" tool_tip="Show Chat Bar. (Enter)"
14 tool_tip="Communicate with your Friends and Groups." width="50" /> 14 width="50" auto_resize="false" follows="left|right" user_resize="false"/>
15 <button bottom="0" font="SansSerif" height="24" label="Fly" 15 <icon image_name="spacer24.tga" left_delta="2" width="2" height="2" follows="left|right" auto_resize="false" color="0,0,0,0"/>
16 label_selected="Stop Flying" left="0" name="fly_btn" 16 <flyout_button bottom="0" font="SansSerif" height="24" label="Communicate" left="0"
17 tool_tip="Start flying. Use E/C or PgUp/PgDn to fly up and down." 17 name="communicate_btn" tool_tip="Communicate with your Friends and Groups."
18 width="50" /> 18 list_position="above"
19 <button bottom="0" font="SansSerif" height="24" label="Snapshot" left="0" 19 width="50" follows="left|right" user_resize="false"/>
20 name="snapshot_btn" tool_tip="Save a screen shot to disk or inventory." 20 <icon image_name="spacer24.tga" width="2" height="2" follows="left|right" auto_resize="false" color="0,0,0,0"/>
21 width="50" /> 21 <button bottom="0" font="SansSerif" height="24" label="Fly"
22 <button bottom="0" font="SansSerif" height="24" label="Search" left="0" 22 image_overlay="icn_toolbar_fly.tga" image_overlay_alignment="left"
23 name="directory_btn" 23 image_selected="toolbar_btn_selected.tga"
24 tool_tip="Search for places, events, people, and more." width="50" /> 24 image_unselected="toolbar_btn_enabled.tga"
25 <button bottom="0" font="SansSerif" height="24" label="Build" left="0" name="build_btn" 25 image_disabled="toolbar_btn_disabled.tga" scale_image="true"
26 tool_tip="Create new objects." width="50" /> 26 label_selected="Stop Flying" left="0" name="fly_btn"
27 <button bottom="0" font="SansSerif" height="24" label="Mini-Map" left="0" 27 tool_tip="Start flying. Use E/C or PgUp/PgDn to fly up and down."
28 name="radar_btn" tool_tip="Map of the area around you. (Ctrl-Shift-M)" 28 width="50" follows="left|right" user_resize="false"/>
29 width="50" /> 29 <icon image_name="spacer24.tga" width="2" height="2" follows="left|right" auto_resize="false" color="0,0,0,0" />
30 <button bottom="0" font="SansSerif" height="24" label="Map" left="0" name="map_btn" 30 <button bottom="0" font="SansSerif" height="24" label="Snapshot" left="0"
31 tool_tip="Map of the world. (Ctrl-M)" width="50" /> 31 image_overlay="icn_toolbar_snapshot.tga" image_overlay_alignment="left"
32 <button bottom="0" font="SansSerif" height="24" label="Inventory" left="0" 32 image_selected="toolbar_btn_selected.tga"
33 name="inventory_btn" tool_tip="Your items. (Ctrl-I)" width="50" /> 33 image_unselected="toolbar_btn_enabled.tga"
34 image_disabled="toolbar_btn_disabled.tga" scale_image="true"
35 name="snapshot_btn" tool_tip="Save a screen shot to disk or inventory."
36 width="50" follows="left|right" user_resize="false"/>
37 <icon image_name="spacer24.tga" width="2" height="2" follows="left|right" auto_resize="false" color="0,0,0,0" />
38 <button bottom="0" font="SansSerif" height="24" label="Search" left="0"
39 image_overlay="icn_toolbar_search.tga" image_overlay_alignment="left"
40 image_selected="toolbar_btn_selected.tga"
41 image_unselected="toolbar_btn_enabled.tga"
42 image_disabled="toolbar_btn_disabled.tga" scale_image="true"
43 name="directory_btn"
44 tool_tip="Search for places, events, people, and more." width="50" follows="left|right" user_resize="false"/>
45 <icon image_name="spacer24.tga" width="2" height="2" follows="left|right" auto_resize="false" color="0,0,0,0" />
46 <button bottom="0" font="SansSerif" height="24" label="Build" left="0" name="build_btn"
47 image_overlay="icn_toolbar_build.tga" image_overlay_alignment="left"
48 image_selected="toolbar_btn_selected.tga"
49 image_unselected="toolbar_btn_enabled.tga"
50 image_disabled="toolbar_btn_disabled.tga" scale_image="true"
51 tool_tip="Create new objects." width="50" follows="left|right" user_resize="false"/>
52 <icon image_name="spacer24.tga" width="2" height="2" follows="left|right" auto_resize="false" color="0,0,0,0" />
53 <button bottom="0" font="SansSerif" height="24" label="Map" left="0" name="map_btn"
54 image_overlay="icn_toolbar_map.tga" image_overlay_alignment="left"
55 image_selected="toolbar_btn_selected.tga"
56 image_unselected="toolbar_btn_enabled.tga"
57 image_disabled="toolbar_btn_disabled.tga" scale_image="true"
58 tool_tip="Map of the world. (Ctrl-M)" width="50" follows="left|right" user_resize="false"/>
59 <icon image_name="spacer24.tga" width="2" height="2" follows="left|right" auto_resize="false" color="0,0,0,0" />
60 <button bottom="0" font="SansSerif" height="24" label="Mini-Map" left="0"
61 image_overlay="icn_toolbar_minimap.tga" image_overlay_alignment="left"
62 image_selected="toolbar_btn_selected.tga"
63 image_unselected="toolbar_btn_enabled.tga"
64 image_disabled="toolbar_btn_disabled.tga" scale_image="true"
65 name="radar_btn" tool_tip="Map of the area around you. (Ctrl-Shift-M)"
66 width="50" follows="left|right" user_resize="false"/>
67 <icon image_name="spacer24.tga" width="2" height="2" follows="left|right" auto_resize="false" color="0,0,0,0" />
68 <button bottom="0" font="SansSerif" height="24" label="Inventory" left="0"
69 image_overlay="icn_toolbar_inventory.tga" image_overlay_alignment="left"
70 image_selected="toolbar_btn_selected.tga"
71 image_unselected="toolbar_btn_enabled.tga"
72 image_disabled="toolbar_btn_disabled.tga" scale_image="true"
73 name="inventory_btn" tool_tip="Your items. (Ctrl-I)" width="50" follows="left|right" user_resize="false"/>
74 <icon image_name="spacer24.tga" width="2" height="2" follows="left|right" auto_resize="false" color="0,0,0,0" />
75 </layout_stack>
76
34</panel> 77</panel>
diff --git a/linden/indra/newview/skins/xui/en-us/panel_top_pick.xml b/linden/indra/newview/skins/xui/en-us/panel_top_pick.xml
index 58e4c43..03d0919 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_top_pick.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_top_pick.xml
@@ -3,14 +3,14 @@
3 name="Pick" title="Pick" width="450"> 3 name="Pick" title="Pick" width="450">
4 <texture_picker bottom="-315" follows="left|top" height="300" left="20" name="snapshot_ctrl" 4 <texture_picker bottom="-315" follows="left|top" height="300" left="20" name="snapshot_ctrl"
5 width="400" /> 5 width="400" />
6 <line_editor bg_readonly_color="clear" bottom_delta="-8" enabled="false" follows="left|top" 6 <line_editor bottom_delta="-8" enabled="false" follows="left|top"
7 font="SansSerif" height="20" left="20" name="given_name_editor" 7 font="SansSerif" height="20" left="20" name="given_name_editor"
8 text_readonly_color="white" width="400" /> 8 width="400" />
9 <text_editor bg_readonly_color="clear" enabled="false" follows="left|top" font="SansSerif" 9 <text_editor enabled="false" follows="left|top" font="SansSerif"
10 height="90" left="20" max_length="1023" name="desc_editor" 10 height="90" left="20" max_length="1023" name="desc_editor"
11 text_readonly_color="white" width="400" word_wrap="true" /> 11 width="400" word_wrap="true" />
12 <line_editor bg_readonly_color="clear" enabled="false" follows="left|top" font="SansSerif" 12 <line_editor enabled="false" follows="left|top" font="SansSerif"
13 height="20" left="20" name="location_editor" text_readonly_color="white" 13 height="20" left="20" name="location_editor"
14 width="400" /> 14 width="400" />
15 <button bottom_delta="0" follows="left|top" height="20" label="Set" left="380" 15 <button bottom_delta="0" follows="left|top" height="20" label="Set" left="380"
16 name="set_location_btn" width="60" /> 16 name="set_location_btn" width="60" />
diff --git a/linden/indra/newview/skins/xui/en-us/panel_voice_controls.xml b/linden/indra/newview/skins/xui/en-us/panel_voice_controls.xml
index fa41dd4..ee476f2 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_voice_controls.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_voice_controls.xml
@@ -1,19 +1,19 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel bg_visible="false" border="false" border_visible="false" bottom="2" 2<panel bg_visible="false" border="false" border_visible="false" bottom="2"
3 enabled="true" follows="right|bottom" height="20" left="0" 3 enabled="true" follows="right|bottom" height="20" left="0"
4 mouse_opaque="true" name="voice_controls" width="128"> 4 mouse_opaque="true" name="voice_controls" width="130">
5 <button bottom="-22" height="22" image_overlay="active_speakers.tga" label="" left="2" 5 <button bottom="-21" height="20" image_overlay="active_speakers.tga" label="" left="3"
6 name="speakers_btn" 6 name="speakers_btn"
7 tool_tip="Show list of residents using voice chat around you" width="38" /> 7 tool_tip="Show list of residents using voice chat around you" width="36" />
8 <button bottom="-22" height="22" label="Talk" left_delta="40" name="push_to_talk" 8 <button bottom="-21" height="20" label="Talk" left_delta="38" name="push_to_talk"
9 tab_stop="false" tool_tip="Hold the button to talk" width="64" /> 9 tab_stop="false" tool_tip="Hold the button to talk" width="63" />
10 <button bottom="-19" height="16" image_selected="ptt_lock_on.tga" 10 <button bottom="-19" height="16" image_selected="ptt_lock_on.tga"
11 image_unselected="ptt_lock_off.tga" label="" left_delta="4" name="ptt_lock" 11 image_unselected="ptt_lock_off.tga" label="" left_delta="2" name="ptt_lock"
12 scale_image="true" toggle="true" 12 scale_image="false" toggle="true"
13 tool_tip="Click lock to switch to talk mode" width="16" /> 13 tool_tip="Click lock to switch to talk mode" width="16" />
14 <icon bottom="-19" height="16" image_name="icn_voice_ptt-off.tga" left_delta="40" 14 <icon bottom="-19" height="16" image_name="icn_voice_ptt-off.tga" left_delta="42"
15 name="voice_volume" width="16" /> 15 name="voice_volume" width="16" />
16 <button bottom="-22" control_name="ShowVoiceChannelPopup" height="22" label="" 16 <button bottom="-21" control_name="ShowVoiceChannelPopup" height="20" label=""
17 left_delta="20" name="show_channel" scale_image="true" toggle="true" 17 left_delta="21" name="show_channel" scale_image="true" toggle="true"
18 tool_tip="Click to show current voice channel" width="22" /> 18 tool_tip="Click to show current voice channel" width="20" />
19</panel> 19</panel>
diff --git a/linden/indra/newview/skins/xui/en-us/panel_voice_enable.xml b/linden/indra/newview/skins/xui/en-us/panel_voice_enable.xml
index 78447c5..fdec2f4 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_voice_enable.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_voice_enable.xml
@@ -34,4 +34,4 @@
34 name="voice_intro_text4" tab_stop="false" width="400" word_wrap="true"> 34 name="voice_intro_text4" tab_stop="false" width="400" word_wrap="true">
35 Click the Next button to configure Voice Chat preferences or click Finish to continue using Second Life. 35 Click the Next button to configure Voice Chat preferences or click Finish to continue using Second Life.
36 </text_editor> 36 </text_editor>
37</panel> 37</panel> \ No newline at end of file
diff --git a/linden/indra/newview/skins/xui/en-us/panel_voice_remote.xml b/linden/indra/newview/skins/xui/en-us/panel_voice_remote.xml
index 4569db0..c785e72 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_voice_remote.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_voice_remote.xml
@@ -1,8 +1,8 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel bg_visible="false" border="false" border_visible="false" bottom="1" 2<panel bg_visible="false" border="false" border_visible="false" bottom="0"
3 enabled="true" follows="right|bottom" height="20" left="0" 3 enabled="true" follows="right|bottom" height="20" left="0"
4 mouse_opaque="true" name="voice_remote" use_bounding_rect="true" 4 mouse_opaque="true" name="voice_remote" use_bounding_rect="true"
5 width="128"> 5 width="130">
6 <panel bottom="0" filename="panel_bg_tab.xml" height="22" left="0" width="128" /> 6 <panel bottom="1" filename="panel_bg_tab.xml" height="22" left="0" width="130" />
7 <panel bottom="0" filename="panel_voice_controls.xml" height="20" left="0" width="127" /> 7 <panel bottom="3" filename="panel_voice_controls.xml" height="20" left="1" width="130" />
8</panel> 8</panel>
diff --git a/linden/indra/newview/skins/xui/en-us/panel_voice_remote_expanded.xml b/linden/indra/newview/skins/xui/en-us/panel_voice_remote_expanded.xml
index 27199d5..7464467 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_voice_remote_expanded.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_voice_remote_expanded.xml
@@ -1,20 +1,20 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel bg_visible="false" border="false" border_visible="false" bottom="1" 2<panel bg_visible="false" border="false" border_visible="false" bottom="0"
3 follows="right|bottom" height="45" left="0" mouse_opaque="true" 3 follows="right|bottom" height="45" left="0" mouse_opaque="true"
4 name="voice_remote" use_bounding_rect="true" width="128"> 4 name="voice_remote" use_bounding_rect="true" width="130">
5 <panel bottom="0" filename="panel_bg_tab.xml" height="47" left="0" width="128" /> 5 <panel bottom="1" filename="panel_bg_tab.xml" height="47" left="0" width="130" />
6 <button bottom="-23" height="22" image_overlay="icn_voice-call-end.tga" label="" 6 <button bottom="-20" height="20" image_overlay="icn_voice-call-end.tga" label=""
7 left="2" name="end_call_btn" tool_tip="Click to hang up" width="24" /> 7 left="4" name="end_call_btn" tool_tip="Click to hang up" width="20" />
8 <button bottom="-23" height="23" image_disabled="icn_rounded-text-field.tga" 8 <button bottom="-21" height="22" image_disabled="icn_rounded-text-field.tga"
9 image_disabled_selected="icn_rounded-text-field.tga" 9 image_disabled_selected="icn_rounded-text-field.tga"
10 image_hover_selected="icn_rounded-text-field.tga" 10 image_hover_selected="icn_rounded-text-field.tga"
11 image_hover_unselected="icn_rounded-text-field.tga" 11 image_hover_unselected="icn_rounded-text-field.tga"
12 image_selected="icn_rounded-text-field.tga" 12 image_selected="icn_rounded-text-field.tga"
13 image_unselected="icn_rounded-text-field.tga" label="" left_delta="26" 13 image_unselected="icn_rounded-text-field.tga" label="" left_delta="23"
14 name="voice_channel_bg" scale_image="true" width="97" /> 14 name="voice_channel_bg" scale_image="true" width="102" />
15 <icon bottom="-20" height="16" image_name="icn_voice-localchat.tga" label="" 15 <icon bottom="-18" height="16" image_name="icn_voice-localchat.tga" label=""
16 left_delta="7" mouse_opaque="false" name="voice_channel_icon" width="16" /> 16 left_delta="4" mouse_opaque="false" name="voice_channel_icon" width="16" />
17 <text bottom="-21" font="SansSerifSmall" height="16" label="" left_delta="18" 17 <text bottom="-19" font="SansSerifSmall" height="16" label="" left_delta="18"
18 mouse_opaque="false" name="channel_label" text_color="0 0 0" width="65" /> 18 mouse_opaque="false" name="channel_label" text_color="0 0 0" width="65" />
19 <panel bottom_delta="-14" filename="panel_voice_controls.xml" left="0" /> 19 <panel bottom="13" filename="panel_voice_controls.xml" left="1" />
20</panel> 20</panel>
diff --git a/linden/indra/newview/skins/xui/es/floater_critical.xml b/linden/indra/newview/skins/xui/es/floater_critical.xml
index 4bfefe3..92c996d 100644
--- a/linden/indra/newview/skins/xui/es/floater_critical.xml
+++ b/linden/indra/newview/skins/xui/es/floater_critical.xml
@@ -2,9 +2,6 @@
2<floater name="modal container" title=" "> 2<floater name="modal container" title=" ">
3 <button label="Continuar" label_selected="Continuar" name="Continue" /> 3 <button label="Continuar" label_selected="Continuar" name="Continue" />
4 <button label="Cancelar" label_selected="Cancelar" name="Cancel" /> 4 <button label="Cancelar" label_selected="Cancelar" name="Cancel" />
5 <text name="tos_title">
6 Mensaje crítico
7 </text>
8 <text name="tos_heading"> 5 <text name="tos_heading">
9 Por favor, lea los mensajes siguientes con cuidado 6 Por favor, lea los mensajes siguientes con cuidado
10 </text> 7 </text>
diff --git a/linden/indra/newview/skins/xui/es/floater_friends.xml b/linden/indra/newview/skins/xui/es/floater_friends.xml
deleted file mode 100644
index e5f9a2a..0000000
--- a/linden/indra/newview/skins/xui/es/floater_friends.xml
+++ /dev/null
@@ -1,28 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="friends" title="Amigos">
3 <scroll_list name="friend_list"
4 tool_tip="Hold shift or control while clicking to select multiple friends">
5 <column label="Name" name="friend_name" />
6 </scroll_list>
7 <panel name="rights_container">
8 <check_box label="Can see my online status" name="online_status_cb"
9 tool_tip="Set whether this friend see my online status in their friends list or calling cards" />
10 <check_box label="Can see me on the map" name="map_status_cb"
11 tool_tip="Set whether this friend see my location on their map" />
12 <check_box label="Can modify my objects" name="modify_status_cb"
13 tool_tip="Set whether this friend can modify my objects" />
14 <text name="process_rights_label">
15 Processing rights change...
16 </text>
17 </panel>
18 <button label="MI" name="im_btn" tool_tip="Abrir sesión de mensaje instantáneo" />
19 <button label="Teleport..." name="offer_teleport_btn"
20 tool_tip="Ofrecer a este amigo un teletransporte para su posición actual" />
21 <button label="Adicionar..." name="add_btn" tool_tip="Ofrecer amistad a este residente" />
22 <button label="Perfil" name="profile_btn"
23 tool_tip="Mostrar figura, grupos y otras informaciones" />
24 <button label="Pagar..." name="pay_btn"
25 tool_tip="Dar (L$) Linden dólares a este amigo" />
26 <button label="Remover..." name="remove_btn"
27 tool_tip="Remover esta persona de su lista de amigos" />
28</floater>
diff --git a/linden/indra/newview/skins/xui/es/floater_groups.xml b/linden/indra/newview/skins/xui/es/floater_groups.xml
deleted file mode 100644
index d5908fc..0000000
--- a/linden/indra/newview/skins/xui/es/floater_groups.xml
+++ /dev/null
@@ -1,15 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="groups" title="Grupos">
3 <text name="groupdesc">
4 Su grupo activo actualmente es exhibido en negrito.
5 </text>
6 <text name="groupcount">
7 Usted pertenece a [COUNT] grupos (de un máximo de [MAX]).
8 </text>
9 <button label="Activar" label_selected="Activar" name="Activate" />
10 <button label="Información" label_selected="Información" name="Info" />
11 <button label="Dejar" label_selected="Dejar" name="Leave" />
12 <button label="Crear" label_selected="Crear" name="Create" />
13 <button label="Buscar..." label_selected="Buscar..." name="Search..." />
14 <button label="Cerrar" label_selected="Cerrar" name="Close" />
15</floater>
diff --git a/linden/indra/newview/skins/xui/es/floater_preview_new_landmark.xml b/linden/indra/newview/skins/xui/es/floater_preview_new_landmark.xml
deleted file mode 100644
index c5766ab..0000000
--- a/linden/indra/newview/skins/xui/es/floater_preview_new_landmark.xml
+++ /dev/null
@@ -1,9 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="landmark_preview">
3 <button label="Teletransportar" label_selected="" name="Teleport btn" />
4 <button label="Mostrar en el mapa" label_selected="" name="Show on Map btn" />
5 <button label="Descartar" label_selected="" name="Discard btn" />
6 <text type="string" length="1" name="desc txt">
7 Descripción:
8 </text>
9</floater>
diff --git a/linden/indra/newview/skins/xui/es/floater_rate.xml b/linden/indra/newview/skins/xui/es/floater_rate.xml
deleted file mode 100644
index 3a344f5..0000000
--- a/linden/indra/newview/skins/xui/es/floater_rate.xml
+++ /dev/null
@@ -1,44 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="rate" title="Su valoración de Jeska Linden">
3 <radio_group name="behavior">
4 <radio_item type="string" length="1" name="Positive">
5 Positivo
6 </radio_item>
7 <radio_item type="string" length="1" name="No Rating">
8 No Valorado
9 </radio_item>
10 </radio_group>
11 <radio_group name="appearance">
12 <radio_item type="string" length="1" name="Positive">
13 Positivo
14 </radio_item>
15 <radio_item type="string" length="1" name="No Rating">
16 No Valorado
17 </radio_item>
18 </radio_group>
19 <radio_group name="building">
20 <radio_item type="string" length="1" name="Positive">
21 Positivo
22 </radio_item>
23 <radio_item type="string" length="1" name="No Rating">
24 No Valorado
25 </radio_item>
26 </radio_group>
27 <button label="OK" label_selected="OK" name="OK" />
28 <button label="Cancelar" label_selected="Cancelar" name="Cancel" />
29 <text type="string" length="1" name="Overall behavior:">
30 Comportamiento general:
31 </text>
32 <text type="string" length="1" name="Skill at appearance (clothing and attachments):">
33 Habilidad en la apariencia (ropa y anexos):
34 </text>
35 <text type="string" length="1" name="Skill at building:">
36 Habilidad en la construcción:
37 </text>
38 <text type="string" length="1" name="Message:">
39 Mensaje:
40 </text>
41 <text type="string" length="1" name="cost">
42 Coste: L$[COST] para cambiar cada valoración. Total: L$[TOTAL].
43 </text>
44</floater>
diff --git a/linden/indra/newview/skins/xui/es/menu_viewer.xml b/linden/indra/newview/skins/xui/es/menu_viewer.xml
index 635a7ff..bb67d7c 100644
--- a/linden/indra/newview/skins/xui/es/menu_viewer.xml
+++ b/linden/indra/newview/skins/xui/es/menu_viewer.xml
@@ -14,7 +14,6 @@
14 <menu_item_call label="Tirar foto instatánea" name="Take Snapshot" /> 14 <menu_item_call label="Tirar foto instatánea" name="Take Snapshot" />
15 <menu_item_call label="Foto instatánea para el disco" name="Snapshot to Disk" /> 15 <menu_item_call label="Foto instatánea para el disco" name="Snapshot to Disk" />
16 <menu_item_separator label="-----------" name="separator4" /> 16 <menu_item_separator label="-----------" name="separator4" />
17 <menu_item_call label="Empezar/Parar vídeo para el disco" name="Start/Stop Movie to Disk" />
18 <menu label="Definir tamaño de la ventana" name="Set Window Size"> 17 <menu label="Definir tamaño de la ventana" name="Set Window Size">
19 <menu_item_call label="320x240" name="320x240" /> 18 <menu_item_call label="320x240" name="320x240" />
20 <menu_item_call label="640x480" name="640x480" /> 19 <menu_item_call label="640x480" name="640x480" />
@@ -127,6 +126,7 @@
127 <menu_item_separator label="-----------" name="separator3" /> 126 <menu_item_separator label="-----------" name="separator3" />
128 <menu_item_call label="Definir como ausente" name="Set Away" /> 127 <menu_item_call label="Definir como ausente" name="Set Away" />
129 <menu_item_call label="Definir como ocupado" name="Set Busy" /> 128 <menu_item_call label="Definir como ocupado" name="Set Busy" />
129 <menu_item_call label="Parar todas las animaciones" name="Stop All Animations" />
130 <menu_item_separator label="-----------" name="separator4" /> 130 <menu_item_separator label="-----------" name="separator4" />
131 <menu_item_call label="Historial de cuenta..." name="Account History..." /> 131 <menu_item_call label="Historial de cuenta..." name="Account History..." />
132 <menu_item_call label="Administrar mi cuenta..." name="Manage My Account..." /> 132 <menu_item_call label="Administrar mi cuenta..." name="Manage My Account..." />
@@ -171,7 +171,6 @@
171 <menu_item_call label="Unir" name="Link" /> 171 <menu_item_call label="Unir" name="Link" />
172 <menu_item_call label="Separar" name="Unlink" /> 172 <menu_item_call label="Separar" name="Unlink" />
173 <menu_item_separator label="-----------" name="separator4" /> 173 <menu_item_separator label="-----------" name="separator4" />
174 <menu_item_call label="Parar todas las animaciones" name="Stop All Animations" />
175 <menu_item_separator label="-----------" name="separator5" /> 174 <menu_item_separator label="-----------" name="separator5" />
176 <menu_item_call label="Foco en la selección" name="Focus on Selection" /> 175 <menu_item_call label="Foco en la selección" name="Focus on Selection" />
177 <menu_item_call label="Acercar en la selección" name="Zoom to Selection" /> 176 <menu_item_call label="Acercar en la selección" name="Zoom to Selection" />
diff --git a/linden/indra/newview/skins/xui/es/panel_music_remote.xml b/linden/indra/newview/skins/xui/es/panel_music_remote.xml
deleted file mode 100644
index 2d3a88d..0000000
--- a/linden/indra/newview/skins/xui/es/panel_music_remote.xml
+++ /dev/null
@@ -1,13 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="music_remote">
3 <text type="string" length="6" name="text">
4 Music
5 </text>
6 <volume_slider name="volume_slider"
7 tool_tip="Cambie el volumen usando este control deslizante" />
8 <button label="" label_selected="" name="stop_btn" tool_tip="Parar multimedia" />
9 <button label="" label_selected="" name="play_btn"
10 tool_tip="Reproducir streaming de multimedia" />
11 <button label="" label_selected="" name="pause_btn"
12 tool_tip="Pausar streaming de multimedia" />
13</panel>
diff --git a/linden/indra/newview/skins/xui/es/panel_preferences_graphics2.xml b/linden/indra/newview/skins/xui/es/panel_preferences_graphics2.xml
deleted file mode 100644
index a2a74ff..0000000
--- a/linden/indra/newview/skins/xui/es/panel_preferences_graphics2.xml
+++ /dev/null
@@ -1,57 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel label="Detalles gráficos" name="Display panel 3">
3 <text type="string" length="1" name="text">
4 Sombra:
5 </text>
6 <check_box label="Activar Bumpmapping y brillo" name="bumpshiny" />
7 <check_box label="Activar ondas en la água" name="ripple" />
8 <check_box label="Programa de vertex del avatar" name="avatarvp" />
9 <text type="string" length="1" name="Avatar Rendering:">
10 Reconstrucción de avatar:
11 </text>
12 <radio_group name="Avatar Appearance">
13 <radio_item type="string" length="1" name="Normal">
14 Normal
15 </radio_item>
16 <radio_item type="string" length="1" name="Bump">
17 Bump Mapeado
18 </radio_item>
19 <radio_item type="string" length="1" name="Cloth">
20 Bump Mapeado &amp; Cloth
21 </radio_item>
22 </radio_group>
23 <text type="string" length="1" name="Lighting Detail:">
24 Detalle de iluminación:
25 </text>
26 <radio_group name="lighting detail radio">
27 <radio_item type="string" length="1" name="SunMoon">
28 Sol y luna solamente
29 </radio_item>
30 <radio_item type="string" length="1" name="LocalLights">
31 Próximo local visible
32 </radio_item>
33 </radio_group>
34 <text type="string" length="1" name="Terrain Detail:">
35 Detalles de terreno:
36 </text>
37 <radio_group name="terrain detail radio">
38 <radio_item type="string" length="1" name="0">
39 Bajo
40 </radio_item>
41 <radio_item type="string" length="1" name="2">
42 Alto
43 </radio_item>
44 </radio_group>
45 <text type="string" length="1" name="Object Mesh Detail:">
46 Detalle del objeto de red:
47 </text>
48 <text type="string" length="1" name="Flexible Mesh Detail:">
49 Detalles de red flexible:
50 </text>
51 <text type="string" length="1" name="Tree Mesh Detail:">
52 Detalle del árbol de red:
53 </text>
54 <text type="string" length="1" name="Avatar Mesh Detail:">
55 Detalle del avatar:
56 </text>
57</panel>
diff --git a/linden/indra/newview/skins/xui/es/panel_preferences_graphics3.xml b/linden/indra/newview/skins/xui/es/panel_preferences_graphics3.xml
deleted file mode 100644
index 108a993..0000000
--- a/linden/indra/newview/skins/xui/es/panel_preferences_graphics3.xml
+++ /dev/null
@@ -1,50 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel label="Adv. Gráficos" name="Display panel 2">
3 <text type="string" length="1" name="Filtering:">
4 Filtración:
5 </text>
6 <check_box label="Filtración anisotrópica (más lento cuando activado)" name="ani" />
7 <spinner label="Gama:" name="gamma" />
8 <text type="string" length="1" name="(brightness, lower is brighter)">
9 (brillo, bajo es brillante, 0=usar patrón)
10 </text>
11 <spinner label="Brillo nocturno:" name="nighttime_brightness" />
12 <text type="string" length="1" name="(higher is brighter, 1.0 is default)">
13 (Más alto es brillante, 1.0 es patrón)
14 </text>
15 <text type="string" length="1" name="AGP Graphics Card:">
16 Placa de vídeo AGP:
17 </text>
18 <check_box label="Activar AGP (más rápido si usar placa de vídeo AGP)" name="agp"
19 tool_tip="Activar podrá reducir el desempeño y usar más memoria si está usando una placa de vídeo PCI patrón." />
20 <text type="string" length="1" name="Graphics Card Memory:">
21 Memoria de la placa de vídeo:
22 </text>
23 <radio_group name="video card memory radio">
24 <radio_item type="string" length="1" name="radio">
25 16MB
26 </radio_item>
27 <radio_item type="string" length="1" name="radio2">
28 32MB
29 </radio_item>
30 <radio_item type="string" length="1" name="radio3">
31 64MB
32 </radio_item>
33 <radio_item type="string" length="1" name="radio4">
34 128MB
35 </radio_item>
36 <radio_item type="string" length="1" name="radio5">
37 256MB
38 </radio_item>
39 <radio_item type="string" length="1" name="radio6">
40 512MB
41 </radio_item>
42 </radio_group>
43 <spinner label="Tasa de distancia de la neblina:" name="fog" />
44 <spinner label="Max. de Recuento de partícula:" name="particles" />
45 <spinner label="Límite de la composición del vestuario:" name="comp limit"
46 tool_tip="Número de vestuarios cambiados recientemente" />
47 <text type="string" length="1" name="(lower is faster)">
48 (bajo es más rápido)
49 </text>
50</panel>
diff --git a/linden/indra/newview/skins/xui/es/panel_settings_chat.xml b/linden/indra/newview/skins/xui/es/panel_settings_chat.xml
deleted file mode 100644
index d89277e..0000000
--- a/linden/indra/newview/skins/xui/es/panel_settings_chat.xml
+++ /dev/null
@@ -1,56 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="chat" title="Conversación">
3 <text>
4 Tamaño de la fuente del chat:
5 </text>
6 <radio_group name="chat font size">
7 <radio_item>
8 Pequeño
9 </radio_item>
10 <radio_item>
11 Medio
12 </radio_item>
13 <radio_item>
14 Grande
15 </radio_item>
16 </radio_group>
17 <text>
18 Color del chat:
19 </text>
20 <color_swatch label="Sistema" name="system" />
21 <color_swatch label="Usuarios" name="users" />
22 <color_swatch label="Objetos" name="objects" />
23 <color_swatch label="Burbuja" name="background" />
24 <text>
25 Consola del chat:
26 </text>
27 <spinner label="Desaparecer chat después de" name="fade_chat_time" />
28 <text>
29 (segundos)
30 </text>
31 <spinner label="" name="max_chat_count" />
32 <text>
33 (# líneas)
34 </text>
35 <slider label="Opacidad" name="console_opacity" />
36 <text>
37 Opciones del chat:
38 </text>
39 <check_box label="Chat usa anchura de pantalla completa (después de reinicio)"
40 name="chat_full_width_check" />
41 <check_box label="Cerrar chat después de pulsar Enter" name="close_chat_on_return_check" />
42 <check_box label="Flechas de dirección mueven avatar durante charla"
43 name="arrow_keys_move_avatar_check" />
44 <check_box label="Mostrar fecha/hora en el chat" name="show_timestamps_check" />
45 <text>
46 Burbuja de chat:
47 </text>
48 <check_box label="Mostrar burbujas de chat" name="bubble_text_chat" />
49 <slider label="Opacidad" name="bubble_chat_opacity" />
50 <text>
51 Errores de script:
52 </text>
53 <check_box label="Mostrar errores de script y avisos como chat convencional"
54 name="script_errors_as_chat" />
55 <color_swatch label="Color" name="script_error" />
56</panel>
diff --git a/linden/indra/newview/skins/xui/es/panel_settings_im.xml b/linden/indra/newview/skins/xui/es/panel_settings_im.xml
deleted file mode 100644
index ea8068a..0000000
--- a/linden/indra/newview/skins/xui/es/panel_settings_im.xml
+++ /dev/null
@@ -1,13 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="im" title="MI">
3 <text>
4 Opciones de MI:
5 </text>
6 <check_box label="Enviar MI para email" name="send_im_to_email"
7 tool_tip="Cambie su dirección de email en secondlife.com" />
8 <check_box label="Incluir MI en el historial de chat" name="include_im_in_chat_history" />
9 <check_box label="Mostrar fecha/hora en la MI" name="show_timestamps_check" />
10 <text>
11 Respuesta del modo ocupado:
12 </text>
13</panel>
diff --git a/linden/indra/newview/skins/xui/es/panel_settings_msgbox.xml b/linden/indra/newview/skins/xui/es/panel_settings_msgbox.xml
deleted file mode 100644
index 379731a..0000000
--- a/linden/indra/newview/skins/xui/es/panel_settings_msgbox.xml
+++ /dev/null
@@ -1,12 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel label="Popups" name="popups" title="Popups">
3 <text>
4 No exhibir popups:
5 </text>
6 <button label="Activar esta popup" name="enable_popup" />
7 <text>
8 Mostrar popups:
9 </text>
10 <button label="Restaurar cajas de diálogo &apos;Mostrar en la próxima vez&apos;..."
11 name="reset_dialogs_btn" />
12</panel>
diff --git a/linden/indra/newview/skins/xui/es/panel_settings_network.xml b/linden/indra/newview/skins/xui/es/panel_settings_network.xml
deleted file mode 100644
index da0acd7..0000000
--- a/linden/indra/newview/skins/xui/es/panel_settings_network.xml
+++ /dev/null
@@ -1,59 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="network" title="Red">
3 <text>
4 Amplitud de banda máxima:
5 </text>
6 <slider label="" name="max_bandwidth" />
7 <text>
8 kbps (kilobits por segundo)
9 </text>
10 <text>
11 Tamaño del cache de disco:
12 </text>
13 <radio_group name="disk cache">
14 <radio_item>
15 50 MB
16 </radio_item>
17 <radio_item>
18 200 MB
19 </radio_item>
20 <radio_item>
21 500 MB
22 </radio_item>
23 <radio_item>
24 1000 MB
25 </radio_item>
26 </radio_group>
27 <button label="Limpiar cache" name="clear_cache" />
28 <text>
29 Configuración del proxy:
30 </text>
31 <check_box label="Usar proxy" name="proxy_enabled"
32 tool_tip="Especifiar configuración del proxy" />
33 <text>
34 Proxy:
35 </text>
36 <line_editor name="proxy_address"
37 tool_tip="El nombre o dirección de IP del proxy que le gustaría usar" />
38 <text>
39 Puerta:
40 </text>
41 <line_editor name="proxy_port"
42 tool_tip="El número de la puerta del proxy que le gustaría usar" />
43 <text>
44 Calcetines:
45 </text>
46 <radio_group name="socks_4_5">
47 <radio_item>
48 Socks v4
49 </radio_item>
50 <radio_item>
51 Socks v5
52 </radio_item>
53 </radio_group>
54 <text>
55 Sin proxy:
56 </text>
57 <line_editor name="proxy_exclusions"
58 tool_tip="Los nombres o direcciones de IP que no&apos; le gustaría usar como proxy" />
59</panel>
diff --git a/linden/indra/newview/skins/xui/es/panel_settings_web.xml b/linden/indra/newview/skins/xui/es/panel_settings_web.xml
deleted file mode 100644
index 672515e..0000000
--- a/linden/indra/newview/skins/xui/es/panel_settings_web.xml
+++ /dev/null
@@ -1,53 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="web" title="Web">
3 <check_box label="Usar navegador de internet externo (Firefox, Safari, Internet Explorer)"
4 name="external_browser_check"
5 tool_tip="Usar navegador externo para ayuda, links de internet, etc.\nNo recomendable si funciona en pantalla completa." />
6 <text>
7 Explorar página inicial:
8 </text>
9 <line_editor name="home_page"
10 tool_tip="Página de la internet a visitar primero cuando abra el navegador de Second Life" />
11 <text>
12 Configuración del proxy:
13 </text>
14 <check_box label="Usar proxy para navegador de internet interno" name="proxy_enabled"
15 tool_tip="Especificar la configuración del proxy para el navegador interno de internet" />
16 <text>
17 Proxy:
18 </text>
19 <line_editor name="proxy_address"
20 tool_tip="El nombre o dirección de IP del proxy que le gustaría usar" />
21 <text>
22 Puerta:
23 </text>
24 <line_editor name="proxy_port"
25 tool_tip="El número de la puerta del proxy que le gustaría usar" />
26 <text>
27 Calcetines:
28 </text>
29 <radio_group name="socks_4_5">
30 <radio_item>
31 Socks v4
32 </radio_item>
33 <radio_item>
34 Socks v5
35 </radio_item>
36 </radio_group>
37 <text>
38 Sin proxy para:
39 </text>
40 <line_editor name="proxy_exclusions"
41 tool_tip="Los nombres o direcciones de IP que no&apos; le gustaría usar como proxy" />
42 <check_box
43 label="Mostrar páginas de internet en los objetos (experimental, requiere reinicio)"
44 name="web_pages_on_prims_check" />
45 <text>
46 Sitios confiables:
47(regístrese para ver)
48 </text>
49 <button label="Adicionar" name="add_trusted" />
50 <line_editor name="trusted_site_entry"
51 tool_tip="El sitio a adicionar en la lista de confiables" />
52 <button label="Remover" name="rem_trusted" />
53</panel>
diff --git a/linden/indra/newview/skins/xui/es/panel_toolbar.xml b/linden/indra/newview/skins/xui/es/panel_toolbar.xml
index bd20679..b804f95 100644
--- a/linden/indra/newview/skins/xui/es/panel_toolbar.xml
+++ b/linden/indra/newview/skins/xui/es/panel_toolbar.xml
@@ -1,5 +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="toolbar"> 2<panel name="toolbar">
3 <layout_stack name="toolbar_stack">
3 <button label="MI" name="im_btn" 4 <button label="MI" name="im_btn"
4 tool_tip="Enviar mensaje instantáneo para sus amigos." /> 5 tool_tip="Enviar mensaje instantáneo para sus amigos." />
5 <button label="Chat" name="chat_btn" tool_tip="Talk to people nearby. (Enter)" /> 6 <button label="Chat" name="chat_btn" tool_tip="Talk to people nearby. (Enter)" />
@@ -16,4 +17,5 @@
16 tool_tip="Mapa de la área a su rededor. (Ctrl-Shift-M)" /> 17 tool_tip="Mapa de la área a su rededor. (Ctrl-Shift-M)" />
17 <button label="Mapa" name="map_btn" tool_tip="Mapa del mundo. (Ctrl-M)" /> 18 <button label="Mapa" name="map_btn" tool_tip="Mapa del mundo. (Ctrl-M)" />
18 <button label="Inventario" name="inventory_btn" tool_tip="Sus ítems. (Ctrl-I)" /> 19 <button label="Inventario" name="inventory_btn" tool_tip="Sus ítems. (Ctrl-I)" />
20 </layout_stack>
19</panel> 21</panel>
diff --git a/linden/indra/newview/skins/xui/fr/floater_critical.xml b/linden/indra/newview/skins/xui/fr/floater_critical.xml
index 46a14ba..f7b55c8 100644
--- a/linden/indra/newview/skins/xui/fr/floater_critical.xml
+++ b/linden/indra/newview/skins/xui/fr/floater_critical.xml
@@ -2,9 +2,6 @@
2<floater name="modal container" title=" "> 2<floater name="modal container" title=" ">
3 <button label="Continuer" label_selected="Continuer" name="Continue" /> 3 <button label="Continuer" label_selected="Continuer" name="Continue" />
4 <button label="Annuler" label_selected="Annuler" name="Cancel" /> 4 <button label="Annuler" label_selected="Annuler" name="Cancel" />
5 <text name="tos_title">
6 Message critique
7 </text>
8 <text name="tos_heading"> 5 <text name="tos_heading">
9 Veuillez lire attentivement le message suivant. 6 Veuillez lire attentivement le message suivant.
10 </text> 7 </text>
diff --git a/linden/indra/newview/skins/xui/fr/floater_friends.xml b/linden/indra/newview/skins/xui/fr/floater_friends.xml
deleted file mode 100644
index 51456a3..0000000
--- a/linden/indra/newview/skins/xui/fr/floater_friends.xml
+++ /dev/null
@@ -1,19 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="friends" title="Amis">
3 <button label="Profil..." name="profile_btn"
4 tool_tip="Afficher photo, groupes et autres informations" />
5 <button label="Proposer Téléportation" name="offer_teleport_btn"
6 tool_tip="Proposer à cet ami de le téléporter vers votre position actuelle" />
7 <button label="Ajouter..." name="add_btn"
8 tool_tip="Proposer à un résident de devenir votre ami(e)" />
9 <button label="Payer..." name="pay_btn"
10 tool_tip="Offrir des Linden dollars (L$) à cet ami" />
11 <button label="Supprimer..." name="remove_btn"
12 tool_tip="Retirez cette personne de votre liste d&apos;amis" />
13 <button label="IM…" name="im_btn"
14 tool_tip="Démarrer une session de messagerie instantanée" />
15 <button label="Autoriser à modifier…" name="grant_btn"
16 tool_tip="Autoriser cet utilisateur à modifier vos objets" />
17 <button label="Déchoir de ses droits de modification…" name="revoke_btn"
18 tool_tip="Autoriser cet utilisateur à modifier vos objets" />
19</floater>
diff --git a/linden/indra/newview/skins/xui/fr/floater_groups.xml b/linden/indra/newview/skins/xui/fr/floater_groups.xml
deleted file mode 100644
index ca38228..0000000
--- a/linden/indra/newview/skins/xui/fr/floater_groups.xml
+++ /dev/null
@@ -1,15 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="groups" title="Groupes">
3 <text name="groupdesc">
4 Votre groupe actif apparaît en gras.
5 </text>
6 <text name="groupcount">
7 Vous appartenez à [COUNT] groupes (sur [MAX] maximum).
8 </text>
9 <button label="Activer" label_selected="Activer" name="Activate" />
10 <button label="Info" label_selected="Info" name="Info" />
11 <button label="Partir" label_selected="Partir" name="Leave" />
12 <button label="Créer" label_selected="Créer" name="Create" />
13 <button label="Rechercher..." label_selected="Rechercher..." name="Search..." />
14 <button label="Fermer" label_selected="Fermer" name="Close" />
15</floater>
diff --git a/linden/indra/newview/skins/xui/fr/floater_preview_new_landmark.xml b/linden/indra/newview/skins/xui/fr/floater_preview_new_landmark.xml
deleted file mode 100644
index c017b1e..0000000
--- a/linden/indra/newview/skins/xui/fr/floater_preview_new_landmark.xml
+++ /dev/null
@@ -1,10 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="Linden Land, Da Boom (155, 136, 35)"
3 title=" Linden Land, Da Boom (155, 136, 35)">
4 <button label="Téléportation" label_selected="" name="Teleport btn" />
5 <button label="Localiser" label_selected="" name="Show on Map btn" />
6 <button label="Annuler" label_selected="" name="Discard btn" />
7 <text type="string" length="1" name="desc txt">
8 Description :
9 </text>
10</floater>
diff --git a/linden/indra/newview/skins/xui/fr/floater_rate.xml b/linden/indra/newview/skins/xui/fr/floater_rate.xml
deleted file mode 100644
index 3ea6624..0000000
--- a/linden/indra/newview/skins/xui/fr/floater_rate.xml
+++ /dev/null
@@ -1,44 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="rate" title="Votre appréciation de Jeska Linden">
3 <radio_group name="behavior">
4 <radio_item type="string" length="1" name="Positive">
5 Positives
6 </radio_item>
7 <radio_item type="string" length="1" name="No Rating">
8 Pas d&apos;appréciation
9 </radio_item>
10 </radio_group>
11 <radio_group name="appearance">
12 <radio_item type="string" length="1" name="Positive">
13 Positives
14 </radio_item>
15 <radio_item type="string" length="1" name="No Rating">
16 Pas d&apos;appréciation
17 </radio_item>
18 </radio_group>
19 <radio_group name="building">
20 <radio_item type="string" length="1" name="Positive">
21 Positives
22 </radio_item>
23 <radio_item type="string" length="1" name="No Rating">
24 Pas d&apos;appréciation
25 </radio_item>
26 </radio_group>
27 <button label="OK" label_selected="OK" name="OK" />
28 <button label="Annuler" label_selected="Annuler" name="Cancel" />
29 <text type="string" length="1" name="Overall behavior:">
30 Comportement général :
31 </text>
32 <text type="string" length="1" name="Skill at appearance (clothing and attachments):">
33 Compétences d&apos;apparence (vêtements et attachements) :
34 </text>
35 <text type="string" length="1" name="Skill at building:">
36 Compétences de construction :
37 </text>
38 <text type="string" length="1" name="Message:">
39 Message :
40 </text>
41 <text type="string" length="1" name="cost">
42 Coût : L$[COST] pour modifier chaque appréciation. Coût total : L$[TOTAL].
43 </text>
44</floater>
diff --git a/linden/indra/newview/skins/xui/fr/menu_viewer.xml b/linden/indra/newview/skins/xui/fr/menu_viewer.xml
index eb2ef81..0f6d7a2 100644
--- a/linden/indra/newview/skins/xui/fr/menu_viewer.xml
+++ b/linden/indra/newview/skins/xui/fr/menu_viewer.xml
@@ -14,7 +14,6 @@
14 <menu_item_call label="Prendre un instantané" name="Take Snapshot" /> 14 <menu_item_call label="Prendre un instantané" name="Take Snapshot" />
15 <menu_item_call label="Enregistrer instantané sur disque dur" name="Snapshot to Disk" /> 15 <menu_item_call label="Enregistrer instantané sur disque dur" name="Snapshot to Disk" />
16 <menu_item_separator label="-----------" name="separator4" /> 16 <menu_item_separator label="-----------" name="separator4" />
17 <menu_item_call label="Démarrer/arrêter capture vidéo" name="Start/Stop Movie to Disk" />
18 <menu label="Définir taille de la fenêtre" name="Set Window Size"> 17 <menu label="Définir taille de la fenêtre" name="Set Window Size">
19 <tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~" /> 18 <tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~" />
20 <menu_item_call label="320x240" name="320x240" /> 19 <menu_item_call label="320x240" name="320x240" />
@@ -136,6 +135,7 @@
136 <menu_item_separator label="-----------" name="separator3" /> 135 <menu_item_separator label="-----------" name="separator3" />
137 <menu_item_call label="Définir comme : absent" name="Set Away" /> 136 <menu_item_call label="Définir comme : absent" name="Set Away" />
138 <menu_item_call label="Définir comme : occupé" name="Set Busy" /> 137 <menu_item_call label="Définir comme : occupé" name="Set Busy" />
138 <menu_item_call label="Arrêter toutes les animations" name="Stop All Animations" />
139 <menu_item_separator label="-----------" name="separator4" /> 139 <menu_item_separator label="-----------" name="separator4" />
140 <menu_item_call label="Historique du compte..." name="Account History..." /> 140 <menu_item_call label="Historique du compte..." name="Account History..." />
141 <menu_item_call label="Gérer mon compte..." name="Manage My Account..." /> 141 <menu_item_call label="Gérer mon compte..." name="Manage My Account..." />
@@ -185,7 +185,6 @@
185 <menu_item_call label="Lier" name="Link" /> 185 <menu_item_call label="Lier" name="Link" />
186 <menu_item_call label="Délier" name="Unlink" /> 186 <menu_item_call label="Délier" name="Unlink" />
187 <menu_item_separator label="-----------" name="separator4" /> 187 <menu_item_separator label="-----------" name="separator4" />
188 <menu_item_call label="Arrêter toutes les animations" name="Stop All Animations" />
189 <menu_item_separator label="-----------" name="separator5" /> 188 <menu_item_separator label="-----------" name="separator5" />
190 <menu_item_call label="Faire le point sur la sélection" name="Focus on Selection" /> 189 <menu_item_call label="Faire le point sur la sélection" name="Focus on Selection" />
191 <menu_item_call label="Zoom sur sélection" name="Zoom to Selection" /> 190 <menu_item_call label="Zoom sur sélection" name="Zoom to Selection" />
diff --git a/linden/indra/newview/skins/xui/fr/panel_music_remote.xml b/linden/indra/newview/skins/xui/fr/panel_music_remote.xml
deleted file mode 100644
index 6839746..0000000
--- a/linden/indra/newview/skins/xui/fr/panel_music_remote.xml
+++ /dev/null
@@ -1,10 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="music_remote">
3 <text type="string" length="1" name="text">
4 Audio
5 </text>
6 <button label="" label_selected="" name="stop_btn" tool_tip="Arrêter le media" />
7 <button label="" label_selected="" name="play_btn" tool_tip="Lire le flux" />
8 <button label="" label_selected="" name="pause_btn" tool_tip="Suspendre le flux" />
9 <volume_slider name="volume_slider" tool_tip="Réglez le volume à l&apos;aide du curseur" />
10</panel>
diff --git a/linden/indra/newview/skins/xui/fr/panel_preferences_graphics2.xml b/linden/indra/newview/skins/xui/fr/panel_preferences_graphics2.xml
deleted file mode 100644
index dfcedfa..0000000
--- a/linden/indra/newview/skins/xui/fr/panel_preferences_graphics2.xml
+++ /dev/null
@@ -1,57 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel label="Détails graphiques" name="Display panel 3">
3 <text type="string" length="1" name="text">
4 Shaders :
5 </text>
6 <check_box label="Activer Bumpmapping et Shiny" name="bumpshiny" />
7 <check_box label="Activer ondulation de l&apos;eau" name="ripple" />
8 <check_box label="Avatar Vertex Program" name="avatarvp" />
9 <text type="string" length="1" name="Avatar Rendering:">
10 Rendu de l&apos;avatar :
11 </text>
12 <radio_group name="Avatar Appearance">
13 <radio_item type="string" length="1" name="Normal">
14 Normal
15 </radio_item>
16 <radio_item type="string" length="1" name="Bump">
17 Bump Mapped
18 </radio_item>
19 <radio_item type="string" length="1" name="Cloth">
20 Bump Mapped &amp; Cloth
21 </radio_item>
22 </radio_group>
23 <text type="string" length="1" name="Lighting Detail:">
24 Détail de luminosité :
25 </text>
26 <radio_group name="lighting detail radio">
27 <radio_item type="string" length="1" name="SunMoon">
28 Soleil et lune uniquement
29 </radio_item>
30 <radio_item type="string" length="1" name="LocalLights">
31 Eclairage de proximité
32 </radio_item>
33 </radio_group>
34 <text type="string" length="1" name="Terrain Detail:">
35 Détails du terrain :
36 </text>
37 <radio_group name="terrain detail radio">
38 <radio_item type="string" length="1" name="0">
39 Bas
40 </radio_item>
41 <radio_item type="string" length="1" name="2">
42 Elevés
43 </radio_item>
44 </radio_group>
45 <text type="string" length="1" name="Object Mesh Detail:">
46 Object Mesh Detail:
47 </text>
48 <text type="string" length="1" name="Flexible Mesh Detail:">
49 Flexible Mesh Detail:
50 </text>
51 <text type="string" length="1" name="Tree Mesh Detail:">
52 Tree Mesh Detail:
53 </text>
54 <text type="string" length="1" name="Avatar Mesh Detail:">
55 Avatar Mesh Detail:
56 </text>
57</panel>
diff --git a/linden/indra/newview/skins/xui/fr/panel_preferences_graphics3.xml b/linden/indra/newview/skins/xui/fr/panel_preferences_graphics3.xml
deleted file mode 100644
index ff62b1f..0000000
--- a/linden/indra/newview/skins/xui/fr/panel_preferences_graphics3.xml
+++ /dev/null
@@ -1,50 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel label="Graphisme (avancé)" name="Display panel 2">
3 <text type="string" length="1" name="Filtering:">
4 Filtrage :
5 </text>
6 <check_box label="Filtrage anisotrope (ralentit la performance)" name="ani" />
7 <spinner label="Gamma :" name="gamma" />
8 <text type="string" length="1" name="(brightness, lower is brighter)">
9 (luminosité, moins = plus lumineux, 0=défaut)
10 </text>
11 <spinner label="Luminosité nocturne :" name="nighttime_brightness" />
12 <text type="string" length="1" name="(higher is brighter, 1.0 is default)">
13 (plus = plus lumineux, 1.0 valeur par défaut)
14 </text>
15 <text type="string" length="1" name="AGP Graphics Card:">
16 Carte graphique AGP :
17 </text>
18 <check_box label="Activer AGP (plus rapide si carte AGP installée)" name="agp"
19 tool_tip="Peut ralentir la performance et consommer plus de mémoire si vous utilisez une carte graphique PCI classique." />
20 <text type="string" length="1" name="Graphics Card Memory:">
21 Mémoire carte graphique :
22 </text>
23 <radio_group name="video card memory radio">
24 <radio_item type="string" length="1" name="radio">
25 16MB
26 </radio_item>
27 <radio_item type="string" length="1" name="radio2">
28 32MB
29 </radio_item>
30 <radio_item type="string" length="1" name="radio3">
31 64MB
32 </radio_item>
33 <radio_item type="string" length="1" name="radio4">
34 128MB
35 </radio_item>
36 <radio_item type="string" length="1" name="radio5">
37 256MB
38 </radio_item>
39 <radio_item type="string" length="1" name="radio6">
40 512MB
41 </radio_item>
42 </radio_group>
43 <spinner label="Coeff. distance du brouillard :" name="fog" />
44 <spinner label="Particules max. :" name="particles" />
45 <spinner label="Outfit Composite Limit:" name="comp limit"
46 tool_tip="Nombre de tenues récemment portées à afficher" />
47 <text type="string" length="1" name="(lower is faster)">
48 (moins = plus rapide)
49 </text>
50</panel>
diff --git a/linden/indra/newview/skins/xui/fr/panel_settings_chat.xml b/linden/indra/newview/skins/xui/fr/panel_settings_chat.xml
deleted file mode 100644
index 73351a1..0000000
--- a/linden/indra/newview/skins/xui/fr/panel_settings_chat.xml
+++ /dev/null
@@ -1,58 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="chat" title="Conversation">
3 <text>
4 Taille de police du chat :
5 </text>
6 <radio_group name="chat font size">
7 <radio_item>
8 Petit
9 </radio_item>
10 <radio_item>
11 Moyen(ne)
12 </radio_item>
13 <radio_item>
14 Grand
15 </radio_item>
16 </radio_group>
17 <text>
18 Couleur du chat :
19 </text>
20 <color_swatch label="Système" name="system" />
21 <color_swatch label="Avatars" name="users" />
22 <color_swatch label="Objets" name="objects" />
23 <color_swatch label="Bulle" name="background" />
24 <text>
25 Console de chat :
26 </text>
27 <spinner label="Estomper après" name="fade_chat_time" />
28 <text>
29 (secondes)
30 </text>
31 <spinner label="" name="max_chat_count" />
32 <text>
33 (nb de lignes)
34 </text>
35 <slider label="Opacité" name="console_opacity" />
36 <text>
37 Options de Chat :
38 </text>
39 <check_box label="Chat en plein écran (au prochain redémarrage)"
40 name="chat_full_width_check" />
41 <check_box label="Refermer le chat à l&apos;aide de la touche &apos;envoi&apos;"
42 name="close_chat_on_return_check" />
43 <check_box label="Les touches directionnelles déplacent l&apos;avatar pendant le chat"
44 name="arrow_keys_move_avatar_check" />
45 <check_box label="Afficher l&apos;heure d&apos;envoi dans le chat"
46 name="show_timestamps_check" />
47 <text>
48 Bulles de Chat :
49 </text>
50 <check_box label="Afficher les bulles de chat" name="bubble_text_chat" />
51 <slider label="Opacité" name="bubble_chat_opacity" />
52 <text>
53 Erreurs :
54 </text>
55 <check_box label="Afficher les erreurs et alertes de scripts dans le chat"
56 name="script_errors_as_chat" />
57 <color_swatch label="Couleur" name="script_error" />
58</panel>
diff --git a/linden/indra/newview/skins/xui/fr/panel_settings_im.xml b/linden/indra/newview/skins/xui/fr/panel_settings_im.xml
deleted file mode 100644
index 47fb58f..0000000
--- a/linden/indra/newview/skins/xui/fr/panel_settings_im.xml
+++ /dev/null
@@ -1,15 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="im" title="IM">
3 <text>
4 Options IM :
5 </text>
6 <check_box label="Envoyer IM vers adresse mail" name="send_im_to_email"
7 tool_tip="Modifiez votre email sur secondlife.com" />
8 <check_box label="Inclure les IM dans l&apos;historique du chat"
9 name="include_im_in_chat_history" />
10 <check_box label="Afficher l&apos;heure d&apos;envoi dans les IM"
11 name="show_timestamps_check" />
12 <text>
13 Répondeur en mode Occupé :
14 </text>
15</panel>
diff --git a/linden/indra/newview/skins/xui/fr/panel_settings_msgbox.xml b/linden/indra/newview/skins/xui/fr/panel_settings_msgbox.xml
deleted file mode 100644
index 903eb80..0000000
--- a/linden/indra/newview/skins/xui/fr/panel_settings_msgbox.xml
+++ /dev/null
@@ -1,12 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel label="Pop-ups" name="popups" title="Pop-ups">
3 <text>
4 Ne pas afficher les pop-ups :
5 </text>
6 <button label="Autoriser cette pop-up" name="enable_popup" />
7 <text>
8 Afficher les pop-ups :
9 </text>
10 <button label="Réinitialiser les dialogues &apos;Afficher la prochaine fois&apos;..."
11 name="reset_dialogs_btn" />
12</panel>
diff --git a/linden/indra/newview/skins/xui/fr/panel_settings_network.xml b/linden/indra/newview/skins/xui/fr/panel_settings_network.xml
deleted file mode 100644
index a722e43..0000000
--- a/linden/indra/newview/skins/xui/fr/panel_settings_network.xml
+++ /dev/null
@@ -1,59 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="network" title="Réseau">
3 <text>
4 Bande passante maximum :
5 </text>
6 <slider label="" name="max_bandwidth" />
7 <text>
8 kbps (kilobits/seconde)
9 </text>
10 <text>
11 Taille du cache :
12 </text>
13 <radio_group name="disk cache">
14 <radio_item>
15 50 MB
16 </radio_item>
17 <radio_item>
18 200 MB
19 </radio_item>
20 <radio_item>
21 500 MB
22 </radio_item>
23 <radio_item>
24 1000 MB
25 </radio_item>
26 </radio_group>
27 <button label="Vider le cache" name="clear_cache" />
28 <text>
29 Configuration :
30 </text>
31 <check_box label="Utiliser un proxy" name="proxy_enabled"
32 tool_tip="Précisez la configuration du proxy" />
33 <text>
34 Proxy :
35 </text>
36 <line_editor name="proxy_address"
37 tool_tip="Nom ou adresse IP du proxy que vous souhaitez utilser" />
38 <text>
39 Port :
40 </text>
41 <line_editor name="proxy_port"
42 tool_tip="Numéro de port du proxy que vous souhaitez utiliser" />
43 <text>
44 Socks :
45 </text>
46 <radio_group name="socks_4_5">
47 <radio_item>
48 Socks v4
49 </radio_item>
50 <radio_item>
51 Socks v5
52 </radio_item>
53 </radio_group>
54 <text>
55 Pas de proxy :
56 </text>
57 <line_editor name="proxy_exclusions"
58 tool_tip="Noms ou adresses IP à ne pas utiliser pour le proxy" />
59</panel>
diff --git a/linden/indra/newview/skins/xui/fr/panel_settings_web.xml b/linden/indra/newview/skins/xui/fr/panel_settings_web.xml
deleted file mode 100644
index 70b6384..0000000
--- a/linden/indra/newview/skins/xui/fr/panel_settings_web.xml
+++ /dev/null
@@ -1,52 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="web" title="Web">
3 <check_box label="Utiliser un navigateur externe (Firefox, Safari, Internet Explorer)"
4 name="external_browser_check"
5 tool_tip="Utiliser un navigateur externe pour l&apos;aide, les liens web, etc.\ Déconseillé en mode plein écran." />
6 <text>
7 Page d&apos;accueil du navigateur :
8 </text>
9 <line_editor name="home_page"
10 tool_tip="Page de démarrage à l&apos;ouverture du navigateur de Second Life" />
11 <text>
12 Configuration :
13 </text>
14 <check_box label="Utiliser un proxy pour le navigateur interne" name="proxy_enabled"
15 tool_tip="Précisez la configuration du proxy pour le navigateur interne." />
16 <text>
17 Proxy :
18 </text>
19 <line_editor name="proxy_address"
20 tool_tip="Nom ou adresse IP du proxy que vous souhaitez utilser" />
21 <text>
22 Port :
23 </text>
24 <line_editor name="proxy_port"
25 tool_tip="Numéro de port du proxy que vous souhaitez utiliser" />
26 <text>
27 Socks :
28 </text>
29 <radio_group name="socks_4_5">
30 <radio_item>
31 Socks v4
32 </radio_item>
33 <radio_item>
34 Socks v5
35 </radio_item>
36 </radio_group>
37 <text>
38 Pas de proxy pour :
39 </text>
40 <line_editor name="proxy_exclusions"
41 tool_tip="Noms ou adresses IP à ne pas utiliser pour le proxy" />
42 <check_box
43 label="Afficher des pages web sur les objets (expérimental, nécessite un redémarrage)"
44 name="web_pages_on_prims_check" />
45 <text>
46 Sites de confiance :
47(identifiez-vous pour afficher)
48 </text>
49 <button label="Ajouter" name="add_trusted" />
50 <line_editor name="trusted_site_entry" tool_tip="Site à rajouter à la liste de confiance" />
51 <button label="Retirer" name="rem_trusted" />
52</panel>
diff --git a/linden/indra/newview/skins/xui/fr/panel_toolbar.xml b/linden/indra/newview/skins/xui/fr/panel_toolbar.xml
index c0a821d..87e32b2 100644
--- a/linden/indra/newview/skins/xui/fr/panel_toolbar.xml
+++ b/linden/indra/newview/skins/xui/fr/panel_toolbar.xml
@@ -1,5 +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="toolbar"> 2<panel name="toolbar">
3 <layout_stack name="toolbar_stack">
3 <button label="IM" name="im_btn" 4 <button label="IM" name="im_btn"
4 tool_tip="Envoyez des messages instantanés à vos amis." /> 5 tool_tip="Envoyez des messages instantanés à vos amis." />
5 <button label="Chat" name="chat_btn" 6 <button label="Chat" name="chat_btn"
@@ -17,4 +18,5 @@
17 tool_tip="Carte de la zone dans laquelle vous vous trouvez. (Ctrl-Shift-M)" /> 18 tool_tip="Carte de la zone dans laquelle vous vous trouvez. (Ctrl-Shift-M)" />
18 <button label="Carte" name="map_btn" tool_tip="Carte du monde. (Ctrl-M)" /> 19 <button label="Carte" name="map_btn" tool_tip="Carte du monde. (Ctrl-M)" />
19 <button label="Inventaire" name="inventory_btn" tool_tip="Vos éléments. (Ctrl-I)" /> 20 <button label="Inventaire" name="inventory_btn" tool_tip="Vos éléments. (Ctrl-I)" />
21 </layout_stack>
20</panel> 22</panel>
diff --git a/linden/indra/newview/skins/xui/ja/floater_about_land.xml b/linden/indra/newview/skins/xui/ja/floater_about_land.xml
index 15ac0cf..69b15b6 100644
--- a/linden/indra/newview/skins/xui/ja/floater_about_land.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_about_land.xml
@@ -470,9 +470,12 @@
470 </text> 470 </text>
471 <button label="追加..." label_selected="追加..." name="add_allowed" /> 471 <button label="追加..." label_selected="追加..." name="add_allowed" />
472 <button label="削除" label_selected="削除" name="remove_allowed" /> 472 <button label="削除" label_selected="削除" name="remove_allowed" />
473 <check_box label="ç¦æ­¢" name="AccessCheck"> 473 <check_box label="ç¦æ­¢" name="BanCheck">
474 ç¦æ­¢ã•れãŸä½äºº 474 ç¦æ­¢ã•れãŸä½äºº
475 </check_box> 475 </check_box>
476 <check_box label="ウ」、ヒヤSソノ" name="AccessCheck">
477 許å¯ã•れãŸä½äºº
478 </check_box>
476 <name_list name="AccessList" tool_tip="([LISTED]リスト入りã€[MAX]最大)"> 479 <name_list name="AccessList" tool_tip="([LISTED]リスト入りã€[MAX]最大)">
477 <column label="許å¯ã•れãŸä½äºº" name="name" /> 480 <column label="許å¯ã•れãŸä½äºº" name="name" />
478 </name_list> 481 </name_list>
diff --git a/linden/indra/newview/skins/xui/ja/floater_critical.xml b/linden/indra/newview/skins/xui/ja/floater_critical.xml
index 39f6ee8..0fc142c 100644
--- a/linden/indra/newview/skins/xui/ja/floater_critical.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_critical.xml
@@ -2,9 +2,6 @@
2<floater name="modal container" title=" "> 2<floater name="modal container" title=" ">
3 <button label="続行" label_selected="続行" name="Continue" /> 3 <button label="続行" label_selected="続行" name="Continue" />
4 <button label="å–り消ã—" label_selected="å–り消ã—" name="Cancel" /> 4 <button label="å–り消ã—" label_selected="å–り消ã—" name="Cancel" />
5 <text name="tos_title">
6 クリティカル・メッセージ
7 </text>
8 <text name="tos_heading"> 5 <text name="tos_heading">
9 次ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’æ³¨æ„æ·±ããŠèª­ã¿ãã ã•ã„。 6 次ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’æ³¨æ„æ·±ããŠèª­ã¿ãã ã•ã„。
10 </text> 7 </text>
diff --git a/linden/indra/newview/skins/xui/ja/floater_friends.xml b/linden/indra/newview/skins/xui/ja/floater_friends.xml
deleted file mode 100644
index dc24d74..0000000
--- a/linden/indra/newview/skins/xui/ja/floater_friends.xml
+++ /dev/null
@@ -1,37 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="friends" title="フレンド">
3 <scroll_list name="friend_list"
4 tool_tip="Shiftキーã¾ãŸã¯ Control キーを押ã—ãªãŒã‚‰è¤‡æ•°ã®ãƒ•レンドをクリックã—ã¦é¸æŠžã™ã‚‹">
5 <column label="åå‰" name="friend_name" />
6 </scroll_list>
7 <panel name="rights_container">
8 <text name="friend_name_label">
9 ãƒ•ãƒ¬ãƒ³ãƒ‰ã‚’é¸æŠžã—ã¦æ¨©åˆ©ã‚’変更...
10 </text>
11 <check_box label="オンライン・ステータスã®ç¢ºèªã‚’許å¯ã™ã‚‹"
12 name="online_status_cb"
13 tool_tip="ã‚ãªãŸã®ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ãƒ»ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’ã“ã®ãƒ•レンドãŒã‚³ãƒ¼ãƒªãƒ³ã‚°ãƒ»ã‚«ãƒ¼ãƒ‰ã¾ãŸã¯ãƒ•レンド・リストã§ç¢ºèªã§ãるよã†ã«ã™ã‚‹ã‹ã©ã†ã‹ã‚’指定" />
14 <check_box label="自分を地図ã®ä¸Šã«ç¤ºã™" name="map_status_cb"
15 tool_tip="ã‚ãªãŸã®ãƒ­ã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã‚’ã“ã®ãƒ•レンドãŒåœ°å›³ä¸Šã§ç¢ºèªã§ãるよã†ã«ã™ã‚‹ã‹ã©ã†ã‹ã‚’指定" />
16 <check_box label="オブジェクトã®ä¿®æ­£ã‚’許å¯ã™ã‚‹" name="modify_status_cb"
17 tool_tip="ã“ã®ãƒ•レンドã«ã‚ªãƒ–ジェクトã®ä¿®æ­£ã‚’許å¯ã™ã‚‹ã‹ã©ã†ã‹ã‚’指定" />
18 <text name="process_rights_label">
19 権利変更を処ç†ä¸­...
20 </text>
21 </panel>
22 <button label="IM/コール" name="im_btn"
23 tool_tip="インスタント・メッセージを開始" />
24 <button label="テレポート" name="offer_teleport_btn"
25 tool_tip="ã“ã®ãƒ•レンドã«ã€ã‚ãªãŸã®ç¾åœ¨ã®ãƒ­ã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã¸ã®ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã‚’贈りã¾ã™ã€‚" />
26 <button label="追加..." name="add_btn"
27 tool_tip="ä½äººã«ãƒ•レンドシップを贈りã¾ã™ã€‚" />
28 <button label="プロフィール" name="profile_btn"
29 tool_tip="写真ã€ã‚°ãƒ«ãƒ¼ãƒ—ã€ãŠã‚ˆã³ãã®ä»–ã®æƒ…報を表示" />
30 <button label="支払ã„..." name="pay_btn"
31 tool_tip="リンデン・ドル(L$)をフレンドã«è´ˆã‚‹" />
32 <button label="削除..." name="remove_btn"
33 tool_tip="ã“ã®äººç‰©ã‚’フレンド・リストã‹ã‚‰å‰Šé™¤" />
34 <text name="Multiple">
35 複数ã®ãƒ•レンド...
36 </text>
37</floater>
diff --git a/linden/indra/newview/skins/xui/ja/floater_groups.xml b/linden/indra/newview/skins/xui/ja/floater_groups.xml
deleted file mode 100644
index 4fb56ed..0000000
--- a/linden/indra/newview/skins/xui/ja/floater_groups.xml
+++ /dev/null
@@ -1,17 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="groups" title="グループ">
3 <text name="groupdesc">
4 ç¾åœ¨ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ–・グループを太字表示。
5 </text>
6 <text name="groupcount">
7 ã‚ãªãŸã®æ‰€å±žã‚°ãƒ«ãƒ¼ãƒ—数: [COUNT] (ä¸Šé™æ•° [MAX])
8 </text>
9 <button label="IM/コール" name="IM"
10 tool_tip="インスタントメッセージ・セッションを開ã" />
11 <button label="アクティブ" label_selected="アクティブ" name="Activate" />
12 <button label="情報" label_selected="情報" name="Info" />
13 <button label="ç«‹ã¡åŽ»ã‚‹" label_selected="ç«‹ã¡åŽ»ã‚‹" name="Leave" />
14 <button label="作æˆ..." label_selected="作æˆ" name="Create" />
15 <button label="検索..." label_selected="検索..." name="Search..." />
16 <button label="é–‰ã˜ã‚‹" label_selected="é–‰ã˜ã‚‹" name="Close" />
17</floater>
diff --git a/linden/indra/newview/skins/xui/ja/floater_instant_message_ad_hoc.xml b/linden/indra/newview/skins/xui/ja/floater_instant_message_ad_hoc.xml
index e21c057..d1cf8af 100644
--- a/linden/indra/newview/skins/xui/ja/floater_instant_message_ad_hoc.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_instant_message_ad_hoc.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<floater label="(䏿˜Žï¼‰" name="im_floater" title="(䏿˜Žï¼‰"> 2<floater label="(䏿˜Žï¼‰" name="im_floater" title="(䏿˜Žï¼‰">
3 <layout_stack name=""> 3 <layout_stack name="panels">
4 <layout_panel name="im_contents_panel"> 4 <layout_panel name="im_contents_panel">
5 <button label="コール" name="start_call_btn" /> 5 <button label="コール" name="start_call_btn" />
6 <button label="コールã®çµ‚了" name="end_call_btn" /> 6 <button label="コールã®çµ‚了" name="end_call_btn" />
diff --git a/linden/indra/newview/skins/xui/ja/floater_instant_message_group.xml b/linden/indra/newview/skins/xui/ja/floater_instant_message_group.xml
index adf0df0..ceacef6 100644
--- a/linden/indra/newview/skins/xui/ja/floater_instant_message_group.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_instant_message_group.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<floater label="(䏿˜Žï¼‰" name="im_floater" title="(䏿˜Žï¼‰"> 2<floater label="(䏿˜Žï¼‰" name="im_floater" title="(䏿˜Žï¼‰">
3 <layout_stack name=""> 3 <layout_stack name="panels">
4 <layout_panel name="im_contents_panel"> 4 <layout_panel name="im_contents_panel">
5 <button label="グループインフォ:" name="group_info_btn" /> 5 <button label="グループインフォ:" name="group_info_btn" />
6 <button label="コールã«å‚加" name="start_call_btn" /> 6 <button label="コールã«å‚加" name="start_call_btn" />
diff --git a/linden/indra/newview/skins/xui/ja/floater_joystick.xml b/linden/indra/newview/skins/xui/ja/floater_joystick.xml
index e75fe31..6207687 100644
--- a/linden/indra/newview/skins/xui/ja/floater_joystick.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_joystick.xml
@@ -1,54 +1,3 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="build options floater" title="飛行カメラオプション"> 2<floater name="Joystick">
3 <text name="x-axis"> 3</floater> \ No newline at end of file
4 X軸
5 </text>
6 <text name="y-axis">
7 Y軸
8 </text>
9 <text name="z-axis">
10 Z軸
11 </text>
12 <spinner label="マッピング" name="FlycamAxis1" />
13 <spinner label="マッピング" name="FlycamAxis2" />
14 <spinner label="マッピング" name="FlycamAxis0" />
15 <spinner label="スケール" name="FlycamAxisScale1" />
16 <spinner label="スケール" name="FlycamAxisScale2" />
17 <spinner label="スケール" name="FlycamAxisScale0" />
18 <spinner label="デッドゾーン" name="FlycamAxisDeadZone1" />
19 <spinner label="デッドゾーン" name="FlycamAxisDeadZone2" />
20 <spinner label="デッドゾーン" name="FlycamAxisDeadZone0" />
21 <text name="yaw">
22 ヨー
23 </text>
24 <text name="pitch">
25 ピッãƒ
26 </text>
27 <text name="roll">
28 ロール
29 </text>
30 <spinner label="マッピング" name="FlycamAxis5" />
31 <spinner label="マッピング" name="FlycamAxis4" />
32 <spinner label="マッピング" name="FlycamAxis3" />
33 <spinner label="スケール" name="FlycamAxisScale5" />
34 <spinner label="スケール" name="FlycamAxisScale4" />
35 <spinner label="スケール" name="FlycamAxisScale3" />
36 <spinner label="デッドゾーン" name="FlycamAxisDeadZone5" />
37 <spinner label="デッドゾーン" name="FlycamAxisDeadZone4" />
38 <spinner label="デッドゾーン" name="FlycamAxisDeadZone3" />
39 <text name="ZoomLabel">
40 ズーム
41 </text>
42 <spinner label="マッピング" name="FlycamAxis6" />
43 <spinner label="スケール" name="FlycamAxisScale6" />
44 <spinner label="デッドゾーン" name="FlycamAxisDeadZone6" />
45 <slider label="フェザリング" name="FlycamFeathering" />
46 <check_box label="自動レベル" name="FlycamAutoLeveling" />
47 <check_box label="3Dカーソル" name="FlycamAbsolute" />
48 <text name="JoystickMonitor">
49 ジョイスティックモニター
50 </text>
51 <text name="Axis">
52 軸 [NUM]
53 </text>
54</floater>
diff --git a/linden/indra/newview/skins/xui/ja/floater_preview_new_landmark.xml b/linden/indra/newview/skins/xui/ja/floater_preview_new_landmark.xml
deleted file mode 100644
index 152f3b0..0000000
--- a/linden/indra/newview/skins/xui/ja/floater_preview_new_landmark.xml
+++ /dev/null
@@ -1,9 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="landmark_preview">
3 <button label="テレãƒãƒ¼ãƒˆ" label_selected="" name="Teleport btn" />
4 <button label="地図上ã«è¡¨ç¤º" label_selected="" name="Show on Map btn" />
5 <button label="破棄" label_selected="" name="Discard btn" />
6 <text type="string" length="1" name="desc txt">
7 説明:
8 </text>
9</floater>
diff --git a/linden/indra/newview/skins/xui/ja/floater_rate.xml b/linden/indra/newview/skins/xui/ja/floater_rate.xml
deleted file mode 100644
index 7d26296..0000000
--- a/linden/indra/newview/skins/xui/ja/floater_rate.xml
+++ /dev/null
@@ -1,44 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="rate" title="Jeska Lindenã«å¯¾ã™ã‚‹ã‚ãªãŸã®è©•価">
3 <radio_group name="behavior">
4 <radio_item type="string" length="1" name="Positive">
5 ãƒã‚¸ãƒ†ã‚£ãƒ–
6 </radio_item>
7 <radio_item type="string" length="1" name="No Rating">
8 評価ãªã—
9 </radio_item>
10 </radio_group>
11 <radio_group name="appearance">
12 <radio_item type="string" length="1" name="Positive">
13 ãƒã‚¸ãƒ†ã‚£ãƒ–
14 </radio_item>
15 <radio_item type="string" length="1" name="No Rating">
16 評価ãªã—
17 </radio_item>
18 </radio_group>
19 <radio_group name="building">
20 <radio_item type="string" length="1" name="Positive">
21 ãƒã‚¸ãƒ†ã‚£ãƒ–
22 </radio_item>
23 <radio_item type="string" length="1" name="No Rating">
24 評価ãªã—
25 </radio_item>
26 </radio_group>
27 <button label="OK" label_selected="OK" name="OK" />
28 <button label="å–り消ã—" label_selected="å–り消ã—" name="Cancel" />
29 <text type="string" length="1" name="Overall behavior:">
30 全体的ãªè¡Œå‹•:
31 </text>
32 <text type="string" length="1" name="Skill at appearance (clothing and attachments):">
33 容姿ã®ã‚¹ã‚­ãƒ«ï¼ˆæœã¨è£…飾å“):
34 </text>
35 <text type="string" length="1" name="Skill at building:">
36 建造物ã®ã‚¹ã‚­ãƒ«ï¼š
37 </text>
38 <text type="string" length="1" name="Message:">
39 メッセージ:
40 </text>
41 <text type="string" length="1" name="cost">
42 費用:å„評価を変更ã™ã‚‹ã«ã¯L$[TOTAL] 全体費用:L$[COST].
43 </text>
44</floater>
diff --git a/linden/indra/newview/skins/xui/ja/menu_viewer.xml b/linden/indra/newview/skins/xui/ja/menu_viewer.xml
index 610c109..eb8b62d 100644
--- a/linden/indra/newview/skins/xui/ja/menu_viewer.xml
+++ b/linden/indra/newview/skins/xui/ja/menu_viewer.xml
@@ -18,8 +18,6 @@
18 <menu_item_call label="スナップショットをディスクã«ä¿å­˜" 18 <menu_item_call label="スナップショットをディスクã«ä¿å­˜"
19 name="Snapshot to Disk" /> 19 name="Snapshot to Disk" />
20 <menu_item_separator label="-----------" name="separator4" /> 20 <menu_item_separator label="-----------" name="separator4" />
21 <menu_item_call label="ディスクã¸ã®éŒ²ç”»ã‚’é–‹å§‹/åœæ­¢"
22 name="Start/Stop Movie to Disk" />
23 <menu label="ウィンドウ・サイズを設定" name="Set Window Size"> 21 <menu label="ウィンドウ・サイズを設定" name="Set Window Size">
24 <menu_item_call label="320x240" name="320x240" /> 22 <menu_item_call label="320x240" name="320x240" />
25 <menu_item_call label="640x480" name="640x480" /> 23 <menu_item_call label="640x480" name="640x480" />
@@ -146,6 +144,7 @@
146 <menu_item_separator label="-----------" name="separator3" /> 144 <menu_item_separator label="-----------" name="separator3" />
147 <menu_item_call label="退席中ã«è¨­å®š" name="Set Away" /> 145 <menu_item_call label="退席中ã«è¨­å®š" name="Set Away" />
148 <menu_item_call label="ビジーã«è¨­å®š" name="Set Busy" /> 146 <menu_item_call label="ビジーã«è¨­å®š" name="Set Busy" />
147 <menu_item_call label="アニメーションをã™ã¹ã¦åœæ­¢" name="Stop All Animations" />
149 <menu_item_separator label="-----------" name="separator4" /> 148 <menu_item_separator label="-----------" name="separator4" />
150 <menu_item_call label="å£åº§å±¥æ­´..." name="Account History..." /> 149 <menu_item_call label="å£åº§å±¥æ­´..." name="Account History..." />
151 <menu_item_call label="自分ã®å£åº§ã®ç®¡ç†..." name="Manage My Account..." /> 150 <menu_item_call label="自分ã®å£åº§ã®ç®¡ç†..." name="Manage My Account..." />
@@ -202,7 +201,6 @@
202 <menu_item_call label="リンク" name="Link" /> 201 <menu_item_call label="リンク" name="Link" />
203 <menu_item_call label="リンクã—ãªã„" name="Unlink" /> 202 <menu_item_call label="リンクã—ãªã„" name="Unlink" />
204 <menu_item_separator label="-----------" name="separator4" /> 203 <menu_item_separator label="-----------" name="separator4" />
205 <menu_item_call label="アニメーションをã™ã¹ã¦åœæ­¢" name="Stop All Animations" />
206 <menu_item_separator label="-----------" name="separator5" /> 204 <menu_item_separator label="-----------" name="separator5" />
207 <menu_item_call label="é¸æŠžã‚’ãƒ•ã‚©ãƒ¼ã‚«ã‚¹" name="Focus on Selection" /> 205 <menu_item_call label="é¸æŠžã‚’ãƒ•ã‚©ãƒ¼ã‚«ã‚¹" name="Focus on Selection" />
208 <menu_item_call label="é¸æŠžç¯„å›²ã«ã‚ºãƒ¼ãƒ ã‚¤ãƒ³" name="Zoom to Selection" /> 206 <menu_item_call label="é¸æŠžç¯„å›²ã«ã‚ºãƒ¼ãƒ ã‚¤ãƒ³" name="Zoom to Selection" />
@@ -224,7 +222,6 @@
224 name="Set Scripts to Running in Selection" /> 222 name="Set Scripts to Running in Selection" />
225 <menu_item_call label="é¸æŠžã—ãŸã‚¹ã‚¯ãƒªãƒ—トを起動ã—ãªã„" 223 <menu_item_call label="é¸æŠžã—ãŸã‚¹ã‚¯ãƒªãƒ—トを起動ã—ãªã„"
226 name="Set Scripts to Not Running in Selection" /> 224 name="Set Scripts to Not Running in Selection" />
227 <menu_item_separator label="-----------" name="separator6" />
228 <menu_item_call label="ãƒã‚°ã®å ±å‘Š..." name="Report Bug..." /> 225 <menu_item_call label="ãƒã‚°ã®å ±å‘Š..." name="Report Bug..." />
229 <menu label="ãƒã‚°ã®å ±å‘Š" name="Bug Reporting"> 226 <menu label="ãƒã‚°ã®å ±å‘Š" name="Bug Reporting">
230 <menu_item_call label="パブリックå•題トラッカー..." name="Public Issue Tracker..." /> 227 <menu_item_call label="パブリックå•題トラッカー..." name="Public Issue Tracker..." />
@@ -254,6 +251,17 @@
254 <menu_item_call label="ã¶ã¤ã‹ã‚‹ã€æŠ¼ã™ã€ãŠã‚ˆã³å½“ãŸã‚‹..." 251 <menu_item_call label="ã¶ã¤ã‹ã‚‹ã€æŠ¼ã™ã€ãŠã‚ˆã³å½“ãŸã‚‹..."
255 name="Bumps, Pushes &amp;amp; Hits..." /> 252 name="Bumps, Pushes &amp;amp; Hits..." />
256 <menu_item_call label="ラグ メーター" name="Lag Meter" /> 253 <menu_item_call label="ラグ メーター" name="Lag Meter" />
254 <menu label="ãƒã‚°ã®å ±å‘Š" name="Bug Reporting">
255 <menu_item_call label="パブリックå•題トラッカー..." name="Public Issue Tracker..." />
256 <menu_item_call label="パブリックå•題トラッカー ヘルプ..."
257 name="Publc Issue Tracker Help..." />
258 <menu_item_call label="ãƒã‚°ã®å ±å‘Š 101..." name="Bug Reporing 101..." />
259 <menu_item_call label="セキュリティå•題..." name="Security Issues..." />
260 <menu_item_call label="QA Wiki..." name="QA Wiki..." />
261 <menu_item_separator label="-----------" name="separator7" />
262 <menu_item_call label="ãƒã‚°ã®å ±å‘Š..." name="Report Bug..." />
263 </menu>
264
257 <menu_item_separator label="-----------" name="separator5" /> 265 <menu_item_separator label="-----------" name="separator5" />
258 <menu_item_call label="リリースノート..." name="Release Notes..." /> 266 <menu_item_call label="リリースノート..." name="Release Notes..." />
259 <menu_item_separator label="-----------" name="separator6" /> 267 <menu_item_separator label="-----------" name="separator6" />
diff --git a/linden/indra/newview/skins/xui/ja/panel_music_remote.xml b/linden/indra/newview/skins/xui/ja/panel_music_remote.xml
deleted file mode 100644
index 35b4c70..0000000
--- a/linden/indra/newview/skins/xui/ja/panel_music_remote.xml
+++ /dev/null
@@ -1,18 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="music_remote">
3 <text type="string" length="6" name="text">
4 ミュージック
5 </text>
6 <volume_slider name="volume_slider"
7 tool_tip="ã“ã®ã‚¹ãƒ©ã‚¤ãƒ€ãƒ¼ã§ãƒœãƒªãƒ¥ãƒ¼ãƒ ã‚’調整" />
8 <button label="" label_selected="" name="stop_btn" tool_tip="ãƒ¡ãƒ‡ã‚£ã‚¢ã‚’åœæ­¢" />
9 <button label="" label_selected="" name="play_btn"
10 tool_tip="メディア・ストリームをå†ç”Ÿ" />
11 <button label="" label_selected="" name="pause_btn"
12 tool_tip="ãƒ¡ãƒ‡ã‚¤ã‚¢ãƒ»ã‚¹ãƒˆãƒªãƒ¼ãƒ ã‚’ä¸€æ™‚åœæ­¢" />
13 <button name="music_stop" tool_tip="ãƒ¡ãƒ‡ã‚£ã‚¢ã‚’åœæ­¢ã—ã¾ã™ã€‚" />
14 <button name="music_play"
15 tool_tip="メディア・ストリームをå†ç”Ÿã—ã¾ã™ã€‚" />
16 <button name="music_pause"
17 tool_tip="ãƒ¡ãƒ‡ã‚¤ã‚¢ãƒ»ã‚¹ãƒˆãƒªãƒ¼ãƒ ã‚’ä¸€æ™‚åœæ­¢ã—ã¾ã™ã€‚" />
18</panel>
diff --git a/linden/indra/newview/skins/xui/ja/panel_overlaybar.xml b/linden/indra/newview/skins/xui/ja/panel_overlaybar.xml
index d201c8c..f37d351 100644
--- a/linden/indra/newview/skins/xui/ja/panel_overlaybar.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_overlaybar.xml
@@ -12,8 +12,8 @@
12 <button label="ç«‹ã¡ä¸ŠãŒã‚‹" label_selected="ç«‹ã¡ä¸ŠãŒã‚‹" name="Stand Up" 12 <button label="ç«‹ã¡ä¸ŠãŒã‚‹" label_selected="ç«‹ã¡ä¸ŠãŒã‚‹" name="Stand Up"
13 tool_tip="ç«‹ã¡ä¸ŠãŒã‚‹ã«ã¯ã€ã“ã“をクリックã—ã¾ã™ã€‚" /> 13 tool_tip="ç«‹ã¡ä¸ŠãŒã‚‹ã«ã¯ã€ã“ã“をクリックã—ã¾ã™ã€‚" />
14 <layout_stack name="overlay_layout_panel"> 14 <layout_stack name="overlay_layout_panel">
15 <layout_panel name=""> 15 <layout_panel name="main_panel">
16 <layout_stack name=""> 16 <layout_stack name="chatbar_and_buttons">
17 <layout_panel name="state_buttons"> 17 <layout_panel name="state_buttons">
18 <button label="å—信済ã¿IM" label_selected="å—信済ã¿IM" name="IM Received" 18 <button label="å—信済ã¿IM" label_selected="å—信済ã¿IM" name="IM Received"
19 tool_tip="インスタント・メッセージãŒä¿ç•™ã«ãªã£ã¦ã„ã¾ã™ã€‚ã“ã“をクリックã—ã¦ã€IMを見ã¦ãã ã•ã„。" /> 19 tool_tip="インスタント・メッセージãŒä¿ç•™ã«ãªã£ã¦ã„ã¾ã™ã€‚ã“ã“をクリックã—ã¦ã€IMを見ã¦ãã ã•ã„。" />
diff --git a/linden/indra/newview/skins/xui/ja/panel_preferences_graphics2.xml b/linden/indra/newview/skins/xui/ja/panel_preferences_graphics2.xml
deleted file mode 100644
index 9bcb946..0000000
--- a/linden/indra/newview/skins/xui/ja/panel_preferences_graphics2.xml
+++ /dev/null
@@ -1,59 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel label="グラフィック1" name="Display panel 3">
3 <text type="string" length="1" name="text">
4 シェーダー:
5 </text>
6 <check_box label="Vertex Shaderを有効ã«ã™ã‚‹" name="shaders"
7 tool_tip="ã“ã®ã‚ªãƒ—ションを無効ã«ã™ã‚‹ã¨ã‚°ãƒ©ãƒ•ィックカードドライãƒãƒ¼ã®ç¨®é¡žã«ã‚ˆã£ã¦ã¯ã‚¯ãƒ©ãƒƒã‚·ãƒ¥é˜²æ­¢ã«ãªã‚Šã¾ã™ã€‚" />
8 <check_box label="ãƒãƒ³ãƒ—マップã¨è¼ãを有効ã«ã™ã‚‹" name="bumpshiny" />
9 <check_box label="æ°´ã®æ³¢ç´‹ã‚’有効化" name="ripple" />
10 <check_box label="ã‚¢ãƒã‚¿ãƒ¼Vertexプログラム" name="avatarvp" />
11 <text type="string" length="1" name="Avatar Rendering:">
12 ã‚¢ãƒã‚¿ãƒ¼ã®æç”»ï¼š
13 </text>
14 <radio_group name="Avatar Appearance">
15 <radio_item type="string" length="1" name="Normal">
16 ノーマル
17 </radio_item>
18 <radio_item type="string" length="1" name="Bump">
19 ãƒãƒ³ãƒ—マップ
20 </radio_item>
21 <radio_item type="string" length="1" name="Cloth">
22 ãƒãƒ³ãƒ—ãƒžãƒƒãƒ—ã¨æœ
23 </radio_item>
24 </radio_group>
25 <text type="string" length="1" name="Lighting Detail:">
26 ライティング詳細:
27 </text>
28 <radio_group name="lighting detail radio">
29 <radio_item type="string" length="1" name="SunMoon">
30 å¤ªé™½ã¨æœˆã®ã¿
31 </radio_item>
32 <radio_item type="string" length="1" name="LocalLights">
33 近隣ã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒ»ãƒ©ã‚¤ãƒˆ
34 </radio_item>
35 </radio_group>
36 <text type="string" length="1" name="Terrain Detail:">
37 地形詳細:
38 </text>
39 <radio_group name="terrain detail radio">
40 <radio_item type="string" length="1" name="0">
41 低
42 </radio_item>
43 <radio_item type="string" length="1" name="2">
44 高
45 </radio_item>
46 </radio_group>
47 <text type="string" length="1" name="Object Mesh Detail:">
48 オブジェクトメッシュ:
49 </text>
50 <text type="string" length="1" name="Flexible Mesh Detail:">
51 フレキシブルメッシュ:
52 </text>
53 <text type="string" length="1" name="Tree Mesh Detail:">
54 樹木メッシュ:
55 </text>
56 <text type="string" length="1" name="Avatar Mesh Detail:">
57 ã‚¢ãƒã‚¿ãƒ¼ãƒ¡ãƒƒã‚·ãƒ¥ï¼š
58 </text>
59</panel>
diff --git a/linden/indra/newview/skins/xui/ja/panel_preferences_graphics3.xml b/linden/indra/newview/skins/xui/ja/panel_preferences_graphics3.xml
deleted file mode 100644
index 7a373e3..0000000
--- a/linden/indra/newview/skins/xui/ja/panel_preferences_graphics3.xml
+++ /dev/null
@@ -1,57 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel label="グラフィック2" name="Display panel 2">
3 <text type="string" length="1" name="Filtering:">
4 フィルタリング:
5 </text>
6 <check_box
7 label="異方的フィルタリング(有効ã«ã™ã‚‹ã¨é€Ÿåº¦ãŒä½Žä¸‹ã—ã¾ã™ï¼‰"
8 name="ani" left="160" />
9 <spinner label="ガンマ:" name="gamma" label_width="148" width="208"/>
10 <text type="string" length="1" name="(brightness, lower is brighter)" left="223">
11 ï¼ï¼ãƒ‡ãƒ•ォルト値(最も明るã„)
12 </text>
13 <spinner label="å¤œã®æ˜Žã‚‹ã•:" name="nighttime_brightness" label_width="148" width="208"/>
14 <text type="string" length="1" name="(higher is brighter, 1.0 is default)" left="223">
15 (高ã„ã»ã©æ˜Žã‚‹ã„ã€1.0ãŒãƒ‡ãƒ•ォルト)
16 </text>
17 <text type="string" length="1" name="Enable VBO:">
18 VBOを有効化:
19 </text>
20 <check_box label="OpenGL Vertex Buffer オブジェクトを有効化" name="vbo"
21 tool_tip="一部ã®OpenGLドライãƒã¯ã€ã“れを有効化ã™ã‚‹ã¨ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã™ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚" left="160"/>
22 <text type="string" length="1" name="Graphics Card Memory:">
23 グラフィックメモリ:
24 </text>
25 <radio_group name="video card memory radio" left="160">
26 <radio_item type="string" length="1" name="radio" left="15">
27 16MB
28 </radio_item>
29 <radio_item type="string" length="1" name="radio2" left="15">
30 32MB
31 </radio_item>
32 <radio_item type="string" length="1" name="radio3" left="15">
33 64MB
34 </radio_item>
35 <radio_item type="string" length="1" name="radio4" left="15">
36 128MB
37 </radio_item>
38 <radio_item type="string" length="1" name="radio5" left="15">
39 256MB
40 </radio_item>
41 <radio_item type="string" length="1" name="radio6" left="15">
42 512MB
43 </radio_item>
44 </radio_group>
45 <spinner label="霧ï¼è¦–界率:" name="fog" label_width="148" width="208"/>
46 <spinner label="最大パーティクル数:" name="particles" label_width="148" width="208"/>
47 <spinner label="æœè£…åˆæˆé™åº¦ï¼š" name="comp limit"
48 tool_tip="æœè£…ã®å¤‰æ›´ã‚’éŽåŽ»ä½•å›žã¾ã§è¡¨ç¤ºã™ã‚‹ã‹" label_width="148" width="208"/>
49 <text type="string" length="1" name="(lower is faster)" left="223" >
50 (低ã„ã»ã©é€Ÿã„)
51 </text>
52 <spinner label="デãƒãƒƒã‚°ç”¨æ¨™è­˜ç·šã®å¹…:" name="debug beacon line width" label_width="148" width="208"/>
53 <check_box
54 label="次回起動時ã«ã‚°ãƒ©ãƒ•ィック・ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚’自動検出"
55 name="probe_hardware_checkbox" left="160"
56 tool_tip="Second Lifeã¯ã€ã‚ãªãŸã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã«åŸºã¥ãã€ã„ãã¤ã‹ã®ã‚°ãƒ©ãƒ•ã‚£ãƒƒã‚¯è¨­å®šã‚’è‡ªå‹•çš„ã«æ§‹æˆã—ã¾ã™ã€‚æ–°ã—ã„ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚’インストールã—ãŸå ´åˆã¯ã€Second Lifeã«å†åº¦æ¤œçŸ¥ã•ã›ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。" />
57</panel>
diff --git a/linden/indra/newview/skins/xui/ja/panel_settings_chat.xml b/linden/indra/newview/skins/xui/ja/panel_settings_chat.xml
deleted file mode 100644
index 34a1a0d..0000000
--- a/linden/indra/newview/skins/xui/ja/panel_settings_chat.xml
+++ /dev/null
@@ -1,58 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="chat" title="会話">
3 <text>
4 ãƒãƒ£ãƒƒãƒˆã®ãƒ•ォント:
5 </text>
6 <radio_group name="chat font size">
7 <radio_item>
8 å°
9 </radio_item>
10 <radio_item>
11 中
12 </radio_item>
13 <radio_item>
14 大
15 </radio_item>
16 </radio_group>
17 <text>
18 ãƒãƒ£ãƒƒãƒˆãƒ»ã‚«ãƒ©ãƒ¼ï¼š
19 </text>
20 <color_swatch label="システム" name="system" />
21 <color_swatch label="ユーザー" name="users" />
22 <color_swatch label="オブジェクト" name="objects" />
23 <color_swatch label="å¹ã出ã—" name="background" />
24 <text>
25 ãƒãƒ£ãƒƒãƒˆãƒ»ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ï¼š
26 </text>
27 <spinner label="フェード" name="fade_chat_time" />
28 <text>
29 (秒後)
30 </text>
31 <spinner label="" name="max_chat_count" />
32 <text>
33 (行数)
34 </text>
35 <slider label="ä¸é€æ˜Žåº¦" name="console_opacity" />
36 <text>
37 ãƒãƒ£ãƒƒãƒˆãƒ»ã‚ªãƒ—ション
38 </text>
39 <check_box label="ãƒãƒ£ãƒƒãƒˆã«å…¨ç”»é¢å¹…を使用(å†èµ·å‹•後)"
40 name="chat_full_width_check" />
41 <check_box label="Enterキーを押ã—ãŸå¾Œãƒãƒ£ãƒƒãƒˆã‚’é–‰ã˜ã‚‹"
42 name="close_chat_on_return_check" />
43 <check_box label="ãƒãƒ£ãƒƒãƒˆä¸­ã¯ã€çŸ¢å°ã‚­ãƒ¼ã§ã‚¢ãƒã‚¿ãƒ¼ã‚’移動å¯èƒ½"
44 name="arrow_keys_move_avatar_check" />
45 <check_box label="ãƒãƒ£ãƒƒãƒˆã«ã‚¿ã‚¤ãƒ ã‚¹ã‚¿ãƒ³ãƒ—を表示"
46 name="show_timestamps_check" />
47 <text>
48 ãƒãƒ£ãƒƒãƒˆã®å¹ã出ã—:
49 </text>
50 <check_box label="ãƒãƒ£ãƒƒãƒˆã®å¹ã出ã—を表示" name="bubble_text_chat" />
51 <slider label="ä¸é€æ˜Žåº¦" name="bubble_chat_opacity" />
52 <text>
53 スクリプト・エラー:
54 </text>
55 <check_box label="スクリプト・エラーã¨è­¦å‘Šã‚’ãƒãƒ£ãƒƒãƒˆåŒæ§˜ã«è¡¨ç¤º"
56 name="script_errors_as_chat" />
57 <color_swatch label="色" name="script_error" />
58</panel>
diff --git a/linden/indra/newview/skins/xui/ja/panel_settings_im.xml b/linden/indra/newview/skins/xui/ja/panel_settings_im.xml
deleted file mode 100644
index 39b9b5e..0000000
--- a/linden/indra/newview/skins/xui/ja/panel_settings_im.xml
+++ /dev/null
@@ -1,13 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="im" title="IM">
3 <text>
4 IMオプション:
5 </text>
6 <check_box label="IMã‚’é›»å­ãƒ¡ãƒ¼ãƒ«ã¸é€ä¿¡" name="send_im_to_email"
7 tool_tip="secondlife.com上ã®é›»å­ãƒ¡ãƒ¼ãƒ«ãƒ»ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’変更" />
8 <check_box label="ãƒãƒ£ãƒƒãƒˆå±¥æ­´ã«IMã‚’å«ã‚ã‚‹" name="include_im_in_chat_history" />
9 <check_box label="IMã«ã‚¿ã‚¤ãƒ ã‚¹ã‚¿ãƒ³ãƒ—を表示" name="show_timestamps_check" />
10 <text>
11 ビジー・モード応答:
12 </text>
13</panel>
diff --git a/linden/indra/newview/skins/xui/ja/panel_settings_msgbox.xml b/linden/indra/newview/skins/xui/ja/panel_settings_msgbox.xml
deleted file mode 100644
index b4c481d..0000000
--- a/linden/indra/newview/skins/xui/ja/panel_settings_msgbox.xml
+++ /dev/null
@@ -1,12 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel label="ãƒãƒƒãƒ—アップ" name="popups" title="ãƒãƒƒãƒ—アップ">
3 <text>
4 ãƒãƒƒãƒ—アップを表示ã—ãªã„:
5 </text>
6 <button label="ã“れã¯è¡¨ç¤ºã™ã‚‹" name="enable_popup" />
7 <text>
8 ãƒãƒƒãƒ—アップを表示:
9 </text>
10 <button label="「次回表示ã€ãƒ€ã‚¤ã‚¢ãƒ­ã‚°ãƒªã‚»ãƒƒãƒˆ..."
11 name="reset_dialogs_btn" />
12</panel>
diff --git a/linden/indra/newview/skins/xui/ja/panel_settings_network.xml b/linden/indra/newview/skins/xui/ja/panel_settings_network.xml
deleted file mode 100644
index 65fe03d..0000000
--- a/linden/indra/newview/skins/xui/ja/panel_settings_network.xml
+++ /dev/null
@@ -1,58 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="network" title="ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯">
3 <text>
4 最大帯域幅:
5 </text>
6 <slider label="" name="max_bandwidth" />
7 <text>
8 Kbps
9 </text>
10 <text>
11 ディスク・キャッシュã®ã‚µã‚¤ã‚ºï¼š
12 </text>
13 <radio_group name="disk cache">
14 <radio_item>
15 50MB
16 </radio_item>
17 <radio_item>
18 200MB
19 </radio_item>
20 <radio_item>
21 500MB
22 </radio_item>
23 <radio_item>
24 100MB
25 </radio_item>
26 </radio_group>
27 <button label="クリア" name="clear_cache" />
28 <text>
29 プロキシー構æˆï¼š
30 </text>
31 <check_box label="プロキシを使用" name="proxy_enabled"
32 tool_tip="ãƒ—ãƒ­ã‚­ã‚·ãƒ¼ã®æ§‹æˆã‚’指定" />
33 <text>
34 プロキシー:
35 </text>
36 <line_editor name="proxy_address"
37 tool_tip="使用ã™ã‚‹ãƒ—ロキシã®åå‰ã¾ãŸã¯IPアドレス" />
38 <text>
39 ãƒãƒ¼ãƒˆï¼š
40 </text>
41 <line_editor name="proxy_port" tool_tip="使用ã™ã‚‹ãƒ—ロキシã®ãƒãƒ¼ãƒˆç•ªå·" />
42 <text>
43 é´ä¸‹ï¼š
44 </text>
45 <radio_group name="socks_4_5">
46 <radio_item>
47 é´ä¸‹v4
48 </radio_item>
49 <radio_item>
50 é´ä¸‹v5
51 </radio_item>
52 </radio_group>
53 <text>
54 プロキシーãŒã‚りã¾ã›ã‚“:
55 </text>
56 <line_editor name="proxy_exclusions"
57 tool_tip="プロキシを使用ã—ãªã„åå‰ã¾ãŸã¯IPアドレス" />
58</panel>
diff --git a/linden/indra/newview/skins/xui/ja/panel_settings_web.xml b/linden/indra/newview/skins/xui/ja/panel_settings_web.xml
deleted file mode 100644
index 35ea206..0000000
--- a/linden/indra/newview/skins/xui/ja/panel_settings_web.xml
+++ /dev/null
@@ -1,54 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="web" title="ウェブ">
3 <check_box
4 label="外部ã®ã‚¦ã‚§ãƒ–・ブラウザー(Firefox, Safari, Internet Explorer)を使用"
5 name="external_browser_check"
6 tool_tip="ヘルプã€ã‚¦ã‚§ãƒ–リンクãªã©ã«ã€å¤–部ã®ã‚¦ã‚§ãƒ–・ブラウザーを使用。\nフルスクリーン起動時ã«ã¯æŽ¨å¥¨ã•れãªã„。" />
7 <text>
8 ブラウザーã®ãƒ›ãƒ¼ãƒ ãƒ»ãƒšãƒ¼ã‚¸ï¼š
9 </text>
10 <line_editor name="home_page"
11 tool_tip="åˆã‚ã¦Second Lifeブラウザーを開ããŸã‚ã«è¨ªã‚Œã‚‹ã‚¦ã‚§ãƒ–・ページ" />
12 <text>
13 プロキシー構æˆï¼š
14 </text>
15 <check_box label="内部ウェブ・ブラウザーã«ãƒ—ロキシを使用"
16 name="proxy_enabled"
17 tool_tip="内蔵ブラウザー用ã®ãƒ—ロキシー構æˆã‚’指定" />
18 <text>
19 プロキシー:
20 </text>
21 <line_editor name="proxy_address"
22 tool_tip="使用ã™ã‚‹ãƒ—ロキシã®åå‰ã¾ãŸã¯IPアドレス" />
23 <text>
24 ãƒãƒ¼ãƒˆï¼š
25 </text>
26 <line_editor name="proxy_port" tool_tip="使用ã™ã‚‹ãƒ—ロキシã®ãƒãƒ¼ãƒˆç•ªå·" />
27 <text>
28 é´ä¸‹ï¼š
29 </text>
30 <radio_group name="socks_4_5">
31 <radio_item>
32 é´ä¸‹v4
33 </radio_item>
34 <radio_item>
35 é´ä¸‹v5
36 </radio_item>
37 </radio_group>
38 <text>
39 次ã«å¯¾å¿œã™ã‚‹ãƒ—ロキシーãŒã‚りã¾ã›ã‚“:
40 </text>
41 <line_editor name="proxy_exclusions"
42 tool_tip="プロキシを使用ã—ãªã„åå‰ã¾ãŸã¯IPアドレス" />
43 <check_box
44 label="オブジェクトã«é–¢ã™ã‚‹ã‚¦ã‚§ãƒ–・ページを表示(実験中ã€å†èµ·å‹•è¦ï¼‰"
45 name="web_pages_on_prims_check" />
46 <text>
47 信用ã§ãるサイト:
48(ログインã—ã¦è¡¨ç¤ºã™ã‚‹)
49 </text>
50 <button label="追加" name="add_trusted" />
51 <line_editor name="trusted_site_entry"
52 tool_tip="ã“ã®ã‚µã‚¤ãƒˆã‚’ä¿¡é ¼ã§ãるサイトã®ãƒªã‚¹ãƒˆã«è¿½åŠ ã™ã‚‹ã€‚" />
53 <button label="削除" name="rem_trusted" />
54</panel>
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 4e26137..fa646a7 100644
--- a/linden/indra/newview/skins/xui/ja/panel_speaker_controls.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_speaker_controls.xml
@@ -3,10 +3,12 @@
3 <string name="moderator_label"> 3 <string name="moderator_label">
4 (モデレータ) 4 (モデレータ)
5 </string> 5 </string>
6 <layout_stack name=""> 6 <layout_stack name="panels">
7 <layout_panel name="moderation_mode_panel"> 7 <layout_panel name="moderation_mode_panel">
8 <combo_box name="moderation_mode"> 8 <combo_box name="moderation_mode">
9 モデレート済ã¿ãƒœã‚¤ã‚¹ 9 <combo_item name="ModeratedVoice" value="moderated">
10 モデレート済ã¿ãƒœã‚¤ã‚¹
11 </combo_item>
10 </combo_box> 12 </combo_box>
11 </layout_panel> 13 </layout_panel>
12 <layout_panel name="moderate_chat_panel"> 14 <layout_panel name="moderate_chat_panel">
diff --git a/linden/indra/newview/skins/xui/ja/panel_toolbar.xml b/linden/indra/newview/skins/xui/ja/panel_toolbar.xml
index 9f21fa1..276ec62 100644
--- a/linden/indra/newview/skins/xui/ja/panel_toolbar.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_toolbar.xml
@@ -1,10 +1,9 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="toolbar"> 2<panel name="toolbar">
3 <string name="Redock Windows">ウィンドウをå†ç½®ã™ã‚‹</string>
4 <layout_stack name="toolbar_stack">
3 <button label="IM" name="im_btn" 5 <button label="IM" name="im_btn"
4 tool_tip="フレンドã¨ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ãƒˆãƒ»ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸" /> 6 tool_tip="フレンドã¨ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ãƒˆãƒ»ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸" />
5 <string name="Redock Windows">
6 ウィンドウをå†ç½®ã™ã‚‹
7 </string>
8 <button label="コミュニケート" name="communicate_btn" 7 <button label="コミュニケート" name="communicate_btn"
9 tool_tip="フレンドやグループã¨ã‚³ãƒŸãƒ¥ã‚±ãƒ¼ãƒˆã€‚" /> 8 tool_tip="フレンドやグループã¨ã‚³ãƒŸãƒ¥ã‚±ãƒ¼ãƒˆã€‚" />
10 <button label="" name="chat_btn" 9 <button label="" name="chat_btn"
@@ -23,4 +22,5 @@
23 <button label="地図" name="map_btn" tool_tip="世界地図。 (Ctrl+M)" /> 22 <button label="地図" name="map_btn" tool_tip="世界地図。 (Ctrl+M)" />
24 <button label="æŒã¡ç‰©" name="inventory_btn" 23 <button label="æŒã¡ç‰©" name="inventory_btn"
25 tool_tip="ã‚ãªãŸã®ã‚¢ã‚¤ãƒ†ãƒ ã€‚ (Ctrl-I)" /> 24 tool_tip="ã‚ãªãŸã®ã‚¢ã‚¤ãƒ†ãƒ ã€‚ (Ctrl-I)" />
25 </layout_stack>
26</panel> 26</panel>
diff --git a/linden/indra/newview/skins/xui/ko/floater_about_land.xml b/linden/indra/newview/skins/xui/ko/floater_about_land.xml
index 772b2eb..095ad9d 100644
--- a/linden/indra/newview/skins/xui/ko/floater_about_land.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_about_land.xml
@@ -468,9 +468,12 @@
468 </text> 468 </text>
469 <button label="추가" label_selected="추가" name="add_allowed" /> 469 <button label="추가" label_selected="추가" name="add_allowed" />
470 <button label="제거" label_selected="제거" name="remove_allowed" /> 470 <button label="제거" label_selected="제거" name="remove_allowed" />
471 <check_box label="차단" name="AccessCheck"> 471 <check_box label="차단" name="BanCheck">
472 ì¶œìž…ê¸ˆì§€ëœ ì£¼ë¯¼ 472 ì¶œìž…ê¸ˆì§€ëœ ì£¼ë¯¼
473 </check_box> 473 </check_box>
474 <check_box label="í•­ìƒ í—ˆìš©" name="AccessCheck">
475 í—ˆìš©ëœ ì£¼ë¯¼
476 </check_box>
474 <name_list name="AccessList" tool_tip="([LISTED] 목ë¡ì— 있ìŒ, [MAX] 최대)"> 477 <name_list name="AccessList" tool_tip="([LISTED] 목ë¡ì— 있ìŒ, [MAX] 최대)">
475 <column label="í—ˆìš©ëœ ì£¼ë¯¼" name="name" /> 478 <column label="í—ˆìš©ëœ ì£¼ë¯¼" name="name" />
476 </name_list> 479 </name_list>
diff --git a/linden/indra/newview/skins/xui/ko/floater_critical.xml b/linden/indra/newview/skins/xui/ko/floater_critical.xml
index e5ce706..95a8157 100644
--- a/linden/indra/newview/skins/xui/ko/floater_critical.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_critical.xml
@@ -2,9 +2,6 @@
2<floater name="modal container" title=" "> 2<floater name="modal container" title=" ">
3 <button label="계ì†" label_selected="계ì†" name="Continue" /> 3 <button label="계ì†" label_selected="계ì†" name="Continue" />
4 <button label="취소" label_selected="취소" name="Cancel" /> 4 <button label="취소" label_selected="취소" name="Cancel" />
5 <text name="tos_title">
6 중요 메시지
7 </text>
8 <text name="tos_heading"> 5 <text name="tos_heading">
9 ë‹¤ìŒ ë©”ì‹œì§€ë¥¼ 잘 ì½ìœ¼ì„¸ìš”. 6 ë‹¤ìŒ ë©”ì‹œì§€ë¥¼ 잘 ì½ìœ¼ì„¸ìš”.
10 </text> 7 </text>
diff --git a/linden/indra/newview/skins/xui/ko/floater_friends.xml b/linden/indra/newview/skins/xui/ko/floater_friends.xml
deleted file mode 100644
index b1fd36c..0000000
--- a/linden/indra/newview/skins/xui/ko/floater_friends.xml
+++ /dev/null
@@ -1,36 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="friends" title="친구">
3 <scroll_list name="friend_list"
4 tool_tip="ë‹¤ìˆ˜ì˜ ì¹œêµ¬ë¥¼ ì„ íƒí•˜ë ¤ë©´ ì„ íƒí•˜ëŠ” ë™ì•ˆ shift나 Ctrl를 누르십시오.">
5 <column label="ì´ë¦„" name="friend_name" />
6 </scroll_list>
7 <panel name="rights_container">
8 <text name="friend_name_label">
9 친구를 ì„ íƒí•˜ì—¬ 권한 변경
10 </text>
11 <check_box label="ë‚´ 온ë¼ì¸ ìƒíƒœë¥¼ 확ì¸í•  수 있습니다."
12 name="online_status_cb"
13 tool_tip="친구가 친구 목ë¡ì´ë‚˜ 통화 카드ì—서 ë‚´ 온ë¼ì¸ ìƒíƒœë¥¼ í™•ì¸ ê°€ëŠ¥í•œì§€ 여부를 설정합니다." />
14 <check_box label="ì§€ë„ì—서 ë‚´ 위치를 확ì¸í•  수 있습니다."
15 name="map_status_cb"
16 tool_tip="친구가 ì§€ë„ì—서 ë‚´ 위치를 í™•ì¸ ê°€ëŠ¥í•œì§€ 여부를 설정합니다." />
17 <check_box label="ë‚´ 오브ì íŠ¸ë¥¼ 수정할 수 있습니다." name="modify_status_cb"
18 tool_tip="친구가 ë‚´ 오브ì íŠ¸ë¥¼ 수정할 수 있는지 여부를 설정합니다." />
19 <text name="process_rights_label">
20 권한 변경 중?
21 </text>
22 </panel>
23 <button label="메신저/전화걸기" name="im_btn" tool_tip="메신저 세션 열기" />
24 <button label="텔레í¬íЏ..." name="offer_teleport_btn"
25 tool_tip="친구ì—게 ë‚´ 현재 위치로 텔레í¬íŠ¸ë¥¼ 제공함" />
26 <button label="추가..." name="add_btn" tool_tip="주민ì—게 ìš°ì • 제공" />
27 <button label="프로필" name="profile_btn"
28 tool_tip="그림, 그룹 ë° ê¸°íƒ€ ì •ë³´ 표시" />
29 <button label="지불…" name="pay_btn"
30 tool_tip="친구ì—게 린든 달러(L$) 주기" />
31 <button label="제거…" name="remove_btn"
32 tool_tip="ì´ ì‚¬ëžŒì„ ë‚´ 친구 목ë¡ì—서 ì‚­ì œ" />
33 <text name="Multiple">
34 친구들...
35 </text>
36</floater>
diff --git a/linden/indra/newview/skins/xui/ko/floater_groups.xml b/linden/indra/newview/skins/xui/ko/floater_groups.xml
deleted file mode 100644
index a1e3fee..0000000
--- a/linden/indra/newview/skins/xui/ko/floater_groups.xml
+++ /dev/null
@@ -1,16 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="groups" title="그룹">
3 <text name="groupdesc">
4 현재 활ë™ì¤‘ì¸ ê·¸ë£¹ì€ êµµì€ ê¸€ì”¨ë¡œ 표시ë©ë‹ˆë‹¤.
5 </text>
6 <text name="groupcount">
7 [COUNT]ê°œì˜ ê·¸ë£¹(최대 [MAX])ì— ì†í•´ 있습니다.
8 </text>
9 <button label="메신저/전화걸기" name="IM" tool_tip="메신저 세션 열기" />
10 <button label="활성화" label_selected="활성화" name="Activate" />
11 <button label="ì •ë³´" label_selected="ì •ë³´" name="Info" />
12 <button label="탈퇴" label_selected="탈퇴" name="Leave" />
13 <button label="만들기" label_selected="만들기" name="Create" />
14 <button label="검색…" label_selected="검색…" name="Search..." />
15 <button label="닫기" label_selected="닫기" name="Close" />
16</floater>
diff --git a/linden/indra/newview/skins/xui/ko/floater_instant_message_ad_hoc.xml b/linden/indra/newview/skins/xui/ko/floater_instant_message_ad_hoc.xml
index 5a13aea..dc7f5af 100644
--- a/linden/indra/newview/skins/xui/ko/floater_instant_message_ad_hoc.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_instant_message_ad_hoc.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<floater label="(알 수 ì—†ìŒ)" name="im_floater" title="(알 수 ì—†ìŒ)"> 2<floater label="(알 수 ì—†ìŒ)" name="im_floater" title="(알 수 ì—†ìŒ)">
3 <layout_stack name=""> 3 <layout_stack name="panels">
4 <layout_panel name="im_contents_panel"> 4 <layout_panel name="im_contents_panel">
5 <button label="ì „í™”" name="start_call_btn" /> 5 <button label="ì „í™”" name="start_call_btn" />
6 <button label="전화 종료" name="end_call_btn" /> 6 <button label="전화 종료" name="end_call_btn" />
diff --git a/linden/indra/newview/skins/xui/ko/floater_instant_message_group.xml b/linden/indra/newview/skins/xui/ko/floater_instant_message_group.xml
index a06c626..891613c 100644
--- a/linden/indra/newview/skins/xui/ko/floater_instant_message_group.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_instant_message_group.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<floater label="(알 수 ì—†ìŒ)" name="im_floater" title="(알 수 ì—†ìŒ)"> 2<floater label="(알 수 ì—†ìŒ)" name="im_floater" title="(알 수 ì—†ìŒ)">
3 <layout_stack name=""> 3 <layout_stack name="panels">
4 <layout_panel name="im_contents_panel"> 4 <layout_panel name="im_contents_panel">
5 <button label="그룹 정보" name="group_info_btn" /> 5 <button label="그룹 정보" name="group_info_btn" />
6 <button label="ì „í™”ì— ì°¸ì—¬í•˜ê¸°" name="start_call_btn" /> 6 <button label="ì „í™”ì— ì°¸ì—¬í•˜ê¸°" name="start_call_btn" />
diff --git a/linden/indra/newview/skins/xui/ko/floater_joystick.xml b/linden/indra/newview/skins/xui/ko/floater_joystick.xml
index 14a5883..6207687 100644
--- a/linden/indra/newview/skins/xui/ko/floater_joystick.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_joystick.xml
@@ -1,96 +1,3 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="build options floater" title="Flycam 옵션"> 2<floater name="Joystick">
3 <text> 3</floater> \ No newline at end of file
4 Xì¶•
5 </text>
6 <text>
7 Yì¶•
8 </text>
9 <text>
10 Zì¶•
11 </text>
12 <spinner label="매핑" />
13 <spinner label="매핑" />
14 <spinner label="매핑" />
15 <spinner label="í¬ê¸°" />
16 <spinner label="í¬ê¸°" />
17 <spinner label="í¬ê¸°" />
18 <spinner label="사ê°ì§€ëŒ€" />
19 <spinner label="사ê°ì§€ëŒ€" />
20 <spinner label="사ê°ì§€ëŒ€" />
21 <text>
22 ìš”
23 </text>
24 <text>
25 피치
26 </text>
27 <text>
28 ì—­í• 
29 </text>
30 <spinner label="매핑" />
31 <spinner label="매핑" />
32 <spinner label="매핑" />
33 <spinner label="í¬ê¸°" />
34 <spinner label="í¬ê¸°" />
35 <spinner label="í¬ê¸°" />
36 <spinner label="사ê°ì§€ëŒ€" />
37 <spinner label="사ê°ì§€ëŒ€" />
38 <spinner label="사ê°ì§€ëŒ€" />
39 <text name="x-axis">
40 Xì¶•
41 </text>
42 <text name="y-axis">
43 Yì¶•
44 </text>
45 <text name="z-axis">
46 Zì¶•
47 </text>
48 <spinner label="매핑" name="FlycamAxis1" />
49 <spinner label="매핑" name="FlycamAxis2" />
50 <spinner label="매핑" name="FlycamAxis0" />
51 <spinner label="í¬ê¸°" name="FlycamAxisScale1" />
52 <spinner label="í¬ê¸°" name="FlycamAxisScale2" />
53 <spinner label="í¬ê¸°" name="FlycamAxisScale0" />
54 <spinner label="사ê°ì§€ëŒ€" name="FlycamAxisDeadZone1" />
55 <spinner label="사ê°ì§€ëŒ€" name="FlycamAxisDeadZone2" />
56 <spinner label="사ê°ì§€ëŒ€" name="FlycamAxisDeadZone0" />
57 <text name="yaw">
58 ìš”
59 </text>
60 <text name="pitch">
61 피치
62 </text>
63 <text name="roll">
64 ì—­í• 
65 </text>
66 <spinner label="매핑" name="FlycamAxis5" />
67 <spinner label="매핑" name="FlycamAxis4" />
68 <spinner label="매핑" name="FlycamAxis3" />
69 <spinner label="í¬ê¸°" name="FlycamAxisScale5" />
70 <spinner label="í¬ê¸°" name="FlycamAxisScale4" />
71 <spinner label="í¬ê¸°" name="FlycamAxisScale3" />
72 <spinner label="사ê°ì§€ëŒ€" name="FlycamAxisDeadZone5" />
73 <spinner label="사ê°ì§€ëŒ€" name="FlycamAxisDeadZone4" />
74 <spinner label="사ê°ì§€ëŒ€" name="FlycamAxisDeadZone3" />
75 <text name="ZoomLabel">
76 확대/축소
77 </text>
78 <spinner label="매핑" />
79 <spinner label="í¬ê¸°" />
80 <spinner label="사ê°ì§€ëŒ€" />
81 <check_box label="ì§ì ‘ 확대/축소" />
82 <spinner label="매핑" name="FlycamAxis6" />
83 <spinner label="í¬ê¸°" name="FlycamAxisScale6" />
84 <spinner label="사ê°ì§€ëŒ€" name="FlycamAxisDeadZone6" />
85 <slider label="깃털 효과" name="FlycamFeathering" />
86 <check_box label="레벨 ìžë™ 수정" />
87 <check_box label="3D 커서" />
88 <check_box label="레벨 ìžë™ 수정" name="FlycamAutoLeveling" />
89 <check_box label="3D 커서" name="FlycamAbsolute" />
90 <text name="JoystickMonitor">
91 ì¡°ì´ìŠ¤í‹± 검사
92 </text>
93 <text name="Axis">
94 ì¶• [NUM]
95 </text>
96</floater>
diff --git a/linden/indra/newview/skins/xui/ko/floater_preview_new_landmark.xml b/linden/indra/newview/skins/xui/ko/floater_preview_new_landmark.xml
deleted file mode 100644
index 5256ce7..0000000
--- a/linden/indra/newview/skins/xui/ko/floater_preview_new_landmark.xml
+++ /dev/null
@@ -1,9 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="landmark_preview">
3 <button label="텔리í¬íЏ" label_selected="" name="Teleport btn" />
4 <button label="ì§€ë„ì— í‘œì‹œ" label_selected="" name="Show on Map btn" />
5 <button label="취소" label_selected="" name="Discard btn" />
6 <text type="string" length="1" name="desc txt">
7 설명:
8 </text>
9</floater>
diff --git a/linden/indra/newview/skins/xui/ko/floater_rate.xml b/linden/indra/newview/skins/xui/ko/floater_rate.xml
deleted file mode 100644
index 39aebc5..0000000
--- a/linden/indra/newview/skins/xui/ko/floater_rate.xml
+++ /dev/null
@@ -1,44 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="rate" title="Jeska Lindenì˜ ìˆœìœ„">
3 <radio_group name="behavior">
4 <radio_item type="string" length="1" name="Positive">
5 양수
6 </radio_item>
7 <radio_item type="string" length="1" name="No Rating">
8 등급 ì—†ìŒ
9 </radio_item>
10 </radio_group>
11 <radio_group name="appearance">
12 <radio_item type="string" length="1" name="Positive">
13 양수
14 </radio_item>
15 <radio_item type="string" length="1" name="No Rating">
16 등급 ì—†ìŒ
17 </radio_item>
18 </radio_group>
19 <radio_group name="building">
20 <radio_item type="string" length="1" name="Positive">
21 양수
22 </radio_item>
23 <radio_item type="string" length="1" name="No Rating">
24 등급 ì—†ìŒ
25 </radio_item>
26 </radio_group>
27 <button label="확ì¸" label_selected="확ì¸" name="OK" />
28 <button label="취소" label_selected="취소" name="Cancel" />
29 <text type="string" length="1" name="Overall behavior:">
30 ì „ì²´ì  í–‰ë™:
31 </text>
32 <text type="string" length="1" name="Skill at appearance (clothing and attachments):">
33 꾸미기를 잘 함(ì˜ë³µ ë° ì°©ìš©ë¬¼):
34 </text>
35 <text type="string" length="1" name="Skill at building:">
36 ê±´ì¶•ì„ ìž˜ 함:
37 </text>
38 <text type="string" length="1" name="Message:">
39 메시지:
40 </text>
41 <text type="string" length="1" name="cost">
42 비용: 등급 변경 ë¹„ìš©ì€ L$[COST]입니다. ì´ ë¹„ìš©: L$[TOTAL]입니다.
43 </text>
44</floater>
diff --git a/linden/indra/newview/skins/xui/ko/menu_viewer.xml b/linden/indra/newview/skins/xui/ko/menu_viewer.xml
index d8e85c8..417b1f4 100644
--- a/linden/indra/newview/skins/xui/ko/menu_viewer.xml
+++ b/linden/indra/newview/skins/xui/ko/menu_viewer.xml
@@ -15,7 +15,6 @@
15 <menu_item_call label="스냅샷 미리보기" name="Take Snapshot" /> 15 <menu_item_call label="스냅샷 미리보기" name="Take Snapshot" />
16 <menu_item_call label="스냅샷 ì°ê¸°" name="Snapshot to Disk" /> 16 <menu_item_call label="스냅샷 ì°ê¸°" name="Snapshot to Disk" />
17 <menu_item_separator label="-----------" name="separator4" /> 17 <menu_item_separator label="-----------" name="separator4" />
18 <menu_item_call label="ë™ì˜ìƒ ì°ê¸°" name="Start/Stop Movie to Disk" />
19 <menu label="ì°½ í¬ê¸° ì¡°ì ˆ" name="Set Window Size"> 18 <menu label="ì°½ í¬ê¸° ì¡°ì ˆ" name="Set Window Size">
20 <menu_item_call label="320x240" name="320x240" /> 19 <menu_item_call label="320x240" name="320x240" />
21 <menu_item_call label="640x480" name="640x480" /> 20 <menu_item_call label="640x480" name="640x480" />
@@ -141,6 +140,7 @@
141 <menu_item_separator label="-----------" name="separator3" /> 140 <menu_item_separator label="-----------" name="separator3" />
142 <menu_item_call label="ìžë¦¬ë¹„움 설정" name="Set Away" /> 141 <menu_item_call label="ìžë¦¬ë¹„움 설정" name="Set Away" />
143 <menu_item_call label="다른 용무중 설정" name="Set Busy" /> 142 <menu_item_call label="다른 용무중 설정" name="Set Busy" />
143 <menu_item_call label="모든 애니메ì´ì…˜ 중지" name="Stop All Animations" />
144 <menu_item_separator label="-----------" name="separator4" /> 144 <menu_item_separator label="-----------" name="separator4" />
145 <menu_item_call label="계정 기ë¡" name="Account History..." /> 145 <menu_item_call label="계정 기ë¡" name="Account History..." />
146 <menu_item_call label="내 계정 관리" name="Manage My Account..." /> 146 <menu_item_call label="내 계정 관리" name="Manage My Account..." />
@@ -197,7 +197,6 @@
197 <menu_item_call label="ì—°ê²°" name="Link" /> 197 <menu_item_call label="ì—°ê²°" name="Link" />
198 <menu_item_call label="연결 해제" name="Unlink" /> 198 <menu_item_call label="연결 해제" name="Unlink" />
199 <menu_item_separator label="-----------" name="separator4" /> 199 <menu_item_separator label="-----------" name="separator4" />
200 <menu_item_call label="모든 애니메ì´ì…˜ 중지" name="Stop All Animations" />
201 <menu_item_separator label="-----------" name="separator5" /> 200 <menu_item_separator label="-----------" name="separator5" />
202 <menu_item_call label="ì„ íƒ ì˜¤ë¸Œì íŠ¸ì— ì´ˆì  ë§žì¶”ê¸°" name="Focus on Selection" /> 201 <menu_item_call label="ì„ íƒ ì˜¤ë¸Œì íŠ¸ì— ì´ˆì  ë§žì¶”ê¸°" name="Focus on Selection" />
203 <menu_item_call label="ì„ íƒ ì˜ì—­ 확대/축소" name="Zoom to Selection" /> 202 <menu_item_call label="ì„ íƒ ì˜ì—­ 확대/축소" name="Zoom to Selection" />
@@ -247,6 +246,16 @@
247 <menu_item_call label="밀기, 타격 등 ê°ì§€" name="Bumps, Pushes &amp;amp; Hits..." /> 246 <menu_item_call label="밀기, 타격 등 ê°ì§€" name="Bumps, Pushes &amp;amp; Hits..." />
248 <menu_item_call label="지연 미터" name="Lag Meter" /> 247 <menu_item_call label="지연 미터" name="Lag Meter" />
249 <menu_item_separator label="-----------" name="separator5" /> 248 <menu_item_separator label="-----------" name="separator5" />
249 <menu label="버그 신고" name="Bug Reporting">
250 <menu_item_call label="ì¼ë°˜ 문제 ì¶”ì í•˜ê¸°" name="Public Issue Tracker..." />
251 <menu_item_call label="ì¼ë°˜ 문제 ì¶”ì í•˜ê¸° ë„움ë§" name="Publc Issue Tracker Help..." />
252 <menu_item_call label="버그 보고 101" name="Bug Reporing 101..." />
253 <menu_item_call label="보안 문제" name="Security Issues..." />
254 <menu_item_call label="QA 위키" name="QA Wiki..." />
255 <menu_item_separator label="-----------" name="separator7" />
256 <menu_item_call label="버그 신고" name="Report Bug..." />
257 </menu>
258
250 <menu_item_call label="출시 정보" name="Release Notes..." /> 259 <menu_item_call label="출시 정보" name="Release Notes..." />
251 <menu_item_separator label="-----------" name="separator6" /> 260 <menu_item_separator label="-----------" name="separator6" />
252 <menu_item_call label="세컨드ë¼ì´í”„ ì •ë³´" name="About Second Life..." /> 261 <menu_item_call label="세컨드ë¼ì´í”„ ì •ë³´" name="About Second Life..." />
diff --git a/linden/indra/newview/skins/xui/ko/panel_music_remote.xml b/linden/indra/newview/skins/xui/ko/panel_music_remote.xml
deleted file mode 100644
index fc5dfbf..0000000
--- a/linden/indra/newview/skins/xui/ko/panel_music_remote.xml
+++ /dev/null
@@ -1,16 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="music_remote">
3 <text type="string" length="6" name="text">
4 ìŒì•…
5 </text>
6 <volume_slider name="volume_slider"
7 tool_tip="ì´ ìŠ¬ë¼ì´ë”를 사용하여 ë³¼ë¥¨ì„ ë³€ê²½" />
8 <button label="" label_selected="" name="stop_btn" tool_tip="미디어 중지" />
9 <button label="" label_selected="" name="play_btn"
10 tool_tip="미디어 스트림 재ìƒ" />
11 <button label="" label_selected="" name="pause_btn"
12 tool_tip="미디어 스트림 ì¼ì‹œ ì •ì§€" />
13 <button name="music_stop" tool_tip="미디어 중지" />
14 <button name="music_play" tool_tip="미디어 스트림 재ìƒ" />
15 <button name="music_pause" tool_tip="미디어 스트림 ì¼ì‹œ ì •ì§€" />
16</panel>
diff --git a/linden/indra/newview/skins/xui/ko/panel_overlaybar.xml b/linden/indra/newview/skins/xui/ko/panel_overlaybar.xml
index dc89ec5..bb83a6a 100644
--- a/linden/indra/newview/skins/xui/ko/panel_overlaybar.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_overlaybar.xml
@@ -12,8 +12,8 @@
12 <button label="서기" label_selected="서기" name="Stand Up" 12 <button label="서기" label_selected="서기" name="Stand Up"
13 tool_tip="ì¼ì–´ì„œë ¤ë©´ 여기를 í´ë¦­í•˜ì‹­ì‹œì˜¤." /> 13 tool_tip="ì¼ì–´ì„œë ¤ë©´ 여기를 í´ë¦­í•˜ì‹­ì‹œì˜¤." />
14 <layout_stack name="overlay_layout_panel"> 14 <layout_stack name="overlay_layout_panel">
15 <layout_panel name=""> 15 <layout_panel name="main_panel">
16 <layout_stack name=""> 16 <layout_stack name="chatbar_and_buttons">
17 <layout_panel name="state_buttons"> 17 <layout_panel name="state_buttons">
18 <button label="메신저 수령" label_selected="메신저 수령" name="IM Received" 18 <button label="메신저 수령" label_selected="메신저 수령" name="IM Received"
19 tool_tip="ë„착한 메시지가 있습니다. 메시지를 í™•ì¸ í•˜ì‹œë ¤ë©´ 메신저 ë²„íŠ¼ì„ í´ë¦­í•˜ì‹­ì‹œì˜¤." /> 19 tool_tip="ë„착한 메시지가 있습니다. 메시지를 í™•ì¸ í•˜ì‹œë ¤ë©´ 메신저 ë²„íŠ¼ì„ í´ë¦­í•˜ì‹­ì‹œì˜¤." />
diff --git a/linden/indra/newview/skins/xui/ko/panel_preferences_graphics2.xml b/linden/indra/newview/skins/xui/ko/panel_preferences_graphics2.xml
deleted file mode 100644
index 8610748..0000000
--- a/linden/indra/newview/skins/xui/ko/panel_preferences_graphics2.xml
+++ /dev/null
@@ -1,59 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel label="그래픽 디테ì¼" name="Display panel 3">
3 <text type="string" length="1" name="text">
4 ì‰ì´ë”:
5 </text>
6 <check_box label="Vertex Shaders 사용함" name="shaders"
7 tool_tip="ì´ ì˜µì…˜ì„ ì‚¬ìš©í•˜ì§€ 않으면 ì¼ë¶€ 그래픽 카드 드ë¼ì´ë²„ì— ì˜¤ë¥˜ê°€ ë°œìƒí•  수 있습니다." />
8 <check_box label="범프매핑 ë° ê´‘íƒ ë³´ì´ê¸°" name="bumpshiny" />
9 <check_box label="잔물결 ë³´ì´ê¸°" name="ripple" />
10 <check_box label="아바타 버í…스 프로그램" name="avatarvp" />
11 <text type="string" length="1" name="Avatar Rendering:">
12 아바타 ë Œë”ë§:
13 </text>
14 <radio_group name="Avatar Appearance">
15 <radio_item type="string" length="1" name="Normal">
16 ì¼ë°˜
17 </radio_item>
18 <radio_item type="string" length="1" name="Bump">
19 범프 맵
20 </radio_item>
21 <radio_item type="string" length="1" name="Cloth">
22 범프 ë§µ &amp; 옷ê°
23 </radio_item>
24 </radio_group>
25 <text type="string" length="1" name="Lighting Detail:">
26 조명 세부 사항:
27 </text>
28 <radio_group name="lighting detail radio">
29 <radio_item type="string" length="1" name="SunMoon">
30 ìžì—°ê´‘ë§Œ 표시
31 </radio_item>
32 <radio_item type="string" length="1" name="LocalLights">
33 근접 ê´‘ì› í‘œì‹œ
34 </radio_item>
35 </radio_group>
36 <text type="string" length="1" name="Terrain Detail:">
37 지형 세부 사항:
38 </text>
39 <radio_group name="terrain detail radio">
40 <radio_item type="string" length="1" name="0">
41 ë‚®ìŒ
42 </radio_item>
43 <radio_item type="string" length="1" name="2">
44 높ìŒ
45 </radio_item>
46 </radio_group>
47 <text type="string" length="1" name="Object Mesh Detail:">
48 오브ì íЏ 메쉬 디테ì¼:
49 </text>
50 <text type="string" length="1" name="Flexible Mesh Detail:">
51 플렉시블 메쉬 디테ì¼:
52 </text>
53 <text type="string" length="1" name="Tree Mesh Detail:">
54 나무 메쉬 디테ì¼:
55 </text>
56 <text type="string" length="1" name="Avatar Mesh Detail:">
57 아바타 메쉬 디테ì¼:
58 </text>
59</panel>
diff --git a/linden/indra/newview/skins/xui/ko/panel_preferences_graphics3.xml b/linden/indra/newview/skins/xui/ko/panel_preferences_graphics3.xml
deleted file mode 100644
index d64a3d1..0000000
--- a/linden/indra/newview/skins/xui/ko/panel_preferences_graphics3.xml
+++ /dev/null
@@ -1,54 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel label="그래픽 고급 사항" name="Display panel 2">
3 <text type="string" length="1" name="Filtering:">
4 í•„í„°ë§:
5 </text>
6 <check_box label="Anisotropic í•„í„°ë§(사용시 ëŠë ¤ì§)" name="ani" />
7 <spinner label="ê°ë§ˆ:" name="gamma" />
8 <text type="string" length="1" name="(brightness, lower is brighter)">
9 (ë°ê¸°, ë‚®ì„ ìˆ˜ë¡ ë°ìŒ, 기본 설정값 0)
10 </text>
11 <spinner label="야간 ë°ê¸°:" name="nighttime_brightness" />
12 <text type="string" length="1" name="(higher is brighter, 1.0 is default)">
13 (ë†’ì„ ìˆ˜ë¡ ë°ìŒ, 기본 설정값 1.0)
14 </text>
15 <text type="string" length="1" name="Enable VBO:">
16 VBO 사용:
17 </text>
18 <check_box label="OpenGL 버í…스 ë²„í¼ ì˜¤ë¸Œì íЏ 사용" name="vbo"
19 tool_tip="활성화하면 OpenGL 드ë¼ì´ë²„ì— ì˜¤ë¥˜ê°€ ë°œìƒí•  수 있습니다." />
20 <text type="string" length="1" name="Graphics Card Memory:">
21 그래픽 카드 메모리:
22 </text>
23 <radio_group name="video card memory radio">
24 <radio_item type="string" length="1" name="radio">
25 16MB
26 </radio_item>
27 <radio_item type="string" length="1" name="radio2">
28 32MB
29 </radio_item>
30 <radio_item type="string" length="1" name="radio3">
31 64MB
32 </radio_item>
33 <radio_item type="string" length="1" name="radio4">
34 128MB
35 </radio_item>
36 <radio_item type="string" length="1" name="radio5">
37 256MB
38 </radio_item>
39 <radio_item type="string" length="1" name="radio6">
40 512MB
41 </radio_item>
42 </radio_group>
43 <spinner label="안개 ë†ë„:" name="fog" />
44 <spinner label="최대 íŒŒí‹°í´ ìˆ˜:" name="particles" />
45 <spinner label="복장 구성 제한:" name="comp limit"
46 tool_tip="디스플레ì´í•  최근 변경 ë³µìž¥ì˜ ìˆ˜" />
47 <text type="string" length="1" name="(lower is faster)">
48 (ë‚®ì„ ìˆ˜ë¡ ë¹ ë¦„)
49 </text>
50 <spinner label="디버그 표시 행 간격:" name="debug beacon line width" />
51 <check_box label="ë‹¤ìŒ ì‹œìž‘í•  때 그래픽 하드웨어 ìžë™ ê°ì§€"
52 name="probe_hardware_checkbox"
53 tool_tip="Second Life는 사용ìžì˜ í•˜ë“œì›¨ì–´ì— ë”°ë¼ ì¼ë¶€ 그래픽 ì„¤ì •ì„ ìžë™ìœ¼ë¡œ 구성합니다. 새로운 하드웨어를 설치하려는 경우, Second Lifeê°€ ì´ë¥¼ 다시 ê°ì§€í•˜ë„ë¡ í•´ì•¼ 합니다." />
54</panel>
diff --git a/linden/indra/newview/skins/xui/ko/panel_settings_chat.xml b/linden/indra/newview/skins/xui/ko/panel_settings_chat.xml
deleted file mode 100644
index aac33de..0000000
--- a/linden/indra/newview/skins/xui/ko/panel_settings_chat.xml
+++ /dev/null
@@ -1,55 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="chat" title="대화">
3 <text>
4 ê¸€ìž í¬ê¸°:
5 </text>
6 <radio_group name="chat font size">
7 <radio_item>
8 소
9 </radio_item>
10 <radio_item>
11 중
12 </radio_item>
13 <radio_item>
14 대
15 </radio_item>
16 </radio_group>
17 <text>
18 ê¸€ìž ìƒ‰:
19 </text>
20 <color_swatch label="시스템" name="system" />
21 <color_swatch label="사용ìž" name="users" />
22 <color_swatch label="오브ì íЏ" name="objects" />
23 <color_swatch label="ë§í’ì„ " name="background" />
24 <text>
25 콘솔:
26 </text>
27 <spinner label="채팅창 사ë¼ì§" name="fade_chat_time" />
28 <text>
29 (ì´ˆ)
30 </text>
31 <spinner label="" name="max_chat_count" />
32 <text>
33 (#í–‰)
34 </text>
35 <slider label="투명ë„" name="console_opacity" />
36 <text>
37 옵션:
38 </text>
39 <check_box label="전체화면 사용(재시작 필요)" name="chat_full_width_check" />
40 <check_box label="Enter 키 누른 후 채팅창 닫기" name="close_chat_on_return_check" />
41 <check_box label="화살표 키는 채팅 시 아바타를 움ì§ìž„"
42 name="arrow_keys_move_avatar_check" />
43 <check_box label="채팅 시간 표시하기" name="show_timestamps_check" />
44 <text>
45 ë§í’ì„  채팅:
46 </text>
47 <check_box label="ë§í’ì„  표시하기" name="bubble_text_chat" />
48 <slider label="투명ë„" name="bubble_chat_opacity" />
49 <text>
50 스í¬ë¦½íЏ 오류:
51 </text>
52 <check_box label="스í¬ë¦½íЏ 오류 ë° ê²½ê³ ë¥¼ ì¼ë°˜ 채팅으로 표시하기"
53 name="script_errors_as_chat" />
54 <color_swatch label="색" name="script_error" />
55</panel>
diff --git a/linden/indra/newview/skins/xui/ko/panel_settings_im.xml b/linden/indra/newview/skins/xui/ko/panel_settings_im.xml
deleted file mode 100644
index 985f2f6..0000000
--- a/linden/indra/newview/skins/xui/ko/panel_settings_im.xml
+++ /dev/null
@@ -1,13 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="im" title="메신저">
3 <text>
4 메신저 옵션:
5 </text>
6 <check_box label="쪽지를 ì´ë©”ì¼ë¡œ 전송" name="send_im_to_email"
7 tool_tip="secondlife.comì—서 ì´ë©”ì¼ ì£¼ì†Œ 변경" />
8 <check_box label="채팅 기ë¡ì— 쪽지 í¬í•¨" name="include_im_in_chat_history" />
9 <check_box label="ë©”ì‹ ì €ì— ì±„íŒ… 시간 표시하기" name="show_timestamps_check" />
10 <text>
11 부재중 답변:
12 </text>
13</panel>
diff --git a/linden/indra/newview/skins/xui/ko/panel_settings_msgbox.xml b/linden/indra/newview/skins/xui/ko/panel_settings_msgbox.xml
deleted file mode 100644
index 6924e8b..0000000
--- a/linden/indra/newview/skins/xui/ko/panel_settings_msgbox.xml
+++ /dev/null
@@ -1,11 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel label="íŒì—…" name="popups" title="íŒì—…">
3 <text>
4 íŒì—… 차단:
5 </text>
6 <button label="íŒì—… 보기" name="enable_popup" />
7 <text>
8 í—ˆìš©ëœ íŒì—…:
9 </text>
10 <button label="ë‚˜ì¤‘ì— ì•Œë¦¼&apos; 초기화…" name="reset_dialogs_btn" />
11</panel>
diff --git a/linden/indra/newview/skins/xui/ko/panel_settings_network.xml b/linden/indra/newview/skins/xui/ko/panel_settings_network.xml
deleted file mode 100644
index 30d2f8c..0000000
--- a/linden/indra/newview/skins/xui/ko/panel_settings_network.xml
+++ /dev/null
@@ -1,57 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="network" title="네트워í¬">
3 <text>
4 최대 대역í­:
5 </text>
6 <slider label="" name="max_bandwidth" />
7 <text>
8 kbps (kilobits per second)
9 </text>
10 <text>
11 ë””ìŠ¤í¬ ìºì‹œ í¬ê¸°:
12 </text>
13 <radio_group name="disk cache">
14 <radio_item>
15 50MB
16 </radio_item>
17 <radio_item>
18 200MB
19 </radio_item>
20 <radio_item>
21 500MB
22 </radio_item>
23 <radio_item>
24 1000MB
25 </radio_item>
26 </radio_group>
27 <button label="ìºì‹œ 비우기" name="clear_cache" />
28 <text>
29 프ë¡ì‹œ 구성:
30 </text>
31 <check_box label="프ë¡ì‹œ 사용" name="proxy_enabled"
32 tool_tip="프ë¡ì‹œ 구성 지정" />
33 <text>
34 프ë¡ì‹œ:
35 </text>
36 <line_editor name="proxy_address" tool_tip="사용할 프ë¡ì‹œ ì´ë¦„ ë˜ëŠ” IP 주소" />
37 <text>
38 í¬íЏ:
39 </text>
40 <line_editor name="proxy_port" tool_tip="사용할 프ë¡ì‹œì˜ í¬íЏ 번호" />
41 <text>
42 ì–‘ë§:
43 </text>
44 <radio_group name="socks_4_5">
45 <radio_item>
46 ì–‘ë§ v4
47 </radio_item>
48 <radio_item>
49 ì–‘ë§ v5
50 </radio_item>
51 </radio_group>
52 <text>
53 프ë¡ì‹œ ì—†ìŒ:
54 </text>
55 <line_editor name="proxy_exclusions"
56 tool_tip="다ìŒì— 대해 프ë¡ì‹œë¥¼ 사용하지 ì•Šì„ ì´ë¦„ ë˜ëŠ” IP 주소" />
57</panel>
diff --git a/linden/indra/newview/skins/xui/ko/panel_settings_web.xml b/linden/indra/newview/skins/xui/ko/panel_settings_web.xml
deleted file mode 100644
index b60b43c..0000000
--- a/linden/indra/newview/skins/xui/ko/panel_settings_web.xml
+++ /dev/null
@@ -1,50 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="web" title="웹">
3 <check_box label="외부 웹 브ë¼ìš°ì € 사용(Firefox, Safari, Internet Explorer)"
4 name="external_browser_check"
5 tool_tip="ë„움ë§, 웹 ë§í¬ ë“±ì˜ ê²½ìš° 외부 웹 브ë¼ìš°ì €ë¥¼ 사용하십시오.\nì „ì²´ í™”ë©´ì„ ì‹¤í–‰ ì¤‘ì¸ ê²½ìš°ì—는 권장ë˜ì§€ 않습니다." />
6 <text>
7 프ë¼ìš°ì € 홈페ì´ì§€:
8 </text>
9 <line_editor name="home_page"
10 tool_tip="세컨드ë¼ì´í”„ 브ë¼ìš°ì €ë¥¼ ì—´ 때 처ìŒìœ¼ë¡œ 방문하는 웹 페ì´ì§€" />
11 <text>
12 프ë¡ì‹œ 구성:
13 </text>
14 <check_box label="ë‚´ë¶€ 웹 브ë¼ìš°ì €ì— 대해 프ë¡ì‹œ 사용" name="proxy_enabled"
15 tool_tip="ë‚´ë¶€ 웹 브ë¼ìš°ì €ì— 대한 프ë¡ì‹œ 구성 지정" />
16 <text>
17 프ë¡ì‹œ:
18 </text>
19 <line_editor name="proxy_address" tool_tip="사용할 프ë¡ì‹œ ì´ë¦„ ë˜ëŠ” IP 주소" />
20 <text>
21 í¬íЏ:
22 </text>
23 <line_editor name="proxy_port" tool_tip="사용할 프ë¡ì‹œì˜ í¬íЏ 번호" />
24 <text>
25 ì–‘ë§:
26 </text>
27 <radio_group name="socks_4_5">
28 <radio_item>
29 ì–‘ë§ v4
30 </radio_item>
31 <radio_item>
32 ì–‘ë§ v5
33 </radio_item>
34 </radio_group>
35 <text>
36 ë‹¤ìŒ í”„ë¡ì‹œ ì—†ìŒ:
37 </text>
38 <line_editor name="proxy_exclusions"
39 tool_tip="다ìŒì— 대해 프ë¡ì‹œë¥¼ 사용하지 ì•Šì„ ì´ë¦„ ë˜ëŠ” IP 주소" />
40 <check_box
41 label="오브ì íЏì—서 웹 페ì´ì§€ 표시(시험용, 컴퓨터를 다시 시작해야 함)"
42 name="web_pages_on_prims_check" />
43 <text>
44 íŠ¸ëŸ¬ìŠ¤íŠ¸ëœ ì‚¬ì´íЏ:
45(로그ì¸í•˜ì—¬ 보기)
46 </text>
47 <button label="추가" name="add_trusted" />
48 <line_editor name="trusted_site_entry" tool_tip="ì‹ ìš© 목ë¡ì— 추가할 사ì´íЏ" />
49 <button label="제거" name="rem_trusted" />
50</panel>
diff --git a/linden/indra/newview/skins/xui/ko/panel_speaker_controls.xml b/linden/indra/newview/skins/xui/ko/panel_speaker_controls.xml
index 66948e9..f98eb94 100644
--- a/linden/indra/newview/skins/xui/ko/panel_speaker_controls.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_speaker_controls.xml
@@ -3,10 +3,12 @@
3 <string name="moderator_label"> 3 <string name="moderator_label">
4 (ì§„í–‰ìž) 4 (ì§„í–‰ìž)
5 </string> 5 </string>
6 <layout_stack name=""> 6 <layout_stack name="panels">
7 <layout_panel name="moderation_mode_panel"> 7 <layout_panel name="moderation_mode_panel">
8 <combo_box name="moderation_mode"> 8 <combo_box name="moderation_mode">
9 ìŒì„± 제어 9 <combo_item name="ModeratedVoice" value="moderated">
10 ìŒì„± 제어
11 </combo_item>
10 </combo_box> 12 </combo_box>
11 </layout_panel> 13 </layout_panel>
12 <layout_panel name="moderate_chat_panel"> 14 <layout_panel name="moderate_chat_panel">
diff --git a/linden/indra/newview/skins/xui/zh/floater_critical.xml b/linden/indra/newview/skins/xui/zh/floater_critical.xml
index 47d9e91..de628aa 100644
--- a/linden/indra/newview/skins/xui/zh/floater_critical.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_critical.xml
@@ -2,9 +2,6 @@
2<floater name="modal container" title=" "> 2<floater name="modal container" title=" ">
3 <button label="ç»§ç»­" label_selected="ç»§ç»­" name="Continue" /> 3 <button label="ç»§ç»­" label_selected="ç»§ç»­" name="Continue" />
4 <button label="å–æ¶ˆ" label_selected="å–æ¶ˆ" name="Cancel" /> 4 <button label="å–æ¶ˆ" label_selected="å–æ¶ˆ" name="Cancel" />
5 <text name="tos_title">
6 紧急信æ¯
7 </text>
8 <text name="tos_heading"> 5 <text name="tos_heading">
9 请仔细阅读下列信æ¯ã€‚ 6 请仔细阅读下列信æ¯ã€‚
10 </text> 7 </text>
diff --git a/linden/indra/newview/skins/xui/zh/floater_friends.xml b/linden/indra/newview/skins/xui/zh/floater_friends.xml
deleted file mode 100644
index d79cc3f..0000000
--- a/linden/indra/newview/skins/xui/zh/floater_friends.xml
+++ /dev/null
@@ -1,34 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="friends" title="伙伴&quot;">
3 <scroll_list name="friend_list"
4 tool_tip="当点击选择多ä½å¥½å‹æ—¶ï¼ŒæŒ‰ä½shift键或者controlé”®">
5 <column label="åå­—" name="friend_name" />
6 </scroll_list>
7 <panel name="rights_container">
8 <text name="friend_name_label">
9 é€‰æ‹©å˜æ›´æƒåˆ©çš„æœ‹å‹...
10 </text>
11 <check_box label="我的在线状æ€å¯è§" name="online_status_cb"
12 tool_tip="在朋å‹çš„好å‹åˆ—表或呼å«å¡ä¸­è®¾ç½®æˆ‘çš„åœ¨çº¿çŠ¶æ€æ˜¯å¦å¯¹è¯¥æœ‹å‹å¯è§" />
13 <check_box label="我在地图中的ä½ç½®å¯è§" name="map_status_cb"
14 tool_tip="è®¾ç½®è¯¥å¥½å‹æ˜¯å¦å¯¹æˆ‘在地图中的ä½ç½®å¯è§" />
15 <check_box label="å¯ä»¥ä¿®æ”¹æˆ‘的东东" name="modify_status_cb"
16 tool_tip="è®¾ç½®è¯¥å¥½å‹æ˜¯å¦å¯ä»¥ä¿®æ”¹æˆ‘的东东" />
17 <text name="process_rights_label">
18 æ­£åœ¨å¤„ç†æƒåŠ›å˜æ›´...
19 </text>
20 </panel>
21 <button label="档案..." name="profile_btn"
22 tool_tip="显示图片,社团以åŠå…¶å®ƒä¿¡æ¯" />
23 <button label="æä¾›é—ªç”µä¼ é€..." name="offer_teleport_btn"
24 tool_tip="为此有人æä¾›ä¸€æ¬¡é—ªç”µä¼ è¿åˆ°ä½ çŽ°åœ¨æ‰€åœ¨åœ°å€ã€‚" />
25 <button label="添加..." name="add_btn" tool_tip="为一个用户æä¾›å‹æƒ…å¡ã€‚" />
26 <button label="付款..." name="pay_btn" tool_tip="馈赠林登元(L$)è‡³è¿™ä½æœ‹å‹" />
27 <button label="移除e..." name="remove_btn"
28 tool_tip="将此人从你的å‹äººåˆ—表中清除" />
29 <button label="峿—¶é€š..." name="im_btn" tool_tip="æ‰“å¼€å³æ—¶æ¶ˆæ¯å•å…ƒ" />
30 <button label="åŒæ„修改æƒåˆ©..." name="grant_btn"
31 tool_tip="å…许此ä½ç”¨æˆ·æ¥æ”¹è¿›ä½ çš„物体。" />
32 <button label="废除修改的æƒåˆ©..." name="revoke_btn"
33 tool_tip="å…许此ä½ç”¨æˆ·æ¥æ”¹è¿›ä½ çš„物体。" />
34</floater>
diff --git a/linden/indra/newview/skins/xui/zh/floater_groups.xml b/linden/indra/newview/skins/xui/zh/floater_groups.xml
deleted file mode 100644
index de227f2..0000000
--- a/linden/indra/newview/skins/xui/zh/floater_groups.xml
+++ /dev/null
@@ -1,15 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="groups" title="社团">
3 <text name="groupdesc">
4 ç²—ä½“å­—æ˜¾ç¤ºçš„æ˜¯ä½ ç›®å‰æ­£åœ¨æ´»åŠ¨çš„ç¤¾å›¢ã€‚
5 </text>
6 <text name="groupcount">
7 你属于[COUNT]个社团(最大数é‡ä¸º[MAX]).
8 </text>
9 <button label="激活" label_selected="激活" name="Activate" />
10 <button label="ä¿¡æ¯" label_selected="ä¿¡æ¯" name="Info" />
11 <button label="离开" label_selected="离开" name="Leave" />
12 <button label="创造" label_selected="创造" name="Create" />
13 <button label="æœç´¢..." label_selected="æœç´¢..." name="Search..." />
14 <button label="关闭" label_selected="关闭" name="Close" />
15</floater>
diff --git a/linden/indra/newview/skins/xui/zh/floater_preview_new_landmark.xml b/linden/indra/newview/skins/xui/zh/floater_preview_new_landmark.xml
deleted file mode 100644
index 0b1239a..0000000
--- a/linden/indra/newview/skins/xui/zh/floater_preview_new_landmark.xml
+++ /dev/null
@@ -1,10 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="Linden Land, Da Boom (155, 136, 35)"
3 title=" Linden Land, Da Boom (155, 136, 35)">
4 <button label="闪电传é€" label_selected="" name="Teleport btn" />
5 <button label="在地图中显示" label_selected="" name="Show on Map btn" />
6 <button label="放弃" label_selected="" name="Discard btn" />
7 <text type="string" length="1" name="desc txt">
8 æè¿°:
9 </text>
10</floater>
diff --git a/linden/indra/newview/skins/xui/zh/floater_rate.xml b/linden/indra/newview/skins/xui/zh/floater_rate.xml
deleted file mode 100644
index 1873576..0000000
--- a/linden/indra/newview/skins/xui/zh/floater_rate.xml
+++ /dev/null
@@ -1,44 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="rate" title="ä½ çš„æ°æ–¯å¡ 林登等级">
3 <radio_group name="behavior">
4 <radio_item type="string" length="1" name="Positive">
5 Positive
6 </radio_item>
7 <radio_item type="string" length="1" name="No Rating">
8 No Rating
9 </radio_item>
10 </radio_group>
11 <radio_group name="appearance">
12 <radio_item type="string" length="1" name="Positive">
13 Positive
14 </radio_item>
15 <radio_item type="string" length="1" name="No Rating">
16 No Rating
17 </radio_item>
18 </radio_group>
19 <radio_group name="building">
20 <radio_item type="string" length="1" name="Positive">
21 Positive
22 </radio_item>
23 <radio_item type="string" length="1" name="No Rating">
24 No Rating
25 </radio_item>
26 </radio_group>
27 <button label="OK" label_selected="OK" name="OK" />
28 <button label="å–æ¶ˆ" label_selected="å–æ¶ˆ" name="Cancel" />
29 <text type="string" length="1" name="Overall behavior:">
30 所有的行为:
31 </text>
32 <text type="string" length="1" name="Skill at appearance (clothing and attachments):">
33 外表的技能(è¡£æœå’Œé™„属饰å“):
34 </text>
35 <text type="string" length="1" name="Skill at building:">
36 创建建筑物的能力:
37 </text>
38 <text type="string" length="1" name="Message:">
39 ä¿¡æ¯:
40 </text>
41 <text type="string" length="1" name="cost">
42 花费: L$[COST]更改等级约定. 总共收费: L$[TOTAL].
43 </text>
44</floater>
diff --git a/linden/indra/newview/skins/xui/zh/menu_viewer.xml b/linden/indra/newview/skins/xui/zh/menu_viewer.xml
index 1178367..ea8610f 100644
--- a/linden/indra/newview/skins/xui/zh/menu_viewer.xml
+++ b/linden/indra/newview/skins/xui/zh/menu_viewer.xml
@@ -14,7 +14,6 @@
14 <menu_item_call label="æ‹æ‘„å¿«ç…§" name="Take Snapshot" /> 14 <menu_item_call label="æ‹æ‘„å¿«ç…§" name="Take Snapshot" />
15 <menu_item_call label="快照存至电脑硬盘" name="Snapshot to Disk" /> 15 <menu_item_call label="快照存至电脑硬盘" name="Snapshot to Disk" />
16 <menu_item_separator label="-----------" name="separator4" /> 16 <menu_item_separator label="-----------" name="separator4" />
17 <menu_item_call label="播放/æš‚åœç¡¬ç›˜ä¸Šçš„电影" name="Start/Stop Movie to Disk" />
18 <menu label="Set Window Size" name="Set Window Size"> 17 <menu label="Set Window Size" name="Set Window Size">
19 <tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~" /> 18 <tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~" />
20 <menu_item_call label="320x240" name="320x240" /> 19 <menu_item_call label="320x240" name="320x240" />
@@ -134,6 +133,7 @@
134 <menu_item_separator label="-----------" name="separator3" /> 133 <menu_item_separator label="-----------" name="separator3" />
135 <menu_item_call label="设æˆç¦»å¼€çжæ€" name="Set Away" /> 134 <menu_item_call label="设æˆç¦»å¼€çжæ€" name="Set Away" />
136 <menu_item_call label="设æˆç¹å¿™æ¨¡å¼" name="Set Busy" /> 135 <menu_item_call label="设æˆç¹å¿™æ¨¡å¼" name="Set Busy" />
136 <menu_item_call label="åœæ­¢æ‰€æœ‰åŠ¨ç”»" name="Stop All Animations" />
137 <menu_item_separator label="-----------" name="separator4" /> 137 <menu_item_separator label="-----------" name="separator4" />
138 <menu_item_call label="叿ˆ·åކå²çºªå½•..." name="Account History..." /> 138 <menu_item_call label="叿ˆ·åކå²çºªå½•..." name="Account History..." />
139 <menu_item_call label="ç®¡ç†æˆ‘çš„å¸æˆ·..." name="Manage My Account..." /> 139 <menu_item_call label="ç®¡ç†æˆ‘çš„å¸æˆ·..." name="Manage My Account..." />
@@ -180,7 +180,6 @@
180 <menu_item_call label="链接" name="Link" /> 180 <menu_item_call label="链接" name="Link" />
181 <menu_item_call label="解除链接" name="Unlink" /> 181 <menu_item_call label="解除链接" name="Unlink" />
182 <menu_item_separator label="-----------" name="separator4" /> 182 <menu_item_separator label="-----------" name="separator4" />
183 <menu_item_call label="åœæ­¢æ‰€æœ‰åŠ¨ç”»" name="Stop All Animations" />
184 <menu_item_separator label="-----------" name="separator5" /> 183 <menu_item_separator label="-----------" name="separator5" />
185 <menu_item_call label="èšç„¦äºŽé€‰æ‹©" name="Focus on Selection" /> 184 <menu_item_call label="èšç„¦äºŽé€‰æ‹©" name="Focus on Selection" />
186 <menu_item_call label="按所选比例缩放" name="Zoom to Selection" /> 185 <menu_item_call label="按所选比例缩放" name="Zoom to Selection" />
diff --git a/linden/indra/newview/skins/xui/zh/panel_music_remote.xml b/linden/indra/newview/skins/xui/zh/panel_music_remote.xml
deleted file mode 100644
index 3e9db0c..0000000
--- a/linden/indra/newview/skins/xui/zh/panel_music_remote.xml
+++ /dev/null
@@ -1,10 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="music_remote">
3 <text type="string" length="1" name="text">
4 éŸ³ä¹æŽ§åˆ¶
5 </text>
6 <button label="" label_selected="" name="stop_btn" tool_tip="åœæ­¢æ’­æ”¾åª’体" />
7 <button label="" label_selected="" name="play_btn" tool_tip="播放媒体æµ" />
8 <button label="" label_selected="" name="pause_btn" tool_tip="åœæ­¢åª’体æµ" />
9 <volume_slider name="volume_slider" tool_tip="使用这个滑动浮标调整音é‡" />
10</panel>
diff --git a/linden/indra/newview/skins/xui/zh/panel_preferences_graphics2.xml b/linden/indra/newview/skins/xui/zh/panel_preferences_graphics2.xml
deleted file mode 100644
index 8683fff..0000000
--- a/linden/indra/newview/skins/xui/zh/panel_preferences_graphics2.xml
+++ /dev/null
@@ -1,57 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel label="Graphics Detail" name="Display panel 3">
3 <text type="string" length="1" name="text">
4 阴影:
5 </text>
6 <check_box label="应用放大地图和闪亮感" name="bumpshiny" />
7 <check_box label="激活水中波纹" name="ripple" />
8 <check_box label="化身最高级程åº" name="avatarvp" />
9 <text type="string" length="1" name="Avatar Rendering:">
10 化身表现:
11 </text>
12 <radio_group name="Avatar Appearance">
13 <radio_item type="string" length="1" name="Normal">
14 Normal
15 </radio_item>
16 <radio_item type="string" length="1" name="Bump">
17 Bump Mapped
18 </radio_item>
19 <radio_item type="string" length="1" name="Cloth">
20 Bump Mapped &amp; Cloth
21 </radio_item>
22 </radio_group>
23 <text type="string" length="1" name="Lighting Detail:">
24 照明细节:
25 </text>
26 <radio_group name="lighting detail radio">
27 <radio_item type="string" length="1" name="SunMoon">
28 Sun and moon only
29 </radio_item>
30 <radio_item type="string" length="1" name="LocalLights">
31 Nearby local lights
32 </radio_item>
33 </radio_group>
34 <text type="string" length="1" name="Terrain Detail:">
35 地形细节:
36 </text>
37 <radio_group name="terrain detail radio">
38 <radio_item type="string" length="1" name="0">
39 低
40 </radio_item>
41 <radio_item type="string" length="1" name="2">
42 高
43 </radio_item>
44 </radio_group>
45 <text type="string" length="1" name="Object Mesh Detail:">
46 对象循环细节:
47 </text>
48 <text type="string" length="1" name="Flexible Mesh Detail:">
49 çµæ´»çš„网孔细节:
50 </text>
51 <text type="string" length="1" name="Tree Mesh Detail:">
52 树木网格细节:
53 </text>
54 <text type="string" length="1" name="Avatar Mesh Detail:">
55 化身咬åˆç»†èŠ‚:
56 </text>
57</panel>
diff --git a/linden/indra/newview/skins/xui/zh/panel_preferences_graphics3.xml b/linden/indra/newview/skins/xui/zh/panel_preferences_graphics3.xml
deleted file mode 100644
index b17dbfb..0000000
--- a/linden/indra/newview/skins/xui/zh/panel_preferences_graphics3.xml
+++ /dev/null
@@ -1,50 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel label="Adv. Graphics" name="Display panel 2">
3 <text type="string" length="1" name="Filtering:">
4 过滤:
5 </text>
6 <check_box label="异性过滤(激活该功能时会影å“速度)" name="ani" />
7 <spinner label="微克:" name="gamma" />
8 <text type="string" length="1" name="(brightness, lower is brighter)">
9 (亮度, æ•°å­—è¶Šå°äº®åº¦è¶Šå¤§, 0=使用默认)
10 </text>
11 <spinner label="夜晚亮度:" name="nighttime_brightness" />
12 <text type="string" length="1" name="(higher is brighter, 1.0 is default)">
13 (越高越亮,默认为1.0)
14 </text>
15 <text type="string" length="1" name="AGP Graphics Card:">
16 AGP图åƒå¡:
17 </text>
18 <check_box label="激活AGP (如果使用AGPå›¾åƒæ˜¾å¡é€Ÿåº¦ä¼šæ›´å¿«)" name="agp"
19 tool_tip="如果您是在使用标准PCI的显å¡ï¼Œå¯åŠ¨æ­¤é¡¹å¯èƒ½ä¼šé™ä½Žæ€§èƒ½ï¼Œå¹¶å ç”¨æ›´å¤šçš„内存。" />
20 <text type="string" length="1" name="Graphics Card Memory:">
21 图åƒå¡è®°å¿†ç©ºé—´:
22 </text>
23 <radio_group name="video card memory radio">
24 <radio_item type="string" length="1" name="radio">
25 16MB
26 </radio_item>
27 <radio_item type="string" length="1" name="radio2">
28 32MB
29 </radio_item>
30 <radio_item type="string" length="1" name="radio3">
31 64MB
32 </radio_item>
33 <radio_item type="string" length="1" name="radio4">
34 128MB
35 </radio_item>
36 <radio_item type="string" length="1" name="radio5">
37 256MB
38 </radio_item>
39 <radio_item type="string" length="1" name="radio6">
40 512MB
41 </radio_item>
42 </radio_group>
43 <spinner label="浓雾å¯è§çއ:" name="fog" />
44 <spinner label="最大点数:" name="particles" />
45 <spinner label="最高装备é¢åº¦:" name="comp limit"
46 tool_tip="显示最近被修改装备的数é‡ã€‚" />
47 <text type="string" length="1" name="(lower is faster)">
48 (越低越快)
49 </text>
50</panel>
diff --git a/linden/indra/newview/skins/xui/zh/panel_settings_chat.xml b/linden/indra/newview/skins/xui/zh/panel_settings_chat.xml
deleted file mode 100644
index 7fd07cd..0000000
--- a/linden/indra/newview/skins/xui/zh/panel_settings_chat.xml
+++ /dev/null
@@ -1,54 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="chat" title="è°ˆè¯">
3 <text>
4 èŠå¤©å­—体大å°:
5 </text>
6 <radio_group name="chat font size">
7 <radio_item>
8 å°åž‹çš„
9 </radio_item>
10 <radio_item>
11 中型的
12 </radio_item>
13 <radio_item>
14 大型的
15 </radio_item>
16 </radio_group>
17 <text>
18 èŠå¤©é¢œè‰²:
19 </text>
20 <color_swatch label="系统" name="system" />
21 <color_swatch label="用户" name="users" />
22 <color_swatch label="东东" name="objects" />
23 <color_swatch label="泡沫" name="background" />
24 <text>
25 èŠå¤©æŽ§åˆ¶å°:
26 </text>
27 <spinner label="èŠå¤©ç»“æŸåŽæ·¡å‡º" name="fade_chat_time" />
28 <text>
29 (ç§’)
30 </text>
31 <spinner label="" name="max_chat_count" />
32 <text>
33 (#行)
34 </text>
35 <slider label="ä¸é€æ˜Ž" name="console_opacity" />
36 <text>
37 èŠå¤©é€‰é¡¹:
38 </text>
39 <check_box label="用全å±å®½åº¦èŠå¤© (需é‡å¯)" name="chat_full_width_check" />
40 <check_box label="点击返回åŽå…³é—­èŠå¤©çª—å£" name="close_chat_on_return_check" />
41 <check_box label="ï¼›èŠå¤©æ—¶å¯ç”¨ç®­å¤´é”®ç§»åŠ¨ä½ çš„åŒ–èº«"
42 name="arrow_keys_move_avatar_check" />
43 <check_box label="在èŠå¤©æ—¶æ˜¾ç¤ºæ—¶é—´" name="show_timestamps_check" />
44 <text>
45 泡泡èŠ:
46 </text>
47 <check_box label="显示èŠå¤©çª—å£" name="bubble_text_chat" />
48 <slider label="ä¸é€æ˜Ž" name="bubble_chat_opacity" />
49 <text>
50 脚本出错:
51 </text>
52 <check_box label="以èŠå¤©å½¢å¼æ˜¾ç¤ºè„šæœ¬é”™è¯¯å’Œè­¦å‘Š" name="script_errors_as_chat" />
53 <color_swatch label="颜色" name="script_error" />
54</panel>
diff --git a/linden/indra/newview/skins/xui/zh/panel_settings_im.xml b/linden/indra/newview/skins/xui/zh/panel_settings_im.xml
deleted file mode 100644
index 3f80e77..0000000
--- a/linden/indra/newview/skins/xui/zh/panel_settings_im.xml
+++ /dev/null
@@ -1,13 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="im" title="峿—¶é€š">
3 <text>
4 峿—¶é€šé€‰é¡¹:
5 </text>
6 <check_box label="å‘é€åŠæ—¶æ¶ˆæ¯å¾€ e-mail" name="send_im_to_email"
7 tool_tip="在 secondlife.com中更改你的电å­é‚®ç®±åœ°å€" />
8 <check_box label="èŠå¤©è®°å½•中包å«å³æ—¶é€šä¿¡æ¯" name="include_im_in_chat_history" />
9 <check_box label="åœ¨å³æ—¶æ¶ˆæ¯ä¸­æ˜¾ç¤ºæ—¶é—´" name="show_timestamps_check" />
10 <text>
11 忙碌模å¼çš„自动回å¤:
12 </text>
13</panel>
diff --git a/linden/indra/newview/skins/xui/zh/panel_settings_msgbox.xml b/linden/indra/newview/skins/xui/zh/panel_settings_msgbox.xml
deleted file mode 100644
index 835e436..0000000
--- a/linden/indra/newview/skins/xui/zh/panel_settings_msgbox.xml
+++ /dev/null
@@ -1,11 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel label="弹出程åº" name="popups" title="弹出程åº">
3 <text>
4 䏿˜¾ç¤ºå¼¹å‡ºç¨‹åº:
5 </text>
6 <button label="Enable this popup" name="enable_popup" />
7 <text>
8 显示弹出程åº:
9 </text>
10 <button label="é‡ç½® &apos;下次显示&apos;对è¯..." name="reset_dialogs_btn" />
11</panel>
diff --git a/linden/indra/newview/skins/xui/zh/panel_settings_network.xml b/linden/indra/newview/skins/xui/zh/panel_settings_network.xml
deleted file mode 100644
index b3e987f..0000000
--- a/linden/indra/newview/skins/xui/zh/panel_settings_network.xml
+++ /dev/null
@@ -1,57 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="network" title="网络">
3 <text>
4 最大带宽:
5 </text>
6 <slider label="" name="max_bandwidth" />
7 <text>
8 kbps (æ¯ç§’kbæ•°)
9 </text>
10 <text>
11 ç£ç›˜é«˜é€Ÿç¼“存大å°:
12 </text>
13 <radio_group name="disk cache">
14 <radio_item>
15 50 MB
16 </radio_item>
17 <radio_item>
18 200 MB
19 </radio_item>
20 <radio_item>
21 500 MB
22 </radio_item>
23 <radio_item>
24 1000 MB
25 </radio_item>
26 </radio_group>
27 <button label="清除缓存" name="clear_cache" />
28 <text>
29 ä»£ç†æœåС噍é…ç½®:
30 </text>
31 <check_box label="ä½¿ç”¨ä»£ç†æœåС噍" name="proxy_enabled"
32 tool_tip="ç‰¹åˆ«è®¾å®šä»£ç†æœåС噍é…置。" />
33 <text>
34 ä»£ç†æœåС噍:
35 </text>
36 <line_editor name="proxy_address" tool_tip="è¯·è¾“å…¥ä»£ç†æœåŠ¡å™¨çš„å称或IP地å€" />
37 <text>
38 端å£ï¼š
39 </text>
40 <line_editor name="proxy_port" tool_tip="The port number of the proxy you would like to use" />
41 <text>
42 袜å­ï¼š
43 </text>
44 <radio_group name="socks_4_5">
45 <radio_item>
46 Socks v4
47 </radio_item>
48 <radio_item>
49 Socks v5
50 </radio_item>
51 </radio_group>
52 <text>
53 没有代ç†:
54 </text>
55 <line_editor name="proxy_exclusions"
56 tool_tip="è¯·è¾“å…¥ä¸æƒ³ä½¿ç”¨ä»£ç†æœåŠ¡å™¨æ›¿æ¢çš„å称或IP地å€" />
57</panel>
diff --git a/linden/indra/newview/skins/xui/zh/panel_settings_web.xml b/linden/indra/newview/skins/xui/zh/panel_settings_web.xml
deleted file mode 100644
index 46334d9..0000000
--- a/linden/indra/newview/skins/xui/zh/panel_settings_web.xml
+++ /dev/null
@@ -1,48 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="web" title="网络">
3 <check_box label="使用外部æµè§ˆå™¨(Firefox, Safari, IE)"
4 name="external_browser_check"
5 tool_tip="使用外部网络æµè§ˆå™¨èŽ·å¾—å¸®åŠ©, 网页链接, 等等。\nè‹¥å…¨å±æ˜¾ç¤ºåˆ™ä¸æŽ¨è使用。" />
6 <text>
7 æµè§ˆå™¨ä¸»é¡µ:
8 </text>
9 <line_editor name="home_page" tool_tip="首次打开第二人生æµè§ˆå™¨æ—¶çš„æµè§ˆé¡µé¢" />
10 <text>
11 ä»£ç†æœåС噍é…ç½®:
12 </text>
13 <check_box label="内部æµè§ˆå™¨ä½¿ç”¨ä»£ç†æœåС噍" name="proxy_enabled"
14 tool_tip="请为因特网网络æµè§ˆå™¨æŒ‡å®šä»£ç†æœåС噍é…置。" />
15 <text>
16 ä»£ç†æœåС噍:
17 </text>
18 <line_editor name="proxy_address" tool_tip="è¯·è¾“å…¥ä»£ç†æœåŠ¡å™¨çš„å称或IP地å€" />
19 <text>
20 端å£ï¼š
21 </text>
22 <line_editor name="proxy_port" tool_tip="The port number of the proxy you would like to use" />
23 <text>
24 袜å­ï¼š
25 </text>
26 <radio_group name="socks_4_5">
27 <radio_item>
28 Socks v4
29 </radio_item>
30 <radio_item>
31 Socks v5
32 </radio_item>
33 </radio_group>
34 <text>
35 对以下内容ä¸ä½¿ç”¨ä»£ç†:
36 </text>
37 <line_editor name="proxy_exclusions"
38 tool_tip="è¯·è¾“å…¥ä¸æƒ³ä½¿ç”¨ä»£ç†æœåŠ¡å™¨æ›¿æ¢çš„å称或IP地å€" />
39 <check_box label="在东东上显示网页 (实验性功能, 需è¦é‡å¯)"
40 name="web_pages_on_prims_check" />
41 <text>
42 安全地å€ï¼š
43(登陆察看)
44 </text>
45 <button label="添加" name="add_trusted" />
46 <line_editor name="trusted_site_entry" tool_tip="添加到安全åå•中的网络地å€" />
47 <button label="移除" name="rem_trusted" />
48</panel>
diff --git a/linden/indra/newview/skins/xui/zh/panel_toolbar.xml b/linden/indra/newview/skins/xui/zh/panel_toolbar.xml
index 372a2f5..74f8128 100644
--- a/linden/indra/newview/skins/xui/zh/panel_toolbar.xml
+++ b/linden/indra/newview/skins/xui/zh/panel_toolbar.xml
@@ -1,5 +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="toolbar"> 2<panel name="toolbar">
3 <layout_stack name="toolbar_stack">
3 <button label="峿—¶é€š" name="im_btn" tool_tip="ç”¨å³æ—¶é€šè”系你的朋å‹ã€‚" /> 4 <button label="峿—¶é€š" name="im_btn" tool_tip="ç”¨å³æ—¶é€šè”系你的朋å‹ã€‚" />
4 <button label="èŠå¤©" name="chat_btn" 5 <button label="èŠå¤©" name="chat_btn"
5 tool_tip="与附近的人交谈.点击交谈之åŽç‚¹å‡»åކå²åŽ»æŸ¥æ‰¾äº¤è°ˆè®°å½•ã€‚" /> 6 tool_tip="与附近的人交谈.点击交谈之åŽç‚¹å‡»åކå²åŽ»æŸ¥æ‰¾äº¤è°ˆè®°å½•ã€‚" />
@@ -16,4 +17,5 @@
16 tool_tip="你周围区域的地图。 (Ctrl-Shift-M)" /> 17 tool_tip="你周围区域的地图。 (Ctrl-Shift-M)" />
17 <button label="地图" name="map_btn" tool_tip="全部完整地图。 (Ctrl-M)" /> 18 <button label="地图" name="map_btn" tool_tip="全部完整地图。 (Ctrl-M)" />
18 <button label="库存" name="inventory_btn" tool_tip="你的东东æ ã€‚ (Ctrl-I)" /> 19 <button label="库存" name="inventory_btn" tool_tip="你的东东æ ã€‚ (Ctrl-I)" />
20 </layout_stack>
19</panel> 21</panel>
diff --git a/linden/indra/newview/viewer_manifest.py b/linden/indra/newview/viewer_manifest.py
index 43734df..d07ebf0 100755
--- a/linden/indra/newview/viewer_manifest.py
+++ b/linden/indra/newview/viewer_manifest.py
@@ -115,38 +115,18 @@ class ViewerManifest(LLManifest):
115 if not self.default_grid(): 115 if not self.default_grid():
116 if self.default_channel(): 116 if self.default_channel():
117 # beta grid viewer 117 # beta grid viewer
118 channel_flags = '-settings settings_beta.xml' 118 channel_flags = '--settings settings_beta.xml'
119 grid_flags = "-helperuri http://preview-%(grid)s.secondlife.com/helpers/ -loginuri https://login.%(grid)s.lindenlab.com/cgi-bin/login.cgi" % {'grid':self.args['grid']} 119 grid_flags = "--grid %(grid)s --helperuri http://preview-%(grid)s.secondlife.com/helpers/" % {'grid':self.args['grid']}
120 120
121 if not self.default_channel(): 121 if not self.default_channel():
122 # some channel on some grid 122 # some channel on some grid
123 channel_flags = '-settings settings_%s.xml -channel "%s"' % (self.channel_lowerword(), self.channel()) 123 channel_flags = '--settings settings_%s.xml --channel "%s"' % (self.channel_lowerword(), self.channel())
124 elif self.login_channel(): 124 elif self.login_channel():
125 # Report a special channel during login, but use default channel elsewhere 125 # Report a special channel during login, but use default channel elsewhere
126 channel_flags = '-channel "%s"' % (self.login_channel()) 126 channel_flags = '--channel "%s"' % (self.login_channel())
127 127
128 return " ".join((channel_flags, grid_flags)).strip() 128 return " ".join((channel_flags, grid_flags)).strip()
129 129
130 def login_url(self):
131 """ Convenience function that returns the appropriate login url for the grid"""
132 if(self.args.get('login_url')):
133 return self.args['login_url']
134 else:
135 if(self.default_grid()):
136 if(self.default_channel()):
137 # agni release
138 return 'http://secondlife.com/app/login/'
139 else:
140 # first look (or other) on agni
141 return 'http://secondlife.com/app/login/%s/' % self.channel_lowerword()
142 else:
143 # beta grid
144 return 'http://secondlife.com/app/login/beta/'
145
146 def replace_login_url(self):
147 # set the login page to point to a url appropriate for the type of client
148 self.replace_in("skins/xui/en-us/panel_login.xml", searchdict={'http://secondlife.com/app/login/':self.login_url()})
149
150 130
151class WindowsManifest(ViewerManifest): 131class WindowsManifest(ViewerManifest):
152 def final_exe(self): 132 def final_exe(self):
@@ -229,7 +209,6 @@ class WindowsManifest(ViewerManifest):
229# # pull in the crash logger and updater from other projects 209# # pull in the crash logger and updater from other projects
230# self.path(src="../win_crash_logger/win_crash_logger.exe", dst="win_crash_logger.exe") 210# self.path(src="../win_crash_logger/win_crash_logger.exe", dst="win_crash_logger.exe")
231 self.path(src="../win_updater/updater.exe", dst="updater.exe") 211 self.path(src="../win_updater/updater.exe", dst="updater.exe")
232 self.replace_login_url()
233 212
234 def nsi_file_commands(self, install=True): 213 def nsi_file_commands(self, install=True):
235 def wpath(path): 214 def wpath(path):
@@ -349,7 +328,7 @@ class WindowsManifest(ViewerManifest):
349 328
350 NSIS_path = 'C:\\Program Files\\NSIS\\makensis.exe' 329 NSIS_path = 'C:\\Program Files\\NSIS\\makensis.exe'
351 self.run_command('"' + proper_windows_path(NSIS_path) + '" ' + self.dst_path_of(tempfile)) 330 self.run_command('"' + proper_windows_path(NSIS_path) + '" ' + self.dst_path_of(tempfile))
352 self.remove(self.dst_path_of(tempfile)) 331 # self.remove(self.dst_path_of(tempfile))
353 self.created_path(installer_file) 332 self.created_path(installer_file)
354 333
355 334
@@ -363,6 +342,9 @@ class DarwinManifest(ViewerManifest):
363 # <bundle>/Contents/MacOS/ 342 # <bundle>/Contents/MacOS/
364 self.contents_of_tar('mozilla-universal-darwin.tgz', 'MacOS') 343 self.contents_of_tar('mozilla-universal-darwin.tgz', 'MacOS')
365 344
345 # copy additional libs in <bundle>/Contents/MacOS/
346 self.path("../../libraries/universal-darwin/lib_release/libndofdev.dylib", dst="MacOS/libndofdev.dylib")
347
366 # replace the default theme with our custom theme (so scrollbars work). 348 # replace the default theme with our custom theme (so scrollbars work).
367 if self.prefix(src="mozilla-theme", dst="MacOS/chrome"): 349 if self.prefix(src="mozilla-theme", dst="MacOS/chrome"):
368 self.path("classic.jar") 350 self.path("classic.jar")
@@ -387,9 +369,6 @@ class DarwinManifest(ViewerManifest):
387 # command line arguments for connecting to the proper grid 369 # command line arguments for connecting to the proper grid
388 self.put_in_file(self.flags_list(), 'arguments.txt') 370 self.put_in_file(self.flags_list(), 'arguments.txt')
389 371
390 # set the proper login url
391 self.replace_login_url()
392
393 self.end_prefix("Resources") 372 self.end_prefix("Resources")
394 373
395 self.end_prefix("Contents") 374 self.end_prefix("Contents")
@@ -459,7 +438,7 @@ class LinuxManifest(ViewerManifest):
459 def construct(self): 438 def construct(self):
460 super(LinuxManifest, self).construct() 439 super(LinuxManifest, self).construct()
461 self.path("licenses-linux.txt","licenses.txt") 440 self.path("licenses-linux.txt","licenses.txt")
462 #self.path("res/ll_icon.ico","secondlife.ico") 441 self.path("res/ll_icon.png","secondlife_icon.png")
463 if self.prefix("linux_tools", ""): 442 if self.prefix("linux_tools", ""):
464 self.path("client-readme.txt","README-linux.txt") 443 self.path("client-readme.txt","README-linux.txt")
465 self.path("client-readme-voice.txt","README-linux-voice.txt") 444 self.path("client-readme-voice.txt","README-linux-voice.txt")
@@ -471,15 +450,12 @@ class LinuxManifest(ViewerManifest):
471 450
472 # Create an appropriate gridargs.dat for this package, denoting required grid. 451 # Create an appropriate gridargs.dat for this package, denoting required grid.
473 self.put_in_file(self.flags_list(), 'gridargs.dat') 452 self.put_in_file(self.flags_list(), 'gridargs.dat')
474 # set proper login url
475 self.replace_login_url()
476 453
477 # stripping all the libs removes a few megabytes from the end-user package 454 # stripping all the libs removes a few megabytes from the end-user package
478 for s,d in self.file_list: 455 for s,d in self.file_list:
479 if re.search("lib/lib.+\.so.*", d): 456 if re.search("lib/lib.+\.so.*", d):
480 self.run_command('strip -S %s' % d) 457 self.run_command('strip -S %s' % d)
481 458
482
483 def package_finish(self): 459 def package_finish(self):
484 if(self.args.has_key('installer_name')): 460 if(self.args.has_key('installer_name')):
485 installer_name = self.args['installer_name'] 461 installer_name = self.args['installer_name']
@@ -491,6 +467,15 @@ class LinuxManifest(ViewerManifest):
491 else: 467 else:
492 installer_name += '_' + self.channel_oneword().upper() 468 installer_name += '_' + self.channel_oneword().upper()
493 469
470 # Fix access permissions
471 self.run_command("""
472 find %(dst)s -type d | xargs chmod 755;
473 find %(dst)s -type f -perm 0700 | xargs chmod 0755;
474 find %(dst)s -type f -perm 0500 | xargs chmod 0555;
475 find %(dst)s -type f -perm 0600 | xargs chmod 0644;
476 find %(dst)s -type f -perm 0400 | xargs chmod 0444;
477 true""" % {'dst':self.get_dst_prefix() })
478
494 # temporarily move directory tree so that it has the right name in the tarfile 479 # temporarily move directory tree so that it has the right name in the tarfile
495 self.run_command("mv %(dst)s %(inst)s" % {'dst':self.get_dst_prefix(),'inst':self.src_path_of(installer_name)}) 480 self.run_command("mv %(dst)s %(inst)s" % {'dst':self.get_dst_prefix(),'inst':self.src_path_of(installer_name)})
496 # --numeric-owner hides the username of the builder for security etc. 481 # --numeric-owner hides the username of the builder for security etc.
diff --git a/linden/indra/test/files.lst b/linden/indra/test/files.lst
index d923d8f..b335dbf 100644
--- a/linden/indra/test/files.lst
+++ b/linden/indra/test/files.lst
@@ -5,6 +5,7 @@ test/llapp_tut.cpp
5test/llbase64_tut.cpp 5test/llbase64_tut.cpp
6test/llblowfish_tut.cpp 6test/llblowfish_tut.cpp
7test/llbuffer_tut.cpp 7test/llbuffer_tut.cpp
8test/llcontrol_tut.cpp
8test/lldate_tut.cpp 9test/lldate_tut.cpp
9test/llerror_tut.cpp 10test/llerror_tut.cpp
10test/llhost_tut.cpp 11test/llhost_tut.cpp
@@ -38,6 +39,7 @@ test/lluuidhashmap_tut.cpp
38test/llxfer_tut.cpp 39test/llxfer_tut.cpp
39test/math.cpp 40test/math.cpp
40test/message_tut.cpp 41test/message_tut.cpp
42test/prim_linkability_tut.cpp
41test/reflection_tut.cpp 43test/reflection_tut.cpp
42test/test.cpp 44test/test.cpp
43test/v2math_tut.cpp 45test/v2math_tut.cpp
diff --git a/linden/indra/test/inventory.cpp b/linden/indra/test/inventory.cpp
index 7c81dbe..3899dfc 100644
--- a/linden/indra/test/inventory.cpp
+++ b/linden/indra/test/inventory.cpp
@@ -453,9 +453,7 @@ namespace tut
453 ensure_equals("9.sale price::getSalePrice() failed price", src1->getSaleInfo().getSalePrice(), src2->getSaleInfo().getSalePrice()); 453 ensure_equals("9.sale price::getSalePrice() failed price", src1->getSaleInfo().getSalePrice(), src2->getSaleInfo().getSalePrice());
454 ensure_equals("10.name::getName() failed", src1->getName(), src2->getName()); 454 ensure_equals("10.name::getName() failed", src1->getName(), src2->getName());
455 ensure_equals("11.description::getDescription() failed", src1->getDescription(), src2->getDescription()); 455 ensure_equals("11.description::getDescription() failed", src1->getDescription(), src2->getDescription());
456 456 //skip_fail("12.creation::getCreationDate()");
457
458 skip_fail("12.creation::getCreationDate()");
459 ensure_equals("12.creation::getCreationDate() failed", src1->getCreationDate(), src2->getCreationDate()); 457 ensure_equals("12.creation::getCreationDate() failed", src1->getCreationDate(), src2->getCreationDate());
460 } 458 }
461 459
diff --git a/linden/indra/test/io.cpp b/linden/indra/test/io.cpp
index fe8c19d..408b7c8 100644
--- a/linden/indra/test/io.cpp
+++ b/linden/indra/test/io.cpp
@@ -1151,7 +1151,7 @@ namespace tut
1151 chain.push_back(LLIOPipe::ptr_t(new LLPipeStringInjector("hi"))); 1151 chain.push_back(LLIOPipe::ptr_t(new LLPipeStringInjector("hi")));
1152 chain.push_back(LLIOPipe::ptr_t(new LLIOSocketWriter(client))); 1152 chain.push_back(LLIOPipe::ptr_t(new LLIOSocketWriter(client)));
1153 chain.push_back(LLIOPipe::ptr_t(new LLIONull)); 1153 chain.push_back(LLIOPipe::ptr_t(new LLIONull));
1154 mPump->addChain(chain, 0.2); 1154 mPump->addChain(chain, 0.2f);
1155 chain.clear(); 1155 chain.clear();
1156 1156
1157 // pump for a bit and make sure all 3 chains are running 1157 // pump for a bit and make sure all 3 chains are running
diff --git a/linden/indra/test/llcontrol_tut.cpp b/linden/indra/test/llcontrol_tut.cpp
new file mode 100644
index 0000000..aabe205
--- /dev/null
+++ b/linden/indra/test/llcontrol_tut.cpp
@@ -0,0 +1,147 @@
1/**
2 * @file llcontrol_tut.cpp
3 * @date February 2008
4 * @brief control group unit tests
5 *
6 * $LicenseInfo:firstyear=2008&license=viewergpl$
7 *
8 * Copyright (c) 2008, Linden Research, Inc.
9 *
10 * Second Life Viewer Source Code
11 * The source code in this file ("Source Code") is provided by Linden Lab
12 * to you under the terms of the GNU General Public License, version 2.0
13 * ("GPL"), unless you have obtained a separate licensing agreement
14 * ("Other License"), formally executed by you and Linden Lab. Terms of
15 * the GPL can be found in doc/GPL-license.txt in this distribution, or
16 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
17 *
18 * There are special exceptions to the terms and conditions of the GPL as
19 * it is applied to this Source Code. View the full text of the exception
20 * in the file doc/FLOSS-exception.txt in this software distribution, or
21 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
22 *
23 * By copying, modifying or distributing this software, you acknowledge
24 * that you have read and understood your obligations described above,
25 * and agree to abide by those obligations.
26 *
27 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
28 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
29 * COMPLETENESS OR PERFORMANCE.
30 * $/LicenseInfo$
31 */
32
33#include "linden_common.h"
34
35#include <tut/tut.h>
36#include "lltut.h"
37
38#include "llcontrol.h"
39#include "llsdserialize.h"
40
41namespace tut
42{
43
44 struct control_group
45 {
46 LLControlGroup* mCG;
47 LLString mTestConfigDir;
48 LLString mTestConfigFile;
49 static bool mListenerFired;
50 control_group()
51 {
52 mCG = new LLControlGroup;
53 LLUUID random;
54 random.generate();
55 // generate temp dir
56 std::ostringstream oStr;
57 oStr << "/tmp/llcontrol-test-" << random << "/";
58 mTestConfigDir = oStr.str();
59 mTestConfigFile = mTestConfigDir + "settings.xml";
60 LLFile::mkdir(mTestConfigDir.c_str());
61 LLSD config;
62 config["TestSetting"]["Comment"] = "Dummy setting used for testing";
63 config["TestSetting"]["Persist"] = 1;
64 config["TestSetting"]["Type"] = "U32";
65 config["TestSetting"]["Value"] = 12;
66 writeSettingsFile(config);
67 }
68 ~control_group()
69 {
70 //Remove test files
71 delete mCG;
72 }
73 void writeSettingsFile(const LLSD& config)
74 {
75 llofstream file(mTestConfigFile.c_str());
76 if (file.is_open())
77 {
78 LLSDSerialize::toPrettyXML(config, file);
79 }
80 file.close();
81 }
82 static bool handleListenerTest(const LLSD& newvalue)
83 {
84 control_group::mListenerFired = true;
85 return true;
86 }
87 };
88
89 bool control_group::mListenerFired = false;
90
91 typedef test_group<control_group> control_group_test;
92 typedef control_group_test::object control_group_t;
93 control_group_test tut_control_group("control_group");
94
95 //load settings from files - LLSD
96 template<> template<>
97 void control_group_t::test<1>()
98 {
99 int results = mCG->loadFromFile(mTestConfigFile.c_str());
100 ensure("number of settings", (results == 1));
101 ensure("value of setting", (mCG->getU32("TestSetting") == 12));
102 }
103
104 //save settings to files
105 template<> template<>
106 void control_group_t::test<2>()
107 {
108 int results = mCG->loadFromFile(mTestConfigFile.c_str());
109 mCG->setU32("TestSetting", 13);
110 ensure_equals("value of changed setting", mCG->getU32("TestSetting"), 13);
111 LLControlGroup test_cg;
112 LLString temp_test_file = (mTestConfigDir + "setting_llsd_temp.xml");
113 mCG->saveToFile(temp_test_file.c_str(), TRUE);
114 results = test_cg.loadFromFile(temp_test_file.c_str());
115 ensure("number of changed settings loaded", (results == 1));
116 ensure("value of changed settings loaded", (test_cg.getU32("TestSetting") == 13));
117 }
118
119 //priorities
120 template<> template<>
121 void control_group_t::test<3>()
122 {
123 int results = mCG->loadFromFile(mTestConfigFile.c_str());
124 LLControlVariable* control = mCG->getControl("TestSetting");
125 LLSD new_value = 13;
126 control->setValue(new_value, FALSE);
127 ensure_equals("value of changed setting", mCG->getU32("TestSetting"), 13);
128 LLControlGroup test_cg;
129 LLString temp_test_file = (mTestConfigDir + "setting_llsd_persist_temp.xml");
130 mCG->saveToFile(temp_test_file.c_str(), TRUE);
131 results = test_cg.loadFromFile(temp_test_file.c_str());
132 //If we haven't changed any settings, then we shouldn't have any settings to load
133 ensure("number of non-persisted changed settings loaded", (results == 0));
134 }
135
136 //listeners
137 template<> template<>
138 void control_group_t::test<4>()
139 {
140 int results = mCG->loadFromFile(mTestConfigFile.c_str());
141 ensure("number of settings", (results == 1));
142 mCG->getControl("TestSetting")->getSignal()->connect(boost::bind(&this->handleListenerTest, _1));
143 mCG->setU32("TestSetting", 13);
144 ensure("listener fired on changed setting", mListenerFired);
145 }
146
147}
diff --git a/linden/indra/test/llmessageconfig_tut.cpp b/linden/indra/test/llmessageconfig_tut.cpp
index b709bfc..e5dd328 100644
--- a/linden/indra/test/llmessageconfig_tut.cpp
+++ b/linden/indra/test/llmessageconfig_tut.cpp
@@ -35,7 +35,6 @@
35#include "lltut.h" 35#include "lltut.h"
36#include "llsdserialize.h" 36#include "llsdserialize.h"
37#include "llfile.h" 37#include "llfile.h"
38#include "lldir.h"
39#include "lltimer.h" 38#include "lltimer.h"
40#include "llframetimer.h" 39#include "llframetimer.h"
41#include "llsdutil.h" 40#include "llsdutil.h"
@@ -51,7 +50,11 @@ namespace tut
51 random.generate(); 50 random.generate();
52 // generate temp dir 51 // generate temp dir
53 std::ostringstream oStr; 52 std::ostringstream oStr;
53#if LL_WINDOWS
54 oStr << "llmessage-config-test-" << random;
55#else
54 oStr << "/tmp/llmessage-config-test-" << random; 56 oStr << "/tmp/llmessage-config-test-" << random;
57#endif
55 mTestConfigDir = oStr.str(); 58 mTestConfigDir = oStr.str();
56 LLFile::mkdir(mTestConfigDir.c_str()); 59 LLFile::mkdir(mTestConfigDir.c_str());
57 writeConfigFile(LLSD()); 60 writeConfigFile(LLSD());
@@ -199,4 +202,23 @@ namespace tut
199 LLMessageConfig::getServerDefaultFlavor(), 202 LLMessageConfig::getServerDefaultFlavor(),
200 LLMessageConfig::LLSD_FLAVOR); 203 LLMessageConfig::LLSD_FLAVOR);
201 } 204 }
205
206 template<> template<>
207 void LLMessageConfigTestObject::test<8>()
208 // tests that config changes are picked up/refreshed periodically
209 {
210 LLSD config;
211 config["serverDefaults"]["simulator"] = "template";
212 config["messages"]["msg1"]["flavor"] = "llsd";
213 config["messages"]["msg1"]["only-send-latest"] = true;
214 config["messages"]["msg2"]["flavor"] = "llsd";
215 config["messages"]["msg2"]["only-send-latest"] = false;
216 LLMessageConfig::useConfig(config);
217 ensure_equals("Ensure msg1 exists, sent latest-only",
218 LLMessageConfig::onlySendLatest("msg1"),
219 true);
220 ensure_equals("Ensure msg2 exists, sent latest-only",
221 LLMessageConfig::onlySendLatest("msg2"),
222 false);
223 }
202} 224}
diff --git a/linden/indra/test/llmessagetemplateparser_tut.cpp b/linden/indra/test/llmessagetemplateparser_tut.cpp
index fe8e34c..7634e90 100644
--- a/linden/indra/test/llmessagetemplateparser_tut.cpp
+++ b/linden/indra/test/llmessagetemplateparser_tut.cpp
@@ -56,7 +56,7 @@ namespace tut
56 56
57 char * prehash(const char * name) 57 char * prehash(const char * name)
58 { 58 {
59 return gMessageStringTable.getString(name); 59 return LLMessageStringTable::getInstance()->getString(name);
60 } 60 }
61 61
62 void ensure_block_attributes(std::string identifier, 62 void ensure_block_attributes(std::string identifier,
diff --git a/linden/indra/test/llnamevalue_tut.cpp b/linden/indra/test/llnamevalue_tut.cpp
index d38913a..f604e84 100644
--- a/linden/indra/test/llnamevalue_tut.cpp
+++ b/linden/indra/test/llnamevalue_tut.cpp
@@ -42,133 +42,7 @@ namespace tut
42 { 42 {
43 namevalue_test() 43 namevalue_test()
44 { 44 {
45 mExpectedNameValueReference.string = NULL;
46 mExpectedNameValueType = NVT_NULL;
47 mCallbackCount = 0;
48 } 45 }
49
50 ~namevalue_test()
51 {
52 reset();
53 };
54
55 void reset()
56 {
57 switch(mExpectedNameValueType)
58 {
59 case NVT_STRING:
60 case NVT_ASSET:
61 delete [] mExpectedNameValueReference.string;
62 mExpectedNameValueReference.string = NULL;
63 break;
64 case NVT_F32:
65 delete mExpectedNameValueReference.f32;
66 mExpectedNameValueReference.f32 = NULL;
67 break;
68 case NVT_S32:
69 delete mExpectedNameValueReference.s32;
70 mExpectedNameValueReference.s32 = NULL;
71 break;
72 case NVT_U32:
73 delete mExpectedNameValueReference.u32;
74 mExpectedNameValueReference.u32 = NULL;
75 break;
76 case NVT_VEC3:
77 delete mExpectedNameValueReference.vec3;
78 mExpectedNameValueReference.vec3 = NULL;
79 break;
80 case NVT_U64:
81 delete mExpectedNameValueReference.u64;
82 mExpectedNameValueReference.u64 = NULL;
83 default:
84 break;
85 }
86
87 mExpectedNameValueType = NVT_NULL;
88 mCallbackCount = 0;
89 }
90
91 void setExpectedResult(ENameValueType type, void* value)
92 {
93 reset();
94 mExpectedNameValueType = type;
95 switch(type)
96 {
97 case NVT_STRING:
98 case NVT_ASSET:
99 mExpectedNameValueReference.string = new char[strlen((const char*) value)+1];
100 strcpy(mExpectedNameValueReference.string, (const char*) value);
101 break;
102 case NVT_F32:
103 mExpectedNameValueReference.f32 = new F32(*((F32*) value));
104 break;
105 case NVT_S32:
106 mExpectedNameValueReference.s32 = new S32(*((S32*) value));
107 break;
108 case NVT_U32:
109 mExpectedNameValueReference.u32 = new U32(*((U32*) value));
110 break;
111 case NVT_VEC3:
112 mExpectedNameValueReference.vec3 = new LLVector3(*((LLVector3*) value));
113 break;
114 case NVT_U64:
115 mExpectedNameValueReference.u64 = new U64(*((U64*) value));
116 default:
117 break;
118 }
119 }
120
121 void verifyChange(LLNameValue* changed)
122 {
123 std::string str = "";
124 str += "Expected Value of type: ";
125 str += NameValueTypeStrings[mExpectedNameValueType];
126 str += "not equal";
127
128 switch(mExpectedNameValueType)
129 {
130 case NVT_STRING:
131 ensure_memory_matches(str.c_str(), changed->getString(), strlen(changed->getString()), mExpectedNameValueReference.string, strlen(mExpectedNameValueReference.string));
132 break;
133 case NVT_ASSET:
134 ensure_memory_matches(str.c_str(), changed->getAsset(), strlen(changed->getAsset()), mExpectedNameValueReference.string, strlen(mExpectedNameValueReference.string));
135 break;
136 case NVT_F32:
137 ensure(str, *(changed->getF32()) == *mExpectedNameValueReference.f32);
138 break;
139 case NVT_S32:
140 ensure(str, *(changed->getS32()) == *mExpectedNameValueReference.s32);
141 break;
142 case NVT_U32:
143 ensure(str, *(changed->getU32()) == *mExpectedNameValueReference.u32);
144 break;
145 case NVT_VEC3:
146 ensure(str, *(changed->getVec3()) == *mExpectedNameValueReference.vec3);
147 break;
148 case NVT_U64:
149 ensure(str, *(changed->getU64()) == *mExpectedNameValueReference.u64);
150 break;
151 default:
152 break;
153 }
154 }
155
156 void HandleCallback(LLNameValue* changed)
157 {
158 mCallbackCount++;
159 verifyChange(changed);
160 ensure("Callback called more than once", mCallbackCount == 1);
161 }
162
163 static void NameValueCallbackFunction(LLNameValue* changed, void** data)
164 {
165 namevalue_test* pNameValue = (namevalue_test*)data;
166 pNameValue->HandleCallback(changed);
167 }
168
169 ENameValueType mExpectedNameValueType;
170 UNameValueReference mExpectedNameValueReference;
171 int mCallbackCount;
172 }; 46 };
173 typedef test_group<namevalue_test> namevalue_t; 47 typedef test_group<namevalue_test> namevalue_t;
174 typedef namevalue_t::object namevalue_object_t; 48 typedef namevalue_t::object namevalue_object_t;
@@ -225,33 +99,33 @@ namespace tut
225 ensure("3. getS32 failed", *nValue3.getS32() == -43456787); 99 ensure("3. getS32 failed", *nValue3.getS32() == -43456787);
226 ensure("sendToData or sendToViewer failed", nValue3.sendToData() && !nValue3.sendToViewer()); 100 ensure("sendToData or sendToViewer failed", nValue3.sendToData() && !nValue3.sendToViewer());
227 101
228 LLNameValue nValue4("SecondLife", "<1.0, 2.0, 3.0>", "VEC3", "CB", "SV"); 102 LLNameValue nValue4("SecondLife", "<1.0, 2.0, 3.0>", "VEC3", "RW", "SV");
229 LLVector3 llvec4(1.0, 2.0, 3.0); 103 LLVector3 llvec4(1.0, 2.0, 3.0);
230 ensure("4. getTypeEnum failed", nValue4.getTypeEnum() == NVT_VEC3); 104 ensure("4. getTypeEnum failed", nValue4.getTypeEnum() == NVT_VEC3);
231 ensure("4. getClassEnum failed", nValue4.getClassEnum() == NVC_CALLBACK); 105 ensure("4. getClassEnum failed", nValue4.getClassEnum() == NVC_READ_WRITE);
232 ensure("4. getSendtoEnum failed", nValue4.getSendtoEnum() == NVS_SIM_VIEWER); 106 ensure("4. getSendtoEnum failed", nValue4.getSendtoEnum() == NVS_SIM_VIEWER);
233 ensure("4. getVec3 failed", *nValue4.getVec3() == llvec4); 107 ensure("4. getVec3 failed", *nValue4.getVec3() == llvec4);
234 ensure("4. sendToData or sendToViewer failed", !nValue4.sendToData() && nValue4.sendToViewer()); 108 ensure("4. sendToData or sendToViewer failed", !nValue4.sendToData() && nValue4.sendToViewer());
235 109
236 LLNameValue nValue5("SecondLife", "-1.0, 2.4, 3", "VEC3", "CALLBACK", "SIM_VIEWER"); 110 LLNameValue nValue5("SecondLife", "-1.0, 2.4, 3", "VEC3", "RW", "SIM_VIEWER");
237 LLVector3 llvec5(-1.0f, 2.4f, 3); 111 LLVector3 llvec5(-1.0f, 2.4f, 3);
238 ensure("5. getTypeEnum failed", nValue5.getTypeEnum() == NVT_VEC3); 112 ensure("5. getTypeEnum failed", nValue5.getTypeEnum() == NVT_VEC3);
239 ensure("5. getClassEnum failed", nValue5.getClassEnum() == NVC_CALLBACK); 113 ensure("5. getClassEnum failed", nValue5.getClassEnum() == NVC_READ_WRITE);
240 ensure("5. getSendtoEnum failed", nValue5.getSendtoEnum() == NVS_SIM_VIEWER); 114 ensure("5. getSendtoEnum failed", nValue5.getSendtoEnum() == NVS_SIM_VIEWER);
241 ensure("5. getVec3 failed", *nValue5.getVec3() == llvec5); 115 ensure("5. getVec3 failed", *nValue5.getVec3() == llvec5);
242 ensure("5. sendToData or sendToViewer failed", !nValue5.sendToData() && nValue5.sendToViewer()); 116 ensure("5. sendToData or sendToViewer failed", !nValue5.sendToData() && nValue5.sendToViewer());
243 117
244 LLNameValue nValue6("SecondLife", "89764323", "U32", "CALLBACK", "DSV"); 118 LLNameValue nValue6("SecondLife", "89764323", "U32", "RW", "DSV");
245 ensure("6. getTypeEnum failed", nValue6.getTypeEnum() == NVT_U32); 119 ensure("6. getTypeEnum failed", nValue6.getTypeEnum() == NVT_U32);
246 ensure("6. getClassEnum failed", nValue6.getClassEnum() == NVC_CALLBACK); 120 ensure("6. getClassEnum failed", nValue6.getClassEnum() == NVC_READ_WRITE);
247 ensure("6. getSendtoEnum failed", nValue6.getSendtoEnum() == NVS_DATA_SIM_VIEWER); 121 ensure("6. getSendtoEnum failed", nValue6.getSendtoEnum() == NVS_DATA_SIM_VIEWER);
248 ensure("6. getU32 failed", *nValue6.getU32() == 89764323); 122 ensure("6. getU32 failed", *nValue6.getU32() == 89764323);
249 ensure("6. sendToData or sendToViewer failed", nValue6.sendToData() && nValue6.sendToViewer()); 123 ensure("6. sendToData or sendToViewer failed", nValue6.sendToData() && nValue6.sendToViewer());
250 124
251 LLNameValue nValue7("SecondLife", "89764323323232", "U64", "CALLBACK", "SIM_SPACE_VIEWER"); 125 LLNameValue nValue7("SecondLife", "89764323323232", "U64", "RW", "SIM_SPACE_VIEWER");
252 U64 u64_7 = U64L(89764323323232); 126 U64 u64_7 = U64L(89764323323232);
253 ensure("7. getTypeEnum failed", nValue7.getTypeEnum() == NVT_U64); 127 ensure("7. getTypeEnum failed", nValue7.getTypeEnum() == NVT_U64);
254 ensure("7. getClassEnum failed", nValue7.getClassEnum() == NVC_CALLBACK); 128 ensure("7. getClassEnum failed", nValue7.getClassEnum() == NVC_READ_WRITE);
255 ensure("7. getSendtoEnum failed", nValue7.getSendtoEnum() == NVS_DATA_SIM_VIEWER); 129 ensure("7. getSendtoEnum failed", nValue7.getSendtoEnum() == NVS_DATA_SIM_VIEWER);
256 ensure("7. getU32 failed", *nValue7.getU64() == u64_7); 130 ensure("7. getU32 failed", *nValue7.getU64() == u64_7);
257 ensure("7. sendToData or sendToViewer failed", nValue7.sendToData() && nValue7.sendToViewer()); 131 ensure("7. sendToData or sendToViewer failed", nValue7.sendToData() && nValue7.sendToViewer());
@@ -288,30 +162,30 @@ namespace tut
288 ensure("3. getSendtoEnum failed", nValue3.getSendtoEnum() == NVS_SIM); 162 ensure("3. getSendtoEnum failed", nValue3.getSendtoEnum() == NVS_SIM);
289 ensure("3. getS32 failed", *nValue3.getS32() == -43456787); 163 ensure("3. getS32 failed", *nValue3.getS32() == -43456787);
290 164
291 LLNameValue nValue4("SecondLife", "<1.0, 2.0, 3.0>", "VEC3", "CB"); 165 LLNameValue nValue4("SecondLife", "<1.0, 2.0, 3.0>", "VEC3", "RW");
292 LLVector3 llvec4(1.0, 2.0, 3.0); 166 LLVector3 llvec4(1.0, 2.0, 3.0);
293 ensure("4. getTypeEnum failed", nValue4.getTypeEnum() == NVT_VEC3); 167 ensure("4. getTypeEnum failed", nValue4.getTypeEnum() == NVT_VEC3);
294 ensure("4. getClassEnum failed", nValue4.getClassEnum() == NVC_CALLBACK); 168 ensure("4. getClassEnum failed", nValue4.getClassEnum() == NVC_READ_WRITE);
295 ensure("4. getSendtoEnum failed", nValue4.getSendtoEnum() == NVS_SIM); 169 ensure("4. getSendtoEnum failed", nValue4.getSendtoEnum() == NVS_SIM);
296 ensure("4. getVec3 failed", *nValue4.getVec3() == llvec4); 170 ensure("4. getVec3 failed", *nValue4.getVec3() == llvec4);
297 171
298 LLNameValue nValue5("SecondLife", "-1.0, 2.4, 3", "VEC3", "CALLBACK"); 172 LLNameValue nValue5("SecondLife", "-1.0, 2.4, 3", "VEC3", "RW");
299 LLVector3 llvec5(-1.0f, 2.4f, 3); 173 LLVector3 llvec5(-1.0f, 2.4f, 3);
300 ensure("5. getTypeEnum failed", nValue5.getTypeEnum() == NVT_VEC3); 174 ensure("5. getTypeEnum failed", nValue5.getTypeEnum() == NVT_VEC3);
301 ensure("5. getClassEnum failed", nValue5.getClassEnum() == NVC_CALLBACK); 175 ensure("5. getClassEnum failed", nValue5.getClassEnum() == NVC_READ_WRITE);
302 ensure("5. getSendtoEnum failed", nValue5.getSendtoEnum() == NVS_SIM); 176 ensure("5. getSendtoEnum failed", nValue5.getSendtoEnum() == NVS_SIM);
303 ensure("5. getVec3 failed", *nValue5.getVec3() == llvec5); 177 ensure("5. getVec3 failed", *nValue5.getVec3() == llvec5);
304 178
305 LLNameValue nValue6("SecondLife", "89764323", "U32", "CALLBACK"); 179 LLNameValue nValue6("SecondLife", "89764323", "U32", "RW");
306 ensure("6. getTypeEnum failed", nValue6.getTypeEnum() == NVT_U32); 180 ensure("6. getTypeEnum failed", nValue6.getTypeEnum() == NVT_U32);
307 ensure("6. getClassEnum failed", nValue6.getClassEnum() == NVC_CALLBACK); 181 ensure("6. getClassEnum failed", nValue6.getClassEnum() == NVC_READ_WRITE);
308 ensure("6. getSendtoEnum failed", nValue6.getSendtoEnum() == NVS_SIM); 182 ensure("6. getSendtoEnum failed", nValue6.getSendtoEnum() == NVS_SIM);
309 ensure("6. getU32 failed", *nValue6.getU32() == 89764323); 183 ensure("6. getU32 failed", *nValue6.getU32() == 89764323);
310 184
311 LLNameValue nValue7("SecondLife", "89764323323232", "U64", "CALLBACK"); 185 LLNameValue nValue7("SecondLife", "89764323323232", "U64", "RW");
312 U64 u64_7 = U64L(89764323323232); 186 U64 u64_7 = U64L(89764323323232);
313 ensure("7. getTypeEnum failed", nValue7.getTypeEnum() == NVT_U64); 187 ensure("7. getTypeEnum failed", nValue7.getTypeEnum() == NVT_U64);
314 ensure("7. getClassEnum failed", nValue7.getClassEnum() == NVC_CALLBACK); 188 ensure("7. getClassEnum failed", nValue7.getClassEnum() == NVC_READ_WRITE);
315 ensure("7. getSendtoEnum failed", nValue7.getSendtoEnum() == NVS_SIM); 189 ensure("7. getSendtoEnum failed", nValue7.getSendtoEnum() == NVS_SIM);
316 ensure("7. getU32 failed", *nValue7.getU64() == u64_7); 190 ensure("7. getU32 failed", *nValue7.getU64() == u64_7);
317 } 191 }
@@ -343,208 +217,118 @@ namespace tut
343 ensure("3. getClassEnum failed", nValue3.getClassEnum() == NVC_READ_ONLY); 217 ensure("3. getClassEnum failed", nValue3.getClassEnum() == NVC_READ_ONLY);
344 ensure("3. getSendtoEnum failed", nValue3.getSendtoEnum() == NVS_SIM); 218 ensure("3. getSendtoEnum failed", nValue3.getSendtoEnum() == NVS_SIM);
345 219
346 skip_fail("NVC_CALLBACK does not parse."); 220 LLNameValue nValue4("SecondLife", "VEC3", "READ_WRITE");
347
348 LLNameValue nValue4("SecondLife", "VEC3", "CALLBACK");
349 ensure("4. getTypeEnum failed", nValue4.getTypeEnum() == NVT_VEC3); 221 ensure("4. getTypeEnum failed", nValue4.getTypeEnum() == NVT_VEC3);
350 ensure("4. getClassEnum failed", nValue4.getClassEnum() == NVC_CALLBACK); 222 ensure("4. getClassEnum failed", nValue4.getClassEnum() == NVC_READ_WRITE);
351 ensure("4. getSendtoEnum failed", nValue4.getSendtoEnum() == NVS_SIM); 223 ensure("4. getSendtoEnum failed", nValue4.getSendtoEnum() == NVS_SIM);
352 224
353 LLNameValue nValue6("SecondLife", "U32", "CALLBACK"); 225 LLNameValue nValue6("SecondLife", "U32", "READ_WRITE");
354 ensure("6. getTypeEnum failed", nValue6.getTypeEnum() == NVT_U32); 226 ensure("6. getTypeEnum failed", nValue6.getTypeEnum() == NVT_U32);
355 ensure("6. getClassEnum failed", nValue6.getClassEnum() == NVC_CALLBACK); 227 ensure("6. getClassEnum failed", nValue6.getClassEnum() == NVC_READ_WRITE);
356 ensure("6. getSendtoEnum failed", nValue6.getSendtoEnum() == NVS_SIM); 228 ensure("6. getSendtoEnum failed", nValue6.getSendtoEnum() == NVS_SIM);
357 229
358 LLNameValue nValue7("SecondLife", "U64", "CALLBACK"); 230 LLNameValue nValue7("SecondLife", "U64", "READ_WRITE");
359 ensure("7. getTypeEnum failed", nValue7.getTypeEnum() == NVT_U64); 231 ensure("7. getTypeEnum failed", nValue7.getTypeEnum() == NVT_U64);
360 ensure("7. getClassEnum failed", nValue7.getClassEnum() == NVC_CALLBACK); 232 ensure("7. getClassEnum failed", nValue7.getClassEnum() == NVC_READ_WRITE);
361 ensure("7. getSendtoEnum failed", nValue7.getSendtoEnum() == NVS_SIM); 233 ensure("7. getSendtoEnum failed", nValue7.getSendtoEnum() == NVS_SIM);
362 } 234 }
363 235
364 template<> template<> 236 template<> template<>
365 void namevalue_object_t::test<5>() 237 void namevalue_object_t::test<5>()
366 { 238 {
367 skip_fail("callback will be called more than once."); 239 LLNameValue nValue("SecondLife", "This is a test", "STRING", "RW", "SIM");
368 LLNameValue nValue("SecondLife", "This is a test", "STRING", "CB", "SIM", NameValueCallbackFunction, (void**) this);
369 240
370 ensure("getString failed", (0 == strcmp(nValue.getString(),"This is a test"))); 241 ensure("getString failed", (0 == strcmp(nValue.getString(),"This is a test")));
371 reset();
372
373 setExpectedResult(NVT_STRING, (void*)"New Value");
374 nValue.setString("New Value");
375 ensure("String nonzero failed", nValue.nonzero() == TRUE);
376 reset();
377 setExpectedResult(NVT_STRING, (void*)"");
378 nValue.setString("");
379 ensure("String nonzero failed", nValue.nonzero() == FALSE);
380 reset();
381 } 242 }
382 243
383 template<> template<> 244 template<> template<>
384 void namevalue_object_t::test<6>() 245 void namevalue_object_t::test<6>()
385 { 246 {
386 skip_fail("callback will be called more than once."); 247 LLNameValue nValue("SecondLife", "This is a test", "ASSET", "RW", "S");
387 LLNameValue nValue("SecondLife", "This is a test", "ASSET", "CALLBACK", "S", NameValueCallbackFunction, (void**) this);
388 ensure("getAsset failed", (0 == strcmp(nValue.getAsset(),"This is a test"))); 248 ensure("getAsset failed", (0 == strcmp(nValue.getAsset(),"This is a test")));
389 reset();
390
391 setExpectedResult(NVT_ASSET, (void*)"New Value");
392 nValue.setAsset("New Value");
393 reset();
394 } 249 }
395 250
396 template<> template<> 251 template<> template<>
397 void namevalue_object_t::test<7>() 252 void namevalue_object_t::test<7>()
398 { 253 {
399 skip_fail("callback will be called more than once."); 254 LLNameValue nValue("SecondLife", "555555", "F32", "RW", "SIM");
400 LLNameValue nValue("SecondLife", "555555", "F32", "CB", "SIM", NameValueCallbackFunction, (void**) this);
401 255
402 ensure("getF32 failed",*nValue.getF32() == 555555.f); 256 ensure("getF32 failed",*nValue.getF32() == 555555.f);
403 reset();
404
405 F32 fVal = 0.1f;
406 setExpectedResult(NVT_F32, &fVal);
407 nValue.setF32(fVal);
408
409 fVal = -11111.1f;
410 setExpectedResult(NVT_F32, &fVal);
411 nValue.setF32(fVal);
412 ensure("F32 nonzero failed", nValue.nonzero() == TRUE);
413 reset();
414
415 fVal = 0.;
416 setExpectedResult(NVT_F32, &fVal);
417 nValue.setF32(fVal);
418 ensure("F32 nonzero failed", nValue.nonzero() == FALSE);
419 reset();
420 } 257 }
421 258
422 template<> template<> 259 template<> template<>
423 void namevalue_object_t::test<8>() 260 void namevalue_object_t::test<8>()
424 { 261 {
425 skip_fail("callback will be called more than once."); 262 LLNameValue nValue("SecondLife", "-5555", "S32", "RW", "SIM");
426 LLNameValue nValue("SecondLife", "-5555", "S32", "CB", "SIM", NameValueCallbackFunction, (void**) this);
427 263
428 ensure("getS32 failed", *nValue.getS32() == -5555); 264 ensure("getS32 failed", *nValue.getS32() == -5555);
429 reset();
430 265
431 S32 sVal = 0x7FFFFFFF; 266 S32 sVal = 0x7FFFFFFF;
432 setExpectedResult(NVT_S32, &sVal);
433 nValue.setS32(sVal); 267 nValue.setS32(sVal);
268 ensure("getS32 failed", *nValue.getS32() == sVal);
434 269
435 sVal = -0x7FFFFFFF; 270 sVal = -0x7FFFFFFF;
436 setExpectedResult(NVT_S32, &sVal);
437 nValue.setS32(sVal); 271 nValue.setS32(sVal);
438 ensure("S32 nonzero failed", nValue.nonzero() == TRUE); 272 ensure("getS32 failed", *nValue.getS32() == sVal);
439 reset();
440 273
441 sVal = 0; 274 sVal = 0;
442 setExpectedResult(NVT_S32, &sVal);
443 nValue.setS32(sVal); 275 nValue.setS32(sVal);
444 ensure("S32 nonzero failed", nValue.nonzero() == FALSE); 276 ensure("getS32 failed", *nValue.getS32() == sVal);
445 reset();
446 } 277 }
447 278
448 template<> template<> 279 template<> template<>
449 void namevalue_object_t::test<9>() 280 void namevalue_object_t::test<9>()
450 { 281 {
451 LLNameValue nValue("SecondLife", "<-3, 2, 1>", "VEC3", "CB", "SIM", NameValueCallbackFunction, (void**) this); 282 LLNameValue nValue("SecondLife", "<-3, 2, 1>", "VEC3", "RW", "SIM");
452 LLVector3 vecExpected(-3, 2, 1); 283 LLVector3 vecExpected(-3, 2, 1);
453 LLVector3 vec; 284 LLVector3 vec;
454 nValue.getVec3(vec); 285 nValue.getVec3(vec);
455 ensure("getVec3 failed", vec == vecExpected); 286 ensure("getVec3 failed", vec == vecExpected);
456 reset();
457
458 vecExpected.setVec(2, -1, 0);
459 setExpectedResult(NVT_VEC3, &vecExpected);
460 nValue.setVec3(vecExpected);
461 ensure("VEC3 nonzero failed", nValue.nonzero() == TRUE);
462 reset();
463
464 vecExpected.setVec(0, 0, 0);
465 setExpectedResult(NVT_VEC3, &vecExpected);
466 nValue.setVec3(vecExpected);
467 ensure("VEC3 nonzero failed", nValue.nonzero() == FALSE);
468 reset();
469 } 287 }
470 288
471 template<> template<> 289 template<> template<>
472 void namevalue_object_t::test<10>() 290 void namevalue_object_t::test<10>()
473 { 291 {
474 LLNameValue nValue("SecondLife", "12345678", "U32", "CB", "SIM", NameValueCallbackFunction, (void**) this); 292 LLNameValue nValue("SecondLife", "12345678", "U32", "RW", "SIM");
475 293
476 ensure("getU32 failed",*nValue.getU32() == 12345678); 294 ensure("getU32 failed",*nValue.getU32() == 12345678);
477 295
478 U32 val = 0xFFFFFFFF; 296 U32 val = 0xFFFFFFFF;
479 setExpectedResult(NVT_U32, &val);
480 nValue.setU32(val); 297 nValue.setU32(val);
481 ensure("U32 nonzero failed", nValue.nonzero() == TRUE); 298 ensure("U32 max", *nValue.getU32() == val);
482 reset();
483 299
484 val = 0; 300 val = 0;
485 setExpectedResult(NVT_U32, &val);
486 nValue.setU32(val); 301 nValue.setU32(val);
487 ensure("U32 nonzero failed", nValue.nonzero() == FALSE); 302 ensure("U32 min", *nValue.getU32() == val);
488 reset();
489 } 303 }
490 304
491 template<> template<> 305 template<> template<>
492 void namevalue_object_t::test<11>() 306 void namevalue_object_t::test<11>()
493 { 307 {
494 skip_fail("incomplete support for U64."); 308 //skip_fail("incomplete support for U64.");
495 LLNameValue nValue("SecondLife", "44444444444", "U64", "CB", "SIM", NameValueCallbackFunction, (void**) this); 309 LLNameValue nValue("SecondLife", "44444444444", "U64", "RW", "SIM");
496 310
497 ensure("getU64 failed",*nValue.getU64() == U64L(44444444444)); 311 ensure("getU64 failed",*nValue.getU64() == U64L(44444444444));
498 ensure("U64 nonzero failed", nValue.nonzero() == TRUE);
499 312
500 // there is no LLNameValue::setU64() 313 // there is no LLNameValue::setU64()
501 } 314 }
502 315
503 template<> template<>
504 void namevalue_object_t::test<12>()
505 {
506 LLNameValue nValue("SecondLife F32 RW SIM -333.337600");
507 F32 val = nValue.magnitude();
508 ensure_equals("F32 magnitude failed", val, 333.337600f);
509
510 LLNameValue nValue1("SecondLife STRING RW SIM 3300");
511 val = nValue1.magnitude();
512 ensure_equals("STRING magnitude failed",val,4.0f);
513
514 LLNameValue nValue2("SecondLife S32 RW SIM -3300");
515 val = nValue2.magnitude();
516 ensure_equals("S32 magnitude failed", val, 3300.);
517
518 LLNameValue nValue3("SecondLife U32 RW SIM 3300");
519 val = nValue3.magnitude();
520 ensure_equals("U32 magnitude failed", val, 3300.);
521
522 LLNameValue nValue4("SecondLife VEC3 RW SIM <1,2,3>");
523 LLVector3 vec(1,2,3);
524 val = nValue4.magnitude();
525 ensure_equals("VEC3 magnitude failed", val, vec.magVec());
526
527 skip_fail("incomplete support for U64.");
528 LLNameValue nValue5("SecondLife U64 RW SIM 12345");
529 val = nValue5.magnitude();
530 ensure_equals("U62 magnitude failed", val, 12345);
531 }
532 316
533 template<> template<> 317 template<> template<>
534 void namevalue_object_t::test<13>() 318 void namevalue_object_t::test<12>()
535 { 319 {
536 skip_fail("incomplete support for U64."); 320 //skip_fail("incomplete support for U64.");
537 LLNameValue nValue("SecondLife U64 RW DSV 44444444444"); 321 LLNameValue nValue("SecondLife U64 RW DSV 44444444444");
538 std::string ret_str = nValue.printNameValue(); 322 std::string ret_str = nValue.printNameValue();
539 323
540 ensure_equals("1:printNameValue failed",ret_str,"SecondLife U64 RW DSV 44444444444"); 324 ensure_equals("1:printNameValue failed",ret_str,"SecondLife U64 RW DSV 44444444444");
541 325
542 LLNameValue nValue1(ret_str.c_str()); 326 LLNameValue nValue1(ret_str.c_str());
543 ensure_equals("Serialization of printNameValue failed", nValue, nValue1); 327 ensure_equals("Serialization of printNameValue failed", *nValue.getU64(), *nValue1.getU64());
544 } 328 }
545 329
546 template<> template<> 330 template<> template<>
547 void namevalue_object_t::test<14>() 331 void namevalue_object_t::test<13>()
548 { 332 {
549 LLNameValue nValue("SecondLife STRING RW DSV 44444444444"); 333 LLNameValue nValue("SecondLife STRING RW DSV 44444444444");
550 std::string ret_str = nValue.printData(); 334 std::string ret_str = nValue.printData();
@@ -556,7 +340,7 @@ namespace tut
556 } 340 }
557 341
558 template<> template<> 342 template<> template<>
559 void namevalue_object_t::test<15>() 343 void namevalue_object_t::test<14>()
560 { 344 {
561 LLNameValue nValue("SecodLife STRING RW SIM 22222"); 345 LLNameValue nValue("SecodLife STRING RW SIM 22222");
562 std::ostringstream stream1,stream2,stream3, stream4, stream5; 346 std::ostringstream stream1,stream2,stream3, stream4, stream5;
@@ -575,271 +359,39 @@ namespace tut
575 stream4<< nValue3; 359 stream4<< nValue3;
576 ensure_equals("U32 << failed",stream4.str(),"122222"); 360 ensure_equals("U32 << failed",stream4.str(),"122222");
577 361
578 skip_fail("incomplete support for U64."); 362 // I don't think we use U64 name value pairs. JC
579 LLNameValue nValue4("SecodLife U64 RW SIM 22222"); 363 //skip_fail("incomplete support for U64.");
580 stream5<< nValue4; 364 //LLNameValue nValue4("SecodLife U64 RW SIM 22222");
581 ensure("U64 << failed",0 == strcmp((stream5.str()).c_str(),"22222")); 365 //stream5<< nValue4;
582 } 366 //ensure("U64 << failed",0 == strcmp((stream5.str()).c_str(),"22222"));
583
584 template<> template<>
585 void namevalue_object_t::test<16>()
586 {
587 LLNameValue nValue1("SecondLife STRING RW DSV 44444");
588 LLNameValue nValue2("SecondLife STRING RW SIM 33333");
589 LLNameValue nValue3("SecondLife");
590 nValue3 = nValue1 + nValue2;
591 ensure("1:operator+ failed",(0==strcmp(nValue3.getString(),"4444433333")));
592
593 LLNameValue nValue4("SecondLife F32 R DSV 44444");
594 LLNameValue nValue5("SecondLife F32 RW SIM 33333");
595 LLNameValue nValue6("SecondLife");
596 nValue6 = nValue4 + nValue5;
597 ensure_equals("2:operator+ failed",*nValue6.getF32(),77777.0);
598
599 LLNameValue nValue7("SecondLife F32 R DSV 44444");
600 LLNameValue nValue8("SecondLife S32 RW SIM 33333");
601 LLNameValue nValue9("SecondLife F32");
602 nValue9 = nValue7 + nValue8;
603 ensure_equals("3:operator+ failed",*nValue9.getF32(),77777.0);
604
605 LLNameValue nValue10("SecondLife VEC3 RW SIM <4, 4, 4>");
606 LLNameValue nValue11("SecondLife VEC3 RW SV <3, 3, 3>");
607 LLNameValue nValue12("SecondLife VEC3");
608 nValue12 = nValue10 + nValue11;
609 LLVector3 vec(7,7,7);
610 ensure_equals("4:operator+ failed",*nValue12.getVec3(), vec);
611 }
612
613 template<> template<>
614 void namevalue_object_t::test<17>()
615 {
616 LLNameValue nValue7(" SecondLife S32 RW SIM 22222");
617 LLNameValue nValue8(" SecondLife F32 RW SIM 33333");
618 LLNameValue nValue9(" SecondLife F32");
619 nValue9 = nValue7 - nValue8;
620 ensure_equals("1:operator- failed",*nValue9.getF32(),-11111.f);
621
622 LLNameValue nValue10(" SecondLife VEC3 RW SIM <2, 2, 2>");
623 LLNameValue nValue11(" SecondLife VEC3 RW SIM <3, 3, 3>");
624 LLNameValue nValue12(" SecondLife VEC3");
625 LLVector3 vec(-1,-1,-1);
626 nValue12 = nValue10 - nValue11;
627 ensure_equals("2:operator- failed",*nValue12.getVec3(), vec);
628 }
629
630 template<> template<>
631 void namevalue_object_t::test<18>()
632 {
633
634 LLNameValue nValue1(" SecondLife F32 RW SIM 22222");
635 LLNameValue nValue2(" SecondLife F32 RW SIM 33333");
636 LLNameValue nValue3(" SecondLife F32");
637 nValue3 = nValue1 * nValue2;
638 ensure_equals("1:operator* failed",*nValue3.getF32(),740725926.f);
639
640 LLNameValue nValue4(" SecondLife S32 RW SIM 22222");
641 LLNameValue nValue5(" SecondLife F32 RW SIM 33333");
642 LLNameValue nValue6(" SecondLife F32");
643 nValue6 = nValue4 * nValue5;
644 ensure_equals("2:operator* failed",*nValue6.getF32(),740725926.f);
645
646 LLNameValue nValue10(" SecondLife VEC3 RW SIM <2, 2, 2>");
647 LLNameValue nValue11(" SecondLife VEC3 RW SIM <3, 3, 3>");
648 LLNameValue nValue12(" SecondLife F32");
649 LLVector3 vec1(2,2,2);
650 LLVector3 vec2(3,3,3);
651 nValue12 = nValue10 * nValue11;
652 ensure_equals("2:operator* failed",*nValue12.getF32(), (vec1 * vec2));
653 } 367 }
654 368
655 template<> template<> 369 template<> template<>
656 void namevalue_object_t::test<19>() 370 void namevalue_object_t::test<15>()
657 {
658 LLNameValue nValue1(" SecondLife S32 RW SIM 22222");
659 LLNameValue nValue2(" Virtual F32 RW SIM 44444");
660 LLNameValue nValue3(" SecondLife F32");
661 nValue3 = nValue1 / nValue2;
662 ensure_equals("1:operator/ failed",*nValue3.getF32(),0.5);
663
664 LLNameValue nValue4(" SecondLife F32 RW SIM 33333");
665 LLNameValue nValue5(" SecondLife S32 RW SIM 22222");
666 LLNameValue nValue6(" SecondLife F32");
667 nValue6 = nValue4 / nValue5;
668 ensure_equals("2:operator/ failed",*nValue6.getF32(),1.5);
669 }
670
671 template<> template<>
672 void namevalue_object_t::test<20>()
673 {
674 LLNameValue nValue1(" SecondLife S32 RW SIM 22222");
675 LLNameValue nValue2(" Virtual S32 RW SIM 33333");
676 LLNameValue nValue3(" SecondLife S32");
677 nValue3 = nValue1 % nValue2;
678 ensure_equals("1:operator% failed",*nValue3.getS32(),22222);
679
680 LLNameValue nValue4(" SecondLife U32 RW SIM 3");
681 LLNameValue nValue5(" SecondLife S32 RW SIM 2");
682 LLNameValue nValue6(" SecondLife S32");
683 nValue6 = nValue4 % nValue5;
684 ensure_equals("2:operator% failed",*nValue6.getS32(),1);
685
686 LLNameValue nValue10(" SecondLife VEC3 RW SIM <4, 5, 6>");
687 LLNameValue nValue11(" SecondLife VEC3 RW SIM <1, 2, 3>");
688 LLNameValue nValue12(" SecondLife VEC3");
689 LLVector3 vec1(4,5,6);
690 LLVector3 vec2(1,2,3);
691 LLVector3 vec3(vec1 % vec2);
692 nValue12 = nValue10 % nValue11;
693 ensure_equals("5:operator% failed",*nValue12.getVec3(), vec3);
694 }
695
696 template<> template<>
697 void namevalue_object_t::test<21>()
698 {
699 LLNameValue nValue1(" SecondLife STRING RW SIM 22222");
700 LLNameValue nValue2(" Virtual STRING RW SIM 22222");
701 ensure("1:operator== failed", nValue1 == nValue2);
702
703 LLNameValue nValue3(" SecondLife F32 RW SIM 33333");
704 LLNameValue nValue4(" Virtual F32 RW SIM 22222");
705 ensure("2:operator== failed",!(nValue3 == nValue4));
706
707 LLNameValue nValue5(" SecondLife STRING RW SIM 22222");
708 LLNameValue nValue6(" Virtual STRING RW SIM 33333");
709 ensure("3:operator== failed",!(nValue5 == nValue6));
710
711 LLNameValue nValue7(" SecondLife VEC3 RW SIM <2, 2, 2>");
712 LLNameValue nValue8(" Virtual VEC3 RW SIM <2, 2, 2>");
713 ensure("4:operator== failed",(nValue7 == nValue8));
714 }
715
716 template<> template<>
717 void namevalue_object_t::test<22>()
718 {
719 LLNameValue nValue1(" SecondLife STRING RW SIM 22222");
720 LLNameValue nValue2(" Virtual STRING RW SIM 33333");
721 bool b_ret = (nValue1 <= nValue2) ? 1 : 0;
722 ensure("1:operator<= failed",(1==b_ret));
723
724 LLNameValue nValue3(" SecondLife F32 RW SIM 33333");
725 LLNameValue nValue4(" Virtual F32 RW SIM 22222");
726 b_ret = (nValue3 <= nValue4) ? 1 : 0;
727 ensure("2:operator<= failed",(0==b_ret));
728 }
729
730 template<> template<>
731 void namevalue_object_t::test<23>()
732 {
733 LLNameValue nValue1(" SecondLife STRING RW SIM 22222");
734 LLNameValue nValue2(" Virtual STRING RW SIM 33333");
735 bool b_ret = (nValue1 >= nValue2) ? 1 : 0;
736 ensure("operator>= failed",!b_ret);
737
738 LLNameValue nValue3(" SecondLife F32 RW SIM 33333");
739 LLNameValue nValue4(" Virtual F32 RW SIM 22222");
740 b_ret = (nValue3 >= nValue4) ? 1 : 0;
741 ensure("2:operator<= failed",b_ret);
742
743 }
744
745 template<> template<>
746 void namevalue_object_t::test<24>()
747 {
748 LLNameValue nValue1(" SecondLife STRING RW SIM 33333");
749 LLNameValue nValue2(" Virtual STRING RW SIM 33333");
750 bool b_ret = (nValue1 < nValue2) ? 1 : 0;
751 ensure("operator< failed",!b_ret);
752
753 LLNameValue nValue3(" SecondLife F32 RW SIM 11111");
754 LLNameValue nValue4(" Virtual F32 RW SIM 22222");
755 b_ret = (nValue3 < nValue4) ? 1 : 0;
756 ensure("2:operator< failed",b_ret);
757
758 }
759
760 template<> template<>
761 void namevalue_object_t::test<25>()
762 {
763 LLNameValue nValue1(" SecondLife STRING RW SIM 33333");
764 LLNameValue nValue2(" Virtual STRING RW SIM 33333");
765 bool b_ret = (nValue1 > nValue2) ? 1 : 0;
766 ensure("1:operator> failed",!b_ret);
767
768 LLNameValue nValue3(" SecondLife F32 RW SIM 11111");
769 LLNameValue nValue4(" Virtual F32 RW SIM 22222");
770 b_ret = (nValue3 > nValue4) ? 1 : 0;
771 ensure("2:operator> failed",!b_ret);
772
773 LLNameValue nValue5(" SecondLife S32 RW SIM 22222");
774 LLNameValue nValue6(" Virtual F32 RW SIM 11111");
775 b_ret = (nValue5 > nValue6) ? 1 : 0;
776 ensure("3:operator> failed",b_ret);
777 }
778
779 template<> template<>
780 void namevalue_object_t::test<26>()
781 {
782 LLNameValue nValue1(" SecondLife STRING RW SIM 33333");
783 LLNameValue nValue2(" Virtual STRING RW SIM 33333");
784 bool b_ret = (nValue1 != nValue2) ? 1 : 0;
785 ensure("1:operator!= failed",!b_ret);
786
787 LLNameValue nValue3(" SecondLife F32 RW SIM 11111");
788 LLNameValue nValue4(" Virtual F32 RW SIM 22222");
789 b_ret = (nValue3 != nValue4) ? 1 : 0;
790 ensure("2:operator!= failed",b_ret);
791
792 }
793
794
795 template<> template<>
796 void namevalue_object_t::test<27>()
797 {
798 LLNameValue nValue1(" SecondLife F32 RW SIM 33333");
799 LLNameValue nValue2("Virtual");
800 nValue2 = -nValue1;
801 ensure_equals("1:operator unary- failed",*nValue2.getF32(), -33333.f);
802
803 LLNameValue nValue3(" SecondLife U32 RW SIM 11111");
804 LLNameValue nValue4("Virtual S32");
805 nValue4 = -nValue3;
806 ensure_equals("2:operator unary- failed",*nValue4.getS32(), -11111);
807
808 LLNameValue nValue5(" SecondLife VEC3 RW SIM <1, 1, 1>");
809 LLNameValue nValue6("Virtual VEC3");
810 LLVector3 vec(-1, -1, -1);
811 nValue6 = -nValue5;
812 ensure_equals("3:operator unary- failed",*nValue6.getVec3(), vec);
813 }
814
815 template<> template<>
816 void namevalue_object_t::test<28>()
817 { 371 {
818 LLNameValue nValue("SecondLife", "This is a test", "ASSET", "R", "S", NameValueCallbackFunction, (void**) this); 372 LLNameValue nValue("SecondLife", "This is a test", "ASSET", "R", "S");
819 373
820 ensure("getAsset failed", (0 == strcmp(nValue.getAsset(),"This is a test"))); 374 ensure("getAsset failed", (0 == strcmp(nValue.getAsset(),"This is a test")));
821 // this should not have updated as it is read only. 375 // this should not have updated as it is read only.
822 nValue.setAsset("New Value should not be updated"); 376 nValue.setAsset("New Value should not be updated");
823 ensure("setAsset on ReadOnly failed", (0 == strcmp(nValue.getAsset(),"This is a test"))); 377 ensure("setAsset on ReadOnly failed", (0 == strcmp(nValue.getAsset(),"This is a test")));
824 378
825 LLNameValue nValue1("SecondLife", "1234", "U32", "R", "S", NameValueCallbackFunction, (void**) this); 379 LLNameValue nValue1("SecondLife", "1234", "U32", "R", "S");
826 // this should not have updated as it is read only. 380 // this should not have updated as it is read only.
827 nValue1.setU32(4567); 381 nValue1.setU32(4567);
828 ensure("setU32 on ReadOnly failed", *nValue1.getU32() == 1234); 382 ensure("setU32 on ReadOnly failed", *nValue1.getU32() == 1234);
829 383
830 LLNameValue nValue2("SecondLife", "1234", "S32", "R", "S", NameValueCallbackFunction, (void**) this); 384 LLNameValue nValue2("SecondLife", "1234", "S32", "R", "S");
831 // this should not have updated as it is read only. 385 // this should not have updated as it is read only.
832 nValue2.setS32(4567); 386 nValue2.setS32(4567);
833 ensure("setS32 on ReadOnly failed", *nValue2.getS32() == 1234); 387 ensure("setS32 on ReadOnly failed", *nValue2.getS32() == 1234);
834 388
835 LLNameValue nValue3("SecondLife", "1234", "F32", "R", "S", NameValueCallbackFunction, (void**) this); 389 LLNameValue nValue3("SecondLife", "1234", "F32", "R", "S");
836 // this should not have updated as it is read only. 390 // this should not have updated as it is read only.
837 nValue3.setF32(4567); 391 nValue3.setF32(4567);
838 ensure("setF32 on ReadOnly failed", *nValue3.getF32() == 1234); 392 ensure("setF32 on ReadOnly failed", *nValue3.getF32() == 1234);
839 nValue3 = nValue3 * 2;
840 ensure("setF32 on ReadOnly failed", *nValue3.getF32() == 1234);
841 393
842 LLNameValue nValue4("SecondLife", "<1,2,3>", "VEC3", "R", "S", NameValueCallbackFunction, (void**) this); 394 LLNameValue nValue4("SecondLife", "<1,2,3>", "VEC3", "R", "S");
843 // this should not have updated as it is read only. 395 // this should not have updated as it is read only.
844 LLVector3 vec(4,5,6); 396 LLVector3 vec(4,5,6);
845 nValue3.setVec3(vec); 397 nValue3.setVec3(vec);
diff --git a/linden/indra/test/llsdmessagereader_tut.cpp b/linden/indra/test/llsdmessagereader_tut.cpp
index e52809f..04861c4 100755
--- a/linden/indra/test/llsdmessagereader_tut.cpp
+++ b/linden/indra/test/llsdmessagereader_tut.cpp
@@ -46,7 +46,7 @@ namespace tut
46 const std::string& expected_name) 46 const std::string& expected_name)
47 { 47 {
48 LLSDMessageReader msg; 48 LLSDMessageReader msg;
49 msg.setMessage(gMessageStringTable.getString(msg_name.c_str()), msg_data); 49 msg.setMessage(LLMessageStringTable::getInstance()->getString(msg_name.c_str()), msg_data);
50 ensure_equals("Ensure name", std::string(msg.getMessageName()), 50 ensure_equals("Ensure name", std::string(msg.getMessageName()),
51 expected_name); 51 expected_name);
52 } 52 }
diff --git a/linden/indra/test/llstreamtools_tut.cpp b/linden/indra/test/llstreamtools_tut.cpp
index 3e89282..c360cc1 100644
--- a/linden/indra/test/llstreamtools_tut.cpp
+++ b/linden/indra/test/llstreamtools_tut.cpp
@@ -491,7 +491,7 @@ namespace tut
491 is.str(str = "First Second \t \r\n Third Fourth-ShouldThisBePartOfFourth IsThisFifth\n"); 491 is.str(str = "First Second \t \r\n Third Fourth-ShouldThisBePartOfFourth IsThisFifth\n");
492 actual_result = ""; 492 actual_result = "";
493 ret = get_line(actual_result, is); 493 ret = get_line(actual_result, is);
494 expected_result = "First Second \t \n"; 494 expected_result = "First Second \t \r\n";
495 ensure_equals("get_line: 1", actual_result, expected_result); 495 ensure_equals("get_line: 1", actual_result, expected_result);
496 496
497 actual_result = ""; 497 actual_result = "";
@@ -545,7 +545,6 @@ namespace tut
545 template<> template<> 545 template<> template<>
546 void streamtools_object::test<12>() 546 void streamtools_object::test<12>()
547 { 547 {
548 skip_fail("get_line() incorrectly handles lone carriage return.");
549 std::string str; 548 std::string str;
550 std::string expected_result; 549 std::string expected_result;
551 std::string actual_result; 550 std::string actual_result;
@@ -554,10 +553,10 @@ namespace tut
554 553
555 // need to be check if this test case is wrong or the implementation is wrong. 554 // need to be check if this test case is wrong or the implementation is wrong.
556 is.clear(); 555 is.clear();
557 is.str(str = "Should not skip \r unless they are followed with newline .\r\n"); 556 is.str(str = "Should not skip lone \r.\r\n");
558 actual_result = ""; 557 actual_result = "";
559 ret = get_line(actual_result, is); 558 ret = get_line(actual_result, is);
560 expected_result = "Should not skip \r unless they are followed with newline .\n"; 559 expected_result = "Should not skip lone \r.\r\n";
561 ensure_equals("get_line: carriage return skipped even though not followed by newline", actual_result, expected_result); 560 ensure_equals("get_line: carriage return skipped even though not followed by newline", actual_result, expected_result);
562 } 561 }
563 562
@@ -804,37 +803,6 @@ namespace tut
804 template<> template<> 803 template<> template<>
805 void streamtools_object::test<21>() 804 void streamtools_object::test<21>()
806 { 805 {
807 skip_fail("get_brace_count() has bugs.");
808
809 std::string str;
810 std::string expected_result;
811 int count;
812
813 str = " { ";
814 count = get_brace_count(str);
815 ensure("get_brace_count: 1 for {", count == 1);
816
817 str = "\t}\t\t \n";
818 count = get_brace_count(str);
819 ensure("get_brace_count: 1 for {", count == -1);
820
821 str = "\t\t\t \n";
822 count = get_brace_count(str);
823 ensure("get_brace_count: 0 for no braces", count == 0);
824
825 str = "{ Remaining line not empty\n";
826 count = get_brace_count(str);
827 ensure("get_brace_count: 0 for remainign line not empty", count == 0);
828
829 /* shouldn't this return 1? */
830 str = "{ /*Remaining line in comment*/\n";
831 count = get_brace_count(str);
832 ensure("get_brace_count: 1 for { with remaining line in comment", count == 1);
833
834 /* shouldn't this return -1? */
835 str = " } //Remaining line in comment \n";
836 count = get_brace_count(str);
837 ensure("get_brace_count: -1 for } with remaining line in comment", count == -1);
838 } 806 }
839 807
840 //testcases for get_keyword_and_value() 808 //testcases for get_keyword_and_value()
@@ -860,8 +828,6 @@ namespace tut
860 template<> template<> 828 template<> template<>
861 void streamtools_object::test<23>() 829 void streamtools_object::test<23>()
862 { 830 {
863 skip_fail("get_keyword_and_value() has bugs.");
864
865 std::string s; 831 std::string s;
866 std::string keyword = "SOME PRIOR KEYWORD"; 832 std::string keyword = "SOME PRIOR KEYWORD";
867 std::string value = "SOME PRIOR VALUE"; 833 std::string value = "SOME PRIOR VALUE";
@@ -875,8 +841,6 @@ namespace tut
875 template<> template<> 841 template<> template<>
876 void streamtools_object::test<24>() 842 void streamtools_object::test<24>()
877 { 843 {
878 skip_fail("get_keyword_and_value() has bugs.");
879
880 std::string s; 844 std::string s;
881 std::string keyword = "SOME PRIOR KEYWORD"; 845 std::string keyword = "SOME PRIOR KEYWORD";
882 std::string value = "SOME PRIOR VALUE"; 846 std::string value = "SOME PRIOR VALUE";
diff --git a/linden/indra/test/lltemplatemessagebuilder_tut.cpp b/linden/indra/test/lltemplatemessagebuilder_tut.cpp
index 1b3d600..86b1fbd 100644
--- a/linden/indra/test/lltemplatemessagebuilder_tut.cpp
+++ b/linden/indra/test/lltemplatemessagebuilder_tut.cpp
@@ -65,7 +65,7 @@ namespace tut
65 LL_VERSION_PATCH, 65 LL_VERSION_PATCH,
66 FALSE, 66 FALSE,
67 "notasharedsecret"); 67 "notasharedsecret");
68 init_prehash_data(); 68 //init_prehash_data();
69 init = true; 69 init = true;
70 } 70 }
71 return LLMessageTemplate(_PREHASH_TestMessage, 1, MFT_HIGH); 71 return LLMessageTemplate(_PREHASH_TestMessage, 1, MFT_HIGH);
diff --git a/linden/indra/test/lltut.h b/linden/indra/test/lltut.h
index e5c2419..4e4af73 100644
--- a/linden/indra/test/lltut.h
+++ b/linden/indra/test/lltut.h
@@ -44,6 +44,16 @@ class LLSD;
44 44
45namespace tut 45namespace tut
46{ 46{
47 inline void ensure_approximately_equals(const char* msg, F64 actual, F64 expected, U32 frac_bits)
48 {
49 if(!is_approx_equal_fraction(actual, expected, frac_bits))
50 {
51 std::stringstream ss;
52 ss << (msg?msg:"") << (msg?": ":"") << "not equal actual: " << actual << " expected: " << expected;
53 throw tut::failure(ss.str().c_str());
54 }
55 }
56
47 inline void ensure_approximately_equals(const char* msg, F32 actual, F32 expected, U32 frac_bits) 57 inline void ensure_approximately_equals(const char* msg, F32 actual, F32 expected, U32 frac_bits)
48 { 58 {
49 if(!is_approx_equal_fraction(actual, expected, frac_bits)) 59 if(!is_approx_equal_fraction(actual, expected, frac_bits))
diff --git a/linden/indra/test/mass_properties_tut.cpp b/linden/indra/test/mass_properties_tut.cpp
new file mode 100644
index 0000000..08cfeac
--- /dev/null
+++ b/linden/indra/test/mass_properties_tut.cpp
@@ -0,0 +1,1008 @@
1/**
2 * @file mass_properties.cpp
3 * @author andrew@lindenlab.com
4 * @date 2007-12-20
5 * @brief Tests for the LLPrimMassProperties and LLObjectMassProperties classes
6 *
7 * $LicenseInfo:firstyear=2007&license=internal$
8 *
9 * Copyright (c) 2007-2008, Linden Research, Inc.
10 *
11 * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
12 * this source code is governed by the Linden Lab Source Code Disclosure
13 * Agreement ("Agreement") previously entered between you and Linden
14 * Lab. By accessing, using, copying, modifying or distributing this
15 * software, you acknowledge that you have been informed of your
16 * obligations under the Agreement and agree to abide by those obligations.
17 *
18 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
19 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
20 * COMPLETENESS OR PERFORMANCE.
21 * $/LicenseInfo$
22 */
23
24#include "linden_common.h"
25#include "lltut.h"
26#include <llmath/v3math.h>
27#include <llmath/llquaternion.h>
28#include <llphysics/abstract/utils/llinertiatensorutils.h>
29#include <llphysics/abstract/utils/llobjectmassproperties.h>
30#include <llphysics/abstract/utils/llprimmassproperties.h>
31#include <llphysics/abstract/utils/llphysicsvolumemanager.h>
32#include <llprimitive/llmaterialtable.h>
33#include <llprimitive/llprimitive.h>
34
35
36const F32 SMALL_RELATIVE_ERROR = 0.001f; // 0.1%
37const F32 SQRT_THREE = 1.732050808f;
38const F32 SQRT_SIX = 2.449489743f;
39
40namespace tut
41{
42 struct mass_properties_data
43 {
44 LLPrimMassProperties prim_properties;
45 LLObjectMassProperties object_properties;
46 };
47
48 typedef test_group<mass_properties_data> mass_properties_group;
49 typedef mass_properties_group::object mass_properties;
50 tut::mass_properties_group mp_test_group("mass properties");
51
52 template<> template<>
53 void mass_properties::test<1>()
54 {
55 // test SPHERE mass properties
56 LLPrimMassProperties prim_sphere;
57 prim_sphere.setUnitSphere();
58
59 F32 density = 1000.f;
60 F32 radius = 5.f;
61 F32 diameter = 2.f * radius;
62 LLVector3 scale(diameter, diameter, diameter);
63 LLObjectMassProperties obj_sphere(prim_sphere, scale, density);
64
65 F32 computed_mass = obj_sphere.getMass();
66 //LLVector3 center_of_mass
67 //obj_sphere.getCenterOfMass(center_of_mass);
68 LLMatrix3 inertia;
69 obj_sphere.getInertiaLocal(inertia);
70 F32 computed_inertia_eigenvalue = inertia.mMatrix[0][0];
71
72
73 // volume is normalized for scale = <1,1,1>
74 // V = 4/3 * PI * r^3
75 // inertia_eigenvalue = (2/5) * M * r^2
76 F32 volume = ( 4.f / 3.f ) * radius * radius * radius * F_PI;
77 F32 expected_mass = density * volume;
78 F32 expected_inertia_eigenvalue = ( 2.f / 5.f ) * expected_mass * radius * radius;
79
80 F32 error = fabs(computed_mass - expected_mass) / expected_mass;
81 ensure("expected sphere mass should match computed", error < SMALL_RELATIVE_ERROR);
82
83 error = fabs(computed_inertia_eigenvalue - expected_inertia_eigenvalue) / expected_inertia_eigenvalue;
84 ensure("expected sphere inertia should match computed", error < SMALL_RELATIVE_ERROR);
85 }
86
87 template<> template<>
88 void mass_properties::test<2>()
89 {
90 // test LLInertiaTensorUtils
91
92 // define a known inertia tensor in the center of mass frame
93 // from the numerical example in this paper:
94 // http://www.journaldatabase.org/articles/87064/Explicit_Exact_Formulas_f.html
95 F32 known_mass = 1873.23f;
96 LLVector3 known_center( 0.f, 0.f, 0.f );
97 LLMatrix3 known_inertia;
98 known_inertia.mMatrix[0][0] = 43520.33257f;
99 known_inertia.mMatrix[1][1] = 194711.28938f;
100 known_inertia.mMatrix[2][2] = 191168.76173f;
101
102 known_inertia.mMatrix[0][1] = -11996.20119f;
103 known_inertia.mMatrix[1][0] = -11996.20119f;
104
105 known_inertia.mMatrix[0][2] = 46343.16662f;
106 known_inertia.mMatrix[2][0] = 46343.16662f;
107
108 known_inertia.mMatrix[2][1] = -4417.66150f;
109 known_inertia.mMatrix[1][2] = -4417.66150f;
110
111 // the following two shifts should have null effect
112 {
113 LLVector3 first_shift(2.f, 3.f, 4.f);
114 LLVector3 second_shift = - first_shift;
115 LLMatrix3 inertia = known_inertia;
116
117 LLInertiaTensorUtils::shiftCenteredInertiaTensor(inertia, first_shift, known_mass);
118 LLInertiaTensorUtils::centerInertiaTensor(inertia, second_shift, known_mass);
119
120 // we should now have the same inertia with which we started
121 for (S32 i=0; i<3; ++i)
122 {
123 for (S32 j=0; j<3; ++j)
124 {
125 F32 error = fabs(1.f - inertia.mMatrix[i][j] / known_inertia.mMatrix[i][j]);
126 ensure("LLInertiaTensorUtils shift+sclae-shift-scale should be no-op", error < SMALL_RELATIVE_ERROR);
127 }
128 }
129 }
130
131 // the following series operations should have null effect
132 {
133 LLVector3 first_shift(1.f, 5.f, 10.f);
134 LLVector3 second_scale(2.f, 3.f, 4.f);
135 LLVector3 third_shift;
136 LLVector3 fourth_scale;
137 for (S32 i = 0; i < 3; ++i)
138 {
139 third_shift.mV[i] = -first_shift.mV[i] * second_scale.mV[i];
140 fourth_scale.mV[i] = 1.f / second_scale.mV[i];
141 }
142
143 F32 mass = known_mass;
144 LLVector3 center = known_center;
145 LLMatrix3 inertia = known_inertia;
146
147 // first
148 LLInertiaTensorUtils::shiftCenteredInertiaTensor(inertia, first_shift, mass);
149 center += first_shift;
150
151 // second
152 LLInertiaTensorUtils::scaleInertiaTensor(inertia, second_scale);
153 mass *= second_scale.mV[VX] * second_scale.mV[VY] * second_scale.mV[VZ];
154 for (S32 i = 0; i < 3; ++i)
155 {
156 center.mV[i] *= second_scale.mV[i];
157 }
158
159 // third
160 LLInertiaTensorUtils::centerInertiaTensor(inertia, third_shift, mass);
161 center -= third_shift;
162
163 // foruth
164 LLInertiaTensorUtils::scaleInertiaTensor(inertia, fourth_scale);
165
166 // we should now have the same inertia with which we started
167 for (S32 i=0; i<3; ++i)
168 {
169 for (S32 j=0; j<3; ++j)
170 {
171 F32 error = fabs(1.f - inertia.mMatrix[i][j] / known_inertia.mMatrix[i][j]);
172 ensure("LLInertiaTensorUtils shift+sclae-shift-scale should be no-op", error < SMALL_RELATIVE_ERROR);
173 }
174 }
175 }
176 }
177
178 template<> template<>
179 void mass_properties::test<3>()
180 {
181 // test tetrahedral decomposition of unit tetrahedron centered on origin
182 std::vector< LLVector3 > points;
183 points.push_back( LLVector3( 0.f, 0.f, 0.f ) );
184 points.push_back( LLVector3( 1.f, 0.f, 0.f ) );
185 points.push_back( LLVector3( 0.5f, 0.5f * SQRT_THREE, 0.f) );
186 points.push_back( LLVector3( 0.5f, SQRT_THREE / 6.f, SQRT_SIX / 3.f) );
187
188 // compute the center
189 LLVector3 center;
190 for (S32 i = 0; i < (S32)points.size(); ++i)
191 {
192 center += points[i];
193 }
194 center *= ( 1.f / F32(points.size()) );
195
196 // shift all points to center of mass frame
197 for (S32 i = 0; i < (S32)points.size(); ++i)
198 {
199 points[i] -= center;
200 }
201
202 LLPrimMassProperties tetrahedron;
203 tetrahedron.addSignedTetrahedron(1.0, points[0], points[1], points[2], points[3]);
204 // we must manually center the inertia tensor here
205 // since addSignedTetrahedron() does not do it automatically
206 tetrahedron.centerInertiaTensor();
207
208 F32 density = 1.0f;
209 LLVector3 scale(1.f, 1.f, 1.f);
210 LLMatrix3 analytic_inertia;
211 tetrahedron.getScaledInertiaTensor(analytic_inertia, scale, density);
212
213 // compute the mesh
214 std::vector< S32 > triangle_indices;
215 triangle_indices.push_back(0);
216 triangle_indices.push_back(2);
217 triangle_indices.push_back(1);
218
219 triangle_indices.push_back(0);
220 triangle_indices.push_back(1);
221 triangle_indices.push_back(3);
222
223 triangle_indices.push_back(0);
224 triangle_indices.push_back(3);
225 triangle_indices.push_back(2);
226
227 triangle_indices.push_back(1);
228 triangle_indices.push_back(2);
229 triangle_indices.push_back(3);
230
231 // compute the same inertia using a mesh
232 {
233 LLPrimMassProperties mesh;
234 mesh.setUnitMesh(points, triangle_indices);
235
236 // the two properties should agree
237 F32 error = ( tetrahedron.getVolume() - mesh.getVolume() ) / tetrahedron.getVolume();
238 ensure("tetrahedron and mesh volume should match", error < SMALL_RELATIVE_ERROR);
239
240 error = ( tetrahedron.getCenterOfMass() - mesh.getCenterOfMass() ).length();
241 ensure("tetrahedron and mesh centers should match", error < SMALL_RELATIVE_ERROR);
242
243 LLMatrix3 mesh_inertia;
244 mesh.getScaledInertiaTensor(mesh_inertia, scale, density);
245
246 for (S32 i=0; i<3; ++i)
247 {
248 for (S32 j=0; j<3; ++j)
249 {
250 // only verify the non-small elements
251 if (analytic_inertia.mMatrix[i][j] > SMALL_RELATIVE_ERROR)
252 {
253 error = fabs(1.f - mesh_inertia.mMatrix[i][j] / analytic_inertia.mMatrix[i][j]);
254 ensure("LLPrimMassProperties::setUnitMesh() inertia ", error < SMALL_RELATIVE_ERROR);
255 }
256 }
257 }
258 }
259
260 // shift the whole tetrahedron away from the center of mass and recompute the mesh
261 {
262 LLVector3 shift(11.f, 7.f, 3.f);
263 for (S32 i = 0; i < (S32)points.size(); ++i)
264 {
265 points[i] += shift;
266 }
267 LLPrimMassProperties mesh;
268 mesh.setUnitMesh(points, triangle_indices);
269
270 // the two properties should agree
271 F32 error = ( tetrahedron.getVolume() - mesh.getVolume() ) / tetrahedron.getVolume();
272 ensure("tetrahedron and mesh volume should match", error < SMALL_RELATIVE_ERROR);
273
274 LLMatrix3 mesh_inertia;
275 mesh.getScaledInertiaTensor(mesh_inertia, scale, density);
276
277 for (S32 i=0; i<3; ++i)
278 {
279 for (S32 j=0; j<3; ++j)
280 {
281 // only verify the non-small elements
282 if (analytic_inertia.mMatrix[i][j] > SMALL_RELATIVE_ERROR)
283 {
284 error = fabs(1.f - mesh_inertia.mMatrix[i][j] / analytic_inertia.mMatrix[i][j]);
285 ensure("LLPrimMassProperties::setUnitMesh() inertia ", error < SMALL_RELATIVE_ERROR);
286 }
287 }
288 }
289 }
290 }
291
292 template<> template<>
293 void mass_properties::test<4>()
294 {
295 // test tetrahedron utilities
296
297 // from the paper described here:
298 // from the numerical example in this paper:
299 // http://www.journaldatabase.org/articles/87064/Explicit_Exact_Formulas_f.html
300
301 // initialize info about the tetrahedron
302 std::vector< LLVector3 > points;
303 points.push_back( LLVector3( 8.33220f, -11.86875f, 0.93355f) );
304 points.push_back( LLVector3( 0.75523f, 5.00000f, 16.37072f) );
305 points.push_back( LLVector3( 52.61236f, 5.00000f, - 5.38580f) );
306 points.push_back( LLVector3( 2.00000f, 5.00000f, 3.00000f) );
307
308 LLVector3 expected_center( 15.92492f, 0.78281f, 3.732962f);
309
310 LLMatrix3 expected_inertia;
311 expected_inertia.mMatrix[0][0] = 43520.33257f;
312 expected_inertia.mMatrix[1][1] = 194711.28938f;
313 expected_inertia.mMatrix[2][2] = 191168.76173f;
314
315 expected_inertia.mMatrix[0][1] = -11996.20119f;
316 expected_inertia.mMatrix[1][0] = -11996.20119f;
317
318 expected_inertia.mMatrix[0][2] = 46343.16662f;
319 expected_inertia.mMatrix[2][0] = 46343.16662f;
320
321 expected_inertia.mMatrix[2][1] = -4417.66150f;
322 expected_inertia.mMatrix[1][2] = -4417.66150f;
323
324 // measure tetrahedron bounding box max dimension
325 // for relative error estimates
326 LLVector3 box_min(FLT_MAX, FLT_MAX, FLT_MAX);
327 LLVector3 box_max(-FLT_MAX, -FLT_MAX, -FLT_MAX);
328 for (S32 point_index = 0; point_index < (S32)points.size(); ++point_index)
329 {
330 for (S32 i = 0; i < 3; ++i)
331 {
332 if (points[point_index].mV[i] < box_min.mV[i])
333 {
334 box_min.mV[i] = points[point_index].mV[i];
335 }
336 if (points[point_index].mV[i] > box_max.mV[i])
337 {
338 box_max.mV[i] = points[point_index].mV[i];
339 }
340 }
341 }
342 F32 tetrahedron_max_dimension = (box_max - box_min).length();
343
344
345 // test LLPrimMassProperties::addSignedTetrahedron()
346 {
347 LLPrimMassProperties tetrahedron;
348 tetrahedron.addSignedTetrahedron(1.f, points[0], points[1], points[2], points[3]);
349 // we must manually center the inertia tensor here
350 // since addSignedTetrahedron() does not do it automatically
351 tetrahedron.centerInertiaTensor();
352
353 // check the center of mass
354 LLVector3 center = tetrahedron.getCenterOfMass();
355 F32 error = (center - expected_center).length() / tetrahedron_max_dimension;
356
357 ensure("LLPrimMassProperties::addSignedTetrahedron() center of mass ", error < SMALL_RELATIVE_ERROR);
358
359 // check the inertia tensor
360 LLMatrix3 computed_inertia;
361 LLVector3 scale(1.f, 1.f, 1.f);
362 F32 density = 1.f;
363 tetrahedron.getScaledInertiaTensor(computed_inertia, scale, density);
364
365 for (S32 i=0; i<3; ++i)
366 {
367 for (S32 j=0; j<3; ++j)
368 {
369 error = fabs(1.f - computed_inertia.mMatrix[i][j] / expected_inertia.mMatrix[i][j]);
370 ensure("LLPrimMassProperties::addSignedTetrahedron inertia ", error < SMALL_RELATIVE_ERROR);
371 }
372 }
373 }
374
375 // test LLPrimMassProperties::addUnitMesh()
376 {
377 std::vector< S32 > triangle_indices;
378 triangle_indices.push_back(0);
379 triangle_indices.push_back(2);
380 triangle_indices.push_back(1);
381
382 triangle_indices.push_back(1);
383 triangle_indices.push_back(3);
384 triangle_indices.push_back(0);
385
386 triangle_indices.push_back(2);
387 triangle_indices.push_back(0);
388 triangle_indices.push_back(3);
389
390 triangle_indices.push_back(3);
391 triangle_indices.push_back(1);
392 triangle_indices.push_back(2);
393
394 LLPrimMassProperties mesh;
395 mesh.setUnitMesh(points, triangle_indices);
396
397 // check the center of mass
398 LLVector3 center = mesh.getCenterOfMass();
399 F32 error = (center - expected_center).length() / tetrahedron_max_dimension;
400
401 ensure("LLPrimMassProperties::setUnitMesh() center of mass ", error < SMALL_RELATIVE_ERROR);
402
403 // check the inertia tensor
404 LLMatrix3 computed_inertia;
405 LLVector3 scale(1.f, 1.f, 1.f);
406 F32 density = 1.f;
407 mesh.getScaledInertiaTensor(computed_inertia, scale, density);
408
409 for (S32 i=0; i<3; ++i)
410 {
411 for (S32 j=0; j<3; ++j)
412 {
413 error = fabs(1.f - computed_inertia.mMatrix[i][j] / expected_inertia.mMatrix[i][j]);
414 ensure("LLPrimMassProperties::setUnitMesh() inertia diagonal elements mismatch", error < SMALL_RELATIVE_ERROR);
415 }
416 }
417 }
418 }
419
420 template<> template<>
421 void mass_properties::test<5>()
422 {
423 // test LLPrimMassProperties
424
425 // unit shape box
426 LLPrimMassProperties box;
427 box.setUnitBox();
428
429 // unit shape mesh -- box
430
431 //
432 // 4-----------0
433 // z /| /|
434 // | / | / |
435 // | / | / |
436 // | 6-----------2 |
437 // | | | | |
438 // | | 5-------|---1
439 // | | / | /
440 // | | / | /
441 // | y |/ |/
442 // |/ 7-----------3
443 // +------------------------ x
444
445 std::vector< LLVector3 > points;
446 points.push_back( LLVector3( 0.5f, 0.5f, 0.5f) );
447 points.push_back( LLVector3( 0.5f, 0.5f, -0.5f) );
448 points.push_back( LLVector3( 0.5f, -0.5f, 0.5f) );
449 points.push_back( LLVector3( 0.5f, -0.5f, -0.5f) );
450 points.push_back( LLVector3(-0.5f, 0.5f, 0.5f) );
451 points.push_back( LLVector3(-0.5f, 0.5f, -0.5f) );
452 points.push_back( LLVector3(-0.5f, -0.5f, 0.5f) );
453 points.push_back( LLVector3(-0.5f, -0.5f, -0.5f) );
454
455 std::vector< S32 > triangle_indices;
456 // +x
457 triangle_indices.push_back(1);
458 triangle_indices.push_back(0);
459 triangle_indices.push_back(2);
460
461 triangle_indices.push_back(1);
462 triangle_indices.push_back(2);
463 triangle_indices.push_back(3);
464
465 // -y
466 triangle_indices.push_back(3);
467 triangle_indices.push_back(2);
468 triangle_indices.push_back(7);
469
470 triangle_indices.push_back(7);
471 triangle_indices.push_back(2);
472 triangle_indices.push_back(6);
473
474 // -x
475 triangle_indices.push_back(7);
476 triangle_indices.push_back(6);
477 triangle_indices.push_back(4);
478
479 triangle_indices.push_back(7);
480 triangle_indices.push_back(4);
481 triangle_indices.push_back(5);
482
483 // +y
484 triangle_indices.push_back(5);
485 triangle_indices.push_back(4);
486 triangle_indices.push_back(1);
487
488 triangle_indices.push_back(1);
489 triangle_indices.push_back(4);
490 triangle_indices.push_back(0);
491
492 // +z
493 triangle_indices.push_back(0);
494 triangle_indices.push_back(4);
495 triangle_indices.push_back(6);
496
497 triangle_indices.push_back(0);
498 triangle_indices.push_back(6);
499 triangle_indices.push_back(2);
500
501 // -z
502 triangle_indices.push_back(7);
503 triangle_indices.push_back(5);
504 triangle_indices.push_back(3);
505
506 triangle_indices.push_back(3);
507 triangle_indices.push_back(5);
508 triangle_indices.push_back(1);
509
510 LLPrimMassProperties mesh;
511 mesh.setUnitMesh(points, triangle_indices);
512
513 // the unit box and unit mesh mass properties should be nearly the same
514
515 // volume should agree
516 F32 error = fabs(box.getVolume() - mesh.getVolume()) / box.getVolume();
517 ensure("UnitBox and UnitMesh(box) should have same volume", error < SMALL_RELATIVE_ERROR);
518
519 // center of mass should agree
520 LLVector3 box_center = box.getCenterOfMass();
521 LLVector3 mesh_center = mesh.getCenterOfMass();
522 error = fabs( (box_center - mesh_center).length() );
523 ensure("UnitBox and UnitMesh(box) centers of mass should agree", error < SMALL_RELATIVE_ERROR );
524
525 LLVector3 scale(1.f, 1.f, 1.f);
526 F32 density = 1.f;
527 LLMatrix3 box_inertia, mesh_inertia;
528 box.getScaledInertiaTensor(box_inertia, scale, density);
529 mesh.getScaledInertiaTensor(mesh_inertia, scale, density);
530
531 // mesh eigenvalues should be uniform
532 for (S32 i = 0; i < 2; ++i)
533 {
534 error = fabs(mesh_inertia.mMatrix[i][i] - mesh_inertia.mMatrix[i+1][i+1]) / mesh_inertia.mMatrix[i][i];
535 ensure("UnitMesh(box) should have uniform eigenvalues", error < SMALL_RELATIVE_ERROR);
536 }
537 // inertias should agree
538 for (S32 i = 0; i < 3; ++i)
539 {
540 for (S32 j = 0; j < 3; ++j)
541 {
542 error = fabs(box_inertia.mMatrix[i][j] - mesh_inertia.mMatrix[i][j]);
543 if (error > 0.f
544 && box_inertia.mMatrix[i][j] != 0.f)
545 {
546 error /= box_inertia.mMatrix[i][j];
547 }
548 ensure("UnitBox and UnitMesh(box) should have same inertia", error < SMALL_RELATIVE_ERROR);
549 }
550 }
551
552 // Here we test the boundary of the LLPrimLinkInfo::canLink() method
553 // between semi-random middle-sized objects.
554 }
555
556 template<> template<>
557 void mass_properties::test<6>()
558 {
559 // test LLObjectMassProperties
560
561 // we make a large single-prim box, then a similarly shaped object
562 // that is multiple prims, and compare their mass properties
563
564 LLPrimMassProperties box;
565 box.setUnitBox();
566
567 F32 density = 3.7f;
568 LLVector3 big_scale(1.f, 2.f, 3.f);
569 LLObjectMassProperties big_box(box, big_scale, density);
570
571 LLObjectMassProperties multiple_box;
572 LLVector3 position;
573 LLQuaternion rotation;
574 rotation.loadIdentity();
575
576 F32 small_box_size = 0.5f;
577 LLVector3 small_scale( small_box_size, small_box_size, small_box_size);
578 S32 num_boxes_x = S32(big_scale.mV[VX] / small_box_size);
579 S32 num_boxes_y = S32(big_scale.mV[VY] / small_box_size);
580 S32 num_boxes_z = S32(big_scale.mV[VZ] / small_box_size);
581 LLVector3 start_pos = 0.5f * (small_scale - big_scale);
582 for (S32 x = 0; x < num_boxes_x; ++x)
583 {
584 for (S32 y = 0; y < num_boxes_y; ++y)
585 {
586 for (S32 z = 0; z < num_boxes_z; ++z)
587 {
588 position.set( F32(x) * small_box_size, F32(y) * small_box_size, F32(z) * small_box_size );
589 position += start_pos;
590
591 multiple_box.add(box, small_scale, density, position, rotation);
592 }
593 }
594 }
595
596 // the mass properties of the two boxes should match
597
598 // mass
599 F32 big_mass = big_box.getMass();
600 F32 multiple_mass = multiple_box.getMass();
601 F32 error = (big_mass - multiple_mass) / big_mass;
602 ensure("Big box and equivalent multi-prim box should have same mass", error < SMALL_RELATIVE_ERROR);
603
604 // center of mass
605 LLVector3 big_center, multiple_center;
606 big_box.getCenterOfMass(big_center);
607 multiple_box.getCenterOfMass(multiple_center);
608 error = (big_center - multiple_center).length();
609 ensure("Big box and equivalent multi-prim box should have same center", error < SMALL_RELATIVE_ERROR);
610
611 // inertia
612 LLMatrix3 big_inertia, multiple_inertia;
613 big_box.getInertiaLocal(big_inertia);
614 multiple_box.getInertiaLocal(multiple_inertia);
615 for (S32 i = 0; i < 3; ++i)
616 {
617 for (S32 j = 0; j < 3; ++j)
618 {
619 error = fabs(big_inertia.mMatrix[i][j] - multiple_inertia.mMatrix[i][j]);
620 if (error > 0.f
621 && big_inertia.mMatrix[i][j] != 0.f)
622 {
623 error /= big_inertia.mMatrix[i][j];
624 }
625 ensure("UnitBox and UnitMesh(box) should have same inertia", error < SMALL_RELATIVE_ERROR);
626 }
627 }
628 }
629
630 template<> template<>
631 void mass_properties::test<7>()
632 {
633 // test LLObjectMassProperties with rotations
634
635 // we make a large single-prim box via mesh, then a similarly shaped
636 // object that is multiple prims (implicit boxes), and compare their
637 // mass properties
638
639 //
640 // 4-----------0
641 // z /| /|
642 // | / | / |
643 // | / | / |
644 // | 6-----------2 |
645 // | | | | |
646 // | | 5-------|---1
647 // | | / | /
648 // | | / | /
649 // | y |/ |/
650 // |/ 7-----------3
651 // +------------------------ x
652
653 std::vector< LLVector3 > points;
654 points.push_back( LLVector3( 0.5f, 0.5f, 0.5f) );
655 points.push_back( LLVector3( 0.5f, 0.5f, -0.5f) );
656 points.push_back( LLVector3( 0.5f, -0.5f, 0.5f) );
657 points.push_back( LLVector3( 0.5f, -0.5f, -0.5f) );
658 points.push_back( LLVector3(-0.5f, 0.5f, 0.5f) );
659 points.push_back( LLVector3(-0.5f, 0.5f, -0.5f) );
660 points.push_back( LLVector3(-0.5f, -0.5f, 0.5f) );
661 points.push_back( LLVector3(-0.5f, -0.5f, -0.5f) );
662
663 std::vector< S32 > triangle_indices;
664 // +x
665 triangle_indices.push_back(1);
666 triangle_indices.push_back(0);
667 triangle_indices.push_back(2);
668
669 triangle_indices.push_back(1);
670 triangle_indices.push_back(2);
671 triangle_indices.push_back(3);
672
673 // -y
674 triangle_indices.push_back(3);
675 triangle_indices.push_back(2);
676 triangle_indices.push_back(7);
677
678 triangle_indices.push_back(7);
679 triangle_indices.push_back(2);
680 triangle_indices.push_back(6);
681
682 // -x
683 triangle_indices.push_back(7);
684 triangle_indices.push_back(6);
685 triangle_indices.push_back(4);
686
687 triangle_indices.push_back(7);
688 triangle_indices.push_back(4);
689 triangle_indices.push_back(5);
690
691 // +y
692 triangle_indices.push_back(5);
693 triangle_indices.push_back(4);
694 triangle_indices.push_back(1);
695
696 triangle_indices.push_back(1);
697 triangle_indices.push_back(4);
698 triangle_indices.push_back(0);
699
700 // +z
701 triangle_indices.push_back(0);
702 triangle_indices.push_back(4);
703 triangle_indices.push_back(6);
704
705 triangle_indices.push_back(0);
706 triangle_indices.push_back(6);
707 triangle_indices.push_back(2);
708
709 // -z
710 triangle_indices.push_back(7);
711 triangle_indices.push_back(5);
712 triangle_indices.push_back(3);
713
714 triangle_indices.push_back(3);
715 triangle_indices.push_back(5);
716 triangle_indices.push_back(1);
717
718 F32 angle_step = F_PI / (2.f * 3.f);
719 for (F32 angle = 0.f; angle < 0.51f * F_PI; angle += angle_step)
720 {
721 // scale and rotate mesh points
722 LLVector3 axis(0.f, 0.f, angle);
723 LLQuaternion mesh_rotation(angle, axis);
724 LLVector3 big_scale(3.f, 5.f, 7.f);
725 std::vector< LLVector3 > new_points;
726 for (S32 p = 0; p < (S32)points.size(); ++p)
727 {
728 LLVector3 new_point = points[p];
729 for (S32 i = 0; i < 3; ++i)
730 {
731 new_point.mV[i] *= big_scale.mV[i];
732 }
733 new_points.push_back( new_point * mesh_rotation );
734 }
735
736 // build the big mesh box
737 LLPrimMassProperties mesh_box;
738 mesh_box.setUnitMesh(new_points, triangle_indices);
739
740 F32 density = 3.7f;
741 LLVector3 unit_scale(1.f, 1.f, 1.f);
742 LLObjectMassProperties big_box(mesh_box, unit_scale, density);
743
744 // build the multiple_box
745 LLPrimMassProperties box;
746 box.setUnitBox();
747
748 LLObjectMassProperties multiple_box;
749 LLVector3 position;
750
751 F32 small_box_size = 0.5f;
752 LLVector3 small_scale( small_box_size, small_box_size, small_box_size);
753 S32 num_boxes_x = S32(big_scale.mV[VX] / small_box_size);
754 S32 num_boxes_y = S32(big_scale.mV[VY] / small_box_size);
755 S32 num_boxes_z = S32(big_scale.mV[VZ] / small_box_size);
756 LLVector3 start_pos = (0.5f * (small_scale - big_scale)) * mesh_rotation;
757 for (S32 x = 0; x < num_boxes_x; ++x)
758 {
759 for (S32 y = 0; y < num_boxes_y; ++y)
760 {
761 for (S32 z = 0; z < num_boxes_z; ++z)
762 {
763 position.set( F32(x) * small_box_size, F32(y) * small_box_size, F32(z) * small_box_size );
764 position *= mesh_rotation;
765 position += start_pos;
766 multiple_box.add(box, small_scale, density, position, mesh_rotation);
767 }
768 }
769 }
770
771 // the mass properties of the two boxes should match
772
773 // mass
774 F32 big_mass = big_box.getMass();
775 F32 multiple_mass = multiple_box.getMass();
776 F32 error = (big_mass - multiple_mass) / big_mass;
777 ensure("Big box and equivalent multi-prim box should have same mass", error < SMALL_RELATIVE_ERROR);
778
779 // center of mass
780 LLVector3 big_center, multiple_center;
781 big_box.getCenterOfMass(big_center);
782 multiple_box.getCenterOfMass(multiple_center);
783 error = (big_center - multiple_center).length();
784 ensure("Big box and equivalent multi-prim box should have same center", error < SMALL_RELATIVE_ERROR);
785
786 LLMatrix3 big_inertia, multiple_inertia;
787 big_box.getInertiaLocal(big_inertia);
788 multiple_box.getInertiaLocal(multiple_inertia);
789
790 for (S32 i = 0; i < 3; ++i)
791 {
792 for (S32 j = 0; j < 3; ++j)
793 {
794 error = fabs(big_inertia.mMatrix[i][j] - multiple_inertia.mMatrix[i][j]);
795 if (error > 0.f
796 && big_inertia.mMatrix[i][j] > SMALL_RELATIVE_ERROR)
797 {
798 error /= big_inertia.mMatrix[i][j];
799 }
800 ensure("UnitBox and UnitMesh(box) should have same inertia", error < SMALL_RELATIVE_ERROR);
801 }
802 }
803 }
804 }
805
806 template<> template<>
807 void mass_properties::test<8>()
808 {
809 // test LLPhysicsVolumeManager
810
811 // we make a large single-prim box, then a similarly shaped object
812 // that is multiple prims, and compare their mass properties
813
814 // first we make the single-prim giant
815 //
816 // 4-----------0
817 // z /| /|
818 // | / | / |
819 // | / | / |
820 // | 6-----------2 |
821 // | | | | |
822 // | | 5-------|---1
823 // | | / | /
824 // | | / | /
825 // | y |/ |/
826 // |/ 7-----------3
827 // +------------------------ x
828
829 std::vector< LLVector3 > points;
830 points.push_back( LLVector3( 0.5f, 0.5f, 0.5f) );
831 points.push_back( LLVector3( 0.5f, 0.5f, -0.5f) );
832 points.push_back( LLVector3( 0.5f, -0.5f, 0.5f) );
833 points.push_back( LLVector3( 0.5f, -0.5f, -0.5f) );
834 points.push_back( LLVector3(-0.5f, 0.5f, 0.5f) );
835 points.push_back( LLVector3(-0.5f, 0.5f, -0.5f) );
836 points.push_back( LLVector3(-0.5f, -0.5f, 0.5f) );
837 points.push_back( LLVector3(-0.5f, -0.5f, -0.5f) );
838
839 std::vector< S32 > triangle_indices;
840 // +x
841 triangle_indices.push_back(1);
842 triangle_indices.push_back(0);
843 triangle_indices.push_back(2);
844
845 triangle_indices.push_back(1);
846 triangle_indices.push_back(2);
847 triangle_indices.push_back(3);
848
849 // -y
850 triangle_indices.push_back(3);
851 triangle_indices.push_back(2);
852 triangle_indices.push_back(7);
853
854 triangle_indices.push_back(7);
855 triangle_indices.push_back(2);
856 triangle_indices.push_back(6);
857
858 // -x
859 triangle_indices.push_back(7);
860 triangle_indices.push_back(6);
861 triangle_indices.push_back(4);
862
863 triangle_indices.push_back(7);
864 triangle_indices.push_back(4);
865 triangle_indices.push_back(5);
866
867 // +y
868 triangle_indices.push_back(5);
869 triangle_indices.push_back(4);
870 triangle_indices.push_back(1);
871
872 triangle_indices.push_back(1);
873 triangle_indices.push_back(4);
874 triangle_indices.push_back(0);
875
876 // +z
877 triangle_indices.push_back(0);
878 triangle_indices.push_back(4);
879 triangle_indices.push_back(6);
880
881 triangle_indices.push_back(0);
882 triangle_indices.push_back(6);
883 triangle_indices.push_back(2);
884
885 // -z
886 triangle_indices.push_back(7);
887 triangle_indices.push_back(5);
888 triangle_indices.push_back(3);
889
890 triangle_indices.push_back(3);
891 triangle_indices.push_back(5);
892 triangle_indices.push_back(1);
893
894 // scale the mesh points
895 LLVector3 big_scale(1.f, 2.f, 3.f);
896 std::vector< LLVector3 > new_points;
897 for (S32 p = 0; p < (S32)points.size(); ++p)
898 {
899 LLVector3 new_point = points[p];
900 for (S32 i = 0; i < 3; ++i)
901 {
902 new_point.mV[i] *= big_scale.mV[i];
903 }
904 new_points.push_back( new_point );
905 }
906
907 // build the big mesh box (primitive)
908 LLPrimMassProperties mesh_box;
909 mesh_box.setUnitMesh(new_points, triangle_indices);
910
911 F32 density = DEFAULT_OBJECT_DENSITY;
912 LLVector3 unit_scale(1.f, 1.f, 1.f);
913 LLObjectMassProperties big_box(mesh_box, unit_scale, density);
914
915 // build the multi-prim box (object)
916 S32 TEST_VOLUME_DETAIL = 1;
917
918 LLVolumeParams volume_params;
919 volume_params.setCube();
920
921 LLObjectMassProperties multiple_box;
922 F32 small_box_size = 0.5f;
923 LLVector3 small_scale( small_box_size, small_box_size, small_box_size);
924 {
925 // hijack the volume manager used by LLPrimitive
926 LLPhysicsVolumeManager* volume_manager = new LLPhysicsVolumeManager();
927 //volume_manager->setThreadSafe(false);
928 LLPrimitive::setVolumeManager(volume_manager);
929
930 std::vector< const LLPrimitive* > prim_list;
931
932 F32 angle = 0.f;
933 LLVector3 axis(0.f, 0.f, angle);
934 LLVector3 position;
935 LLQuaternion rotation(angle, axis);
936 S32 num_boxes_x = S32(big_scale.mV[VX] / small_box_size);
937 S32 num_boxes_y = S32(big_scale.mV[VY] / small_box_size);
938 S32 num_boxes_z = S32(big_scale.mV[VZ] / small_box_size);
939
940 for (S32 x = 0; x < num_boxes_x; ++x)
941 {
942 for (S32 y = 0; y < num_boxes_y; ++y)
943 {
944 for (S32 z = 0; z < num_boxes_z; ++z)
945 {
946 LLPrimitive* primp = new LLPrimitive();
947 primp->setVolume( volume_params, TEST_VOLUME_DETAIL);
948
949 position.set( F32(x) * small_box_size, F32(y) * small_box_size, F32(z) * small_box_size );
950 position *= rotation;
951
952 primp->setPosition(position);
953 primp->setRotation(rotation);
954 primp->setScale(small_scale);
955
956 prim_list.push_back(primp);
957 }
958 }
959 }
960
961 volume_manager->getObjectMassProperties(multiple_box, prim_list);
962
963 for (S32 i = 0; i < (S32)prim_list.size(); ++i)
964 {
965 delete prim_list[i];
966 prim_list[i] = NULL;
967 }
968 LLPrimitive::cleanupVolumeManager();
969 }
970
971 // mass
972 F32 big_mass = big_box.getMass();
973 F32 multiple_mass = multiple_box.getMass();
974 F32 error = (big_mass - multiple_mass) / big_mass;
975 ensure("Big box and equivalent multi-prim box should have same mass", error < SMALL_RELATIVE_ERROR);
976
977 // center of mass
978 LLVector3 big_center, multiple_center;
979 big_box.getCenterOfMass(big_center);
980 multiple_box.getCenterOfMass(multiple_center);
981 LLVector3 expected_shift = 0.5f * ( big_scale - small_scale );
982 error = ( big_center - (multiple_center - expected_shift) ).length();
983 ensure("Big box and equivalent multi-prim box should have same center", error < SMALL_RELATIVE_ERROR);
984
985 // inertia
986 LLMatrix3 big_inertia, multiple_inertia;
987 big_box.getInertiaLocal(big_inertia);
988 multiple_box.getInertiaLocal(multiple_inertia);
989
990 for (S32 i = 0; i < 3; ++i)
991 {
992 for (S32 j = 0; j < 3; ++j)
993 {
994 error = fabs(big_inertia.mMatrix[i][j] - multiple_inertia.mMatrix[i][j]);
995 if (error > 0.f
996 && big_inertia.mMatrix[i][j] > SMALL_RELATIVE_ERROR)
997 {
998 error /= big_inertia.mMatrix[i][j];
999 }
1000 bool ok = error < SMALL_RELATIVE_ERROR
1001 || (i != j
1002 && error < SMALL_RELATIVE_ERROR);
1003 ensure("UnitBox and UnitMesh(box) should have same inertia", ok );
1004 }
1005 }
1006 }
1007}
1008
diff --git a/linden/indra/test/math.cpp b/linden/indra/test/math.cpp
index 9cab3fe..405b8a3 100644
--- a/linden/indra/test/math.cpp
+++ b/linden/indra/test/math.cpp
@@ -34,9 +34,13 @@
34#include "linden_common.h" 34#include "linden_common.h"
35#include "lltut.h" 35#include "lltut.h"
36 36
37#include "llcrc.h"
38#include "llline.h"
37#include "llmath.h" 39#include "llmath.h"
40#include "llrand.h"
41#include "llsphere.h"
38#include "lluuid.h" 42#include "lluuid.h"
39#include "llcrc.h" 43#include "v3math.h"
40 44
41namespace tut 45namespace tut
42{ 46{
@@ -277,3 +281,439 @@ namespace tut
277 ensure_equals("crc update 2", c1.getCRC(), c2.getCRC()); 281 ensure_equals("crc update 2", c1.getCRC(), c2.getCRC());
278 } 282 }
279} 283}
284
285namespace tut
286{
287 struct sphere_data
288 {
289 };
290 typedef test_group<sphere_data> sphere_test;
291 typedef sphere_test::object sphere_object;
292 tut::sphere_test tsphere("LLSphere");
293
294 template<> template<>
295 void sphere_object::test<1>()
296 {
297 // test LLSphere::contains() and ::overlaps()
298 S32 number_of_tests = 10;
299 for (S32 test = 0; test < number_of_tests; ++test)
300 {
301 LLVector3 first_center(1.f, 1.f, 1.f);
302 F32 first_radius = 3.f;
303 LLSphere first_sphere( first_center, first_radius );
304
305 F32 half_millimeter = 0.0005f;
306 LLVector3 direction( ll_frand(2.f) - 1.f, ll_frand(2.f) - 1.f, ll_frand(2.f) - 1.f);
307 direction.normalize();
308
309 F32 distance = ll_frand(first_radius - 2.f * half_millimeter);
310 LLVector3 second_center = first_center + distance * direction;
311 F32 second_radius = first_radius - distance - half_millimeter;
312 LLSphere second_sphere( second_center, second_radius );
313 ensure("first sphere should contain the second", first_sphere.contains(second_sphere));
314 ensure("first sphere should overlap the second", first_sphere.overlaps(second_sphere));
315
316 distance = first_radius + ll_frand(first_radius);
317 second_center = first_center + distance * direction;
318 second_radius = distance - first_radius + half_millimeter;
319 second_sphere.set( second_center, second_radius );
320 ensure("first sphere should NOT contain the second", !first_sphere.contains(second_sphere));
321 ensure("first sphere should overlap the second", first_sphere.overlaps(second_sphere));
322
323 distance = first_radius + ll_frand(first_radius) + half_millimeter;
324 second_center = first_center + distance * direction;
325 second_radius = distance - first_radius - half_millimeter;
326 second_sphere.set( second_center, second_radius );
327 ensure("first sphere should NOT contain the second", !first_sphere.contains(second_sphere));
328 ensure("first sphere should NOT overlap the second", !first_sphere.overlaps(second_sphere));
329 }
330 }
331
332 template<> template<>
333 void sphere_object::test<2>()
334 {
335 // test LLSphere::getBoundingSphere()
336 S32 number_of_tests = 100;
337 S32 number_of_spheres = 10;
338 F32 sphere_center_range = 32.f;
339 F32 sphere_radius_range = 5.f;
340
341 for (S32 test = 0; test < number_of_tests; ++test)
342 {
343 // gegnerate a bunch of random sphere
344 std::vector< LLSphere > sphere_list;
345 for (S32 sphere_count=0; sphere_count < number_of_spheres; ++sphere_count)
346 {
347 LLVector3 direction( ll_frand(2.f) - 1.f, ll_frand(2.f) - 1.f, ll_frand(2.f) - 1.f);
348 direction.normalize();
349 F32 distance = ll_frand(sphere_center_range);
350 LLVector3 center = distance * direction;
351 F32 radius = ll_frand(sphere_radius_range);
352 LLSphere sphere( center, radius );
353 sphere_list.push_back(sphere);
354 }
355
356 // compute the bounding sphere
357 LLSphere bounding_sphere = LLSphere::getBoundingSphere(sphere_list);
358
359 // make sure all spheres are inside the bounding sphere
360 {
361 std::vector< LLSphere >::const_iterator sphere_itr;
362 for (sphere_itr = sphere_list.begin(); sphere_itr != sphere_list.end(); ++sphere_itr)
363 {
364 ensure("sphere should be contained by the bounding sphere", bounding_sphere.contains(*sphere_itr));
365 }
366 }
367
368 // TODO -- improve LLSphere::getBoundingSphere() to the point where
369 // we can reduce the 'expansion' in the two tests below to about
370 // 2 mm or less
371
372 F32 expansion = 0.005f;
373 // move all spheres out a little bit
374 // and count how many are NOT contained
375 {
376 std::vector< LLVector3 > uncontained_directions;
377 std::vector< LLSphere >::iterator sphere_itr;
378 for (sphere_itr = sphere_list.begin(); sphere_itr != sphere_list.end(); ++sphere_itr)
379 {
380 LLVector3 direction = sphere_itr->getCenter() - bounding_sphere.getCenter();
381 direction.normalize();
382
383 sphere_itr->setCenter( sphere_itr->getCenter() + expansion * direction );
384 if (! bounding_sphere.contains( *sphere_itr ) )
385 {
386 uncontained_directions.push_back(direction);
387 }
388 }
389 ensure("when moving spheres out there should be at least two uncontained spheres",
390 uncontained_directions.size() > 1);
391
392 /* TODO -- when the bounding sphere algorithm is improved we can open up this test
393 * at the moment it occasionally fails when the sphere collection is tight and small
394 * (2 meters or less)
395 if (2 == uncontained_directions.size() )
396 {
397 // if there were only two uncontained spheres then
398 // the two directions should be nearly opposite
399 F32 dir_dot = uncontained_directions[0] * uncontained_directions[1];
400 ensure("two uncontained spheres should lie opposite the bounding center", dir_dot < -0.95f);
401 }
402 */
403 }
404
405 // compute the new bounding sphere
406 bounding_sphere = LLSphere::getBoundingSphere(sphere_list);
407
408 // increase the size of all spheres a little bit
409 // and count how many are NOT contained
410 {
411 std::vector< LLVector3 > uncontained_directions;
412 std::vector< LLSphere >::iterator sphere_itr;
413 for (sphere_itr = sphere_list.begin(); sphere_itr != sphere_list.end(); ++sphere_itr)
414 {
415 LLVector3 direction = sphere_itr->getCenter() - bounding_sphere.getCenter();
416 direction.normalize();
417
418 sphere_itr->setRadius( sphere_itr->getRadius() + expansion );
419 if (! bounding_sphere.contains( *sphere_itr ) )
420 {
421 uncontained_directions.push_back(direction);
422 }
423 }
424 ensure("when boosting sphere radii there should be at least two uncontained spheres",
425 uncontained_directions.size() > 1);
426
427 /* TODO -- when the bounding sphere algorithm is improved we can open up this test
428 * at the moment it occasionally fails when the sphere collection is tight and small
429 * (2 meters or less)
430 if (2 == uncontained_directions.size() )
431 {
432 // if there were only two uncontained spheres then
433 // the two directions should be nearly opposite
434 F32 dir_dot = uncontained_directions[0] * uncontained_directions[1];
435 ensure("two uncontained spheres should lie opposite the bounding center", dir_dot < -0.95f);
436 }
437 */
438 }
439 }
440 }
441}
442
443namespace tut
444{
445 F32 SMALL_RADIUS = 1.0f;
446 F32 MEDIUM_RADIUS = 5.0f;
447 F32 LARGE_RADIUS = 10.0f;
448
449 struct line_data
450 {
451 };
452 typedef test_group<line_data> line_test;
453 typedef line_test::object line_object;
454 tut::line_test tline("LLLine");
455
456 template<> template<>
457 void line_object::test<1>()
458 {
459 // this is a test for LLLine::intersects(point) which returns TRUE
460 // if the line passes within some tolerance of point
461
462 // these tests will have some floating point error,
463 // so we need to specify how much error is ok
464 F32 allowable_relative_error = 0.00001f;
465 S32 number_of_tests = 100;
466 for (S32 test = 0; test < number_of_tests; ++test)
467 {
468 // generate some random point to be on the line
469 LLVector3 point_on_line( ll_frand(2.f) - 1.f,
470 ll_frand(2.f) - 1.f,
471 ll_frand(2.f) - 1.f);
472 point_on_line.normalize();
473 point_on_line *= ll_frand(LARGE_RADIUS);
474
475 // generate some random point to "intersect"
476 LLVector3 random_direction ( ll_frand(2.f) - 1.f,
477 ll_frand(2.f) - 1.f,
478 ll_frand(2.f) - 1.f);
479 random_direction.normalize();
480
481 LLVector3 random_offset( ll_frand(2.f) - 1.f,
482 ll_frand(2.f) - 1.f,
483 ll_frand(2.f) - 1.f);
484 random_offset.normalize();
485 random_offset *= ll_frand(SMALL_RADIUS);
486
487 LLVector3 point = point_on_line + MEDIUM_RADIUS * random_direction
488 + random_offset;
489
490 // compute the axis of approach (a unit vector between the points)
491 LLVector3 axis_of_approach = point - point_on_line;
492 axis_of_approach.normalize();
493
494 // compute the direction of the the first line (perp to axis_of_approach)
495 LLVector3 first_dir( ll_frand(2.f) - 1.f,
496 ll_frand(2.f) - 1.f,
497 ll_frand(2.f) - 1.f);
498 first_dir.normalize();
499 F32 dot = first_dir * axis_of_approach;
500 first_dir -= dot * axis_of_approach; // subtract component parallel to axis
501 first_dir.normalize();
502
503 // construct the line
504 LLVector3 another_point_on_line = point_on_line + ll_frand(LARGE_RADIUS) * first_dir;
505 LLLine line(another_point_on_line, point_on_line);
506
507 // test that the intersection point is within MEDIUM_RADIUS + SMALL_RADIUS
508 F32 test_radius = MEDIUM_RADIUS + SMALL_RADIUS;
509 test_radius += (LARGE_RADIUS * allowable_relative_error);
510 ensure("line should pass near intersection point", line.intersects(point, test_radius));
511
512 test_radius = allowable_relative_error * (point - point_on_line).length();
513 ensure("line should intersect point used to define it", line.intersects(point_on_line, test_radius));
514 }
515 }
516
517 template<> template<>
518 void line_object::test<2>()
519 {
520 // this is a test for LLLine::nearestApproach(LLLIne) method
521 // which computes the point on a line nearest another line
522
523 // these tests will have some floating point error,
524 // so we need to specify how much error is ok
525 // TODO -- make nearestApproach() algorithm more accurate so
526 // we can tighten the allowable_error. Most tests are tighter
527 // than one milimeter, however when doing randomized testing
528 // you can walk into inaccurate cases.
529 F32 allowable_relative_error = 0.001f;
530 S32 number_of_tests = 100;
531 for (S32 test = 0; test < number_of_tests; ++test)
532 {
533 // generate two points to be our known nearest approaches
534 LLVector3 some_point( ll_frand(2.f) - 1.f,
535 ll_frand(2.f) - 1.f,
536 ll_frand(2.f) - 1.f);
537 some_point.normalize();
538 some_point *= ll_frand(LARGE_RADIUS);
539
540 LLVector3 another_point( ll_frand(2.f) - 1.f,
541 ll_frand(2.f) - 1.f,
542 ll_frand(2.f) - 1.f);
543 another_point.normalize();
544 another_point *= ll_frand(LARGE_RADIUS);
545
546 // compute the axis of approach (a unit vector between the points)
547 LLVector3 axis_of_approach = another_point - some_point;
548 axis_of_approach.normalize();
549
550 // compute the direction of the the first line (perp to axis_of_approach)
551 LLVector3 first_dir( ll_frand(2.f) - 1.f,
552 ll_frand(2.f) - 1.f,
553 ll_frand(2.f) - 1.f);
554 F32 dot = first_dir * axis_of_approach;
555 first_dir -= dot * axis_of_approach; // subtract component parallel to axis
556 first_dir.normalize(); // normalize
557
558 // compute the direction of the the second line
559 LLVector3 second_dir( ll_frand(2.f) - 1.f,
560 ll_frand(2.f) - 1.f,
561 ll_frand(2.f) - 1.f);
562 dot = second_dir * axis_of_approach;
563 second_dir -= dot * axis_of_approach;
564 second_dir.normalize();
565
566 // make sure the lines aren't too parallel,
567 dot = fabsf(first_dir * second_dir);
568 if (dot > 0.99f)
569 {
570 // skip this test, we're not interested in testing
571 // the intractible cases
572 continue;
573 }
574
575 // construct the lines
576 LLVector3 first_point = some_point + ll_frand(LARGE_RADIUS) * first_dir;
577 LLLine first_line(first_point, some_point);
578
579 LLVector3 second_point = another_point + ll_frand(LARGE_RADIUS) * second_dir;
580 LLLine second_line(second_point, another_point);
581
582 // compute the points of nearest approach
583 LLVector3 some_computed_point = first_line.nearestApproach(second_line);
584 LLVector3 another_computed_point = second_line.nearestApproach(first_line);
585
586 // compute the error
587 F32 first_error = (some_point - some_computed_point).length();
588 F32 scale = llmax((some_point - another_point).length(), some_point.length());
589 scale = llmax(scale, another_point.length());
590 scale = llmax(scale, 1.f);
591 F32 first_relative_error = first_error / scale;
592
593 F32 second_error = (another_point - another_computed_point).length();
594 F32 second_relative_error = second_error / scale;
595
596 //if (first_relative_error > allowable_relative_error)
597 //{
598 // std::cout << "first_error = " << first_error
599 // << " first_relative_error = " << first_relative_error
600 // << " scale = " << scale
601 // << " dir_dot = " << (first_dir * second_dir)
602 // << std::endl;
603 //}
604 //if (second_relative_error > allowable_relative_error)
605 //{
606 // std::cout << "second_error = " << second_error
607 // << " second_relative_error = " << second_relative_error
608 // << " scale = " << scale
609 // << " dist = " << (some_point - another_point).length()
610 // << " dir_dot = " << (first_dir * second_dir)
611 // << std::endl;
612 //}
613
614 // test that the errors are small
615 ensure("first line should accurately compute its closest approach",
616 first_relative_error <= allowable_relative_error);
617 ensure("second line should accurately compute its closest approach",
618 second_relative_error <= allowable_relative_error);
619 }
620 }
621
622 F32 ALMOST_PARALLEL = 0.99f;
623 template<> template<>
624 void line_object::test<3>()
625 {
626 // this is a test for LLLine::getIntersectionBetweenTwoPlanes() method
627
628 // first some known tests
629 LLLine xy_plane(LLVector3(0.f, 0.f, 2.f), LLVector3(0.f, 0.f, 3.f));
630 LLLine yz_plane(LLVector3(2.f, 0.f, 0.f), LLVector3(3.f, 0.f, 0.f));
631 LLLine zx_plane(LLVector3(0.f, 2.f, 0.f), LLVector3(0.f, 3.f, 0.f));
632
633 LLLine x_line;
634 LLLine y_line;
635 LLLine z_line;
636
637 bool x_success = LLLine::getIntersectionBetweenTwoPlanes(x_line, xy_plane, zx_plane);
638 bool y_success = LLLine::getIntersectionBetweenTwoPlanes(y_line, yz_plane, xy_plane);
639 bool z_success = LLLine::getIntersectionBetweenTwoPlanes(z_line, zx_plane, yz_plane);
640
641 ensure("xy and zx planes should intersect", x_success);
642 ensure("yz and xy planes should intersect", y_success);
643 ensure("zx and yz planes should intersect", z_success);
644
645 LLVector3 direction = x_line.getDirection();
646 ensure("x_line should be parallel to x_axis", fabs(direction.mV[VX]) == 1.f
647 && 0.f == direction.mV[VY]
648 && 0.f == direction.mV[VZ] );
649 direction = y_line.getDirection();
650 ensure("y_line should be parallel to y_axis", 0.f == direction.mV[VX]
651 && fabs(direction.mV[VY]) == 1.f
652 && 0.f == direction.mV[VZ] );
653 direction = z_line.getDirection();
654 ensure("z_line should be parallel to z_axis", 0.f == direction.mV[VX]
655 && 0.f == direction.mV[VY]
656 && fabs(direction.mV[VZ]) == 1.f );
657
658 // next some random tests
659 F32 allowable_relative_error = 0.0001f;
660 S32 number_of_tests = 20;
661 for (S32 test = 0; test < number_of_tests; ++test)
662 {
663 // generate the known line
664 LLVector3 some_point( ll_frand(2.f) - 1.f,
665 ll_frand(2.f) - 1.f,
666 ll_frand(2.f) - 1.f);
667 some_point.normalize();
668 some_point *= ll_frand(LARGE_RADIUS);
669 LLVector3 another_point( ll_frand(2.f) - 1.f,
670 ll_frand(2.f) - 1.f,
671 ll_frand(2.f) - 1.f);
672 another_point.normalize();
673 another_point *= ll_frand(LARGE_RADIUS);
674 LLLine known_intersection(some_point, another_point);
675
676 // compute a plane that intersect the line
677 LLVector3 point_on_plane( ll_frand(2.f) - 1.f,
678 ll_frand(2.f) - 1.f,
679 ll_frand(2.f) - 1.f);
680 point_on_plane.normalize();
681 point_on_plane *= ll_frand(LARGE_RADIUS);
682 LLVector3 plane_normal = (point_on_plane - some_point) % known_intersection.getDirection();
683 plane_normal.normalize();
684 LLLine first_plane(point_on_plane, point_on_plane + plane_normal);
685
686 // compute a different plane that intersect the line
687 LLVector3 point_on_different_plane( ll_frand(2.f) - 1.f,
688 ll_frand(2.f) - 1.f,
689 ll_frand(2.f) - 1.f);
690 point_on_different_plane.normalize();
691 point_on_different_plane *= ll_frand(LARGE_RADIUS);
692 LLVector3 different_plane_normal = (point_on_different_plane - another_point) % known_intersection.getDirection();
693 different_plane_normal.normalize();
694 LLLine second_plane(point_on_different_plane, point_on_different_plane + different_plane_normal);
695
696 if (fabs(plane_normal * different_plane_normal) > ALMOST_PARALLEL)
697 {
698 // the two planes are approximately parallel, so we won't test this case
699 continue;
700 }
701
702 LLLine measured_intersection;
703 bool success = LLLine::getIntersectionBetweenTwoPlanes(
704 measured_intersection,
705 first_plane,
706 second_plane);
707
708 ensure("plane intersection should succeed", success);
709
710 F32 dot = fabs(known_intersection.getDirection() * measured_intersection.getDirection());
711 ensure("measured intersection should be parallel to known intersection",
712 dot > ALMOST_PARALLEL);
713
714 ensure("measured intersection should pass near known point",
715 measured_intersection.intersects(some_point, LARGE_RADIUS * allowable_relative_error));
716 }
717 }
718}
719
diff --git a/linden/indra/test/message_tut.cpp b/linden/indra/test/message_tut.cpp
index 60a249c..b619d38 100644
--- a/linden/indra/test/message_tut.cpp
+++ b/linden/indra/test/message_tut.cpp
@@ -62,7 +62,7 @@ namespace tut
62 if(! init) 62 if(! init)
63 { 63 {
64 ll_init_apr(); 64 ll_init_apr();
65 init_prehash_data(); 65 //init_prehash_data();
66 init = true; 66 init = true;
67 } 67 }
68 68
diff --git a/linden/indra/test/prim_linkability_tut.cpp b/linden/indra/test/prim_linkability_tut.cpp
new file mode 100644
index 0000000..c5f2958
--- /dev/null
+++ b/linden/indra/test/prim_linkability_tut.cpp
@@ -0,0 +1,490 @@
1/**
2 * @file linkability.cpp
3 * @author andrew@lindenlab.com
4 * @date 2007-04-23
5 * @brief Tests for the LLPrimLinkInfo template which computes the linkability of prims
6 *
7 * $LicenseInfo:firstyear=2007&license=internal$
8 *
9 * Copyright (c) 2007-2008, Linden Research, Inc.
10 *
11 * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
12 * this source code is governed by the Linden Lab Source Code Disclosure
13 * Agreement ("Agreement") previously entered between you and Linden
14 * Lab. By accessing, using, copying, modifying or distributing this
15 * software, you acknowledge that you have been informed of your
16 * obligations under the Agreement and agree to abide by those obligations.
17 *
18 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
19 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
20 * COMPLETENESS OR PERFORMANCE.
21 * $/LicenseInfo$
22 */
23
24#include "linden_common.h"
25#include "lltut.h"
26#include "llprimlinkinfo.h"
27#include "llrand.h"
28
29
30// helper function
31void randomize_sphere(LLSphere& sphere, F32 center_range, F32 radius_range)
32{
33 F32 radius = ll_frand(2.f * radius_range) - radius_range;
34 LLVector3 center;
35 for (S32 i=0; i<3; ++i)
36 {
37 center.mV[i] = ll_frand(2.f * center_range) - center_range;
38 }
39 sphere.setRadius(radius);
40 sphere.setCenter(center);
41}
42
43// helper function. Same as above with a min and max radius.
44void randomize_sphere(LLSphere& sphere, F32 center_range, F32 minimum_radius, F32 maximum_radius)
45{
46 F32 radius = ll_frand(maximum_radius - minimum_radius) + minimum_radius;
47 LLVector3 center;
48 for (S32 i=0; i<3; ++i)
49 {
50 center.mV[i] = ll_frand(2.f * center_range) - center_range;
51 }
52 sphere.setRadius(radius);
53 sphere.setCenter(center);
54}
55
56// helper function
57bool random_sort( const LLPrimLinkInfo< S32 >&, const LLPrimLinkInfo< S32 >& b)
58{
59 return (ll_rand(64) < 32);
60}
61
62namespace tut
63{
64 struct linkable_data
65 {
66 LLPrimLinkInfo<S32> info;
67 };
68
69 typedef test_group<linkable_data> linkable_test;
70 typedef linkable_test::object linkable_object;
71 tut::linkable_test wtf("prim linkability");
72
73 template<> template<>
74 void linkable_object::test<1>()
75 {
76 // Here we test the boundary of the LLPrimLinkInfo::canLink() method
77 // between semi-random middle-sized objects.
78
79 S32 number_of_tests = 100;
80 for (S32 test = 0; test < number_of_tests; ++test)
81 {
82 // compute the radii that would provide the above max link distance
83 F32 first_radius = 0.f;
84 F32 second_radius = 0.f;
85
86 // compute a random center for the first sphere
87 // compute some random max link distance
88 F32 max_link_span = ll_frand(MAX_OBJECT_SPAN);
89 if (max_link_span < OBJECT_SPAN_BONUS)
90 {
91 max_link_span += OBJECT_SPAN_BONUS;
92 }
93 LLVector3 first_center(
94 ll_frand(2.f * max_link_span) - max_link_span,
95 ll_frand(2.f * max_link_span) - max_link_span,
96 ll_frand(2.f * max_link_span) - max_link_span);
97
98 // put the second sphere at the right distance from the origin
99 // such that it is within the max_link_distance of the first
100 LLVector3 direction(ll_frand(2.f) - 1.f, ll_frand(2.f) - 1.f, ll_frand(2.f) - 1.f);
101 direction.normalize();
102 F32 half_milimeter = 0.0005f;
103 LLVector3 second_center;
104
105 // max_span = 3 * (first_radius + second_radius) + OBJECT_SPAN_BONUS
106 // make sure they link at short distances
107 {
108 second_center = first_center + (OBJECT_SPAN_BONUS - half_milimeter) * direction;
109 LLPrimLinkInfo<S32> first_info(0, LLSphere(first_center, first_radius) );
110 LLPrimLinkInfo<S32> second_info(1, LLSphere(second_center, second_radius) );
111 ensure("these nearby objects should link", first_info.canLink(second_info) );
112 }
113
114 // make sure they fail to link if we move them apart just a little bit
115 {
116 second_center = first_center + (OBJECT_SPAN_BONUS + half_milimeter) * direction;
117 LLPrimLinkInfo<S32> first_info(0, LLSphere(first_center, first_radius) );
118 LLPrimLinkInfo<S32> second_info(1, LLSphere(second_center, second_radius) );
119 ensure("these nearby objects should NOT link", !first_info.canLink(second_info) );
120 }
121
122 // make sure the objects link or not at medium distances
123 {
124 first_radius = 0.3f * ll_frand(max_link_span - OBJECT_SPAN_BONUS);
125
126 // This is the exact second radius that will link at exactly our random max_link_distance
127 second_radius = ((max_link_span - OBJECT_SPAN_BONUS) / 3.f) - first_radius;
128 second_center = first_center + (max_link_span - first_radius - second_radius - half_milimeter) * direction;
129
130 LLPrimLinkInfo<S32> first_info(0, LLSphere(first_center, first_radius) );
131 LLPrimLinkInfo<S32> second_info(1, LLSphere(second_center, second_radius) );
132
133 ensure("these objects should link", first_info.canLink(second_info) );
134 }
135
136 // make sure they fail to link if we move them apart just a little bit
137 {
138 // move the second sphere such that it is a little too far from the first
139 second_center += (2.f * half_milimeter) * direction;
140 LLPrimLinkInfo<S32> first_info(0, LLSphere(first_center, first_radius) );
141 LLPrimLinkInfo<S32> second_info(1, LLSphere(second_center, second_radius) );
142
143 ensure("these objects should NOT link", !first_info.canLink(second_info) );
144 }
145
146 // make sure things don't link at far distances
147 {
148 second_center = first_center + (MAX_OBJECT_SPAN + 2.f * half_milimeter) * direction;
149 second_radius = 0.3f * MAX_OBJECT_SPAN;
150 LLPrimLinkInfo<S32> first_info(0, LLSphere(first_center, first_radius) );
151 LLPrimLinkInfo<S32> second_info(1, LLSphere(second_center, second_radius) );
152 ensure("these objects should NOT link", !first_info.canLink(second_info) );
153 }
154
155 }
156 }
157
158 template<> template<>
159 void linkable_object::test<2>()
160 {
161
162 // Consider a row of eight spheres in a row, each 10m in diameter and centered
163 // at 10m intervals: 01234567.
164
165 F32 radius = 5.f;
166 F32 spacing = 10.f;
167
168 LLVector3 line_direction(ll_frand(2.f) - 1.f, ll_frand(2.f) - 1.f, ll_frand(2.f) - 1.f);
169 line_direction.normalize();
170
171 LLVector3 first_center(ll_frand(2.f * spacing) -spacing, ll_frand(2.f * spacing) - spacing, ll_frand(2.f * spacing) - spacing);
172
173 LLPrimLinkInfo<S32> infos[8];
174
175 for (S32 index = 0; index < 8; ++index)
176 {
177 LLVector3 center = first_center + ((F32)(index) * spacing) * line_direction;
178 infos[index].set(index, LLSphere(center, radius));
179 }
180
181 // Max span for 2 spheres of 5m radius is 3 * (5 + 5) + 1 = 31m
182 // spheres 0&2 have a 30m span (from outside edge to outside edge) and should link
183 {
184 LLPrimLinkInfo<S32> root_info = infos[0];
185 std::list< LLPrimLinkInfo<S32> > info_list;
186 info_list.push_back(infos[2]);
187 root_info.mergeLinkableSet(info_list);
188 S32 prim_count = root_info.getPrimCount();
189 ensure_equals("0&2 prim count should be 2", prim_count, 2);
190 ensure_equals("0&2 unlinkable list should have length 0", (S32) info_list.size(), 0);
191 }
192
193
194 // spheres 0&3 have a 40 meter span and should NOT link outright
195 {
196 LLPrimLinkInfo<S32> root_info = infos[0];
197 std::list< LLPrimLinkInfo<S32> > info_list;
198 info_list.push_back(infos[3]);
199 root_info.mergeLinkableSet(info_list);
200 S32 prim_count = root_info.getPrimCount();
201 ensure_equals("0&4 prim count should be 1", prim_count, 1);
202 ensure_equals("0&4 unlinkable list should have length 1", (S32) info_list.size(), 1);
203 }
204
205
206 // spheres 0-4 should link no matter what order : 01234
207 // Total span = 50m, 012 link with a r=15.5 giving max span of 3 * (15.5 + 5) + 1 = 62.5, but the cap is 54m
208 {
209 LLPrimLinkInfo<S32> root_info = infos[0];
210 std::list< LLPrimLinkInfo<S32> > info_list;
211 for (S32 index = 1; index < 5; ++index)
212 {
213 info_list.push_back(infos[index]);
214 }
215 root_info.mergeLinkableSet(info_list);
216 S32 prim_count = root_info.getPrimCount();
217 ensure_equals("01234 prim count should be 5", prim_count, 5);
218 ensure_equals("01234 unlinkable list should have length 0", (S32) info_list.size(), 0);
219 }
220
221
222 // spheres 0-5 should link no matter what order : 04321
223 {
224 LLPrimLinkInfo<S32> root_info = infos[0];
225 std::list< LLPrimLinkInfo<S32> > info_list;
226 for (S32 index = 4; index > 0; --index)
227 {
228 info_list.push_back(infos[index]);
229 }
230 root_info.mergeLinkableSet(info_list);
231 S32 prim_count = root_info.getPrimCount();
232 ensure_equals("04321 prim count should be 5", prim_count, 5);
233 ensure_equals("04321 unlinkable list should have length 0", (S32) info_list.size(), 0);
234 }
235
236 // spheres 0-4 should link no matter what order : 01423
237 {
238 LLPrimLinkInfo<S32> root_info = infos[0];
239 std::list< LLPrimLinkInfo<S32> > info_list;
240 info_list.push_back(infos[1]);
241 info_list.push_back(infos[4]);
242 info_list.push_back(infos[2]);
243 info_list.push_back(infos[3]);
244 root_info.mergeLinkableSet(info_list);
245 S32 prim_count = root_info.getPrimCount();
246 ensure_equals("01423 prim count should be 5", prim_count, 5);
247 ensure_equals("01423 unlinkable list should have length 0", (S32) info_list.size(), 0);
248 }
249
250 // spheres 0-5 should NOT fully link, only 0-4
251 {
252 LLPrimLinkInfo<S32> root_info = infos[0];
253 std::list< LLPrimLinkInfo<S32> > info_list;
254 for (S32 index = 1; index < 6; ++index)
255 {
256 info_list.push_back(infos[index]);
257 }
258 root_info.mergeLinkableSet(info_list);
259 S32 prim_count = root_info.getPrimCount();
260 ensure_equals("012345 prim count should be 5", prim_count, 5);
261 ensure_equals("012345 unlinkable list should have length 1", (S32) info_list.size(), 1);
262 std::list< LLPrimLinkInfo<S32> >::iterator info_itr = info_list.begin();
263 if (info_itr != info_list.end())
264 {
265 // examine the contents of the unlinked info
266 std::list<S32> unlinked_indecies;
267 info_itr->getData(unlinked_indecies);
268 // make sure there is only one index in the unlinked_info
269 ensure_equals("012345 unlinkable index count should be 1", (S32) unlinked_indecies.size(), 1);
270 // make sure its value is 6
271 std::list<S32>::iterator unlinked_index_itr = unlinked_indecies.begin();
272 S32 unlinkable_index = *unlinked_index_itr;
273 ensure_equals("012345 unlinkable index should be 5", (S32) unlinkable_index, 5);
274 }
275 }
276
277 // spheres 0-7 should NOT fully link, only 0-5
278 {
279 LLPrimLinkInfo<S32> root_info = infos[0];
280 std::list< LLPrimLinkInfo<S32> > info_list;
281 for (S32 index = 1; index < 8; ++index)
282 {
283 info_list.push_back(infos[index]);
284 }
285 root_info.mergeLinkableSet(info_list);
286 S32 prim_count = root_info.getPrimCount();
287 ensure_equals("01234567 prim count should be 5", prim_count, 5);
288 // Should be 1 linkinfo on unlinkable that has 2 prims
289 ensure_equals("01234567 unlinkable list should have length 1", (S32) info_list.size(), 1);
290 std::list< LLPrimLinkInfo<S32> >::iterator info_itr = info_list.begin();
291 if (info_itr != info_list.end())
292 {
293 // make sure there is only one index in the unlinked_info
294 std::list<S32> unlinked_indecies;
295 info_itr->getData(unlinked_indecies);
296 ensure_equals("0123456 unlinkable index count should be 3", (S32) unlinked_indecies.size(), 3);
297
298 // make sure its values are 6 and 7
299 std::list<S32>::iterator unlinked_index_itr = unlinked_indecies.begin();
300 S32 unlinkable_index = *unlinked_index_itr;
301 ensure_equals("0123456 first unlinkable index should be 5", (S32) unlinkable_index, 5);
302 ++unlinked_index_itr;
303 unlinkable_index = *unlinked_index_itr;
304 ensure_equals("0123456 second unlinkable index should be 6", (S32) unlinkable_index, 6);
305 ++unlinked_index_itr;
306 unlinkable_index = *unlinked_index_itr;
307 ensure_equals("0123456 third unlinkable index should be 7", (S32) unlinkable_index, 7);
308
309 }
310 }
311 }
312
313 template<> template<>
314 void linkable_object::test<3>()
315 {
316 // Here we test the link results between an LLPrimLinkInfo and a set of
317 // randomized LLPrimLinkInfos where the expected results are known.
318 S32 number_of_tests = 5;
319 for (S32 test = 0; test < number_of_tests; ++test)
320 {
321 // the radii are known
322 F32 first_radius = 1.f;
323 F32 second_radius = 2.f;
324 F32 third_radius = 3.f;
325
326 // compute the distances
327 F32 half_milimeter = 0.0005f;
328 F32 max_first_second_span = 3.f * (first_radius + second_radius) + OBJECT_SPAN_BONUS;
329 F32 linkable_distance = max_first_second_span - first_radius - second_radius - half_milimeter;
330
331 F32 max_full_span = 3.f * (0.5f * max_first_second_span + third_radius) + OBJECT_SPAN_BONUS;
332 F32 unlinkable_distance = max_full_span - 0.5f * linkable_distance - third_radius + half_milimeter;
333
334 // compute some random directions
335 LLVector3 first_direction(ll_frand(2.f) - 1.f, ll_frand(2.f) - 1.f, ll_frand(2.f) - 1.f);
336 first_direction.normalize();
337 LLVector3 second_direction(ll_frand(2.f) - 1.f, ll_frand(2.f) - 1.f, ll_frand(2.f) - 1.f);
338 second_direction.normalize();
339 LLVector3 third_direction(ll_frand(2.f) - 1.f, ll_frand(2.f) - 1.f, ll_frand(2.f) - 1.f);
340 third_direction.normalize();
341
342 // compute the centers
343 LLVector3 first_center = ll_frand(10.f) * first_direction;
344 LLVector3 second_center = first_center + ll_frand(linkable_distance) * second_direction;
345 LLVector3 first_join_center = 0.5f * (first_center + second_center);
346 LLVector3 third_center = first_join_center + unlinkable_distance * third_direction;
347
348 // make sure the second info links and the third does not
349 {
350 // initialize the infos
351 S32 index = 0;
352 LLPrimLinkInfo<S32> first_info(index++, LLSphere(first_center, first_radius));
353 LLPrimLinkInfo<S32> second_info(index++, LLSphere(second_center, second_radius));
354 LLPrimLinkInfo<S32> third_info(index++, LLSphere(third_center, third_radius));
355
356 // put the second and third infos in a list
357 std::list< LLPrimLinkInfo<S32> > info_list;
358 info_list.push_back(second_info);
359 info_list.push_back(third_info);
360
361 // merge the list with the first_info
362 first_info.mergeLinkableSet(info_list);
363 S32 prim_count = first_info.getPrimCount();
364
365 ensure_equals("prim count should be 2", prim_count, 2);
366 ensure_equals("unlinkable list should have length 1", (S32) info_list.size(), 1);
367 }
368
369 // reverse the order and make sure we get the same results
370 {
371 // initialize the infos
372 S32 index = 0;
373 LLPrimLinkInfo<S32> first_info(index++, LLSphere(first_center, first_radius));
374 LLPrimLinkInfo<S32> second_info(index++, LLSphere(second_center, second_radius));
375 LLPrimLinkInfo<S32> third_info(index++, LLSphere(third_center, third_radius));
376
377 // build the list in the reverse order
378 std::list< LLPrimLinkInfo<S32> > info_list;
379 info_list.push_back(third_info);
380 info_list.push_back(second_info);
381
382 // merge the list with the first_info
383 first_info.mergeLinkableSet(info_list);
384 S32 prim_count = first_info.getPrimCount();
385
386 ensure_equals("prim count should be 2", prim_count, 2);
387 ensure_equals("unlinkable list should have length 1", (S32) info_list.size(), 1);
388 }
389 }
390 }
391
392 template<> template<>
393 void linkable_object::test<4>()
394 {
395 // Here we test whether linkability is invarient under permutations
396 // of link order. To do this we generate a bunch of random spheres
397 // and then try to link them in different ways.
398 //
399 // NOTE: the linkability will only be invarient if there is only one
400 // linkable solution. Multiple solutions will exist if the set of
401 // candidates are larger than the maximum linkable distance, or more
402 // numerous than a single linked object can contain. This is easily
403 // understood by considering a very large set of link candidates,
404 // and first linking preferentially to the left until linking fails,
405 // then doing the same to the right -- the final solutions will differ.
406 // Hence for this test we must generate candidate sets that lie within
407 // the linkability envelope of a single object.
408 //
409 // NOTE: a random set of objects will tend to either be totally linkable
410 // or totally not. That is, the random orientations that
411
412 F32 root_center_range = 0.f;
413 F32 min_prim_radius = 0.1f;
414 F32 max_prim_radius = 2.f;
415
416 // Linkability is min(MAX_OBJECT_SPAN,3 *( R1 + R2 ) + BONUS)
417 // 3 * (min_prim_radius + min_prim_radius) + OBJECT_SPAN_BONUS = 6 * min_prim_radius + OBJECT_SPAN_BONUS;
418 // Use .45 instead of .5 to gaurantee objects are within the minimum span.
419 F32 child_center_range = 0.45f * ( (6*min_prim_radius) + OBJECT_SPAN_BONUS );
420
421 S32 number_of_tests = 100;
422 S32 number_of_spheres = 10;
423 S32 number_of_scrambles = 10;
424 S32 number_of_random_bubble_sorts = 10;
425
426 for (S32 test = 0; test < number_of_tests; ++test)
427 {
428 LLSphere sphere;
429 S32 sphere_index = 0;
430
431 // build the root piece
432 randomize_sphere(sphere, root_center_range, min_prim_radius, max_prim_radius);
433 info.set( sphere_index++, sphere );
434
435 // build the unlinked pieces
436 std::list< LLPrimLinkInfo<S32> > info_list;
437 for (; sphere_index < number_of_spheres; ++sphere_index)
438 {
439 randomize_sphere(sphere, child_center_range, min_prim_radius, max_prim_radius);
440 LLPrimLinkInfo<S32> child_info( sphere_index, sphere );
441 info_list.push_back(child_info);
442 }
443
444 // declare the variables used to store the results
445 std::list<S32> first_linked_list;
446
447 {
448 // the link attempt will modify our original info's, so we
449 // have to make copies of the originals for testing
450 LLPrimLinkInfo<S32> test_info( 0, LLSphere(info.getCenter(), 0.5f * info.getDiameter()) );
451 std::list< LLPrimLinkInfo<S32> > test_list;
452 test_list.assign(info_list.begin(), info_list.end());
453
454 // try to link
455 test_info.mergeLinkableSet(test_list);
456
457 ensure("All prims should link, but did not.",test_list.empty());
458
459 // store the results
460 test_info.getData(first_linked_list);
461 first_linked_list.sort();
462 }
463
464 // try to link the spheres in various random orders
465 for (S32 scramble = 0; scramble < number_of_scrambles; ++scramble)
466 {
467 LLPrimLinkInfo<S32> test_info(0, LLSphere(info.getCenter(), 0.5f * info.getDiameter()) );
468
469 // scramble the order of the info_list
470 std::list< LLPrimLinkInfo<S32> > test_list;
471 test_list.assign(info_list.begin(), info_list.end());
472 for (S32 i = 0; i < number_of_random_bubble_sorts; i++)
473 {
474 test_list.sort(random_sort);
475 }
476
477 // try to link
478 test_info.mergeLinkableSet(test_list);
479
480 // get the results
481 std::list<S32> linked_list;
482 test_info.getData(linked_list);
483 linked_list.sort();
484
485 ensure_equals("linked set size should be order independent",linked_list.size(),first_linked_list.size());
486 }
487 }
488 }
489}
490
diff --git a/linden/indra/test/test.vcproj b/linden/indra/test/test.vcproj
index 4476c2e..f720d9a 100644
--- a/linden/indra/test/test.vcproj
+++ b/linden/indra/test/test.vcproj
@@ -20,7 +20,7 @@
20 <Tool 20 <Tool
21 Name="VCCLCompilerTool" 21 Name="VCCLCompilerTool"
22 Optimization="0" 22 Optimization="0"
23 AdditionalIncludeDirectories="..\llcharacter;..\llcommon;..\lldatabase;..\llinventory;..\llmath;..\llmessage;..\llxml;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include" 23 AdditionalIncludeDirectories="..\;..\llcharacter;..\llcommon;..\lldatabase;..\llinventory;..\llmath;..\llmessage;..\llprimitive;..\llxml;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include"
24 PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;LL_WINDOWS;LL_DEBUG" 24 PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;LL_WINDOWS;LL_DEBUG"
25 MinimalRebuild="FALSE" 25 MinimalRebuild="FALSE"
26 BasicRuntimeChecks="3" 26 BasicRuntimeChecks="3"
@@ -35,7 +35,7 @@
35 <Tool 35 <Tool
36 Name="VCLinkerTool" 36 Name="VCLinkerTool"
37 AdditionalOptions="/FORCE:MULTIPLE" 37 AdditionalOptions="/FORCE:MULTIPLE"
38 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc71-mt-s.lib libcurld.lib libeay32.lib libexpatMT.lib llcommon.lib llprimitive.lib llvfs.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ole32.lib oleaut32.lib opengl32.lib psapi.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib" 38 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc71-mt-sgd-1_34_1.lib libcurld.lib libeay32.lib libexpatMT.lib llcommon.lib llphysics.lib llprimitive.lib llvfs.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ole32.lib oleaut32.lib opengl32.lib psapi.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib"
39 OutputFile="$(OutDir)/test.exe" 39 OutputFile="$(OutDir)/test.exe"
40 LinkIncremental="2" 40 LinkIncremental="2"
41 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_debug&quot;" 41 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_debug&quot;"
@@ -74,7 +74,7 @@
74 <Tool 74 <Tool
75 Name="VCCLCompilerTool" 75 Name="VCCLCompilerTool"
76 Optimization="0" 76 Optimization="0"
77 AdditionalIncludeDirectories="..\llcharacter;..\llcommon;..\lldatabase;..\llinventory;..\llmath;..\llmessage;..\llxml;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include" 77 AdditionalIncludeDirectories="..\;..\llcharacter;..\llcommon;..\lldatabase;..\llinventory;..\llmath;..\llmessage;..\llprimitive;..\llxml;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include"
78 PreprocessorDefinitions="WIN32;__WIN32;NDEBUG;_WINDOWS;LL_WINDOWS;LL_RELEASE;APR_DECLARE_STATIC;LL_HTTPD=1" 78 PreprocessorDefinitions="WIN32;__WIN32;NDEBUG;_WINDOWS;LL_WINDOWS;LL_RELEASE;APR_DECLARE_STATIC;LL_HTTPD=1"
79 MinimalRebuild="FALSE" 79 MinimalRebuild="FALSE"
80 BasicRuntimeChecks="3" 80 BasicRuntimeChecks="3"
@@ -90,7 +90,7 @@
90 <Tool 90 <Tool
91 Name="VCLinkerTool" 91 Name="VCLinkerTool"
92 AdditionalOptions="/FORCE:MULTIPLE" 92 AdditionalOptions="/FORCE:MULTIPLE"
93 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc71-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib llcommon.lib llprimitive.lib llvfs.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ole32.lib oleaut32.lib opengl32.lib psapi.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib" 93 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc71-mt-s-1_34_1.lib libcurl.lib libeay32.lib libexpatMT.lib llcommon.lib llphysics.lib llprimitive.lib llvfs.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ole32.lib oleaut32.lib opengl32.lib psapi.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib"
94 OutputFile="$(OutDir)/test.exe" 94 OutputFile="$(OutDir)/test.exe"
95 LinkIncremental="2" 95 LinkIncremental="2"
96 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;" 96 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;"
@@ -130,7 +130,7 @@
130 <Tool 130 <Tool
131 Name="VCCLCompilerTool" 131 Name="VCCLCompilerTool"
132 Optimization="0" 132 Optimization="0"
133 AdditionalIncludeDirectories="..\llcharacter;..\llcommon;..\lldatabase;..\llinventory;..\llmath;..\llmessage;..\llxml;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include" 133 AdditionalIncludeDirectories="..\;..\llcharacter;..\llcommon;..\lldatabase;..\llinventory;..\llmath;..\llmessage;..\llprimitive;..\llxml;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include"
134 PreprocessorDefinitions="WIN32;__WIN32;NDEBUG;_WINDOWS;LL_WINDOWS;LL_RELEASE;APR_DECLARE_STATIC;LL_HTTPD=1" 134 PreprocessorDefinitions="WIN32;__WIN32;NDEBUG;_WINDOWS;LL_WINDOWS;LL_RELEASE;APR_DECLARE_STATIC;LL_HTTPD=1"
135 MinimalRebuild="FALSE" 135 MinimalRebuild="FALSE"
136 BasicRuntimeChecks="3" 136 BasicRuntimeChecks="3"
@@ -145,7 +145,7 @@
145 Name="VCCustomBuildTool"/> 145 Name="VCCustomBuildTool"/>
146 <Tool 146 <Tool
147 Name="VCLinkerTool" 147 Name="VCLinkerTool"
148 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib comdlg32.lib gdi32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc71-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ole32.lib oleaut32.lib psapi.lib shell32.lib ssleay32.lib user32.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib" 148 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib comdlg32.lib gdi32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc71-mt-s-1_34_1.lib libcurl.lib libeay32.lib libexpatMT.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ole32.lib oleaut32.lib psapi.lib shell32.lib ssleay32.lib user32.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib"
149 OutputFile="$(OutDir)/test.exe" 149 OutputFile="$(OutDir)/test.exe"
150 LinkIncremental="2" 150 LinkIncremental="2"
151 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;" 151 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;"
@@ -219,6 +219,9 @@
219 RelativePath=".\lljoint_tut.cpp"> 219 RelativePath=".\lljoint_tut.cpp">
220 </File> 220 </File>
221 <File 221 <File
222 RelativePath=".\llmessageconfig_tut.cpp">
223 </File>
224 <File
222 RelativePath=".\llmime_tut.cpp"> 225 RelativePath=".\llmime_tut.cpp">
223 </File> 226 </File>
224 <File 227 <File
@@ -281,10 +284,14 @@
281 <File 284 <File
282 RelativePath=".\lluuidhashmap_tut.cpp"> 285 RelativePath=".\lluuidhashmap_tut.cpp">
283 </File> 286 </File>
287
284 <File 288 <File
285 RelativePath=".\math.cpp"> 289 RelativePath=".\math.cpp">
286 </File> 290 </File>
287 <File 291 <File
292 RelativePath=".\prim_linkability_tut.cpp">
293 </File>
294 <File
288 RelativePath=".\reflection_tut.cpp"> 295 RelativePath=".\reflection_tut.cpp">
289 </File> 296 </File>
290 <File 297 <File
diff --git a/linden/indra/test/test_vc8.vcproj b/linden/indra/test/test_vc8.vcproj
index 2f607cb..6d47de8 100644
--- a/linden/indra/test/test_vc8.vcproj
+++ b/linden/indra/test/test_vc8.vcproj
@@ -65,7 +65,7 @@
65 <Tool 65 <Tool
66 Name="VCLinkerTool" 66 Name="VCLinkerTool"
67 AdditionalOptions="/FORCE:MULTIPLE" 67 AdditionalOptions="/FORCE:MULTIPLE"
68 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib llcommon.lib llprimitive.lib llvfs.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ole32.lib oleaut32.lib opengl32.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib" 68 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.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 libcurl.lib libeay32.lib libexpatMT.lib llcommon.lib llprimitive.lib llvfs.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ole32.lib oleaut32.lib opengl32.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib"
69 OutputFile="$(OutDir)/test.exe" 69 OutputFile="$(OutDir)/test.exe"
70 LinkIncremental="2" 70 LinkIncremental="2"
71 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_debug&quot;" 71 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_debug&quot;"
@@ -155,7 +155,7 @@
155 <Tool 155 <Tool
156 Name="VCLinkerTool" 156 Name="VCLinkerTool"
157 AdditionalOptions="/FORCE:MULTIPLE" 157 AdditionalOptions="/FORCE:MULTIPLE"
158 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib llcommon.lib llprimitive.lib llvfs.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ole32.lib oleaut32.lib opengl32.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib" 158 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.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 llcommon.lib llprimitive.lib llvfs.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ole32.lib oleaut32.lib opengl32.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib"
159 OutputFile="$(OutDir)/test.exe" 159 OutputFile="$(OutDir)/test.exe"
160 LinkIncremental="2" 160 LinkIncremental="2"
161 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;" 161 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;"
@@ -243,7 +243,7 @@
243 /> 243 />
244 <Tool 244 <Tool
245 Name="VCLinkerTool" 245 Name="VCLinkerTool"
246 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib llcommon.lib llprimitive.lib llvfs.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ole32.lib oleaut32.lib opengl32.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib" 246 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.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 llcommon.lib llprimitive.lib llvfs.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ole32.lib oleaut32.lib opengl32.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib"
247 OutputFile="$(OutDir)/test.exe" 247 OutputFile="$(OutDir)/test.exe"
248 LinkIncremental="2" 248 LinkIncremental="2"
249 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;" 249 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;"
diff --git a/linden/indra/test/test_vc9.vcproj b/linden/indra/test/test_vc9.vcproj
index 7230df4..d7fcfae 100644
--- a/linden/indra/test/test_vc9.vcproj
+++ b/linden/indra/test/test_vc9.vcproj
@@ -242,7 +242,7 @@
242 /> 242 />
243 <Tool 243 <Tool
244 Name="VCLinkerTool" 244 Name="VCLinkerTool"
245 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib llcommon.lib llprimitive.lib llvfs.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ole32.lib oleaut32.lib opengl32.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib" 245 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib comdlg32.lib dinput8.lib dsound.lib dxerr.lib dxguid.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib llcommon.lib llprimitive.lib llvfs.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ole32.lib oleaut32.lib opengl32.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib"
246 OutputFile="$(OutDir)/test.exe" 246 OutputFile="$(OutDir)/test.exe"
247 LinkIncremental="2" 247 LinkIncremental="2"
248 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;" 248 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;"
diff --git a/linden/libraries/i686-win32/include/GL/README.txt b/linden/libraries/i686-win32/include/GL/README.txt
new file mode 100644
index 0000000..f9a39e9
--- /dev/null
+++ b/linden/libraries/i686-win32/include/GL/README.txt
@@ -0,0 +1,5 @@
1Note:
2Most of these files (glext.h, glxext.h, wglext.h) come from the Khronos GL Extension registry at:
3
4http://www.opengl.org/registry/
5
diff --git a/linden/libraries/i686-win32/include/GL/glext.h b/linden/libraries/i686-win32/include/GL/glext.h
new file mode 100644
index 0000000..3d69d4e
--- /dev/null
+++ b/linden/libraries/i686-win32/include/GL/glext.h
@@ -0,0 +1,7271 @@
1#ifndef __glext_h_
2#define __glext_h_
3
4#ifdef __cplusplus
5extern "C" {
6#endif
7
8/*
9** Copyright (c) 2007 The Khronos Group Inc.
10**
11** Permission is hereby granted, free of charge, to any person obtaining a
12** copy of this software and/or associated documentation files (the
13** "Materials"), to deal in the Materials without restriction, including
14** without limitation the rights to use, copy, modify, merge, publish,
15** distribute, sublicense, and/or sell copies of the Materials, and to
16** permit persons to whom the Materials are furnished to do so, subject to
17** the following conditions:
18**
19** The above copyright notice and this permission notice shall be included
20** in all copies or substantial portions of the Materials.
21**
22** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
25** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
26** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
27** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
28** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
29*/
30
31#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
32#define WIN32_LEAN_AND_MEAN 1
33#include <windows.h>
34#endif
35
36#ifndef APIENTRY
37#define APIENTRY
38#endif
39#ifndef APIENTRYP
40#define APIENTRYP APIENTRY *
41#endif
42#ifndef GLAPI
43#define GLAPI extern
44#endif
45
46/*************************************************************/
47
48/* Header file version number, required by OpenGL ABI for Linux */
49/* glext.h last updated 2007/02/12 */
50/* Current version at http://www.opengl.org/registry/ */
51#define GL_GLEXT_VERSION 39
52
53#ifndef GL_VERSION_1_2
54#define GL_UNSIGNED_BYTE_3_3_2 0x8032
55#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033
56#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034
57#define GL_UNSIGNED_INT_8_8_8_8 0x8035
58#define GL_UNSIGNED_INT_10_10_10_2 0x8036
59#define GL_RESCALE_NORMAL 0x803A
60#define GL_TEXTURE_BINDING_3D 0x806A
61#define GL_PACK_SKIP_IMAGES 0x806B
62#define GL_PACK_IMAGE_HEIGHT 0x806C
63#define GL_UNPACK_SKIP_IMAGES 0x806D
64#define GL_UNPACK_IMAGE_HEIGHT 0x806E
65#define GL_TEXTURE_3D 0x806F
66#define GL_PROXY_TEXTURE_3D 0x8070
67#define GL_TEXTURE_DEPTH 0x8071
68#define GL_TEXTURE_WRAP_R 0x8072
69#define GL_MAX_3D_TEXTURE_SIZE 0x8073
70#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362
71#define GL_UNSIGNED_SHORT_5_6_5 0x8363
72#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364
73#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365
74#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366
75#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367
76#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368
77#define GL_BGR 0x80E0
78#define GL_BGRA 0x80E1
79#define GL_MAX_ELEMENTS_VERTICES 0x80E8
80#define GL_MAX_ELEMENTS_INDICES 0x80E9
81#define GL_CLAMP_TO_EDGE 0x812F
82#define GL_TEXTURE_MIN_LOD 0x813A
83#define GL_TEXTURE_MAX_LOD 0x813B
84#define GL_TEXTURE_BASE_LEVEL 0x813C
85#define GL_TEXTURE_MAX_LEVEL 0x813D
86#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8
87#define GL_SINGLE_COLOR 0x81F9
88#define GL_SEPARATE_SPECULAR_COLOR 0x81FA
89#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12
90#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13
91#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22
92#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23
93#define GL_ALIASED_POINT_SIZE_RANGE 0x846D
94#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E
95#endif
96
97#ifndef GL_ARB_imaging
98#define GL_CONSTANT_COLOR 0x8001
99#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002
100#define GL_CONSTANT_ALPHA 0x8003
101#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004
102#define GL_BLEND_COLOR 0x8005
103#define GL_FUNC_ADD 0x8006
104#define GL_MIN 0x8007
105#define GL_MAX 0x8008
106#define GL_BLEND_EQUATION 0x8009
107#define GL_FUNC_SUBTRACT 0x800A
108#define GL_FUNC_REVERSE_SUBTRACT 0x800B
109#define GL_CONVOLUTION_1D 0x8010
110#define GL_CONVOLUTION_2D 0x8011
111#define GL_SEPARABLE_2D 0x8012
112#define GL_CONVOLUTION_BORDER_MODE 0x8013
113#define GL_CONVOLUTION_FILTER_SCALE 0x8014
114#define GL_CONVOLUTION_FILTER_BIAS 0x8015
115#define GL_REDUCE 0x8016
116#define GL_CONVOLUTION_FORMAT 0x8017
117#define GL_CONVOLUTION_WIDTH 0x8018
118#define GL_CONVOLUTION_HEIGHT 0x8019
119#define GL_MAX_CONVOLUTION_WIDTH 0x801A
120#define GL_MAX_CONVOLUTION_HEIGHT 0x801B
121#define GL_POST_CONVOLUTION_RED_SCALE 0x801C
122#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D
123#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E
124#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F
125#define GL_POST_CONVOLUTION_RED_BIAS 0x8020
126#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021
127#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022
128#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023
129#define GL_HISTOGRAM 0x8024
130#define GL_PROXY_HISTOGRAM 0x8025
131#define GL_HISTOGRAM_WIDTH 0x8026
132#define GL_HISTOGRAM_FORMAT 0x8027
133#define GL_HISTOGRAM_RED_SIZE 0x8028
134#define GL_HISTOGRAM_GREEN_SIZE 0x8029
135#define GL_HISTOGRAM_BLUE_SIZE 0x802A
136#define GL_HISTOGRAM_ALPHA_SIZE 0x802B
137#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C
138#define GL_HISTOGRAM_SINK 0x802D
139#define GL_MINMAX 0x802E
140#define GL_MINMAX_FORMAT 0x802F
141#define GL_MINMAX_SINK 0x8030
142#define GL_TABLE_TOO_LARGE 0x8031
143#define GL_COLOR_MATRIX 0x80B1
144#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2
145#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3
146#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4
147#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5
148#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6
149#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7
150#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8
151#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9
152#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA
153#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB
154#define GL_COLOR_TABLE 0x80D0
155#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1
156#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2
157#define GL_PROXY_COLOR_TABLE 0x80D3
158#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4
159#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5
160#define GL_COLOR_TABLE_SCALE 0x80D6
161#define GL_COLOR_TABLE_BIAS 0x80D7
162#define GL_COLOR_TABLE_FORMAT 0x80D8
163#define GL_COLOR_TABLE_WIDTH 0x80D9
164#define GL_COLOR_TABLE_RED_SIZE 0x80DA
165#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB
166#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC
167#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD
168#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE
169#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF
170#define GL_CONSTANT_BORDER 0x8151
171#define GL_REPLICATE_BORDER 0x8153
172#define GL_CONVOLUTION_BORDER_COLOR 0x8154
173#endif
174
175#ifndef GL_VERSION_1_3
176#define GL_TEXTURE0 0x84C0
177#define GL_TEXTURE1 0x84C1
178#define GL_TEXTURE2 0x84C2
179#define GL_TEXTURE3 0x84C3
180#define GL_TEXTURE4 0x84C4
181#define GL_TEXTURE5 0x84C5
182#define GL_TEXTURE6 0x84C6
183#define GL_TEXTURE7 0x84C7
184#define GL_TEXTURE8 0x84C8
185#define GL_TEXTURE9 0x84C9
186#define GL_TEXTURE10 0x84CA
187#define GL_TEXTURE11 0x84CB
188#define GL_TEXTURE12 0x84CC
189#define GL_TEXTURE13 0x84CD
190#define GL_TEXTURE14 0x84CE
191#define GL_TEXTURE15 0x84CF
192#define GL_TEXTURE16 0x84D0
193#define GL_TEXTURE17 0x84D1
194#define GL_TEXTURE18 0x84D2
195#define GL_TEXTURE19 0x84D3
196#define GL_TEXTURE20 0x84D4
197#define GL_TEXTURE21 0x84D5
198#define GL_TEXTURE22 0x84D6
199#define GL_TEXTURE23 0x84D7
200#define GL_TEXTURE24 0x84D8
201#define GL_TEXTURE25 0x84D9
202#define GL_TEXTURE26 0x84DA
203#define GL_TEXTURE27 0x84DB
204#define GL_TEXTURE28 0x84DC
205#define GL_TEXTURE29 0x84DD
206#define GL_TEXTURE30 0x84DE
207#define GL_TEXTURE31 0x84DF
208#define GL_ACTIVE_TEXTURE 0x84E0
209#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1
210#define GL_MAX_TEXTURE_UNITS 0x84E2
211#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3
212#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4
213#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5
214#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6
215#define GL_MULTISAMPLE 0x809D
216#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E
217#define GL_SAMPLE_ALPHA_TO_ONE 0x809F
218#define GL_SAMPLE_COVERAGE 0x80A0
219#define GL_SAMPLE_BUFFERS 0x80A8
220#define GL_SAMPLES 0x80A9
221#define GL_SAMPLE_COVERAGE_VALUE 0x80AA
222#define GL_SAMPLE_COVERAGE_INVERT 0x80AB
223#define GL_MULTISAMPLE_BIT 0x20000000
224#define GL_NORMAL_MAP 0x8511
225#define GL_REFLECTION_MAP 0x8512
226#define GL_TEXTURE_CUBE_MAP 0x8513
227#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514
228#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515
229#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516
230#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517
231#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518
232#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519
233#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A
234#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B
235#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C
236#define GL_COMPRESSED_ALPHA 0x84E9
237#define GL_COMPRESSED_LUMINANCE 0x84EA
238#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB
239#define GL_COMPRESSED_INTENSITY 0x84EC
240#define GL_COMPRESSED_RGB 0x84ED
241#define GL_COMPRESSED_RGBA 0x84EE
242#define GL_TEXTURE_COMPRESSION_HINT 0x84EF
243#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0
244#define GL_TEXTURE_COMPRESSED 0x86A1
245#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2
246#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3
247#define GL_CLAMP_TO_BORDER 0x812D
248#define GL_COMBINE 0x8570
249#define GL_COMBINE_RGB 0x8571
250#define GL_COMBINE_ALPHA 0x8572
251#define GL_SOURCE0_RGB 0x8580
252#define GL_SOURCE1_RGB 0x8581
253#define GL_SOURCE2_RGB 0x8582
254#define GL_SOURCE0_ALPHA 0x8588
255#define GL_SOURCE1_ALPHA 0x8589
256#define GL_SOURCE2_ALPHA 0x858A
257#define GL_OPERAND0_RGB 0x8590
258#define GL_OPERAND1_RGB 0x8591
259#define GL_OPERAND2_RGB 0x8592
260#define GL_OPERAND0_ALPHA 0x8598
261#define GL_OPERAND1_ALPHA 0x8599
262#define GL_OPERAND2_ALPHA 0x859A
263#define GL_RGB_SCALE 0x8573
264#define GL_ADD_SIGNED 0x8574
265#define GL_INTERPOLATE 0x8575
266#define GL_SUBTRACT 0x84E7
267#define GL_CONSTANT 0x8576
268#define GL_PRIMARY_COLOR 0x8577
269#define GL_PREVIOUS 0x8578
270#define GL_DOT3_RGB 0x86AE
271#define GL_DOT3_RGBA 0x86AF
272#endif
273
274#ifndef GL_VERSION_1_4
275#define GL_BLEND_DST_RGB 0x80C8
276#define GL_BLEND_SRC_RGB 0x80C9
277#define GL_BLEND_DST_ALPHA 0x80CA
278#define GL_BLEND_SRC_ALPHA 0x80CB
279#define GL_POINT_SIZE_MIN 0x8126
280#define GL_POINT_SIZE_MAX 0x8127
281#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128
282#define GL_POINT_DISTANCE_ATTENUATION 0x8129
283#define GL_GENERATE_MIPMAP 0x8191
284#define GL_GENERATE_MIPMAP_HINT 0x8192
285#define GL_DEPTH_COMPONENT16 0x81A5
286#define GL_DEPTH_COMPONENT24 0x81A6
287#define GL_DEPTH_COMPONENT32 0x81A7
288#define GL_MIRRORED_REPEAT 0x8370
289#define GL_FOG_COORDINATE_SOURCE 0x8450
290#define GL_FOG_COORDINATE 0x8451
291#define GL_FRAGMENT_DEPTH 0x8452
292#define GL_CURRENT_FOG_COORDINATE 0x8453
293#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454
294#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455
295#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456
296#define GL_FOG_COORDINATE_ARRAY 0x8457
297#define GL_COLOR_SUM 0x8458
298#define GL_CURRENT_SECONDARY_COLOR 0x8459
299#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A
300#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B
301#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C
302#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D
303#define GL_SECONDARY_COLOR_ARRAY 0x845E
304#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD
305#define GL_TEXTURE_FILTER_CONTROL 0x8500
306#define GL_TEXTURE_LOD_BIAS 0x8501
307#define GL_INCR_WRAP 0x8507
308#define GL_DECR_WRAP 0x8508
309#define GL_TEXTURE_DEPTH_SIZE 0x884A
310#define GL_DEPTH_TEXTURE_MODE 0x884B
311#define GL_TEXTURE_COMPARE_MODE 0x884C
312#define GL_TEXTURE_COMPARE_FUNC 0x884D
313#define GL_COMPARE_R_TO_TEXTURE 0x884E
314#endif
315
316#ifndef GL_VERSION_1_5
317#define GL_BUFFER_SIZE 0x8764
318#define GL_BUFFER_USAGE 0x8765
319#define GL_QUERY_COUNTER_BITS 0x8864
320#define GL_CURRENT_QUERY 0x8865
321#define GL_QUERY_RESULT 0x8866
322#define GL_QUERY_RESULT_AVAILABLE 0x8867
323#define GL_ARRAY_BUFFER 0x8892
324#define GL_ELEMENT_ARRAY_BUFFER 0x8893
325#define GL_ARRAY_BUFFER_BINDING 0x8894
326#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895
327#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896
328#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897
329#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898
330#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899
331#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A
332#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B
333#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C
334#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D
335#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E
336#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F
337#define GL_READ_ONLY 0x88B8
338#define GL_WRITE_ONLY 0x88B9
339#define GL_READ_WRITE 0x88BA
340#define GL_BUFFER_ACCESS 0x88BB
341#define GL_BUFFER_MAPPED 0x88BC
342#define GL_BUFFER_MAP_POINTER 0x88BD
343#define GL_STREAM_DRAW 0x88E0
344#define GL_STREAM_READ 0x88E1
345#define GL_STREAM_COPY 0x88E2
346#define GL_STATIC_DRAW 0x88E4
347#define GL_STATIC_READ 0x88E5
348#define GL_STATIC_COPY 0x88E6
349#define GL_DYNAMIC_DRAW 0x88E8
350#define GL_DYNAMIC_READ 0x88E9
351#define GL_DYNAMIC_COPY 0x88EA
352#define GL_SAMPLES_PASSED 0x8914
353#define GL_FOG_COORD_SRC GL_FOG_COORDINATE_SOURCE
354#define GL_FOG_COORD GL_FOG_COORDINATE
355#define GL_CURRENT_FOG_COORD GL_CURRENT_FOG_COORDINATE
356#define GL_FOG_COORD_ARRAY_TYPE GL_FOG_COORDINATE_ARRAY_TYPE
357#define GL_FOG_COORD_ARRAY_STRIDE GL_FOG_COORDINATE_ARRAY_STRIDE
358#define GL_FOG_COORD_ARRAY_POINTER GL_FOG_COORDINATE_ARRAY_POINTER
359#define GL_FOG_COORD_ARRAY GL_FOG_COORDINATE_ARRAY
360#define GL_FOG_COORD_ARRAY_BUFFER_BINDING GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
361#define GL_SRC0_RGB GL_SOURCE0_RGB
362#define GL_SRC1_RGB GL_SOURCE1_RGB
363#define GL_SRC2_RGB GL_SOURCE2_RGB
364#define GL_SRC0_ALPHA GL_SOURCE0_ALPHA
365#define GL_SRC1_ALPHA GL_SOURCE1_ALPHA
366#define GL_SRC2_ALPHA GL_SOURCE2_ALPHA
367#endif
368
369#ifndef GL_VERSION_2_0
370#define GL_BLEND_EQUATION_RGB GL_BLEND_EQUATION
371#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622
372#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623
373#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624
374#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625
375#define GL_CURRENT_VERTEX_ATTRIB 0x8626
376#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642
377#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643
378#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645
379#define GL_STENCIL_BACK_FUNC 0x8800
380#define GL_STENCIL_BACK_FAIL 0x8801
381#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802
382#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803
383#define GL_MAX_DRAW_BUFFERS 0x8824
384#define GL_DRAW_BUFFER0 0x8825
385#define GL_DRAW_BUFFER1 0x8826
386#define GL_DRAW_BUFFER2 0x8827
387#define GL_DRAW_BUFFER3 0x8828
388#define GL_DRAW_BUFFER4 0x8829
389#define GL_DRAW_BUFFER5 0x882A
390#define GL_DRAW_BUFFER6 0x882B
391#define GL_DRAW_BUFFER7 0x882C
392#define GL_DRAW_BUFFER8 0x882D
393#define GL_DRAW_BUFFER9 0x882E
394#define GL_DRAW_BUFFER10 0x882F
395#define GL_DRAW_BUFFER11 0x8830
396#define GL_DRAW_BUFFER12 0x8831
397#define GL_DRAW_BUFFER13 0x8832
398#define GL_DRAW_BUFFER14 0x8833
399#define GL_DRAW_BUFFER15 0x8834
400#define GL_BLEND_EQUATION_ALPHA 0x883D
401#define GL_POINT_SPRITE 0x8861
402#define GL_COORD_REPLACE 0x8862
403#define GL_MAX_VERTEX_ATTRIBS 0x8869
404#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A
405#define GL_MAX_TEXTURE_COORDS 0x8871
406#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872
407#define GL_FRAGMENT_SHADER 0x8B30
408#define GL_VERTEX_SHADER 0x8B31
409#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49
410#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A
411#define GL_MAX_VARYING_FLOATS 0x8B4B
412#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C
413#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D
414#define GL_SHADER_TYPE 0x8B4F
415#define GL_FLOAT_VEC2 0x8B50
416#define GL_FLOAT_VEC3 0x8B51
417#define GL_FLOAT_VEC4 0x8B52
418#define GL_INT_VEC2 0x8B53
419#define GL_INT_VEC3 0x8B54
420#define GL_INT_VEC4 0x8B55
421#define GL_BOOL 0x8B56
422#define GL_BOOL_VEC2 0x8B57
423#define GL_BOOL_VEC3 0x8B58
424#define GL_BOOL_VEC4 0x8B59
425#define GL_FLOAT_MAT2 0x8B5A
426#define GL_FLOAT_MAT3 0x8B5B
427#define GL_FLOAT_MAT4 0x8B5C
428#define GL_SAMPLER_1D 0x8B5D
429#define GL_SAMPLER_2D 0x8B5E
430#define GL_SAMPLER_3D 0x8B5F
431#define GL_SAMPLER_CUBE 0x8B60
432#define GL_SAMPLER_1D_SHADOW 0x8B61
433#define GL_SAMPLER_2D_SHADOW 0x8B62
434#define GL_DELETE_STATUS 0x8B80
435#define GL_COMPILE_STATUS 0x8B81
436#define GL_LINK_STATUS 0x8B82
437#define GL_VALIDATE_STATUS 0x8B83
438#define GL_INFO_LOG_LENGTH 0x8B84
439#define GL_ATTACHED_SHADERS 0x8B85
440#define GL_ACTIVE_UNIFORMS 0x8B86
441#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87
442#define GL_SHADER_SOURCE_LENGTH 0x8B88
443#define GL_ACTIVE_ATTRIBUTES 0x8B89
444#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A
445#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B
446#define GL_SHADING_LANGUAGE_VERSION 0x8B8C
447#define GL_CURRENT_PROGRAM 0x8B8D
448#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0
449#define GL_LOWER_LEFT 0x8CA1
450#define GL_UPPER_LEFT 0x8CA2
451#define GL_STENCIL_BACK_REF 0x8CA3
452#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4
453#define GL_STENCIL_BACK_WRITEMASK 0x8CA5
454#endif
455
456#ifndef GL_VERSION_2_1
457#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F
458#define GL_PIXEL_PACK_BUFFER 0x88EB
459#define GL_PIXEL_UNPACK_BUFFER 0x88EC
460#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED
461#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF
462#define GL_FLOAT_MAT2x3 0x8B65
463#define GL_FLOAT_MAT2x4 0x8B66
464#define GL_FLOAT_MAT3x2 0x8B67
465#define GL_FLOAT_MAT3x4 0x8B68
466#define GL_FLOAT_MAT4x2 0x8B69
467#define GL_FLOAT_MAT4x3 0x8B6A
468#define GL_SRGB 0x8C40
469#define GL_SRGB8 0x8C41
470#define GL_SRGB_ALPHA 0x8C42
471#define GL_SRGB8_ALPHA8 0x8C43
472#define GL_SLUMINANCE_ALPHA 0x8C44
473#define GL_SLUMINANCE8_ALPHA8 0x8C45
474#define GL_SLUMINANCE 0x8C46
475#define GL_SLUMINANCE8 0x8C47
476#define GL_COMPRESSED_SRGB 0x8C48
477#define GL_COMPRESSED_SRGB_ALPHA 0x8C49
478#define GL_COMPRESSED_SLUMINANCE 0x8C4A
479#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B
480#endif
481
482#ifndef GL_ARB_multitexture
483#define GL_TEXTURE0_ARB 0x84C0
484#define GL_TEXTURE1_ARB 0x84C1
485#define GL_TEXTURE2_ARB 0x84C2
486#define GL_TEXTURE3_ARB 0x84C3
487#define GL_TEXTURE4_ARB 0x84C4
488#define GL_TEXTURE5_ARB 0x84C5
489#define GL_TEXTURE6_ARB 0x84C6
490#define GL_TEXTURE7_ARB 0x84C7
491#define GL_TEXTURE8_ARB 0x84C8
492#define GL_TEXTURE9_ARB 0x84C9
493#define GL_TEXTURE10_ARB 0x84CA
494#define GL_TEXTURE11_ARB 0x84CB
495#define GL_TEXTURE12_ARB 0x84CC
496#define GL_TEXTURE13_ARB 0x84CD
497#define GL_TEXTURE14_ARB 0x84CE
498#define GL_TEXTURE15_ARB 0x84CF
499#define GL_TEXTURE16_ARB 0x84D0
500#define GL_TEXTURE17_ARB 0x84D1
501#define GL_TEXTURE18_ARB 0x84D2
502#define GL_TEXTURE19_ARB 0x84D3
503#define GL_TEXTURE20_ARB 0x84D4
504#define GL_TEXTURE21_ARB 0x84D5
505#define GL_TEXTURE22_ARB 0x84D6
506#define GL_TEXTURE23_ARB 0x84D7
507#define GL_TEXTURE24_ARB 0x84D8
508#define GL_TEXTURE25_ARB 0x84D9
509#define GL_TEXTURE26_ARB 0x84DA
510#define GL_TEXTURE27_ARB 0x84DB
511#define GL_TEXTURE28_ARB 0x84DC
512#define GL_TEXTURE29_ARB 0x84DD
513#define GL_TEXTURE30_ARB 0x84DE
514#define GL_TEXTURE31_ARB 0x84DF
515#define GL_ACTIVE_TEXTURE_ARB 0x84E0
516#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1
517#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2
518#endif
519
520#ifndef GL_ARB_transpose_matrix
521#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3
522#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4
523#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5
524#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6
525#endif
526
527#ifndef GL_ARB_multisample
528#define GL_MULTISAMPLE_ARB 0x809D
529#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E
530#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F
531#define GL_SAMPLE_COVERAGE_ARB 0x80A0
532#define GL_SAMPLE_BUFFERS_ARB 0x80A8
533#define GL_SAMPLES_ARB 0x80A9
534#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA
535#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB
536#define GL_MULTISAMPLE_BIT_ARB 0x20000000
537#endif
538
539#ifndef GL_ARB_texture_env_add
540#endif
541
542#ifndef GL_ARB_texture_cube_map
543#define GL_NORMAL_MAP_ARB 0x8511
544#define GL_REFLECTION_MAP_ARB 0x8512
545#define GL_TEXTURE_CUBE_MAP_ARB 0x8513
546#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514
547#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515
548#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516
549#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517
550#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518
551#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519
552#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A
553#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B
554#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C
555#endif
556
557#ifndef GL_ARB_texture_compression
558#define GL_COMPRESSED_ALPHA_ARB 0x84E9
559#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA
560#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB
561#define GL_COMPRESSED_INTENSITY_ARB 0x84EC
562#define GL_COMPRESSED_RGB_ARB 0x84ED
563#define GL_COMPRESSED_RGBA_ARB 0x84EE
564#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF
565#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0
566#define GL_TEXTURE_COMPRESSED_ARB 0x86A1
567#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2
568#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3
569#endif
570
571#ifndef GL_ARB_texture_border_clamp
572#define GL_CLAMP_TO_BORDER_ARB 0x812D
573#endif
574
575#ifndef GL_ARB_point_parameters
576#define GL_POINT_SIZE_MIN_ARB 0x8126
577#define GL_POINT_SIZE_MAX_ARB 0x8127
578#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128
579#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129
580#endif
581
582#ifndef GL_ARB_vertex_blend
583#define GL_MAX_VERTEX_UNITS_ARB 0x86A4
584#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5
585#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6
586#define GL_VERTEX_BLEND_ARB 0x86A7
587#define GL_CURRENT_WEIGHT_ARB 0x86A8
588#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9
589#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA
590#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB
591#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC
592#define GL_WEIGHT_ARRAY_ARB 0x86AD
593#define GL_MODELVIEW0_ARB 0x1700
594#define GL_MODELVIEW1_ARB 0x850A
595#define GL_MODELVIEW2_ARB 0x8722
596#define GL_MODELVIEW3_ARB 0x8723
597#define GL_MODELVIEW4_ARB 0x8724
598#define GL_MODELVIEW5_ARB 0x8725
599#define GL_MODELVIEW6_ARB 0x8726
600#define GL_MODELVIEW7_ARB 0x8727
601#define GL_MODELVIEW8_ARB 0x8728
602#define GL_MODELVIEW9_ARB 0x8729
603#define GL_MODELVIEW10_ARB 0x872A
604#define GL_MODELVIEW11_ARB 0x872B
605#define GL_MODELVIEW12_ARB 0x872C
606#define GL_MODELVIEW13_ARB 0x872D
607#define GL_MODELVIEW14_ARB 0x872E
608#define GL_MODELVIEW15_ARB 0x872F
609#define GL_MODELVIEW16_ARB 0x8730
610#define GL_MODELVIEW17_ARB 0x8731
611#define GL_MODELVIEW18_ARB 0x8732
612#define GL_MODELVIEW19_ARB 0x8733
613#define GL_MODELVIEW20_ARB 0x8734
614#define GL_MODELVIEW21_ARB 0x8735
615#define GL_MODELVIEW22_ARB 0x8736
616#define GL_MODELVIEW23_ARB 0x8737
617#define GL_MODELVIEW24_ARB 0x8738
618#define GL_MODELVIEW25_ARB 0x8739
619#define GL_MODELVIEW26_ARB 0x873A
620#define GL_MODELVIEW27_ARB 0x873B
621#define GL_MODELVIEW28_ARB 0x873C
622#define GL_MODELVIEW29_ARB 0x873D
623#define GL_MODELVIEW30_ARB 0x873E
624#define GL_MODELVIEW31_ARB 0x873F
625#endif
626
627#ifndef GL_ARB_matrix_palette
628#define GL_MATRIX_PALETTE_ARB 0x8840
629#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841
630#define GL_MAX_PALETTE_MATRICES_ARB 0x8842
631#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843
632#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844
633#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845
634#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846
635#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847
636#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848
637#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849
638#endif
639
640#ifndef GL_ARB_texture_env_combine
641#define GL_COMBINE_ARB 0x8570
642#define GL_COMBINE_RGB_ARB 0x8571
643#define GL_COMBINE_ALPHA_ARB 0x8572
644#define GL_SOURCE0_RGB_ARB 0x8580
645#define GL_SOURCE1_RGB_ARB 0x8581
646#define GL_SOURCE2_RGB_ARB 0x8582
647#define GL_SOURCE0_ALPHA_ARB 0x8588
648#define GL_SOURCE1_ALPHA_ARB 0x8589
649#define GL_SOURCE2_ALPHA_ARB 0x858A
650#define GL_OPERAND0_RGB_ARB 0x8590
651#define GL_OPERAND1_RGB_ARB 0x8591
652#define GL_OPERAND2_RGB_ARB 0x8592
653#define GL_OPERAND0_ALPHA_ARB 0x8598
654#define GL_OPERAND1_ALPHA_ARB 0x8599
655#define GL_OPERAND2_ALPHA_ARB 0x859A
656#define GL_RGB_SCALE_ARB 0x8573
657#define GL_ADD_SIGNED_ARB 0x8574
658#define GL_INTERPOLATE_ARB 0x8575
659#define GL_SUBTRACT_ARB 0x84E7
660#define GL_CONSTANT_ARB 0x8576
661#define GL_PRIMARY_COLOR_ARB 0x8577
662#define GL_PREVIOUS_ARB 0x8578
663#endif
664
665#ifndef GL_ARB_texture_env_crossbar
666#endif
667
668#ifndef GL_ARB_texture_env_dot3
669#define GL_DOT3_RGB_ARB 0x86AE
670#define GL_DOT3_RGBA_ARB 0x86AF
671#endif
672
673#ifndef GL_ARB_texture_mirrored_repeat
674#define GL_MIRRORED_REPEAT_ARB 0x8370
675#endif
676
677#ifndef GL_ARB_depth_texture
678#define GL_DEPTH_COMPONENT16_ARB 0x81A5
679#define GL_DEPTH_COMPONENT24_ARB 0x81A6
680#define GL_DEPTH_COMPONENT32_ARB 0x81A7
681#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A
682#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B
683#endif
684
685#ifndef GL_ARB_shadow
686#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C
687#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D
688#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E
689#endif
690
691#ifndef GL_ARB_shadow_ambient
692#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF
693#endif
694
695#ifndef GL_ARB_window_pos
696#endif
697
698#ifndef GL_ARB_vertex_program
699#define GL_COLOR_SUM_ARB 0x8458
700#define GL_VERTEX_PROGRAM_ARB 0x8620
701#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622
702#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623
703#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624
704#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625
705#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626
706#define GL_PROGRAM_LENGTH_ARB 0x8627
707#define GL_PROGRAM_STRING_ARB 0x8628
708#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E
709#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F
710#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640
711#define GL_CURRENT_MATRIX_ARB 0x8641
712#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642
713#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643
714#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645
715#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B
716#define GL_PROGRAM_BINDING_ARB 0x8677
717#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869
718#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A
719#define GL_PROGRAM_ERROR_STRING_ARB 0x8874
720#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875
721#define GL_PROGRAM_FORMAT_ARB 0x8876
722#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0
723#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1
724#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2
725#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3
726#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4
727#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5
728#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6
729#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7
730#define GL_PROGRAM_PARAMETERS_ARB 0x88A8
731#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9
732#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA
733#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB
734#define GL_PROGRAM_ATTRIBS_ARB 0x88AC
735#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD
736#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE
737#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF
738#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0
739#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1
740#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2
741#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3
742#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4
743#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5
744#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6
745#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7
746#define GL_MATRIX0_ARB 0x88C0
747#define GL_MATRIX1_ARB 0x88C1
748#define GL_MATRIX2_ARB 0x88C2
749#define GL_MATRIX3_ARB 0x88C3
750#define GL_MATRIX4_ARB 0x88C4
751#define GL_MATRIX5_ARB 0x88C5
752#define GL_MATRIX6_ARB 0x88C6
753#define GL_MATRIX7_ARB 0x88C7
754#define GL_MATRIX8_ARB 0x88C8
755#define GL_MATRIX9_ARB 0x88C9
756#define GL_MATRIX10_ARB 0x88CA
757#define GL_MATRIX11_ARB 0x88CB
758#define GL_MATRIX12_ARB 0x88CC
759#define GL_MATRIX13_ARB 0x88CD
760#define GL_MATRIX14_ARB 0x88CE
761#define GL_MATRIX15_ARB 0x88CF
762#define GL_MATRIX16_ARB 0x88D0
763#define GL_MATRIX17_ARB 0x88D1
764#define GL_MATRIX18_ARB 0x88D2
765#define GL_MATRIX19_ARB 0x88D3
766#define GL_MATRIX20_ARB 0x88D4
767#define GL_MATRIX21_ARB 0x88D5
768#define GL_MATRIX22_ARB 0x88D6
769#define GL_MATRIX23_ARB 0x88D7
770#define GL_MATRIX24_ARB 0x88D8
771#define GL_MATRIX25_ARB 0x88D9
772#define GL_MATRIX26_ARB 0x88DA
773#define GL_MATRIX27_ARB 0x88DB
774#define GL_MATRIX28_ARB 0x88DC
775#define GL_MATRIX29_ARB 0x88DD
776#define GL_MATRIX30_ARB 0x88DE
777#define GL_MATRIX31_ARB 0x88DF
778#endif
779
780#ifndef GL_ARB_fragment_program
781#define GL_FRAGMENT_PROGRAM_ARB 0x8804
782#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805
783#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806
784#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807
785#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808
786#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809
787#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A
788#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B
789#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C
790#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D
791#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E
792#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F
793#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810
794#define GL_MAX_TEXTURE_COORDS_ARB 0x8871
795#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872
796#endif
797
798#ifndef GL_ARB_vertex_buffer_object
799#define GL_BUFFER_SIZE_ARB 0x8764
800#define GL_BUFFER_USAGE_ARB 0x8765
801#define GL_ARRAY_BUFFER_ARB 0x8892
802#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893
803#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894
804#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895
805#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896
806#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897
807#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898
808#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899
809#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A
810#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B
811#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C
812#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D
813#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E
814#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F
815#define GL_READ_ONLY_ARB 0x88B8
816#define GL_WRITE_ONLY_ARB 0x88B9
817#define GL_READ_WRITE_ARB 0x88BA
818#define GL_BUFFER_ACCESS_ARB 0x88BB
819#define GL_BUFFER_MAPPED_ARB 0x88BC
820#define GL_BUFFER_MAP_POINTER_ARB 0x88BD
821#define GL_STREAM_DRAW_ARB 0x88E0
822#define GL_STREAM_READ_ARB 0x88E1
823#define GL_STREAM_COPY_ARB 0x88E2
824#define GL_STATIC_DRAW_ARB 0x88E4
825#define GL_STATIC_READ_ARB 0x88E5
826#define GL_STATIC_COPY_ARB 0x88E6
827#define GL_DYNAMIC_DRAW_ARB 0x88E8
828#define GL_DYNAMIC_READ_ARB 0x88E9
829#define GL_DYNAMIC_COPY_ARB 0x88EA
830#endif
831
832#ifndef GL_ARB_occlusion_query
833#define GL_QUERY_COUNTER_BITS_ARB 0x8864
834#define GL_CURRENT_QUERY_ARB 0x8865
835#define GL_QUERY_RESULT_ARB 0x8866
836#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867
837#define GL_SAMPLES_PASSED_ARB 0x8914
838#endif
839
840#ifndef GL_ARB_shader_objects
841#define GL_PROGRAM_OBJECT_ARB 0x8B40
842#define GL_SHADER_OBJECT_ARB 0x8B48
843#define GL_OBJECT_TYPE_ARB 0x8B4E
844#define GL_OBJECT_SUBTYPE_ARB 0x8B4F
845#define GL_FLOAT_VEC2_ARB 0x8B50
846#define GL_FLOAT_VEC3_ARB 0x8B51
847#define GL_FLOAT_VEC4_ARB 0x8B52
848#define GL_INT_VEC2_ARB 0x8B53
849#define GL_INT_VEC3_ARB 0x8B54
850#define GL_INT_VEC4_ARB 0x8B55
851#define GL_BOOL_ARB 0x8B56
852#define GL_BOOL_VEC2_ARB 0x8B57
853#define GL_BOOL_VEC3_ARB 0x8B58
854#define GL_BOOL_VEC4_ARB 0x8B59
855#define GL_FLOAT_MAT2_ARB 0x8B5A
856#define GL_FLOAT_MAT3_ARB 0x8B5B
857#define GL_FLOAT_MAT4_ARB 0x8B5C
858#define GL_SAMPLER_1D_ARB 0x8B5D
859#define GL_SAMPLER_2D_ARB 0x8B5E
860#define GL_SAMPLER_3D_ARB 0x8B5F
861#define GL_SAMPLER_CUBE_ARB 0x8B60
862#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61
863#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62
864#define GL_SAMPLER_2D_RECT_ARB 0x8B63
865#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64
866#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80
867#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81
868#define GL_OBJECT_LINK_STATUS_ARB 0x8B82
869#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83
870#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84
871#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85
872#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86
873#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87
874#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88
875#endif
876
877#ifndef GL_ARB_vertex_shader
878#define GL_VERTEX_SHADER_ARB 0x8B31
879#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A
880#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B
881#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C
882#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D
883#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89
884#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A
885#endif
886
887#ifndef GL_ARB_fragment_shader
888#define GL_FRAGMENT_SHADER_ARB 0x8B30
889#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49
890#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B
891#endif
892
893#ifndef GL_ARB_shading_language_100
894#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C
895#endif
896
897#ifndef GL_ARB_texture_non_power_of_two
898#endif
899
900#ifndef GL_ARB_point_sprite
901#define GL_POINT_SPRITE_ARB 0x8861
902#define GL_COORD_REPLACE_ARB 0x8862
903#endif
904
905#ifndef GL_ARB_fragment_program_shadow
906#endif
907
908#ifndef GL_ARB_draw_buffers
909#define GL_MAX_DRAW_BUFFERS_ARB 0x8824
910#define GL_DRAW_BUFFER0_ARB 0x8825
911#define GL_DRAW_BUFFER1_ARB 0x8826
912#define GL_DRAW_BUFFER2_ARB 0x8827
913#define GL_DRAW_BUFFER3_ARB 0x8828
914#define GL_DRAW_BUFFER4_ARB 0x8829
915#define GL_DRAW_BUFFER5_ARB 0x882A
916#define GL_DRAW_BUFFER6_ARB 0x882B
917#define GL_DRAW_BUFFER7_ARB 0x882C
918#define GL_DRAW_BUFFER8_ARB 0x882D
919#define GL_DRAW_BUFFER9_ARB 0x882E
920#define GL_DRAW_BUFFER10_ARB 0x882F
921#define GL_DRAW_BUFFER11_ARB 0x8830
922#define GL_DRAW_BUFFER12_ARB 0x8831
923#define GL_DRAW_BUFFER13_ARB 0x8832
924#define GL_DRAW_BUFFER14_ARB 0x8833
925#define GL_DRAW_BUFFER15_ARB 0x8834
926#endif
927
928#ifndef GL_ARB_texture_rectangle
929#define GL_TEXTURE_RECTANGLE_ARB 0x84F5
930#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6
931#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7
932#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8
933#endif
934
935#ifndef GL_ARB_color_buffer_float
936#define GL_RGBA_FLOAT_MODE_ARB 0x8820
937#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A
938#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B
939#define GL_CLAMP_READ_COLOR_ARB 0x891C
940#define GL_FIXED_ONLY_ARB 0x891D
941#endif
942
943#ifndef GL_ARB_half_float_pixel
944#define GL_HALF_FLOAT_ARB 0x140B
945#endif
946
947#ifndef GL_ARB_texture_float
948#define GL_TEXTURE_RED_TYPE_ARB 0x8C10
949#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11
950#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12
951#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13
952#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14
953#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15
954#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16
955#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17
956#define GL_RGBA32F_ARB 0x8814
957#define GL_RGB32F_ARB 0x8815
958#define GL_ALPHA32F_ARB 0x8816
959#define GL_INTENSITY32F_ARB 0x8817
960#define GL_LUMINANCE32F_ARB 0x8818
961#define GL_LUMINANCE_ALPHA32F_ARB 0x8819
962#define GL_RGBA16F_ARB 0x881A
963#define GL_RGB16F_ARB 0x881B
964#define GL_ALPHA16F_ARB 0x881C
965#define GL_INTENSITY16F_ARB 0x881D
966#define GL_LUMINANCE16F_ARB 0x881E
967#define GL_LUMINANCE_ALPHA16F_ARB 0x881F
968#endif
969
970#ifndef GL_ARB_pixel_buffer_object
971#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB
972#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC
973#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED
974#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF
975#endif
976
977#ifndef GL_EXT_abgr
978#define GL_ABGR_EXT 0x8000
979#endif
980
981#ifndef GL_EXT_blend_color
982#define GL_CONSTANT_COLOR_EXT 0x8001
983#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002
984#define GL_CONSTANT_ALPHA_EXT 0x8003
985#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004
986#define GL_BLEND_COLOR_EXT 0x8005
987#endif
988
989#ifndef GL_EXT_polygon_offset
990#define GL_POLYGON_OFFSET_EXT 0x8037
991#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038
992#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039
993#endif
994
995#ifndef GL_EXT_texture
996#define GL_ALPHA4_EXT 0x803B
997#define GL_ALPHA8_EXT 0x803C
998#define GL_ALPHA12_EXT 0x803D
999#define GL_ALPHA16_EXT 0x803E
1000#define GL_LUMINANCE4_EXT 0x803F
1001#define GL_LUMINANCE8_EXT 0x8040
1002#define GL_LUMINANCE12_EXT 0x8041
1003#define GL_LUMINANCE16_EXT 0x8042
1004#define GL_LUMINANCE4_ALPHA4_EXT 0x8043
1005#define GL_LUMINANCE6_ALPHA2_EXT 0x8044
1006#define GL_LUMINANCE8_ALPHA8_EXT 0x8045
1007#define GL_LUMINANCE12_ALPHA4_EXT 0x8046
1008#define GL_LUMINANCE12_ALPHA12_EXT 0x8047
1009#define GL_LUMINANCE16_ALPHA16_EXT 0x8048
1010#define GL_INTENSITY_EXT 0x8049
1011#define GL_INTENSITY4_EXT 0x804A
1012#define GL_INTENSITY8_EXT 0x804B
1013#define GL_INTENSITY12_EXT 0x804C
1014#define GL_INTENSITY16_EXT 0x804D
1015#define GL_RGB2_EXT 0x804E
1016#define GL_RGB4_EXT 0x804F
1017#define GL_RGB5_EXT 0x8050
1018#define GL_RGB8_EXT 0x8051
1019#define GL_RGB10_EXT 0x8052
1020#define GL_RGB12_EXT 0x8053
1021#define GL_RGB16_EXT 0x8054
1022#define GL_RGBA2_EXT 0x8055
1023#define GL_RGBA4_EXT 0x8056
1024#define GL_RGB5_A1_EXT 0x8057
1025#define GL_RGBA8_EXT 0x8058
1026#define GL_RGB10_A2_EXT 0x8059
1027#define GL_RGBA12_EXT 0x805A
1028#define GL_RGBA16_EXT 0x805B
1029#define GL_TEXTURE_RED_SIZE_EXT 0x805C
1030#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D
1031#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E
1032#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F
1033#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060
1034#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061
1035#define GL_REPLACE_EXT 0x8062
1036#define GL_PROXY_TEXTURE_1D_EXT 0x8063
1037#define GL_PROXY_TEXTURE_2D_EXT 0x8064
1038#define GL_TEXTURE_TOO_LARGE_EXT 0x8065
1039#endif
1040
1041#ifndef GL_EXT_texture3D
1042#define GL_PACK_SKIP_IMAGES_EXT 0x806B
1043#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C
1044#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D
1045#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E
1046#define GL_TEXTURE_3D_EXT 0x806F
1047#define GL_PROXY_TEXTURE_3D_EXT 0x8070
1048#define GL_TEXTURE_DEPTH_EXT 0x8071
1049#define GL_TEXTURE_WRAP_R_EXT 0x8072
1050#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073
1051#endif
1052
1053#ifndef GL_SGIS_texture_filter4
1054#define GL_FILTER4_SGIS 0x8146
1055#define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147
1056#endif
1057
1058#ifndef GL_EXT_subtexture
1059#endif
1060
1061#ifndef GL_EXT_copy_texture
1062#endif
1063
1064#ifndef GL_EXT_histogram
1065#define GL_HISTOGRAM_EXT 0x8024
1066#define GL_PROXY_HISTOGRAM_EXT 0x8025
1067#define GL_HISTOGRAM_WIDTH_EXT 0x8026
1068#define GL_HISTOGRAM_FORMAT_EXT 0x8027
1069#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028
1070#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029
1071#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A
1072#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B
1073#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C
1074#define GL_HISTOGRAM_SINK_EXT 0x802D
1075#define GL_MINMAX_EXT 0x802E
1076#define GL_MINMAX_FORMAT_EXT 0x802F
1077#define GL_MINMAX_SINK_EXT 0x8030
1078#define GL_TABLE_TOO_LARGE_EXT 0x8031
1079#endif
1080
1081#ifndef GL_EXT_convolution
1082#define GL_CONVOLUTION_1D_EXT 0x8010
1083#define GL_CONVOLUTION_2D_EXT 0x8011
1084#define GL_SEPARABLE_2D_EXT 0x8012
1085#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013
1086#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014
1087#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015
1088#define GL_REDUCE_EXT 0x8016
1089#define GL_CONVOLUTION_FORMAT_EXT 0x8017
1090#define GL_CONVOLUTION_WIDTH_EXT 0x8018
1091#define GL_CONVOLUTION_HEIGHT_EXT 0x8019
1092#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A
1093#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B
1094#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C
1095#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D
1096#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E
1097#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F
1098#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020
1099#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021
1100#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022
1101#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023
1102#endif
1103
1104#ifndef GL_SGI_color_matrix
1105#define GL_COLOR_MATRIX_SGI 0x80B1
1106#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2
1107#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3
1108#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4
1109#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5
1110#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6
1111#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7
1112#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8
1113#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9
1114#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA
1115#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB
1116#endif
1117
1118#ifndef GL_SGI_color_table
1119#define GL_COLOR_TABLE_SGI 0x80D0
1120#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1
1121#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2
1122#define GL_PROXY_COLOR_TABLE_SGI 0x80D3
1123#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4
1124#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5
1125#define GL_COLOR_TABLE_SCALE_SGI 0x80D6
1126#define GL_COLOR_TABLE_BIAS_SGI 0x80D7
1127#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8
1128#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9
1129#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA
1130#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB
1131#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC
1132#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD
1133#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE
1134#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF
1135#endif
1136
1137#ifndef GL_SGIS_pixel_texture
1138#define GL_PIXEL_TEXTURE_SGIS 0x8353
1139#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354
1140#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355
1141#define GL_PIXEL_GROUP_COLOR_SGIS 0x8356
1142#endif
1143
1144#ifndef GL_SGIX_pixel_texture
1145#define GL_PIXEL_TEX_GEN_SGIX 0x8139
1146#define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B
1147#endif
1148
1149#ifndef GL_SGIS_texture4D
1150#define GL_PACK_SKIP_VOLUMES_SGIS 0x8130
1151#define GL_PACK_IMAGE_DEPTH_SGIS 0x8131
1152#define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132
1153#define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133
1154#define GL_TEXTURE_4D_SGIS 0x8134
1155#define GL_PROXY_TEXTURE_4D_SGIS 0x8135
1156#define GL_TEXTURE_4DSIZE_SGIS 0x8136
1157#define GL_TEXTURE_WRAP_Q_SGIS 0x8137
1158#define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138
1159#define GL_TEXTURE_4D_BINDING_SGIS 0x814F
1160#endif
1161
1162#ifndef GL_SGI_texture_color_table
1163#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC
1164#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD
1165#endif
1166
1167#ifndef GL_EXT_cmyka
1168#define GL_CMYK_EXT 0x800C
1169#define GL_CMYKA_EXT 0x800D
1170#define GL_PACK_CMYK_HINT_EXT 0x800E
1171#define GL_UNPACK_CMYK_HINT_EXT 0x800F
1172#endif
1173
1174#ifndef GL_EXT_texture_object
1175#define GL_TEXTURE_PRIORITY_EXT 0x8066
1176#define GL_TEXTURE_RESIDENT_EXT 0x8067
1177#define GL_TEXTURE_1D_BINDING_EXT 0x8068
1178#define GL_TEXTURE_2D_BINDING_EXT 0x8069
1179#define GL_TEXTURE_3D_BINDING_EXT 0x806A
1180#endif
1181
1182#ifndef GL_SGIS_detail_texture
1183#define GL_DETAIL_TEXTURE_2D_SGIS 0x8095
1184#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096
1185#define GL_LINEAR_DETAIL_SGIS 0x8097
1186#define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098
1187#define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099
1188#define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A
1189#define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B
1190#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C
1191#endif
1192
1193#ifndef GL_SGIS_sharpen_texture
1194#define GL_LINEAR_SHARPEN_SGIS 0x80AD
1195#define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE
1196#define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF
1197#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0
1198#endif
1199
1200#ifndef GL_EXT_packed_pixels
1201#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032
1202#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033
1203#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034
1204#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035
1205#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036
1206#endif
1207
1208#ifndef GL_SGIS_texture_lod
1209#define GL_TEXTURE_MIN_LOD_SGIS 0x813A
1210#define GL_TEXTURE_MAX_LOD_SGIS 0x813B
1211#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C
1212#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D
1213#endif
1214
1215#ifndef GL_SGIS_multisample
1216#define GL_MULTISAMPLE_SGIS 0x809D
1217#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E
1218#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F
1219#define GL_SAMPLE_MASK_SGIS 0x80A0
1220#define GL_1PASS_SGIS 0x80A1
1221#define GL_2PASS_0_SGIS 0x80A2
1222#define GL_2PASS_1_SGIS 0x80A3
1223#define GL_4PASS_0_SGIS 0x80A4
1224#define GL_4PASS_1_SGIS 0x80A5
1225#define GL_4PASS_2_SGIS 0x80A6
1226#define GL_4PASS_3_SGIS 0x80A7
1227#define GL_SAMPLE_BUFFERS_SGIS 0x80A8
1228#define GL_SAMPLES_SGIS 0x80A9
1229#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA
1230#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB
1231#define GL_SAMPLE_PATTERN_SGIS 0x80AC
1232#endif
1233
1234#ifndef GL_EXT_rescale_normal
1235#define GL_RESCALE_NORMAL_EXT 0x803A
1236#endif
1237
1238#ifndef GL_EXT_vertex_array
1239#define GL_VERTEX_ARRAY_EXT 0x8074
1240#define GL_NORMAL_ARRAY_EXT 0x8075
1241#define GL_COLOR_ARRAY_EXT 0x8076
1242#define GL_INDEX_ARRAY_EXT 0x8077
1243#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078
1244#define GL_EDGE_FLAG_ARRAY_EXT 0x8079
1245#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A
1246#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B
1247#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C
1248#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D
1249#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E
1250#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F
1251#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080
1252#define GL_COLOR_ARRAY_SIZE_EXT 0x8081
1253#define GL_COLOR_ARRAY_TYPE_EXT 0x8082
1254#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083
1255#define GL_COLOR_ARRAY_COUNT_EXT 0x8084
1256#define GL_INDEX_ARRAY_TYPE_EXT 0x8085
1257#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086
1258#define GL_INDEX_ARRAY_COUNT_EXT 0x8087
1259#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088
1260#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089
1261#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A
1262#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B
1263#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C
1264#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D
1265#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E
1266#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F
1267#define GL_COLOR_ARRAY_POINTER_EXT 0x8090
1268#define GL_INDEX_ARRAY_POINTER_EXT 0x8091
1269#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092
1270#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093
1271#endif
1272
1273#ifndef GL_EXT_misc_attribute
1274#endif
1275
1276#ifndef GL_SGIS_generate_mipmap
1277#define GL_GENERATE_MIPMAP_SGIS 0x8191
1278#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192
1279#endif
1280
1281#ifndef GL_SGIX_clipmap
1282#define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170
1283#define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171
1284#define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172
1285#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173
1286#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174
1287#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175
1288#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176
1289#define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177
1290#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178
1291#define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D
1292#define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E
1293#define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F
1294#endif
1295
1296#ifndef GL_SGIX_shadow
1297#define GL_TEXTURE_COMPARE_SGIX 0x819A
1298#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B
1299#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C
1300#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D
1301#endif
1302
1303#ifndef GL_SGIS_texture_edge_clamp
1304#define GL_CLAMP_TO_EDGE_SGIS 0x812F
1305#endif
1306
1307#ifndef GL_SGIS_texture_border_clamp
1308#define GL_CLAMP_TO_BORDER_SGIS 0x812D
1309#endif
1310
1311#ifndef GL_EXT_blend_minmax
1312#define GL_FUNC_ADD_EXT 0x8006
1313#define GL_MIN_EXT 0x8007
1314#define GL_MAX_EXT 0x8008
1315#define GL_BLEND_EQUATION_EXT 0x8009
1316#endif
1317
1318#ifndef GL_EXT_blend_subtract
1319#define GL_FUNC_SUBTRACT_EXT 0x800A
1320#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B
1321#endif
1322
1323#ifndef GL_EXT_blend_logic_op
1324#endif
1325
1326#ifndef GL_SGIX_interlace
1327#define GL_INTERLACE_SGIX 0x8094
1328#endif
1329
1330#ifndef GL_SGIX_pixel_tiles
1331#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E
1332#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F
1333#define GL_PIXEL_TILE_WIDTH_SGIX 0x8140
1334#define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141
1335#define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142
1336#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143
1337#define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144
1338#define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145
1339#endif
1340
1341#ifndef GL_SGIS_texture_select
1342#define GL_DUAL_ALPHA4_SGIS 0x8110
1343#define GL_DUAL_ALPHA8_SGIS 0x8111
1344#define GL_DUAL_ALPHA12_SGIS 0x8112
1345#define GL_DUAL_ALPHA16_SGIS 0x8113
1346#define GL_DUAL_LUMINANCE4_SGIS 0x8114
1347#define GL_DUAL_LUMINANCE8_SGIS 0x8115
1348#define GL_DUAL_LUMINANCE12_SGIS 0x8116
1349#define GL_DUAL_LUMINANCE16_SGIS 0x8117
1350#define GL_DUAL_INTENSITY4_SGIS 0x8118
1351#define GL_DUAL_INTENSITY8_SGIS 0x8119
1352#define GL_DUAL_INTENSITY12_SGIS 0x811A
1353#define GL_DUAL_INTENSITY16_SGIS 0x811B
1354#define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C
1355#define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D
1356#define GL_QUAD_ALPHA4_SGIS 0x811E
1357#define GL_QUAD_ALPHA8_SGIS 0x811F
1358#define GL_QUAD_LUMINANCE4_SGIS 0x8120
1359#define GL_QUAD_LUMINANCE8_SGIS 0x8121
1360#define GL_QUAD_INTENSITY4_SGIS 0x8122
1361#define GL_QUAD_INTENSITY8_SGIS 0x8123
1362#define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124
1363#define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125
1364#endif
1365
1366#ifndef GL_SGIX_sprite
1367#define GL_SPRITE_SGIX 0x8148
1368#define GL_SPRITE_MODE_SGIX 0x8149
1369#define GL_SPRITE_AXIS_SGIX 0x814A
1370#define GL_SPRITE_TRANSLATION_SGIX 0x814B
1371#define GL_SPRITE_AXIAL_SGIX 0x814C
1372#define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D
1373#define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E
1374#endif
1375
1376#ifndef GL_SGIX_texture_multi_buffer
1377#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E
1378#endif
1379
1380#ifndef GL_EXT_point_parameters
1381#define GL_POINT_SIZE_MIN_EXT 0x8126
1382#define GL_POINT_SIZE_MAX_EXT 0x8127
1383#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128
1384#define GL_DISTANCE_ATTENUATION_EXT 0x8129
1385#endif
1386
1387#ifndef GL_SGIS_point_parameters
1388#define GL_POINT_SIZE_MIN_SGIS 0x8126
1389#define GL_POINT_SIZE_MAX_SGIS 0x8127
1390#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128
1391#define GL_DISTANCE_ATTENUATION_SGIS 0x8129
1392#endif
1393
1394#ifndef GL_SGIX_instruments
1395#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180
1396#define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181
1397#endif
1398
1399#ifndef GL_SGIX_texture_scale_bias
1400#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179
1401#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A
1402#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B
1403#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C
1404#endif
1405
1406#ifndef GL_SGIX_framezoom
1407#define GL_FRAMEZOOM_SGIX 0x818B
1408#define GL_FRAMEZOOM_FACTOR_SGIX 0x818C
1409#define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D
1410#endif
1411
1412#ifndef GL_SGIX_tag_sample_buffer
1413#endif
1414
1415#ifndef GL_FfdMaskSGIX
1416#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001
1417#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002
1418#endif
1419
1420#ifndef GL_SGIX_polynomial_ffd
1421#define GL_GEOMETRY_DEFORMATION_SGIX 0x8194
1422#define GL_TEXTURE_DEFORMATION_SGIX 0x8195
1423#define GL_DEFORMATIONS_MASK_SGIX 0x8196
1424#define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197
1425#endif
1426
1427#ifndef GL_SGIX_reference_plane
1428#define GL_REFERENCE_PLANE_SGIX 0x817D
1429#define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E
1430#endif
1431
1432#ifndef GL_SGIX_flush_raster
1433#endif
1434
1435#ifndef GL_SGIX_depth_texture
1436#define GL_DEPTH_COMPONENT16_SGIX 0x81A5
1437#define GL_DEPTH_COMPONENT24_SGIX 0x81A6
1438#define GL_DEPTH_COMPONENT32_SGIX 0x81A7
1439#endif
1440
1441#ifndef GL_SGIS_fog_function
1442#define GL_FOG_FUNC_SGIS 0x812A
1443#define GL_FOG_FUNC_POINTS_SGIS 0x812B
1444#define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C
1445#endif
1446
1447#ifndef GL_SGIX_fog_offset
1448#define GL_FOG_OFFSET_SGIX 0x8198
1449#define GL_FOG_OFFSET_VALUE_SGIX 0x8199
1450#endif
1451
1452#ifndef GL_HP_image_transform
1453#define GL_IMAGE_SCALE_X_HP 0x8155
1454#define GL_IMAGE_SCALE_Y_HP 0x8156
1455#define GL_IMAGE_TRANSLATE_X_HP 0x8157
1456#define GL_IMAGE_TRANSLATE_Y_HP 0x8158
1457#define GL_IMAGE_ROTATE_ANGLE_HP 0x8159
1458#define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A
1459#define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B
1460#define GL_IMAGE_MAG_FILTER_HP 0x815C
1461#define GL_IMAGE_MIN_FILTER_HP 0x815D
1462#define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E
1463#define GL_CUBIC_HP 0x815F
1464#define GL_AVERAGE_HP 0x8160
1465#define GL_IMAGE_TRANSFORM_2D_HP 0x8161
1466#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162
1467#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163
1468#endif
1469
1470#ifndef GL_HP_convolution_border_modes
1471#define GL_IGNORE_BORDER_HP 0x8150
1472#define GL_CONSTANT_BORDER_HP 0x8151
1473#define GL_REPLICATE_BORDER_HP 0x8153
1474#define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154
1475#endif
1476
1477#ifndef GL_INGR_palette_buffer
1478#endif
1479
1480#ifndef GL_SGIX_texture_add_env
1481#define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE
1482#endif
1483
1484#ifndef GL_EXT_color_subtable
1485#endif
1486
1487#ifndef GL_PGI_vertex_hints
1488#define GL_VERTEX_DATA_HINT_PGI 0x1A22A
1489#define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B
1490#define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C
1491#define GL_MAX_VERTEX_HINT_PGI 0x1A22D
1492#define GL_COLOR3_BIT_PGI 0x00010000
1493#define GL_COLOR4_BIT_PGI 0x00020000
1494#define GL_EDGEFLAG_BIT_PGI 0x00040000
1495#define GL_INDEX_BIT_PGI 0x00080000
1496#define GL_MAT_AMBIENT_BIT_PGI 0x00100000
1497#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000
1498#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000
1499#define GL_MAT_EMISSION_BIT_PGI 0x00800000
1500#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000
1501#define GL_MAT_SHININESS_BIT_PGI 0x02000000
1502#define GL_MAT_SPECULAR_BIT_PGI 0x04000000
1503#define GL_NORMAL_BIT_PGI 0x08000000
1504#define GL_TEXCOORD1_BIT_PGI 0x10000000
1505#define GL_TEXCOORD2_BIT_PGI 0x20000000
1506#define GL_TEXCOORD3_BIT_PGI 0x40000000
1507#define GL_TEXCOORD4_BIT_PGI 0x80000000
1508#define GL_VERTEX23_BIT_PGI 0x00000004
1509#define GL_VERTEX4_BIT_PGI 0x00000008
1510#endif
1511
1512#ifndef GL_PGI_misc_hints
1513#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8
1514#define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD
1515#define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE
1516#define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202
1517#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203
1518#define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204
1519#define GL_ALWAYS_FAST_HINT_PGI 0x1A20C
1520#define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D
1521#define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E
1522#define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F
1523#define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210
1524#define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211
1525#define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216
1526#define GL_STRICT_LIGHTING_HINT_PGI 0x1A217
1527#define GL_STRICT_SCISSOR_HINT_PGI 0x1A218
1528#define GL_FULL_STIPPLE_HINT_PGI 0x1A219
1529#define GL_CLIP_NEAR_HINT_PGI 0x1A220
1530#define GL_CLIP_FAR_HINT_PGI 0x1A221
1531#define GL_WIDE_LINE_HINT_PGI 0x1A222
1532#define GL_BACK_NORMALS_HINT_PGI 0x1A223
1533#endif
1534
1535#ifndef GL_EXT_paletted_texture
1536#define GL_COLOR_INDEX1_EXT 0x80E2
1537#define GL_COLOR_INDEX2_EXT 0x80E3
1538#define GL_COLOR_INDEX4_EXT 0x80E4
1539#define GL_COLOR_INDEX8_EXT 0x80E5
1540#define GL_COLOR_INDEX12_EXT 0x80E6
1541#define GL_COLOR_INDEX16_EXT 0x80E7
1542#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED
1543#endif
1544
1545#ifndef GL_EXT_clip_volume_hint
1546#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0
1547#endif
1548
1549#ifndef GL_SGIX_list_priority
1550#define GL_LIST_PRIORITY_SGIX 0x8182
1551#endif
1552
1553#ifndef GL_SGIX_ir_instrument1
1554#define GL_IR_INSTRUMENT1_SGIX 0x817F
1555#endif
1556
1557#ifndef GL_SGIX_calligraphic_fragment
1558#define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183
1559#endif
1560
1561#ifndef GL_SGIX_texture_lod_bias
1562#define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E
1563#define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F
1564#define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190
1565#endif
1566
1567#ifndef GL_SGIX_shadow_ambient
1568#define GL_SHADOW_AMBIENT_SGIX 0x80BF
1569#endif
1570
1571#ifndef GL_EXT_index_texture
1572#endif
1573
1574#ifndef GL_EXT_index_material
1575#define GL_INDEX_MATERIAL_EXT 0x81B8
1576#define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9
1577#define GL_INDEX_MATERIAL_FACE_EXT 0x81BA
1578#endif
1579
1580#ifndef GL_EXT_index_func
1581#define GL_INDEX_TEST_EXT 0x81B5
1582#define GL_INDEX_TEST_FUNC_EXT 0x81B6
1583#define GL_INDEX_TEST_REF_EXT 0x81B7
1584#endif
1585
1586#ifndef GL_EXT_index_array_formats
1587#define GL_IUI_V2F_EXT 0x81AD
1588#define GL_IUI_V3F_EXT 0x81AE
1589#define GL_IUI_N3F_V2F_EXT 0x81AF
1590#define GL_IUI_N3F_V3F_EXT 0x81B0
1591#define GL_T2F_IUI_V2F_EXT 0x81B1
1592#define GL_T2F_IUI_V3F_EXT 0x81B2
1593#define GL_T2F_IUI_N3F_V2F_EXT 0x81B3
1594#define GL_T2F_IUI_N3F_V3F_EXT 0x81B4
1595#endif
1596
1597#ifndef GL_EXT_compiled_vertex_array
1598#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8
1599#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9
1600#endif
1601
1602#ifndef GL_EXT_cull_vertex
1603#define GL_CULL_VERTEX_EXT 0x81AA
1604#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB
1605#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC
1606#endif
1607
1608#ifndef GL_SGIX_ycrcb
1609#define GL_YCRCB_422_SGIX 0x81BB
1610#define GL_YCRCB_444_SGIX 0x81BC
1611#endif
1612
1613#ifndef GL_SGIX_fragment_lighting
1614#define GL_FRAGMENT_LIGHTING_SGIX 0x8400
1615#define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401
1616#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402
1617#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403
1618#define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404
1619#define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405
1620#define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406
1621#define GL_LIGHT_ENV_MODE_SGIX 0x8407
1622#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408
1623#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409
1624#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A
1625#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B
1626#define GL_FRAGMENT_LIGHT0_SGIX 0x840C
1627#define GL_FRAGMENT_LIGHT1_SGIX 0x840D
1628#define GL_FRAGMENT_LIGHT2_SGIX 0x840E
1629#define GL_FRAGMENT_LIGHT3_SGIX 0x840F
1630#define GL_FRAGMENT_LIGHT4_SGIX 0x8410
1631#define GL_FRAGMENT_LIGHT5_SGIX 0x8411
1632#define GL_FRAGMENT_LIGHT6_SGIX 0x8412
1633#define GL_FRAGMENT_LIGHT7_SGIX 0x8413
1634#endif
1635
1636#ifndef GL_IBM_rasterpos_clip
1637#define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262
1638#endif
1639
1640#ifndef GL_HP_texture_lighting
1641#define GL_TEXTURE_LIGHTING_MODE_HP 0x8167
1642#define GL_TEXTURE_POST_SPECULAR_HP 0x8168
1643#define GL_TEXTURE_PRE_SPECULAR_HP 0x8169
1644#endif
1645
1646#ifndef GL_EXT_draw_range_elements
1647#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8
1648#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9
1649#endif
1650
1651#ifndef GL_WIN_phong_shading
1652#define GL_PHONG_WIN 0x80EA
1653#define GL_PHONG_HINT_WIN 0x80EB
1654#endif
1655
1656#ifndef GL_WIN_specular_fog
1657#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC
1658#endif
1659
1660#ifndef GL_EXT_light_texture
1661#define GL_FRAGMENT_MATERIAL_EXT 0x8349
1662#define GL_FRAGMENT_NORMAL_EXT 0x834A
1663#define GL_FRAGMENT_COLOR_EXT 0x834C
1664#define GL_ATTENUATION_EXT 0x834D
1665#define GL_SHADOW_ATTENUATION_EXT 0x834E
1666#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F
1667#define GL_TEXTURE_LIGHT_EXT 0x8350
1668#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351
1669#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352
1670/* reuse GL_FRAGMENT_DEPTH_EXT */
1671#endif
1672
1673#ifndef GL_SGIX_blend_alpha_minmax
1674#define GL_ALPHA_MIN_SGIX 0x8320
1675#define GL_ALPHA_MAX_SGIX 0x8321
1676#endif
1677
1678#ifndef GL_SGIX_impact_pixel_texture
1679#define GL_PIXEL_TEX_GEN_Q_CEILING_SGIX 0x8184
1680#define GL_PIXEL_TEX_GEN_Q_ROUND_SGIX 0x8185
1681#define GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX 0x8186
1682#define GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX 0x8187
1683#define GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX 0x8188
1684#define GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX 0x8189
1685#define GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX 0x818A
1686#endif
1687
1688#ifndef GL_EXT_bgra
1689#define GL_BGR_EXT 0x80E0
1690#define GL_BGRA_EXT 0x80E1
1691#endif
1692
1693#ifndef GL_SGIX_async
1694#define GL_ASYNC_MARKER_SGIX 0x8329
1695#endif
1696
1697#ifndef GL_SGIX_async_pixel
1698#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C
1699#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D
1700#define GL_ASYNC_READ_PIXELS_SGIX 0x835E
1701#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F
1702#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360
1703#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361
1704#endif
1705
1706#ifndef GL_SGIX_async_histogram
1707#define GL_ASYNC_HISTOGRAM_SGIX 0x832C
1708#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D
1709#endif
1710
1711#ifndef GL_INTEL_texture_scissor
1712#endif
1713
1714#ifndef GL_INTEL_parallel_arrays
1715#define GL_PARALLEL_ARRAYS_INTEL 0x83F4
1716#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5
1717#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6
1718#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7
1719#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8
1720#endif
1721
1722#ifndef GL_HP_occlusion_test
1723#define GL_OCCLUSION_TEST_HP 0x8165
1724#define GL_OCCLUSION_TEST_RESULT_HP 0x8166
1725#endif
1726
1727#ifndef GL_EXT_pixel_transform
1728#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330
1729#define GL_PIXEL_MAG_FILTER_EXT 0x8331
1730#define GL_PIXEL_MIN_FILTER_EXT 0x8332
1731#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333
1732#define GL_CUBIC_EXT 0x8334
1733#define GL_AVERAGE_EXT 0x8335
1734#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336
1735#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337
1736#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338
1737#endif
1738
1739#ifndef GL_EXT_pixel_transform_color_table
1740#endif
1741
1742#ifndef GL_EXT_shared_texture_palette
1743#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB
1744#endif
1745
1746#ifndef GL_EXT_separate_specular_color
1747#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8
1748#define GL_SINGLE_COLOR_EXT 0x81F9
1749#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA
1750#endif
1751
1752#ifndef GL_EXT_secondary_color
1753#define GL_COLOR_SUM_EXT 0x8458
1754#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459
1755#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A
1756#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B
1757#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C
1758#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D
1759#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E
1760#endif
1761
1762#ifndef GL_EXT_texture_perturb_normal
1763#define GL_PERTURB_EXT 0x85AE
1764#define GL_TEXTURE_NORMAL_EXT 0x85AF
1765#endif
1766
1767#ifndef GL_EXT_multi_draw_arrays
1768#endif
1769
1770#ifndef GL_EXT_fog_coord
1771#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450
1772#define GL_FOG_COORDINATE_EXT 0x8451
1773#define GL_FRAGMENT_DEPTH_EXT 0x8452
1774#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453
1775#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454
1776#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455
1777#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456
1778#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457
1779#endif
1780
1781#ifndef GL_REND_screen_coordinates
1782#define GL_SCREEN_COORDINATES_REND 0x8490
1783#define GL_INVERTED_SCREEN_W_REND 0x8491
1784#endif
1785
1786#ifndef GL_EXT_coordinate_frame
1787#define GL_TANGENT_ARRAY_EXT 0x8439
1788#define GL_BINORMAL_ARRAY_EXT 0x843A
1789#define GL_CURRENT_TANGENT_EXT 0x843B
1790#define GL_CURRENT_BINORMAL_EXT 0x843C
1791#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E
1792#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F
1793#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440
1794#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441
1795#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442
1796#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443
1797#define GL_MAP1_TANGENT_EXT 0x8444
1798#define GL_MAP2_TANGENT_EXT 0x8445
1799#define GL_MAP1_BINORMAL_EXT 0x8446
1800#define GL_MAP2_BINORMAL_EXT 0x8447
1801#endif
1802
1803#ifndef GL_EXT_texture_env_combine
1804#define GL_COMBINE_EXT 0x8570
1805#define GL_COMBINE_RGB_EXT 0x8571
1806#define GL_COMBINE_ALPHA_EXT 0x8572
1807#define GL_RGB_SCALE_EXT 0x8573
1808#define GL_ADD_SIGNED_EXT 0x8574
1809#define GL_INTERPOLATE_EXT 0x8575
1810#define GL_CONSTANT_EXT 0x8576
1811#define GL_PRIMARY_COLOR_EXT 0x8577
1812#define GL_PREVIOUS_EXT 0x8578
1813#define GL_SOURCE0_RGB_EXT 0x8580
1814#define GL_SOURCE1_RGB_EXT 0x8581
1815#define GL_SOURCE2_RGB_EXT 0x8582
1816#define GL_SOURCE0_ALPHA_EXT 0x8588
1817#define GL_SOURCE1_ALPHA_EXT 0x8589
1818#define GL_SOURCE2_ALPHA_EXT 0x858A
1819#define GL_OPERAND0_RGB_EXT 0x8590
1820#define GL_OPERAND1_RGB_EXT 0x8591
1821#define GL_OPERAND2_RGB_EXT 0x8592
1822#define GL_OPERAND0_ALPHA_EXT 0x8598
1823#define GL_OPERAND1_ALPHA_EXT 0x8599
1824#define GL_OPERAND2_ALPHA_EXT 0x859A
1825#endif
1826
1827#ifndef GL_APPLE_specular_vector
1828#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0
1829#endif
1830
1831#ifndef GL_APPLE_transform_hint
1832#define GL_TRANSFORM_HINT_APPLE 0x85B1
1833#endif
1834
1835#ifndef GL_SGIX_fog_scale
1836#define GL_FOG_SCALE_SGIX 0x81FC
1837#define GL_FOG_SCALE_VALUE_SGIX 0x81FD
1838#endif
1839
1840#ifndef GL_SUNX_constant_data
1841#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5
1842#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6
1843#endif
1844
1845#ifndef GL_SUN_global_alpha
1846#define GL_GLOBAL_ALPHA_SUN 0x81D9
1847#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA
1848#endif
1849
1850#ifndef GL_SUN_triangle_list
1851#define GL_RESTART_SUN 0x0001
1852#define GL_REPLACE_MIDDLE_SUN 0x0002
1853#define GL_REPLACE_OLDEST_SUN 0x0003
1854#define GL_TRIANGLE_LIST_SUN 0x81D7
1855#define GL_REPLACEMENT_CODE_SUN 0x81D8
1856#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0
1857#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1
1858#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2
1859#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3
1860#define GL_R1UI_V3F_SUN 0x85C4
1861#define GL_R1UI_C4UB_V3F_SUN 0x85C5
1862#define GL_R1UI_C3F_V3F_SUN 0x85C6
1863#define GL_R1UI_N3F_V3F_SUN 0x85C7
1864#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8
1865#define GL_R1UI_T2F_V3F_SUN 0x85C9
1866#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA
1867#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB
1868#endif
1869
1870#ifndef GL_SUN_vertex
1871#endif
1872
1873#ifndef GL_EXT_blend_func_separate
1874#define GL_BLEND_DST_RGB_EXT 0x80C8
1875#define GL_BLEND_SRC_RGB_EXT 0x80C9
1876#define GL_BLEND_DST_ALPHA_EXT 0x80CA
1877#define GL_BLEND_SRC_ALPHA_EXT 0x80CB
1878#endif
1879
1880#ifndef GL_INGR_color_clamp
1881#define GL_RED_MIN_CLAMP_INGR 0x8560
1882#define GL_GREEN_MIN_CLAMP_INGR 0x8561
1883#define GL_BLUE_MIN_CLAMP_INGR 0x8562
1884#define GL_ALPHA_MIN_CLAMP_INGR 0x8563
1885#define GL_RED_MAX_CLAMP_INGR 0x8564
1886#define GL_GREEN_MAX_CLAMP_INGR 0x8565
1887#define GL_BLUE_MAX_CLAMP_INGR 0x8566
1888#define GL_ALPHA_MAX_CLAMP_INGR 0x8567
1889#endif
1890
1891#ifndef GL_INGR_interlace_read
1892#define GL_INTERLACE_READ_INGR 0x8568
1893#endif
1894
1895#ifndef GL_EXT_stencil_wrap
1896#define GL_INCR_WRAP_EXT 0x8507
1897#define GL_DECR_WRAP_EXT 0x8508
1898#endif
1899
1900#ifndef GL_EXT_422_pixels
1901#define GL_422_EXT 0x80CC
1902#define GL_422_REV_EXT 0x80CD
1903#define GL_422_AVERAGE_EXT 0x80CE
1904#define GL_422_REV_AVERAGE_EXT 0x80CF
1905#endif
1906
1907#ifndef GL_NV_texgen_reflection
1908#define GL_NORMAL_MAP_NV 0x8511
1909#define GL_REFLECTION_MAP_NV 0x8512
1910#endif
1911
1912#ifndef GL_EXT_texture_cube_map
1913#define GL_NORMAL_MAP_EXT 0x8511
1914#define GL_REFLECTION_MAP_EXT 0x8512
1915#define GL_TEXTURE_CUBE_MAP_EXT 0x8513
1916#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514
1917#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515
1918#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516
1919#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517
1920#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518
1921#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519
1922#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A
1923#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B
1924#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C
1925#endif
1926
1927#ifndef GL_SUN_convolution_border_modes
1928#define GL_WRAP_BORDER_SUN 0x81D4
1929#endif
1930
1931#ifndef GL_EXT_texture_env_add
1932#endif
1933
1934#ifndef GL_EXT_texture_lod_bias
1935#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD
1936#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500
1937#define GL_TEXTURE_LOD_BIAS_EXT 0x8501
1938#endif
1939
1940#ifndef GL_EXT_texture_filter_anisotropic
1941#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE
1942#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF
1943#endif
1944
1945#ifndef GL_EXT_vertex_weighting
1946#define GL_MODELVIEW0_STACK_DEPTH_EXT GL_MODELVIEW_STACK_DEPTH
1947#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502
1948#define GL_MODELVIEW0_MATRIX_EXT GL_MODELVIEW_MATRIX
1949#define GL_MODELVIEW1_MATRIX_EXT 0x8506
1950#define GL_VERTEX_WEIGHTING_EXT 0x8509
1951#define GL_MODELVIEW0_EXT GL_MODELVIEW
1952#define GL_MODELVIEW1_EXT 0x850A
1953#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B
1954#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C
1955#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D
1956#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E
1957#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F
1958#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510
1959#endif
1960
1961#ifndef GL_NV_light_max_exponent
1962#define GL_MAX_SHININESS_NV 0x8504
1963#define GL_MAX_SPOT_EXPONENT_NV 0x8505
1964#endif
1965
1966#ifndef GL_NV_vertex_array_range
1967#define GL_VERTEX_ARRAY_RANGE_NV 0x851D
1968#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E
1969#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F
1970#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520
1971#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521
1972#endif
1973
1974#ifndef GL_NV_register_combiners
1975#define GL_REGISTER_COMBINERS_NV 0x8522
1976#define GL_VARIABLE_A_NV 0x8523
1977#define GL_VARIABLE_B_NV 0x8524
1978#define GL_VARIABLE_C_NV 0x8525
1979#define GL_VARIABLE_D_NV 0x8526
1980#define GL_VARIABLE_E_NV 0x8527
1981#define GL_VARIABLE_F_NV 0x8528
1982#define GL_VARIABLE_G_NV 0x8529
1983#define GL_CONSTANT_COLOR0_NV 0x852A
1984#define GL_CONSTANT_COLOR1_NV 0x852B
1985#define GL_PRIMARY_COLOR_NV 0x852C
1986#define GL_SECONDARY_COLOR_NV 0x852D
1987#define GL_SPARE0_NV 0x852E
1988#define GL_SPARE1_NV 0x852F
1989#define GL_DISCARD_NV 0x8530
1990#define GL_E_TIMES_F_NV 0x8531
1991#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532
1992#define GL_UNSIGNED_IDENTITY_NV 0x8536
1993#define GL_UNSIGNED_INVERT_NV 0x8537
1994#define GL_EXPAND_NORMAL_NV 0x8538
1995#define GL_EXPAND_NEGATE_NV 0x8539
1996#define GL_HALF_BIAS_NORMAL_NV 0x853A
1997#define GL_HALF_BIAS_NEGATE_NV 0x853B
1998#define GL_SIGNED_IDENTITY_NV 0x853C
1999#define GL_SIGNED_NEGATE_NV 0x853D
2000#define GL_SCALE_BY_TWO_NV 0x853E
2001#define GL_SCALE_BY_FOUR_NV 0x853F
2002#define GL_SCALE_BY_ONE_HALF_NV 0x8540
2003#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541
2004#define GL_COMBINER_INPUT_NV 0x8542
2005#define GL_COMBINER_MAPPING_NV 0x8543
2006#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544
2007#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545
2008#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546
2009#define GL_COMBINER_MUX_SUM_NV 0x8547
2010#define GL_COMBINER_SCALE_NV 0x8548
2011#define GL_COMBINER_BIAS_NV 0x8549
2012#define GL_COMBINER_AB_OUTPUT_NV 0x854A
2013#define GL_COMBINER_CD_OUTPUT_NV 0x854B
2014#define GL_COMBINER_SUM_OUTPUT_NV 0x854C
2015#define GL_MAX_GENERAL_COMBINERS_NV 0x854D
2016#define GL_NUM_GENERAL_COMBINERS_NV 0x854E
2017#define GL_COLOR_SUM_CLAMP_NV 0x854F
2018#define GL_COMBINER0_NV 0x8550
2019#define GL_COMBINER1_NV 0x8551
2020#define GL_COMBINER2_NV 0x8552
2021#define GL_COMBINER3_NV 0x8553
2022#define GL_COMBINER4_NV 0x8554
2023#define GL_COMBINER5_NV 0x8555
2024#define GL_COMBINER6_NV 0x8556
2025#define GL_COMBINER7_NV 0x8557
2026/* reuse GL_TEXTURE0_ARB */
2027/* reuse GL_TEXTURE1_ARB */
2028/* reuse GL_ZERO */
2029/* reuse GL_NONE */
2030/* reuse GL_FOG */
2031#endif
2032
2033#ifndef GL_NV_fog_distance
2034#define GL_FOG_DISTANCE_MODE_NV 0x855A
2035#define GL_EYE_RADIAL_NV 0x855B
2036#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C
2037/* reuse GL_EYE_PLANE */
2038#endif
2039
2040#ifndef GL_NV_texgen_emboss
2041#define GL_EMBOSS_LIGHT_NV 0x855D
2042#define GL_EMBOSS_CONSTANT_NV 0x855E
2043#define GL_EMBOSS_MAP_NV 0x855F
2044#endif
2045
2046#ifndef GL_NV_blend_square
2047#endif
2048
2049#ifndef GL_NV_texture_env_combine4
2050#define GL_COMBINE4_NV 0x8503
2051#define GL_SOURCE3_RGB_NV 0x8583
2052#define GL_SOURCE3_ALPHA_NV 0x858B
2053#define GL_OPERAND3_RGB_NV 0x8593
2054#define GL_OPERAND3_ALPHA_NV 0x859B
2055#endif
2056
2057#ifndef GL_MESA_resize_buffers
2058#endif
2059
2060#ifndef GL_MESA_window_pos
2061#endif
2062
2063#ifndef GL_EXT_texture_compression_s3tc
2064#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0
2065#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1
2066#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2
2067#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3
2068#endif
2069
2070#ifndef GL_IBM_cull_vertex
2071#define GL_CULL_VERTEX_IBM 103050
2072#endif
2073
2074#ifndef GL_IBM_multimode_draw_arrays
2075#endif
2076
2077#ifndef GL_IBM_vertex_array_lists
2078#define GL_VERTEX_ARRAY_LIST_IBM 103070
2079#define GL_NORMAL_ARRAY_LIST_IBM 103071
2080#define GL_COLOR_ARRAY_LIST_IBM 103072
2081#define GL_INDEX_ARRAY_LIST_IBM 103073
2082#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074
2083#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075
2084#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076
2085#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077
2086#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080
2087#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081
2088#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082
2089#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083
2090#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084
2091#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085
2092#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086
2093#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087
2094#endif
2095
2096#ifndef GL_SGIX_subsample
2097#define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0
2098#define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1
2099#define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2
2100#define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3
2101#define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4
2102#endif
2103
2104#ifndef GL_SGIX_ycrcb_subsample
2105#endif
2106
2107#ifndef GL_SGIX_ycrcba
2108#define GL_YCRCB_SGIX 0x8318
2109#define GL_YCRCBA_SGIX 0x8319
2110#endif
2111
2112#ifndef GL_SGI_depth_pass_instrument
2113#define GL_DEPTH_PASS_INSTRUMENT_SGIX 0x8310
2114#define GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX 0x8311
2115#define GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX 0x8312
2116#endif
2117
2118#ifndef GL_3DFX_texture_compression_FXT1
2119#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0
2120#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1
2121#endif
2122
2123#ifndef GL_3DFX_multisample
2124#define GL_MULTISAMPLE_3DFX 0x86B2
2125#define GL_SAMPLE_BUFFERS_3DFX 0x86B3
2126#define GL_SAMPLES_3DFX 0x86B4
2127#define GL_MULTISAMPLE_BIT_3DFX 0x20000000
2128#endif
2129
2130#ifndef GL_3DFX_tbuffer
2131#endif
2132
2133#ifndef GL_EXT_multisample
2134#define GL_MULTISAMPLE_EXT 0x809D
2135#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E
2136#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F
2137#define GL_SAMPLE_MASK_EXT 0x80A0
2138#define GL_1PASS_EXT 0x80A1
2139#define GL_2PASS_0_EXT 0x80A2
2140#define GL_2PASS_1_EXT 0x80A3
2141#define GL_4PASS_0_EXT 0x80A4
2142#define GL_4PASS_1_EXT 0x80A5
2143#define GL_4PASS_2_EXT 0x80A6
2144#define GL_4PASS_3_EXT 0x80A7
2145#define GL_SAMPLE_BUFFERS_EXT 0x80A8
2146#define GL_SAMPLES_EXT 0x80A9
2147#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA
2148#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB
2149#define GL_SAMPLE_PATTERN_EXT 0x80AC
2150#define GL_MULTISAMPLE_BIT_EXT 0x20000000
2151#endif
2152
2153#ifndef GL_SGIX_vertex_preclip
2154#define GL_VERTEX_PRECLIP_SGIX 0x83EE
2155#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF
2156#endif
2157
2158#ifndef GL_SGIX_convolution_accuracy
2159#define GL_CONVOLUTION_HINT_SGIX 0x8316
2160#endif
2161
2162#ifndef GL_SGIX_resample
2163#define GL_PACK_RESAMPLE_SGIX 0x842C
2164#define GL_UNPACK_RESAMPLE_SGIX 0x842D
2165#define GL_RESAMPLE_REPLICATE_SGIX 0x842E
2166#define GL_RESAMPLE_ZERO_FILL_SGIX 0x842F
2167#define GL_RESAMPLE_DECIMATE_SGIX 0x8430
2168#endif
2169
2170#ifndef GL_SGIS_point_line_texgen
2171#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0
2172#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1
2173#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2
2174#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3
2175#define GL_EYE_POINT_SGIS 0x81F4
2176#define GL_OBJECT_POINT_SGIS 0x81F5
2177#define GL_EYE_LINE_SGIS 0x81F6
2178#define GL_OBJECT_LINE_SGIS 0x81F7
2179#endif
2180
2181#ifndef GL_SGIS_texture_color_mask
2182#define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF
2183#endif
2184
2185#ifndef GL_EXT_texture_env_dot3
2186#define GL_DOT3_RGB_EXT 0x8740
2187#define GL_DOT3_RGBA_EXT 0x8741
2188#endif
2189
2190#ifndef GL_ATI_texture_mirror_once
2191#define GL_MIRROR_CLAMP_ATI 0x8742
2192#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743
2193#endif
2194
2195#ifndef GL_NV_fence
2196#define GL_ALL_COMPLETED_NV 0x84F2
2197#define GL_FENCE_STATUS_NV 0x84F3
2198#define GL_FENCE_CONDITION_NV 0x84F4
2199#endif
2200
2201#ifndef GL_IBM_texture_mirrored_repeat
2202#define GL_MIRRORED_REPEAT_IBM 0x8370
2203#endif
2204
2205#ifndef GL_NV_evaluators
2206#define GL_EVAL_2D_NV 0x86C0
2207#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1
2208#define GL_MAP_TESSELLATION_NV 0x86C2
2209#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3
2210#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4
2211#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5
2212#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6
2213#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7
2214#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8
2215#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9
2216#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA
2217#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB
2218#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC
2219#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD
2220#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE
2221#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF
2222#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0
2223#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1
2224#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2
2225#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3
2226#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4
2227#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5
2228#define GL_MAX_MAP_TESSELLATION_NV 0x86D6
2229#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7
2230#endif
2231
2232#ifndef GL_NV_packed_depth_stencil
2233#define GL_DEPTH_STENCIL_NV 0x84F9
2234#define GL_UNSIGNED_INT_24_8_NV 0x84FA
2235#endif
2236
2237#ifndef GL_NV_register_combiners2
2238#define GL_PER_STAGE_CONSTANTS_NV 0x8535
2239#endif
2240
2241#ifndef GL_NV_texture_compression_vtc
2242#endif
2243
2244#ifndef GL_NV_texture_rectangle
2245#define GL_TEXTURE_RECTANGLE_NV 0x84F5
2246#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6
2247#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7
2248#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8
2249#endif
2250
2251#ifndef GL_NV_texture_shader
2252#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C
2253#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D
2254#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E
2255#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9
2256#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA
2257#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB
2258#define GL_DSDT_MAG_INTENSITY_NV 0x86DC
2259#define GL_SHADER_CONSISTENT_NV 0x86DD
2260#define GL_TEXTURE_SHADER_NV 0x86DE
2261#define GL_SHADER_OPERATION_NV 0x86DF
2262#define GL_CULL_MODES_NV 0x86E0
2263#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1
2264#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2
2265#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3
2266#define GL_OFFSET_TEXTURE_2D_MATRIX_NV GL_OFFSET_TEXTURE_MATRIX_NV
2267#define GL_OFFSET_TEXTURE_2D_SCALE_NV GL_OFFSET_TEXTURE_SCALE_NV
2268#define GL_OFFSET_TEXTURE_2D_BIAS_NV GL_OFFSET_TEXTURE_BIAS_NV
2269#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4
2270#define GL_CONST_EYE_NV 0x86E5
2271#define GL_PASS_THROUGH_NV 0x86E6
2272#define GL_CULL_FRAGMENT_NV 0x86E7
2273#define GL_OFFSET_TEXTURE_2D_NV 0x86E8
2274#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9
2275#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA
2276#define GL_DOT_PRODUCT_NV 0x86EC
2277#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED
2278#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE
2279#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0
2280#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1
2281#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2
2282#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3
2283#define GL_HILO_NV 0x86F4
2284#define GL_DSDT_NV 0x86F5
2285#define GL_DSDT_MAG_NV 0x86F6
2286#define GL_DSDT_MAG_VIB_NV 0x86F7
2287#define GL_HILO16_NV 0x86F8
2288#define GL_SIGNED_HILO_NV 0x86F9
2289#define GL_SIGNED_HILO16_NV 0x86FA
2290#define GL_SIGNED_RGBA_NV 0x86FB
2291#define GL_SIGNED_RGBA8_NV 0x86FC
2292#define GL_SIGNED_RGB_NV 0x86FE
2293#define GL_SIGNED_RGB8_NV 0x86FF
2294#define GL_SIGNED_LUMINANCE_NV 0x8701
2295#define GL_SIGNED_LUMINANCE8_NV 0x8702
2296#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703
2297#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704
2298#define GL_SIGNED_ALPHA_NV 0x8705
2299#define GL_SIGNED_ALPHA8_NV 0x8706
2300#define GL_SIGNED_INTENSITY_NV 0x8707
2301#define GL_SIGNED_INTENSITY8_NV 0x8708
2302#define GL_DSDT8_NV 0x8709
2303#define GL_DSDT8_MAG8_NV 0x870A
2304#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B
2305#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C
2306#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D
2307#define GL_HI_SCALE_NV 0x870E
2308#define GL_LO_SCALE_NV 0x870F
2309#define GL_DS_SCALE_NV 0x8710
2310#define GL_DT_SCALE_NV 0x8711
2311#define GL_MAGNITUDE_SCALE_NV 0x8712
2312#define GL_VIBRANCE_SCALE_NV 0x8713
2313#define GL_HI_BIAS_NV 0x8714
2314#define GL_LO_BIAS_NV 0x8715
2315#define GL_DS_BIAS_NV 0x8716
2316#define GL_DT_BIAS_NV 0x8717
2317#define GL_MAGNITUDE_BIAS_NV 0x8718
2318#define GL_VIBRANCE_BIAS_NV 0x8719
2319#define GL_TEXTURE_BORDER_VALUES_NV 0x871A
2320#define GL_TEXTURE_HI_SIZE_NV 0x871B
2321#define GL_TEXTURE_LO_SIZE_NV 0x871C
2322#define GL_TEXTURE_DS_SIZE_NV 0x871D
2323#define GL_TEXTURE_DT_SIZE_NV 0x871E
2324#define GL_TEXTURE_MAG_SIZE_NV 0x871F
2325#endif
2326
2327#ifndef GL_NV_texture_shader2
2328#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF
2329#endif
2330
2331#ifndef GL_NV_vertex_array_range2
2332#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533
2333#endif
2334
2335#ifndef GL_NV_vertex_program
2336#define GL_VERTEX_PROGRAM_NV 0x8620
2337#define GL_VERTEX_STATE_PROGRAM_NV 0x8621
2338#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623
2339#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624
2340#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625
2341#define GL_CURRENT_ATTRIB_NV 0x8626
2342#define GL_PROGRAM_LENGTH_NV 0x8627
2343#define GL_PROGRAM_STRING_NV 0x8628
2344#define GL_MODELVIEW_PROJECTION_NV 0x8629
2345#define GL_IDENTITY_NV 0x862A
2346#define GL_INVERSE_NV 0x862B
2347#define GL_TRANSPOSE_NV 0x862C
2348#define GL_INVERSE_TRANSPOSE_NV 0x862D
2349#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E
2350#define GL_MAX_TRACK_MATRICES_NV 0x862F
2351#define GL_MATRIX0_NV 0x8630
2352#define GL_MATRIX1_NV 0x8631
2353#define GL_MATRIX2_NV 0x8632
2354#define GL_MATRIX3_NV 0x8633
2355#define GL_MATRIX4_NV 0x8634
2356#define GL_MATRIX5_NV 0x8635
2357#define GL_MATRIX6_NV 0x8636
2358#define GL_MATRIX7_NV 0x8637
2359#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640
2360#define GL_CURRENT_MATRIX_NV 0x8641
2361#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642
2362#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643
2363#define GL_PROGRAM_PARAMETER_NV 0x8644
2364#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645
2365#define GL_PROGRAM_TARGET_NV 0x8646
2366#define GL_PROGRAM_RESIDENT_NV 0x8647
2367#define GL_TRACK_MATRIX_NV 0x8648
2368#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649
2369#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A
2370#define GL_PROGRAM_ERROR_POSITION_NV 0x864B
2371#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650
2372#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651
2373#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652
2374#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653
2375#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654
2376#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655
2377#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656
2378#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657
2379#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658
2380#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659
2381#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A
2382#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B
2383#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C
2384#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D
2385#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E
2386#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F
2387#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660
2388#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661
2389#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662
2390#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663
2391#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664
2392#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665
2393#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666
2394#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667
2395#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668
2396#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669
2397#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A
2398#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B
2399#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C
2400#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D
2401#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E
2402#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F
2403#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670
2404#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671
2405#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672
2406#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673
2407#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674
2408#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675
2409#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676
2410#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677
2411#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678
2412#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679
2413#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A
2414#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B
2415#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C
2416#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D
2417#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E
2418#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F
2419#endif
2420
2421#ifndef GL_SGIX_texture_coordinate_clamp
2422#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369
2423#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A
2424#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B
2425#endif
2426
2427#ifndef GL_SGIX_scalebias_hint
2428#define GL_SCALEBIAS_HINT_SGIX 0x8322
2429#endif
2430
2431#ifndef GL_OML_interlace
2432#define GL_INTERLACE_OML 0x8980
2433#define GL_INTERLACE_READ_OML 0x8981
2434#endif
2435
2436#ifndef GL_OML_subsample
2437#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982
2438#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983
2439#endif
2440
2441#ifndef GL_OML_resample
2442#define GL_PACK_RESAMPLE_OML 0x8984
2443#define GL_UNPACK_RESAMPLE_OML 0x8985
2444#define GL_RESAMPLE_REPLICATE_OML 0x8986
2445#define GL_RESAMPLE_ZERO_FILL_OML 0x8987
2446#define GL_RESAMPLE_AVERAGE_OML 0x8988
2447#define GL_RESAMPLE_DECIMATE_OML 0x8989
2448#endif
2449
2450#ifndef GL_NV_copy_depth_to_color
2451#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E
2452#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F
2453#endif
2454
2455#ifndef GL_ATI_envmap_bumpmap
2456#define GL_BUMP_ROT_MATRIX_ATI 0x8775
2457#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776
2458#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777
2459#define GL_BUMP_TEX_UNITS_ATI 0x8778
2460#define GL_DUDV_ATI 0x8779
2461#define GL_DU8DV8_ATI 0x877A
2462#define GL_BUMP_ENVMAP_ATI 0x877B
2463#define GL_BUMP_TARGET_ATI 0x877C
2464#endif
2465
2466#ifndef GL_ATI_fragment_shader
2467#define GL_FRAGMENT_SHADER_ATI 0x8920
2468#define GL_REG_0_ATI 0x8921
2469#define GL_REG_1_ATI 0x8922
2470#define GL_REG_2_ATI 0x8923
2471#define GL_REG_3_ATI 0x8924
2472#define GL_REG_4_ATI 0x8925
2473#define GL_REG_5_ATI 0x8926
2474#define GL_REG_6_ATI 0x8927
2475#define GL_REG_7_ATI 0x8928
2476#define GL_REG_8_ATI 0x8929
2477#define GL_REG_9_ATI 0x892A
2478#define GL_REG_10_ATI 0x892B
2479#define GL_REG_11_ATI 0x892C
2480#define GL_REG_12_ATI 0x892D
2481#define GL_REG_13_ATI 0x892E
2482#define GL_REG_14_ATI 0x892F
2483#define GL_REG_15_ATI 0x8930
2484#define GL_REG_16_ATI 0x8931
2485#define GL_REG_17_ATI 0x8932
2486#define GL_REG_18_ATI 0x8933
2487#define GL_REG_19_ATI 0x8934
2488#define GL_REG_20_ATI 0x8935
2489#define GL_REG_21_ATI 0x8936
2490#define GL_REG_22_ATI 0x8937
2491#define GL_REG_23_ATI 0x8938
2492#define GL_REG_24_ATI 0x8939
2493#define GL_REG_25_ATI 0x893A
2494#define GL_REG_26_ATI 0x893B
2495#define GL_REG_27_ATI 0x893C
2496#define GL_REG_28_ATI 0x893D
2497#define GL_REG_29_ATI 0x893E
2498#define GL_REG_30_ATI 0x893F
2499#define GL_REG_31_ATI 0x8940
2500#define GL_CON_0_ATI 0x8941
2501#define GL_CON_1_ATI 0x8942
2502#define GL_CON_2_ATI 0x8943
2503#define GL_CON_3_ATI 0x8944
2504#define GL_CON_4_ATI 0x8945
2505#define GL_CON_5_ATI 0x8946
2506#define GL_CON_6_ATI 0x8947
2507#define GL_CON_7_ATI 0x8948
2508#define GL_CON_8_ATI 0x8949
2509#define GL_CON_9_ATI 0x894A
2510#define GL_CON_10_ATI 0x894B
2511#define GL_CON_11_ATI 0x894C
2512#define GL_CON_12_ATI 0x894D
2513#define GL_CON_13_ATI 0x894E
2514#define GL_CON_14_ATI 0x894F
2515#define GL_CON_15_ATI 0x8950
2516#define GL_CON_16_ATI 0x8951
2517#define GL_CON_17_ATI 0x8952
2518#define GL_CON_18_ATI 0x8953
2519#define GL_CON_19_ATI 0x8954
2520#define GL_CON_20_ATI 0x8955
2521#define GL_CON_21_ATI 0x8956
2522#define GL_CON_22_ATI 0x8957
2523#define GL_CON_23_ATI 0x8958
2524#define GL_CON_24_ATI 0x8959
2525#define GL_CON_25_ATI 0x895A
2526#define GL_CON_26_ATI 0x895B
2527#define GL_CON_27_ATI 0x895C
2528#define GL_CON_28_ATI 0x895D
2529#define GL_CON_29_ATI 0x895E
2530#define GL_CON_30_ATI 0x895F
2531#define GL_CON_31_ATI 0x8960
2532#define GL_MOV_ATI 0x8961
2533#define GL_ADD_ATI 0x8963
2534#define GL_MUL_ATI 0x8964
2535#define GL_SUB_ATI 0x8965
2536#define GL_DOT3_ATI 0x8966
2537#define GL_DOT4_ATI 0x8967
2538#define GL_MAD_ATI 0x8968
2539#define GL_LERP_ATI 0x8969
2540#define GL_CND_ATI 0x896A
2541#define GL_CND0_ATI 0x896B
2542#define GL_DOT2_ADD_ATI 0x896C
2543#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D
2544#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E
2545#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F
2546#define GL_NUM_PASSES_ATI 0x8970
2547#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971
2548#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972
2549#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973
2550#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974
2551#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975
2552#define GL_SWIZZLE_STR_ATI 0x8976
2553#define GL_SWIZZLE_STQ_ATI 0x8977
2554#define GL_SWIZZLE_STR_DR_ATI 0x8978
2555#define GL_SWIZZLE_STQ_DQ_ATI 0x8979
2556#define GL_SWIZZLE_STRQ_ATI 0x897A
2557#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B
2558#define GL_RED_BIT_ATI 0x00000001
2559#define GL_GREEN_BIT_ATI 0x00000002
2560#define GL_BLUE_BIT_ATI 0x00000004
2561#define GL_2X_BIT_ATI 0x00000001
2562#define GL_4X_BIT_ATI 0x00000002
2563#define GL_8X_BIT_ATI 0x00000004
2564#define GL_HALF_BIT_ATI 0x00000008
2565#define GL_QUARTER_BIT_ATI 0x00000010
2566#define GL_EIGHTH_BIT_ATI 0x00000020
2567#define GL_SATURATE_BIT_ATI 0x00000040
2568#define GL_COMP_BIT_ATI 0x00000002
2569#define GL_NEGATE_BIT_ATI 0x00000004
2570#define GL_BIAS_BIT_ATI 0x00000008
2571#endif
2572
2573#ifndef GL_ATI_pn_triangles
2574#define GL_PN_TRIANGLES_ATI 0x87F0
2575#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1
2576#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2
2577#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3
2578#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4
2579#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5
2580#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6
2581#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7
2582#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8
2583#endif
2584
2585#ifndef GL_ATI_vertex_array_object
2586#define GL_STATIC_ATI 0x8760
2587#define GL_DYNAMIC_ATI 0x8761
2588#define GL_PRESERVE_ATI 0x8762
2589#define GL_DISCARD_ATI 0x8763
2590#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764
2591#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765
2592#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766
2593#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767
2594#endif
2595
2596#ifndef GL_EXT_vertex_shader
2597#define GL_VERTEX_SHADER_EXT 0x8780
2598#define GL_VERTEX_SHADER_BINDING_EXT 0x8781
2599#define GL_OP_INDEX_EXT 0x8782
2600#define GL_OP_NEGATE_EXT 0x8783
2601#define GL_OP_DOT3_EXT 0x8784
2602#define GL_OP_DOT4_EXT 0x8785
2603#define GL_OP_MUL_EXT 0x8786
2604#define GL_OP_ADD_EXT 0x8787
2605#define GL_OP_MADD_EXT 0x8788
2606#define GL_OP_FRAC_EXT 0x8789
2607#define GL_OP_MAX_EXT 0x878A
2608#define GL_OP_MIN_EXT 0x878B
2609#define GL_OP_SET_GE_EXT 0x878C
2610#define GL_OP_SET_LT_EXT 0x878D
2611#define GL_OP_CLAMP_EXT 0x878E
2612#define GL_OP_FLOOR_EXT 0x878F
2613#define GL_OP_ROUND_EXT 0x8790
2614#define GL_OP_EXP_BASE_2_EXT 0x8791
2615#define GL_OP_LOG_BASE_2_EXT 0x8792
2616#define GL_OP_POWER_EXT 0x8793
2617#define GL_OP_RECIP_EXT 0x8794
2618#define GL_OP_RECIP_SQRT_EXT 0x8795
2619#define GL_OP_SUB_EXT 0x8796
2620#define GL_OP_CROSS_PRODUCT_EXT 0x8797
2621#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798
2622#define GL_OP_MOV_EXT 0x8799
2623#define GL_OUTPUT_VERTEX_EXT 0x879A
2624#define GL_OUTPUT_COLOR0_EXT 0x879B
2625#define GL_OUTPUT_COLOR1_EXT 0x879C
2626#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D
2627#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E
2628#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F
2629#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0
2630#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1
2631#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2
2632#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3
2633#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4
2634#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5
2635#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6
2636#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7
2637#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8
2638#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9
2639#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA
2640#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB
2641#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC
2642#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD
2643#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE
2644#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF
2645#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0
2646#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1
2647#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2
2648#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3
2649#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4
2650#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5
2651#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6
2652#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7
2653#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8
2654#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9
2655#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA
2656#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB
2657#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC
2658#define GL_OUTPUT_FOG_EXT 0x87BD
2659#define GL_SCALAR_EXT 0x87BE
2660#define GL_VECTOR_EXT 0x87BF
2661#define GL_MATRIX_EXT 0x87C0
2662#define GL_VARIANT_EXT 0x87C1
2663#define GL_INVARIANT_EXT 0x87C2
2664#define GL_LOCAL_CONSTANT_EXT 0x87C3
2665#define GL_LOCAL_EXT 0x87C4
2666#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5
2667#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6
2668#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7
2669#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8
2670#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9
2671#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA
2672#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB
2673#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC
2674#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD
2675#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE
2676#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF
2677#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0
2678#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1
2679#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2
2680#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3
2681#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4
2682#define GL_X_EXT 0x87D5
2683#define GL_Y_EXT 0x87D6
2684#define GL_Z_EXT 0x87D7
2685#define GL_W_EXT 0x87D8
2686#define GL_NEGATIVE_X_EXT 0x87D9
2687#define GL_NEGATIVE_Y_EXT 0x87DA
2688#define GL_NEGATIVE_Z_EXT 0x87DB
2689#define GL_NEGATIVE_W_EXT 0x87DC
2690#define GL_ZERO_EXT 0x87DD
2691#define GL_ONE_EXT 0x87DE
2692#define GL_NEGATIVE_ONE_EXT 0x87DF
2693#define GL_NORMALIZED_RANGE_EXT 0x87E0
2694#define GL_FULL_RANGE_EXT 0x87E1
2695#define GL_CURRENT_VERTEX_EXT 0x87E2
2696#define GL_MVP_MATRIX_EXT 0x87E3
2697#define GL_VARIANT_VALUE_EXT 0x87E4
2698#define GL_VARIANT_DATATYPE_EXT 0x87E5
2699#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6
2700#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7
2701#define GL_VARIANT_ARRAY_EXT 0x87E8
2702#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9
2703#define GL_INVARIANT_VALUE_EXT 0x87EA
2704#define GL_INVARIANT_DATATYPE_EXT 0x87EB
2705#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC
2706#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED
2707#endif
2708
2709#ifndef GL_ATI_vertex_streams
2710#define GL_MAX_VERTEX_STREAMS_ATI 0x876B
2711#define GL_VERTEX_STREAM0_ATI 0x876C
2712#define GL_VERTEX_STREAM1_ATI 0x876D
2713#define GL_VERTEX_STREAM2_ATI 0x876E
2714#define GL_VERTEX_STREAM3_ATI 0x876F
2715#define GL_VERTEX_STREAM4_ATI 0x8770
2716#define GL_VERTEX_STREAM5_ATI 0x8771
2717#define GL_VERTEX_STREAM6_ATI 0x8772
2718#define GL_VERTEX_STREAM7_ATI 0x8773
2719#define GL_VERTEX_SOURCE_ATI 0x8774
2720#endif
2721
2722#ifndef GL_ATI_element_array
2723#define GL_ELEMENT_ARRAY_ATI 0x8768
2724#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769
2725#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A
2726#endif
2727
2728#ifndef GL_SUN_mesh_array
2729#define GL_QUAD_MESH_SUN 0x8614
2730#define GL_TRIANGLE_MESH_SUN 0x8615
2731#endif
2732
2733#ifndef GL_SUN_slice_accum
2734#define GL_SLICE_ACCUM_SUN 0x85CC
2735#endif
2736
2737#ifndef GL_NV_multisample_filter_hint
2738#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534
2739#endif
2740
2741#ifndef GL_NV_depth_clamp
2742#define GL_DEPTH_CLAMP_NV 0x864F
2743#endif
2744
2745#ifndef GL_NV_occlusion_query
2746#define GL_PIXEL_COUNTER_BITS_NV 0x8864
2747#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865
2748#define GL_PIXEL_COUNT_NV 0x8866
2749#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867
2750#endif
2751
2752#ifndef GL_NV_point_sprite
2753#define GL_POINT_SPRITE_NV 0x8861
2754#define GL_COORD_REPLACE_NV 0x8862
2755#define GL_POINT_SPRITE_R_MODE_NV 0x8863
2756#endif
2757
2758#ifndef GL_NV_texture_shader3
2759#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850
2760#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851
2761#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852
2762#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853
2763#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854
2764#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855
2765#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856
2766#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857
2767#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858
2768#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859
2769#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A
2770#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B
2771#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C
2772#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D
2773#define GL_HILO8_NV 0x885E
2774#define GL_SIGNED_HILO8_NV 0x885F
2775#define GL_FORCE_BLUE_TO_ONE_NV 0x8860
2776#endif
2777
2778#ifndef GL_NV_vertex_program1_1
2779#endif
2780
2781#ifndef GL_EXT_shadow_funcs
2782#endif
2783
2784#ifndef GL_EXT_stencil_two_side
2785#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910
2786#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911
2787#endif
2788
2789#ifndef GL_ATI_text_fragment_shader
2790#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200
2791#endif
2792
2793#ifndef GL_APPLE_client_storage
2794#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2
2795#endif
2796
2797#ifndef GL_APPLE_element_array
2798#define GL_ELEMENT_ARRAY_APPLE 0x8768
2799#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8769
2800#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x876A
2801#endif
2802
2803#ifndef GL_APPLE_fence
2804#define GL_DRAW_PIXELS_APPLE 0x8A0A
2805#define GL_FENCE_APPLE 0x8A0B
2806#endif
2807
2808#ifndef GL_APPLE_vertex_array_object
2809#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5
2810#endif
2811
2812#ifndef GL_APPLE_vertex_array_range
2813#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D
2814#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E
2815#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F
2816#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521
2817#define GL_STORAGE_CACHED_APPLE 0x85BE
2818#define GL_STORAGE_SHARED_APPLE 0x85BF
2819#endif
2820
2821#ifndef GL_APPLE_ycbcr_422
2822#define GL_YCBCR_422_APPLE 0x85B9
2823#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA
2824#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB
2825#endif
2826
2827#ifndef GL_S3_s3tc
2828#define GL_RGB_S3TC 0x83A0
2829#define GL_RGB4_S3TC 0x83A1
2830#define GL_RGBA_S3TC 0x83A2
2831#define GL_RGBA4_S3TC 0x83A3
2832#endif
2833
2834#ifndef GL_ATI_draw_buffers
2835#define GL_MAX_DRAW_BUFFERS_ATI 0x8824
2836#define GL_DRAW_BUFFER0_ATI 0x8825
2837#define GL_DRAW_BUFFER1_ATI 0x8826
2838#define GL_DRAW_BUFFER2_ATI 0x8827
2839#define GL_DRAW_BUFFER3_ATI 0x8828
2840#define GL_DRAW_BUFFER4_ATI 0x8829
2841#define GL_DRAW_BUFFER5_ATI 0x882A
2842#define GL_DRAW_BUFFER6_ATI 0x882B
2843#define GL_DRAW_BUFFER7_ATI 0x882C
2844#define GL_DRAW_BUFFER8_ATI 0x882D
2845#define GL_DRAW_BUFFER9_ATI 0x882E
2846#define GL_DRAW_BUFFER10_ATI 0x882F
2847#define GL_DRAW_BUFFER11_ATI 0x8830
2848#define GL_DRAW_BUFFER12_ATI 0x8831
2849#define GL_DRAW_BUFFER13_ATI 0x8832
2850#define GL_DRAW_BUFFER14_ATI 0x8833
2851#define GL_DRAW_BUFFER15_ATI 0x8834
2852#endif
2853
2854#ifndef GL_ATI_pixel_format_float
2855#define GL_TYPE_RGBA_FLOAT_ATI 0x8820
2856#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835
2857#endif
2858
2859#ifndef GL_ATI_texture_env_combine3
2860#define GL_MODULATE_ADD_ATI 0x8744
2861#define GL_MODULATE_SIGNED_ADD_ATI 0x8745
2862#define GL_MODULATE_SUBTRACT_ATI 0x8746
2863#endif
2864
2865#ifndef GL_ATI_texture_float
2866#define GL_RGBA_FLOAT32_ATI 0x8814
2867#define GL_RGB_FLOAT32_ATI 0x8815
2868#define GL_ALPHA_FLOAT32_ATI 0x8816
2869#define GL_INTENSITY_FLOAT32_ATI 0x8817
2870#define GL_LUMINANCE_FLOAT32_ATI 0x8818
2871#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819
2872#define GL_RGBA_FLOAT16_ATI 0x881A
2873#define GL_RGB_FLOAT16_ATI 0x881B
2874#define GL_ALPHA_FLOAT16_ATI 0x881C
2875#define GL_INTENSITY_FLOAT16_ATI 0x881D
2876#define GL_LUMINANCE_FLOAT16_ATI 0x881E
2877#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F
2878#endif
2879
2880#ifndef GL_NV_float_buffer
2881#define GL_FLOAT_R_NV 0x8880
2882#define GL_FLOAT_RG_NV 0x8881
2883#define GL_FLOAT_RGB_NV 0x8882
2884#define GL_FLOAT_RGBA_NV 0x8883
2885#define GL_FLOAT_R16_NV 0x8884
2886#define GL_FLOAT_R32_NV 0x8885
2887#define GL_FLOAT_RG16_NV 0x8886
2888#define GL_FLOAT_RG32_NV 0x8887
2889#define GL_FLOAT_RGB16_NV 0x8888
2890#define GL_FLOAT_RGB32_NV 0x8889
2891#define GL_FLOAT_RGBA16_NV 0x888A
2892#define GL_FLOAT_RGBA32_NV 0x888B
2893#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C
2894#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D
2895#define GL_FLOAT_RGBA_MODE_NV 0x888E
2896#endif
2897
2898#ifndef GL_NV_fragment_program
2899#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868
2900#define GL_FRAGMENT_PROGRAM_NV 0x8870
2901#define GL_MAX_TEXTURE_COORDS_NV 0x8871
2902#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872
2903#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873
2904#define GL_PROGRAM_ERROR_STRING_NV 0x8874
2905#endif
2906
2907#ifndef GL_NV_half_float
2908#define GL_HALF_FLOAT_NV 0x140B
2909#endif
2910
2911#ifndef GL_NV_pixel_data_range
2912#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878
2913#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879
2914#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A
2915#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B
2916#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C
2917#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D
2918#endif
2919
2920#ifndef GL_NV_primitive_restart
2921#define GL_PRIMITIVE_RESTART_NV 0x8558
2922#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559
2923#endif
2924
2925#ifndef GL_NV_texture_expand_normal
2926#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F
2927#endif
2928
2929#ifndef GL_NV_vertex_program2
2930#endif
2931
2932#ifndef GL_ATI_map_object_buffer
2933#endif
2934
2935#ifndef GL_ATI_separate_stencil
2936#define GL_STENCIL_BACK_FUNC_ATI 0x8800
2937#define GL_STENCIL_BACK_FAIL_ATI 0x8801
2938#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802
2939#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803
2940#endif
2941
2942#ifndef GL_ATI_vertex_attrib_array_object
2943#endif
2944
2945#ifndef GL_OES_read_format
2946#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A
2947#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B
2948#endif
2949
2950#ifndef GL_EXT_depth_bounds_test
2951#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890
2952#define GL_DEPTH_BOUNDS_EXT 0x8891
2953#endif
2954
2955#ifndef GL_EXT_texture_mirror_clamp
2956#define GL_MIRROR_CLAMP_EXT 0x8742
2957#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743
2958#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912
2959#endif
2960
2961#ifndef GL_EXT_blend_equation_separate
2962#define GL_BLEND_EQUATION_RGB_EXT GL_BLEND_EQUATION
2963#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D
2964#endif
2965
2966#ifndef GL_MESA_pack_invert
2967#define GL_PACK_INVERT_MESA 0x8758
2968#endif
2969
2970#ifndef GL_MESA_ycbcr_texture
2971#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA
2972#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB
2973#define GL_YCBCR_MESA 0x8757
2974#endif
2975
2976#ifndef GL_EXT_pixel_buffer_object
2977#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB
2978#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC
2979#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED
2980#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF
2981#endif
2982
2983#ifndef GL_NV_fragment_program_option
2984#endif
2985
2986#ifndef GL_NV_fragment_program2
2987#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4
2988#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5
2989#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6
2990#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7
2991#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8
2992#endif
2993
2994#ifndef GL_NV_vertex_program2_option
2995/* reuse GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV */
2996/* reuse GL_MAX_PROGRAM_CALL_DEPTH_NV */
2997#endif
2998
2999#ifndef GL_NV_vertex_program3
3000/* reuse GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB */
3001#endif
3002
3003#ifndef GL_EXT_framebuffer_object
3004#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506
3005#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8
3006#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6
3007#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7
3008#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0
3009#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1
3010#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2
3011#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3
3012#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4
3013#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5
3014#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6
3015#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7
3016#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9
3017#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA
3018#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB
3019#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC
3020#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD
3021#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF
3022#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0
3023#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1
3024#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2
3025#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3
3026#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4
3027#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5
3028#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6
3029#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7
3030#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8
3031#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9
3032#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA
3033#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB
3034#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC
3035#define GL_COLOR_ATTACHMENT13_EXT 0x8CED
3036#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE
3037#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF
3038#define GL_DEPTH_ATTACHMENT_EXT 0x8D00
3039#define GL_STENCIL_ATTACHMENT_EXT 0x8D20
3040#define GL_FRAMEBUFFER_EXT 0x8D40
3041#define GL_RENDERBUFFER_EXT 0x8D41
3042#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42
3043#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43
3044#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44
3045#define GL_STENCIL_INDEX1_EXT 0x8D46
3046#define GL_STENCIL_INDEX4_EXT 0x8D47
3047#define GL_STENCIL_INDEX8_EXT 0x8D48
3048#define GL_STENCIL_INDEX16_EXT 0x8D49
3049#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50
3050#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51
3051#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52
3052#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53
3053#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54
3054#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55
3055#endif
3056
3057#ifndef GL_GREMEDY_string_marker
3058#endif
3059
3060#ifndef GL_EXT_packed_depth_stencil
3061#define GL_DEPTH_STENCIL_EXT 0x84F9
3062#define GL_UNSIGNED_INT_24_8_EXT 0x84FA
3063#define GL_DEPTH24_STENCIL8_EXT 0x88F0
3064#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1
3065#endif
3066
3067#ifndef GL_EXT_stencil_clear_tag
3068#define GL_STENCIL_TAG_BITS_EXT 0x88F2
3069#define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3
3070#endif
3071
3072#ifndef GL_EXT_texture_sRGB
3073#define GL_SRGB_EXT 0x8C40
3074#define GL_SRGB8_EXT 0x8C41
3075#define GL_SRGB_ALPHA_EXT 0x8C42
3076#define GL_SRGB8_ALPHA8_EXT 0x8C43
3077#define GL_SLUMINANCE_ALPHA_EXT 0x8C44
3078#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45
3079#define GL_SLUMINANCE_EXT 0x8C46
3080#define GL_SLUMINANCE8_EXT 0x8C47
3081#define GL_COMPRESSED_SRGB_EXT 0x8C48
3082#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49
3083#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A
3084#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B
3085#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C
3086#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D
3087#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E
3088#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F
3089#endif
3090
3091#ifndef GL_EXT_framebuffer_blit
3092#define GL_READ_FRAMEBUFFER_EXT 0x8CA8
3093#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9
3094#define GL_READ_FRAMEBUFFER_BINDING_EXT GL_FRAMEBUFFER_BINDING_EXT
3095#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CAA
3096#endif
3097
3098#ifndef GL_EXT_framebuffer_multisample
3099#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB
3100#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56
3101#define GL_MAX_SAMPLES_EXT 0x8D57
3102#endif
3103
3104#ifndef GL_MESAX_texture_stack
3105#define GL_TEXTURE_1D_STACK_MESAX 0x8759
3106#define GL_TEXTURE_2D_STACK_MESAX 0x875A
3107#define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B
3108#define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C
3109#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D
3110#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E
3111#endif
3112
3113#ifndef GL_EXT_timer_query
3114#define GL_TIME_ELAPSED_EXT 0x88BF
3115#endif
3116
3117#ifndef GL_EXT_gpu_program_parameters
3118#endif
3119
3120#ifndef GL_APPLE_flush_buffer_range
3121#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12
3122#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13
3123#endif
3124
3125#ifndef GL_NV_gpu_program4
3126#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904
3127#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905
3128#define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906
3129#define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907
3130#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908
3131#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909
3132#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5
3133#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6
3134#endif
3135
3136#ifndef GL_NV_geometry_program4
3137#define GL_LINES_ADJACENCY_EXT 0x000A
3138#define GL_LINE_STRIP_ADJACENCY_EXT 0x000B
3139#define GL_TRIANGLES_ADJACENCY_EXT 0x000C
3140#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D
3141#define GL_GEOMETRY_PROGRAM_NV 0x8C26
3142#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27
3143#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28
3144#define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA
3145#define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB
3146#define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC
3147#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29
3148#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7
3149#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8
3150#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9
3151#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4
3152#define GL_PROGRAM_POINT_SIZE_EXT 0x8642
3153#endif
3154
3155#ifndef GL_EXT_geometry_shader4
3156#define GL_GEOMETRY_SHADER_EXT 0x8DD9
3157/* reuse GL_GEOMETRY_VERTICES_OUT_EXT */
3158/* reuse GL_GEOMETRY_INPUT_TYPE_EXT */
3159/* reuse GL_GEOMETRY_OUTPUT_TYPE_EXT */
3160/* reuse GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT */
3161#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD
3162#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE
3163#define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B
3164#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF
3165#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0
3166#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1
3167/* reuse GL_LINES_ADJACENCY_EXT */
3168/* reuse GL_LINE_STRIP_ADJACENCY_EXT */
3169/* reuse GL_TRIANGLES_ADJACENCY_EXT */
3170/* reuse GL_TRIANGLE_STRIP_ADJACENCY_EXT */
3171/* reuse GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT */
3172/* reuse GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT */
3173/* reuse GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT */
3174/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */
3175/* reuse GL_PROGRAM_POINT_SIZE_EXT */
3176#endif
3177
3178#ifndef GL_NV_vertex_program4
3179#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD
3180#endif
3181
3182#ifndef GL_EXT_gpu_shader4
3183#define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0
3184#define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1
3185#define GL_SAMPLER_BUFFER_EXT 0x8DC2
3186#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3
3187#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4
3188#define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5
3189#define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6
3190#define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7
3191#define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8
3192#define GL_INT_SAMPLER_1D_EXT 0x8DC9
3193#define GL_INT_SAMPLER_2D_EXT 0x8DCA
3194#define GL_INT_SAMPLER_3D_EXT 0x8DCB
3195#define GL_INT_SAMPLER_CUBE_EXT 0x8DCC
3196#define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD
3197#define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE
3198#define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF
3199#define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0
3200#define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1
3201#define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2
3202#define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3
3203#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4
3204#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5
3205#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6
3206#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7
3207#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8
3208#endif
3209
3210#ifndef GL_EXT_draw_instanced
3211#endif
3212
3213#ifndef GL_EXT_packed_float
3214#define GL_R11F_G11F_B10F_EXT 0x8C3A
3215#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B
3216#define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C
3217#endif
3218
3219#ifndef GL_EXT_texture_array
3220#define GL_TEXTURE_1D_ARRAY_EXT 0x8C18
3221#define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19
3222#define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A
3223#define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B
3224#define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C
3225#define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D
3226#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF
3227#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E
3228/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */
3229#endif
3230
3231#ifndef GL_EXT_texture_buffer_object
3232#define GL_TEXTURE_BUFFER_EXT 0x8C2A
3233#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B
3234#define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C
3235#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D
3236#define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E
3237#endif
3238
3239#ifndef GL_EXT_texture_compression_latc
3240#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70
3241#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71
3242#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72
3243#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73
3244#endif
3245
3246#ifndef GL_EXT_texture_compression_rgtc
3247#define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB
3248#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC
3249#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD
3250#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE
3251#endif
3252
3253#ifndef GL_EXT_texture_shared_exponent
3254#define GL_RGB9_E5_EXT 0x8C3D
3255#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E
3256#define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F
3257#endif
3258
3259#ifndef GL_NV_depth_buffer_float
3260#define GL_DEPTH_COMPONENT32F_NV 0x8DAB
3261#define GL_DEPTH32F_STENCIL8_NV 0x8DAC
3262#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD
3263#define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF
3264#endif
3265
3266#ifndef GL_NV_fragment_program4
3267#endif
3268
3269#ifndef GL_NV_framebuffer_multisample_coverage
3270#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB
3271#define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10
3272#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11
3273#define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12
3274#endif
3275
3276#ifndef GL_EXT_framebuffer_sRGB
3277#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9
3278#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA
3279#endif
3280
3281#ifndef GL_NV_geometry_shader4
3282#endif
3283
3284#ifndef GL_NV_parameter_buffer_object
3285#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0
3286#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1
3287#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2
3288#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3
3289#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4
3290#endif
3291
3292#ifndef GL_EXT_draw_buffers2
3293#endif
3294
3295#ifndef GL_NV_transform_feedback
3296#define GL_BACK_PRIMARY_COLOR_NV 0x8C77
3297#define GL_BACK_SECONDARY_COLOR_NV 0x8C78
3298#define GL_TEXTURE_COORD_NV 0x8C79
3299#define GL_CLIP_DISTANCE_NV 0x8C7A
3300#define GL_VERTEX_ID_NV 0x8C7B
3301#define GL_PRIMITIVE_ID_NV 0x8C7C
3302#define GL_GENERIC_ATTRIB_NV 0x8C7D
3303#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E
3304#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F
3305#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80
3306#define GL_ACTIVE_VARYINGS_NV 0x8C81
3307#define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82
3308#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83
3309#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84
3310#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85
3311#define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86
3312#define GL_PRIMITIVES_GENERATED_NV 0x8C87
3313#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88
3314#define GL_RASTERIZER_DISCARD_NV 0x8C89
3315#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_ATTRIBS_NV 0x8C8A
3316#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B
3317#define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C
3318#define GL_SEPARATE_ATTRIBS_NV 0x8C8D
3319#define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E
3320#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F
3321#endif
3322
3323#ifndef GL_EXT_bindable_uniform
3324#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2
3325#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3
3326#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4
3327#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED
3328#define GL_UNIFORM_BUFFER_EXT 0x8DEE
3329#define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF
3330#endif
3331
3332#ifndef GL_EXT_texture_integer
3333#define GL_RGBA32UI_EXT 0x8D70
3334#define GL_RGB32UI_EXT 0x8D71
3335#define GL_ALPHA32UI_EXT 0x8D72
3336#define GL_INTENSITY32UI_EXT 0x8D73
3337#define GL_LUMINANCE32UI_EXT 0x8D74
3338#define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75
3339#define GL_RGBA16UI_EXT 0x8D76
3340#define GL_RGB16UI_EXT 0x8D77
3341#define GL_ALPHA16UI_EXT 0x8D78
3342#define GL_INTENSITY16UI_EXT 0x8D79
3343#define GL_LUMINANCE16UI_EXT 0x8D7A
3344#define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B
3345#define GL_RGBA8UI_EXT 0x8D7C
3346#define GL_RGB8UI_EXT 0x8D7D
3347#define GL_ALPHA8UI_EXT 0x8D7E
3348#define GL_INTENSITY8UI_EXT 0x8D7F
3349#define GL_LUMINANCE8UI_EXT 0x8D80
3350#define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81
3351#define GL_RGBA32I_EXT 0x8D82
3352#define GL_RGB32I_EXT 0x8D83
3353#define GL_ALPHA32I_EXT 0x8D84
3354#define GL_INTENSITY32I_EXT 0x8D85
3355#define GL_LUMINANCE32I_EXT 0x8D86
3356#define GL_LUMINANCE_ALPHA32I_EXT 0x8D87
3357#define GL_RGBA16I_EXT 0x8D88
3358#define GL_RGB16I_EXT 0x8D89
3359#define GL_ALPHA16I_EXT 0x8D8A
3360#define GL_INTENSITY16I_EXT 0x8D8B
3361#define GL_LUMINANCE16I_EXT 0x8D8C
3362#define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D
3363#define GL_RGBA8I_EXT 0x8D8E
3364#define GL_RGB8I_EXT 0x8D8F
3365#define GL_ALPHA8I_EXT 0x8D90
3366#define GL_INTENSITY8I_EXT 0x8D91
3367#define GL_LUMINANCE8I_EXT 0x8D92
3368#define GL_LUMINANCE_ALPHA8I_EXT 0x8D93
3369#define GL_RED_INTEGER_EXT 0x8D94
3370#define GL_GREEN_INTEGER_EXT 0x8D95
3371#define GL_BLUE_INTEGER_EXT 0x8D96
3372#define GL_ALPHA_INTEGER_EXT 0x8D97
3373#define GL_RGB_INTEGER_EXT 0x8D98
3374#define GL_RGBA_INTEGER_EXT 0x8D99
3375#define GL_BGR_INTEGER_EXT 0x8D9A
3376#define GL_BGRA_INTEGER_EXT 0x8D9B
3377#define GL_LUMINANCE_INTEGER_EXT 0x8D9C
3378#define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D
3379#define GL_RGBA_INTEGER_MODE_EXT 0x8D9E
3380#endif
3381
3382#ifndef GL_GREMEDY_frame_terminator
3383#endif
3384
3385
3386/*************************************************************/
3387
3388#include <stddef.h>
3389#ifndef GL_VERSION_2_0
3390/* GL type for program/shader text */
3391typedef char GLchar; /* native character */
3392#endif
3393
3394#ifndef GL_VERSION_1_5
3395/* GL types for handling large vertex buffer objects */
3396typedef ptrdiff_t GLintptr;
3397typedef ptrdiff_t GLsizeiptr;
3398#endif
3399
3400#ifndef GL_ARB_vertex_buffer_object
3401/* GL types for handling large vertex buffer objects */
3402typedef ptrdiff_t GLintptrARB;
3403typedef ptrdiff_t GLsizeiptrARB;
3404#endif
3405
3406#ifndef GL_ARB_shader_objects
3407/* GL types for handling shader object handles and program/shader text */
3408typedef char GLcharARB; /* native character */
3409typedef unsigned int GLhandleARB; /* shader object handle */
3410#endif
3411
3412/* GL types for "half" precision (s10e5) float data in host memory */
3413#ifndef GL_ARB_half_float_pixel
3414typedef unsigned short GLhalfARB;
3415#endif
3416
3417#ifndef GL_NV_half_float
3418typedef unsigned short GLhalfNV;
3419#endif
3420
3421#ifndef GLEXT_64_TYPES_DEFINED
3422/* This code block is duplicated in glext.h, so must be protected */
3423#define GLEXT_64_TYPES_DEFINED
3424/* Define int32_t, int64_t, and uint64_t types for UST/MSC */
3425/* (as used in the GL_EXT_timer_query extension). */
3426#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
3427#include <inttypes.h>
3428#elif defined(__sun__)
3429#include <inttypes.h>
3430#if defined(__STDC__)
3431#if defined(__arch64__)
3432typedef long int int64_t;
3433typedef unsigned long int uint64_t;
3434#else
3435typedef long long int int64_t;
3436typedef unsigned long long int uint64_t;
3437#endif /* __arch64__ */
3438#endif /* __STDC__ */
3439#elif defined( __VMS )
3440#include <inttypes.h>
3441#elif defined(__SCO__) || defined(__USLC__)
3442#include <stdint.h>
3443#elif defined(__UNIXOS2__) || defined(__SOL64__)
3444typedef long int int32_t;
3445typedef long long int int64_t;
3446typedef unsigned long long int uint64_t;
3447#elif defined(_WIN32) && defined(__GNUC__)
3448#include <stdint.h>
3449#elif defined(_WIN32)
3450typedef __int32 int32_t;
3451typedef __int64 int64_t;
3452typedef unsigned __int64 uint64_t;
3453#else
3454#include <inttypes.h> /* Fallback option */
3455#endif
3456#endif
3457
3458#ifndef GL_EXT_timer_query
3459typedef int64_t GLint64EXT;
3460typedef uint64_t GLuint64EXT;
3461#endif
3462
3463#ifndef GL_VERSION_1_2
3464#define GL_VERSION_1_2 1
3465#ifdef GL_GLEXT_PROTOTYPES
3466GLAPI void APIENTRY glBlendColor (GLclampf, GLclampf, GLclampf, GLclampf);
3467GLAPI void APIENTRY glBlendEquation (GLenum);
3468GLAPI void APIENTRY glDrawRangeElements (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *);
3469GLAPI void APIENTRY glColorTable (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *);
3470GLAPI void APIENTRY glColorTableParameterfv (GLenum, GLenum, const GLfloat *);
3471GLAPI void APIENTRY glColorTableParameteriv (GLenum, GLenum, const GLint *);
3472GLAPI void APIENTRY glCopyColorTable (GLenum, GLenum, GLint, GLint, GLsizei);
3473GLAPI void APIENTRY glGetColorTable (GLenum, GLenum, GLenum, GLvoid *);
3474GLAPI void APIENTRY glGetColorTableParameterfv (GLenum, GLenum, GLfloat *);
3475GLAPI void APIENTRY glGetColorTableParameteriv (GLenum, GLenum, GLint *);
3476GLAPI void APIENTRY glColorSubTable (GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
3477GLAPI void APIENTRY glCopyColorSubTable (GLenum, GLsizei, GLint, GLint, GLsizei);
3478GLAPI void APIENTRY glConvolutionFilter1D (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *);
3479GLAPI void APIENTRY glConvolutionFilter2D (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
3480GLAPI void APIENTRY glConvolutionParameterf (GLenum, GLenum, GLfloat);
3481GLAPI void APIENTRY glConvolutionParameterfv (GLenum, GLenum, const GLfloat *);
3482GLAPI void APIENTRY glConvolutionParameteri (GLenum, GLenum, GLint);
3483GLAPI void APIENTRY glConvolutionParameteriv (GLenum, GLenum, const GLint *);
3484GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum, GLenum, GLint, GLint, GLsizei);
3485GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum, GLenum, GLint, GLint, GLsizei, GLsizei);
3486GLAPI void APIENTRY glGetConvolutionFilter (GLenum, GLenum, GLenum, GLvoid *);
3487GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum, GLenum, GLfloat *);
3488GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum, GLenum, GLint *);
3489GLAPI void APIENTRY glGetSeparableFilter (GLenum, GLenum, GLenum, GLvoid *, GLvoid *, GLvoid *);
3490GLAPI void APIENTRY glSeparableFilter2D (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *, const GLvoid *);
3491GLAPI void APIENTRY glGetHistogram (GLenum, GLboolean, GLenum, GLenum, GLvoid *);
3492GLAPI void APIENTRY glGetHistogramParameterfv (GLenum, GLenum, GLfloat *);
3493GLAPI void APIENTRY glGetHistogramParameteriv (GLenum, GLenum, GLint *);
3494GLAPI void APIENTRY glGetMinmax (GLenum, GLboolean, GLenum, GLenum, GLvoid *);
3495GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum, GLenum, GLfloat *);
3496GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum, GLenum, GLint *);
3497GLAPI void APIENTRY glHistogram (GLenum, GLsizei, GLenum, GLboolean);
3498GLAPI void APIENTRY glMinmax (GLenum, GLenum, GLboolean);
3499GLAPI void APIENTRY glResetHistogram (GLenum);
3500GLAPI void APIENTRY glResetMinmax (GLenum);
3501GLAPI void APIENTRY glTexImage3D (GLenum, GLint, GLint, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *);
3502GLAPI void APIENTRY glTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
3503GLAPI void APIENTRY glCopyTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);
3504#endif /* GL_GLEXT_PROTOTYPES */
3505typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
3506typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);
3507typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
3508typedef void (APIENTRYP PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);
3509typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
3510typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
3511typedef void (APIENTRYP PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
3512typedef void (APIENTRYP PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table);
3513typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
3514typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
3515typedef void (APIENTRYP PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data);
3516typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
3517typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image);
3518typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image);
3519typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params);
3520typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
3521typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params);
3522typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
3523typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
3524typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
3525typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image);
3526typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
3527typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
3528typedef void (APIENTRYP PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span);
3529typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column);
3530typedef void (APIENTRYP PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
3531typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
3532typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
3533typedef void (APIENTRYP PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
3534typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
3535typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
3536typedef void (APIENTRYP PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
3537typedef void (APIENTRYP PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink);
3538typedef void (APIENTRYP PFNGLRESETHISTOGRAMPROC) (GLenum target);
3539typedef void (APIENTRYP PFNGLRESETMINMAXPROC) (GLenum target);
3540typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
3541typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
3542typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
3543#endif
3544
3545#ifndef GL_VERSION_1_3
3546#define GL_VERSION_1_3 1
3547#ifdef GL_GLEXT_PROTOTYPES
3548GLAPI void APIENTRY glActiveTexture (GLenum);
3549GLAPI void APIENTRY glClientActiveTexture (GLenum);
3550GLAPI void APIENTRY glMultiTexCoord1d (GLenum, GLdouble);
3551GLAPI void APIENTRY glMultiTexCoord1dv (GLenum, const GLdouble *);
3552GLAPI void APIENTRY glMultiTexCoord1f (GLenum, GLfloat);
3553GLAPI void APIENTRY glMultiTexCoord1fv (GLenum, const GLfloat *);
3554GLAPI void APIENTRY glMultiTexCoord1i (GLenum, GLint);
3555GLAPI void APIENTRY glMultiTexCoord1iv (GLenum, const GLint *);
3556GLAPI void APIENTRY glMultiTexCoord1s (GLenum, GLshort);
3557GLAPI void APIENTRY glMultiTexCoord1sv (GLenum, const GLshort *);
3558GLAPI void APIENTRY glMultiTexCoord2d (GLenum, GLdouble, GLdouble);
3559GLAPI void APIENTRY glMultiTexCoord2dv (GLenum, const GLdouble *);
3560GLAPI void APIENTRY glMultiTexCoord2f (GLenum, GLfloat, GLfloat);
3561GLAPI void APIENTRY glMultiTexCoord2fv (GLenum, const GLfloat *);
3562GLAPI void APIENTRY glMultiTexCoord2i (GLenum, GLint, GLint);
3563GLAPI void APIENTRY glMultiTexCoord2iv (GLenum, const GLint *);
3564GLAPI void APIENTRY glMultiTexCoord2s (GLenum, GLshort, GLshort);
3565GLAPI void APIENTRY glMultiTexCoord2sv (GLenum, const GLshort *);
3566GLAPI void APIENTRY glMultiTexCoord3d (GLenum, GLdouble, GLdouble, GLdouble);
3567GLAPI void APIENTRY glMultiTexCoord3dv (GLenum, const GLdouble *);
3568GLAPI void APIENTRY glMultiTexCoord3f (GLenum, GLfloat, GLfloat, GLfloat);
3569GLAPI void APIENTRY glMultiTexCoord3fv (GLenum, const GLfloat *);
3570GLAPI void APIENTRY glMultiTexCoord3i (GLenum, GLint, GLint, GLint);
3571GLAPI void APIENTRY glMultiTexCoord3iv (GLenum, const GLint *);
3572GLAPI void APIENTRY glMultiTexCoord3s (GLenum, GLshort, GLshort, GLshort);
3573GLAPI void APIENTRY glMultiTexCoord3sv (GLenum, const GLshort *);
3574GLAPI void APIENTRY glMultiTexCoord4d (GLenum, GLdouble, GLdouble, GLdouble, GLdouble);
3575GLAPI void APIENTRY glMultiTexCoord4dv (GLenum, const GLdouble *);
3576GLAPI void APIENTRY glMultiTexCoord4f (GLenum, GLfloat, GLfloat, GLfloat, GLfloat);
3577GLAPI void APIENTRY glMultiTexCoord4fv (GLenum, const GLfloat *);
3578GLAPI void APIENTRY glMultiTexCoord4i (GLenum, GLint, GLint, GLint, GLint);
3579GLAPI void APIENTRY glMultiTexCoord4iv (GLenum, const GLint *);
3580GLAPI void APIENTRY glMultiTexCoord4s (GLenum, GLshort, GLshort, GLshort, GLshort);
3581GLAPI void APIENTRY glMultiTexCoord4sv (GLenum, const GLshort *);
3582GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *);
3583GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *);
3584GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *);
3585GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *);
3586GLAPI void APIENTRY glSampleCoverage (GLclampf, GLboolean);
3587GLAPI void APIENTRY glCompressedTexImage3D (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *);
3588GLAPI void APIENTRY glCompressedTexImage2D (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *);
3589GLAPI void APIENTRY glCompressedTexImage1D (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *);
3590GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *);
3591GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *);
3592GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *);
3593GLAPI void APIENTRY glGetCompressedTexImage (GLenum, GLint, GLvoid *);
3594#endif /* GL_GLEXT_PROTOTYPES */
3595typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture);
3596typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture);
3597typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s);
3598typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v);
3599typedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s);
3600typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v);
3601typedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s);
3602typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v);
3603typedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s);
3604typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v);
3605typedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t);
3606typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v);
3607typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t);
3608typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v);
3609typedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t);
3610typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v);
3611typedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t);
3612typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v);
3613typedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r);
3614typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v);
3615typedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r);
3616typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v);
3617typedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r);
3618typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v);
3619typedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r);
3620typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v);
3621typedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
3622typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v);
3623typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
3624typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v);
3625typedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q);
3626typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v);
3627typedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
3628typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v);
3629typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m);
3630typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m);
3631typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m);
3632typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m);
3633typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert);
3634typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
3635typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
3636typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);
3637typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
3638typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
3639typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
3640typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img);
3641#endif
3642
3643#ifndef GL_VERSION_1_4
3644#define GL_VERSION_1_4 1
3645#ifdef GL_GLEXT_PROTOTYPES
3646GLAPI void APIENTRY glBlendFuncSeparate (GLenum, GLenum, GLenum, GLenum);
3647GLAPI void APIENTRY glFogCoordf (GLfloat);
3648GLAPI void APIENTRY glFogCoordfv (const GLfloat *);
3649GLAPI void APIENTRY glFogCoordd (GLdouble);
3650GLAPI void APIENTRY glFogCoorddv (const GLdouble *);
3651GLAPI void APIENTRY glFogCoordPointer (GLenum, GLsizei, const GLvoid *);
3652GLAPI void APIENTRY glMultiDrawArrays (GLenum, GLint *, GLsizei *, GLsizei);
3653GLAPI void APIENTRY glMultiDrawElements (GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei);
3654GLAPI void APIENTRY glPointParameterf (GLenum, GLfloat);
3655GLAPI void APIENTRY glPointParameterfv (GLenum, const GLfloat *);
3656GLAPI void APIENTRY glPointParameteri (GLenum, GLint);
3657GLAPI void APIENTRY glPointParameteriv (GLenum, const GLint *);
3658GLAPI void APIENTRY glSecondaryColor3b (GLbyte, GLbyte, GLbyte);
3659GLAPI void APIENTRY glSecondaryColor3bv (const GLbyte *);
3660GLAPI void APIENTRY glSecondaryColor3d (GLdouble, GLdouble, GLdouble);
3661GLAPI void APIENTRY glSecondaryColor3dv (const GLdouble *);
3662GLAPI void APIENTRY glSecondaryColor3f (GLfloat, GLfloat, GLfloat);
3663GLAPI void APIENTRY glSecondaryColor3fv (const GLfloat *);
3664GLAPI void APIENTRY glSecondaryColor3i (GLint, GLint, GLint);
3665GLAPI void APIENTRY glSecondaryColor3iv (const GLint *);
3666GLAPI void APIENTRY glSecondaryColor3s (GLshort, GLshort, GLshort);
3667GLAPI void APIENTRY glSecondaryColor3sv (const GLshort *);
3668GLAPI void APIENTRY glSecondaryColor3ub (GLubyte, GLubyte, GLubyte);
3669GLAPI void APIENTRY glSecondaryColor3ubv (const GLubyte *);
3670GLAPI void APIENTRY glSecondaryColor3ui (GLuint, GLuint, GLuint);
3671GLAPI void APIENTRY glSecondaryColor3uiv (const GLuint *);
3672GLAPI void APIENTRY glSecondaryColor3us (GLushort, GLushort, GLushort);
3673GLAPI void APIENTRY glSecondaryColor3usv (const GLushort *);
3674GLAPI void APIENTRY glSecondaryColorPointer (GLint, GLenum, GLsizei, const GLvoid *);
3675GLAPI void APIENTRY glWindowPos2d (GLdouble, GLdouble);
3676GLAPI void APIENTRY glWindowPos2dv (const GLdouble *);
3677GLAPI void APIENTRY glWindowPos2f (GLfloat, GLfloat);
3678GLAPI void APIENTRY glWindowPos2fv (const GLfloat *);
3679GLAPI void APIENTRY glWindowPos2i (GLint, GLint);
3680GLAPI void APIENTRY glWindowPos2iv (const GLint *);
3681GLAPI void APIENTRY glWindowPos2s (GLshort, GLshort);
3682GLAPI void APIENTRY glWindowPos2sv (const GLshort *);
3683GLAPI void APIENTRY glWindowPos3d (GLdouble, GLdouble, GLdouble);
3684GLAPI void APIENTRY glWindowPos3dv (const GLdouble *);
3685GLAPI void APIENTRY glWindowPos3f (GLfloat, GLfloat, GLfloat);
3686GLAPI void APIENTRY glWindowPos3fv (const GLfloat *);
3687GLAPI void APIENTRY glWindowPos3i (GLint, GLint, GLint);
3688GLAPI void APIENTRY glWindowPos3iv (const GLint *);
3689GLAPI void APIENTRY glWindowPos3s (GLshort, GLshort, GLshort);
3690GLAPI void APIENTRY glWindowPos3sv (const GLshort *);
3691#endif /* GL_GLEXT_PROTOTYPES */
3692typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
3693typedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord);
3694typedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord);
3695typedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord);
3696typedef void (APIENTRYP PFNGLFOGCOORDDVPROC) (const GLdouble *coord);
3697typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);
3698typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount);
3699typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount);
3700typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param);
3701typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params);
3702typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param);
3703typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params);
3704typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue);
3705typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v);
3706typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue);
3707typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v);
3708typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue);
3709typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v);
3710typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue);
3711typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v);
3712typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue);
3713typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v);
3714typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue);
3715typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v);
3716typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue);
3717typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v);
3718typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue);
3719typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v);
3720typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
3721typedef void (APIENTRYP PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y);
3722typedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC) (const GLdouble *v);
3723typedef void (APIENTRYP PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y);
3724typedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC) (const GLfloat *v);
3725typedef void (APIENTRYP PFNGLWINDOWPOS2IPROC) (GLint x, GLint y);
3726typedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC) (const GLint *v);
3727typedef void (APIENTRYP PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y);
3728typedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC) (const GLshort *v);
3729typedef void (APIENTRYP PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z);
3730typedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC) (const GLdouble *v);
3731typedef void (APIENTRYP PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z);
3732typedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC) (const GLfloat *v);
3733typedef void (APIENTRYP PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z);
3734typedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC) (const GLint *v);
3735typedef void (APIENTRYP PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z);
3736typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC) (const GLshort *v);
3737#endif
3738
3739#ifndef GL_VERSION_1_5
3740#define GL_VERSION_1_5 1
3741#ifdef GL_GLEXT_PROTOTYPES
3742GLAPI void APIENTRY glGenQueries (GLsizei, GLuint *);
3743GLAPI void APIENTRY glDeleteQueries (GLsizei, const GLuint *);
3744GLAPI GLboolean APIENTRY glIsQuery (GLuint);
3745GLAPI void APIENTRY glBeginQuery (GLenum, GLuint);
3746GLAPI void APIENTRY glEndQuery (GLenum);
3747GLAPI void APIENTRY glGetQueryiv (GLenum, GLenum, GLint *);
3748GLAPI void APIENTRY glGetQueryObjectiv (GLuint, GLenum, GLint *);
3749GLAPI void APIENTRY glGetQueryObjectuiv (GLuint, GLenum, GLuint *);
3750GLAPI void APIENTRY glBindBuffer (GLenum, GLuint);
3751GLAPI void APIENTRY glDeleteBuffers (GLsizei, const GLuint *);
3752GLAPI void APIENTRY glGenBuffers (GLsizei, GLuint *);
3753GLAPI GLboolean APIENTRY glIsBuffer (GLuint);
3754GLAPI void APIENTRY glBufferData (GLenum, GLsizeiptr, const GLvoid *, GLenum);
3755GLAPI void APIENTRY glBufferSubData (GLenum, GLintptr, GLsizeiptr, const GLvoid *);
3756GLAPI void APIENTRY glGetBufferSubData (GLenum, GLintptr, GLsizeiptr, GLvoid *);
3757GLAPI GLvoid* APIENTRY glMapBuffer (GLenum, GLenum);
3758GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum);
3759GLAPI void APIENTRY glGetBufferParameteriv (GLenum, GLenum, GLint *);
3760GLAPI void APIENTRY glGetBufferPointerv (GLenum, GLenum, GLvoid* *);
3761#endif /* GL_GLEXT_PROTOTYPES */
3762typedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids);
3763typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids);
3764typedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id);
3765typedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id);
3766typedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target);
3767typedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params);
3768typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params);
3769typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params);
3770typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer);
3771typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers);
3772typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers);
3773typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer);
3774typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage);
3775typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data);
3776typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data);
3777typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access);
3778typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target);
3779typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
3780typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, GLvoid* *params);
3781#endif
3782
3783#ifndef GL_VERSION_2_0
3784#define GL_VERSION_2_0 1
3785#ifdef GL_GLEXT_PROTOTYPES
3786GLAPI void APIENTRY glBlendEquationSeparate (GLenum, GLenum);
3787GLAPI void APIENTRY glDrawBuffers (GLsizei, const GLenum *);
3788GLAPI void APIENTRY glStencilOpSeparate (GLenum, GLenum, GLenum, GLenum);
3789GLAPI void APIENTRY glStencilFuncSeparate (GLenum, GLenum, GLint, GLuint);
3790GLAPI void APIENTRY glStencilMaskSeparate (GLenum, GLuint);
3791GLAPI void APIENTRY glAttachShader (GLuint, GLuint);
3792GLAPI void APIENTRY glBindAttribLocation (GLuint, GLuint, const GLchar *);
3793GLAPI void APIENTRY glCompileShader (GLuint);
3794GLAPI GLuint APIENTRY glCreateProgram (void);
3795GLAPI GLuint APIENTRY glCreateShader (GLenum);
3796GLAPI void APIENTRY glDeleteProgram (GLuint);
3797GLAPI void APIENTRY glDeleteShader (GLuint);
3798GLAPI void APIENTRY glDetachShader (GLuint, GLuint);
3799GLAPI void APIENTRY glDisableVertexAttribArray (GLuint);
3800GLAPI void APIENTRY glEnableVertexAttribArray (GLuint);
3801GLAPI void APIENTRY glGetActiveAttrib (GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *);
3802GLAPI void APIENTRY glGetActiveUniform (GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *);
3803GLAPI void APIENTRY glGetAttachedShaders (GLuint, GLsizei, GLsizei *, GLuint *);
3804GLAPI GLint APIENTRY glGetAttribLocation (GLuint, const GLchar *);
3805GLAPI void APIENTRY glGetProgramiv (GLuint, GLenum, GLint *);
3806GLAPI void APIENTRY glGetProgramInfoLog (GLuint, GLsizei, GLsizei *, GLchar *);
3807GLAPI void APIENTRY glGetShaderiv (GLuint, GLenum, GLint *);
3808GLAPI void APIENTRY glGetShaderInfoLog (GLuint, GLsizei, GLsizei *, GLchar *);
3809GLAPI void APIENTRY glGetShaderSource (GLuint, GLsizei, GLsizei *, GLchar *);
3810GLAPI GLint APIENTRY glGetUniformLocation (GLuint, const GLchar *);
3811GLAPI void APIENTRY glGetUniformfv (GLuint, GLint, GLfloat *);
3812GLAPI void APIENTRY glGetUniformiv (GLuint, GLint, GLint *);
3813GLAPI void APIENTRY glGetVertexAttribdv (GLuint, GLenum, GLdouble *);
3814GLAPI void APIENTRY glGetVertexAttribfv (GLuint, GLenum, GLfloat *);
3815GLAPI void APIENTRY glGetVertexAttribiv (GLuint, GLenum, GLint *);
3816GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint, GLenum, GLvoid* *);
3817GLAPI GLboolean APIENTRY glIsProgram (GLuint);
3818GLAPI GLboolean APIENTRY glIsShader (GLuint);
3819GLAPI void APIENTRY glLinkProgram (GLuint);
3820GLAPI void APIENTRY glShaderSource (GLuint, GLsizei, const GLchar* *, const GLint *);
3821GLAPI void APIENTRY glUseProgram (GLuint);
3822GLAPI void APIENTRY glUniform1f (GLint, GLfloat);
3823GLAPI void APIENTRY glUniform2f (GLint, GLfloat, GLfloat);
3824GLAPI void APIENTRY glUniform3f (GLint, GLfloat, GLfloat, GLfloat);
3825GLAPI void APIENTRY glUniform4f (GLint, GLfloat, GLfloat, GLfloat, GLfloat);
3826GLAPI void APIENTRY glUniform1i (GLint, GLint);
3827GLAPI void APIENTRY glUniform2i (GLint, GLint, GLint);
3828GLAPI void APIENTRY glUniform3i (GLint, GLint, GLint, GLint);
3829GLAPI void APIENTRY glUniform4i (GLint, GLint, GLint, GLint, GLint);
3830GLAPI void APIENTRY glUniform1fv (GLint, GLsizei, const GLfloat *);
3831GLAPI void APIENTRY glUniform2fv (GLint, GLsizei, const GLfloat *);
3832GLAPI void APIENTRY glUniform3fv (GLint, GLsizei, const GLfloat *);
3833GLAPI void APIENTRY glUniform4fv (GLint, GLsizei, const GLfloat *);
3834GLAPI void APIENTRY glUniform1iv (GLint, GLsizei, const GLint *);
3835GLAPI void APIENTRY glUniform2iv (GLint, GLsizei, const GLint *);
3836GLAPI void APIENTRY glUniform3iv (GLint, GLsizei, const GLint *);
3837GLAPI void APIENTRY glUniform4iv (GLint, GLsizei, const GLint *);
3838GLAPI void APIENTRY glUniformMatrix2fv (GLint, GLsizei, GLboolean, const GLfloat *);
3839GLAPI void APIENTRY glUniformMatrix3fv (GLint, GLsizei, GLboolean, const GLfloat *);
3840GLAPI void APIENTRY glUniformMatrix4fv (GLint, GLsizei, GLboolean, const GLfloat *);
3841GLAPI void APIENTRY glValidateProgram (GLuint);
3842GLAPI void APIENTRY glVertexAttrib1d (GLuint, GLdouble);
3843GLAPI void APIENTRY glVertexAttrib1dv (GLuint, const GLdouble *);
3844GLAPI void APIENTRY glVertexAttrib1f (GLuint, GLfloat);
3845GLAPI void APIENTRY glVertexAttrib1fv (GLuint, const GLfloat *);
3846GLAPI void APIENTRY glVertexAttrib1s (GLuint, GLshort);
3847GLAPI void APIENTRY glVertexAttrib1sv (GLuint, const GLshort *);
3848GLAPI void APIENTRY glVertexAttrib2d (GLuint, GLdouble, GLdouble);
3849GLAPI void APIENTRY glVertexAttrib2dv (GLuint, const GLdouble *);
3850GLAPI void APIENTRY glVertexAttrib2f (GLuint, GLfloat, GLfloat);
3851GLAPI void APIENTRY glVertexAttrib2fv (GLuint, const GLfloat *);
3852GLAPI void APIENTRY glVertexAttrib2s (GLuint, GLshort, GLshort);
3853GLAPI void APIENTRY glVertexAttrib2sv (GLuint, const GLshort *);
3854GLAPI void APIENTRY glVertexAttrib3d (GLuint, GLdouble, GLdouble, GLdouble);
3855GLAPI void APIENTRY glVertexAttrib3dv (GLuint, const GLdouble *);
3856GLAPI void APIENTRY glVertexAttrib3f (GLuint, GLfloat, GLfloat, GLfloat);
3857GLAPI void APIENTRY glVertexAttrib3fv (GLuint, const GLfloat *);
3858GLAPI void APIENTRY glVertexAttrib3s (GLuint, GLshort, GLshort, GLshort);
3859GLAPI void APIENTRY glVertexAttrib3sv (GLuint, const GLshort *);
3860GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint, const GLbyte *);
3861GLAPI void APIENTRY glVertexAttrib4Niv (GLuint, const GLint *);
3862GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint, const GLshort *);
3863GLAPI void APIENTRY glVertexAttrib4Nub (GLuint, GLubyte, GLubyte, GLubyte, GLubyte);
3864GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint, const GLubyte *);
3865GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint, const GLuint *);
3866GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint, const GLushort *);
3867GLAPI void APIENTRY glVertexAttrib4bv (GLuint, const GLbyte *);
3868GLAPI void APIENTRY glVertexAttrib4d (GLuint, GLdouble, GLdouble, GLdouble, GLdouble);
3869GLAPI void APIENTRY glVertexAttrib4dv (GLuint, const GLdouble *);
3870GLAPI void APIENTRY glVertexAttrib4f (GLuint, GLfloat, GLfloat, GLfloat, GLfloat);
3871GLAPI void APIENTRY glVertexAttrib4fv (GLuint, const GLfloat *);
3872GLAPI void APIENTRY glVertexAttrib4iv (GLuint, const GLint *);
3873GLAPI void APIENTRY glVertexAttrib4s (GLuint, GLshort, GLshort, GLshort, GLshort);
3874GLAPI void APIENTRY glVertexAttrib4sv (GLuint, const GLshort *);
3875GLAPI void APIENTRY glVertexAttrib4ubv (GLuint, const GLubyte *);
3876GLAPI void APIENTRY glVertexAttrib4uiv (GLuint, const GLuint *);
3877GLAPI void APIENTRY glVertexAttrib4usv (GLuint, const GLushort *);
3878GLAPI void APIENTRY glVertexAttribPointer (GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid *);
3879#endif /* GL_GLEXT_PROTOTYPES */
3880typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha);
3881typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs);
3882typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
3883typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
3884typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask);
3885typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader);
3886typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name);
3887typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader);
3888typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void);
3889typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type);
3890typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program);
3891typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader);
3892typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader);
3893typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index);
3894typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index);
3895typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
3896typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
3897typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj);
3898typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name);
3899typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params);
3900typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
3901typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params);
3902typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
3903typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
3904typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name);
3905typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params);
3906typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params);
3907typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params);
3908typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params);
3909typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params);
3910typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, GLvoid* *pointer);
3911typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program);
3912typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader);
3913typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program);
3914typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar* *string, const GLint *length);
3915typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program);
3916typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0);
3917typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1);
3918typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
3919typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
3920typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0);
3921typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1);
3922typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2);
3923typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
3924typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value);
3925typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value);
3926typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value);
3927typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value);
3928typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value);
3929typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value);
3930typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value);
3931typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value);
3932typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
3933typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
3934typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
3935typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program);
3936typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x);
3937typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v);
3938typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x);
3939typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v);
3940typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x);
3941typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v);
3942typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y);
3943typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v);
3944typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y);
3945typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v);
3946typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y);
3947typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v);
3948typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
3949typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v);
3950typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
3951typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v);
3952typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
3953typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v);
3954typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v);
3955typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v);
3956typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v);
3957typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
3958typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v);
3959typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v);
3960typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v);
3961typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v);
3962typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
3963typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v);
3964typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
3965typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v);
3966typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v);
3967typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
3968typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v);
3969typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v);
3970typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v);
3971typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v);
3972typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
3973#endif
3974
3975#ifndef GL_VERSION_2_1
3976#define GL_VERSION_2_1 1
3977#ifdef GL_GLEXT_PROTOTYPES
3978GLAPI void APIENTRY glUniformMatrix2x3fv (GLint, GLsizei, GLboolean, const GLfloat *);
3979GLAPI void APIENTRY glUniformMatrix3x2fv (GLint, GLsizei, GLboolean, const GLfloat *);
3980GLAPI void APIENTRY glUniformMatrix2x4fv (GLint, GLsizei, GLboolean, const GLfloat *);
3981GLAPI void APIENTRY glUniformMatrix4x2fv (GLint, GLsizei, GLboolean, const GLfloat *);
3982GLAPI void APIENTRY glUniformMatrix3x4fv (GLint, GLsizei, GLboolean, const GLfloat *);
3983GLAPI void APIENTRY glUniformMatrix4x3fv (GLint, GLsizei, GLboolean, const GLfloat *);
3984#endif /* GL_GLEXT_PROTOTYPES */
3985typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
3986typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
3987typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
3988typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
3989typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
3990typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
3991#endif
3992
3993#ifndef GL_ARB_multitexture
3994#define GL_ARB_multitexture 1
3995#ifdef GL_GLEXT_PROTOTYPES
3996GLAPI void APIENTRY glActiveTextureARB (GLenum);
3997GLAPI void APIENTRY glClientActiveTextureARB (GLenum);
3998GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum, GLdouble);
3999GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum, const GLdouble *);
4000GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum, GLfloat);
4001GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum, const GLfloat *);
4002GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum, GLint);
4003GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum, const GLint *);
4004GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum, GLshort);
4005GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum, const GLshort *);
4006GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum, GLdouble, GLdouble);
4007GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum, const GLdouble *);
4008GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum, GLfloat, GLfloat);
4009GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum, const GLfloat *);
4010GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum, GLint, GLint);
4011GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum, const GLint *);
4012GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum, GLshort, GLshort);
4013GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum, const GLshort *);
4014GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum, GLdouble, GLdouble, GLdouble);
4015GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum, const GLdouble *);
4016GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum, GLfloat, GLfloat, GLfloat);
4017GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum, const GLfloat *);
4018GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum, GLint, GLint, GLint);
4019GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum, const GLint *);
4020GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum, GLshort, GLshort, GLshort);
4021GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum, const GLshort *);
4022GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum, GLdouble, GLdouble, GLdouble, GLdouble);
4023GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum, const GLdouble *);
4024GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum, GLfloat, GLfloat, GLfloat, GLfloat);
4025GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum, const GLfloat *);
4026GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum, GLint, GLint, GLint, GLint);
4027GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum, const GLint *);
4028GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum, GLshort, GLshort, GLshort, GLshort);
4029GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum, const GLshort *);
4030#endif /* GL_GLEXT_PROTOTYPES */
4031typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture);
4032typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture);
4033typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s);
4034typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v);
4035typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s);
4036typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v);
4037typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s);
4038typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v);
4039typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s);
4040typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v);
4041typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t);
4042typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v);
4043typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t);
4044typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v);
4045typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t);
4046typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v);
4047typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t);
4048typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v);
4049typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r);
4050typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v);
4051typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r);
4052typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v);
4053typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r);
4054typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v);
4055typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r);
4056typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v);
4057typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
4058typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v);
4059typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
4060typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v);
4061typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q);
4062typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v);
4063typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
4064typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v);
4065#endif
4066
4067#ifndef GL_ARB_transpose_matrix
4068#define GL_ARB_transpose_matrix 1
4069#ifdef GL_GLEXT_PROTOTYPES
4070GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *);
4071GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *);
4072GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *);
4073GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *);
4074#endif /* GL_GLEXT_PROTOTYPES */
4075typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m);
4076typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m);
4077typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m);
4078typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m);
4079#endif
4080
4081#ifndef GL_ARB_multisample
4082#define GL_ARB_multisample 1
4083#ifdef GL_GLEXT_PROTOTYPES
4084GLAPI void APIENTRY glSampleCoverageARB (GLclampf, GLboolean);
4085#endif /* GL_GLEXT_PROTOTYPES */
4086typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLclampf value, GLboolean invert);
4087#endif
4088
4089#ifndef GL_ARB_texture_env_add
4090#define GL_ARB_texture_env_add 1
4091#endif
4092
4093#ifndef GL_ARB_texture_cube_map
4094#define GL_ARB_texture_cube_map 1
4095#endif
4096
4097#ifndef GL_ARB_texture_compression
4098#define GL_ARB_texture_compression 1
4099#ifdef GL_GLEXT_PROTOTYPES
4100GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *);
4101GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *);
4102GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *);
4103GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *);
4104GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *);
4105GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *);
4106GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum, GLint, GLvoid *);
4107#endif /* GL_GLEXT_PROTOTYPES */
4108typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
4109typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
4110typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);
4111typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
4112typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
4113typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
4114typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, GLvoid *img);
4115#endif
4116
4117#ifndef GL_ARB_texture_border_clamp
4118#define GL_ARB_texture_border_clamp 1
4119#endif
4120
4121#ifndef GL_ARB_point_parameters
4122#define GL_ARB_point_parameters 1
4123#ifdef GL_GLEXT_PROTOTYPES
4124GLAPI void APIENTRY glPointParameterfARB (GLenum, GLfloat);
4125GLAPI void APIENTRY glPointParameterfvARB (GLenum, const GLfloat *);
4126#endif /* GL_GLEXT_PROTOTYPES */
4127typedef void (APIENTRYP PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param);
4128typedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params);
4129#endif
4130
4131#ifndef GL_ARB_vertex_blend
4132#define GL_ARB_vertex_blend 1
4133#ifdef GL_GLEXT_PROTOTYPES
4134GLAPI void APIENTRY glWeightbvARB (GLint, const GLbyte *);
4135GLAPI void APIENTRY glWeightsvARB (GLint, const GLshort *);
4136GLAPI void APIENTRY glWeightivARB (GLint, const GLint *);
4137GLAPI void APIENTRY glWeightfvARB (GLint, const GLfloat *);
4138GLAPI void APIENTRY glWeightdvARB (GLint, const GLdouble *);
4139GLAPI void APIENTRY glWeightubvARB (GLint, const GLubyte *);
4140GLAPI void APIENTRY glWeightusvARB (GLint, const GLushort *);
4141GLAPI void APIENTRY glWeightuivARB (GLint, const GLuint *);
4142GLAPI void APIENTRY glWeightPointerARB (GLint, GLenum, GLsizei, const GLvoid *);
4143GLAPI void APIENTRY glVertexBlendARB (GLint);
4144#endif /* GL_GLEXT_PROTOTYPES */
4145typedef void (APIENTRYP PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights);
4146typedef void (APIENTRYP PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights);
4147typedef void (APIENTRYP PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights);
4148typedef void (APIENTRYP PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights);
4149typedef void (APIENTRYP PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights);
4150typedef void (APIENTRYP PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights);
4151typedef void (APIENTRYP PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights);
4152typedef void (APIENTRYP PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights);
4153typedef void (APIENTRYP PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
4154typedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC) (GLint count);
4155#endif
4156
4157#ifndef GL_ARB_matrix_palette
4158#define GL_ARB_matrix_palette 1
4159#ifdef GL_GLEXT_PROTOTYPES
4160GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint);
4161GLAPI void APIENTRY glMatrixIndexubvARB (GLint, const GLubyte *);
4162GLAPI void APIENTRY glMatrixIndexusvARB (GLint, const GLushort *);
4163GLAPI void APIENTRY glMatrixIndexuivARB (GLint, const GLuint *);
4164GLAPI void APIENTRY glMatrixIndexPointerARB (GLint, GLenum, GLsizei, const GLvoid *);
4165#endif /* GL_GLEXT_PROTOTYPES */
4166typedef void (APIENTRYP PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index);
4167typedef void (APIENTRYP PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices);
4168typedef void (APIENTRYP PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices);
4169typedef void (APIENTRYP PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices);
4170typedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
4171#endif
4172
4173#ifndef GL_ARB_texture_env_combine
4174#define GL_ARB_texture_env_combine 1
4175#endif
4176
4177#ifndef GL_ARB_texture_env_crossbar
4178#define GL_ARB_texture_env_crossbar 1
4179#endif
4180
4181#ifndef GL_ARB_texture_env_dot3
4182#define GL_ARB_texture_env_dot3 1
4183#endif
4184
4185#ifndef GL_ARB_texture_mirrored_repeat
4186#define GL_ARB_texture_mirrored_repeat 1
4187#endif
4188
4189#ifndef GL_ARB_depth_texture
4190#define GL_ARB_depth_texture 1
4191#endif
4192
4193#ifndef GL_ARB_shadow
4194#define GL_ARB_shadow 1
4195#endif
4196
4197#ifndef GL_ARB_shadow_ambient
4198#define GL_ARB_shadow_ambient 1
4199#endif
4200
4201#ifndef GL_ARB_window_pos
4202#define GL_ARB_window_pos 1
4203#ifdef GL_GLEXT_PROTOTYPES
4204GLAPI void APIENTRY glWindowPos2dARB (GLdouble, GLdouble);
4205GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *);
4206GLAPI void APIENTRY glWindowPos2fARB (GLfloat, GLfloat);
4207GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *);
4208GLAPI void APIENTRY glWindowPos2iARB (GLint, GLint);
4209GLAPI void APIENTRY glWindowPos2ivARB (const GLint *);
4210GLAPI void APIENTRY glWindowPos2sARB (GLshort, GLshort);
4211GLAPI void APIENTRY glWindowPos2svARB (const GLshort *);
4212GLAPI void APIENTRY glWindowPos3dARB (GLdouble, GLdouble, GLdouble);
4213GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *);
4214GLAPI void APIENTRY glWindowPos3fARB (GLfloat, GLfloat, GLfloat);
4215GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *);
4216GLAPI void APIENTRY glWindowPos3iARB (GLint, GLint, GLint);
4217GLAPI void APIENTRY glWindowPos3ivARB (const GLint *);
4218GLAPI void APIENTRY glWindowPos3sARB (GLshort, GLshort, GLshort);
4219GLAPI void APIENTRY glWindowPos3svARB (const GLshort *);
4220#endif /* GL_GLEXT_PROTOTYPES */
4221typedef void (APIENTRYP PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y);
4222typedef void (APIENTRYP PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v);
4223typedef void (APIENTRYP PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y);
4224typedef void (APIENTRYP PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v);
4225typedef void (APIENTRYP PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y);
4226typedef void (APIENTRYP PFNGLWINDOWPOS2IVARBPROC) (const GLint *v);
4227typedef void (APIENTRYP PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y);
4228typedef void (APIENTRYP PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v);
4229typedef void (APIENTRYP PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z);
4230typedef void (APIENTRYP PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v);
4231typedef void (APIENTRYP PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z);
4232typedef void (APIENTRYP PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v);
4233typedef void (APIENTRYP PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z);
4234typedef void (APIENTRYP PFNGLWINDOWPOS3IVARBPROC) (const GLint *v);
4235typedef void (APIENTRYP PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z);
4236typedef void (APIENTRYP PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v);
4237#endif
4238
4239#ifndef GL_ARB_vertex_program
4240#define GL_ARB_vertex_program 1
4241#ifdef GL_GLEXT_PROTOTYPES
4242GLAPI void APIENTRY glVertexAttrib1dARB (GLuint, GLdouble);
4243GLAPI void APIENTRY glVertexAttrib1dvARB (GLuint, const GLdouble *);
4244GLAPI void APIENTRY glVertexAttrib1fARB (GLuint, GLfloat);
4245GLAPI void APIENTRY glVertexAttrib1fvARB (GLuint, const GLfloat *);
4246GLAPI void APIENTRY glVertexAttrib1sARB (GLuint, GLshort);
4247GLAPI void APIENTRY glVertexAttrib1svARB (GLuint, const GLshort *);
4248GLAPI void APIENTRY glVertexAttrib2dARB (GLuint, GLdouble, GLdouble);
4249GLAPI void APIENTRY glVertexAttrib2dvARB (GLuint, const GLdouble *);
4250GLAPI void APIENTRY glVertexAttrib2fARB (GLuint, GLfloat, GLfloat);
4251GLAPI void APIENTRY glVertexAttrib2fvARB (GLuint, const GLfloat *);
4252GLAPI void APIENTRY glVertexAttrib2sARB (GLuint, GLshort, GLshort);
4253GLAPI void APIENTRY glVertexAttrib2svARB (GLuint, const GLshort *);
4254GLAPI void APIENTRY glVertexAttrib3dARB (GLuint, GLdouble, GLdouble, GLdouble);
4255GLAPI void APIENTRY glVertexAttrib3dvARB (GLuint, const GLdouble *);
4256GLAPI void APIENTRY glVertexAttrib3fARB (GLuint, GLfloat, GLfloat, GLfloat);
4257GLAPI void APIENTRY glVertexAttrib3fvARB (GLuint, const GLfloat *);
4258GLAPI void APIENTRY glVertexAttrib3sARB (GLuint, GLshort, GLshort, GLshort);
4259GLAPI void APIENTRY glVertexAttrib3svARB (GLuint, const GLshort *);
4260GLAPI void APIENTRY glVertexAttrib4NbvARB (GLuint, const GLbyte *);
4261GLAPI void APIENTRY glVertexAttrib4NivARB (GLuint, const GLint *);
4262GLAPI void APIENTRY glVertexAttrib4NsvARB (GLuint, const GLshort *);
4263GLAPI void APIENTRY glVertexAttrib4NubARB (GLuint, GLubyte, GLubyte, GLubyte, GLubyte);
4264GLAPI void APIENTRY glVertexAttrib4NubvARB (GLuint, const GLubyte *);
4265GLAPI void APIENTRY glVertexAttrib4NuivARB (GLuint, const GLuint *);
4266GLAPI void APIENTRY glVertexAttrib4NusvARB (GLuint, const GLushort *);
4267GLAPI void APIENTRY glVertexAttrib4bvARB (GLuint, const GLbyte *);
4268GLAPI void APIENTRY glVertexAttrib4dARB (GLuint, GLdouble, GLdouble, GLdouble, GLdouble);
4269GLAPI void APIENTRY glVertexAttrib4dvARB (GLuint, const GLdouble *);
4270GLAPI void APIENTRY glVertexAttrib4fARB (GLuint, GLfloat, GLfloat, GLfloat, GLfloat);
4271GLAPI void APIENTRY glVertexAttrib4fvARB (GLuint, const GLfloat *);
4272GLAPI void APIENTRY glVertexAttrib4ivARB (GLuint, const GLint *);
4273GLAPI void APIENTRY glVertexAttrib4sARB (GLuint, GLshort, GLshort, GLshort, GLshort);
4274GLAPI void APIENTRY glVertexAttrib4svARB (GLuint, const GLshort *);
4275GLAPI void APIENTRY glVertexAttrib4ubvARB (GLuint, const GLubyte *);
4276GLAPI void APIENTRY glVertexAttrib4uivARB (GLuint, const GLuint *);
4277GLAPI void APIENTRY glVertexAttrib4usvARB (GLuint, const GLushort *);
4278GLAPI void APIENTRY glVertexAttribPointerARB (GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid *);
4279GLAPI void APIENTRY glEnableVertexAttribArrayARB (GLuint);
4280GLAPI void APIENTRY glDisableVertexAttribArrayARB (GLuint);
4281GLAPI void APIENTRY glProgramStringARB (GLenum, GLenum, GLsizei, const GLvoid *);
4282GLAPI void APIENTRY glBindProgramARB (GLenum, GLuint);
4283GLAPI void APIENTRY glDeleteProgramsARB (GLsizei, const GLuint *);
4284GLAPI void APIENTRY glGenProgramsARB (GLsizei, GLuint *);
4285GLAPI void APIENTRY glProgramEnvParameter4dARB (GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble);
4286GLAPI void APIENTRY glProgramEnvParameter4dvARB (GLenum, GLuint, const GLdouble *);
4287GLAPI void APIENTRY glProgramEnvParameter4fARB (GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat);
4288GLAPI void APIENTRY glProgramEnvParameter4fvARB (GLenum, GLuint, const GLfloat *);
4289GLAPI void APIENTRY glProgramLocalParameter4dARB (GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble);
4290GLAPI void APIENTRY glProgramLocalParameter4dvARB (GLenum, GLuint, const GLdouble *);
4291GLAPI void APIENTRY glProgramLocalParameter4fARB (GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat);
4292GLAPI void APIENTRY glProgramLocalParameter4fvARB (GLenum, GLuint, const GLfloat *);
4293GLAPI void APIENTRY glGetProgramEnvParameterdvARB (GLenum, GLuint, GLdouble *);
4294GLAPI void APIENTRY glGetProgramEnvParameterfvARB (GLenum, GLuint, GLfloat *);
4295GLAPI void APIENTRY glGetProgramLocalParameterdvARB (GLenum, GLuint, GLdouble *);
4296GLAPI void APIENTRY glGetProgramLocalParameterfvARB (GLenum, GLuint, GLfloat *);
4297GLAPI void APIENTRY glGetProgramivARB (GLenum, GLenum, GLint *);
4298GLAPI void APIENTRY glGetProgramStringARB (GLenum, GLenum, GLvoid *);
4299GLAPI void APIENTRY glGetVertexAttribdvARB (GLuint, GLenum, GLdouble *);
4300GLAPI void APIENTRY glGetVertexAttribfvARB (GLuint, GLenum, GLfloat *);
4301GLAPI void APIENTRY glGetVertexAttribivARB (GLuint, GLenum, GLint *);
4302GLAPI void APIENTRY glGetVertexAttribPointervARB (GLuint, GLenum, GLvoid* *);
4303GLAPI GLboolean APIENTRY glIsProgramARB (GLuint);
4304#endif /* GL_GLEXT_PROTOTYPES */
4305typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x);
4306typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v);
4307typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x);
4308typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v);
4309typedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x);
4310typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v);
4311typedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y);
4312typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v);
4313typedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y);
4314typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v);
4315typedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y);
4316typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v);
4317typedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
4318typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v);
4319typedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
4320typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v);
4321typedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
4322typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v);
4323typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte *v);
4324typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint *v);
4325typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort *v);
4326typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
4327typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte *v);
4328typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint *v);
4329typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort *v);
4330typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte *v);
4331typedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
4332typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v);
4333typedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
4334typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v);
4335typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint *v);
4336typedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
4337typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v);
4338typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v);
4339typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint *v);
4340typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort *v);
4341typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
4342typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index);
4343typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index);
4344typedef void (APIENTRYP PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const GLvoid *string);
4345typedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program);
4346typedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs);
4347typedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs);
4348typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
4349typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params);
4350typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
4351typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params);
4352typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
4353typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params);
4354typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
4355typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params);
4356typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params);
4357typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params);
4358typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params);
4359typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params);
4360typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params);
4361typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, GLvoid *string);
4362typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params);
4363typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params);
4364typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params);
4365typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, GLvoid* *pointer);
4366typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC) (GLuint program);
4367#endif
4368
4369#ifndef GL_ARB_fragment_program
4370#define GL_ARB_fragment_program 1
4371/* All ARB_fragment_program entry points are shared with ARB_vertex_program. */
4372#endif
4373
4374#ifndef GL_ARB_vertex_buffer_object
4375#define GL_ARB_vertex_buffer_object 1
4376#ifdef GL_GLEXT_PROTOTYPES
4377GLAPI void APIENTRY glBindBufferARB (GLenum, GLuint);
4378GLAPI void APIENTRY glDeleteBuffersARB (GLsizei, const GLuint *);
4379GLAPI void APIENTRY glGenBuffersARB (GLsizei, GLuint *);
4380GLAPI GLboolean APIENTRY glIsBufferARB (GLuint);
4381GLAPI void APIENTRY glBufferDataARB (GLenum, GLsizeiptrARB, const GLvoid *, GLenum);
4382GLAPI void APIENTRY glBufferSubDataARB (GLenum, GLintptrARB, GLsizeiptrARB, const GLvoid *);
4383GLAPI void APIENTRY glGetBufferSubDataARB (GLenum, GLintptrARB, GLsizeiptrARB, GLvoid *);
4384GLAPI GLvoid* APIENTRY glMapBufferARB (GLenum, GLenum);
4385GLAPI GLboolean APIENTRY glUnmapBufferARB (GLenum);
4386GLAPI void APIENTRY glGetBufferParameterivARB (GLenum, GLenum, GLint *);
4387GLAPI void APIENTRY glGetBufferPointervARB (GLenum, GLenum, GLvoid* *);
4388#endif /* GL_GLEXT_PROTOTYPES */
4389typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer);
4390typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers);
4391typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers);
4392typedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC) (GLuint buffer);
4393typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage);
4394typedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data);
4395typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data);
4396typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access);
4397typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC) (GLenum target);
4398typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params);
4399typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, GLvoid* *params);
4400#endif
4401
4402#ifndef GL_ARB_occlusion_query
4403#define GL_ARB_occlusion_query 1
4404#ifdef GL_GLEXT_PROTOTYPES
4405GLAPI void APIENTRY glGenQueriesARB (GLsizei, GLuint *);
4406GLAPI void APIENTRY glDeleteQueriesARB (GLsizei, const GLuint *);
4407GLAPI GLboolean APIENTRY glIsQueryARB (GLuint);
4408GLAPI void APIENTRY glBeginQueryARB (GLenum, GLuint);
4409GLAPI void APIENTRY glEndQueryARB (GLenum);
4410GLAPI void APIENTRY glGetQueryivARB (GLenum, GLenum, GLint *);
4411GLAPI void APIENTRY glGetQueryObjectivARB (GLuint, GLenum, GLint *);
4412GLAPI void APIENTRY glGetQueryObjectuivARB (GLuint, GLenum, GLuint *);
4413#endif /* GL_GLEXT_PROTOTYPES */
4414typedef void (APIENTRYP PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint *ids);
4415typedef void (APIENTRYP PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint *ids);
4416typedef GLboolean (APIENTRYP PFNGLISQUERYARBPROC) (GLuint id);
4417typedef void (APIENTRYP PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id);
4418typedef void (APIENTRYP PFNGLENDQUERYARBPROC) (GLenum target);
4419typedef void (APIENTRYP PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint *params);
4420typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint *params);
4421typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint *params);
4422#endif
4423
4424#ifndef GL_ARB_shader_objects
4425#define GL_ARB_shader_objects 1
4426#ifdef GL_GLEXT_PROTOTYPES
4427GLAPI void APIENTRY glDeleteObjectARB (GLhandleARB);
4428GLAPI GLhandleARB APIENTRY glGetHandleARB (GLenum);
4429GLAPI void APIENTRY glDetachObjectARB (GLhandleARB, GLhandleARB);
4430GLAPI GLhandleARB APIENTRY glCreateShaderObjectARB (GLenum);
4431GLAPI void APIENTRY glShaderSourceARB (GLhandleARB, GLsizei, const GLcharARB* *, const GLint *);
4432GLAPI void APIENTRY glCompileShaderARB (GLhandleARB);
4433GLAPI GLhandleARB APIENTRY glCreateProgramObjectARB (void);
4434GLAPI void APIENTRY glAttachObjectARB (GLhandleARB, GLhandleARB);
4435GLAPI void APIENTRY glLinkProgramARB (GLhandleARB);
4436GLAPI void APIENTRY glUseProgramObjectARB (GLhandleARB);
4437GLAPI void APIENTRY glValidateProgramARB (GLhandleARB);
4438GLAPI void APIENTRY glUniform1fARB (GLint, GLfloat);
4439GLAPI void APIENTRY glUniform2fARB (GLint, GLfloat, GLfloat);
4440GLAPI void APIENTRY glUniform3fARB (GLint, GLfloat, GLfloat, GLfloat);
4441GLAPI void APIENTRY glUniform4fARB (GLint, GLfloat, GLfloat, GLfloat, GLfloat);
4442GLAPI void APIENTRY glUniform1iARB (GLint, GLint);
4443GLAPI void APIENTRY glUniform2iARB (GLint, GLint, GLint);
4444GLAPI void APIENTRY glUniform3iARB (GLint, GLint, GLint, GLint);
4445GLAPI void APIENTRY glUniform4iARB (GLint, GLint, GLint, GLint, GLint);
4446GLAPI void APIENTRY glUniform1fvARB (GLint, GLsizei, const GLfloat *);
4447GLAPI void APIENTRY glUniform2fvARB (GLint, GLsizei, const GLfloat *);
4448GLAPI void APIENTRY glUniform3fvARB (GLint, GLsizei, const GLfloat *);
4449GLAPI void APIENTRY glUniform4fvARB (GLint, GLsizei, const GLfloat *);
4450GLAPI void APIENTRY glUniform1ivARB (GLint, GLsizei, const GLint *);
4451GLAPI void APIENTRY glUniform2ivARB (GLint, GLsizei, const GLint *);
4452GLAPI void APIENTRY glUniform3ivARB (GLint, GLsizei, const GLint *);
4453GLAPI void APIENTRY glUniform4ivARB (GLint, GLsizei, const GLint *);
4454GLAPI void APIENTRY glUniformMatrix2fvARB (GLint, GLsizei, GLboolean, const GLfloat *);
4455GLAPI void APIENTRY glUniformMatrix3fvARB (GLint, GLsizei, GLboolean, const GLfloat *);
4456GLAPI void APIENTRY glUniformMatrix4fvARB (GLint, GLsizei, GLboolean, const GLfloat *);
4457GLAPI void APIENTRY glGetObjectParameterfvARB (GLhandleARB, GLenum, GLfloat *);
4458GLAPI void APIENTRY glGetObjectParameterivARB (GLhandleARB, GLenum, GLint *);
4459GLAPI void APIENTRY glGetInfoLogARB (GLhandleARB, GLsizei, GLsizei *, GLcharARB *);
4460GLAPI void APIENTRY glGetAttachedObjectsARB (GLhandleARB, GLsizei, GLsizei *, GLhandleARB *);
4461GLAPI GLint APIENTRY glGetUniformLocationARB (GLhandleARB, const GLcharARB *);
4462GLAPI void APIENTRY glGetActiveUniformARB (GLhandleARB, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLcharARB *);
4463GLAPI void APIENTRY glGetUniformfvARB (GLhandleARB, GLint, GLfloat *);
4464GLAPI void APIENTRY glGetUniformivARB (GLhandleARB, GLint, GLint *);
4465GLAPI void APIENTRY glGetShaderSourceARB (GLhandleARB, GLsizei, GLsizei *, GLcharARB *);
4466#endif /* GL_GLEXT_PROTOTYPES */
4467typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj);
4468typedef GLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC) (GLenum pname);
4469typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj);
4470typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType);
4471typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB* *string, const GLint *length);
4472typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj);
4473typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void);
4474typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj);
4475typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj);
4476typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj);
4477typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj);
4478typedef void (APIENTRYP PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0);
4479typedef void (APIENTRYP PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1);
4480typedef void (APIENTRYP PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
4481typedef void (APIENTRYP PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
4482typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0);
4483typedef void (APIENTRYP PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1);
4484typedef void (APIENTRYP PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2);
4485typedef void (APIENTRYP PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
4486typedef void (APIENTRYP PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);
4487typedef void (APIENTRYP PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);
4488typedef void (APIENTRYP PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);
4489typedef void (APIENTRYP PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);
4490typedef void (APIENTRYP PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint *value);
4491typedef void (APIENTRYP PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint *value);
4492typedef void (APIENTRYP PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint *value);
4493typedef void (APIENTRYP PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint *value);
4494typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
4495typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
4496typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
4497typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat *params);
4498typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params);
4499typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog);
4500typedef void (APIENTRYP PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj);
4501typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name);
4502typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
4503typedef void (APIENTRYP PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat *params);
4504typedef void (APIENTRYP PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint *params);
4505typedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source);
4506#endif
4507
4508#ifndef GL_ARB_vertex_shader
4509#define GL_ARB_vertex_shader 1
4510#ifdef GL_GLEXT_PROTOTYPES
4511GLAPI void APIENTRY glBindAttribLocationARB (GLhandleARB, GLuint, const GLcharARB *);
4512GLAPI void APIENTRY glGetActiveAttribARB (GLhandleARB, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLcharARB *);
4513GLAPI GLint APIENTRY glGetAttribLocationARB (GLhandleARB, const GLcharARB *);
4514#endif /* GL_GLEXT_PROTOTYPES */
4515typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB *name);
4516typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
4517typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name);
4518#endif
4519
4520#ifndef GL_ARB_fragment_shader
4521#define GL_ARB_fragment_shader 1
4522#endif
4523
4524#ifndef GL_ARB_shading_language_100
4525#define GL_ARB_shading_language_100 1
4526#endif
4527
4528#ifndef GL_ARB_texture_non_power_of_two
4529#define GL_ARB_texture_non_power_of_two 1
4530#endif
4531
4532#ifndef GL_ARB_point_sprite
4533#define GL_ARB_point_sprite 1
4534#endif
4535
4536#ifndef GL_ARB_fragment_program_shadow
4537#define GL_ARB_fragment_program_shadow 1
4538#endif
4539
4540#ifndef GL_ARB_draw_buffers
4541#define GL_ARB_draw_buffers 1
4542#ifdef GL_GLEXT_PROTOTYPES
4543GLAPI void APIENTRY glDrawBuffersARB (GLsizei, const GLenum *);
4544#endif /* GL_GLEXT_PROTOTYPES */
4545typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs);
4546#endif
4547
4548#ifndef GL_ARB_texture_rectangle
4549#define GL_ARB_texture_rectangle 1
4550#endif
4551
4552#ifndef GL_ARB_color_buffer_float
4553#define GL_ARB_color_buffer_float 1
4554#ifdef GL_GLEXT_PROTOTYPES
4555GLAPI void APIENTRY glClampColorARB (GLenum, GLenum);
4556#endif /* GL_GLEXT_PROTOTYPES */
4557typedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp);
4558#endif
4559
4560#ifndef GL_ARB_half_float_pixel
4561#define GL_ARB_half_float_pixel 1
4562#endif
4563
4564#ifndef GL_ARB_texture_float
4565#define GL_ARB_texture_float 1
4566#endif
4567
4568#ifndef GL_ARB_pixel_buffer_object
4569#define GL_ARB_pixel_buffer_object 1
4570#endif
4571
4572#ifndef GL_EXT_abgr
4573#define GL_EXT_abgr 1
4574#endif
4575
4576#ifndef GL_EXT_blend_color
4577#define GL_EXT_blend_color 1
4578#ifdef GL_GLEXT_PROTOTYPES
4579GLAPI void APIENTRY glBlendColorEXT (GLclampf, GLclampf, GLclampf, GLclampf);
4580#endif /* GL_GLEXT_PROTOTYPES */
4581typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
4582#endif
4583
4584#ifndef GL_EXT_polygon_offset
4585#define GL_EXT_polygon_offset 1
4586#ifdef GL_GLEXT_PROTOTYPES
4587GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat, GLfloat);
4588#endif /* GL_GLEXT_PROTOTYPES */
4589typedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias);
4590#endif
4591
4592#ifndef GL_EXT_texture
4593#define GL_EXT_texture 1
4594#endif
4595
4596#ifndef GL_EXT_texture3D
4597#define GL_EXT_texture3D 1
4598#ifdef GL_GLEXT_PROTOTYPES
4599GLAPI void APIENTRY glTexImage3DEXT (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *);
4600GLAPI void APIENTRY glTexSubImage3DEXT (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
4601#endif /* GL_GLEXT_PROTOTYPES */
4602typedef void (APIENTRYP PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
4603typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
4604#endif
4605
4606#ifndef GL_SGIS_texture_filter4
4607#define GL_SGIS_texture_filter4 1
4608#ifdef GL_GLEXT_PROTOTYPES
4609GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum, GLenum, GLfloat *);
4610GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum, GLenum, GLsizei, const GLfloat *);
4611#endif /* GL_GLEXT_PROTOTYPES */
4612typedef void (APIENTRYP PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights);
4613typedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights);
4614#endif
4615
4616#ifndef GL_EXT_subtexture
4617#define GL_EXT_subtexture 1
4618#ifdef GL_GLEXT_PROTOTYPES
4619GLAPI void APIENTRY glTexSubImage1DEXT (GLenum, GLint, GLint, GLsizei, GLenum, GLenum, const GLvoid *);
4620GLAPI void APIENTRY glTexSubImage2DEXT (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
4621#endif /* GL_GLEXT_PROTOTYPES */
4622typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);
4623typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
4624#endif
4625
4626#ifndef GL_EXT_copy_texture
4627#define GL_EXT_copy_texture 1
4628#ifdef GL_GLEXT_PROTOTYPES
4629GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLint);
4630GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint);
4631GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum, GLint, GLint, GLint, GLint, GLsizei);
4632GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);
4633GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);
4634#endif /* GL_GLEXT_PROTOTYPES */
4635typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
4636typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
4637typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
4638typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
4639typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
4640#endif
4641
4642#ifndef GL_EXT_histogram
4643#define GL_EXT_histogram 1
4644#ifdef GL_GLEXT_PROTOTYPES
4645GLAPI void APIENTRY glGetHistogramEXT (GLenum, GLboolean, GLenum, GLenum, GLvoid *);
4646GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum, GLenum, GLfloat *);
4647GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum, GLenum, GLint *);
4648GLAPI void APIENTRY glGetMinmaxEXT (GLenum, GLboolean, GLenum, GLenum, GLvoid *);
4649GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum, GLenum, GLfloat *);
4650GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum, GLenum, GLint *);
4651GLAPI void APIENTRY glHistogramEXT (GLenum, GLsizei, GLenum, GLboolean);
4652GLAPI void APIENTRY glMinmaxEXT (GLenum, GLenum, GLboolean);
4653GLAPI void APIENTRY glResetHistogramEXT (GLenum);
4654GLAPI void APIENTRY glResetMinmaxEXT (GLenum);
4655#endif /* GL_GLEXT_PROTOTYPES */
4656typedef void (APIENTRYP PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
4657typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
4658typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
4659typedef void (APIENTRYP PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
4660typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
4661typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
4662typedef void (APIENTRYP PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
4663typedef void (APIENTRYP PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink);
4664typedef void (APIENTRYP PFNGLRESETHISTOGRAMEXTPROC) (GLenum target);
4665typedef void (APIENTRYP PFNGLRESETMINMAXEXTPROC) (GLenum target);
4666#endif
4667
4668#ifndef GL_EXT_convolution
4669#define GL_EXT_convolution 1
4670#ifdef GL_GLEXT_PROTOTYPES
4671GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *);
4672GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
4673GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum, GLenum, GLfloat);
4674GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum, GLenum, const GLfloat *);
4675GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum, GLenum, GLint);
4676GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum, GLenum, const GLint *);
4677GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum, GLenum, GLint, GLint, GLsizei);
4678GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum, GLenum, GLint, GLint, GLsizei, GLsizei);
4679GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum, GLenum, GLenum, GLvoid *);
4680GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum, GLenum, GLfloat *);
4681GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum, GLenum, GLint *);
4682GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum, GLenum, GLenum, GLvoid *, GLvoid *, GLvoid *);
4683GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *, const GLvoid *);
4684#endif /* GL_GLEXT_PROTOTYPES */
4685typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image);
4686typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image);
4687typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params);
4688typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params);
4689typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params);
4690typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);
4691typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
4692typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
4693typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image);
4694typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
4695typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
4696typedef void (APIENTRYP PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span);
4697typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column);
4698#endif
4699
4700#ifndef GL_SGI_color_matrix
4701#define GL_SGI_color_matrix 1
4702#endif
4703
4704#ifndef GL_SGI_color_table
4705#define GL_SGI_color_table 1
4706#ifdef GL_GLEXT_PROTOTYPES
4707GLAPI void APIENTRY glColorTableSGI (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *);
4708GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum, GLenum, const GLfloat *);
4709GLAPI void APIENTRY glColorTableParameterivSGI (GLenum, GLenum, const GLint *);
4710GLAPI void APIENTRY glCopyColorTableSGI (GLenum, GLenum, GLint, GLint, GLsizei);
4711GLAPI void APIENTRY glGetColorTableSGI (GLenum, GLenum, GLenum, GLvoid *);
4712GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum, GLenum, GLfloat *);
4713GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum, GLenum, GLint *);
4714#endif /* GL_GLEXT_PROTOTYPES */
4715typedef void (APIENTRYP PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);
4716typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params);
4717typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params);
4718typedef void (APIENTRYP PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
4719typedef void (APIENTRYP PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table);
4720typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params);
4721typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params);
4722#endif
4723
4724#ifndef GL_SGIX_pixel_texture
4725#define GL_SGIX_pixel_texture 1
4726#ifdef GL_GLEXT_PROTOTYPES
4727GLAPI void APIENTRY glPixelTexGenSGIX (GLenum);
4728#endif /* GL_GLEXT_PROTOTYPES */
4729typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode);
4730#endif
4731
4732#ifndef GL_SGIS_pixel_texture
4733#define GL_SGIS_pixel_texture 1
4734#ifdef GL_GLEXT_PROTOTYPES
4735GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum, GLint);
4736GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum, const GLint *);
4737GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum, GLfloat);
4738GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum, const GLfloat *);
4739GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum, GLint *);
4740GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum, GLfloat *);
4741#endif /* GL_GLEXT_PROTOTYPES */
4742typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param);
4743typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params);
4744typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param);
4745typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params);
4746typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params);
4747typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params);
4748#endif
4749
4750#ifndef GL_SGIS_texture4D
4751#define GL_SGIS_texture4D 1
4752#ifdef GL_GLEXT_PROTOTYPES
4753GLAPI void APIENTRY glTexImage4DSGIS (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *);
4754GLAPI void APIENTRY glTexSubImage4DSGIS (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
4755#endif /* GL_GLEXT_PROTOTYPES */
4756typedef void (APIENTRYP PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
4757typedef void (APIENTRYP PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid *pixels);
4758#endif
4759
4760#ifndef GL_SGI_texture_color_table
4761#define GL_SGI_texture_color_table 1
4762#endif
4763
4764#ifndef GL_EXT_cmyka
4765#define GL_EXT_cmyka 1
4766#endif
4767
4768#ifndef GL_EXT_texture_object
4769#define GL_EXT_texture_object 1
4770#ifdef GL_GLEXT_PROTOTYPES
4771GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei, const GLuint *, GLboolean *);
4772GLAPI void APIENTRY glBindTextureEXT (GLenum, GLuint);
4773GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei, const GLuint *);
4774GLAPI void APIENTRY glGenTexturesEXT (GLsizei, GLuint *);
4775GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint);
4776GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei, const GLuint *, const GLclampf *);
4777#endif /* GL_GLEXT_PROTOTYPES */
4778typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences);
4779typedef void (APIENTRYP PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture);
4780typedef void (APIENTRYP PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures);
4781typedef void (APIENTRYP PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures);
4782typedef GLboolean (APIENTRYP PFNGLISTEXTUREEXTPROC) (GLuint texture);
4783typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities);
4784#endif
4785
4786#ifndef GL_SGIS_detail_texture
4787#define GL_SGIS_detail_texture 1
4788#ifdef GL_GLEXT_PROTOTYPES
4789GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum, GLsizei, const GLfloat *);
4790GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum, GLfloat *);
4791#endif /* GL_GLEXT_PROTOTYPES */
4792typedef void (APIENTRYP PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points);
4793typedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points);
4794#endif
4795
4796#ifndef GL_SGIS_sharpen_texture
4797#define GL_SGIS_sharpen_texture 1
4798#ifdef GL_GLEXT_PROTOTYPES
4799GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum, GLsizei, const GLfloat *);
4800GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum, GLfloat *);
4801#endif /* GL_GLEXT_PROTOTYPES */
4802typedef void (APIENTRYP PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points);
4803typedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points);
4804#endif
4805
4806#ifndef GL_EXT_packed_pixels
4807#define GL_EXT_packed_pixels 1
4808#endif
4809
4810#ifndef GL_SGIS_texture_lod
4811#define GL_SGIS_texture_lod 1
4812#endif
4813
4814#ifndef GL_SGIS_multisample
4815#define GL_SGIS_multisample 1
4816#ifdef GL_GLEXT_PROTOTYPES
4817GLAPI void APIENTRY glSampleMaskSGIS (GLclampf, GLboolean);
4818GLAPI void APIENTRY glSamplePatternSGIS (GLenum);
4819#endif /* GL_GLEXT_PROTOTYPES */
4820typedef void (APIENTRYP PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert);
4821typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern);
4822#endif
4823
4824#ifndef GL_EXT_rescale_normal
4825#define GL_EXT_rescale_normal 1
4826#endif
4827
4828#ifndef GL_EXT_vertex_array
4829#define GL_EXT_vertex_array 1
4830#ifdef GL_GLEXT_PROTOTYPES
4831GLAPI void APIENTRY glArrayElementEXT (GLint);
4832GLAPI void APIENTRY glColorPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *);
4833GLAPI void APIENTRY glDrawArraysEXT (GLenum, GLint, GLsizei);
4834GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei, GLsizei, const GLboolean *);
4835GLAPI void APIENTRY glGetPointervEXT (GLenum, GLvoid* *);
4836GLAPI void APIENTRY glIndexPointerEXT (GLenum, GLsizei, GLsizei, const GLvoid *);
4837GLAPI void APIENTRY glNormalPointerEXT (GLenum, GLsizei, GLsizei, const GLvoid *);
4838GLAPI void APIENTRY glTexCoordPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *);
4839GLAPI void APIENTRY glVertexPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *);
4840#endif /* GL_GLEXT_PROTOTYPES */
4841typedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC) (GLint i);
4842typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
4843typedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count);
4844typedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer);
4845typedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC) (GLenum pname, GLvoid* *params);
4846typedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
4847typedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
4848typedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
4849typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
4850#endif
4851
4852#ifndef GL_EXT_misc_attribute
4853#define GL_EXT_misc_attribute 1
4854#endif
4855
4856#ifndef GL_SGIS_generate_mipmap
4857#define GL_SGIS_generate_mipmap 1
4858#endif
4859
4860#ifndef GL_SGIX_clipmap
4861#define GL_SGIX_clipmap 1
4862#endif
4863
4864#ifndef GL_SGIX_shadow
4865#define GL_SGIX_shadow 1
4866#endif
4867
4868#ifndef GL_SGIS_texture_edge_clamp
4869#define GL_SGIS_texture_edge_clamp 1
4870#endif
4871
4872#ifndef GL_SGIS_texture_border_clamp
4873#define GL_SGIS_texture_border_clamp 1
4874#endif
4875
4876#ifndef GL_EXT_blend_minmax
4877#define GL_EXT_blend_minmax 1
4878#ifdef GL_GLEXT_PROTOTYPES
4879GLAPI void APIENTRY glBlendEquationEXT (GLenum);
4880#endif /* GL_GLEXT_PROTOTYPES */
4881typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode);
4882#endif
4883
4884#ifndef GL_EXT_blend_subtract
4885#define GL_EXT_blend_subtract 1
4886#endif
4887
4888#ifndef GL_EXT_blend_logic_op
4889#define GL_EXT_blend_logic_op 1
4890#endif
4891
4892#ifndef GL_SGIX_interlace
4893#define GL_SGIX_interlace 1
4894#endif
4895
4896#ifndef GL_SGIX_pixel_tiles
4897#define GL_SGIX_pixel_tiles 1
4898#endif
4899
4900#ifndef GL_SGIX_texture_select
4901#define GL_SGIX_texture_select 1
4902#endif
4903
4904#ifndef GL_SGIX_sprite
4905#define GL_SGIX_sprite 1
4906#ifdef GL_GLEXT_PROTOTYPES
4907GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum, GLfloat);
4908GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum, const GLfloat *);
4909GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum, GLint);
4910GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum, const GLint *);
4911#endif /* GL_GLEXT_PROTOTYPES */
4912typedef void (APIENTRYP PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param);
4913typedef void (APIENTRYP PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params);
4914typedef void (APIENTRYP PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param);
4915typedef void (APIENTRYP PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params);
4916#endif
4917
4918#ifndef GL_SGIX_texture_multi_buffer
4919#define GL_SGIX_texture_multi_buffer 1
4920#endif
4921
4922#ifndef GL_EXT_point_parameters
4923#define GL_EXT_point_parameters 1
4924#ifdef GL_GLEXT_PROTOTYPES
4925GLAPI void APIENTRY glPointParameterfEXT (GLenum, GLfloat);
4926GLAPI void APIENTRY glPointParameterfvEXT (GLenum, const GLfloat *);
4927#endif /* GL_GLEXT_PROTOTYPES */
4928typedef void (APIENTRYP PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param);
4929typedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params);
4930#endif
4931
4932#ifndef GL_SGIS_point_parameters
4933#define GL_SGIS_point_parameters 1
4934#ifdef GL_GLEXT_PROTOTYPES
4935GLAPI void APIENTRY glPointParameterfSGIS (GLenum, GLfloat);
4936GLAPI void APIENTRY glPointParameterfvSGIS (GLenum, const GLfloat *);
4937#endif /* GL_GLEXT_PROTOTYPES */
4938typedef void (APIENTRYP PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param);
4939typedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params);
4940#endif
4941
4942#ifndef GL_SGIX_instruments
4943#define GL_SGIX_instruments 1
4944#ifdef GL_GLEXT_PROTOTYPES
4945GLAPI GLint APIENTRY glGetInstrumentsSGIX (void);
4946GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei, GLint *);
4947GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *);
4948GLAPI void APIENTRY glReadInstrumentsSGIX (GLint);
4949GLAPI void APIENTRY glStartInstrumentsSGIX (void);
4950GLAPI void APIENTRY glStopInstrumentsSGIX (GLint);
4951#endif /* GL_GLEXT_PROTOTYPES */
4952typedef GLint (APIENTRYP PFNGLGETINSTRUMENTSSGIXPROC) (void);
4953typedef void (APIENTRYP PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer);
4954typedef GLint (APIENTRYP PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p);
4955typedef void (APIENTRYP PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker);
4956typedef void (APIENTRYP PFNGLSTARTINSTRUMENTSSGIXPROC) (void);
4957typedef void (APIENTRYP PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker);
4958#endif
4959
4960#ifndef GL_SGIX_texture_scale_bias
4961#define GL_SGIX_texture_scale_bias 1
4962#endif
4963
4964#ifndef GL_SGIX_framezoom
4965#define GL_SGIX_framezoom 1
4966#ifdef GL_GLEXT_PROTOTYPES
4967GLAPI void APIENTRY glFrameZoomSGIX (GLint);
4968#endif /* GL_GLEXT_PROTOTYPES */
4969typedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC) (GLint factor);
4970#endif
4971
4972#ifndef GL_SGIX_tag_sample_buffer
4973#define GL_SGIX_tag_sample_buffer 1
4974#ifdef GL_GLEXT_PROTOTYPES
4975GLAPI void APIENTRY glTagSampleBufferSGIX (void);
4976#endif /* GL_GLEXT_PROTOTYPES */
4977typedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC) (void);
4978#endif
4979
4980#ifndef GL_SGIX_polynomial_ffd
4981#define GL_SGIX_polynomial_ffd 1
4982#ifdef GL_GLEXT_PROTOTYPES
4983GLAPI void APIENTRY glDeformationMap3dSGIX (GLenum, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, const GLdouble *);
4984GLAPI void APIENTRY glDeformationMap3fSGIX (GLenum, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, const GLfloat *);
4985GLAPI void APIENTRY glDeformSGIX (GLbitfield);
4986GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield);
4987#endif /* GL_GLEXT_PROTOTYPES */
4988typedef void (APIENTRYP PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points);
4989typedef void (APIENTRYP PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points);
4990typedef void (APIENTRYP PFNGLDEFORMSGIXPROC) (GLbitfield mask);
4991typedef void (APIENTRYP PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask);
4992#endif
4993
4994#ifndef GL_SGIX_reference_plane
4995#define GL_SGIX_reference_plane 1
4996#ifdef GL_GLEXT_PROTOTYPES
4997GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *);
4998#endif /* GL_GLEXT_PROTOTYPES */
4999typedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation);
5000#endif
5001
5002#ifndef GL_SGIX_flush_raster
5003#define GL_SGIX_flush_raster 1
5004#ifdef GL_GLEXT_PROTOTYPES
5005GLAPI void APIENTRY glFlushRasterSGIX (void);
5006#endif /* GL_GLEXT_PROTOTYPES */
5007typedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC) (void);
5008#endif
5009
5010#ifndef GL_SGIX_depth_texture
5011#define GL_SGIX_depth_texture 1
5012#endif
5013
5014#ifndef GL_SGIS_fog_function
5015#define GL_SGIS_fog_function 1
5016#ifdef GL_GLEXT_PROTOTYPES
5017GLAPI void APIENTRY glFogFuncSGIS (GLsizei, const GLfloat *);
5018GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *);
5019#endif /* GL_GLEXT_PROTOTYPES */
5020typedef void (APIENTRYP PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points);
5021typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points);
5022#endif
5023
5024#ifndef GL_SGIX_fog_offset
5025#define GL_SGIX_fog_offset 1
5026#endif
5027
5028#ifndef GL_HP_image_transform
5029#define GL_HP_image_transform 1
5030#ifdef GL_GLEXT_PROTOTYPES
5031GLAPI void APIENTRY glImageTransformParameteriHP (GLenum, GLenum, GLint);
5032GLAPI void APIENTRY glImageTransformParameterfHP (GLenum, GLenum, GLfloat);
5033GLAPI void APIENTRY glImageTransformParameterivHP (GLenum, GLenum, const GLint *);
5034GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum, GLenum, const GLfloat *);
5035GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum, GLenum, GLint *);
5036GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum, GLenum, GLfloat *);
5037#endif /* GL_GLEXT_PROTOTYPES */
5038typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param);
5039typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param);
5040typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params);
5041typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params);
5042typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params);
5043typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params);
5044#endif
5045
5046#ifndef GL_HP_convolution_border_modes
5047#define GL_HP_convolution_border_modes 1
5048#endif
5049
5050#ifndef GL_SGIX_texture_add_env
5051#define GL_SGIX_texture_add_env 1
5052#endif
5053
5054#ifndef GL_EXT_color_subtable
5055#define GL_EXT_color_subtable 1
5056#ifdef GL_GLEXT_PROTOTYPES
5057GLAPI void APIENTRY glColorSubTableEXT (GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
5058GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum, GLsizei, GLint, GLint, GLsizei);
5059#endif /* GL_GLEXT_PROTOTYPES */
5060typedef void (APIENTRYP PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data);
5061typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
5062#endif
5063
5064#ifndef GL_PGI_vertex_hints
5065#define GL_PGI_vertex_hints 1
5066#endif
5067
5068#ifndef GL_PGI_misc_hints
5069#define GL_PGI_misc_hints 1
5070#ifdef GL_GLEXT_PROTOTYPES
5071GLAPI void APIENTRY glHintPGI (GLenum, GLint);
5072#endif /* GL_GLEXT_PROTOTYPES */
5073typedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode);
5074#endif
5075
5076#ifndef GL_EXT_paletted_texture
5077#define GL_EXT_paletted_texture 1
5078#ifdef GL_GLEXT_PROTOTYPES
5079GLAPI void APIENTRY glColorTableEXT (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *);
5080GLAPI void APIENTRY glGetColorTableEXT (GLenum, GLenum, GLenum, GLvoid *);
5081GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum, GLenum, GLint *);
5082GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum, GLenum, GLfloat *);
5083#endif /* GL_GLEXT_PROTOTYPES */
5084typedef void (APIENTRYP PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);
5085typedef void (APIENTRYP PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *data);
5086typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
5087typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
5088#endif
5089
5090#ifndef GL_EXT_clip_volume_hint
5091#define GL_EXT_clip_volume_hint 1
5092#endif
5093
5094#ifndef GL_SGIX_list_priority
5095#define GL_SGIX_list_priority 1
5096#ifdef GL_GLEXT_PROTOTYPES
5097GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint, GLenum, GLfloat *);
5098GLAPI void APIENTRY glGetListParameterivSGIX (GLuint, GLenum, GLint *);
5099GLAPI void APIENTRY glListParameterfSGIX (GLuint, GLenum, GLfloat);
5100GLAPI void APIENTRY glListParameterfvSGIX (GLuint, GLenum, const GLfloat *);
5101GLAPI void APIENTRY glListParameteriSGIX (GLuint, GLenum, GLint);
5102GLAPI void APIENTRY glListParameterivSGIX (GLuint, GLenum, const GLint *);
5103#endif /* GL_GLEXT_PROTOTYPES */
5104typedef void (APIENTRYP PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params);
5105typedef void (APIENTRYP PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params);
5106typedef void (APIENTRYP PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param);
5107typedef void (APIENTRYP PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params);
5108typedef void (APIENTRYP PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param);
5109typedef void (APIENTRYP PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params);
5110#endif
5111
5112#ifndef GL_SGIX_ir_instrument1
5113#define GL_SGIX_ir_instrument1 1
5114#endif
5115
5116#ifndef GL_SGIX_calligraphic_fragment
5117#define GL_SGIX_calligraphic_fragment 1
5118#endif
5119
5120#ifndef GL_SGIX_texture_lod_bias
5121#define GL_SGIX_texture_lod_bias 1
5122#endif
5123
5124#ifndef GL_SGIX_shadow_ambient
5125#define GL_SGIX_shadow_ambient 1
5126#endif
5127
5128#ifndef GL_EXT_index_texture
5129#define GL_EXT_index_texture 1
5130#endif
5131
5132#ifndef GL_EXT_index_material
5133#define GL_EXT_index_material 1
5134#ifdef GL_GLEXT_PROTOTYPES
5135GLAPI void APIENTRY glIndexMaterialEXT (GLenum, GLenum);
5136#endif /* GL_GLEXT_PROTOTYPES */
5137typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode);
5138#endif
5139
5140#ifndef GL_EXT_index_func
5141#define GL_EXT_index_func 1
5142#ifdef GL_GLEXT_PROTOTYPES
5143GLAPI void APIENTRY glIndexFuncEXT (GLenum, GLclampf);
5144#endif /* GL_GLEXT_PROTOTYPES */
5145typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref);
5146#endif
5147
5148#ifndef GL_EXT_index_array_formats
5149#define GL_EXT_index_array_formats 1
5150#endif
5151
5152#ifndef GL_EXT_compiled_vertex_array
5153#define GL_EXT_compiled_vertex_array 1
5154#ifdef GL_GLEXT_PROTOTYPES
5155GLAPI void APIENTRY glLockArraysEXT (GLint, GLsizei);
5156GLAPI void APIENTRY glUnlockArraysEXT (void);
5157#endif /* GL_GLEXT_PROTOTYPES */
5158typedef void (APIENTRYP PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count);
5159typedef void (APIENTRYP PFNGLUNLOCKARRAYSEXTPROC) (void);
5160#endif
5161
5162#ifndef GL_EXT_cull_vertex
5163#define GL_EXT_cull_vertex 1
5164#ifdef GL_GLEXT_PROTOTYPES
5165GLAPI void APIENTRY glCullParameterdvEXT (GLenum, GLdouble *);
5166GLAPI void APIENTRY glCullParameterfvEXT (GLenum, GLfloat *);
5167#endif /* GL_GLEXT_PROTOTYPES */
5168typedef void (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params);
5169typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params);
5170#endif
5171
5172#ifndef GL_SGIX_ycrcb
5173#define GL_SGIX_ycrcb 1
5174#endif
5175
5176#ifndef GL_SGIX_fragment_lighting
5177#define GL_SGIX_fragment_lighting 1
5178#ifdef GL_GLEXT_PROTOTYPES
5179GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum, GLenum);
5180GLAPI void APIENTRY glFragmentLightfSGIX (GLenum, GLenum, GLfloat);
5181GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum, GLenum, const GLfloat *);
5182GLAPI void APIENTRY glFragmentLightiSGIX (GLenum, GLenum, GLint);
5183GLAPI void APIENTRY glFragmentLightivSGIX (GLenum, GLenum, const GLint *);
5184GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum, GLfloat);
5185GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum, const GLfloat *);
5186GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum, GLint);
5187GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum, const GLint *);
5188GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum, GLenum, GLfloat);
5189GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum, GLenum, const GLfloat *);
5190GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum, GLenum, GLint);
5191GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum, GLenum, const GLint *);
5192GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum, GLenum, GLfloat *);
5193GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum, GLenum, GLint *);
5194GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum, GLenum, GLfloat *);
5195GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum, GLenum, GLint *);
5196GLAPI void APIENTRY glLightEnviSGIX (GLenum, GLint);
5197#endif /* GL_GLEXT_PROTOTYPES */
5198typedef void (APIENTRYP PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode);
5199typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param);
5200typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params);
5201typedef void (APIENTRYP PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param);
5202typedef void (APIENTRYP PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params);
5203typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param);
5204typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params);
5205typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param);
5206typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params);
5207typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param);
5208typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params);
5209typedef void (APIENTRYP PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param);
5210typedef void (APIENTRYP PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params);
5211typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params);
5212typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params);
5213typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params);
5214typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params);
5215typedef void (APIENTRYP PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param);
5216#endif
5217
5218#ifndef GL_IBM_rasterpos_clip
5219#define GL_IBM_rasterpos_clip 1
5220#endif
5221
5222#ifndef GL_HP_texture_lighting
5223#define GL_HP_texture_lighting 1
5224#endif
5225
5226#ifndef GL_EXT_draw_range_elements
5227#define GL_EXT_draw_range_elements 1
5228#ifdef GL_GLEXT_PROTOTYPES
5229GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *);
5230#endif /* GL_GLEXT_PROTOTYPES */
5231typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
5232#endif
5233
5234#ifndef GL_WIN_phong_shading
5235#define GL_WIN_phong_shading 1
5236#endif
5237
5238#ifndef GL_WIN_specular_fog
5239#define GL_WIN_specular_fog 1
5240#endif
5241
5242#ifndef GL_EXT_light_texture
5243#define GL_EXT_light_texture 1
5244#ifdef GL_GLEXT_PROTOTYPES
5245GLAPI void APIENTRY glApplyTextureEXT (GLenum);
5246GLAPI void APIENTRY glTextureLightEXT (GLenum);
5247GLAPI void APIENTRY glTextureMaterialEXT (GLenum, GLenum);
5248#endif /* GL_GLEXT_PROTOTYPES */
5249typedef void (APIENTRYP PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode);
5250typedef void (APIENTRYP PFNGLTEXTURELIGHTEXTPROC) (GLenum pname);
5251typedef void (APIENTRYP PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode);
5252#endif
5253
5254#ifndef GL_SGIX_blend_alpha_minmax
5255#define GL_SGIX_blend_alpha_minmax 1
5256#endif
5257
5258#ifndef GL_EXT_bgra
5259#define GL_EXT_bgra 1
5260#endif
5261
5262#ifndef GL_SGIX_async
5263#define GL_SGIX_async 1
5264#ifdef GL_GLEXT_PROTOTYPES
5265GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint);
5266GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *);
5267GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *);
5268GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei);
5269GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint, GLsizei);
5270GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint);
5271#endif /* GL_GLEXT_PROTOTYPES */
5272typedef void (APIENTRYP PFNGLASYNCMARKERSGIXPROC) (GLuint marker);
5273typedef GLint (APIENTRYP PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp);
5274typedef GLint (APIENTRYP PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp);
5275typedef GLuint (APIENTRYP PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range);
5276typedef void (APIENTRYP PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range);
5277typedef GLboolean (APIENTRYP PFNGLISASYNCMARKERSGIXPROC) (GLuint marker);
5278#endif
5279
5280#ifndef GL_SGIX_async_pixel
5281#define GL_SGIX_async_pixel 1
5282#endif
5283
5284#ifndef GL_SGIX_async_histogram
5285#define GL_SGIX_async_histogram 1
5286#endif
5287
5288#ifndef GL_INTEL_parallel_arrays
5289#define GL_INTEL_parallel_arrays 1
5290#ifdef GL_GLEXT_PROTOTYPES
5291GLAPI void APIENTRY glVertexPointervINTEL (GLint, GLenum, const GLvoid* *);
5292GLAPI void APIENTRY glNormalPointervINTEL (GLenum, const GLvoid* *);
5293GLAPI void APIENTRY glColorPointervINTEL (GLint, GLenum, const GLvoid* *);
5294GLAPI void APIENTRY glTexCoordPointervINTEL (GLint, GLenum, const GLvoid* *);
5295#endif /* GL_GLEXT_PROTOTYPES */
5296typedef void (APIENTRYP PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer);
5297typedef void (APIENTRYP PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const GLvoid* *pointer);
5298typedef void (APIENTRYP PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer);
5299typedef void (APIENTRYP PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer);
5300#endif
5301
5302#ifndef GL_HP_occlusion_test
5303#define GL_HP_occlusion_test 1
5304#endif
5305
5306#ifndef GL_EXT_pixel_transform
5307#define GL_EXT_pixel_transform 1
5308#ifdef GL_GLEXT_PROTOTYPES
5309GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum, GLenum, GLint);
5310GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum, GLenum, GLfloat);
5311GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum, GLenum, const GLint *);
5312GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum, GLenum, const GLfloat *);
5313#endif /* GL_GLEXT_PROTOTYPES */
5314typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param);
5315typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param);
5316typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);
5317typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params);
5318#endif
5319
5320#ifndef GL_EXT_pixel_transform_color_table
5321#define GL_EXT_pixel_transform_color_table 1
5322#endif
5323
5324#ifndef GL_EXT_shared_texture_palette
5325#define GL_EXT_shared_texture_palette 1
5326#endif
5327
5328#ifndef GL_EXT_separate_specular_color
5329#define GL_EXT_separate_specular_color 1
5330#endif
5331
5332#ifndef GL_EXT_secondary_color
5333#define GL_EXT_secondary_color 1
5334#ifdef GL_GLEXT_PROTOTYPES
5335GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte, GLbyte, GLbyte);
5336GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *);
5337GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble, GLdouble, GLdouble);
5338GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *);
5339GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat, GLfloat, GLfloat);
5340GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *);
5341GLAPI void APIENTRY glSecondaryColor3iEXT (GLint, GLint, GLint);
5342GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *);
5343GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort, GLshort, GLshort);
5344GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *);
5345GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte, GLubyte, GLubyte);
5346GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *);
5347GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint, GLuint, GLuint);
5348GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *);
5349GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort, GLushort, GLushort);
5350GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *);
5351GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint, GLenum, GLsizei, const GLvoid *);
5352#endif /* GL_GLEXT_PROTOTYPES */
5353typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue);
5354typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v);
5355typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue);
5356typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v);
5357typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue);
5358typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v);
5359typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue);
5360typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v);
5361typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue);
5362typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v);
5363typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue);
5364typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v);
5365typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue);
5366typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v);
5367typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue);
5368typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v);
5369typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
5370#endif
5371
5372#ifndef GL_EXT_texture_perturb_normal
5373#define GL_EXT_texture_perturb_normal 1
5374#ifdef GL_GLEXT_PROTOTYPES
5375GLAPI void APIENTRY glTextureNormalEXT (GLenum);
5376#endif /* GL_GLEXT_PROTOTYPES */
5377typedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode);
5378#endif
5379
5380#ifndef GL_EXT_multi_draw_arrays
5381#define GL_EXT_multi_draw_arrays 1
5382#ifdef GL_GLEXT_PROTOTYPES
5383GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum, GLint *, GLsizei *, GLsizei);
5384GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei);
5385#endif /* GL_GLEXT_PROTOTYPES */
5386typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount);
5387typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount);
5388#endif
5389
5390#ifndef GL_EXT_fog_coord
5391#define GL_EXT_fog_coord 1
5392#ifdef GL_GLEXT_PROTOTYPES
5393GLAPI void APIENTRY glFogCoordfEXT (GLfloat);
5394GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *);
5395GLAPI void APIENTRY glFogCoorddEXT (GLdouble);
5396GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *);
5397GLAPI void APIENTRY glFogCoordPointerEXT (GLenum, GLsizei, const GLvoid *);
5398#endif /* GL_GLEXT_PROTOTYPES */
5399typedef void (APIENTRYP PFNGLFOGCOORDFEXTPROC) (GLfloat coord);
5400typedef void (APIENTRYP PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord);
5401typedef void (APIENTRYP PFNGLFOGCOORDDEXTPROC) (GLdouble coord);
5402typedef void (APIENTRYP PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord);
5403typedef void (APIENTRYP PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);
5404#endif
5405
5406#ifndef GL_REND_screen_coordinates
5407#define GL_REND_screen_coordinates 1
5408#endif
5409
5410#ifndef GL_EXT_coordinate_frame
5411#define GL_EXT_coordinate_frame 1
5412#ifdef GL_GLEXT_PROTOTYPES
5413GLAPI void APIENTRY glTangent3bEXT (GLbyte, GLbyte, GLbyte);
5414GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *);
5415GLAPI void APIENTRY glTangent3dEXT (GLdouble, GLdouble, GLdouble);
5416GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *);
5417GLAPI void APIENTRY glTangent3fEXT (GLfloat, GLfloat, GLfloat);
5418GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *);
5419GLAPI void APIENTRY glTangent3iEXT (GLint, GLint, GLint);
5420GLAPI void APIENTRY glTangent3ivEXT (const GLint *);
5421GLAPI void APIENTRY glTangent3sEXT (GLshort, GLshort, GLshort);
5422GLAPI void APIENTRY glTangent3svEXT (const GLshort *);
5423GLAPI void APIENTRY glBinormal3bEXT (GLbyte, GLbyte, GLbyte);
5424GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *);
5425GLAPI void APIENTRY glBinormal3dEXT (GLdouble, GLdouble, GLdouble);
5426GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *);
5427GLAPI void APIENTRY glBinormal3fEXT (GLfloat, GLfloat, GLfloat);
5428GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *);
5429GLAPI void APIENTRY glBinormal3iEXT (GLint, GLint, GLint);
5430GLAPI void APIENTRY glBinormal3ivEXT (const GLint *);
5431GLAPI void APIENTRY glBinormal3sEXT (GLshort, GLshort, GLshort);
5432GLAPI void APIENTRY glBinormal3svEXT (const GLshort *);
5433GLAPI void APIENTRY glTangentPointerEXT (GLenum, GLsizei, const GLvoid *);
5434GLAPI void APIENTRY glBinormalPointerEXT (GLenum, GLsizei, const GLvoid *);
5435#endif /* GL_GLEXT_PROTOTYPES */
5436typedef void (APIENTRYP PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz);
5437typedef void (APIENTRYP PFNGLTANGENT3BVEXTPROC) (const GLbyte *v);
5438typedef void (APIENTRYP PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz);
5439typedef void (APIENTRYP PFNGLTANGENT3DVEXTPROC) (const GLdouble *v);
5440typedef void (APIENTRYP PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz);
5441typedef void (APIENTRYP PFNGLTANGENT3FVEXTPROC) (const GLfloat *v);
5442typedef void (APIENTRYP PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz);
5443typedef void (APIENTRYP PFNGLTANGENT3IVEXTPROC) (const GLint *v);
5444typedef void (APIENTRYP PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz);
5445typedef void (APIENTRYP PFNGLTANGENT3SVEXTPROC) (const GLshort *v);
5446typedef void (APIENTRYP PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz);
5447typedef void (APIENTRYP PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v);
5448typedef void (APIENTRYP PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz);
5449typedef void (APIENTRYP PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v);
5450typedef void (APIENTRYP PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz);
5451typedef void (APIENTRYP PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v);
5452typedef void (APIENTRYP PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz);
5453typedef void (APIENTRYP PFNGLBINORMAL3IVEXTPROC) (const GLint *v);
5454typedef void (APIENTRYP PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz);
5455typedef void (APIENTRYP PFNGLBINORMAL3SVEXTPROC) (const GLshort *v);
5456typedef void (APIENTRYP PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);
5457typedef void (APIENTRYP PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);
5458#endif
5459
5460#ifndef GL_EXT_texture_env_combine
5461#define GL_EXT_texture_env_combine 1
5462#endif
5463
5464#ifndef GL_APPLE_specular_vector
5465#define GL_APPLE_specular_vector 1
5466#endif
5467
5468#ifndef GL_APPLE_transform_hint
5469#define GL_APPLE_transform_hint 1
5470#endif
5471
5472#ifndef GL_SGIX_fog_scale
5473#define GL_SGIX_fog_scale 1
5474#endif
5475
5476#ifndef GL_SUNX_constant_data
5477#define GL_SUNX_constant_data 1
5478#ifdef GL_GLEXT_PROTOTYPES
5479GLAPI void APIENTRY glFinishTextureSUNX (void);
5480#endif /* GL_GLEXT_PROTOTYPES */
5481typedef void (APIENTRYP PFNGLFINISHTEXTURESUNXPROC) (void);
5482#endif
5483
5484#ifndef GL_SUN_global_alpha
5485#define GL_SUN_global_alpha 1
5486#ifdef GL_GLEXT_PROTOTYPES
5487GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte);
5488GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort);
5489GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint);
5490GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat);
5491GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble);
5492GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte);
5493GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort);
5494GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint);
5495#endif /* GL_GLEXT_PROTOTYPES */
5496typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor);
5497typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor);
5498typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor);
5499typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor);
5500typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor);
5501typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor);
5502typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor);
5503typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor);
5504#endif
5505
5506#ifndef GL_SUN_triangle_list
5507#define GL_SUN_triangle_list 1
5508#ifdef GL_GLEXT_PROTOTYPES
5509GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint);
5510GLAPI void APIENTRY glReplacementCodeusSUN (GLushort);
5511GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte);
5512GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *);
5513GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *);
5514GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *);
5515GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum, GLsizei, const GLvoid* *);
5516#endif /* GL_GLEXT_PROTOTYPES */
5517typedef void (APIENTRYP PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code);
5518typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code);
5519typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code);
5520typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code);
5521typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code);
5522typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code);
5523typedef void (APIENTRYP PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const GLvoid* *pointer);
5524#endif
5525
5526#ifndef GL_SUN_vertex
5527#define GL_SUN_vertex 1
5528#ifdef GL_GLEXT_PROTOTYPES
5529GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat);
5530GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *, const GLfloat *);
5531GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat);
5532GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *, const GLfloat *);
5533GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
5534GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *, const GLfloat *);
5535GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
5536GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *);
5537GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
5538GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *);
5539GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
5540GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *, const GLfloat *);
5541GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
5542GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *, const GLfloat *);
5543GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat, GLfloat, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat);
5544GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *, const GLubyte *, const GLfloat *);
5545GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
5546GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *);
5547GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
5548GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *);
5549GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
5550GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *);
5551GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
5552GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *);
5553GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat);
5554GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLuint *, const GLfloat *);
5555GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLuint, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat);
5556GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint *, const GLubyte *, const GLfloat *);
5557GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
5558GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *);
5559GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
5560GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *);
5561GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
5562GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *, const GLfloat *);
5563GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
5564GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *);
5565GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
5566GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *, const GLfloat *);
5567GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
5568GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *);
5569#endif /* GL_GLEXT_PROTOTYPES */
5570typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y);
5571typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v);
5572typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
5573typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v);
5574typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
5575typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v);
5576typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
5577typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v);
5578typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
5579typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v);
5580typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);
5581typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v);
5582typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
5583typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v);
5584typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
5585typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v);
5586typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
5587typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v);
5588typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
5589typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v);
5590typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
5591typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
5592typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
5593typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
5594typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z);
5595typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *v);
5596typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
5597typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint *rc, const GLubyte *c, const GLfloat *v);
5598typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
5599typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *v);
5600typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
5601typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *n, const GLfloat *v);
5602typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
5603typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
5604typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);
5605typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *v);
5606typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
5607typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v);
5608typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
5609typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
5610#endif
5611
5612#ifndef GL_EXT_blend_func_separate
5613#define GL_EXT_blend_func_separate 1
5614#ifdef GL_GLEXT_PROTOTYPES
5615GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum, GLenum, GLenum, GLenum);
5616#endif /* GL_GLEXT_PROTOTYPES */
5617typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
5618#endif
5619
5620#ifndef GL_INGR_blend_func_separate
5621#define GL_INGR_blend_func_separate 1
5622#ifdef GL_GLEXT_PROTOTYPES
5623GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum, GLenum, GLenum, GLenum);
5624#endif /* GL_GLEXT_PROTOTYPES */
5625typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
5626#endif
5627
5628#ifndef GL_INGR_color_clamp
5629#define GL_INGR_color_clamp 1
5630#endif
5631
5632#ifndef GL_INGR_interlace_read
5633#define GL_INGR_interlace_read 1
5634#endif
5635
5636#ifndef GL_EXT_stencil_wrap
5637#define GL_EXT_stencil_wrap 1
5638#endif
5639
5640#ifndef GL_EXT_422_pixels
5641#define GL_EXT_422_pixels 1
5642#endif
5643
5644#ifndef GL_NV_texgen_reflection
5645#define GL_NV_texgen_reflection 1
5646#endif
5647
5648#ifndef GL_SUN_convolution_border_modes
5649#define GL_SUN_convolution_border_modes 1
5650#endif
5651
5652#ifndef GL_EXT_texture_env_add
5653#define GL_EXT_texture_env_add 1
5654#endif
5655
5656#ifndef GL_EXT_texture_lod_bias
5657#define GL_EXT_texture_lod_bias 1
5658#endif
5659
5660#ifndef GL_EXT_texture_filter_anisotropic
5661#define GL_EXT_texture_filter_anisotropic 1
5662#endif
5663
5664#ifndef GL_EXT_vertex_weighting
5665#define GL_EXT_vertex_weighting 1
5666#ifdef GL_GLEXT_PROTOTYPES
5667GLAPI void APIENTRY glVertexWeightfEXT (GLfloat);
5668GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *);
5669GLAPI void APIENTRY glVertexWeightPointerEXT (GLsizei, GLenum, GLsizei, const GLvoid *);
5670#endif /* GL_GLEXT_PROTOTYPES */
5671typedef void (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight);
5672typedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight);
5673typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLsizei size, GLenum type, GLsizei stride, const GLvoid *pointer);
5674#endif
5675
5676#ifndef GL_NV_light_max_exponent
5677#define GL_NV_light_max_exponent 1
5678#endif
5679
5680#ifndef GL_NV_vertex_array_range
5681#define GL_NV_vertex_array_range 1
5682#ifdef GL_GLEXT_PROTOTYPES
5683GLAPI void APIENTRY glFlushVertexArrayRangeNV (void);
5684GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei, const GLvoid *);
5685#endif /* GL_GLEXT_PROTOTYPES */
5686typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void);
5687typedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const GLvoid *pointer);
5688#endif
5689
5690#ifndef GL_NV_register_combiners
5691#define GL_NV_register_combiners 1
5692#ifdef GL_GLEXT_PROTOTYPES
5693GLAPI void APIENTRY glCombinerParameterfvNV (GLenum, const GLfloat *);
5694GLAPI void APIENTRY glCombinerParameterfNV (GLenum, GLfloat);
5695GLAPI void APIENTRY glCombinerParameterivNV (GLenum, const GLint *);
5696GLAPI void APIENTRY glCombinerParameteriNV (GLenum, GLint);
5697GLAPI void APIENTRY glCombinerInputNV (GLenum, GLenum, GLenum, GLenum, GLenum, GLenum);
5698GLAPI void APIENTRY glCombinerOutputNV (GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLboolean, GLboolean, GLboolean);
5699GLAPI void APIENTRY glFinalCombinerInputNV (GLenum, GLenum, GLenum, GLenum);
5700GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum, GLenum, GLenum, GLenum, GLfloat *);
5701GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum, GLenum, GLenum, GLenum, GLint *);
5702GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum, GLenum, GLenum, GLfloat *);
5703GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum, GLenum, GLenum, GLint *);
5704GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum, GLenum, GLfloat *);
5705GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum, GLenum, GLint *);
5706#endif /* GL_GLEXT_PROTOTYPES */
5707typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params);
5708typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param);
5709typedef void (APIENTRYP PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params);
5710typedef void (APIENTRYP PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param);
5711typedef void (APIENTRYP PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
5712typedef void (APIENTRYP PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum);
5713typedef void (APIENTRYP PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
5714typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params);
5715typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params);
5716typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params);
5717typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params);
5718typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params);
5719typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params);
5720#endif
5721
5722#ifndef GL_NV_fog_distance
5723#define GL_NV_fog_distance 1
5724#endif
5725
5726#ifndef GL_NV_texgen_emboss
5727#define GL_NV_texgen_emboss 1
5728#endif
5729
5730#ifndef GL_NV_blend_square
5731#define GL_NV_blend_square 1
5732#endif
5733
5734#ifndef GL_NV_texture_env_combine4
5735#define GL_NV_texture_env_combine4 1
5736#endif
5737
5738#ifndef GL_MESA_resize_buffers
5739#define GL_MESA_resize_buffers 1
5740#ifdef GL_GLEXT_PROTOTYPES
5741GLAPI void APIENTRY glResizeBuffersMESA (void);
5742#endif /* GL_GLEXT_PROTOTYPES */
5743typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void);
5744#endif
5745
5746#ifndef GL_MESA_window_pos
5747#define GL_MESA_window_pos 1
5748#ifdef GL_GLEXT_PROTOTYPES
5749GLAPI void APIENTRY glWindowPos2dMESA (GLdouble, GLdouble);
5750GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *);
5751GLAPI void APIENTRY glWindowPos2fMESA (GLfloat, GLfloat);
5752GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *);
5753GLAPI void APIENTRY glWindowPos2iMESA (GLint, GLint);
5754GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *);
5755GLAPI void APIENTRY glWindowPos2sMESA (GLshort, GLshort);
5756GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *);
5757GLAPI void APIENTRY glWindowPos3dMESA (GLdouble, GLdouble, GLdouble);
5758GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *);
5759GLAPI void APIENTRY glWindowPos3fMESA (GLfloat, GLfloat, GLfloat);
5760GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *);
5761GLAPI void APIENTRY glWindowPos3iMESA (GLint, GLint, GLint);
5762GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *);
5763GLAPI void APIENTRY glWindowPos3sMESA (GLshort, GLshort, GLshort);
5764GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *);
5765GLAPI void APIENTRY glWindowPos4dMESA (GLdouble, GLdouble, GLdouble, GLdouble);
5766GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *);
5767GLAPI void APIENTRY glWindowPos4fMESA (GLfloat, GLfloat, GLfloat, GLfloat);
5768GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *);
5769GLAPI void APIENTRY glWindowPos4iMESA (GLint, GLint, GLint, GLint);
5770GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *);
5771GLAPI void APIENTRY glWindowPos4sMESA (GLshort, GLshort, GLshort, GLshort);
5772GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *);
5773#endif /* GL_GLEXT_PROTOTYPES */
5774typedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y);
5775typedef void (APIENTRYP PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v);
5776typedef void (APIENTRYP PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y);
5777typedef void (APIENTRYP PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v);
5778typedef void (APIENTRYP PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y);
5779typedef void (APIENTRYP PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v);
5780typedef void (APIENTRYP PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y);
5781typedef void (APIENTRYP PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v);
5782typedef void (APIENTRYP PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z);
5783typedef void (APIENTRYP PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v);
5784typedef void (APIENTRYP PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z);
5785typedef void (APIENTRYP PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v);
5786typedef void (APIENTRYP PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z);
5787typedef void (APIENTRYP PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v);
5788typedef void (APIENTRYP PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z);
5789typedef void (APIENTRYP PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v);
5790typedef void (APIENTRYP PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w);
5791typedef void (APIENTRYP PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v);
5792typedef void (APIENTRYP PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w);
5793typedef void (APIENTRYP PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v);
5794typedef void (APIENTRYP PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w);
5795typedef void (APIENTRYP PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v);
5796typedef void (APIENTRYP PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w);
5797typedef void (APIENTRYP PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v);
5798#endif
5799
5800#ifndef GL_IBM_cull_vertex
5801#define GL_IBM_cull_vertex 1
5802#endif
5803
5804#ifndef GL_IBM_multimode_draw_arrays
5805#define GL_IBM_multimode_draw_arrays 1
5806#ifdef GL_GLEXT_PROTOTYPES
5807GLAPI void APIENTRY glMultiModeDrawArraysIBM (const GLenum *, const GLint *, const GLsizei *, GLsizei, GLint);
5808GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *, const GLsizei *, GLenum, const GLvoid* const *, GLsizei, GLint);
5809#endif /* GL_GLEXT_PROTOTYPES */
5810typedef void (APIENTRYP PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride);
5811typedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei primcount, GLint modestride);
5812#endif
5813
5814#ifndef GL_IBM_vertex_array_lists
5815#define GL_IBM_vertex_array_lists 1
5816#ifdef GL_GLEXT_PROTOTYPES
5817GLAPI void APIENTRY glColorPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint);
5818GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint);
5819GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint, const GLboolean* *, GLint);
5820GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum, GLint, const GLvoid* *, GLint);
5821GLAPI void APIENTRY glIndexPointerListIBM (GLenum, GLint, const GLvoid* *, GLint);
5822GLAPI void APIENTRY glNormalPointerListIBM (GLenum, GLint, const GLvoid* *, GLint);
5823GLAPI void APIENTRY glTexCoordPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint);
5824GLAPI void APIENTRY glVertexPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint);
5825#endif /* GL_GLEXT_PROTOTYPES */
5826typedef void (APIENTRYP PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
5827typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
5828typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean* *pointer, GLint ptrstride);
5829typedef void (APIENTRYP PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
5830typedef void (APIENTRYP PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
5831typedef void (APIENTRYP PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
5832typedef void (APIENTRYP PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
5833typedef void (APIENTRYP PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
5834#endif
5835
5836#ifndef GL_SGIX_subsample
5837#define GL_SGIX_subsample 1
5838#endif
5839
5840#ifndef GL_SGIX_ycrcba
5841#define GL_SGIX_ycrcba 1
5842#endif
5843
5844#ifndef GL_SGIX_ycrcb_subsample
5845#define GL_SGIX_ycrcb_subsample 1
5846#endif
5847
5848#ifndef GL_SGIX_depth_pass_instrument
5849#define GL_SGIX_depth_pass_instrument 1
5850#endif
5851
5852#ifndef GL_3DFX_texture_compression_FXT1
5853#define GL_3DFX_texture_compression_FXT1 1
5854#endif
5855
5856#ifndef GL_3DFX_multisample
5857#define GL_3DFX_multisample 1
5858#endif
5859
5860#ifndef GL_3DFX_tbuffer
5861#define GL_3DFX_tbuffer 1
5862#ifdef GL_GLEXT_PROTOTYPES
5863GLAPI void APIENTRY glTbufferMask3DFX (GLuint);
5864#endif /* GL_GLEXT_PROTOTYPES */
5865typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask);
5866#endif
5867
5868#ifndef GL_EXT_multisample
5869#define GL_EXT_multisample 1
5870#ifdef GL_GLEXT_PROTOTYPES
5871GLAPI void APIENTRY glSampleMaskEXT (GLclampf, GLboolean);
5872GLAPI void APIENTRY glSamplePatternEXT (GLenum);
5873#endif /* GL_GLEXT_PROTOTYPES */
5874typedef void (APIENTRYP PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert);
5875typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern);
5876#endif
5877
5878#ifndef GL_SGIX_vertex_preclip
5879#define GL_SGIX_vertex_preclip 1
5880#endif
5881
5882#ifndef GL_SGIX_convolution_accuracy
5883#define GL_SGIX_convolution_accuracy 1
5884#endif
5885
5886#ifndef GL_SGIX_resample
5887#define GL_SGIX_resample 1
5888#endif
5889
5890#ifndef GL_SGIS_point_line_texgen
5891#define GL_SGIS_point_line_texgen 1
5892#endif
5893
5894#ifndef GL_SGIS_texture_color_mask
5895#define GL_SGIS_texture_color_mask 1
5896#ifdef GL_GLEXT_PROTOTYPES
5897GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean, GLboolean, GLboolean, GLboolean);
5898#endif /* GL_GLEXT_PROTOTYPES */
5899typedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
5900#endif
5901
5902#ifndef GL_SGIX_igloo_interface
5903#define GL_SGIX_igloo_interface 1
5904#ifdef GL_GLEXT_PROTOTYPES
5905GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum, const GLvoid *);
5906#endif /* GL_GLEXT_PROTOTYPES */
5907typedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const GLvoid *params);
5908#endif
5909
5910#ifndef GL_EXT_texture_env_dot3
5911#define GL_EXT_texture_env_dot3 1
5912#endif
5913
5914#ifndef GL_ATI_texture_mirror_once
5915#define GL_ATI_texture_mirror_once 1
5916#endif
5917
5918#ifndef GL_NV_fence
5919#define GL_NV_fence 1
5920#ifdef GL_GLEXT_PROTOTYPES
5921GLAPI void APIENTRY glDeleteFencesNV (GLsizei, const GLuint *);
5922GLAPI void APIENTRY glGenFencesNV (GLsizei, GLuint *);
5923GLAPI GLboolean APIENTRY glIsFenceNV (GLuint);
5924GLAPI GLboolean APIENTRY glTestFenceNV (GLuint);
5925GLAPI void APIENTRY glGetFenceivNV (GLuint, GLenum, GLint *);
5926GLAPI void APIENTRY glFinishFenceNV (GLuint);
5927GLAPI void APIENTRY glSetFenceNV (GLuint, GLenum);
5928#endif /* GL_GLEXT_PROTOTYPES */
5929typedef void (APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences);
5930typedef void (APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences);
5931typedef GLboolean (APIENTRYP PFNGLISFENCENVPROC) (GLuint fence);
5932typedef GLboolean (APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence);
5933typedef void (APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params);
5934typedef void (APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence);
5935typedef void (APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition);
5936#endif
5937
5938#ifndef GL_NV_evaluators
5939#define GL_NV_evaluators 1
5940#ifdef GL_GLEXT_PROTOTYPES
5941GLAPI void APIENTRY glMapControlPointsNV (GLenum, GLuint, GLenum, GLsizei, GLsizei, GLint, GLint, GLboolean, const GLvoid *);
5942GLAPI void APIENTRY glMapParameterivNV (GLenum, GLenum, const GLint *);
5943GLAPI void APIENTRY glMapParameterfvNV (GLenum, GLenum, const GLfloat *);
5944GLAPI void APIENTRY glGetMapControlPointsNV (GLenum, GLuint, GLenum, GLsizei, GLsizei, GLboolean, GLvoid *);
5945GLAPI void APIENTRY glGetMapParameterivNV (GLenum, GLenum, GLint *);
5946GLAPI void APIENTRY glGetMapParameterfvNV (GLenum, GLenum, GLfloat *);
5947GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum, GLuint, GLenum, GLint *);
5948GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum, GLuint, GLenum, GLfloat *);
5949GLAPI void APIENTRY glEvalMapsNV (GLenum, GLenum);
5950#endif /* GL_GLEXT_PROTOTYPES */
5951typedef void (APIENTRYP PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points);
5952typedef void (APIENTRYP PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params);
5953typedef void (APIENTRYP PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params);
5954typedef void (APIENTRYP PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points);
5955typedef void (APIENTRYP PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params);
5956typedef void (APIENTRYP PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params);
5957typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params);
5958typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params);
5959typedef void (APIENTRYP PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode);
5960#endif
5961
5962#ifndef GL_NV_packed_depth_stencil
5963#define GL_NV_packed_depth_stencil 1
5964#endif
5965
5966#ifndef GL_NV_register_combiners2
5967#define GL_NV_register_combiners2 1
5968#ifdef GL_GLEXT_PROTOTYPES
5969GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum, GLenum, const GLfloat *);
5970GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum, GLenum, GLfloat *);
5971#endif /* GL_GLEXT_PROTOTYPES */
5972typedef void (APIENTRYP PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params);
5973typedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params);
5974#endif
5975
5976#ifndef GL_NV_texture_compression_vtc
5977#define GL_NV_texture_compression_vtc 1
5978#endif
5979
5980#ifndef GL_NV_texture_rectangle
5981#define GL_NV_texture_rectangle 1
5982#endif
5983
5984#ifndef GL_NV_texture_shader
5985#define GL_NV_texture_shader 1
5986#endif
5987
5988#ifndef GL_NV_texture_shader2
5989#define GL_NV_texture_shader2 1
5990#endif
5991
5992#ifndef GL_NV_vertex_array_range2
5993#define GL_NV_vertex_array_range2 1
5994#endif
5995
5996#ifndef GL_NV_vertex_program
5997#define GL_NV_vertex_program 1
5998#ifdef GL_GLEXT_PROTOTYPES
5999GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei, const GLuint *, GLboolean *);
6000GLAPI void APIENTRY glBindProgramNV (GLenum, GLuint);
6001GLAPI void APIENTRY glDeleteProgramsNV (GLsizei, const GLuint *);
6002GLAPI void APIENTRY glExecuteProgramNV (GLenum, GLuint, const GLfloat *);
6003GLAPI void APIENTRY glGenProgramsNV (GLsizei, GLuint *);
6004GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum, GLuint, GLenum, GLdouble *);
6005GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum, GLuint, GLenum, GLfloat *);
6006GLAPI void APIENTRY glGetProgramivNV (GLuint, GLenum, GLint *);
6007GLAPI void APIENTRY glGetProgramStringNV (GLuint, GLenum, GLubyte *);
6008GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum, GLuint, GLenum, GLint *);
6009GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint, GLenum, GLdouble *);
6010GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint, GLenum, GLfloat *);
6011GLAPI void APIENTRY glGetVertexAttribivNV (GLuint, GLenum, GLint *);
6012GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint, GLenum, GLvoid* *);
6013GLAPI GLboolean APIENTRY glIsProgramNV (GLuint);
6014GLAPI void APIENTRY glLoadProgramNV (GLenum, GLuint, GLsizei, const GLubyte *);
6015GLAPI void APIENTRY glProgramParameter4dNV (GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble);
6016GLAPI void APIENTRY glProgramParameter4dvNV (GLenum, GLuint, const GLdouble *);
6017GLAPI void APIENTRY glProgramParameter4fNV (GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat);
6018GLAPI void APIENTRY glProgramParameter4fvNV (GLenum, GLuint, const GLfloat *);
6019GLAPI void APIENTRY glProgramParameters4dvNV (GLenum, GLuint, GLuint, const GLdouble *);
6020GLAPI void APIENTRY glProgramParameters4fvNV (GLenum, GLuint, GLuint, const GLfloat *);
6021GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei, const GLuint *);
6022GLAPI void APIENTRY glTrackMatrixNV (GLenum, GLuint, GLenum, GLenum);
6023GLAPI void APIENTRY glVertexAttribPointerNV (GLuint, GLint, GLenum, GLsizei, const GLvoid *);
6024GLAPI void APIENTRY glVertexAttrib1dNV (GLuint, GLdouble);
6025GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint, const GLdouble *);
6026GLAPI void APIENTRY glVertexAttrib1fNV (GLuint, GLfloat);
6027GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint, const GLfloat *);
6028GLAPI void APIENTRY glVertexAttrib1sNV (GLuint, GLshort);
6029GLAPI void APIENTRY glVertexAttrib1svNV (GLuint, const GLshort *);
6030GLAPI void APIENTRY glVertexAttrib2dNV (GLuint, GLdouble, GLdouble);
6031GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint, const GLdouble *);
6032GLAPI void APIENTRY glVertexAttrib2fNV (GLuint, GLfloat, GLfloat);
6033GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint, const GLfloat *);
6034GLAPI void APIENTRY glVertexAttrib2sNV (GLuint, GLshort, GLshort);
6035GLAPI void APIENTRY glVertexAttrib2svNV (GLuint, const GLshort *);
6036GLAPI void APIENTRY glVertexAttrib3dNV (GLuint, GLdouble, GLdouble, GLdouble);
6037GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint, const GLdouble *);
6038GLAPI void APIENTRY glVertexAttrib3fNV (GLuint, GLfloat, GLfloat, GLfloat);
6039GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint, const GLfloat *);
6040GLAPI void APIENTRY glVertexAttrib3sNV (GLuint, GLshort, GLshort, GLshort);
6041GLAPI void APIENTRY glVertexAttrib3svNV (GLuint, const GLshort *);
6042GLAPI void APIENTRY glVertexAttrib4dNV (GLuint, GLdouble, GLdouble, GLdouble, GLdouble);
6043GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint, const GLdouble *);
6044GLAPI void APIENTRY glVertexAttrib4fNV (GLuint, GLfloat, GLfloat, GLfloat, GLfloat);
6045GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint, const GLfloat *);
6046GLAPI void APIENTRY glVertexAttrib4sNV (GLuint, GLshort, GLshort, GLshort, GLshort);
6047GLAPI void APIENTRY glVertexAttrib4svNV (GLuint, const GLshort *);
6048GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint, GLubyte, GLubyte, GLubyte, GLubyte);
6049GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint, const GLubyte *);
6050GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint, GLsizei, const GLdouble *);
6051GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint, GLsizei, const GLfloat *);
6052GLAPI void APIENTRY glVertexAttribs1svNV (GLuint, GLsizei, const GLshort *);
6053GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint, GLsizei, const GLdouble *);
6054GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint, GLsizei, const GLfloat *);
6055GLAPI void APIENTRY glVertexAttribs2svNV (GLuint, GLsizei, const GLshort *);
6056GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint, GLsizei, const GLdouble *);
6057GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint, GLsizei, const GLfloat *);
6058GLAPI void APIENTRY glVertexAttribs3svNV (GLuint, GLsizei, const GLshort *);
6059GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint, GLsizei, const GLdouble *);
6060GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint, GLsizei, const GLfloat *);
6061GLAPI void APIENTRY glVertexAttribs4svNV (GLuint, GLsizei, const GLshort *);
6062GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint, GLsizei, const GLubyte *);
6063#endif /* GL_GLEXT_PROTOTYPES */
6064typedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences);
6065typedef void (APIENTRYP PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id);
6066typedef void (APIENTRYP PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs);
6067typedef void (APIENTRYP PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params);
6068typedef void (APIENTRYP PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs);
6069typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params);
6070typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params);
6071typedef void (APIENTRYP PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params);
6072typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program);
6073typedef void (APIENTRYP PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params);
6074typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params);
6075typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params);
6076typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params);
6077typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, GLvoid* *pointer);
6078typedef GLboolean (APIENTRYP PFNGLISPROGRAMNVPROC) (GLuint id);
6079typedef void (APIENTRYP PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program);
6080typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
6081typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v);
6082typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
6083typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v);
6084typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLuint count, const GLdouble *v);
6085typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLuint count, const GLfloat *v);
6086typedef void (APIENTRYP PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs);
6087typedef void (APIENTRYP PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform);
6088typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid *pointer);
6089typedef void (APIENTRYP PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x);
6090typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v);
6091typedef void (APIENTRYP PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x);
6092typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v);
6093typedef void (APIENTRYP PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x);
6094typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v);
6095typedef void (APIENTRYP PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y);
6096typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v);
6097typedef void (APIENTRYP PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y);
6098typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v);
6099typedef void (APIENTRYP PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y);
6100typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v);
6101typedef void (APIENTRYP PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
6102typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v);
6103typedef void (APIENTRYP PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
6104typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v);
6105typedef void (APIENTRYP PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
6106typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v);
6107typedef void (APIENTRYP PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
6108typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v);
6109typedef void (APIENTRYP PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
6110typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v);
6111typedef void (APIENTRYP PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
6112typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v);
6113typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
6114typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v);
6115typedef void (APIENTRYP PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
6116typedef void (APIENTRYP PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
6117typedef void (APIENTRYP PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
6118typedef void (APIENTRYP PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
6119typedef void (APIENTRYP PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
6120typedef void (APIENTRYP PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
6121typedef void (APIENTRYP PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
6122typedef void (APIENTRYP PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
6123typedef void (APIENTRYP PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
6124typedef void (APIENTRYP PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
6125typedef void (APIENTRYP PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
6126typedef void (APIENTRYP PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
6127typedef void (APIENTRYP PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v);
6128#endif
6129
6130#ifndef GL_SGIX_texture_coordinate_clamp
6131#define GL_SGIX_texture_coordinate_clamp 1
6132#endif
6133
6134#ifndef GL_SGIX_scalebias_hint
6135#define GL_SGIX_scalebias_hint 1
6136#endif
6137
6138#ifndef GL_OML_interlace
6139#define GL_OML_interlace 1
6140#endif
6141
6142#ifndef GL_OML_subsample
6143#define GL_OML_subsample 1
6144#endif
6145
6146#ifndef GL_OML_resample
6147#define GL_OML_resample 1
6148#endif
6149
6150#ifndef GL_NV_copy_depth_to_color
6151#define GL_NV_copy_depth_to_color 1
6152#endif
6153
6154#ifndef GL_ATI_envmap_bumpmap
6155#define GL_ATI_envmap_bumpmap 1
6156#ifdef GL_GLEXT_PROTOTYPES
6157GLAPI void APIENTRY glTexBumpParameterivATI (GLenum, const GLint *);
6158GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum, const GLfloat *);
6159GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum, GLint *);
6160GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum, GLfloat *);
6161#endif /* GL_GLEXT_PROTOTYPES */
6162typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param);
6163typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param);
6164typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param);
6165typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param);
6166#endif
6167
6168#ifndef GL_ATI_fragment_shader
6169#define GL_ATI_fragment_shader 1
6170#ifdef GL_GLEXT_PROTOTYPES
6171GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint);
6172GLAPI void APIENTRY glBindFragmentShaderATI (GLuint);
6173GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint);
6174GLAPI void APIENTRY glBeginFragmentShaderATI (void);
6175GLAPI void APIENTRY glEndFragmentShaderATI (void);
6176GLAPI void APIENTRY glPassTexCoordATI (GLuint, GLuint, GLenum);
6177GLAPI void APIENTRY glSampleMapATI (GLuint, GLuint, GLenum);
6178GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint);
6179GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint);
6180GLAPI void APIENTRY glColorFragmentOp3ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint);
6181GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint);
6182GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint);
6183GLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint);
6184GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint, const GLfloat *);
6185#endif /* GL_GLEXT_PROTOTYPES */
6186typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range);
6187typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id);
6188typedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id);
6189typedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC) (void);
6190typedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC) (void);
6191typedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle);
6192typedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle);
6193typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
6194typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
6195typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
6196typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
6197typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
6198typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
6199typedef void (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value);
6200#endif
6201
6202#ifndef GL_ATI_pn_triangles
6203#define GL_ATI_pn_triangles 1
6204#ifdef GL_GLEXT_PROTOTYPES
6205GLAPI void APIENTRY glPNTrianglesiATI (GLenum, GLint);
6206GLAPI void APIENTRY glPNTrianglesfATI (GLenum, GLfloat);
6207#endif /* GL_GLEXT_PROTOTYPES */
6208typedef void (APIENTRYP PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param);
6209typedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param);
6210#endif
6211
6212#ifndef GL_ATI_vertex_array_object
6213#define GL_ATI_vertex_array_object 1
6214#ifdef GL_GLEXT_PROTOTYPES
6215GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei, const GLvoid *, GLenum);
6216GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint);
6217GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint, GLuint, GLsizei, const GLvoid *, GLenum);
6218GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint, GLenum, GLfloat *);
6219GLAPI void APIENTRY glGetObjectBufferivATI (GLuint, GLenum, GLint *);
6220GLAPI void APIENTRY glFreeObjectBufferATI (GLuint);
6221GLAPI void APIENTRY glArrayObjectATI (GLenum, GLint, GLenum, GLsizei, GLuint, GLuint);
6222GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum, GLenum, GLfloat *);
6223GLAPI void APIENTRY glGetArrayObjectivATI (GLenum, GLenum, GLint *);
6224GLAPI void APIENTRY glVariantArrayObjectATI (GLuint, GLenum, GLsizei, GLuint, GLuint);
6225GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint, GLenum, GLfloat *);
6226GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint, GLenum, GLint *);
6227#endif /* GL_GLEXT_PROTOTYPES */
6228typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const GLvoid *pointer, GLenum usage);
6229typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer);
6230typedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve);
6231typedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params);
6232typedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params);
6233typedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer);
6234typedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);
6235typedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params);
6236typedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params);
6237typedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);
6238typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params);
6239typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params);
6240#endif
6241
6242#ifndef GL_EXT_vertex_shader
6243#define GL_EXT_vertex_shader 1
6244#ifdef GL_GLEXT_PROTOTYPES
6245GLAPI void APIENTRY glBeginVertexShaderEXT (void);
6246GLAPI void APIENTRY glEndVertexShaderEXT (void);
6247GLAPI void APIENTRY glBindVertexShaderEXT (GLuint);
6248GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint);
6249GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint);
6250GLAPI void APIENTRY glShaderOp1EXT (GLenum, GLuint, GLuint);
6251GLAPI void APIENTRY glShaderOp2EXT (GLenum, GLuint, GLuint, GLuint);
6252GLAPI void APIENTRY glShaderOp3EXT (GLenum, GLuint, GLuint, GLuint, GLuint);
6253GLAPI void APIENTRY glSwizzleEXT (GLuint, GLuint, GLenum, GLenum, GLenum, GLenum);
6254GLAPI void APIENTRY glWriteMaskEXT (GLuint, GLuint, GLenum, GLenum, GLenum, GLenum);
6255GLAPI void APIENTRY glInsertComponentEXT (GLuint, GLuint, GLuint);
6256GLAPI void APIENTRY glExtractComponentEXT (GLuint, GLuint, GLuint);
6257GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum, GLenum, GLenum, GLuint);
6258GLAPI void APIENTRY glSetInvariantEXT (GLuint, GLenum, const GLvoid *);
6259GLAPI void APIENTRY glSetLocalConstantEXT (GLuint, GLenum, const GLvoid *);
6260GLAPI void APIENTRY glVariantbvEXT (GLuint, const GLbyte *);
6261GLAPI void APIENTRY glVariantsvEXT (GLuint, const GLshort *);
6262GLAPI void APIENTRY glVariantivEXT (GLuint, const GLint *);
6263GLAPI void APIENTRY glVariantfvEXT (GLuint, const GLfloat *);
6264GLAPI void APIENTRY glVariantdvEXT (GLuint, const GLdouble *);
6265GLAPI void APIENTRY glVariantubvEXT (GLuint, const GLubyte *);
6266GLAPI void APIENTRY glVariantusvEXT (GLuint, const GLushort *);
6267GLAPI void APIENTRY glVariantuivEXT (GLuint, const GLuint *);
6268GLAPI void APIENTRY glVariantPointerEXT (GLuint, GLenum, GLuint, const GLvoid *);
6269GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint);
6270GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint);
6271GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum, GLenum);
6272GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum, GLenum);
6273GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum, GLenum, GLenum);
6274GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum, GLenum);
6275GLAPI GLuint APIENTRY glBindParameterEXT (GLenum);
6276GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint, GLenum);
6277GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint, GLenum, GLboolean *);
6278GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint, GLenum, GLint *);
6279GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint, GLenum, GLfloat *);
6280GLAPI void APIENTRY glGetVariantPointervEXT (GLuint, GLenum, GLvoid* *);
6281GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint, GLenum, GLboolean *);
6282GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint, GLenum, GLint *);
6283GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint, GLenum, GLfloat *);
6284GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint, GLenum, GLboolean *);
6285GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint, GLenum, GLint *);
6286GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint, GLenum, GLfloat *);
6287#endif /* GL_GLEXT_PROTOTYPES */
6288typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC) (void);
6289typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC) (void);
6290typedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id);
6291typedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range);
6292typedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id);
6293typedef void (APIENTRYP PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1);
6294typedef void (APIENTRYP PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2);
6295typedef void (APIENTRYP PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3);
6296typedef void (APIENTRYP PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);
6297typedef void (APIENTRYP PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);
6298typedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num);
6299typedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num);
6300typedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components);
6301typedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const GLvoid *addr);
6302typedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const GLvoid *addr);
6303typedef void (APIENTRYP PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr);
6304typedef void (APIENTRYP PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr);
6305typedef void (APIENTRYP PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr);
6306typedef void (APIENTRYP PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr);
6307typedef void (APIENTRYP PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr);
6308typedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr);
6309typedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr);
6310typedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr);
6311typedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const GLvoid *addr);
6312typedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id);
6313typedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id);
6314typedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value);
6315typedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value);
6316typedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value);
6317typedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value);
6318typedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC) (GLenum value);
6319typedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap);
6320typedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);
6321typedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);
6322typedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);
6323typedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, GLvoid* *data);
6324typedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);
6325typedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);
6326typedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);
6327typedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);
6328typedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);
6329typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);
6330#endif
6331
6332#ifndef GL_ATI_vertex_streams
6333#define GL_ATI_vertex_streams 1
6334#ifdef GL_GLEXT_PROTOTYPES
6335GLAPI void APIENTRY glVertexStream1sATI (GLenum, GLshort);
6336GLAPI void APIENTRY glVertexStream1svATI (GLenum, const GLshort *);
6337GLAPI void APIENTRY glVertexStream1iATI (GLenum, GLint);
6338GLAPI void APIENTRY glVertexStream1ivATI (GLenum, const GLint *);
6339GLAPI void APIENTRY glVertexStream1fATI (GLenum, GLfloat);
6340GLAPI void APIENTRY glVertexStream1fvATI (GLenum, const GLfloat *);
6341GLAPI void APIENTRY glVertexStream1dATI (GLenum, GLdouble);
6342GLAPI void APIENTRY glVertexStream1dvATI (GLenum, const GLdouble *);
6343GLAPI void APIENTRY glVertexStream2sATI (GLenum, GLshort, GLshort);
6344GLAPI void APIENTRY glVertexStream2svATI (GLenum, const GLshort *);
6345GLAPI void APIENTRY glVertexStream2iATI (GLenum, GLint, GLint);
6346GLAPI void APIENTRY glVertexStream2ivATI (GLenum, const GLint *);
6347GLAPI void APIENTRY glVertexStream2fATI (GLenum, GLfloat, GLfloat);
6348GLAPI void APIENTRY glVertexStream2fvATI (GLenum, const GLfloat *);
6349GLAPI void APIENTRY glVertexStream2dATI (GLenum, GLdouble, GLdouble);
6350GLAPI void APIENTRY glVertexStream2dvATI (GLenum, const GLdouble *);
6351GLAPI void APIENTRY glVertexStream3sATI (GLenum, GLshort, GLshort, GLshort);
6352GLAPI void APIENTRY glVertexStream3svATI (GLenum, const GLshort *);
6353GLAPI void APIENTRY glVertexStream3iATI (GLenum, GLint, GLint, GLint);
6354GLAPI void APIENTRY glVertexStream3ivATI (GLenum, const GLint *);
6355GLAPI void APIENTRY glVertexStream3fATI (GLenum, GLfloat, GLfloat, GLfloat);
6356GLAPI void APIENTRY glVertexStream3fvATI (GLenum, const GLfloat *);
6357GLAPI void APIENTRY glVertexStream3dATI (GLenum, GLdouble, GLdouble, GLdouble);
6358GLAPI void APIENTRY glVertexStream3dvATI (GLenum, const GLdouble *);
6359GLAPI void APIENTRY glVertexStream4sATI (GLenum, GLshort, GLshort, GLshort, GLshort);
6360GLAPI void APIENTRY glVertexStream4svATI (GLenum, const GLshort *);
6361GLAPI void APIENTRY glVertexStream4iATI (GLenum, GLint, GLint, GLint, GLint);
6362GLAPI void APIENTRY glVertexStream4ivATI (GLenum, const GLint *);
6363GLAPI void APIENTRY glVertexStream4fATI (GLenum, GLfloat, GLfloat, GLfloat, GLfloat);
6364GLAPI void APIENTRY glVertexStream4fvATI (GLenum, const GLfloat *);
6365GLAPI void APIENTRY glVertexStream4dATI (GLenum, GLdouble, GLdouble, GLdouble, GLdouble);
6366GLAPI void APIENTRY glVertexStream4dvATI (GLenum, const GLdouble *);
6367GLAPI void APIENTRY glNormalStream3bATI (GLenum, GLbyte, GLbyte, GLbyte);
6368GLAPI void APIENTRY glNormalStream3bvATI (GLenum, const GLbyte *);
6369GLAPI void APIENTRY glNormalStream3sATI (GLenum, GLshort, GLshort, GLshort);
6370GLAPI void APIENTRY glNormalStream3svATI (GLenum, const GLshort *);
6371GLAPI void APIENTRY glNormalStream3iATI (GLenum, GLint, GLint, GLint);
6372GLAPI void APIENTRY glNormalStream3ivATI (GLenum, const GLint *);
6373GLAPI void APIENTRY glNormalStream3fATI (GLenum, GLfloat, GLfloat, GLfloat);
6374GLAPI void APIENTRY glNormalStream3fvATI (GLenum, const GLfloat *);
6375GLAPI void APIENTRY glNormalStream3dATI (GLenum, GLdouble, GLdouble, GLdouble);
6376GLAPI void APIENTRY glNormalStream3dvATI (GLenum, const GLdouble *);
6377GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum);
6378GLAPI void APIENTRY glVertexBlendEnviATI (GLenum, GLint);
6379GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum, GLfloat);
6380#endif /* GL_GLEXT_PROTOTYPES */
6381typedef void (APIENTRYP PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x);
6382typedef void (APIENTRYP PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords);
6383typedef void (APIENTRYP PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x);
6384typedef void (APIENTRYP PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords);
6385typedef void (APIENTRYP PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x);
6386typedef void (APIENTRYP PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords);
6387typedef void (APIENTRYP PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x);
6388typedef void (APIENTRYP PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords);
6389typedef void (APIENTRYP PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y);
6390typedef void (APIENTRYP PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords);
6391typedef void (APIENTRYP PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y);
6392typedef void (APIENTRYP PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords);
6393typedef void (APIENTRYP PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y);
6394typedef void (APIENTRYP PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords);
6395typedef void (APIENTRYP PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y);
6396typedef void (APIENTRYP PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords);
6397typedef void (APIENTRYP PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z);
6398typedef void (APIENTRYP PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords);
6399typedef void (APIENTRYP PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z);
6400typedef void (APIENTRYP PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords);
6401typedef void (APIENTRYP PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z);
6402typedef void (APIENTRYP PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords);
6403typedef void (APIENTRYP PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z);
6404typedef void (APIENTRYP PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords);
6405typedef void (APIENTRYP PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w);
6406typedef void (APIENTRYP PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords);
6407typedef void (APIENTRYP PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w);
6408typedef void (APIENTRYP PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords);
6409typedef void (APIENTRYP PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
6410typedef void (APIENTRYP PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords);
6411typedef void (APIENTRYP PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
6412typedef void (APIENTRYP PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords);
6413typedef void (APIENTRYP PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz);
6414typedef void (APIENTRYP PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords);
6415typedef void (APIENTRYP PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz);
6416typedef void (APIENTRYP PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords);
6417typedef void (APIENTRYP PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz);
6418typedef void (APIENTRYP PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords);
6419typedef void (APIENTRYP PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz);
6420typedef void (APIENTRYP PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords);
6421typedef void (APIENTRYP PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz);
6422typedef void (APIENTRYP PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords);
6423typedef void (APIENTRYP PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream);
6424typedef void (APIENTRYP PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param);
6425typedef void (APIENTRYP PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param);
6426#endif
6427
6428#ifndef GL_ATI_element_array
6429#define GL_ATI_element_array 1
6430#ifdef GL_GLEXT_PROTOTYPES
6431GLAPI void APIENTRY glElementPointerATI (GLenum, const GLvoid *);
6432GLAPI void APIENTRY glDrawElementArrayATI (GLenum, GLsizei);
6433GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum, GLuint, GLuint, GLsizei);
6434#endif /* GL_GLEXT_PROTOTYPES */
6435typedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC) (GLenum type, const GLvoid *pointer);
6436typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count);
6437typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count);
6438#endif
6439
6440#ifndef GL_SUN_mesh_array
6441#define GL_SUN_mesh_array 1
6442#ifdef GL_GLEXT_PROTOTYPES
6443GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum, GLint, GLsizei, GLsizei);
6444#endif /* GL_GLEXT_PROTOTYPES */
6445typedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width);
6446#endif
6447
6448#ifndef GL_SUN_slice_accum
6449#define GL_SUN_slice_accum 1
6450#endif
6451
6452#ifndef GL_NV_multisample_filter_hint
6453#define GL_NV_multisample_filter_hint 1
6454#endif
6455
6456#ifndef GL_NV_depth_clamp
6457#define GL_NV_depth_clamp 1
6458#endif
6459
6460#ifndef GL_NV_occlusion_query
6461#define GL_NV_occlusion_query 1
6462#ifdef GL_GLEXT_PROTOTYPES
6463GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei, GLuint *);
6464GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei, const GLuint *);
6465GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint);
6466GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint);
6467GLAPI void APIENTRY glEndOcclusionQueryNV (void);
6468GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint, GLenum, GLint *);
6469GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint, GLenum, GLuint *);
6470#endif /* GL_GLEXT_PROTOTYPES */
6471typedef void (APIENTRYP PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids);
6472typedef void (APIENTRYP PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids);
6473typedef GLboolean (APIENTRYP PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id);
6474typedef void (APIENTRYP PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id);
6475typedef void (APIENTRYP PFNGLENDOCCLUSIONQUERYNVPROC) (void);
6476typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params);
6477typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params);
6478#endif
6479
6480#ifndef GL_NV_point_sprite
6481#define GL_NV_point_sprite 1
6482#ifdef GL_GLEXT_PROTOTYPES
6483GLAPI void APIENTRY glPointParameteriNV (GLenum, GLint);
6484GLAPI void APIENTRY glPointParameterivNV (GLenum, const GLint *);
6485#endif /* GL_GLEXT_PROTOTYPES */
6486typedef void (APIENTRYP PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param);
6487typedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params);
6488#endif
6489
6490#ifndef GL_NV_texture_shader3
6491#define GL_NV_texture_shader3 1
6492#endif
6493
6494#ifndef GL_NV_vertex_program1_1
6495#define GL_NV_vertex_program1_1 1
6496#endif
6497
6498#ifndef GL_EXT_shadow_funcs
6499#define GL_EXT_shadow_funcs 1
6500#endif
6501
6502#ifndef GL_EXT_stencil_two_side
6503#define GL_EXT_stencil_two_side 1
6504#ifdef GL_GLEXT_PROTOTYPES
6505GLAPI void APIENTRY glActiveStencilFaceEXT (GLenum);
6506#endif /* GL_GLEXT_PROTOTYPES */
6507typedef void (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face);
6508#endif
6509
6510#ifndef GL_ATI_text_fragment_shader
6511#define GL_ATI_text_fragment_shader 1
6512#endif
6513
6514#ifndef GL_APPLE_client_storage
6515#define GL_APPLE_client_storage 1
6516#endif
6517
6518#ifndef GL_APPLE_element_array
6519#define GL_APPLE_element_array 1
6520#ifdef GL_GLEXT_PROTOTYPES
6521GLAPI void APIENTRY glElementPointerAPPLE (GLenum, const GLvoid *);
6522GLAPI void APIENTRY glDrawElementArrayAPPLE (GLenum, GLint, GLsizei);
6523GLAPI void APIENTRY glDrawRangeElementArrayAPPLE (GLenum, GLuint, GLuint, GLint, GLsizei);
6524GLAPI void APIENTRY glMultiDrawElementArrayAPPLE (GLenum, const GLint *, const GLsizei *, GLsizei);
6525GLAPI void APIENTRY glMultiDrawRangeElementArrayAPPLE (GLenum, GLuint, GLuint, const GLint *, const GLsizei *, GLsizei);
6526#endif /* GL_GLEXT_PROTOTYPES */
6527typedef void (APIENTRYP PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const GLvoid *pointer);
6528typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count);
6529typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count);
6530typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
6531typedef void (APIENTRYP PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount);
6532#endif
6533
6534#ifndef GL_APPLE_fence
6535#define GL_APPLE_fence 1
6536#ifdef GL_GLEXT_PROTOTYPES
6537GLAPI void APIENTRY glGenFencesAPPLE (GLsizei, GLuint *);
6538GLAPI void APIENTRY glDeleteFencesAPPLE (GLsizei, const GLuint *);
6539GLAPI void APIENTRY glSetFenceAPPLE (GLuint);
6540GLAPI GLboolean APIENTRY glIsFenceAPPLE (GLuint);
6541GLAPI GLboolean APIENTRY glTestFenceAPPLE (GLuint);
6542GLAPI void APIENTRY glFinishFenceAPPLE (GLuint);
6543GLAPI GLboolean APIENTRY glTestObjectAPPLE (GLenum, GLuint);
6544GLAPI void APIENTRY glFinishObjectAPPLE (GLenum, GLint);
6545#endif /* GL_GLEXT_PROTOTYPES */
6546typedef void (APIENTRYP PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint *fences);
6547typedef void (APIENTRYP PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint *fences);
6548typedef void (APIENTRYP PFNGLSETFENCEAPPLEPROC) (GLuint fence);
6549typedef GLboolean (APIENTRYP PFNGLISFENCEAPPLEPROC) (GLuint fence);
6550typedef GLboolean (APIENTRYP PFNGLTESTFENCEAPPLEPROC) (GLuint fence);
6551typedef void (APIENTRYP PFNGLFINISHFENCEAPPLEPROC) (GLuint fence);
6552typedef GLboolean (APIENTRYP PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name);
6553typedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name);
6554#endif
6555
6556#ifndef GL_APPLE_vertex_array_object
6557#define GL_APPLE_vertex_array_object 1
6558#ifdef GL_GLEXT_PROTOTYPES
6559GLAPI void APIENTRY glBindVertexArrayAPPLE (GLuint);
6560GLAPI void APIENTRY glDeleteVertexArraysAPPLE (GLsizei, const GLuint *);
6561GLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei, GLuint *);
6562GLAPI GLboolean APIENTRY glIsVertexArrayAPPLE (GLuint);
6563#endif /* GL_GLEXT_PROTOTYPES */
6564typedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array);
6565typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays);
6566typedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, GLuint *arrays);
6567typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array);
6568#endif
6569
6570#ifndef GL_APPLE_vertex_array_range
6571#define GL_APPLE_vertex_array_range 1
6572#ifdef GL_GLEXT_PROTOTYPES
6573GLAPI void APIENTRY glVertexArrayRangeAPPLE (GLsizei, GLvoid *);
6574GLAPI void APIENTRY glFlushVertexArrayRangeAPPLE (GLsizei, GLvoid *);
6575GLAPI void APIENTRY glVertexArrayParameteriAPPLE (GLenum, GLint);
6576#endif /* GL_GLEXT_PROTOTYPES */
6577typedef void (APIENTRYP PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer);
6578typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer);
6579typedef void (APIENTRYP PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param);
6580#endif
6581
6582#ifndef GL_APPLE_ycbcr_422
6583#define GL_APPLE_ycbcr_422 1
6584#endif
6585
6586#ifndef GL_S3_s3tc
6587#define GL_S3_s3tc 1
6588#endif
6589
6590#ifndef GL_ATI_draw_buffers
6591#define GL_ATI_draw_buffers 1
6592#ifdef GL_GLEXT_PROTOTYPES
6593GLAPI void APIENTRY glDrawBuffersATI (GLsizei, const GLenum *);
6594#endif /* GL_GLEXT_PROTOTYPES */
6595typedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs);
6596#endif
6597
6598#ifndef GL_ATI_pixel_format_float
6599#define GL_ATI_pixel_format_float 1
6600/* This is really a WGL extension, but defines some associated GL enums.
6601 * ATI does not export "GL_ATI_pixel_format_float" in the GL_EXTENSIONS string.
6602 */
6603#endif
6604
6605#ifndef GL_ATI_texture_env_combine3
6606#define GL_ATI_texture_env_combine3 1
6607#endif
6608
6609#ifndef GL_ATI_texture_float
6610#define GL_ATI_texture_float 1
6611#endif
6612
6613#ifndef GL_NV_float_buffer
6614#define GL_NV_float_buffer 1
6615#endif
6616
6617#ifndef GL_NV_fragment_program
6618#define GL_NV_fragment_program 1
6619/* Some NV_fragment_program entry points are shared with ARB_vertex_program. */
6620#ifdef GL_GLEXT_PROTOTYPES
6621GLAPI void APIENTRY glProgramNamedParameter4fNV (GLuint, GLsizei, const GLubyte *, GLfloat, GLfloat, GLfloat, GLfloat);
6622GLAPI void APIENTRY glProgramNamedParameter4dNV (GLuint, GLsizei, const GLubyte *, GLdouble, GLdouble, GLdouble, GLdouble);
6623GLAPI void APIENTRY glProgramNamedParameter4fvNV (GLuint, GLsizei, const GLubyte *, const GLfloat *);
6624GLAPI void APIENTRY glProgramNamedParameter4dvNV (GLuint, GLsizei, const GLubyte *, const GLdouble *);
6625GLAPI void APIENTRY glGetProgramNamedParameterfvNV (GLuint, GLsizei, const GLubyte *, GLfloat *);
6626GLAPI void APIENTRY glGetProgramNamedParameterdvNV (GLuint, GLsizei, const GLubyte *, GLdouble *);
6627#endif /* GL_GLEXT_PROTOTYPES */
6628typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
6629typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
6630typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v);
6631typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v);
6632typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params);
6633typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params);
6634#endif
6635
6636#ifndef GL_NV_half_float
6637#define GL_NV_half_float 1
6638#ifdef GL_GLEXT_PROTOTYPES
6639GLAPI void APIENTRY glVertex2hNV (GLhalfNV, GLhalfNV);
6640GLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *);
6641GLAPI void APIENTRY glVertex3hNV (GLhalfNV, GLhalfNV, GLhalfNV);
6642GLAPI void APIENTRY glVertex3hvNV (const GLhalfNV *);
6643GLAPI void APIENTRY glVertex4hNV (GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV);
6644GLAPI void APIENTRY glVertex4hvNV (const GLhalfNV *);
6645GLAPI void APIENTRY glNormal3hNV (GLhalfNV, GLhalfNV, GLhalfNV);
6646GLAPI void APIENTRY glNormal3hvNV (const GLhalfNV *);
6647GLAPI void APIENTRY glColor3hNV (GLhalfNV, GLhalfNV, GLhalfNV);
6648GLAPI void APIENTRY glColor3hvNV (const GLhalfNV *);
6649GLAPI void APIENTRY glColor4hNV (GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV);
6650GLAPI void APIENTRY glColor4hvNV (const GLhalfNV *);
6651GLAPI void APIENTRY glTexCoord1hNV (GLhalfNV);
6652GLAPI void APIENTRY glTexCoord1hvNV (const GLhalfNV *);
6653GLAPI void APIENTRY glTexCoord2hNV (GLhalfNV, GLhalfNV);
6654GLAPI void APIENTRY glTexCoord2hvNV (const GLhalfNV *);
6655GLAPI void APIENTRY glTexCoord3hNV (GLhalfNV, GLhalfNV, GLhalfNV);
6656GLAPI void APIENTRY glTexCoord3hvNV (const GLhalfNV *);
6657GLAPI void APIENTRY glTexCoord4hNV (GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV);
6658GLAPI void APIENTRY glTexCoord4hvNV (const GLhalfNV *);
6659GLAPI void APIENTRY glMultiTexCoord1hNV (GLenum, GLhalfNV);
6660GLAPI void APIENTRY glMultiTexCoord1hvNV (GLenum, const GLhalfNV *);
6661GLAPI void APIENTRY glMultiTexCoord2hNV (GLenum, GLhalfNV, GLhalfNV);
6662GLAPI void APIENTRY glMultiTexCoord2hvNV (GLenum, const GLhalfNV *);
6663GLAPI void APIENTRY glMultiTexCoord3hNV (GLenum, GLhalfNV, GLhalfNV, GLhalfNV);
6664GLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum, const GLhalfNV *);
6665GLAPI void APIENTRY glMultiTexCoord4hNV (GLenum, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV);
6666GLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum, const GLhalfNV *);
6667GLAPI void APIENTRY glFogCoordhNV (GLhalfNV);
6668GLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *);
6669GLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV, GLhalfNV, GLhalfNV);
6670GLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *);
6671GLAPI void APIENTRY glVertexWeighthNV (GLhalfNV);
6672GLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *);
6673GLAPI void APIENTRY glVertexAttrib1hNV (GLuint, GLhalfNV);
6674GLAPI void APIENTRY glVertexAttrib1hvNV (GLuint, const GLhalfNV *);
6675GLAPI void APIENTRY glVertexAttrib2hNV (GLuint, GLhalfNV, GLhalfNV);
6676GLAPI void APIENTRY glVertexAttrib2hvNV (GLuint, const GLhalfNV *);
6677GLAPI void APIENTRY glVertexAttrib3hNV (GLuint, GLhalfNV, GLhalfNV, GLhalfNV);
6678GLAPI void APIENTRY glVertexAttrib3hvNV (GLuint, const GLhalfNV *);
6679GLAPI void APIENTRY glVertexAttrib4hNV (GLuint, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV);
6680GLAPI void APIENTRY glVertexAttrib4hvNV (GLuint, const GLhalfNV *);
6681GLAPI void APIENTRY glVertexAttribs1hvNV (GLuint, GLsizei, const GLhalfNV *);
6682GLAPI void APIENTRY glVertexAttribs2hvNV (GLuint, GLsizei, const GLhalfNV *);
6683GLAPI void APIENTRY glVertexAttribs3hvNV (GLuint, GLsizei, const GLhalfNV *);
6684GLAPI void APIENTRY glVertexAttribs4hvNV (GLuint, GLsizei, const GLhalfNV *);
6685#endif /* GL_GLEXT_PROTOTYPES */
6686typedef void (APIENTRYP PFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y);
6687typedef void (APIENTRYP PFNGLVERTEX2HVNVPROC) (const GLhalfNV *v);
6688typedef void (APIENTRYP PFNGLVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z);
6689typedef void (APIENTRYP PFNGLVERTEX3HVNVPROC) (const GLhalfNV *v);
6690typedef void (APIENTRYP PFNGLVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);
6691typedef void (APIENTRYP PFNGLVERTEX4HVNVPROC) (const GLhalfNV *v);
6692typedef void (APIENTRYP PFNGLNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz);
6693typedef void (APIENTRYP PFNGLNORMAL3HVNVPROC) (const GLhalfNV *v);
6694typedef void (APIENTRYP PFNGLCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue);
6695typedef void (APIENTRYP PFNGLCOLOR3HVNVPROC) (const GLhalfNV *v);
6696typedef void (APIENTRYP PFNGLCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha);
6697typedef void (APIENTRYP PFNGLCOLOR4HVNVPROC) (const GLhalfNV *v);
6698typedef void (APIENTRYP PFNGLTEXCOORD1HNVPROC) (GLhalfNV s);
6699typedef void (APIENTRYP PFNGLTEXCOORD1HVNVPROC) (const GLhalfNV *v);
6700typedef void (APIENTRYP PFNGLTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t);
6701typedef void (APIENTRYP PFNGLTEXCOORD2HVNVPROC) (const GLhalfNV *v);
6702typedef void (APIENTRYP PFNGLTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r);
6703typedef void (APIENTRYP PFNGLTEXCOORD3HVNVPROC) (const GLhalfNV *v);
6704typedef void (APIENTRYP PFNGLTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
6705typedef void (APIENTRYP PFNGLTEXCOORD4HVNVPROC) (const GLhalfNV *v);
6706typedef void (APIENTRYP PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s);
6707typedef void (APIENTRYP PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV *v);
6708typedef void (APIENTRYP PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t);
6709typedef void (APIENTRYP PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV *v);
6710typedef void (APIENTRYP PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r);
6711typedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v);
6712typedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
6713typedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v);
6714typedef void (APIENTRYP PFNGLFOGCOORDHNVPROC) (GLhalfNV fog);
6715typedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC) (const GLhalfNV *fog);
6716typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue);
6717typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v);
6718typedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight);
6719typedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight);
6720typedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x);
6721typedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v);
6722typedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y);
6723typedef void (APIENTRYP PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV *v);
6724typedef void (APIENTRYP PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z);
6725typedef void (APIENTRYP PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV *v);
6726typedef void (APIENTRYP PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);
6727typedef void (APIENTRYP PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV *v);
6728typedef void (APIENTRYP PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
6729typedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
6730typedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
6731typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
6732#endif
6733
6734#ifndef GL_NV_pixel_data_range
6735#define GL_NV_pixel_data_range 1
6736#ifdef GL_GLEXT_PROTOTYPES
6737GLAPI void APIENTRY glPixelDataRangeNV (GLenum, GLsizei, GLvoid *);
6738GLAPI void APIENTRY glFlushPixelDataRangeNV (GLenum);
6739#endif /* GL_GLEXT_PROTOTYPES */
6740typedef void (APIENTRYP PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, GLvoid *pointer);
6741typedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target);
6742#endif
6743
6744#ifndef GL_NV_primitive_restart
6745#define GL_NV_primitive_restart 1
6746#ifdef GL_GLEXT_PROTOTYPES
6747GLAPI void APIENTRY glPrimitiveRestartNV (void);
6748GLAPI void APIENTRY glPrimitiveRestartIndexNV (GLuint);
6749#endif /* GL_GLEXT_PROTOTYPES */
6750typedef void (APIENTRYP PFNGLPRIMITIVERESTARTNVPROC) (void);
6751typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index);
6752#endif
6753
6754#ifndef GL_NV_texture_expand_normal
6755#define GL_NV_texture_expand_normal 1
6756#endif
6757
6758#ifndef GL_NV_vertex_program2
6759#define GL_NV_vertex_program2 1
6760#endif
6761
6762#ifndef GL_ATI_map_object_buffer
6763#define GL_ATI_map_object_buffer 1
6764#ifdef GL_GLEXT_PROTOTYPES
6765GLAPI GLvoid* APIENTRY glMapObjectBufferATI (GLuint);
6766GLAPI void APIENTRY glUnmapObjectBufferATI (GLuint);
6767#endif /* GL_GLEXT_PROTOTYPES */
6768typedef GLvoid* (APIENTRYP PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer);
6769typedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer);
6770#endif
6771
6772#ifndef GL_ATI_separate_stencil
6773#define GL_ATI_separate_stencil 1
6774#ifdef GL_GLEXT_PROTOTYPES
6775GLAPI void APIENTRY glStencilOpSeparateATI (GLenum, GLenum, GLenum, GLenum);
6776GLAPI void APIENTRY glStencilFuncSeparateATI (GLenum, GLenum, GLint, GLuint);
6777#endif /* GL_GLEXT_PROTOTYPES */
6778typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
6779typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
6780#endif
6781
6782#ifndef GL_ATI_vertex_attrib_array_object
6783#define GL_ATI_vertex_attrib_array_object 1
6784#ifdef GL_GLEXT_PROTOTYPES
6785GLAPI void APIENTRY glVertexAttribArrayObjectATI (GLuint, GLint, GLenum, GLboolean, GLsizei, GLuint, GLuint);
6786GLAPI void APIENTRY glGetVertexAttribArrayObjectfvATI (GLuint, GLenum, GLfloat *);
6787GLAPI void APIENTRY glGetVertexAttribArrayObjectivATI (GLuint, GLenum, GLint *);
6788#endif /* GL_GLEXT_PROTOTYPES */
6789typedef void (APIENTRYP PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset);
6790typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat *params);
6791typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params);
6792#endif
6793
6794#ifndef GL_OES_read_format
6795#define GL_OES_read_format 1
6796#endif
6797
6798#ifndef GL_EXT_depth_bounds_test
6799#define GL_EXT_depth_bounds_test 1
6800#ifdef GL_GLEXT_PROTOTYPES
6801GLAPI void APIENTRY glDepthBoundsEXT (GLclampd, GLclampd);
6802#endif /* GL_GLEXT_PROTOTYPES */
6803typedef void (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax);
6804#endif
6805
6806#ifndef GL_EXT_texture_mirror_clamp
6807#define GL_EXT_texture_mirror_clamp 1
6808#endif
6809
6810#ifndef GL_EXT_blend_equation_separate
6811#define GL_EXT_blend_equation_separate 1
6812#ifdef GL_GLEXT_PROTOTYPES
6813GLAPI void APIENTRY glBlendEquationSeparateEXT (GLenum, GLenum);
6814#endif /* GL_GLEXT_PROTOTYPES */
6815typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha);
6816#endif
6817
6818#ifndef GL_MESA_pack_invert
6819#define GL_MESA_pack_invert 1
6820#endif
6821
6822#ifndef GL_MESA_ycbcr_texture
6823#define GL_MESA_ycbcr_texture 1
6824#endif
6825
6826#ifndef GL_EXT_pixel_buffer_object
6827#define GL_EXT_pixel_buffer_object 1
6828#endif
6829
6830#ifndef GL_NV_fragment_program_option
6831#define GL_NV_fragment_program_option 1
6832#endif
6833
6834#ifndef GL_NV_fragment_program2
6835#define GL_NV_fragment_program2 1
6836#endif
6837
6838#ifndef GL_NV_vertex_program2_option
6839#define GL_NV_vertex_program2_option 1
6840#endif
6841
6842#ifndef GL_NV_vertex_program3
6843#define GL_NV_vertex_program3 1
6844#endif
6845
6846#ifndef GL_EXT_framebuffer_object
6847#define GL_EXT_framebuffer_object 1
6848#ifdef GL_GLEXT_PROTOTYPES
6849GLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint);
6850GLAPI void APIENTRY glBindRenderbufferEXT (GLenum, GLuint);
6851GLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei, const GLuint *);
6852GLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei, GLuint *);
6853GLAPI void APIENTRY glRenderbufferStorageEXT (GLenum, GLenum, GLsizei, GLsizei);
6854GLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum, GLenum, GLint *);
6855GLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint);
6856GLAPI void APIENTRY glBindFramebufferEXT (GLenum, GLuint);
6857GLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei, const GLuint *);
6858GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei, GLuint *);
6859GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum);
6860GLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum, GLenum, GLenum, GLuint, GLint);
6861GLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum, GLenum, GLenum, GLuint, GLint);
6862GLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum, GLenum, GLenum, GLuint, GLint, GLint);
6863GLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum, GLenum, GLenum, GLuint);
6864GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum, GLenum, GLenum, GLint *);
6865GLAPI void APIENTRY glGenerateMipmapEXT (GLenum);
6866#endif /* GL_GLEXT_PROTOTYPES */
6867typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer);
6868typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer);
6869typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers);
6870typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers);
6871typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
6872typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
6873typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer);
6874typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer);
6875typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers);
6876typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers);
6877typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target);
6878typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
6879typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
6880typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
6881typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
6882typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params);
6883typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target);
6884#endif
6885
6886#ifndef GL_GREMEDY_string_marker
6887#define GL_GREMEDY_string_marker 1
6888#ifdef GL_GLEXT_PROTOTYPES
6889GLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei, const GLvoid *);
6890#endif /* GL_GLEXT_PROTOTYPES */
6891typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const GLvoid *string);
6892#endif
6893
6894#ifndef GL_EXT_packed_depth_stencil
6895#define GL_EXT_packed_depth_stencil 1
6896#endif
6897
6898#ifndef GL_EXT_stencil_clear_tag
6899#define GL_EXT_stencil_clear_tag 1
6900#ifdef GL_GLEXT_PROTOTYPES
6901GLAPI void APIENTRY glStencilClearTagEXT (GLsizei, GLuint);
6902#endif /* GL_GLEXT_PROTOTYPES */
6903typedef void (APIENTRYP PFNGLSTENCILCLEARTAGEXTPROC) (GLsizei stencilTagBits, GLuint stencilClearTag);
6904#endif
6905
6906#ifndef GL_EXT_texture_sRGB
6907#define GL_EXT_texture_sRGB 1
6908#endif
6909
6910#ifndef GL_EXT_framebuffer_blit
6911#define GL_EXT_framebuffer_blit 1
6912#ifdef GL_GLEXT_PROTOTYPES
6913GLAPI void APIENTRY glBlitFramebufferEXT (GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum);
6914#endif /* GL_GLEXT_PROTOTYPES */
6915typedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
6916#endif
6917
6918#ifndef GL_EXT_framebuffer_multisample
6919#define GL_EXT_framebuffer_multisample 1
6920#ifdef GL_GLEXT_PROTOTYPES
6921GLAPI void APIENTRY glRenderbufferStorageMultisampleEXT (GLenum, GLsizei, GLenum, GLsizei, GLsizei);
6922#endif /* GL_GLEXT_PROTOTYPES */
6923typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
6924#endif
6925
6926#ifndef GL_MESAX_texture_stack
6927#define GL_MESAX_texture_stack 1
6928#endif
6929
6930#ifndef GL_EXT_timer_query
6931#define GL_EXT_timer_query 1
6932#ifdef GL_GLEXT_PROTOTYPES
6933GLAPI void APIENTRY glGetQueryObjecti64vEXT (GLuint, GLenum, GLint64EXT *);
6934GLAPI void APIENTRY glGetQueryObjectui64vEXT (GLuint, GLenum, GLuint64EXT *);
6935#endif /* GL_GLEXT_PROTOTYPES */
6936typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64EXT *params);
6937typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64EXT *params);
6938#endif
6939
6940#ifndef GL_EXT_gpu_program_parameters
6941#define GL_EXT_gpu_program_parameters 1
6942#ifdef GL_GLEXT_PROTOTYPES
6943GLAPI void APIENTRY glProgramEnvParameters4fvEXT (GLenum, GLuint, GLsizei, const GLfloat *);
6944GLAPI void APIENTRY glProgramLocalParameters4fvEXT (GLenum, GLuint, GLsizei, const GLfloat *);
6945#endif /* GL_GLEXT_PROTOTYPES */
6946typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params);
6947typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params);
6948#endif
6949
6950#ifndef GL_APPLE_flush_buffer_range
6951#define GL_APPLE_flush_buffer_range 1
6952#ifdef GL_GLEXT_PROTOTYPES
6953GLAPI void APIENTRY glBufferParameteriAPPLE (GLenum, GLenum, GLint);
6954GLAPI void APIENTRY glFlushMappedBufferRangeAPPLE (GLenum, GLintptr, GLsizeiptr);
6955#endif /* GL_GLEXT_PROTOTYPES */
6956typedef void (APIENTRYP PFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param);
6957typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size);
6958#endif
6959
6960#ifndef GL_NV_gpu_program4
6961#define GL_NV_gpu_program4 1
6962#ifdef GL_GLEXT_PROTOTYPES
6963GLAPI void APIENTRY glProgramLocalParameterI4iNV (GLenum, GLuint, GLint, GLint, GLint, GLint);
6964GLAPI void APIENTRY glProgramLocalParameterI4ivNV (GLenum, GLuint, const GLint *);
6965GLAPI void APIENTRY glProgramLocalParametersI4ivNV (GLenum, GLuint, GLsizei, const GLint *);
6966GLAPI void APIENTRY glProgramLocalParameterI4uiNV (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint);
6967GLAPI void APIENTRY glProgramLocalParameterI4uivNV (GLenum, GLuint, const GLuint *);
6968GLAPI void APIENTRY glProgramLocalParametersI4uivNV (GLenum, GLuint, GLsizei, const GLuint *);
6969GLAPI void APIENTRY glProgramEnvParameterI4iNV (GLenum, GLuint, GLint, GLint, GLint, GLint);
6970GLAPI void APIENTRY glProgramEnvParameterI4ivNV (GLenum, GLuint, const GLint *);
6971GLAPI void APIENTRY glProgramEnvParametersI4ivNV (GLenum, GLuint, GLsizei, const GLint *);
6972GLAPI void APIENTRY glProgramEnvParameterI4uiNV (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint);
6973GLAPI void APIENTRY glProgramEnvParameterI4uivNV (GLenum, GLuint, const GLuint *);
6974GLAPI void APIENTRY glProgramEnvParametersI4uivNV (GLenum, GLuint, GLsizei, const GLuint *);
6975GLAPI void APIENTRY glGetProgramLocalParameterIivNV (GLenum, GLuint, GLint *);
6976GLAPI void APIENTRY glGetProgramLocalParameterIuivNV (GLenum, GLuint, GLuint *);
6977GLAPI void APIENTRY glGetProgramEnvParameterIivNV (GLenum, GLuint, GLint *);
6978GLAPI void APIENTRY glGetProgramEnvParameterIuivNV (GLenum, GLuint, GLuint *);
6979#endif /* GL_GLEXT_PROTOTYPES */
6980typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);
6981typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params);
6982typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params);
6983typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
6984typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params);
6985typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params);
6986typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);
6987typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params);
6988typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params);
6989typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
6990typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params);
6991typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params);
6992typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params);
6993typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params);
6994typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params);
6995typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params);
6996#endif
6997
6998#ifndef GL_NV_geometry_program4
6999#define GL_NV_geometry_program4 1
7000#ifdef GL_GLEXT_PROTOTYPES
7001GLAPI void APIENTRY glProgramVertexLimitNV (GLenum, GLint);
7002GLAPI void APIENTRY glFramebufferTextureEXT (GLenum, GLenum, GLuint, GLint);
7003GLAPI void APIENTRY glFramebufferTextureLayerEXT (GLenum, GLenum, GLuint, GLint, GLint);
7004GLAPI void APIENTRY glFramebufferTextureFaceEXT (GLenum, GLenum, GLuint, GLint, GLenum);
7005#endif /* GL_GLEXT_PROTOTYPES */
7006typedef void (APIENTRYP PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint limit);
7007typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level);
7008typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
7009typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face);
7010#endif
7011
7012#ifndef GL_EXT_geometry_shader4
7013#define GL_EXT_geometry_shader4 1
7014#ifdef GL_GLEXT_PROTOTYPES
7015GLAPI void APIENTRY glProgramParameteriEXT (GLuint, GLenum, GLint);
7016#endif /* GL_GLEXT_PROTOTYPES */
7017typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value);
7018#endif
7019
7020#ifndef GL_NV_vertex_program4
7021#define GL_NV_vertex_program4 1
7022#ifdef GL_GLEXT_PROTOTYPES
7023GLAPI void APIENTRY glVertexAttribI1iEXT (GLuint, GLint);
7024GLAPI void APIENTRY glVertexAttribI2iEXT (GLuint, GLint, GLint);
7025GLAPI void APIENTRY glVertexAttribI3iEXT (GLuint, GLint, GLint, GLint);
7026GLAPI void APIENTRY glVertexAttribI4iEXT (GLuint, GLint, GLint, GLint, GLint);
7027GLAPI void APIENTRY glVertexAttribI1uiEXT (GLuint, GLuint);
7028GLAPI void APIENTRY glVertexAttribI2uiEXT (GLuint, GLuint, GLuint);
7029GLAPI void APIENTRY glVertexAttribI3uiEXT (GLuint, GLuint, GLuint, GLuint);
7030GLAPI void APIENTRY glVertexAttribI4uiEXT (GLuint, GLuint, GLuint, GLuint, GLuint);
7031GLAPI void APIENTRY glVertexAttribI1ivEXT (GLuint, const GLint *);
7032GLAPI void APIENTRY glVertexAttribI2ivEXT (GLuint, const GLint *);
7033GLAPI void APIENTRY glVertexAttribI3ivEXT (GLuint, const GLint *);
7034GLAPI void APIENTRY glVertexAttribI4ivEXT (GLuint, const GLint *);
7035GLAPI void APIENTRY glVertexAttribI1uivEXT (GLuint, const GLuint *);
7036GLAPI void APIENTRY glVertexAttribI2uivEXT (GLuint, const GLuint *);
7037GLAPI void APIENTRY glVertexAttribI3uivEXT (GLuint, const GLuint *);
7038GLAPI void APIENTRY glVertexAttribI4uivEXT (GLuint, const GLuint *);
7039GLAPI void APIENTRY glVertexAttribI4bvEXT (GLuint, const GLbyte *);
7040GLAPI void APIENTRY glVertexAttribI4svEXT (GLuint, const GLshort *);
7041GLAPI void APIENTRY glVertexAttribI4ubvEXT (GLuint, const GLubyte *);
7042GLAPI void APIENTRY glVertexAttribI4usvEXT (GLuint, const GLushort *);
7043GLAPI void APIENTRY glVertexAttribIPointerEXT (GLuint, GLint, GLenum, GLsizei, const GLvoid *);
7044GLAPI void APIENTRY glGetVertexAttribIivEXT (GLuint, GLenum, GLint *);
7045GLAPI void APIENTRY glGetVertexAttribIuivEXT (GLuint, GLenum, GLuint *);
7046#endif /* GL_GLEXT_PROTOTYPES */
7047typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IEXTPROC) (GLuint index, GLint x);
7048typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y);
7049typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IEXTPROC) (GLuint index, GLint x, GLint y, GLint z);
7050typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IEXTPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w);
7051typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIEXTPROC) (GLuint index, GLuint x);
7052typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIEXTPROC) (GLuint index, GLuint x, GLuint y);
7053typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z);
7054typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
7055typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVEXTPROC) (GLuint index, const GLint *v);
7056typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVEXTPROC) (GLuint index, const GLint *v);
7057typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVEXTPROC) (GLuint index, const GLint *v);
7058typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVEXTPROC) (GLuint index, const GLint *v);
7059typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVEXTPROC) (GLuint index, const GLuint *v);
7060typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVEXTPROC) (GLuint index, const GLuint *v);
7061typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVEXTPROC) (GLuint index, const GLuint *v);
7062typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVEXTPROC) (GLuint index, const GLuint *v);
7063typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVEXTPROC) (GLuint index, const GLbyte *v);
7064typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVEXTPROC) (GLuint index, const GLshort *v);
7065typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVEXTPROC) (GLuint index, const GLubyte *v);
7066typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVEXTPROC) (GLuint index, const GLushort *v);
7067typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
7068typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVEXTPROC) (GLuint index, GLenum pname, GLint *params);
7069typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum pname, GLuint *params);
7070#endif
7071
7072#ifndef GL_EXT_gpu_shader4
7073#define GL_EXT_gpu_shader4 1
7074#ifdef GL_GLEXT_PROTOTYPES
7075GLAPI void APIENTRY glGetUniformuivEXT (GLuint, GLint, GLuint *);
7076GLAPI void APIENTRY glBindFragDataLocationEXT (GLuint, GLuint, const GLchar *);
7077GLAPI GLint APIENTRY glGetFragDataLocationEXT (GLuint, const GLchar *);
7078GLAPI void APIENTRY glUniform1uiEXT (GLint, GLuint);
7079GLAPI void APIENTRY glUniform2uiEXT (GLint, GLuint, GLuint);
7080GLAPI void APIENTRY glUniform3uiEXT (GLint, GLuint, GLuint, GLuint);
7081GLAPI void APIENTRY glUniform4uiEXT (GLint, GLuint, GLuint, GLuint, GLuint);
7082GLAPI void APIENTRY glUniform1uivEXT (GLint, GLsizei, const GLuint *);
7083GLAPI void APIENTRY glUniform2uivEXT (GLint, GLsizei, const GLuint *);
7084GLAPI void APIENTRY glUniform3uivEXT (GLint, GLsizei, const GLuint *);
7085GLAPI void APIENTRY glUniform4uivEXT (GLint, GLsizei, const GLuint *);
7086#endif /* GL_GLEXT_PROTOTYPES */
7087typedef void (APIENTRYP PFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint *params);
7088typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name);
7089typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar *name);
7090typedef void (APIENTRYP PFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0);
7091typedef void (APIENTRYP PFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1);
7092typedef void (APIENTRYP PFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2);
7093typedef void (APIENTRYP PFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
7094typedef void (APIENTRYP PFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);
7095typedef void (APIENTRYP PFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);
7096typedef void (APIENTRYP PFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);
7097typedef void (APIENTRYP PFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);
7098#endif
7099
7100#ifndef GL_EXT_draw_instanced
7101#define GL_EXT_draw_instanced 1
7102#ifdef GL_GLEXT_PROTOTYPES
7103GLAPI void APIENTRY glDrawArraysInstancedEXT (GLenum, GLint, GLsizei, GLsizei);
7104GLAPI void APIENTRY glDrawElementsInstancedEXT (GLenum, GLsizei, GLenum, const GLvoid *, GLsizei);
7105#endif /* GL_GLEXT_PROTOTYPES */
7106typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount);
7107typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount);
7108#endif
7109
7110#ifndef GL_EXT_packed_float
7111#define GL_EXT_packed_float 1
7112#endif
7113
7114#ifndef GL_EXT_texture_array
7115#define GL_EXT_texture_array 1
7116#endif
7117
7118#ifndef GL_EXT_texture_buffer_object
7119#define GL_EXT_texture_buffer_object 1
7120#ifdef GL_GLEXT_PROTOTYPES
7121GLAPI void APIENTRY glTexBufferEXT (GLenum, GLenum, GLuint);
7122#endif /* GL_GLEXT_PROTOTYPES */
7123typedef void (APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer);
7124#endif
7125
7126#ifndef GL_EXT_texture_compression_latc
7127#define GL_EXT_texture_compression_latc 1
7128#endif
7129
7130#ifndef GL_EXT_texture_compression_rgtc
7131#define GL_EXT_texture_compression_rgtc 1
7132#endif
7133
7134#ifndef GL_EXT_texture_shared_exponent
7135#define GL_EXT_texture_shared_exponent 1
7136#endif
7137
7138#ifndef GL_NV_depth_buffer_float
7139#define GL_NV_depth_buffer_float 1
7140#ifdef GL_GLEXT_PROTOTYPES
7141GLAPI void APIENTRY glDepthRangedNV (GLdouble, GLdouble);
7142GLAPI void APIENTRY glClearDepthdNV (GLdouble);
7143GLAPI void APIENTRY glDepthBoundsdNV (GLdouble, GLdouble);
7144#endif /* GL_GLEXT_PROTOTYPES */
7145typedef void (APIENTRYP PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar);
7146typedef void (APIENTRYP PFNGLCLEARDEPTHDNVPROC) (GLdouble depth);
7147typedef void (APIENTRYP PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax);
7148#endif
7149
7150#ifndef GL_NV_fragment_program4
7151#define GL_NV_fragment_program4 1
7152#endif
7153
7154#ifndef GL_NV_framebuffer_multisample_coverage
7155#define GL_NV_framebuffer_multisample_coverage 1
7156#ifdef GL_GLEXT_PROTOTYPES
7157GLAPI void APIENTRY glRenderbufferStorageMultisampleCoverageNV (GLenum, GLsizei, GLsizei, GLenum, GLsizei, GLsizei);
7158#endif /* GL_GLEXT_PROTOTYPES */
7159typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height);
7160#endif
7161
7162#ifndef GL_EXT_framebuffer_sRGB
7163#define GL_EXT_framebuffer_sRGB 1
7164#endif
7165
7166#ifndef GL_NV_geometry_shader4
7167#define GL_NV_geometry_shader4 1
7168#endif
7169
7170#ifndef GL_NV_parameter_buffer_object
7171#define GL_NV_parameter_buffer_object 1
7172#ifdef GL_GLEXT_PROTOTYPES
7173GLAPI void APIENTRY glProgramBufferParametersfvNV (GLenum, GLuint, GLuint, GLsizei, const GLfloat *);
7174GLAPI void APIENTRY glProgramBufferParametersIivNV (GLenum, GLuint, GLuint, GLsizei, const GLint *);
7175GLAPI void APIENTRY glProgramBufferParametersIuivNV (GLenum, GLuint, GLuint, GLsizei, const GLuint *);
7176#endif /* GL_GLEXT_PROTOTYPES */
7177typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLfloat *params);
7178typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLint *params);
7179typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLuint *params);
7180#endif
7181
7182#ifndef GL_EXT_draw_buffers2
7183#define GL_EXT_draw_buffers2 1
7184#ifdef GL_GLEXT_PROTOTYPES
7185GLAPI void APIENTRY glColorMaskIndexedEXT (GLuint, GLboolean, GLboolean, GLboolean, GLboolean);
7186GLAPI void APIENTRY glGetBooleanIndexedvEXT (GLenum, GLuint, GLboolean *);
7187GLAPI void APIENTRY glGetIntegerIndexedvEXT (GLenum, GLuint, GLint *);
7188GLAPI void APIENTRY glEnableIndexedEXT (GLenum, GLuint);
7189GLAPI void APIENTRY glDisableIndexedEXT (GLenum, GLuint);
7190GLAPI GLboolean APIENTRY glIsEnabledIndexedEXT (GLenum, GLuint);
7191#endif /* GL_GLEXT_PROTOTYPES */
7192typedef void (APIENTRYP PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
7193typedef void (APIENTRYP PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum target, GLuint index, GLboolean *data);
7194typedef void (APIENTRYP PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLint *data);
7195typedef void (APIENTRYP PFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index);
7196typedef void (APIENTRYP PFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index);
7197typedef GLboolean (APIENTRYP PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index);
7198#endif
7199
7200#ifndef GL_NV_transform_feedback
7201#define GL_NV_transform_feedback 1
7202#ifdef GL_GLEXT_PROTOTYPES
7203GLAPI void APIENTRY glBeginTransformFeedbackNV (GLenum);
7204GLAPI void APIENTRY glEndTransformFeedbackNV (void);
7205GLAPI void APIENTRY glTransformFeedbackAttribsNV (GLuint, const GLint *, GLenum);
7206GLAPI void APIENTRY glBindBufferRangeNV (GLenum, GLuint, GLuint, GLintptr, GLsizeiptr);
7207GLAPI void APIENTRY glBindBufferOffsetNV (GLenum, GLuint, GLuint, GLintptr);
7208GLAPI void APIENTRY glBindBufferBaseNV (GLenum, GLuint, GLuint);
7209GLAPI void APIENTRY glTransformFeedbackVaryingsNV (GLuint, GLsizei, const GLint *, GLenum);
7210GLAPI void APIENTRY glActiveVaryingNV (GLuint, const GLchar *);
7211GLAPI GLint APIENTRY glGetVaryingLocationNV (GLuint, const GLchar *);
7212GLAPI void APIENTRY glGetActiveVaryingNV (GLuint, GLuint, GLsizei, GLsizei *, GLsizei *, GLenum *, GLchar *);
7213GLAPI void APIENTRY glGetTransformFeedbackVaryingNV (GLuint, GLuint, GLint *);
7214#endif /* GL_GLEXT_PROTOTYPES */
7215typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode);
7216typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKNVPROC) (void);
7217typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLuint count, const GLint *attribs, GLenum bufferMode);
7218typedef void (APIENTRYP PFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
7219typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset);
7220typedef void (APIENTRYP PFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer);
7221typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode);
7222typedef void (APIENTRYP PFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar *name);
7223typedef GLint (APIENTRYP PFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar *name);
7224typedef void (APIENTRYP PFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
7225typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint *location);
7226#endif
7227
7228#ifndef GL_EXT_bindable_uniform
7229#define GL_EXT_bindable_uniform 1
7230#ifdef GL_GLEXT_PROTOTYPES
7231GLAPI void APIENTRY glUniformBufferEXT (GLuint, GLint, GLuint);
7232GLAPI GLint APIENTRY glGetUniformBufferSizeEXT (GLuint, GLint);
7233GLAPI GLintptr APIENTRY glGetUniformOffsetEXT (GLuint, GLint);
7234#endif /* GL_GLEXT_PROTOTYPES */
7235typedef void (APIENTRYP PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer);
7236typedef GLint (APIENTRYP PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location);
7237typedef GLintptr (APIENTRYP PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location);
7238#endif
7239
7240#ifndef GL_EXT_texture_integer
7241#define GL_EXT_texture_integer 1
7242#ifdef GL_GLEXT_PROTOTYPES
7243GLAPI void APIENTRY glTexParameterIivEXT (GLenum, GLenum, const GLint *);
7244GLAPI void APIENTRY glTexParameterIuivEXT (GLenum, GLenum, const GLuint *);
7245GLAPI void APIENTRY glGetTexParameterIivEXT (GLenum, GLenum, GLint *);
7246GLAPI void APIENTRY glGetTexParameterIuivEXT (GLenum, GLenum, GLuint *);
7247GLAPI void APIENTRY glClearColorIiEXT (GLint, GLint, GLint, GLint);
7248GLAPI void APIENTRY glClearColorIuiEXT (GLuint, GLuint, GLuint, GLuint);
7249#endif /* GL_GLEXT_PROTOTYPES */
7250typedef void (APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);
7251typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params);
7252typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
7253typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params);
7254typedef void (APIENTRYP PFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha);
7255typedef void (APIENTRYP PFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha);
7256#endif
7257
7258#ifndef GL_GREMEDY_frame_terminator
7259#define GL_GREMEDY_frame_terminator 1
7260#ifdef GL_GLEXT_PROTOTYPES
7261GLAPI void APIENTRY glFrameTerminatorGREMEDY (void);
7262#endif /* GL_GLEXT_PROTOTYPES */
7263typedef void (APIENTRYP PFNGLFRAMETERMINATORGREMEDYPROC) (void);
7264#endif
7265
7266
7267#ifdef __cplusplus
7268}
7269#endif
7270
7271#endif
diff --git a/linden/libraries/i686-win32/include/GL/glut.h b/linden/libraries/i686-win32/include/GL/glut.h
new file mode 100644
index 0000000..e0692ad
--- /dev/null
+++ b/linden/libraries/i686-win32/include/GL/glut.h
@@ -0,0 +1,596 @@
1#ifndef __glut_h__
2#define __glut_h__
3
4/* Copyright (c) Mark J. Kilgard, 1994, 1995, 1996, 1998. */
5
6/* This program is freely distributable without licensing fees and is
7 provided without guarantee or warrantee expressed or implied. This
8 program is -not- in the public domain. */
9
10#if defined(_WIN32)
11
12/* GLUT 3.7 now tries to avoid including <windows.h>
13 to avoid name space pollution, but Win32's <GL/gl.h>
14 needs APIENTRY and WINGDIAPI defined properly. */
15# if 0
16# define WIN32_LEAN_AND_MEAN
17# include <windows.h>
18# else
19 /* XXX This is from Win32's <windef.h> */
20# ifndef APIENTRY
21# define GLUT_APIENTRY_DEFINED
22# if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)
23# define APIENTRY __stdcall
24# else
25# define APIENTRY
26# endif
27# endif
28 /* XXX This is from Win32's <winnt.h> */
29# ifndef CALLBACK
30# if (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS)
31# define CALLBACK __stdcall
32# else
33# define CALLBACK
34# endif
35# endif
36 /* XXX This is from Win32's <wingdi.h> and <winnt.h> */
37# ifndef WINGDIAPI
38# define GLUT_WINGDIAPI_DEFINED
39# define WINGDIAPI __declspec(dllimport)
40# endif
41 /* XXX This is from Win32's <ctype.h> */
42# ifndef _WCHAR_T_DEFINED
43typedef unsigned short wchar_t;
44# define _WCHAR_T_DEFINED
45# endif
46# endif
47
48#pragma comment (lib, "winmm.lib") /* link with Windows MultiMedia lib */
49#pragma comment (lib, "opengl32.lib") /* link with Microsoft OpenGL lib */
50#pragma comment (lib, "glu32.lib") /* link with OpenGL Utility lib */
51#pragma comment (lib, "glut32.lib") /* link with Win32 GLUT lib */
52
53#pragma warning (disable:4244) /* Disable bogus conversion warnings. */
54#pragma warning (disable:4305) /* VC++ 5.0 version of above warning. */
55
56#endif
57
58#include <GL/gl.h>
59#include <GL/glu.h>
60
61/* define APIENTRY and CALLBACK to null string if we aren't on Win32 */
62#if !defined(_WIN32)
63#define APIENTRY
64#define GLUT_APIENTRY_DEFINED
65#define CALLBACK
66#endif
67
68#ifdef __cplusplus
69extern "C" {
70#endif
71
72/**
73 GLUT API revision history:
74
75 GLUT_API_VERSION is updated to reflect incompatible GLUT
76 API changes (interface changes, semantic changes, deletions,
77 or additions).
78
79 GLUT_API_VERSION=1 First public release of GLUT. 11/29/94
80
81 GLUT_API_VERSION=2 Added support for OpenGL/GLX multisampling,
82 extension. Supports new input devices like tablet, dial and button
83 box, and Spaceball. Easy to query OpenGL extensions.
84
85 GLUT_API_VERSION=3 glutMenuStatus added.
86
87 GLUT_API_VERSION=4 glutInitDisplayString, glutWarpPointer,
88 glutBitmapLength, glutStrokeLength, glutWindowStatusFunc, dynamic
89 video resize subAPI, glutPostWindowRedisplay, glutKeyboardUpFunc,
90 glutSpecialUpFunc, glutIgnoreKeyRepeat, glutSetKeyRepeat,
91 glutJoystickFunc, glutForceJoystickFunc (NOT FINALIZED!).
92**/
93#ifndef GLUT_API_VERSION /* allow this to be overriden */
94#define GLUT_API_VERSION 3
95#endif
96
97/**
98 GLUT implementation revision history:
99
100 GLUT_XLIB_IMPLEMENTATION is updated to reflect both GLUT
101 API revisions and implementation revisions (ie, bug fixes).
102
103 GLUT_XLIB_IMPLEMENTATION=1 mjk's first public release of
104 GLUT Xlib-based implementation. 11/29/94
105
106 GLUT_XLIB_IMPLEMENTATION=2 mjk's second public release of
107 GLUT Xlib-based implementation providing GLUT version 2
108 interfaces.
109
110 GLUT_XLIB_IMPLEMENTATION=3 mjk's GLUT 2.2 images. 4/17/95
111
112 GLUT_XLIB_IMPLEMENTATION=4 mjk's GLUT 2.3 images. 6/?/95
113
114 GLUT_XLIB_IMPLEMENTATION=5 mjk's GLUT 3.0 images. 10/?/95
115
116 GLUT_XLIB_IMPLEMENTATION=7 mjk's GLUT 3.1+ with glutWarpPoitner. 7/24/96
117
118 GLUT_XLIB_IMPLEMENTATION=8 mjk's GLUT 3.1+ with glutWarpPoitner
119 and video resize. 1/3/97
120
121 GLUT_XLIB_IMPLEMENTATION=9 mjk's GLUT 3.4 release with early GLUT 4 routines.
122
123 GLUT_XLIB_IMPLEMENTATION=11 Mesa 2.5's GLUT 3.6 release.
124
125 GLUT_XLIB_IMPLEMENTATION=12 mjk's GLUT 3.6 release with early GLUT 4 routines + signal handling.
126
127 GLUT_XLIB_IMPLEMENTATION=13 mjk's GLUT 3.7 release with GameGLUT support.
128**/
129#ifndef GLUT_XLIB_IMPLEMENTATION /* Allow this to be overriden. */
130#define GLUT_XLIB_IMPLEMENTATION 13
131#endif
132
133/* Display mode bit masks. */
134#define GLUT_RGB 0
135#define GLUT_RGBA GLUT_RGB
136#define GLUT_INDEX 1
137#define GLUT_SINGLE 0
138#define GLUT_DOUBLE 2
139#define GLUT_ACCUM 4
140#define GLUT_ALPHA 8
141#define GLUT_DEPTH 16
142#define GLUT_STENCIL 32
143#if (GLUT_API_VERSION >= 2)
144#define GLUT_MULTISAMPLE 128
145#define GLUT_STEREO 256
146#endif
147#if (GLUT_API_VERSION >= 3)
148#define GLUT_LUMINANCE 512
149#endif
150
151/* Mouse buttons. */
152#define GLUT_LEFT_BUTTON 0
153#define GLUT_MIDDLE_BUTTON 1
154#define GLUT_RIGHT_BUTTON 2
155
156/* Mouse button state. */
157#define GLUT_DOWN 0
158#define GLUT_UP 1
159
160#if (GLUT_API_VERSION >= 2)
161/* function keys */
162#define GLUT_KEY_F1 1
163#define GLUT_KEY_F2 2
164#define GLUT_KEY_F3 3
165#define GLUT_KEY_F4 4
166#define GLUT_KEY_F5 5
167#define GLUT_KEY_F6 6
168#define GLUT_KEY_F7 7
169#define GLUT_KEY_F8 8
170#define GLUT_KEY_F9 9
171#define GLUT_KEY_F10 10
172#define GLUT_KEY_F11 11
173#define GLUT_KEY_F12 12
174/* directional keys */
175#define GLUT_KEY_LEFT 100
176#define GLUT_KEY_UP 101
177#define GLUT_KEY_RIGHT 102
178#define GLUT_KEY_DOWN 103
179#define GLUT_KEY_PAGE_UP 104
180#define GLUT_KEY_PAGE_DOWN 105
181#define GLUT_KEY_HOME 106
182#define GLUT_KEY_END 107
183#define GLUT_KEY_INSERT 108
184#endif
185
186/* Entry/exit state. */
187#define GLUT_LEFT 0
188#define GLUT_ENTERED 1
189
190/* Menu usage state. */
191#define GLUT_MENU_NOT_IN_USE 0
192#define GLUT_MENU_IN_USE 1
193
194/* Visibility state. */
195#define GLUT_NOT_VISIBLE 0
196#define GLUT_VISIBLE 1
197
198/* Window status state. */
199#define GLUT_HIDDEN 0
200#define GLUT_FULLY_RETAINED 1
201#define GLUT_PARTIALLY_RETAINED 2
202#define GLUT_FULLY_COVERED 3
203
204/* Color index component selection values. */
205#define GLUT_RED 0
206#define GLUT_GREEN 1
207#define GLUT_BLUE 2
208
209/* Layers for use. */
210#define GLUT_NORMAL 0
211#define GLUT_OVERLAY 1
212
213#if defined(_WIN32)
214/* Stroke font constants (use these in GLUT program). */
215#define GLUT_STROKE_ROMAN ((void*)0)
216#define GLUT_STROKE_MONO_ROMAN ((void*)1)
217
218/* Bitmap font constants (use these in GLUT program). */
219#define GLUT_BITMAP_9_BY_15 ((void*)2)
220#define GLUT_BITMAP_8_BY_13 ((void*)3)
221#define GLUT_BITMAP_TIMES_ROMAN_10 ((void*)4)
222#define GLUT_BITMAP_TIMES_ROMAN_24 ((void*)5)
223#if (GLUT_API_VERSION >= 3)
224#define GLUT_BITMAP_HELVETICA_10 ((void*)6)
225#define GLUT_BITMAP_HELVETICA_12 ((void*)7)
226#define GLUT_BITMAP_HELVETICA_18 ((void*)8)
227#endif
228#else
229/* Stroke font opaque addresses (use constants instead in source code). */
230extern void *glutStrokeRoman;
231extern void *glutStrokeMonoRoman;
232
233/* Stroke font constants (use these in GLUT program). */
234#define GLUT_STROKE_ROMAN (&glutStrokeRoman)
235#define GLUT_STROKE_MONO_ROMAN (&glutStrokeMonoRoman)
236
237/* Bitmap font opaque addresses (use constants instead in source code). */
238extern void *glutBitmap9By15;
239extern void *glutBitmap8By13;
240extern void *glutBitmapTimesRoman10;
241extern void *glutBitmapTimesRoman24;
242extern void *glutBitmapHelvetica10;
243extern void *glutBitmapHelvetica12;
244extern void *glutBitmapHelvetica18;
245
246/* Bitmap font constants (use these in GLUT program). */
247#define GLUT_BITMAP_9_BY_15 (&glutBitmap9By15)
248#define GLUT_BITMAP_8_BY_13 (&glutBitmap8By13)
249#define GLUT_BITMAP_TIMES_ROMAN_10 (&glutBitmapTimesRoman10)
250#define GLUT_BITMAP_TIMES_ROMAN_24 (&glutBitmapTimesRoman24)
251#if (GLUT_API_VERSION >= 3)
252#define GLUT_BITMAP_HELVETICA_10 (&glutBitmapHelvetica10)
253#define GLUT_BITMAP_HELVETICA_12 (&glutBitmapHelvetica12)
254#define GLUT_BITMAP_HELVETICA_18 (&glutBitmapHelvetica18)
255#endif
256#endif
257
258/* glutGet parameters. */
259#define GLUT_WINDOW_X 100
260#define GLUT_WINDOW_Y 101
261#define GLUT_WINDOW_WIDTH 102
262#define GLUT_WINDOW_HEIGHT 103
263#define GLUT_WINDOW_BUFFER_SIZE 104
264#define GLUT_WINDOW_STENCIL_SIZE 105
265#define GLUT_WINDOW_DEPTH_SIZE 106
266#define GLUT_WINDOW_RED_SIZE 107
267#define GLUT_WINDOW_GREEN_SIZE 108
268#define GLUT_WINDOW_BLUE_SIZE 109
269#define GLUT_WINDOW_ALPHA_SIZE 110
270#define GLUT_WINDOW_ACCUM_RED_SIZE 111
271#define GLUT_WINDOW_ACCUM_GREEN_SIZE 112
272#define GLUT_WINDOW_ACCUM_BLUE_SIZE 113
273#define GLUT_WINDOW_ACCUM_ALPHA_SIZE 114
274#define GLUT_WINDOW_DOUBLEBUFFER 115
275#define GLUT_WINDOW_RGBA 116
276#define GLUT_WINDOW_PARENT 117
277#define GLUT_WINDOW_NUM_CHILDREN 118
278#define GLUT_WINDOW_COLORMAP_SIZE 119
279#if (GLUT_API_VERSION >= 2)
280#define GLUT_WINDOW_NUM_SAMPLES 120
281#define GLUT_WINDOW_STEREO 121
282#endif
283#if (GLUT_API_VERSION >= 3)
284#define GLUT_WINDOW_CURSOR 122
285#endif
286#define GLUT_SCREEN_WIDTH 200
287#define GLUT_SCREEN_HEIGHT 201
288#define GLUT_SCREEN_WIDTH_MM 202
289#define GLUT_SCREEN_HEIGHT_MM 203
290#define GLUT_MENU_NUM_ITEMS 300
291#define GLUT_DISPLAY_MODE_POSSIBLE 400
292#define GLUT_INIT_WINDOW_X 500
293#define GLUT_INIT_WINDOW_Y 501
294#define GLUT_INIT_WINDOW_WIDTH 502
295#define GLUT_INIT_WINDOW_HEIGHT 503
296#define GLUT_INIT_DISPLAY_MODE 504
297#if (GLUT_API_VERSION >= 2)
298#define GLUT_ELAPSED_TIME 700
299#endif
300#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)
301#define GLUT_WINDOW_FORMAT_ID 123
302#endif
303
304#if (GLUT_API_VERSION >= 2)
305/* glutDeviceGet parameters. */
306#define GLUT_HAS_KEYBOARD 600
307#define GLUT_HAS_MOUSE 601
308#define GLUT_HAS_SPACEBALL 602
309#define GLUT_HAS_DIAL_AND_BUTTON_BOX 603
310#define GLUT_HAS_TABLET 604
311#define GLUT_NUM_MOUSE_BUTTONS 605
312#define GLUT_NUM_SPACEBALL_BUTTONS 606
313#define GLUT_NUM_BUTTON_BOX_BUTTONS 607
314#define GLUT_NUM_DIALS 608
315#define GLUT_NUM_TABLET_BUTTONS 609
316#endif
317#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)
318#define GLUT_DEVICE_IGNORE_KEY_REPEAT 610
319#define GLUT_DEVICE_KEY_REPEAT 611
320#define GLUT_HAS_JOYSTICK 612
321#define GLUT_OWNS_JOYSTICK 613
322#define GLUT_JOYSTICK_BUTTONS 614
323#define GLUT_JOYSTICK_AXES 615
324#define GLUT_JOYSTICK_POLL_RATE 616
325#endif
326
327#if (GLUT_API_VERSION >= 3)
328/* glutLayerGet parameters. */
329#define GLUT_OVERLAY_POSSIBLE 800
330#define GLUT_LAYER_IN_USE 801
331#define GLUT_HAS_OVERLAY 802
332#define GLUT_TRANSPARENT_INDEX 803
333#define GLUT_NORMAL_DAMAGED 804
334#define GLUT_OVERLAY_DAMAGED 805
335
336#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
337/* glutVideoResizeGet parameters. */
338#define GLUT_VIDEO_RESIZE_POSSIBLE 900
339#define GLUT_VIDEO_RESIZE_IN_USE 901
340#define GLUT_VIDEO_RESIZE_X_DELTA 902
341#define GLUT_VIDEO_RESIZE_Y_DELTA 903
342#define GLUT_VIDEO_RESIZE_WIDTH_DELTA 904
343#define GLUT_VIDEO_RESIZE_HEIGHT_DELTA 905
344#define GLUT_VIDEO_RESIZE_X 906
345#define GLUT_VIDEO_RESIZE_Y 907
346#define GLUT_VIDEO_RESIZE_WIDTH 908
347#define GLUT_VIDEO_RESIZE_HEIGHT 909
348#endif
349
350/* glutUseLayer parameters. */
351#define GLUT_NORMAL 0
352#define GLUT_OVERLAY 1
353
354/* glutGetModifiers return mask. */
355#define GLUT_ACTIVE_SHIFT 1
356#define GLUT_ACTIVE_CTRL 2
357#define GLUT_ACTIVE_ALT 4
358
359/* glutSetCursor parameters. */
360/* Basic arrows. */
361#define GLUT_CURSOR_RIGHT_ARROW 0
362#define GLUT_CURSOR_LEFT_ARROW 1
363/* Symbolic cursor shapes. */
364#define GLUT_CURSOR_INFO 2
365#define GLUT_CURSOR_DESTROY 3
366#define GLUT_CURSOR_HELP 4
367#define GLUT_CURSOR_CYCLE 5
368#define GLUT_CURSOR_SPRAY 6
369#define GLUT_CURSOR_WAIT 7
370#define GLUT_CURSOR_TEXT 8
371#define GLUT_CURSOR_CROSSHAIR 9
372/* Directional cursors. */
373#define GLUT_CURSOR_UP_DOWN 10
374#define GLUT_CURSOR_LEFT_RIGHT 11
375/* Sizing cursors. */
376#define GLUT_CURSOR_TOP_SIDE 12
377#define GLUT_CURSOR_BOTTOM_SIDE 13
378#define GLUT_CURSOR_LEFT_SIDE 14
379#define GLUT_CURSOR_RIGHT_SIDE 15
380#define GLUT_CURSOR_TOP_LEFT_CORNER 16
381#define GLUT_CURSOR_TOP_RIGHT_CORNER 17
382#define GLUT_CURSOR_BOTTOM_RIGHT_CORNER 18
383#define GLUT_CURSOR_BOTTOM_LEFT_CORNER 19
384/* Inherit from parent window. */
385#define GLUT_CURSOR_INHERIT 100
386/* Blank cursor. */
387#define GLUT_CURSOR_NONE 101
388/* Fullscreen crosshair (if available). */
389#define GLUT_CURSOR_FULL_CROSSHAIR 102
390#endif
391
392/* GLUT initialization sub-API. */
393extern void APIENTRY glutInit(int *argcp, char **argv);
394extern void APIENTRY glutInitDisplayMode(unsigned int mode);
395#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
396extern void APIENTRY glutInitDisplayString(const char *string);
397#endif
398extern void APIENTRY glutInitWindowPosition(int x, int y);
399extern void APIENTRY glutInitWindowSize(int width, int height);
400extern void APIENTRY glutMainLoop(void);
401
402/* GLUT window sub-API. */
403extern int APIENTRY glutCreateWindow(const char *title);
404extern int APIENTRY glutCreateSubWindow(int win, int x, int y, int width, int height);
405extern void APIENTRY glutDestroyWindow(int win);
406extern void APIENTRY glutPostRedisplay(void);
407#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 11)
408extern void APIENTRY glutPostWindowRedisplay(int win);
409#endif
410extern void APIENTRY glutSwapBuffers(void);
411extern int APIENTRY glutGetWindow(void);
412extern void APIENTRY glutSetWindow(int win);
413extern void APIENTRY glutSetWindowTitle(const char *title);
414extern void APIENTRY glutSetIconTitle(const char *title);
415extern void APIENTRY glutPositionWindow(int x, int y);
416extern void APIENTRY glutReshapeWindow(int width, int height);
417extern void APIENTRY glutPopWindow(void);
418extern void APIENTRY glutPushWindow(void);
419extern void APIENTRY glutIconifyWindow(void);
420extern void APIENTRY glutShowWindow(void);
421extern void APIENTRY glutHideWindow(void);
422#if (GLUT_API_VERSION >= 3)
423extern void APIENTRY glutFullScreen(void);
424extern void APIENTRY glutSetCursor(int cursor);
425#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
426extern void APIENTRY glutWarpPointer(int x, int y);
427#endif
428
429/* GLUT overlay sub-API. */
430extern void APIENTRY glutEstablishOverlay(void);
431extern void APIENTRY glutRemoveOverlay(void);
432extern void APIENTRY glutUseLayer(GLenum layer);
433extern void APIENTRY glutPostOverlayRedisplay(void);
434#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 11)
435extern void APIENTRY glutPostWindowOverlayRedisplay(int win);
436#endif
437extern void APIENTRY glutShowOverlay(void);
438extern void APIENTRY glutHideOverlay(void);
439#endif
440
441/* GLUT menu sub-API. */
442extern int APIENTRY glutCreateMenu(void (*)(int));
443extern void APIENTRY glutDestroyMenu(int menu);
444extern int APIENTRY glutGetMenu(void);
445extern void APIENTRY glutSetMenu(int menu);
446extern void APIENTRY glutAddMenuEntry(const char *label, int value);
447extern void APIENTRY glutAddSubMenu(const char *label, int submenu);
448extern void APIENTRY glutChangeToMenuEntry(int item, const char *label, int value);
449extern void APIENTRY glutChangeToSubMenu(int item, const char *label, int submenu);
450extern void APIENTRY glutRemoveMenuItem(int item);
451extern void APIENTRY glutAttachMenu(int button);
452extern void APIENTRY glutDetachMenu(int button);
453
454/* GLUT window callback sub-API. */
455extern void APIENTRY glutDisplayFunc(void (*func)(void));
456extern void APIENTRY glutReshapeFunc(void (*func)(int width, int height));
457extern void APIENTRY glutKeyboardFunc(void (*func)(unsigned char key, int x, int y));
458extern void APIENTRY glutMouseFunc(void (*func)(int button, int state, int x, int y));
459extern void APIENTRY glutMotionFunc(void (*func)(int x, int y));
460extern void APIENTRY glutPassiveMotionFunc(void (*func)(int x, int y));
461extern void APIENTRY glutEntryFunc(void (*func)(int state));
462extern void APIENTRY glutVisibilityFunc(void (*func)(int state));
463extern void APIENTRY glutIdleFunc(void (*func)(void));
464extern void APIENTRY glutTimerFunc(unsigned int millis, void (*func)(int value), int value);
465extern void APIENTRY glutMenuStateFunc(void (*func)(int state));
466#if (GLUT_API_VERSION >= 2)
467extern void APIENTRY glutSpecialFunc(void (*func)(int key, int x, int y));
468extern void APIENTRY glutSpaceballMotionFunc(void (*func)(int x, int y, int z));
469extern void APIENTRY glutSpaceballRotateFunc(void (*func)(int x, int y, int z));
470extern void APIENTRY glutSpaceballButtonFunc(void (*func)(int button, int state));
471extern void APIENTRY glutButtonBoxFunc(void (*func)(int button, int state));
472extern void APIENTRY glutDialsFunc(void (*func)(int dial, int value));
473extern void APIENTRY glutTabletMotionFunc(void (*func)(int x, int y));
474extern void APIENTRY glutTabletButtonFunc(void (*func)(int button, int state, int x, int y));
475#if (GLUT_API_VERSION >= 3)
476extern void APIENTRY glutMenuStatusFunc(void (*func)(int status, int x, int y));
477extern void APIENTRY glutOverlayDisplayFunc(void (*func)(void));
478#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
479extern void APIENTRY glutWindowStatusFunc(void (*func)(int state));
480#endif
481#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)
482extern void APIENTRY glutKeyboardUpFunc(void (*func)(unsigned char key, int x, int y));
483extern void APIENTRY glutSpecialUpFunc(void (*func)(int key, int x, int y));
484extern void APIENTRY glutJoystickFunc(void (*func)(unsigned int buttonMask, int x, int y, int z), int pollInterval);
485#endif
486#endif
487#endif
488
489/* GLUT color index sub-API. */
490extern void APIENTRY glutSetColor(int, GLfloat red, GLfloat green, GLfloat blue);
491extern GLfloat APIENTRY glutGetColor(int ndx, int component);
492extern void APIENTRY glutCopyColormap(int win);
493
494/* GLUT state retrieval sub-API. */
495extern int APIENTRY glutGet(GLenum type);
496extern int APIENTRY glutDeviceGet(GLenum type);
497#if (GLUT_API_VERSION >= 2)
498/* GLUT extension support sub-API */
499extern int APIENTRY glutExtensionSupported(const char *name);
500#endif
501#if (GLUT_API_VERSION >= 3)
502extern int APIENTRY glutGetModifiers(void);
503extern int APIENTRY glutLayerGet(GLenum type);
504#endif
505
506/* GLUT font sub-API */
507extern void APIENTRY glutBitmapCharacter(void *font, int character);
508extern int APIENTRY glutBitmapWidth(void *font, int character);
509extern void APIENTRY glutStrokeCharacter(void *font, int character);
510extern int APIENTRY glutStrokeWidth(void *font, int character);
511#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
512extern int APIENTRY glutBitmapLength(void *font, const unsigned char *string);
513extern int APIENTRY glutStrokeLength(void *font, const unsigned char *string);
514#endif
515
516/* GLUT pre-built models sub-API */
517extern void APIENTRY glutWireSphere(GLdouble radius, GLint slices, GLint stacks);
518extern void APIENTRY glutSolidSphere(GLdouble radius, GLint slices, GLint stacks);
519extern void APIENTRY glutWireCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
520extern void APIENTRY glutSolidCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
521extern void APIENTRY glutWireCube(GLdouble size);
522extern void APIENTRY glutSolidCube(GLdouble size);
523extern void APIENTRY glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
524extern void APIENTRY glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
525extern void APIENTRY glutWireDodecahedron(void);
526extern void APIENTRY glutSolidDodecahedron(void);
527extern void APIENTRY glutWireTeapot(GLdouble size);
528extern void APIENTRY glutSolidTeapot(GLdouble size);
529extern void APIENTRY glutWireOctahedron(void);
530extern void APIENTRY glutSolidOctahedron(void);
531extern void APIENTRY glutWireTetrahedron(void);
532extern void APIENTRY glutSolidTetrahedron(void);
533extern void APIENTRY glutWireIcosahedron(void);
534extern void APIENTRY glutSolidIcosahedron(void);
535
536#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
537/* GLUT video resize sub-API. */
538extern int APIENTRY glutVideoResizeGet(GLenum param);
539extern void APIENTRY glutSetupVideoResizing(void);
540extern void APIENTRY glutStopVideoResizing(void);
541extern void APIENTRY glutVideoResize(int x, int y, int width, int height);
542extern void APIENTRY glutVideoPan(int x, int y, int width, int height);
543
544/* GLUT debugging sub-API. */
545extern void APIENTRY glutReportErrors(void);
546#endif
547
548#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)
549/* GLUT device control sub-API. */
550/* glutSetKeyRepeat modes. */
551#define GLUT_KEY_REPEAT_OFF 0
552#define GLUT_KEY_REPEAT_ON 1
553#define GLUT_KEY_REPEAT_DEFAULT 2
554
555/* Joystick button masks. */
556#define GLUT_JOYSTICK_BUTTON_A 1
557#define GLUT_JOYSTICK_BUTTON_B 2
558#define GLUT_JOYSTICK_BUTTON_C 4
559#define GLUT_JOYSTICK_BUTTON_D 8
560
561extern void APIENTRY glutIgnoreKeyRepeat(int ignore);
562extern void APIENTRY glutSetKeyRepeat(int repeatMode);
563extern void APIENTRY glutForceJoystickFunc(void);
564
565/* GLUT game mode sub-API. */
566/* glutGameModeGet. */
567#define GLUT_GAME_MODE_ACTIVE 0
568#define GLUT_GAME_MODE_POSSIBLE 1
569#define GLUT_GAME_MODE_WIDTH 2
570#define GLUT_GAME_MODE_HEIGHT 3
571#define GLUT_GAME_MODE_PIXEL_DEPTH 4
572#define GLUT_GAME_MODE_REFRESH_RATE 5
573#define GLUT_GAME_MODE_DISPLAY_CHANGED 6
574
575extern void APIENTRY glutGameModeString(const char *string);
576extern int APIENTRY glutEnterGameMode(void);
577extern void APIENTRY glutLeaveGameMode(void);
578extern int APIENTRY glutGameModeGet(GLenum mode);
579#endif
580
581#ifdef __cplusplus
582}
583
584#endif
585
586#ifdef GLUT_APIENTRY_DEFINED
587# undef GLUT_APIENTRY_DEFINED
588# undef APIENTRY
589#endif
590
591#ifdef GLUT_WINGDIAPI_DEFINED
592# undef GLUT_WINGDIAPI_DEFINED
593# undef WINGDIAPI
594#endif
595
596#endif /* __glut_h__ */
diff --git a/linden/libraries/i686-win32/include/GL/glxext.h b/linden/libraries/i686-win32/include/GL/glxext.h
new file mode 100644
index 0000000..0f66df6
--- /dev/null
+++ b/linden/libraries/i686-win32/include/GL/glxext.h
@@ -0,0 +1,785 @@
1#ifndef __glxext_h_
2#define __glxext_h_
3
4#ifdef __cplusplus
5extern "C" {
6#endif
7
8/*
9** Copyright (c) 2007 The Khronos Group Inc.
10**
11** Permission is hereby granted, free of charge, to any person obtaining a
12** copy of this software and/or associated documentation files (the
13** "Materials"), to deal in the Materials without restriction, including
14** without limitation the rights to use, copy, modify, merge, publish,
15** distribute, sublicense, and/or sell copies of the Materials, and to
16** permit persons to whom the Materials are furnished to do so, subject to
17** the following conditions:
18**
19** The above copyright notice and this permission notice shall be included
20** in all copies or substantial portions of the Materials.
21**
22** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
25** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
26** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
27** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
28** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
29*/
30
31#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
32#define WIN32_LEAN_AND_MEAN 1
33#include <windows.h>
34#endif
35
36#ifndef APIENTRY
37#define APIENTRY
38#endif
39#ifndef APIENTRYP
40#define APIENTRYP APIENTRY *
41#endif
42#ifndef GLAPI
43#define GLAPI extern
44#endif
45
46/*************************************************************/
47
48/* Header file version number, required by OpenGL ABI for Linux */
49/* glxext.h last updated 2007/04/21 */
50/* Current version at http://www.opengl.org/registry/ */
51#define GLX_GLXEXT_VERSION 19
52
53#ifndef GLX_VERSION_1_3
54#define GLX_WINDOW_BIT 0x00000001
55#define GLX_PIXMAP_BIT 0x00000002
56#define GLX_PBUFFER_BIT 0x00000004
57#define GLX_RGBA_BIT 0x00000001
58#define GLX_COLOR_INDEX_BIT 0x00000002
59#define GLX_PBUFFER_CLOBBER_MASK 0x08000000
60#define GLX_FRONT_LEFT_BUFFER_BIT 0x00000001
61#define GLX_FRONT_RIGHT_BUFFER_BIT 0x00000002
62#define GLX_BACK_LEFT_BUFFER_BIT 0x00000004
63#define GLX_BACK_RIGHT_BUFFER_BIT 0x00000008
64#define GLX_AUX_BUFFERS_BIT 0x00000010
65#define GLX_DEPTH_BUFFER_BIT 0x00000020
66#define GLX_STENCIL_BUFFER_BIT 0x00000040
67#define GLX_ACCUM_BUFFER_BIT 0x00000080
68#define GLX_CONFIG_CAVEAT 0x20
69#define GLX_X_VISUAL_TYPE 0x22
70#define GLX_TRANSPARENT_TYPE 0x23
71#define GLX_TRANSPARENT_INDEX_VALUE 0x24
72#define GLX_TRANSPARENT_RED_VALUE 0x25
73#define GLX_TRANSPARENT_GREEN_VALUE 0x26
74#define GLX_TRANSPARENT_BLUE_VALUE 0x27
75#define GLX_TRANSPARENT_ALPHA_VALUE 0x28
76#define GLX_DONT_CARE 0xFFFFFFFF
77#define GLX_NONE 0x8000
78#define GLX_SLOW_CONFIG 0x8001
79#define GLX_TRUE_COLOR 0x8002
80#define GLX_DIRECT_COLOR 0x8003
81#define GLX_PSEUDO_COLOR 0x8004
82#define GLX_STATIC_COLOR 0x8005
83#define GLX_GRAY_SCALE 0x8006
84#define GLX_STATIC_GRAY 0x8007
85#define GLX_TRANSPARENT_RGB 0x8008
86#define GLX_TRANSPARENT_INDEX 0x8009
87#define GLX_VISUAL_ID 0x800B
88#define GLX_SCREEN 0x800C
89#define GLX_NON_CONFORMANT_CONFIG 0x800D
90#define GLX_DRAWABLE_TYPE 0x8010
91#define GLX_RENDER_TYPE 0x8011
92#define GLX_X_RENDERABLE 0x8012
93#define GLX_FBCONFIG_ID 0x8013
94#define GLX_RGBA_TYPE 0x8014
95#define GLX_COLOR_INDEX_TYPE 0x8015
96#define GLX_MAX_PBUFFER_WIDTH 0x8016
97#define GLX_MAX_PBUFFER_HEIGHT 0x8017
98#define GLX_MAX_PBUFFER_PIXELS 0x8018
99#define GLX_PRESERVED_CONTENTS 0x801B
100#define GLX_LARGEST_PBUFFER 0x801C
101#define GLX_WIDTH 0x801D
102#define GLX_HEIGHT 0x801E
103#define GLX_EVENT_MASK 0x801F
104#define GLX_DAMAGED 0x8020
105#define GLX_SAVED 0x8021
106#define GLX_WINDOW 0x8022
107#define GLX_PBUFFER 0x8023
108#define GLX_PBUFFER_HEIGHT 0x8040
109#define GLX_PBUFFER_WIDTH 0x8041
110#endif
111
112#ifndef GLX_VERSION_1_4
113#define GLX_SAMPLE_BUFFERS 100000
114#define GLX_SAMPLES 100001
115#endif
116
117#ifndef GLX_ARB_get_proc_address
118#endif
119
120#ifndef GLX_ARB_multisample
121#define GLX_SAMPLE_BUFFERS_ARB 100000
122#define GLX_SAMPLES_ARB 100001
123#endif
124
125#ifndef GLX_ARB_fbconfig_float
126#define GLX_RGBA_FLOAT_TYPE_ARB 0x20B9
127#define GLX_RGBA_FLOAT_BIT_ARB 0x00000004
128#endif
129
130#ifndef GLX_SGIS_multisample
131#define GLX_SAMPLE_BUFFERS_SGIS 100000
132#define GLX_SAMPLES_SGIS 100001
133#endif
134
135#ifndef GLX_EXT_visual_info
136#define GLX_X_VISUAL_TYPE_EXT 0x22
137#define GLX_TRANSPARENT_TYPE_EXT 0x23
138#define GLX_TRANSPARENT_INDEX_VALUE_EXT 0x24
139#define GLX_TRANSPARENT_RED_VALUE_EXT 0x25
140#define GLX_TRANSPARENT_GREEN_VALUE_EXT 0x26
141#define GLX_TRANSPARENT_BLUE_VALUE_EXT 0x27
142#define GLX_TRANSPARENT_ALPHA_VALUE_EXT 0x28
143#define GLX_NONE_EXT 0x8000
144#define GLX_TRUE_COLOR_EXT 0x8002
145#define GLX_DIRECT_COLOR_EXT 0x8003
146#define GLX_PSEUDO_COLOR_EXT 0x8004
147#define GLX_STATIC_COLOR_EXT 0x8005
148#define GLX_GRAY_SCALE_EXT 0x8006
149#define GLX_STATIC_GRAY_EXT 0x8007
150#define GLX_TRANSPARENT_RGB_EXT 0x8008
151#define GLX_TRANSPARENT_INDEX_EXT 0x8009
152#endif
153
154#ifndef GLX_SGI_swap_control
155#endif
156
157#ifndef GLX_SGI_video_sync
158#endif
159
160#ifndef GLX_SGI_make_current_read
161#endif
162
163#ifndef GLX_SGIX_video_source
164#endif
165
166#ifndef GLX_EXT_visual_rating
167#define GLX_VISUAL_CAVEAT_EXT 0x20
168#define GLX_SLOW_VISUAL_EXT 0x8001
169#define GLX_NON_CONFORMANT_VISUAL_EXT 0x800D
170/* reuse GLX_NONE_EXT */
171#endif
172
173#ifndef GLX_EXT_import_context
174#define GLX_SHARE_CONTEXT_EXT 0x800A
175#define GLX_VISUAL_ID_EXT 0x800B
176#define GLX_SCREEN_EXT 0x800C
177#endif
178
179#ifndef GLX_SGIX_fbconfig
180#define GLX_WINDOW_BIT_SGIX 0x00000001
181#define GLX_PIXMAP_BIT_SGIX 0x00000002
182#define GLX_RGBA_BIT_SGIX 0x00000001
183#define GLX_COLOR_INDEX_BIT_SGIX 0x00000002
184#define GLX_DRAWABLE_TYPE_SGIX 0x8010
185#define GLX_RENDER_TYPE_SGIX 0x8011
186#define GLX_X_RENDERABLE_SGIX 0x8012
187#define GLX_FBCONFIG_ID_SGIX 0x8013
188#define GLX_RGBA_TYPE_SGIX 0x8014
189#define GLX_COLOR_INDEX_TYPE_SGIX 0x8015
190/* reuse GLX_SCREEN_EXT */
191#endif
192
193#ifndef GLX_SGIX_pbuffer
194#define GLX_PBUFFER_BIT_SGIX 0x00000004
195#define GLX_BUFFER_CLOBBER_MASK_SGIX 0x08000000
196#define GLX_FRONT_LEFT_BUFFER_BIT_SGIX 0x00000001
197#define GLX_FRONT_RIGHT_BUFFER_BIT_SGIX 0x00000002
198#define GLX_BACK_LEFT_BUFFER_BIT_SGIX 0x00000004
199#define GLX_BACK_RIGHT_BUFFER_BIT_SGIX 0x00000008
200#define GLX_AUX_BUFFERS_BIT_SGIX 0x00000010
201#define GLX_DEPTH_BUFFER_BIT_SGIX 0x00000020
202#define GLX_STENCIL_BUFFER_BIT_SGIX 0x00000040
203#define GLX_ACCUM_BUFFER_BIT_SGIX 0x00000080
204#define GLX_SAMPLE_BUFFERS_BIT_SGIX 0x00000100
205#define GLX_MAX_PBUFFER_WIDTH_SGIX 0x8016
206#define GLX_MAX_PBUFFER_HEIGHT_SGIX 0x8017
207#define GLX_MAX_PBUFFER_PIXELS_SGIX 0x8018
208#define GLX_OPTIMAL_PBUFFER_WIDTH_SGIX 0x8019
209#define GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX 0x801A
210#define GLX_PRESERVED_CONTENTS_SGIX 0x801B
211#define GLX_LARGEST_PBUFFER_SGIX 0x801C
212#define GLX_WIDTH_SGIX 0x801D
213#define GLX_HEIGHT_SGIX 0x801E
214#define GLX_EVENT_MASK_SGIX 0x801F
215#define GLX_DAMAGED_SGIX 0x8020
216#define GLX_SAVED_SGIX 0x8021
217#define GLX_WINDOW_SGIX 0x8022
218#define GLX_PBUFFER_SGIX 0x8023
219#endif
220
221#ifndef GLX_SGI_cushion
222#endif
223
224#ifndef GLX_SGIX_video_resize
225#define GLX_SYNC_FRAME_SGIX 0x00000000
226#define GLX_SYNC_SWAP_SGIX 0x00000001
227#endif
228
229#ifndef GLX_SGIX_dmbuffer
230#define GLX_DIGITAL_MEDIA_PBUFFER_SGIX 0x8024
231#endif
232
233#ifndef GLX_SGIX_swap_group
234#endif
235
236#ifndef GLX_SGIX_swap_barrier
237#endif
238
239#ifndef GLX_SGIS_blended_overlay
240#define GLX_BLENDED_RGBA_SGIS 0x8025
241#endif
242
243#ifndef GLX_SGIS_shared_multisample
244#define GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS 0x8026
245#define GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS 0x8027
246#endif
247
248#ifndef GLX_SUN_get_transparent_index
249#endif
250
251#ifndef GLX_3DFX_multisample
252#define GLX_SAMPLE_BUFFERS_3DFX 0x8050
253#define GLX_SAMPLES_3DFX 0x8051
254#endif
255
256#ifndef GLX_MESA_copy_sub_buffer
257#endif
258
259#ifndef GLX_MESA_pixmap_colormap
260#endif
261
262#ifndef GLX_MESA_release_buffers
263#endif
264
265#ifndef GLX_MESA_set_3dfx_mode
266#define GLX_3DFX_WINDOW_MODE_MESA 0x1
267#define GLX_3DFX_FULLSCREEN_MODE_MESA 0x2
268#endif
269
270#ifndef GLX_SGIX_visual_select_group
271#define GLX_VISUAL_SELECT_GROUP_SGIX 0x8028
272#endif
273
274#ifndef GLX_OML_swap_method
275#define GLX_SWAP_METHOD_OML 0x8060
276#define GLX_SWAP_EXCHANGE_OML 0x8061
277#define GLX_SWAP_COPY_OML 0x8062
278#define GLX_SWAP_UNDEFINED_OML 0x8063
279#endif
280
281#ifndef GLX_OML_sync_control
282#endif
283
284#ifndef GLX_NV_float_buffer
285#define GLX_FLOAT_COMPONENTS_NV 0x20B0
286#endif
287
288#ifndef GLX_SGIX_hyperpipe
289#define GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX 80
290#define GLX_BAD_HYPERPIPE_CONFIG_SGIX 91
291#define GLX_BAD_HYPERPIPE_SGIX 92
292#define GLX_HYPERPIPE_DISPLAY_PIPE_SGIX 0x00000001
293#define GLX_HYPERPIPE_RENDER_PIPE_SGIX 0x00000002
294#define GLX_PIPE_RECT_SGIX 0x00000001
295#define GLX_PIPE_RECT_LIMITS_SGIX 0x00000002
296#define GLX_HYPERPIPE_STEREO_SGIX 0x00000003
297#define GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX 0x00000004
298#define GLX_HYPERPIPE_ID_SGIX 0x8030
299#endif
300
301#ifndef GLX_MESA_agp_offset
302#endif
303
304#ifndef GLX_EXT_fbconfig_packed_float
305#define GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT 0x20B1
306#define GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT 0x00000008
307#endif
308
309#ifndef GLX_EXT_framebuffer_sRGB
310#define GLX_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20B2
311#endif
312
313#ifndef GLX_EXT_texture_from_pixmap
314#define GLX_TEXTURE_1D_BIT_EXT 0x00000001
315#define GLX_TEXTURE_2D_BIT_EXT 0x00000002
316#define GLX_TEXTURE_RECTANGLE_BIT_EXT 0x00000004
317#define GLX_BIND_TO_TEXTURE_RGB_EXT 0x20D0
318#define GLX_BIND_TO_TEXTURE_RGBA_EXT 0x20D1
319#define GLX_BIND_TO_MIPMAP_TEXTURE_EXT 0x20D2
320#define GLX_BIND_TO_TEXTURE_TARGETS_EXT 0x20D3
321#define GLX_Y_INVERTED_EXT 0x20D4
322#define GLX_TEXTURE_FORMAT_EXT 0x20D5
323#define GLX_TEXTURE_TARGET_EXT 0x20D6
324#define GLX_MIPMAP_TEXTURE_EXT 0x20D7
325#define GLX_TEXTURE_FORMAT_NONE_EXT 0x20D8
326#define GLX_TEXTURE_FORMAT_RGB_EXT 0x20D9
327#define GLX_TEXTURE_FORMAT_RGBA_EXT 0x20DA
328#define GLX_TEXTURE_1D_EXT 0x20DB
329#define GLX_TEXTURE_2D_EXT 0x20DC
330#define GLX_TEXTURE_RECTANGLE_EXT 0x20DD
331#define GLX_FRONT_LEFT_EXT 0x20DE
332#define GLX_FRONT_RIGHT_EXT 0x20DF
333#define GLX_BACK_LEFT_EXT 0x20E0
334#define GLX_BACK_RIGHT_EXT 0x20E1
335#define GLX_FRONT_EXT GLX_FRONT_LEFT_EXT
336#define GLX_BACK_EXT GLX_BACK_LEFT_EXT
337#define GLX_AUX0_EXT 0x20E2
338#define GLX_AUX1_EXT 0x20E3
339#define GLX_AUX2_EXT 0x20E4
340#define GLX_AUX3_EXT 0x20E5
341#define GLX_AUX4_EXT 0x20E6
342#define GLX_AUX5_EXT 0x20E7
343#define GLX_AUX6_EXT 0x20E8
344#define GLX_AUX7_EXT 0x20E9
345#define GLX_AUX8_EXT 0x20EA
346#define GLX_AUX9_EXT 0x20EB
347#endif
348
349
350/*************************************************************/
351
352#ifndef GLX_ARB_get_proc_address
353typedef void (*__GLXextFuncPtr)(void);
354#endif
355
356#ifndef GLX_SGIX_video_source
357typedef XID GLXVideoSourceSGIX;
358#endif
359
360#ifndef GLX_SGIX_fbconfig
361typedef XID GLXFBConfigIDSGIX;
362typedef struct __GLXFBConfigRec *GLXFBConfigSGIX;
363#endif
364
365#ifndef GLX_SGIX_pbuffer
366typedef XID GLXPbufferSGIX;
367typedef struct {
368 int type;
369 unsigned long serial; /* # of last request processed by server */
370 Bool send_event; /* true if this came for SendEvent request */
371 Display *display; /* display the event was read from */
372 GLXDrawable drawable; /* i.d. of Drawable */
373 int event_type; /* GLX_DAMAGED_SGIX or GLX_SAVED_SGIX */
374 int draw_type; /* GLX_WINDOW_SGIX or GLX_PBUFFER_SGIX */
375 unsigned int mask; /* mask indicating which buffers are affected*/
376 int x, y;
377 int width, height;
378 int count; /* if nonzero, at least this many more */
379} GLXBufferClobberEventSGIX;
380#endif
381
382#ifndef GLEXT_64_TYPES_DEFINED
383/* This code block is duplicated in glxext.h, so must be protected */
384#define GLEXT_64_TYPES_DEFINED
385/* Define int32_t, int64_t, and uint64_t types for UST/MSC */
386/* (as used in the GLX_OML_sync_control extension). */
387#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
388#include <inttypes.h>
389#elif defined(__sun__) || defined(__digital__)
390#include <inttypes.h>
391#if defined(__STDC__)
392#if defined(__arch64__)
393typedef long int int64_t;
394typedef unsigned long int uint64_t;
395#else
396typedef long long int int64_t;
397typedef unsigned long long int uint64_t;
398#endif /* __arch64__ */
399#endif /* __STDC__ */
400#elif defined( __VMS )
401#include <inttypes.h>
402#elif defined(__SCO__) || defined(__USLC__)
403#include <stdint.h>
404#elif defined(__UNIXOS2__) || defined(__SOL64__)
405typedef long int int32_t;
406typedef long long int int64_t;
407typedef unsigned long long int uint64_t;
408#elif defined(_WIN32) && defined(__GNUC__)
409#include <stdint.h>
410#elif defined(_WIN32)
411typedef __int32 int32_t;
412typedef __int64 int64_t;
413typedef unsigned __int64 uint64_t;
414#else
415#include <inttypes.h> /* Fallback option */
416#endif
417#endif
418
419#ifndef GLX_VERSION_1_3
420#define GLX_VERSION_1_3 1
421#ifdef GLX_GLXEXT_PROTOTYPES
422extern GLXFBConfig * glXGetFBConfigs (Display *, int, int *);
423extern GLXFBConfig * glXChooseFBConfig (Display *, int, const int *, int *);
424extern int glXGetFBConfigAttrib (Display *, GLXFBConfig, int, int *);
425extern XVisualInfo * glXGetVisualFromFBConfig (Display *, GLXFBConfig);
426extern GLXWindow glXCreateWindow (Display *, GLXFBConfig, Window, const int *);
427extern void glXDestroyWindow (Display *, GLXWindow);
428extern GLXPixmap glXCreatePixmap (Display *, GLXFBConfig, Pixmap, const int *);
429extern void glXDestroyPixmap (Display *, GLXPixmap);
430extern GLXPbuffer glXCreatePbuffer (Display *, GLXFBConfig, const int *);
431extern void glXDestroyPbuffer (Display *, GLXPbuffer);
432extern void glXQueryDrawable (Display *, GLXDrawable, int, unsigned int *);
433extern GLXContext glXCreateNewContext (Display *, GLXFBConfig, int, GLXContext, Bool);
434extern Bool glXMakeContextCurrent (Display *, GLXDrawable, GLXDrawable, GLXContext);
435extern GLXDrawable glXGetCurrentReadDrawable (void);
436extern Display * glXGetCurrentDisplay (void);
437extern int glXQueryContext (Display *, GLXContext, int, int *);
438extern void glXSelectEvent (Display *, GLXDrawable, unsigned long);
439extern void glXGetSelectedEvent (Display *, GLXDrawable, unsigned long *);
440#endif /* GLX_GLXEXT_PROTOTYPES */
441typedef GLXFBConfig * ( * PFNGLXGETFBCONFIGSPROC) (Display *dpy, int screen, int *nelements);
442typedef GLXFBConfig * ( * PFNGLXCHOOSEFBCONFIGPROC) (Display *dpy, int screen, const int *attrib_list, int *nelements);
443typedef int ( * PFNGLXGETFBCONFIGATTRIBPROC) (Display *dpy, GLXFBConfig config, int attribute, int *value);
444typedef XVisualInfo * ( * PFNGLXGETVISUALFROMFBCONFIGPROC) (Display *dpy, GLXFBConfig config);
445typedef GLXWindow ( * PFNGLXCREATEWINDOWPROC) (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list);
446typedef void ( * PFNGLXDESTROYWINDOWPROC) (Display *dpy, GLXWindow win);
447typedef GLXPixmap ( * PFNGLXCREATEPIXMAPPROC) (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list);
448typedef void ( * PFNGLXDESTROYPIXMAPPROC) (Display *dpy, GLXPixmap pixmap);
449typedef GLXPbuffer ( * PFNGLXCREATEPBUFFERPROC) (Display *dpy, GLXFBConfig config, const int *attrib_list);
450typedef void ( * PFNGLXDESTROYPBUFFERPROC) (Display *dpy, GLXPbuffer pbuf);
451typedef void ( * PFNGLXQUERYDRAWABLEPROC) (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value);
452typedef GLXContext ( * PFNGLXCREATENEWCONTEXTPROC) (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct);
453typedef Bool ( * PFNGLXMAKECONTEXTCURRENTPROC) (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
454typedef GLXDrawable ( * PFNGLXGETCURRENTREADDRAWABLEPROC) (void);
455typedef Display * ( * PFNGLXGETCURRENTDISPLAYPROC) (void);
456typedef int ( * PFNGLXQUERYCONTEXTPROC) (Display *dpy, GLXContext ctx, int attribute, int *value);
457typedef void ( * PFNGLXSELECTEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long event_mask);
458typedef void ( * PFNGLXGETSELECTEDEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long *event_mask);
459#endif
460
461#ifndef GLX_VERSION_1_4
462#define GLX_VERSION_1_4 1
463#ifdef GLX_GLXEXT_PROTOTYPES
464extern __GLXextFuncPtr glXGetProcAddress (const GLubyte *);
465#endif /* GLX_GLXEXT_PROTOTYPES */
466typedef __GLXextFuncPtr ( * PFNGLXGETPROCADDRESSPROC) (const GLubyte *procName);
467#endif
468
469#ifndef GLX_ARB_get_proc_address
470#define GLX_ARB_get_proc_address 1
471#ifdef GLX_GLXEXT_PROTOTYPES
472extern __GLXextFuncPtr glXGetProcAddressARB (const GLubyte *);
473#endif /* GLX_GLXEXT_PROTOTYPES */
474typedef __GLXextFuncPtr ( * PFNGLXGETPROCADDRESSARBPROC) (const GLubyte *procName);
475#endif
476
477#ifndef GLX_ARB_multisample
478#define GLX_ARB_multisample 1
479#endif
480
481#ifndef GLX_ARB_fbconfig_float
482#define GLX_ARB_fbconfig_float 1
483#endif
484
485#ifndef GLX_SGIS_multisample
486#define GLX_SGIS_multisample 1
487#endif
488
489#ifndef GLX_EXT_visual_info
490#define GLX_EXT_visual_info 1
491#endif
492
493#ifndef GLX_SGI_swap_control
494#define GLX_SGI_swap_control 1
495#ifdef GLX_GLXEXT_PROTOTYPES
496extern int glXSwapIntervalSGI (int);
497#endif /* GLX_GLXEXT_PROTOTYPES */
498typedef int ( * PFNGLXSWAPINTERVALSGIPROC) (int interval);
499#endif
500
501#ifndef GLX_SGI_video_sync
502#define GLX_SGI_video_sync 1
503#ifdef GLX_GLXEXT_PROTOTYPES
504extern int glXGetVideoSyncSGI (unsigned int *);
505extern int glXWaitVideoSyncSGI (int, int, unsigned int *);
506#endif /* GLX_GLXEXT_PROTOTYPES */
507typedef int ( * PFNGLXGETVIDEOSYNCSGIPROC) (unsigned int *count);
508typedef int ( * PFNGLXWAITVIDEOSYNCSGIPROC) (int divisor, int remainder, unsigned int *count);
509#endif
510
511#ifndef GLX_SGI_make_current_read
512#define GLX_SGI_make_current_read 1
513#ifdef GLX_GLXEXT_PROTOTYPES
514extern Bool glXMakeCurrentReadSGI (Display *, GLXDrawable, GLXDrawable, GLXContext);
515extern GLXDrawable glXGetCurrentReadDrawableSGI (void);
516#endif /* GLX_GLXEXT_PROTOTYPES */
517typedef Bool ( * PFNGLXMAKECURRENTREADSGIPROC) (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
518typedef GLXDrawable ( * PFNGLXGETCURRENTREADDRAWABLESGIPROC) (void);
519#endif
520
521#ifndef GLX_SGIX_video_source
522#define GLX_SGIX_video_source 1
523#ifdef _VL_H
524#ifdef GLX_GLXEXT_PROTOTYPES
525extern GLXVideoSourceSGIX glXCreateGLXVideoSourceSGIX (Display *, int, VLServer, VLPath, int, VLNode);
526extern void glXDestroyGLXVideoSourceSGIX (Display *, GLXVideoSourceSGIX);
527#endif /* GLX_GLXEXT_PROTOTYPES */
528typedef GLXVideoSourceSGIX ( * PFNGLXCREATEGLXVIDEOSOURCESGIXPROC) (Display *display, int screen, VLServer server, VLPath path, int nodeClass, VLNode drainNode);
529typedef void ( * PFNGLXDESTROYGLXVIDEOSOURCESGIXPROC) (Display *dpy, GLXVideoSourceSGIX glxvideosource);
530#endif /* _VL_H */
531#endif
532
533#ifndef GLX_EXT_visual_rating
534#define GLX_EXT_visual_rating 1
535#endif
536
537#ifndef GLX_EXT_import_context
538#define GLX_EXT_import_context 1
539#ifdef GLX_GLXEXT_PROTOTYPES
540extern Display * glXGetCurrentDisplayEXT (void);
541extern int glXQueryContextInfoEXT (Display *, GLXContext, int, int *);
542extern GLXContextID glXGetContextIDEXT (const GLXContext);
543extern GLXContext glXImportContextEXT (Display *, GLXContextID);
544extern void glXFreeContextEXT (Display *, GLXContext);
545#endif /* GLX_GLXEXT_PROTOTYPES */
546typedef Display * ( * PFNGLXGETCURRENTDISPLAYEXTPROC) (void);
547typedef int ( * PFNGLXQUERYCONTEXTINFOEXTPROC) (Display *dpy, GLXContext context, int attribute, int *value);
548typedef GLXContextID ( * PFNGLXGETCONTEXTIDEXTPROC) (const GLXContext context);
549typedef GLXContext ( * PFNGLXIMPORTCONTEXTEXTPROC) (Display *dpy, GLXContextID contextID);
550typedef void ( * PFNGLXFREECONTEXTEXTPROC) (Display *dpy, GLXContext context);
551#endif
552
553#ifndef GLX_SGIX_fbconfig
554#define GLX_SGIX_fbconfig 1
555#ifdef GLX_GLXEXT_PROTOTYPES
556extern int glXGetFBConfigAttribSGIX (Display *, GLXFBConfigSGIX, int, int *);
557extern GLXFBConfigSGIX * glXChooseFBConfigSGIX (Display *, int, int *, int *);
558extern GLXPixmap glXCreateGLXPixmapWithConfigSGIX (Display *, GLXFBConfigSGIX, Pixmap);
559extern GLXContext glXCreateContextWithConfigSGIX (Display *, GLXFBConfigSGIX, int, GLXContext, Bool);
560extern XVisualInfo * glXGetVisualFromFBConfigSGIX (Display *, GLXFBConfigSGIX);
561extern GLXFBConfigSGIX glXGetFBConfigFromVisualSGIX (Display *, XVisualInfo *);
562#endif /* GLX_GLXEXT_PROTOTYPES */
563typedef int ( * PFNGLXGETFBCONFIGATTRIBSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, int attribute, int *value);
564typedef GLXFBConfigSGIX * ( * PFNGLXCHOOSEFBCONFIGSGIXPROC) (Display *dpy, int screen, int *attrib_list, int *nelements);
565typedef GLXPixmap ( * PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, Pixmap pixmap);
566typedef GLXContext ( * PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct);
567typedef XVisualInfo * ( * PFNGLXGETVISUALFROMFBCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config);
568typedef GLXFBConfigSGIX ( * PFNGLXGETFBCONFIGFROMVISUALSGIXPROC) (Display *dpy, XVisualInfo *vis);
569#endif
570
571#ifndef GLX_SGIX_pbuffer
572#define GLX_SGIX_pbuffer 1
573#ifdef GLX_GLXEXT_PROTOTYPES
574extern GLXPbufferSGIX glXCreateGLXPbufferSGIX (Display *, GLXFBConfigSGIX, unsigned int, unsigned int, int *);
575extern void glXDestroyGLXPbufferSGIX (Display *, GLXPbufferSGIX);
576extern int glXQueryGLXPbufferSGIX (Display *, GLXPbufferSGIX, int, unsigned int *);
577extern void glXSelectEventSGIX (Display *, GLXDrawable, unsigned long);
578extern void glXGetSelectedEventSGIX (Display *, GLXDrawable, unsigned long *);
579#endif /* GLX_GLXEXT_PROTOTYPES */
580typedef GLXPbufferSGIX ( * PFNGLXCREATEGLXPBUFFERSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int *attrib_list);
581typedef void ( * PFNGLXDESTROYGLXPBUFFERSGIXPROC) (Display *dpy, GLXPbufferSGIX pbuf);
582typedef int ( * PFNGLXQUERYGLXPBUFFERSGIXPROC) (Display *dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int *value);
583typedef void ( * PFNGLXSELECTEVENTSGIXPROC) (Display *dpy, GLXDrawable drawable, unsigned long mask);
584typedef void ( * PFNGLXGETSELECTEDEVENTSGIXPROC) (Display *dpy, GLXDrawable drawable, unsigned long *mask);
585#endif
586
587#ifndef GLX_SGI_cushion
588#define GLX_SGI_cushion 1
589#ifdef GLX_GLXEXT_PROTOTYPES
590extern void glXCushionSGI (Display *, Window, float);
591#endif /* GLX_GLXEXT_PROTOTYPES */
592typedef void ( * PFNGLXCUSHIONSGIPROC) (Display *dpy, Window window, float cushion);
593#endif
594
595#ifndef GLX_SGIX_video_resize
596#define GLX_SGIX_video_resize 1
597#ifdef GLX_GLXEXT_PROTOTYPES
598extern int glXBindChannelToWindowSGIX (Display *, int, int, Window);
599extern int glXChannelRectSGIX (Display *, int, int, int, int, int, int);
600extern int glXQueryChannelRectSGIX (Display *, int, int, int *, int *, int *, int *);
601extern int glXQueryChannelDeltasSGIX (Display *, int, int, int *, int *, int *, int *);
602extern int glXChannelRectSyncSGIX (Display *, int, int, GLenum);
603#endif /* GLX_GLXEXT_PROTOTYPES */
604typedef int ( * PFNGLXBINDCHANNELTOWINDOWSGIXPROC) (Display *display, int screen, int channel, Window window);
605typedef int ( * PFNGLXCHANNELRECTSGIXPROC) (Display *display, int screen, int channel, int x, int y, int w, int h);
606typedef int ( * PFNGLXQUERYCHANNELRECTSGIXPROC) (Display *display, int screen, int channel, int *dx, int *dy, int *dw, int *dh);
607typedef int ( * PFNGLXQUERYCHANNELDELTASSGIXPROC) (Display *display, int screen, int channel, int *x, int *y, int *w, int *h);
608typedef int ( * PFNGLXCHANNELRECTSYNCSGIXPROC) (Display *display, int screen, int channel, GLenum synctype);
609#endif
610
611#ifndef GLX_SGIX_dmbuffer
612#define GLX_SGIX_dmbuffer 1
613#ifdef _DM_BUFFER_H_
614#ifdef GLX_GLXEXT_PROTOTYPES
615extern Bool glXAssociateDMPbufferSGIX (Display *, GLXPbufferSGIX, DMparams *, DMbuffer);
616#endif /* GLX_GLXEXT_PROTOTYPES */
617typedef Bool ( * PFNGLXASSOCIATEDMPBUFFERSGIXPROC) (Display *dpy, GLXPbufferSGIX pbuffer, DMparams *params, DMbuffer dmbuffer);
618#endif /* _DM_BUFFER_H_ */
619#endif
620
621#ifndef GLX_SGIX_swap_group
622#define GLX_SGIX_swap_group 1
623#ifdef GLX_GLXEXT_PROTOTYPES
624extern void glXJoinSwapGroupSGIX (Display *, GLXDrawable, GLXDrawable);
625#endif /* GLX_GLXEXT_PROTOTYPES */
626typedef void ( * PFNGLXJOINSWAPGROUPSGIXPROC) (Display *dpy, GLXDrawable drawable, GLXDrawable member);
627#endif
628
629#ifndef GLX_SGIX_swap_barrier
630#define GLX_SGIX_swap_barrier 1
631#ifdef GLX_GLXEXT_PROTOTYPES
632extern void glXBindSwapBarrierSGIX (Display *, GLXDrawable, int);
633extern Bool glXQueryMaxSwapBarriersSGIX (Display *, int, int *);
634#endif /* GLX_GLXEXT_PROTOTYPES */
635typedef void ( * PFNGLXBINDSWAPBARRIERSGIXPROC) (Display *dpy, GLXDrawable drawable, int barrier);
636typedef Bool ( * PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC) (Display *dpy, int screen, int *max);
637#endif
638
639#ifndef GLX_SUN_get_transparent_index
640#define GLX_SUN_get_transparent_index 1
641#ifdef GLX_GLXEXT_PROTOTYPES
642extern Status glXGetTransparentIndexSUN (Display *, Window, Window, long *);
643#endif /* GLX_GLXEXT_PROTOTYPES */
644typedef Status ( * PFNGLXGETTRANSPARENTINDEXSUNPROC) (Display *dpy, Window overlay, Window underlay, long *pTransparentIndex);
645#endif
646
647#ifndef GLX_MESA_copy_sub_buffer
648#define GLX_MESA_copy_sub_buffer 1
649#ifdef GLX_GLXEXT_PROTOTYPES
650extern void glXCopySubBufferMESA (Display *, GLXDrawable, int, int, int, int);
651#endif /* GLX_GLXEXT_PROTOTYPES */
652typedef void ( * PFNGLXCOPYSUBBUFFERMESAPROC) (Display *dpy, GLXDrawable drawable, int x, int y, int width, int height);
653#endif
654
655#ifndef GLX_MESA_pixmap_colormap
656#define GLX_MESA_pixmap_colormap 1
657#ifdef GLX_GLXEXT_PROTOTYPES
658extern GLXPixmap glXCreateGLXPixmapMESA (Display *, XVisualInfo *, Pixmap, Colormap);
659#endif /* GLX_GLXEXT_PROTOTYPES */
660typedef GLXPixmap ( * PFNGLXCREATEGLXPIXMAPMESAPROC) (Display *dpy, XVisualInfo *visual, Pixmap pixmap, Colormap cmap);
661#endif
662
663#ifndef GLX_MESA_release_buffers
664#define GLX_MESA_release_buffers 1
665#ifdef GLX_GLXEXT_PROTOTYPES
666extern Bool glXReleaseBuffersMESA (Display *, GLXDrawable);
667#endif /* GLX_GLXEXT_PROTOTYPES */
668typedef Bool ( * PFNGLXRELEASEBUFFERSMESAPROC) (Display *dpy, GLXDrawable drawable);
669#endif
670
671#ifndef GLX_MESA_set_3dfx_mode
672#define GLX_MESA_set_3dfx_mode 1
673#ifdef GLX_GLXEXT_PROTOTYPES
674extern Bool glXSet3DfxModeMESA (int);
675#endif /* GLX_GLXEXT_PROTOTYPES */
676typedef Bool ( * PFNGLXSET3DFXMODEMESAPROC) (int mode);
677#endif
678
679#ifndef GLX_SGIX_visual_select_group
680#define GLX_SGIX_visual_select_group 1
681#endif
682
683#ifndef GLX_OML_swap_method
684#define GLX_OML_swap_method 1
685#endif
686
687#ifndef GLX_OML_sync_control
688#define GLX_OML_sync_control 1
689#ifdef GLX_GLXEXT_PROTOTYPES
690extern Bool glXGetSyncValuesOML (Display *, GLXDrawable, int64_t *, int64_t *, int64_t *);
691extern Bool glXGetMscRateOML (Display *, GLXDrawable, int32_t *, int32_t *);
692extern int64_t glXSwapBuffersMscOML (Display *, GLXDrawable, int64_t, int64_t, int64_t);
693extern Bool glXWaitForMscOML (Display *, GLXDrawable, int64_t, int64_t, int64_t, int64_t *, int64_t *, int64_t *);
694extern Bool glXWaitForSbcOML (Display *, GLXDrawable, int64_t, int64_t *, int64_t *, int64_t *);
695#endif /* GLX_GLXEXT_PROTOTYPES */
696typedef Bool ( * PFNGLXGETSYNCVALUESOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t *ust, int64_t *msc, int64_t *sbc);
697typedef Bool ( * PFNGLXGETMSCRATEOMLPROC) (Display *dpy, GLXDrawable drawable, int32_t *numerator, int32_t *denominator);
698typedef int64_t ( * PFNGLXSWAPBUFFERSMSCOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder);
699typedef Bool ( * PFNGLXWAITFORMSCOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t *ust, int64_t *msc, int64_t *sbc);
700typedef Bool ( * PFNGLXWAITFORSBCOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t target_sbc, int64_t *ust, int64_t *msc, int64_t *sbc);
701#endif
702
703#ifndef GLX_NV_float_buffer
704#define GLX_NV_float_buffer 1
705#endif
706
707#ifndef GLX_SGIX_hyperpipe
708#define GLX_SGIX_hyperpipe 1
709
710typedef struct {
711 char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX];
712 int networkId;
713} GLXHyperpipeNetworkSGIX;
714
715typedef struct {
716 char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX];
717 int channel;
718 unsigned int
719 participationType;
720 int timeSlice;
721} GLXHyperpipeConfigSGIX;
722
723typedef struct {
724 char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX];
725 int srcXOrigin, srcYOrigin, srcWidth, srcHeight;
726 int destXOrigin, destYOrigin, destWidth, destHeight;
727} GLXPipeRect;
728
729typedef struct {
730 char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX];
731 int XOrigin, YOrigin, maxHeight, maxWidth;
732} GLXPipeRectLimits;
733
734#ifdef GLX_GLXEXT_PROTOTYPES
735extern GLXHyperpipeNetworkSGIX * glXQueryHyperpipeNetworkSGIX (Display *, int *);
736extern int glXHyperpipeConfigSGIX (Display *, int, int, GLXHyperpipeConfigSGIX *, int *);
737extern GLXHyperpipeConfigSGIX * glXQueryHyperpipeConfigSGIX (Display *, int, int *);
738extern int glXDestroyHyperpipeConfigSGIX (Display *, int);
739extern int glXBindHyperpipeSGIX (Display *, int);
740extern int glXQueryHyperpipeBestAttribSGIX (Display *, int, int, int, void *, void *);
741extern int glXHyperpipeAttribSGIX (Display *, int, int, int, void *);
742extern int glXQueryHyperpipeAttribSGIX (Display *, int, int, int, void *);
743#endif /* GLX_GLXEXT_PROTOTYPES */
744typedef GLXHyperpipeNetworkSGIX * ( * PFNGLXQUERYHYPERPIPENETWORKSGIXPROC) (Display *dpy, int *npipes);
745typedef int ( * PFNGLXHYPERPIPECONFIGSGIXPROC) (Display *dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX *cfg, int *hpId);
746typedef GLXHyperpipeConfigSGIX * ( * PFNGLXQUERYHYPERPIPECONFIGSGIXPROC) (Display *dpy, int hpId, int *npipes);
747typedef int ( * PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC) (Display *dpy, int hpId);
748typedef int ( * PFNGLXBINDHYPERPIPESGIXPROC) (Display *dpy, int hpId);
749typedef int ( * PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *attribList, void *returnAttribList);
750typedef int ( * PFNGLXHYPERPIPEATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *attribList);
751typedef int ( * PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *returnAttribList);
752#endif
753
754#ifndef GLX_MESA_agp_offset
755#define GLX_MESA_agp_offset 1
756#ifdef GLX_GLXEXT_PROTOTYPES
757extern unsigned int glXGetAGPOffsetMESA (const void *);
758#endif /* GLX_GLXEXT_PROTOTYPES */
759typedef unsigned int ( * PFNGLXGETAGPOFFSETMESAPROC) (const void *pointer);
760#endif
761
762#ifndef GLX_EXT_fbconfig_packed_float
763#define GLX_EXT_fbconfig_packed_float 1
764#endif
765
766#ifndef GLX_EXT_framebuffer_sRGB
767#define GLX_EXT_framebuffer_sRGB 1
768#endif
769
770#ifndef GLX_EXT_texture_from_pixmap
771#define GLX_EXT_texture_from_pixmap 1
772#ifdef GLX_GLXEXT_PROTOTYPES
773extern void glXBindTexImageEXT (Display *, GLXDrawable, int, const int *);
774extern void glXReleaseTexImageEXT (Display *, GLXDrawable, int);
775#endif /* GLX_GLXEXT_PROTOTYPES */
776typedef void ( * PFNGLXBINDTEXIMAGEEXTPROC) (Display *dpy, GLXDrawable drawable, int buffer, const int *attrib_list);
777typedef void ( * PFNGLXRELEASETEXIMAGEEXTPROC) (Display *dpy, GLXDrawable drawable, int buffer);
778#endif
779
780
781#ifdef __cplusplus
782}
783#endif
784
785#endif
diff --git a/linden/libraries/i686-win32/include/GL/wglext.h b/linden/libraries/i686-win32/include/GL/wglext.h
new file mode 100644
index 0000000..18804be
--- /dev/null
+++ b/linden/libraries/i686-win32/include/GL/wglext.h
@@ -0,0 +1,648 @@
1#ifndef __wglext_h_
2#define __wglext_h_
3
4#ifdef __cplusplus
5extern "C" {
6#endif
7
8/*
9** Copyright (c) 2007 The Khronos Group Inc.
10**
11** Permission is hereby granted, free of charge, to any person obtaining a
12** copy of this software and/or associated documentation files (the
13** "Materials"), to deal in the Materials without restriction, including
14** without limitation the rights to use, copy, modify, merge, publish,
15** distribute, sublicense, and/or sell copies of the Materials, and to
16** permit persons to whom the Materials are furnished to do so, subject to
17** the following conditions:
18**
19** The above copyright notice and this permission notice shall be included
20** in all copies or substantial portions of the Materials.
21**
22** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
25** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
26** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
27** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
28** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
29*/
30
31#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
32#define WIN32_LEAN_AND_MEAN 1
33#include <windows.h>
34#endif
35
36#ifndef APIENTRY
37#define APIENTRY
38#endif
39#ifndef APIENTRYP
40#define APIENTRYP APIENTRY *
41#endif
42#ifndef GLAPI
43#define GLAPI extern
44#endif
45
46/*************************************************************/
47
48/* Header file version number */
49/* wglext.h last updated 2007/02/09 */
50/* Current version at http://www.opengl.org/registry/ */
51#define WGL_WGLEXT_VERSION 9
52
53#ifndef WGL_ARB_buffer_region
54#define WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001
55#define WGL_BACK_COLOR_BUFFER_BIT_ARB 0x00000002
56#define WGL_DEPTH_BUFFER_BIT_ARB 0x00000004
57#define WGL_STENCIL_BUFFER_BIT_ARB 0x00000008
58#endif
59
60#ifndef WGL_ARB_multisample
61#define WGL_SAMPLE_BUFFERS_ARB 0x2041
62#define WGL_SAMPLES_ARB 0x2042
63#endif
64
65#ifndef WGL_ARB_extensions_string
66#endif
67
68#ifndef WGL_ARB_pixel_format
69#define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000
70#define WGL_DRAW_TO_WINDOW_ARB 0x2001
71#define WGL_DRAW_TO_BITMAP_ARB 0x2002
72#define WGL_ACCELERATION_ARB 0x2003
73#define WGL_NEED_PALETTE_ARB 0x2004
74#define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005
75#define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006
76#define WGL_SWAP_METHOD_ARB 0x2007
77#define WGL_NUMBER_OVERLAYS_ARB 0x2008
78#define WGL_NUMBER_UNDERLAYS_ARB 0x2009
79#define WGL_TRANSPARENT_ARB 0x200A
80#define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037
81#define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038
82#define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039
83#define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A
84#define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B
85#define WGL_SHARE_DEPTH_ARB 0x200C
86#define WGL_SHARE_STENCIL_ARB 0x200D
87#define WGL_SHARE_ACCUM_ARB 0x200E
88#define WGL_SUPPORT_GDI_ARB 0x200F
89#define WGL_SUPPORT_OPENGL_ARB 0x2010
90#define WGL_DOUBLE_BUFFER_ARB 0x2011
91#define WGL_STEREO_ARB 0x2012
92#define WGL_PIXEL_TYPE_ARB 0x2013
93#define WGL_COLOR_BITS_ARB 0x2014
94#define WGL_RED_BITS_ARB 0x2015
95#define WGL_RED_SHIFT_ARB 0x2016
96#define WGL_GREEN_BITS_ARB 0x2017
97#define WGL_GREEN_SHIFT_ARB 0x2018
98#define WGL_BLUE_BITS_ARB 0x2019
99#define WGL_BLUE_SHIFT_ARB 0x201A
100#define WGL_ALPHA_BITS_ARB 0x201B
101#define WGL_ALPHA_SHIFT_ARB 0x201C
102#define WGL_ACCUM_BITS_ARB 0x201D
103#define WGL_ACCUM_RED_BITS_ARB 0x201E
104#define WGL_ACCUM_GREEN_BITS_ARB 0x201F
105#define WGL_ACCUM_BLUE_BITS_ARB 0x2020
106#define WGL_ACCUM_ALPHA_BITS_ARB 0x2021
107#define WGL_DEPTH_BITS_ARB 0x2022
108#define WGL_STENCIL_BITS_ARB 0x2023
109#define WGL_AUX_BUFFERS_ARB 0x2024
110#define WGL_NO_ACCELERATION_ARB 0x2025
111#define WGL_GENERIC_ACCELERATION_ARB 0x2026
112#define WGL_FULL_ACCELERATION_ARB 0x2027
113#define WGL_SWAP_EXCHANGE_ARB 0x2028
114#define WGL_SWAP_COPY_ARB 0x2029
115#define WGL_SWAP_UNDEFINED_ARB 0x202A
116#define WGL_TYPE_RGBA_ARB 0x202B
117#define WGL_TYPE_COLORINDEX_ARB 0x202C
118#endif
119
120#ifndef WGL_ARB_make_current_read
121#define ERROR_INVALID_PIXEL_TYPE_ARB 0x2043
122#define ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054
123#endif
124
125#ifndef WGL_ARB_pbuffer
126#define WGL_DRAW_TO_PBUFFER_ARB 0x202D
127#define WGL_MAX_PBUFFER_PIXELS_ARB 0x202E
128#define WGL_MAX_PBUFFER_WIDTH_ARB 0x202F
129#define WGL_MAX_PBUFFER_HEIGHT_ARB 0x2030
130#define WGL_PBUFFER_LARGEST_ARB 0x2033
131#define WGL_PBUFFER_WIDTH_ARB 0x2034
132#define WGL_PBUFFER_HEIGHT_ARB 0x2035
133#define WGL_PBUFFER_LOST_ARB 0x2036
134#endif
135
136#ifndef WGL_ARB_render_texture
137#define WGL_BIND_TO_TEXTURE_RGB_ARB 0x2070
138#define WGL_BIND_TO_TEXTURE_RGBA_ARB 0x2071
139#define WGL_TEXTURE_FORMAT_ARB 0x2072
140#define WGL_TEXTURE_TARGET_ARB 0x2073
141#define WGL_MIPMAP_TEXTURE_ARB 0x2074
142#define WGL_TEXTURE_RGB_ARB 0x2075
143#define WGL_TEXTURE_RGBA_ARB 0x2076
144#define WGL_NO_TEXTURE_ARB 0x2077
145#define WGL_TEXTURE_CUBE_MAP_ARB 0x2078
146#define WGL_TEXTURE_1D_ARB 0x2079
147#define WGL_TEXTURE_2D_ARB 0x207A
148#define WGL_MIPMAP_LEVEL_ARB 0x207B
149#define WGL_CUBE_MAP_FACE_ARB 0x207C
150#define WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D
151#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E
152#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F
153#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080
154#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081
155#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082
156#define WGL_FRONT_LEFT_ARB 0x2083
157#define WGL_FRONT_RIGHT_ARB 0x2084
158#define WGL_BACK_LEFT_ARB 0x2085
159#define WGL_BACK_RIGHT_ARB 0x2086
160#define WGL_AUX0_ARB 0x2087
161#define WGL_AUX1_ARB 0x2088
162#define WGL_AUX2_ARB 0x2089
163#define WGL_AUX3_ARB 0x208A
164#define WGL_AUX4_ARB 0x208B
165#define WGL_AUX5_ARB 0x208C
166#define WGL_AUX6_ARB 0x208D
167#define WGL_AUX7_ARB 0x208E
168#define WGL_AUX8_ARB 0x208F
169#define WGL_AUX9_ARB 0x2090
170#endif
171
172#ifndef WGL_ARB_pixel_format_float
173#define WGL_TYPE_RGBA_FLOAT_ARB 0x21A0
174#endif
175
176#ifndef WGL_EXT_make_current_read
177#define ERROR_INVALID_PIXEL_TYPE_EXT 0x2043
178#endif
179
180#ifndef WGL_EXT_pixel_format
181#define WGL_NUMBER_PIXEL_FORMATS_EXT 0x2000
182#define WGL_DRAW_TO_WINDOW_EXT 0x2001
183#define WGL_DRAW_TO_BITMAP_EXT 0x2002
184#define WGL_ACCELERATION_EXT 0x2003
185#define WGL_NEED_PALETTE_EXT 0x2004
186#define WGL_NEED_SYSTEM_PALETTE_EXT 0x2005
187#define WGL_SWAP_LAYER_BUFFERS_EXT 0x2006
188#define WGL_SWAP_METHOD_EXT 0x2007
189#define WGL_NUMBER_OVERLAYS_EXT 0x2008
190#define WGL_NUMBER_UNDERLAYS_EXT 0x2009
191#define WGL_TRANSPARENT_EXT 0x200A
192#define WGL_TRANSPARENT_VALUE_EXT 0x200B
193#define WGL_SHARE_DEPTH_EXT 0x200C
194#define WGL_SHARE_STENCIL_EXT 0x200D
195#define WGL_SHARE_ACCUM_EXT 0x200E
196#define WGL_SUPPORT_GDI_EXT 0x200F
197#define WGL_SUPPORT_OPENGL_EXT 0x2010
198#define WGL_DOUBLE_BUFFER_EXT 0x2011
199#define WGL_STEREO_EXT 0x2012
200#define WGL_PIXEL_TYPE_EXT 0x2013
201#define WGL_COLOR_BITS_EXT 0x2014
202#define WGL_RED_BITS_EXT 0x2015
203#define WGL_RED_SHIFT_EXT 0x2016
204#define WGL_GREEN_BITS_EXT 0x2017
205#define WGL_GREEN_SHIFT_EXT 0x2018
206#define WGL_BLUE_BITS_EXT 0x2019
207#define WGL_BLUE_SHIFT_EXT 0x201A
208#define WGL_ALPHA_BITS_EXT 0x201B
209#define WGL_ALPHA_SHIFT_EXT 0x201C
210#define WGL_ACCUM_BITS_EXT 0x201D
211#define WGL_ACCUM_RED_BITS_EXT 0x201E
212#define WGL_ACCUM_GREEN_BITS_EXT 0x201F
213#define WGL_ACCUM_BLUE_BITS_EXT 0x2020
214#define WGL_ACCUM_ALPHA_BITS_EXT 0x2021
215#define WGL_DEPTH_BITS_EXT 0x2022
216#define WGL_STENCIL_BITS_EXT 0x2023
217#define WGL_AUX_BUFFERS_EXT 0x2024
218#define WGL_NO_ACCELERATION_EXT 0x2025
219#define WGL_GENERIC_ACCELERATION_EXT 0x2026
220#define WGL_FULL_ACCELERATION_EXT 0x2027
221#define WGL_SWAP_EXCHANGE_EXT 0x2028
222#define WGL_SWAP_COPY_EXT 0x2029
223#define WGL_SWAP_UNDEFINED_EXT 0x202A
224#define WGL_TYPE_RGBA_EXT 0x202B
225#define WGL_TYPE_COLORINDEX_EXT 0x202C
226#endif
227
228#ifndef WGL_EXT_pbuffer
229#define WGL_DRAW_TO_PBUFFER_EXT 0x202D
230#define WGL_MAX_PBUFFER_PIXELS_EXT 0x202E
231#define WGL_MAX_PBUFFER_WIDTH_EXT 0x202F
232#define WGL_MAX_PBUFFER_HEIGHT_EXT 0x2030
233#define WGL_OPTIMAL_PBUFFER_WIDTH_EXT 0x2031
234#define WGL_OPTIMAL_PBUFFER_HEIGHT_EXT 0x2032
235#define WGL_PBUFFER_LARGEST_EXT 0x2033
236#define WGL_PBUFFER_WIDTH_EXT 0x2034
237#define WGL_PBUFFER_HEIGHT_EXT 0x2035
238#endif
239
240#ifndef WGL_EXT_depth_float
241#define WGL_DEPTH_FLOAT_EXT 0x2040
242#endif
243
244#ifndef WGL_3DFX_multisample
245#define WGL_SAMPLE_BUFFERS_3DFX 0x2060
246#define WGL_SAMPLES_3DFX 0x2061
247#endif
248
249#ifndef WGL_EXT_multisample
250#define WGL_SAMPLE_BUFFERS_EXT 0x2041
251#define WGL_SAMPLES_EXT 0x2042
252#endif
253
254#ifndef WGL_I3D_digital_video_control
255#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D 0x2050
256#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D 0x2051
257#define WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D 0x2052
258#define WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D 0x2053
259#endif
260
261#ifndef WGL_I3D_gamma
262#define WGL_GAMMA_TABLE_SIZE_I3D 0x204E
263#define WGL_GAMMA_EXCLUDE_DESKTOP_I3D 0x204F
264#endif
265
266#ifndef WGL_I3D_genlock
267#define WGL_GENLOCK_SOURCE_MULTIVIEW_I3D 0x2044
268#define WGL_GENLOCK_SOURCE_EXTENAL_SYNC_I3D 0x2045
269#define WGL_GENLOCK_SOURCE_EXTENAL_FIELD_I3D 0x2046
270#define WGL_GENLOCK_SOURCE_EXTENAL_TTL_I3D 0x2047
271#define WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048
272#define WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049
273#define WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A
274#define WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B
275#define WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D 0x204C
276#endif
277
278#ifndef WGL_I3D_image_buffer
279#define WGL_IMAGE_BUFFER_MIN_ACCESS_I3D 0x00000001
280#define WGL_IMAGE_BUFFER_LOCK_I3D 0x00000002
281#endif
282
283#ifndef WGL_I3D_swap_frame_lock
284#endif
285
286#ifndef WGL_NV_render_depth_texture
287#define WGL_BIND_TO_TEXTURE_DEPTH_NV 0x20A3
288#define WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4
289#define WGL_DEPTH_TEXTURE_FORMAT_NV 0x20A5
290#define WGL_TEXTURE_DEPTH_COMPONENT_NV 0x20A6
291#define WGL_DEPTH_COMPONENT_NV 0x20A7
292#endif
293
294#ifndef WGL_NV_render_texture_rectangle
295#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0
296#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1
297#define WGL_TEXTURE_RECTANGLE_NV 0x20A2
298#endif
299
300#ifndef WGL_ATI_pixel_format_float
301#define WGL_TYPE_RGBA_FLOAT_ATI 0x21A0
302#endif
303
304#ifndef WGL_NV_float_buffer
305#define WGL_FLOAT_COMPONENTS_NV 0x20B0
306#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1
307#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2
308#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3
309#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4
310#define WGL_TEXTURE_FLOAT_R_NV 0x20B5
311#define WGL_TEXTURE_FLOAT_RG_NV 0x20B6
312#define WGL_TEXTURE_FLOAT_RGB_NV 0x20B7
313#define WGL_TEXTURE_FLOAT_RGBA_NV 0x20B8
314#endif
315
316#ifndef WGL_3DL_stereo_control
317#define WGL_STEREO_EMITTER_ENABLE_3DL 0x2055
318#define WGL_STEREO_EMITTER_DISABLE_3DL 0x2056
319#define WGL_STEREO_POLARITY_NORMAL_3DL 0x2057
320#define WGL_STEREO_POLARITY_INVERT_3DL 0x2058
321#endif
322
323#ifndef WGL_EXT_pixel_format_packed_float
324#define WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT 0x20A8
325#endif
326
327#ifndef WGL_EXT_framebuffer_sRGB
328#define WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20A9
329#endif
330
331
332/*************************************************************/
333
334#ifndef WGL_ARB_pbuffer
335DECLARE_HANDLE(HPBUFFERARB);
336#endif
337#ifndef WGL_EXT_pbuffer
338DECLARE_HANDLE(HPBUFFEREXT);
339#endif
340
341#ifndef WGL_ARB_buffer_region
342#define WGL_ARB_buffer_region 1
343#ifdef WGL_WGLEXT_PROTOTYPES
344extern HANDLE WINAPI wglCreateBufferRegionARB (HDC, int, UINT);
345extern VOID WINAPI wglDeleteBufferRegionARB (HANDLE);
346extern BOOL WINAPI wglSaveBufferRegionARB (HANDLE, int, int, int, int);
347extern BOOL WINAPI wglRestoreBufferRegionARB (HANDLE, int, int, int, int, int, int);
348#endif /* WGL_WGLEXT_PROTOTYPES */
349typedef HANDLE (WINAPI * PFNWGLCREATEBUFFERREGIONARBPROC) (HDC hDC, int iLayerPlane, UINT uType);
350typedef VOID (WINAPI * PFNWGLDELETEBUFFERREGIONARBPROC) (HANDLE hRegion);
351typedef BOOL (WINAPI * PFNWGLSAVEBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height);
352typedef BOOL (WINAPI * PFNWGLRESTOREBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc);
353#endif
354
355#ifndef WGL_ARB_multisample
356#define WGL_ARB_multisample 1
357#endif
358
359#ifndef WGL_ARB_extensions_string
360#define WGL_ARB_extensions_string 1
361#ifdef WGL_WGLEXT_PROTOTYPES
362extern const char * WINAPI wglGetExtensionsStringARB (HDC);
363#endif /* WGL_WGLEXT_PROTOTYPES */
364typedef const char * (WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc);
365#endif
366
367#ifndef WGL_ARB_pixel_format
368#define WGL_ARB_pixel_format 1
369#ifdef WGL_WGLEXT_PROTOTYPES
370extern BOOL WINAPI wglGetPixelFormatAttribivARB (HDC, int, int, UINT, const int *, int *);
371extern BOOL WINAPI wglGetPixelFormatAttribfvARB (HDC, int, int, UINT, const int *, FLOAT *);
372extern BOOL WINAPI wglChoosePixelFormatARB (HDC, const int *, const FLOAT *, UINT, int *, UINT *);
373#endif /* WGL_WGLEXT_PROTOTYPES */
374typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues);
375typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues);
376typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
377#endif
378
379#ifndef WGL_ARB_make_current_read
380#define WGL_ARB_make_current_read 1
381#ifdef WGL_WGLEXT_PROTOTYPES
382extern BOOL WINAPI wglMakeContextCurrentARB (HDC, HDC, HGLRC);
383extern HDC WINAPI wglGetCurrentReadDCARB (void);
384#endif /* WGL_WGLEXT_PROTOTYPES */
385typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTARBPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
386typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCARBPROC) (void);
387#endif
388
389#ifndef WGL_ARB_pbuffer
390#define WGL_ARB_pbuffer 1
391#ifdef WGL_WGLEXT_PROTOTYPES
392extern HPBUFFERARB WINAPI wglCreatePbufferARB (HDC, int, int, int, const int *);
393extern HDC WINAPI wglGetPbufferDCARB (HPBUFFERARB);
394extern int WINAPI wglReleasePbufferDCARB (HPBUFFERARB, HDC);
395extern BOOL WINAPI wglDestroyPbufferARB (HPBUFFERARB);
396extern BOOL WINAPI wglQueryPbufferARB (HPBUFFERARB, int, int *);
397#endif /* WGL_WGLEXT_PROTOTYPES */
398typedef HPBUFFERARB (WINAPI * PFNWGLCREATEPBUFFERARBPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);
399typedef HDC (WINAPI * PFNWGLGETPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer);
400typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer, HDC hDC);
401typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFERARBPROC) (HPBUFFERARB hPbuffer);
402typedef BOOL (WINAPI * PFNWGLQUERYPBUFFERARBPROC) (HPBUFFERARB hPbuffer, int iAttribute, int *piValue);
403#endif
404
405#ifndef WGL_ARB_render_texture
406#define WGL_ARB_render_texture 1
407#ifdef WGL_WGLEXT_PROTOTYPES
408extern BOOL WINAPI wglBindTexImageARB (HPBUFFERARB, int);
409extern BOOL WINAPI wglReleaseTexImageARB (HPBUFFERARB, int);
410extern BOOL WINAPI wglSetPbufferAttribARB (HPBUFFERARB, const int *);
411#endif /* WGL_WGLEXT_PROTOTYPES */
412typedef BOOL (WINAPI * PFNWGLBINDTEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer);
413typedef BOOL (WINAPI * PFNWGLRELEASETEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer);
414typedef BOOL (WINAPI * PFNWGLSETPBUFFERATTRIBARBPROC) (HPBUFFERARB hPbuffer, const int *piAttribList);
415#endif
416
417#ifndef WGL_ARB_pixel_format_float
418#define WGL_ARB_pixel_format_float 1
419#endif
420
421#ifndef WGL_EXT_display_color_table
422#define WGL_EXT_display_color_table 1
423#ifdef WGL_WGLEXT_PROTOTYPES
424extern GLboolean WINAPI wglCreateDisplayColorTableEXT (GLushort);
425extern GLboolean WINAPI wglLoadDisplayColorTableEXT (const GLushort *, GLuint);
426extern GLboolean WINAPI wglBindDisplayColorTableEXT (GLushort);
427extern VOID WINAPI wglDestroyDisplayColorTableEXT (GLushort);
428#endif /* WGL_WGLEXT_PROTOTYPES */
429typedef GLboolean (WINAPI * PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC) (GLushort id);
430typedef GLboolean (WINAPI * PFNWGLLOADDISPLAYCOLORTABLEEXTPROC) (const GLushort *table, GLuint length);
431typedef GLboolean (WINAPI * PFNWGLBINDDISPLAYCOLORTABLEEXTPROC) (GLushort id);
432typedef VOID (WINAPI * PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC) (GLushort id);
433#endif
434
435#ifndef WGL_EXT_extensions_string
436#define WGL_EXT_extensions_string 1
437#ifdef WGL_WGLEXT_PROTOTYPES
438extern const char * WINAPI wglGetExtensionsStringEXT (void);
439#endif /* WGL_WGLEXT_PROTOTYPES */
440typedef const char * (WINAPI * PFNWGLGETEXTENSIONSSTRINGEXTPROC) (void);
441#endif
442
443#ifndef WGL_EXT_make_current_read
444#define WGL_EXT_make_current_read 1
445#ifdef WGL_WGLEXT_PROTOTYPES
446extern BOOL WINAPI wglMakeContextCurrentEXT (HDC, HDC, HGLRC);
447extern HDC WINAPI wglGetCurrentReadDCEXT (void);
448#endif /* WGL_WGLEXT_PROTOTYPES */
449typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTEXTPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
450typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCEXTPROC) (void);
451#endif
452
453#ifndef WGL_EXT_pbuffer
454#define WGL_EXT_pbuffer 1
455#ifdef WGL_WGLEXT_PROTOTYPES
456extern HPBUFFEREXT WINAPI wglCreatePbufferEXT (HDC, int, int, int, const int *);
457extern HDC WINAPI wglGetPbufferDCEXT (HPBUFFEREXT);
458extern int WINAPI wglReleasePbufferDCEXT (HPBUFFEREXT, HDC);
459extern BOOL WINAPI wglDestroyPbufferEXT (HPBUFFEREXT);
460extern BOOL WINAPI wglQueryPbufferEXT (HPBUFFEREXT, int, int *);
461#endif /* WGL_WGLEXT_PROTOTYPES */
462typedef HPBUFFEREXT (WINAPI * PFNWGLCREATEPBUFFEREXTPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);
463typedef HDC (WINAPI * PFNWGLGETPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer);
464typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer, HDC hDC);
465typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer);
466typedef BOOL (WINAPI * PFNWGLQUERYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer, int iAttribute, int *piValue);
467#endif
468
469#ifndef WGL_EXT_pixel_format
470#define WGL_EXT_pixel_format 1
471#ifdef WGL_WGLEXT_PROTOTYPES
472extern BOOL WINAPI wglGetPixelFormatAttribivEXT (HDC, int, int, UINT, int *, int *);
473extern BOOL WINAPI wglGetPixelFormatAttribfvEXT (HDC, int, int, UINT, int *, FLOAT *);
474extern BOOL WINAPI wglChoosePixelFormatEXT (HDC, const int *, const FLOAT *, UINT, int *, UINT *);
475#endif /* WGL_WGLEXT_PROTOTYPES */
476typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues);
477typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues);
478typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATEXTPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
479#endif
480
481#ifndef WGL_EXT_swap_control
482#define WGL_EXT_swap_control 1
483#ifdef WGL_WGLEXT_PROTOTYPES
484extern BOOL WINAPI wglSwapIntervalEXT (int);
485extern int WINAPI wglGetSwapIntervalEXT (void);
486#endif /* WGL_WGLEXT_PROTOTYPES */
487typedef BOOL (WINAPI * PFNWGLSWAPINTERVALEXTPROC) (int interval);
488typedef int (WINAPI * PFNWGLGETSWAPINTERVALEXTPROC) (void);
489#endif
490
491#ifndef WGL_EXT_depth_float
492#define WGL_EXT_depth_float 1
493#endif
494
495#ifndef WGL_NV_vertex_array_range
496#define WGL_NV_vertex_array_range 1
497#ifdef WGL_WGLEXT_PROTOTYPES
498extern void* WINAPI wglAllocateMemoryNV (GLsizei, GLfloat, GLfloat, GLfloat);
499extern void WINAPI wglFreeMemoryNV (void *);
500#endif /* WGL_WGLEXT_PROTOTYPES */
501typedef void* (WINAPI * PFNWGLALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority);
502typedef void (WINAPI * PFNWGLFREEMEMORYNVPROC) (void *pointer);
503#endif
504
505#ifndef WGL_3DFX_multisample
506#define WGL_3DFX_multisample 1
507#endif
508
509#ifndef WGL_EXT_multisample
510#define WGL_EXT_multisample 1
511#endif
512
513#ifndef WGL_OML_sync_control
514#define WGL_OML_sync_control 1
515#ifdef WGL_WGLEXT_PROTOTYPES
516extern BOOL WINAPI wglGetSyncValuesOML (HDC, INT64 *, INT64 *, INT64 *);
517extern BOOL WINAPI wglGetMscRateOML (HDC, INT32 *, INT32 *);
518extern INT64 WINAPI wglSwapBuffersMscOML (HDC, INT64, INT64, INT64);
519extern INT64 WINAPI wglSwapLayerBuffersMscOML (HDC, int, INT64, INT64, INT64);
520extern BOOL WINAPI wglWaitForMscOML (HDC, INT64, INT64, INT64, INT64 *, INT64 *, INT64 *);
521extern BOOL WINAPI wglWaitForSbcOML (HDC, INT64, INT64 *, INT64 *, INT64 *);
522#endif /* WGL_WGLEXT_PROTOTYPES */
523typedef BOOL (WINAPI * PFNWGLGETSYNCVALUESOMLPROC) (HDC hdc, INT64 *ust, INT64 *msc, INT64 *sbc);
524typedef BOOL (WINAPI * PFNWGLGETMSCRATEOMLPROC) (HDC hdc, INT32 *numerator, INT32 *denominator);
525typedef INT64 (WINAPI * PFNWGLSWAPBUFFERSMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder);
526typedef INT64 (WINAPI * PFNWGLSWAPLAYERBUFFERSMSCOMLPROC) (HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder);
527typedef BOOL (WINAPI * PFNWGLWAITFORMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 *ust, INT64 *msc, INT64 *sbc);
528typedef BOOL (WINAPI * PFNWGLWAITFORSBCOMLPROC) (HDC hdc, INT64 target_sbc, INT64 *ust, INT64 *msc, INT64 *sbc);
529#endif
530
531#ifndef WGL_I3D_digital_video_control
532#define WGL_I3D_digital_video_control 1
533#ifdef WGL_WGLEXT_PROTOTYPES
534extern BOOL WINAPI wglGetDigitalVideoParametersI3D (HDC, int, int *);
535extern BOOL WINAPI wglSetDigitalVideoParametersI3D (HDC, int, const int *);
536#endif /* WGL_WGLEXT_PROTOTYPES */
537typedef BOOL (WINAPI * PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue);
538typedef BOOL (WINAPI * PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue);
539#endif
540
541#ifndef WGL_I3D_gamma
542#define WGL_I3D_gamma 1
543#ifdef WGL_WGLEXT_PROTOTYPES
544extern BOOL WINAPI wglGetGammaTableParametersI3D (HDC, int, int *);
545extern BOOL WINAPI wglSetGammaTableParametersI3D (HDC, int, const int *);
546extern BOOL WINAPI wglGetGammaTableI3D (HDC, int, USHORT *, USHORT *, USHORT *);
547extern BOOL WINAPI wglSetGammaTableI3D (HDC, int, const USHORT *, const USHORT *, const USHORT *);
548#endif /* WGL_WGLEXT_PROTOTYPES */
549typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue);
550typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue);
551typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, USHORT *puRed, USHORT *puGreen, USHORT *puBlue);
552typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, const USHORT *puRed, const USHORT *puGreen, const USHORT *puBlue);
553#endif
554
555#ifndef WGL_I3D_genlock
556#define WGL_I3D_genlock 1
557#ifdef WGL_WGLEXT_PROTOTYPES
558extern BOOL WINAPI wglEnableGenlockI3D (HDC);
559extern BOOL WINAPI wglDisableGenlockI3D (HDC);
560extern BOOL WINAPI wglIsEnabledGenlockI3D (HDC, BOOL *);
561extern BOOL WINAPI wglGenlockSourceI3D (HDC, UINT);
562extern BOOL WINAPI wglGetGenlockSourceI3D (HDC, UINT *);
563extern BOOL WINAPI wglGenlockSourceEdgeI3D (HDC, UINT);
564extern BOOL WINAPI wglGetGenlockSourceEdgeI3D (HDC, UINT *);
565extern BOOL WINAPI wglGenlockSampleRateI3D (HDC, UINT);
566extern BOOL WINAPI wglGetGenlockSampleRateI3D (HDC, UINT *);
567extern BOOL WINAPI wglGenlockSourceDelayI3D (HDC, UINT);
568extern BOOL WINAPI wglGetGenlockSourceDelayI3D (HDC, UINT *);
569extern BOOL WINAPI wglQueryGenlockMaxSourceDelayI3D (HDC, UINT *, UINT *);
570#endif /* WGL_WGLEXT_PROTOTYPES */
571typedef BOOL (WINAPI * PFNWGLENABLEGENLOCKI3DPROC) (HDC hDC);
572typedef BOOL (WINAPI * PFNWGLDISABLEGENLOCKI3DPROC) (HDC hDC);
573typedef BOOL (WINAPI * PFNWGLISENABLEDGENLOCKI3DPROC) (HDC hDC, BOOL *pFlag);
574typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEI3DPROC) (HDC hDC, UINT uSource);
575typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEI3DPROC) (HDC hDC, UINT *uSource);
576typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT uEdge);
577typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT *uEdge);
578typedef BOOL (WINAPI * PFNWGLGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT uRate);
579typedef BOOL (WINAPI * PFNWGLGETGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT *uRate);
580typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT uDelay);
581typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT *uDelay);
582typedef BOOL (WINAPI * PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC) (HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay);
583#endif
584
585#ifndef WGL_I3D_image_buffer
586#define WGL_I3D_image_buffer 1
587#ifdef WGL_WGLEXT_PROTOTYPES
588extern LPVOID WINAPI wglCreateImageBufferI3D (HDC, DWORD, UINT);
589extern BOOL WINAPI wglDestroyImageBufferI3D (HDC, LPVOID);
590extern BOOL WINAPI wglAssociateImageBufferEventsI3D (HDC, const HANDLE *, const LPVOID *, const DWORD *, UINT);
591extern BOOL WINAPI wglReleaseImageBufferEventsI3D (HDC, const LPVOID *, UINT);
592#endif /* WGL_WGLEXT_PROTOTYPES */
593typedef LPVOID (WINAPI * PFNWGLCREATEIMAGEBUFFERI3DPROC) (HDC hDC, DWORD dwSize, UINT uFlags);
594typedef BOOL (WINAPI * PFNWGLDESTROYIMAGEBUFFERI3DPROC) (HDC hDC, LPVOID pAddress);
595typedef BOOL (WINAPI * PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count);
596typedef BOOL (WINAPI * PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const LPVOID *pAddress, UINT count);
597#endif
598
599#ifndef WGL_I3D_swap_frame_lock
600#define WGL_I3D_swap_frame_lock 1
601#ifdef WGL_WGLEXT_PROTOTYPES
602extern BOOL WINAPI wglEnableFrameLockI3D (void);
603extern BOOL WINAPI wglDisableFrameLockI3D (void);
604extern BOOL WINAPI wglIsEnabledFrameLockI3D (BOOL *);
605extern BOOL WINAPI wglQueryFrameLockMasterI3D (BOOL *);
606#endif /* WGL_WGLEXT_PROTOTYPES */
607typedef BOOL (WINAPI * PFNWGLENABLEFRAMELOCKI3DPROC) (void);
608typedef BOOL (WINAPI * PFNWGLDISABLEFRAMELOCKI3DPROC) (void);
609typedef BOOL (WINAPI * PFNWGLISENABLEDFRAMELOCKI3DPROC) (BOOL *pFlag);
610typedef BOOL (WINAPI * PFNWGLQUERYFRAMELOCKMASTERI3DPROC) (BOOL *pFlag);
611#endif
612
613#ifndef WGL_I3D_swap_frame_usage
614#define WGL_I3D_swap_frame_usage 1
615#ifdef WGL_WGLEXT_PROTOTYPES
616extern BOOL WINAPI wglGetFrameUsageI3D (float *);
617extern BOOL WINAPI wglBeginFrameTrackingI3D (void);
618extern BOOL WINAPI wglEndFrameTrackingI3D (void);
619extern BOOL WINAPI wglQueryFrameTrackingI3D (DWORD *, DWORD *, float *);
620#endif /* WGL_WGLEXT_PROTOTYPES */
621typedef BOOL (WINAPI * PFNWGLGETFRAMEUSAGEI3DPROC) (float *pUsage);
622typedef BOOL (WINAPI * PFNWGLBEGINFRAMETRACKINGI3DPROC) (void);
623typedef BOOL (WINAPI * PFNWGLENDFRAMETRACKINGI3DPROC) (void);
624typedef BOOL (WINAPI * PFNWGLQUERYFRAMETRACKINGI3DPROC) (DWORD *pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage);
625#endif
626
627#ifndef WGL_ATI_pixel_format_float
628#define WGL_ATI_pixel_format_float 1
629#endif
630
631#ifndef WGL_NV_float_buffer
632#define WGL_NV_float_buffer 1
633#endif
634
635#ifndef WGL_EXT_pixel_format_packed_float
636#define WGL_EXT_pixel_format_packed_float 1
637#endif
638
639#ifndef WGL_EXT_framebuffer_sRGB
640#define WGL_EXT_framebuffer_sRGB 1
641#endif
642
643
644#ifdef __cplusplus
645}
646#endif
647
648#endif
diff --git a/linden/libraries/include/llmozlib2.h b/linden/libraries/include/llmozlib2.h
index 1dd71dc..d85caf9 100644
--- a/linden/libraries/include/llmozlib2.h
+++ b/linden/libraries/include/llmozlib2.h
@@ -72,6 +72,15 @@ class LLEmbeddedBrowserWindowEvent
72 { 72 {
73 }; 73 };
74 74
75 // 2 strings passed with the event
76 LLEmbeddedBrowserWindowEvent( int eventWindowIdIn, std::string uriIn, std::string stringValIn, std::string stringVal2In ) :
77 mEventWindowId( eventWindowIdIn ),
78 mEventUri( uriIn ),
79 mStringVal( stringValIn ),
80 mStringVal2( stringVal2In )
81 {
82 };
83
75 // string and an int passed with the event 84 // string and an int passed with the event
76 LLEmbeddedBrowserWindowEvent( int eventWindowIdIn, std::string uriIn, std::string stringValIn, int intValIn ) : 85 LLEmbeddedBrowserWindowEvent( int eventWindowIdIn, std::string uriIn, std::string stringValIn, int intValIn ) :
77 mEventWindowId( eventWindowIdIn ), 86 mEventWindowId( eventWindowIdIn ),
@@ -116,6 +125,11 @@ class LLEmbeddedBrowserWindowEvent
116 return mStringVal; 125 return mStringVal;
117 }; 126 };
118 127
128 std::string getStringValue2() const
129 {
130 return mStringVal2;
131 };
132
119 void getRectValue( int& xOut, int& yOut, int& widthOut, int& heightOut ) const 133 void getRectValue( int& xOut, int& yOut, int& widthOut, int& heightOut ) const
120 { 134 {
121 xOut = mXVal; 135 xOut = mXVal;
@@ -129,6 +143,7 @@ class LLEmbeddedBrowserWindowEvent
129 std::string mEventUri; 143 std::string mEventUri;
130 int mIntVal; 144 int mIntVal;
131 std::string mStringVal; 145 std::string mStringVal;
146 std::string mStringVal2;
132 int mXVal; 147 int mXVal;
133 int mYVal; 148 int mYVal;
134 int mWidthVal; 149 int mWidthVal;
diff --git a/linden/scripts/messages/message_template.msg b/linden/scripts/messages/message_template.msg
index b9c694b..c5588f4 100644
--- a/linden/scripts/messages/message_template.msg
+++ b/linden/scripts/messages/message_template.msg
@@ -1955,10 +1955,19 @@ version 2.0
1955} 1955}
1956 1956
1957 1957
1958// ObjectPosition 1958// DEPRECATED: ObjectPosition
1959// viewer -> simulator 1959// == Old Behavior ==
1960// Set the position on objects
1961//
1962// == Reason for deprecation ==
1963// Unused code path was removed in the move to Havok4
1964// Object position, scale and rotation messages were already unified
1965// to MultipleObjectUpdate and this message was unused cruft.
1966//
1967// == New Location ==
1968// MultipleObjectUpdate can be used instead.
1960{ 1969{
1961 ObjectPosition Medium 4 NotTrusted Zerocoded 1970 ObjectPosition Medium 4 NotTrusted Zerocoded Deprecated
1962 { 1971 {
1963 AgentData Single 1972 AgentData Single
1964 { AgentID LLUUID } 1973 { AgentID LLUUID }
@@ -1972,10 +1981,19 @@ version 2.0
1972} 1981}
1973 1982
1974 1983
1975// ObjectScale 1984// DEPRECATED: ObjectScale
1976// viewer -> simulator 1985// == Old Behavior ==
1986// Set the scale on objects
1987//
1988// == Reason for deprecation ==
1989// Unused code path was removed in the move to Havok4
1990// Object position, scale and rotation messages were already unified
1991// to MultipleObjectUpdate and this message was unused cruft.
1992//
1993// == New Location ==
1994// MultipleObjectUpdate can be used instead.
1977{ 1995{
1978 ObjectScale Low 92 NotTrusted Zerocoded 1996 ObjectScale Low 92 NotTrusted Zerocoded Deprecated
1979 { 1997 {
1980 AgentData Single 1998 AgentData Single
1981 { AgentID LLUUID } 1999 { AgentID LLUUID }