aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra
diff options
context:
space:
mode:
authorDavid Walter Seikel2014-02-03 15:23:22 +1000
committerDavid Walter Seikel2014-02-03 15:23:22 +1000
commitd056a17f05a1f90708f554651475e116a2ddbd68 (patch)
tree07fa4f1cca2a25548b8d2d6b4752b07d8efbd2ff /linden/indra
parentUpdating tree and volume LOD. These go to eleven. (diff)
parentFix up OTR prefs to not crash. (diff)
downloadmeta-impy-next.zip
meta-impy-next.tar.gz
meta-impy-next.tar.bz2
meta-impy-next.tar.xz
Merge branch 'next' of github.com:onefang/meta-impy into nextHEADnext
Diffstat (limited to 'linden/indra')
-rw-r--r--linden/indra/cmake/00-Common.cmake13
-rw-r--r--linden/indra/cmake/CMakeLists.txt1
-rw-r--r--linden/indra/cmake/Variables.cmake11
-rw-r--r--linden/indra/cmake/ViewerArtwork.cmake16
-rw-r--r--linden/indra/cmake/gpg.vs.cmake1
-rw-r--r--linden/indra/cmake/libgcrypt.cmake10
-rw-r--r--linden/indra/cmake/libgpg-error.cmake10
-rw-r--r--linden/indra/cmake/libotr.cmake2
-rw-r--r--linden/indra/cmake/libotrb.cmake2
-rwxr-xr-xlinden/indra/develop.py209
-rwxr-xr-xlinden/indra/gpg.vs/libgpg-error-1.1.vs/custom/config.h6
-rw-r--r--linden/indra/llcommon/llsdserialize.cpp5
-rw-r--r--linden/indra/llcommon/llsdserialize_xml.cpp16
-rw-r--r--linden/indra/llcommon/llstring.cpp34
-rw-r--r--linden/indra/llcommon/llstring.h2
-rw-r--r--linden/indra/llmath/llsdutil_math.cpp14
-rw-r--r--linden/indra/llmath/llvolume.cpp9
-rw-r--r--linden/indra/llmessage/llblowfishcipher.cpp68
-rw-r--r--linden/indra/llmessage/llhttpassetstorage.cpp3
-rwxr-xr-xlinden/indra/llplugin/slplugin/CMakeLists.txt2
-rwxr-xr-xlinden/indra/llprimitive/llmaterialtable.cpp10
-rw-r--r--linden/indra/llrender/llfont.cpp2
-rw-r--r--linden/indra/llrender/llgl.cpp13
-rw-r--r--linden/indra/llrender/llimagegl.cpp4
-rw-r--r--linden/indra/llui/llcombobox.cpp5
-rw-r--r--linden/indra/llui/llcombobox.h5
-rw-r--r--linden/indra/llui/llfloater.cpp16
-rw-r--r--linden/indra/llui/llfunctorregistry.h2
-rw-r--r--linden/indra/llui/llkeywords.cpp2
-rw-r--r--linden/indra/llui/llmenugl.cpp2
-rw-r--r--linden/indra/llui/llpanel.cpp1
-rw-r--r--linden/indra/llui/llprogressbar.cpp3
-rw-r--r--linden/indra/llui/llresmgr.cpp9
-rw-r--r--linden/indra/llui/llslider.cpp1
-rw-r--r--linden/indra/llui/lltexteditor.cpp4
-rw-r--r--linden/indra/llui/llui.h2
-rw-r--r--linden/indra/llwindow/GL/glh_extensions.h4
-rw-r--r--linden/indra/llwindow/llwindowsdl.cpp3
-rw-r--r--linden/indra/lscript/lscript_compile/CMakeLists.txt6
-rw-r--r--linden/indra/lscript/lscript_compile/indra.l24
-rw-r--r--linden/indra/lscript/lscript_execute/lscript_execute.cpp11
-rw-r--r--linden/indra/lscript/lscript_execute/lscript_readlso.cpp6
-rw-r--r--linden/indra/lscript/lscript_library/lscript_library.cpp59
-rw-r--r--linden/indra/mac_crash_logger/CMakeLists.txt2
-rw-r--r--linden/indra/mac_updater/CMakeLists.txt2
-rw-r--r--linden/indra/mac_updater/mac_updater.cpp6
-rwxr-xr-xlinden/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp7
-rw-r--r--linden/indra/media_plugins/webkit/CMakeLists.txt4
-rw-r--r--linden/indra/newview/CMakeLists.txt67
-rw-r--r--linden/indra/newview/app_settings/default_grids.xml351
-rw-r--r--linden/indra/newview/app_settings/settings.xml128
-rw-r--r--linden/indra/newview/chatbar_as_cmdline.cpp1
-rw-r--r--linden/indra/newview/floaterotr.cpp4
-rw-r--r--linden/indra/newview/hippogridmanager.cpp198
-rw-r--r--linden/indra/newview/hippogridmanager.h5
-rw-r--r--linden/indra/newview/hippoupdate.h12
-rw-r--r--linden/indra/newview/installers/windows/imprudence_installer_script_experimental.iss12
-rw-r--r--linden/indra/newview/installers/windows/meta-impy_installer_template.iss8
-rwxr-xr-xlinden/indra/newview/installers/windows/vcredist_x86_VS2005.exebin0 -> 2686232 bytes
-rwxr-xr-xlinden/indra/newview/linux_tools/register_secondlifeprotocol.sh21
-rw-r--r--linden/indra/newview/llagent.cpp23
-rw-r--r--linden/indra/newview/llappviewer.cpp10
-rw-r--r--linden/indra/newview/lldrawable.cpp3
-rw-r--r--linden/indra/newview/llettherebelight.cpp (renamed from linden/indra/newview/lightshare.cpp)358
-rw-r--r--linden/indra/newview/llettherebelight.h (renamed from linden/indra/newview/lightshare.h)92
-rw-r--r--linden/indra/newview/llflexibleobject.cpp3
-rw-r--r--linden/indra/newview/llfloateractivespeakers.cpp2
-rw-r--r--linden/indra/newview/llfloaterbeacons.cpp3
-rw-r--r--linden/indra/newview/llfloaterbuildoptions.cpp17
-rw-r--r--linden/indra/newview/llfloaterchat.cpp2
-rw-r--r--linden/indra/newview/llfloaterenvsettings.cpp15
-rw-r--r--linden/indra/newview/llfloaterjoystick.cpp1
-rw-r--r--linden/indra/newview/llfloatermediabrowser.cpp3
-rw-r--r--linden/indra/newview/llfloatertools.cpp1
-rw-r--r--linden/indra/newview/llfloaterwater.cpp105
-rw-r--r--linden/indra/newview/llfloaterwindlight.cpp4
-rw-r--r--linden/indra/newview/llfolderview.cpp6
-rw-r--r--linden/indra/newview/llgesturemgr.cpp2
-rw-r--r--linden/indra/newview/llhoverview.cpp9
-rw-r--r--linden/indra/newview/llinventorybridge.cpp52
-rw-r--r--linden/indra/newview/llinventorybridge.h3
-rw-r--r--linden/indra/newview/llinventorymodel.cpp27
-rw-r--r--linden/indra/newview/llmaniprotate.cpp1
-rw-r--r--linden/indra/newview/llmanipscale.cpp5
-rw-r--r--linden/indra/newview/llmaniptranslate.cpp21
-rw-r--r--linden/indra/newview/llmediadataclient.cpp813
-rw-r--r--linden/indra/newview/llmediadataclient.h341
-rw-r--r--linden/indra/newview/llpanelavatar.cpp10
-rw-r--r--linden/indra/newview/llpanelcontents.cpp2
-rw-r--r--linden/indra/newview/llpanelface.cpp1
-rw-r--r--linden/indra/newview/llpanelgrouplandmoney.cpp5
-rw-r--r--linden/indra/newview/llpanelinventory.cpp26
-rw-r--r--linden/indra/newview/llpanellogin.cpp5
-rw-r--r--linden/indra/newview/llpanelmediahud.cpp1
-rw-r--r--linden/indra/newview/llpanelobject.cpp4
-rw-r--r--linden/indra/newview/llpanelpermissions.cpp5
-rw-r--r--linden/indra/newview/llpanelvolume.cpp4
-rw-r--r--linden/indra/newview/llselectmgr.cpp2
-rw-r--r--linden/indra/newview/llspatialpartition.cpp6
-rw-r--r--linden/indra/newview/llstartup.cpp70
-rw-r--r--linden/indra/newview/llsurface.cpp2
-rw-r--r--linden/indra/newview/lltool.cpp4
-rw-r--r--linden/indra/newview/lltoolcomp.cpp83
-rw-r--r--linden/indra/newview/lltoolcomp.h35
-rw-r--r--linden/indra/newview/lltooldraganddrop.cpp14
-rw-r--r--linden/indra/newview/lltoolface.cpp3
-rw-r--r--linden/indra/newview/lltoolface.h3
-rw-r--r--linden/indra/newview/lltoolfocus.cpp10
-rw-r--r--linden/indra/newview/lltoolmgr.cpp2
-rw-r--r--linden/indra/newview/llurlhistory.cpp2
-rw-r--r--linden/indra/newview/llviewercamera.cpp6
-rw-r--r--linden/indra/newview/llviewerdisplay.cpp1
-rw-r--r--linden/indra/newview/llviewergenericmessage.cpp24
-rw-r--r--linden/indra/newview/llviewermenu.cpp53
-rw-r--r--[-rwxr-xr-x]linden/indra/newview/llviewermessage.cpp370
-rw-r--r--linden/indra/newview/llviewerobject.cpp3
-rw-r--r--linden/indra/newview/llviewerobject.h8
-rw-r--r--linden/indra/newview/llviewerobjectlist.cpp39
-rw-r--r--linden/indra/newview/llviewerparcelmedia.cpp6
-rw-r--r--linden/indra/newview/llviewerregion.cpp2
-rw-r--r--linden/indra/newview/llvlcomposition.cpp8
-rw-r--r--linden/indra/newview/llvoavatar.cpp17
-rw-r--r--linden/indra/newview/llvoiceclient.cpp10
-rw-r--r--linden/indra/newview/llvosurfacepatch.cpp10
-rw-r--r--linden/indra/newview/llvovolume.cpp398
-rw-r--r--linden/indra/newview/llvovolume.h53
-rw-r--r--linden/indra/newview/llvowlsky.cpp25
-rw-r--r--linden/indra/newview/llwaterparammanager.cpp111
-rw-r--r--linden/indra/newview/llwaterparamset.cpp2
-rw-r--r--linden/indra/newview/llwaterparamset.h4
-rw-r--r--linden/indra/newview/llwlparammanager.cpp135
-rw-r--r--linden/indra/newview/llwlparammanager.h50
-rw-r--r--linden/indra/newview/llwlparamset.h78
-rw-r--r--linden/indra/newview/llworldmapview.cpp3
-rw-r--r--linden/indra/newview/packaging/mac/English.lproj/InfoPlist.strings6
-rw-r--r--linden/indra/newview/panelradar.cpp3
-rw-r--r--linden/indra/newview/pipeline.cpp69
-rw-r--r--linden/indra/newview/pipeline.h5
-rw-r--r--linden/indra/newview/qtoolalign.cpp19
-rw-r--r--linden/indra/newview/qtoolalign.h4
-rw-r--r--linden/indra/newview/rcmoapradar.cpp440
-rw-r--r--linden/indra/newview/rcmoapradar.h58
-rw-r--r--linden/indra/newview/res-sdl/imprudence_icon.BMPbin0 -> 4662 bytes
-rw-r--r--linden/indra/newview/res/imprudence_icon.pngbin0 -> 32529 bytes
-rw-r--r--linden/indra/newview/res/viewerRes.rc4
-rw-r--r--linden/indra/newview/skins/dark/textures/icon_top_pick.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/default/colors_base.xml1
-rw-r--r--linden/indra/newview/skins/default/html/en-us/loading/imprudence_loading.pngbin0 -> 10714 bytes
-rw-r--r--linden/indra/newview/skins/default/textures/uv_test1.bmpbin0 -> 196662 bytes
-rw-r--r--linden/indra/newview/skins/default/xui/da/floater_html.xml6
-rw-r--r--linden/indra/newview/skins/default/xui/de/floater_html.xml6
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_about.xml11
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_beacons.xml5
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_build_options.xml31
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_clear_cache.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_html.xml6
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_media_browser.xml6
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_moap_radar.xml54
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_tools.xml25
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/menu_inventory.xml16
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/menu_login.xml12
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/menu_viewer.xml46
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/notifications.xml12
-rw-r--r--linden/indra/newview/skins/default/xui/es/floater_html.xml6
-rw-r--r--linden/indra/newview/skins/default/xui/fr/floater_html.xml6
-rw-r--r--linden/indra/newview/skins/default/xui/hu/floater_html.xml3
-rw-r--r--linden/indra/newview/skins/default/xui/it/floater_html.xml6
-rw-r--r--linden/indra/newview/skins/default/xui/ja/floater_html.xml6
-rw-r--r--linden/indra/newview/skins/default/xui/nl/floater_html.xml6
-rwxr-xr-xlinden/indra/newview/skins/default/xui/pl/floater_html.xml6
-rw-r--r--linden/indra/newview/skins/default/xui/pt/floater_html.xml6
-rw-r--r--linden/indra/newview/skins/default/xui/ru/floater_html.xml3
-rw-r--r--linden/indra/newview/skins/default/xui/uk/floater_html.xml3
-rw-r--r--linden/indra/newview/skins/default/xui/zh/notifications.xml18
-rw-r--r--linden/indra/newview/skins/gemini/colors_base.xml2
-rw-r--r--linden/indra/newview/skins/silver/textures/0098b015-3daf-4cfe-a72f-915369ea97c2.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/3c18c87e-5f50-14e2-e744-f44734aa365f.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/7a0b1bdb-b5d9-4df5-bac2-ba230da93b5b.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/7dabc040-ec13-2309-ddf7-4f161f6de2f4.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/9cad3e6d-2d6d-107d-f8ab-5ba272b5bfe1.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/active_speakers.tgabin0 -> 2092 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/active_voice_tab.tgabin0 -> 556 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/arrow_down.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/arrow_left.tgabin0 -> 424 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/arrow_right.tgabin0 -> 424 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/arrow_up.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/b4870163-6208-42a9-9801-93133bf9a6cd.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/black.tgabin0 -> 3116 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/btn_chatbar.tgabin0 -> 6188 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/btn_chatbar_selected.tgabin0 -> 6188 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/button_anim_pause.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/button_anim_pause_selected.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/button_anim_play.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/button_anim_play_selected.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/button_anim_stop.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/button_anim_stop_selected.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/button_disabled_32x128.tgabin0 -> 12332 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/button_enabled_32x128.tgabin0 -> 10284 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/button_enabled_selected_32x128.tgabin0 -> 10284 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/c1e21504-f136-451d-b8e9-929037812f1d.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/c63f124c-6340-4fbf-b59e-0869a44adb64.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/ce15fd63-b0b6-463c-a37d-ea6393208b3e.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/checkbox_disabled_false.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/checkbox_disabled_true.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/checkbox_enabled_false.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/checkbox_enabled_true.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/close_in_blue.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/close_inactive_blue.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/closebox.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/combobox_arrow.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/darkgray.tgabin0 -> 3116 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/down_arrow.pngbin0 -> 2866 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/eye_button_active.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/eye_button_inactive.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/ff9a71eb-7414-4cf8-866e-a701deb7c3cf.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/ff_edit_mine_button.tgabin0 -> 1644 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/ff_edit_theirs_button.tgabin0 -> 1644 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/ff_online_status_button.tgabin0 -> 1644 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/ff_visible_map_button.tgabin0 -> 1644 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/ff_visible_online_button.tgabin0 -> 1644 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/flyout_btn_left.tgabin0 -> 12332 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/flyout_btn_left_disabled.tgabin0 -> 10284 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/flyout_btn_left_selected.tgabin0 -> 12332 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/flyout_btn_right.tgabin0 -> 2348 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/flyout_btn_right_disabled.tgabin0 -> 10284 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/flyout_btn_right_selected.tgabin0 -> 2348 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_chatbar.tgabin0 -> 2348 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_label_media.tgabin0 -> 996 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_label_music.tgabin0 -> 828 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_label_web.tgabin0 -> 828 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_media-pause.tgabin0 -> 2092 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_media-play.tgabin0 -> 2092 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_media_movie.tgabin0 -> 996 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_media_web.tgabin0 -> 996 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_music-pause.tgabin0 -> 2092 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_music-play.tgabin0 -> 2092 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_pause.tgabin0 -> 444 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_play.tgabin0 -> 444 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_rounded-text-field.tgabin0 -> 16428 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_slide-groove_dark.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_slide-highlight.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_slide-thumb_dark.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_speaker-muted_dark.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_speaker_dark.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_stop.tgabin0 -> 444 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_toolbar_build.tgabin0 -> 2348 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_toolbar_fly.tgabin0 -> 2348 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_toolbar_inventory.tgabin0 -> 2348 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_toolbar_map.tgabin0 -> 2348 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_toolbar_minimap.tgabin0 -> 2348 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_toolbar_search.tgabin0 -> 2348 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_toolbar_snapshot.tgabin0 -> 2348 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_voice-call-end.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_voice-call-start.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_voice-groupfocus.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_voice-localchat.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_voice-pvtfocus.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_voice_ptt-off.tgabin0 -> 828 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_voice_ptt-on-lvl1.tgabin0 -> 828 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_voice_ptt-on-lvl2.tgabin0 -> 828 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_voice_ptt-on-lvl3.tgabin0 -> 828 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icn_voice_ptt-on.tgabin0 -> 828 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icon_auction.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icon_avatar_offline.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icon_avatar_online.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icon_day_cycle.tgabin0 -> 24594 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icon_event.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icon_event_mature.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icon_for_sale.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icon_group.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icon_groupnotice.tgabin0 -> 16428 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icon_groupnoticeinventory.tgabin0 -> 16428 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icon_lock.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/icon_top_pick.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_folder_animation.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_folder_bodypart.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_folder_callingcard.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_folder_clothing.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_folder_gesture.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_folder_landmark.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_folder_lostandfound.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_folder_notecard.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_folder_object.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_folder_plain_closed.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_folder_plain_open.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_folder_script.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_folder_snapshot.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_folder_sound.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_folder_texture.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_folder_trash.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_item_animation.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_item_attach.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_item_callingcard_offline.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_item_callingcard_online.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_item_clothing.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_item_eyes.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_item_gesture.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_item_gloves.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_item_hair.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_item_jacket.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_item_landmark.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_item_landmark_visited.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_item_notecard.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_item_object.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_item_object_multi.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_item_pants.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_item_script.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_item_shape.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_item_shirt.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_item_shoes.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_item_skin.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_item_skirt.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_item_snapshot.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_item_socks.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_item_sound.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_item_texture.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_item_underpants.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/inv_item_undershirt.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/lightgray.tgabin0 -> 3116 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/map_avatar_16.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/map_avatar_you_8.tgabin0 -> 300 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/map_event.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/map_event_adult.tgabin0 -> 1006 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/map_event_mature.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/map_home.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/map_infohub.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/map_telehub.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/minimize.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/minimize_inactive.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/minimize_pressed.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/notify_next.pngbin0 -> 3306 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/object_cone.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/object_cone_active.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/object_cube.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/object_cube_active.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/object_cylinder.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/object_cylinder_active.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/object_grass.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/object_grass_active.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/object_hemi_cone.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/object_hemi_cone_active.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/object_hemi_cylinder.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/object_hemi_cylinder_active.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/object_hemi_sphere.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/object_hemi_sphere_active.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/object_prism.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/object_prism_active.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/object_pyramid.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/object_pyramid_active.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/object_ring.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/object_ring_active.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/object_sphere.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/object_sphere_active.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/object_tetrahedron.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/object_tetrahedron_active.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/object_torus.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/object_torus_active.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/object_tree.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/object_tree_active.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/object_tube.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/object_tube_active.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/progressbar_fill.tgabin0 -> 4244 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/progressbar_track.tgabin0 -> 5084 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/ptt_lock_off.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/ptt_lock_on.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/radio_active_false.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/radio_active_true.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/radio_inactive_false.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/radio_inactive_true.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/resize_handle_bottom_right_blue.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/restore.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/restore_inactive.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/restore_pressed.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/rounded_square.tgabin0 -> 16428 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/rounded_square_soft.tgabin0 -> 16428 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/scrollbutton_down_in_blue.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/scrollbutton_down_out_blue.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/scrollbutton_left_in_blue.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/scrollbutton_left_out_blue.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/scrollbutton_right_in_blue.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/scrollbutton_right_out_blue.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/scrollbutton_up_in_blue.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/scrollbutton_up_out_blue.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/sm_rounded_corners_simple.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/spin_down_in_blue.tgabin0 -> 556 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/spin_down_out_blue.tgabin0 -> 556 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/spin_up_in_blue.tgabin0 -> 556 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/spin_up_out_blue.tgabin0 -> 556 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/square_btn_32x128.tgabin0 -> 10284 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/square_btn_selected_32x128.tgabin0 -> 10284 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/startup_logo.j2cbin0 -> 12629 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/status_buy_currency.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/status_buy_currency_pressed.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/status_buy_land.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/status_buy_land_pressed.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/status_health.tgabin0 -> 2092 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/status_no_build.tgabin0 -> 2092 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/status_no_fly.tgabin0 -> 2092 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/status_no_push.tgabin0 -> 2092 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/status_no_scripts.tgabin0 -> 2092 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/status_no_voice.tgabin0 -> 2092 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/status_search.tgabin0 -> 620 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/status_voice.tgabin0 -> 2092 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/tab_bottom_blue.tgabin0 -> 8748 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/tab_bottom_selected_blue.tgabin0 -> 8748 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/tab_left.tgabin0 -> 10284 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/tab_left_selected.tgabin0 -> 10284 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/tab_top_blue.tgabin0 -> 8748 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/tab_top_selected_blue.tgabin0 -> 8748 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/tearoff_pressed.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/tearoffbox.tgabin0 -> 1068 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/tool_dozer.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/tool_dozer_active.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/tool_zoom.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/tool_zoom_active.tgabin0 -> 4140 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/toolbar_bg.tgabin0 -> 25564 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/toolbar_btn_disabled.tgabin0 -> 12332 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/toolbar_btn_enabled.tgabin0 -> 12332 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/toolbar_btn_selected.tgabin0 -> 12332 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/toolbar_tab.tgabin0 -> 25564 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/up_arrow.pngbin0 -> 2852 bytes
-rw-r--r--linden/indra/newview/skins/silver/textures/white.tgabin0 -> 3116 bytes
-rwxr-xr-xlinden/indra/newview/viewer_manifest.py125
-rw-r--r--linden/indra/newview/viewerinfo.cpp4
-rw-r--r--linden/indra/newview/windlightsettingsupdate.cpp200
-rw-r--r--linden/indra/newview/wlfloatermanager.cpp41
-rw-r--r--linden/indra/newview/wlretrievesettings.cpp19
-rw-r--r--linden/indra/newview/wlsettingsmanager.cpp253
-rw-r--r--linden/indra/newview/wlsettingsmanager.h90
-rw-r--r--linden/indra/test_apps/llplugintest/CMakeLists.txt4
430 files changed, 4366 insertions, 2381 deletions
diff --git a/linden/indra/cmake/00-Common.cmake b/linden/indra/cmake/00-Common.cmake
index 1177fc2..6a97391 100644
--- a/linden/indra/cmake/00-Common.cmake
+++ b/linden/indra/cmake/00-Common.cmake
@@ -24,6 +24,11 @@ list(REMOVE_DUPLICATES TYPES)
24set(CMAKE_CONFIGURATION_TYPES ${TYPES} CACHE STRING "Supported build types." FORCE) 24set(CMAKE_CONFIGURATION_TYPES ${TYPES} CACHE STRING "Supported build types." FORCE)
25unset(TYPES) 25unset(TYPES)
26 26
27# Work around nmake / VS difference.
28set(VIEWER_CFG_INTDIR ${CMAKE_CFG_INTDIR})
29if (NMAKE)
30 set(VIEWER_CFG_INTDIR ${CMAKE_BUILD_TYPE})
31endif(NMAKE)
27 32
28# Determine the number of bits of this processor 33# Determine the number of bits of this processor
29 34
@@ -68,7 +73,6 @@ if (WINDOWS)
68 /DUNICODE 73 /DUNICODE
69 /D_UNICODE 74 /D_UNICODE
70 /GS 75 /GS
71 /TP
72 /W3 76 /W3
73 /c 77 /c
74 /Zc:forScope 78 /Zc:forScope
@@ -95,9 +99,10 @@ if (WINDOWS)
95 endif (MSVC80 OR MSVC90) 99 endif (MSVC80 OR MSVC90)
96 100
97 # Are we using the crummy Visual Studio KDU build workaround? 101 # Are we using the crummy Visual Studio KDU build workaround?
98 if (NOT VS_DISABLE_FATAL_WARNINGS) 102 # FIXME: Let's just disable this for now, see if it's needed, coz I have no idea what that work around is about.
99 add_definitions(/WX) 103# if (NOT VS_DISABLE_FATAL_WARNINGS)
100 endif (NOT VS_DISABLE_FATAL_WARNINGS) 104# add_definitions(/WX)
105# endif (NOT VS_DISABLE_FATAL_WARNINGS)
101endif (WINDOWS) 106endif (WINDOWS)
102 107
103 108
diff --git a/linden/indra/cmake/CMakeLists.txt b/linden/indra/cmake/CMakeLists.txt
index 4a7d633..aca7b5a 100644
--- a/linden/indra/cmake/CMakeLists.txt
+++ b/linden/indra/cmake/CMakeLists.txt
@@ -93,7 +93,6 @@ set(cmake_SOURCE_FILES
93 UI.cmake 93 UI.cmake
94 UnixInstall.cmake 94 UnixInstall.cmake
95 Variables.cmake 95 Variables.cmake
96 ViewerArtwork.cmake
97 ViewerMiscLibs.cmake 96 ViewerMiscLibs.cmake
98 WebKitLibPlugin.cmake 97 WebKitLibPlugin.cmake
99 XmlRpcEpi.cmake 98 XmlRpcEpi.cmake
diff --git a/linden/indra/cmake/Variables.cmake b/linden/indra/cmake/Variables.cmake
index 88c0c5c..dfb0e70 100644
--- a/linden/indra/cmake/Variables.cmake
+++ b/linden/indra/cmake/Variables.cmake
@@ -81,10 +81,19 @@ endif (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
81 81
82if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") 82if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
83 set(DARWIN 1) 83 set(DARWIN 1)
84
85 # Incorporated settings from
86 # http://imprudenceviewer.org/w/index.php?title=How_to_compile&oldid=1647#Mac
87 # so that people don't have to set them every time they run develop.py
88 set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "4.0")
89 set(CMAKE_XCODE_ATTRIBUTE_ARCHS '$(ARCHS_STANDARD_32_BIT)')
90 set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS "i386 ppc")
91 # set(CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH "NO")
92
84 # set this dynamically from the build system now - 93 # set this dynamically from the build system now -
85 # NOTE: wont have a distributable build unless you add this on the configure line with: 94 # NOTE: wont have a distributable build unless you add this on the configure line with:
86 # -DCMAKE_OSX_ARCHITECTURES:STRING='i386;ppc' 95 # -DCMAKE_OSX_ARCHITECTURES:STRING='i386;ppc'
87 set(CMAKE_OSX_ARCHITECTURES i386) 96 set(CMAKE_OSX_ARCHITECTURES i386;ppc)
88 set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.5.sdk) 97 set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.5.sdk)
89 if (CMAKE_OSX_ARCHITECTURES MATCHES "i386") 98 if (CMAKE_OSX_ARCHITECTURES MATCHES "i386")
90 set(ARCH i386) 99 set(ARCH i386)
diff --git a/linden/indra/cmake/ViewerArtwork.cmake b/linden/indra/cmake/ViewerArtwork.cmake
deleted file mode 100644
index 20210fc..0000000
--- a/linden/indra/cmake/ViewerArtwork.cmake
+++ /dev/null
@@ -1,16 +0,0 @@
1# -*- cmake -*-
2#
3# Download viewer artwork even when using standalone
4
5include(Variables)
6include(Prebuilt)
7
8if (NOT STANDALONE)
9 use_prebuilt_binary(artwork)
10 use_prebuilt_binary(fonts)
11else (NOT STANDALONE)
12 set(STANDALONE OFF)
13 use_prebuilt_binary(artwork)
14 use_prebuilt_binary(fonts)
15 set(STANDALONE ON)
16endif (NOT STANDALONE)
diff --git a/linden/indra/cmake/gpg.vs.cmake b/linden/indra/cmake/gpg.vs.cmake
index a5220f4..c551b3a 100644
--- a/linden/indra/cmake/gpg.vs.cmake
+++ b/linden/indra/cmake/gpg.vs.cmake
@@ -4,3 +4,4 @@
4# make the libgcrypt, libgpg-error, and libotr compile. 4# make the libgcrypt, libgpg-error, and libotr compile.
5 5
6set(gpg.vs_INCLUDE_DIRS ) 6set(gpg.vs_INCLUDE_DIRS )
7add_definitions( /DHAVE_CONFIG_H=1 )
diff --git a/linden/indra/cmake/libgcrypt.cmake b/linden/indra/cmake/libgcrypt.cmake
index 4d19467..19ef1f8 100644
--- a/linden/indra/cmake/libgcrypt.cmake
+++ b/linden/indra/cmake/libgcrypt.cmake
@@ -2,9 +2,19 @@
2 2
3set(LIBGCRYPT_INCLUDE_DIRS 3set(LIBGCRYPT_INCLUDE_DIRS
4 ${CMAKE_BINARY_DIR}/libgcrypt/include 4 ${CMAKE_BINARY_DIR}/libgcrypt/include
5 ${LIBS_OPEN_DIR}/libgcrypt/libgcrypt-1.2.2/src
5 ) 6 )
6 7
8if (DARWIN OR LINUX)
7set(LIBGCRYPT_LIBRARIES 9set(LIBGCRYPT_LIBRARIES
8 ${CMAKE_BINARY_DIR}/libgcrypt/lib/libgcrypt.a 10 ${CMAKE_BINARY_DIR}/libgcrypt/lib/libgcrypt.a
9 ) 11 )
12endif (DARWIN OR LINUX)
10 13
14if (WINDOWS)
15set(LIBGCRYPT_LIBRARIES
16 ${CMAKE_BINARY_DIR}/libgcrypt/gcrypt.lib
17 )
18endif (WINDOWS)
19
20add_definitions( /DHAVE_CONFIG_H=1 )
diff --git a/linden/indra/cmake/libgpg-error.cmake b/linden/indra/cmake/libgpg-error.cmake
index 417ad19..4ec0926 100644
--- a/linden/indra/cmake/libgpg-error.cmake
+++ b/linden/indra/cmake/libgpg-error.cmake
@@ -2,9 +2,19 @@
2 2
3set(LIBGPG-ERROR_INCLUDE_DIRS 3set(LIBGPG-ERROR_INCLUDE_DIRS
4 ${CMAKE_BINARY_DIR}/libgpg-error/include 4 ${CMAKE_BINARY_DIR}/libgpg-error/include
5 ${LIBS_OPEN_DIR}/libgpg-error/libgpg-error-1.0/src
5 ) 6 )
6 7
8if (DARWIN OR LINUX)
7set(LIBGPG-ERROR_LIBRARIES 9set(LIBGPG-ERROR_LIBRARIES
8 ${CMAKE_BINARY_DIR}/libgpg-error/lib/libgpg-error.a 10 ${CMAKE_BINARY_DIR}/libgpg-error/lib/libgpg-error.a
9 ) 11 )
12endif (DARWIN OR LINUX)
10 13
14if (WINDOWS)
15set(LIBGPG-ERROR_LIBRARIES
16 ${CMAKE_BINARY_DIR}/libgpg-error/gpg-error.lib
17 )
18endif (WINDOWS)
19
20add_definitions( /DHAVE_CONFIG_H=1 )
diff --git a/linden/indra/cmake/libotr.cmake b/linden/indra/cmake/libotr.cmake
index 30544f8..6fd61f2 100644
--- a/linden/indra/cmake/libotr.cmake
+++ b/linden/indra/cmake/libotr.cmake
@@ -6,3 +6,5 @@ set(LIBOTR_INCLUDE_DIRS
6set(LIBOTR_LIBRARIES 6set(LIBOTR_LIBRARIES
7 otr 7 otr
8 ) 8 )
9
10add_definitions( /DHAVE_CONFIG_H=1 )
diff --git a/linden/indra/cmake/libotrb.cmake b/linden/indra/cmake/libotrb.cmake
index eb8522f..e9290e8 100644
--- a/linden/indra/cmake/libotrb.cmake
+++ b/linden/indra/cmake/libotrb.cmake
@@ -2,3 +2,5 @@
2include(Prebuilt) 2include(Prebuilt)
3 3
4set(OTR_LIBRARY otr) 4set(OTR_LIBRARY otr)
5
6add_definitions( /DHAVE_CONFIG_H=1 )
diff --git a/linden/indra/develop.py b/linden/indra/develop.py
index ffe8e61..100f719 100755
--- a/linden/indra/develop.py
+++ b/linden/indra/develop.py
@@ -416,7 +416,7 @@ class LinuxSetup(UnixSetup):
416 print 'Running %r' % cmd 416 print 'Running %r' % cmd
417 self.run(cmd) 417 self.run(cmd)
418 418
419 419
420class DarwinSetup(UnixSetup): 420class DarwinSetup(UnixSetup):
421 def __init__(self): 421 def __init__(self):
422 super(DarwinSetup, self).__init__() 422 super(DarwinSetup, self).__init__()
@@ -443,7 +443,12 @@ class DarwinSetup(UnixSetup):
443 type=self.build_type 443 type=self.build_type
444 ) 444 )
445 if self.universal == 'ON': 445 if self.universal == 'ON':
446 args['universal'] = '-DCMAKE_OSX_ARCHITECTURES:STRING=\'i386;ppc\''
447 elif self.arch == 'ppc':
448 args['universal'] = '-DCMAKE_OSX_ARCHITECTURES:STRING=\'ppc\''
449 else:
446 args['universal'] = '-DCMAKE_OSX_ARCHITECTURES:STRING=\'i386\'' 450 args['universal'] = '-DCMAKE_OSX_ARCHITECTURES:STRING=\'i386\''
451
447 #if simple: 452 #if simple:
448 # return 'cmake %(opts)s %(dir)r' % args 453 # return 'cmake %(opts)s %(dir)r' % args
449 return ('cmake -G %(generator)r ' 454 return ('cmake -G %(generator)r '
@@ -488,6 +493,10 @@ class WindowsSetup(PlatformSetup):
488 'vc100' : { 493 'vc100' : {
489 'gen' : r'Visual Studio 10', 494 'gen' : r'Visual Studio 10',
490 'ver' : r'10.0' 495 'ver' : r'10.0'
496 },
497 'nmake' : {
498 'gen' : r'NMake Makefiles',
499 'ver' : r''
491 } 500 }
492 } 501 }
493 gens['vs2003'] = gens['vc71'] 502 gens['vs2003'] = gens['vc71']
@@ -503,6 +512,41 @@ class WindowsSetup(PlatformSetup):
503 self._generator = None 512 self._generator = None
504 self.incredibuild = False 513 self.incredibuild = False
505 514
515 def find_visual_studio(self, gen=None):
516 if gen is None:
517 gen = self._generator
518 gen = gen.lower()
519 try:
520 import _winreg
521 key_str = (r'SOFTWARE\Microsoft\VisualStudio\%s\Setup\VS' %
522 self.gens[gen]['ver'])
523 value_str = (r'EnvironmentDirectory')
524 reg = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)
525 key = _winreg.OpenKey(reg, key_str)
526 value = _winreg.QueryValueEx(key, value_str)[0]
527 print 'Found: %s' % value
528 return value
529 except WindowsError, err:
530 return ''
531
532 def find_visual_studio_express(self, gen=None):
533 if gen is None:
534 gen = self._generator
535 gen = gen.lower()
536 try:
537 import _winreg
538 key_str = (r'SOFTWARE\Microsoft\VCExpress\%s\Setup\VC' %
539 self.gens[gen]['ver'])
540 value_str = (r'ProductDir')
541 reg = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)
542 key = _winreg.OpenKey(reg, key_str)
543 value = _winreg.QueryValueEx(key, value_str)[0]+"vcpackages"
544 print 'Found: %s' % value
545 self.using_express = True
546 return value
547 except WindowsError, err:
548 return ''
549
506 def _get_generator(self): 550 def _get_generator(self):
507 if self._generator is None: 551 if self._generator is None:
508 for version in 'vc80 vc90 vc100 vc71'.split(): 552 for version in 'vc80 vc90 vc100 vc71'.split():
@@ -511,9 +555,8 @@ class WindowsSetup(PlatformSetup):
511 print 'Building with ', self.gens[version]['gen'] 555 print 'Building with ', self.gens[version]['gen']
512 break 556 break
513 else: 557 else:
514 print >> sys.stderr, 'Cannot find a Visual Studio installation, testing for express editions'
515 for version in 'vc80 vc90 vc100 vc71'.split(): 558 for version in 'vc80 vc90 vc100 vc71'.split():
516 if self.find_visual_studio_express(version): 559 if self.find_visual_studio_express(version) != '':
517 self._generator = version 560 self._generator = version
518 self.using_express = True 561 self.using_express = True
519 print 'Building with ', self.gens[version]['gen'] , "Express edition" 562 print 'Building with ', self.gens[version]['gen'] , "Express edition"
@@ -524,6 +567,8 @@ class WindowsSetup(PlatformSetup):
524 return self._generator 567 return self._generator
525 568
526 def _set_generator(self, gen): 569 def _set_generator(self, gen):
570 if gen == 'nmake':
571 self._get_generator()
527 self._generator = gen 572 self._generator = gen
528 573
529 generator = property(_get_generator, _set_generator) 574 generator = property(_get_generator, _set_generator)
@@ -541,83 +586,58 @@ class WindowsSetup(PlatformSetup):
541 opts=quote(opts), 586 opts=quote(opts),
542 standalone=self.standalone, 587 standalone=self.standalone,
543 unattended=self.unattended, 588 unattended=self.unattended,
544 project_name=self.project_name 589 project_name=self.project_name,
590 type=self.build_type,
591 use_vstool='ON',
592 nmake=''
545 ) 593 )
594 if self.generator == 'nmake':
595 args['use_vstool'] = 'OFF'
596 args['nmake'] = '-DNMAKE:BOOL=ON'
597 if self.using_express:
598 args['using_express'] = 'ON'
599 args['use_vstool'] = 'OFF'
600 else:
601 args['using_express'] = 'OFF'
546 # default to packaging disabled 602 # default to packaging disabled
547 # if simple: 603 # if simple:
548 # return 'cmake %(opts)s "%(dir)s"' % args 604 # return 'cmake %(opts)s "%(dir)s"' % args
549 return ('cmake -G "%(generator)s" ' 605 return ('cmake -G "%(generator)s" '
606 '-DCMAKE_BUILD_TYPE:STRING=%(type)s '
550 '-DSTANDALONE:BOOL=%(standalone)s ' 607 '-DSTANDALONE:BOOL=%(standalone)s '
551 '-DUNATTENDED:BOOL=%(unattended)s ' 608 '-DUNATTENDED:BOOL=%(unattended)s '
552 '-DROOT_PROJECT_NAME:STRING=%(project_name)s ' 609 '-DROOT_PROJECT_NAME:STRING=%(project_name)s '
553 #'-DPACKAGE:BOOL=ON ' 610 '-DUSING_EXPRESS:BOOL=%(using_express)s '
611 '-DUSE_VSTOOL:BOOL=%(use_vstool)s '
612 '%(nmake)s '
554 '%(opts)s "%(dir)s"' % args) 613 '%(opts)s "%(dir)s"' % args)
555 614
556 def find_visual_studio(self, gen=None):
557 if gen is None:
558 gen = self._generator
559 gen = gen.lower()
560 try:
561 import _winreg
562 key_str = (r'SOFTWARE\Microsoft\VisualStudio\%s\Setup\VS' %
563 self.gens[gen]['ver'])
564 value_str = (r'EnvironmentDirectory')
565 print ('Reading VS environment from HKEY_LOCAL_MACHINE\%s\%s' %
566 (key_str, value_str))
567 print key_str
568
569 reg = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)
570 key = _winreg.OpenKey(reg, key_str)
571 value = _winreg.QueryValueEx(key, value_str)[0]
572 print 'Found: %s' % value
573 return value
574 except WindowsError, err:
575 print >> sys.stderr, "Didn't find ", self.gens[gen]['gen']
576 return ''
577
578 def find_visual_studio_express(self, gen=None):
579 if gen is None:
580 gen = self._generator
581 gen = gen.lower()
582 try:
583 import _winreg
584 key_str = (r'SOFTWARE\Microsoft\VCExpress\%s\Setup\VC' %
585 self.gens[gen]['ver'])
586 value_str = (r'ProductDir')
587 print ('Reading VS environment from HKEY_LOCAL_MACHINE\%s\%s' %
588 (key_str, value_str))
589 print key_str
590
591 reg = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)
592 key = _winreg.OpenKey(reg, key_str)
593 value = _winreg.QueryValueEx(key, value_str)[0]+"IDE"
594 print 'Found: %s' % value
595 self.using_express = True
596 return value
597 except WindowsError, err:
598 print >> sys.stderr, "Didn't find ", self.gens[gen]['gen']
599 return ''
600
601 def get_build_cmd(self): 615 def get_build_cmd(self):
602 if self.incredibuild: 616 if self.incredibuild:
603 config = self.build_type 617 config = self.build_type
604 if self.gens[self.generator]['ver'] in [ r'8.0', r'9.0', r'10.0', r'7.1' ]: 618 if self.gens[self.generator]['ver'] in [ r'8.0', r'9.0', r'10.0', r'7.1' ]:
605 config = '\"%s|Win32\"' % config 619 config = '\"%s|Win32\"' % config
606
607 return "buildconsole %s.sln /build %s" % (self.project_name, config) 620 return "buildconsole %s.sln /build %s" % (self.project_name, config)
608 621
609 environment = self.find_visual_studio() 622 environment = self.find_visual_studio(self.generator)
610 if environment == '': 623 if environment == '':
611 environment = self.find_visual_studio_express() 624 environment = self.find_visual_studio_express(self.generator)
612 if environment == '': 625 if self.generator != 'nmake':
613 print >> sys.stderr, "Something went very wrong during build stage, could not find a Visual Studio?" 626 if environment == '':
614 else: 627 print >> sys.stderr, "Something went very wrong during build stage, could not find a Visual Studio?"
615 print >> sys.stderr, "\nSolution generation complete, as you are using an express edition the final\n stages will need to be completed by hand" 628 else:
616 build_dirs=self.build_dirs(); 629 build_dirs=self.build_dirs();
617 print >> sys.stderr, "Solution can now be found in:", build_dirs[0] 630 return("\"\"%s\\vcbuild\" /useenv %s.sln \"%s|win32\"\"" % (environment, self.project_name, self.build_type))
618 print >> sys.stderr, "Set %s as startup project" % self.project_name 631
619 print >> sys.stderr, "Set build target is Release or RelWithDbgInfo" 632 if self.generator == 'nmake':
620 exit(0) 633 # Hack around a bug in cmake that I'm surprised did not hit GUI controlled builds.
634 self.run(r'sed -i "s|\(^RC_FLAGS .* \) /GS .*$|\1|" build-nmake/win_crash_logger/CMakeFiles/windows-crash-logger.dir/flags.make')
635 self.run(r'sed -i "s|\(^RC_FLAGS .* \) /GS .*$|\1|" build-nmake/newview/CMakeFiles/meta-impy-bin.dir/flags.make')
636 self.run(r'sed -i "s|\(^RC_FLAGS .* \) /EHsc .*/Zm1000 \($\)|\1\2|" build-nmake/win_crash_logger/CMakeFiles/windows-crash-logger.dir/flags.make')
637 self.run(r'sed -i "s|\(^RC_FLAGS .* \) /EHsc .*/Zm1000 \($\)|\1\2|" build-nmake/newview/CMakeFiles/meta-impy-bin.dir/flags.make')
638 # Evil hack.
639 self.run(r'touch newview/touched.bat')
640 return 'nmake'
621 641
622 # devenv.com is CLI friendly, devenv.exe... not so much. 642 # devenv.com is CLI friendly, devenv.exe... not so much.
623 return ('"%sdevenv.com" %s.sln /build %s' % 643 return ('"%sdevenv.com" %s.sln /build %s' %
@@ -637,55 +657,29 @@ class WindowsSetup(PlatformSetup):
637 raise CommandError('the command %r %s' % 657 raise CommandError('the command %r %s' %
638 (name, ret)) 658 (name, ret))
639 659
640 def run_cmake(self, args=[]):
641 '''Override to add the vstool.exe call after running cmake.'''
642 PlatformSetup.run_cmake(self, args)
643 if self.unattended == 'OFF':
644 if self.using_express == False:
645 self.run_vstool()
646
647 def run_vstool(self):
648 for build_dir in self.build_dirs():
649 stamp = os.path.join(build_dir, 'vstool.txt')
650 try:
651 prev_build = open(stamp).read().strip()
652 except IOError:
653 prev_build = ''
654 if prev_build == self.build_type:
655 # Only run vstool if the build type has changed.
656 continue
657 vstool_cmd = (os.path.join('tools','vstool','VSTool.exe') +
658 ' --solution ' +
659 os.path.join(build_dir,'meta-impy.sln') +
660 ' --config ' + self.build_type +
661 ' --startup meta-impy-bin')
662 print 'Running %r in %r' % (vstool_cmd, getcwd())
663 self.run(vstool_cmd)
664 print >> open(stamp, 'w'), self.build_type
665
666 def run_build(self, opts, targets): 660 def run_build(self, opts, targets):
667 cwd = getcwd() 661 cwd = getcwd()
668 build_cmd = self.get_build_cmd() 662 build_cmd = self.get_build_cmd()
669 663 if build_cmd != "":
670 for d in self.build_dirs(): 664 for d in self.build_dirs():
671 try: 665 try:
672 os.chdir(d) 666 os.chdir(d)
673 if targets: 667 if targets:
674 for t in targets: 668 for t in targets:
675 cmd = '%s /project %s %s' % (build_cmd, t, ' '.join(opts)) 669 cmd = '%s /project %s %s' % (build_cmd, t, ' '.join(opts))
670 print 'Running %r in %r' % (cmd, d)
671 self.run(cmd)
672 else:
673 cmd = '%s %s' % (build_cmd, ' '.join(opts))
676 print 'Running %r in %r' % (cmd, d) 674 print 'Running %r in %r' % (cmd, d)
677 self.run(cmd) 675 self.run(cmd)
678 else: 676 finally:
679 cmd = '%s %s' % (build_cmd, ' '.join(opts)) 677 os.chdir(cwd)
680 print 'Running %r in %r' % (cmd, d) 678
681 self.run(cmd)
682 finally:
683 os.chdir(cwd)
684
685class CygwinSetup(WindowsSetup): 679class CygwinSetup(WindowsSetup):
686 def __init__(self): 680 def __init__(self):
687 super(CygwinSetup, self).__init__() 681 super(CygwinSetup, self).__init__()
688 self.generator = 'vc80' 682 self.generator = 'nmake'
689 683
690 def cmake_commandline(self, src_dir, build_dir, opts, simple): 684 def cmake_commandline(self, src_dir, build_dir, opts, simple):
691 dos_dir = commands.getoutput("cygpath -w %s" % src_dir) 685 dos_dir = commands.getoutput("cygpath -w %s" % src_dir)
@@ -695,11 +689,13 @@ class CygwinSetup(WindowsSetup):
695 opts=quote(opts), 689 opts=quote(opts),
696 standalone=self.standalone, 690 standalone=self.standalone,
697 unattended=self.unattended, 691 unattended=self.unattended,
698 project_name=self.project_name 692 project_name=self.project_name,
693 type=self.build_type
699 ) 694 )
700 #if simple: 695 #if simple:
701 # return 'cmake %(opts)s "%(dir)s"' % args 696 # return 'cmake %(opts)s "%(dir)s"' % args
702 return ('cmake -G "%(generator)s" ' 697 return ('cmake -G "%(generator)s" '
698 '-DCMAKE_BUILD_TYPE:STRING=%(type)s '
703 '-DUNATTENDED:BOOl=%(unattended)s ' 699 '-DUNATTENDED:BOOl=%(unattended)s '
704 '-DSTANDALONE:BOOL=%(standalone)s ' 700 '-DSTANDALONE:BOOL=%(standalone)s '
705 '-DROOT_PROJECT_NAME:STRING=%(project_name)s ' 701 '-DROOT_PROJECT_NAME:STRING=%(project_name)s '
@@ -726,7 +722,7 @@ Options:
726 -m32 | -m64 build architecture (32-bit or 64-bit) 722 -m32 | -m64 build architecture (32-bit or 64-bit)
727 -N | --no-distcc disable use of distcc 723 -N | --no-distcc disable use of distcc
728 -G | --generator=NAME generator name 724 -G | --generator=NAME generator name
729 Windows: VC80 (VS2005--default), VC71 (VS2003), 725 Windows: NMake, VC80 (VS2005--default), VC71 (VS2003),
730 VC90 (VS2008), or VC100 (VS2010) 726 VC90 (VS2008), or VC100 (VS2010)
731 Mac OS X: Xcode (default), Unix Makefiles 727 Mac OS X: Xcode (default), Unix Makefiles
732 Linux: Unix Makefiles (default), KDevelop3 728 Linux: Unix Makefiles (default), KDevelop3
@@ -818,7 +814,6 @@ For example: develop.py configure -DSERVER:BOOL=OFF"""
818 for d in setup.build_dirs(): 814 for d in setup.build_dirs():
819 if not os.path.exists(d): 815 if not os.path.exists(d):
820 raise CommandError('run "develop.py cmake" first') 816 raise CommandError('run "develop.py cmake" first')
821 setup.run_cmake()
822 opts, targets = setup.parse_build_opts(args) 817 opts, targets = setup.parse_build_opts(args)
823 setup.run_build(opts, targets) 818 setup.run_build(opts, targets)
824 elif cmd == 'clean': 819 elif cmd == 'clean':
diff --git a/linden/indra/gpg.vs/libgpg-error-1.1.vs/custom/config.h b/linden/indra/gpg.vs/libgpg-error-1.1.vs/custom/config.h
index 39d58f5..6a18960 100755
--- a/linden/indra/gpg.vs/libgpg-error-1.1.vs/custom/config.h
+++ b/linden/indra/gpg.vs/libgpg-error-1.1.vs/custom/config.h
@@ -93,8 +93,10 @@
93#define WIN32_LEAN_AND_MEAN 93#define WIN32_LEAN_AND_MEAN
94#include <windows.h> 94#include <windows.h>
95 95
96#define strcasecmp stricmp 96#define strcasecmp _stricmp
97#define strncasecmp strnicmp 97#define strncasecmp _strnicmp
98#define snprintf _snprintf 98#define snprintf _snprintf
99//#define snprintf _snprintf_s
100//#define strerror strerror_s
99 101
100#endif 102#endif
diff --git a/linden/indra/llcommon/llsdserialize.cpp b/linden/indra/llcommon/llsdserialize.cpp
index e2be922..f648c5c 100644
--- a/linden/indra/llcommon/llsdserialize.cpp
+++ b/linden/indra/llcommon/llsdserialize.cpp
@@ -1447,9 +1447,12 @@ S32 LLSDBinaryFormatter::format(const LLSD& data, std::ostream& ostr, U32 option
1447 } 1447 }
1448 1448
1449 case LLSD::TypeUUID: 1449 case LLSD::TypeUUID:
1450 {
1450 ostr.put('u'); 1451 ostr.put('u');
1451 ostr.write((const char*)(&(data.asUUID().mData)), UUID_BYTES); 1452 U8 *value = data.asUUID().mData;
1453 ostr.write((const char*)(&value), UUID_BYTES);
1452 break; 1454 break;
1455 }
1453 1456
1454 case LLSD::TypeString: 1457 case LLSD::TypeString:
1455 ostr.put('s'); 1458 ostr.put('s');
diff --git a/linden/indra/llcommon/llsdserialize_xml.cpp b/linden/indra/llcommon/llsdserialize_xml.cpp
index 7729a5f..7c3dcbf 100644
--- a/linden/indra/llcommon/llsdserialize_xml.cpp
+++ b/linden/indra/llcommon/llsdserialize_xml.cpp
@@ -394,13 +394,15 @@ S32 LLSDXMLParser::Impl::parse(std::istream& input, LLSD& data)
394 if (status == XML_STATUS_ERROR) 394 if (status == XML_STATUS_ERROR)
395 { 395 {
396 std::string error_string(XML_ErrorString(XML_GetErrorCode( mParser ))); 396 std::string error_string(XML_ErrorString(XML_GetErrorCode( mParser )));
397// if (input.gcount() == 0) 397 // I know, this if seems odd, but it fixes a problem with not being able to see nearby sims, or TP to other sims.
398// { 398 // No idea why.
399// // nothing to do -- MC 399 if (input && (input.gcount() == 0))
400// data = LLSD(); 400 {
401// return LLSDParser::PARSE_FAILURE; 401 // nothing to do -- MC
402// } 402 data = LLSD();
403 /*else*/ if (error_string != "parsing aborted") // end of input 403 return LLSDParser::PARSE_FAILURE;
404 }
405 else if (error_string != "parsing aborted") // end of input
404 { 406 {
405 S32 line_number = XML_GetCurrentLineNumber( mParser ); 407 S32 line_number = XML_GetCurrentLineNumber( mParser );
406 // This parses LLCurl::Responder::completedRaw always, even 408 // This parses LLCurl::Responder::completedRaw always, even
diff --git a/linden/indra/llcommon/llstring.cpp b/linden/indra/llcommon/llstring.cpp
index 95aa7b5..fe0ab2a 100644
--- a/linden/indra/llcommon/llstring.cpp
+++ b/linden/indra/llcommon/llstring.cpp
@@ -596,6 +596,40 @@ std::string utf8str_removeCRLF(const std::string& utf8str)
596 return out; 596 return out;
597} 597}
598 598
599bool is_hex_string(U8* str, S32 len)
600{
601 bool rv = true;
602 U8* c = str;
603 while(rv && len--)
604 {
605 switch(*c)
606 {
607 case '0':
608 case '1':
609 case '2':
610 case '3':
611 case '4':
612 case '5':
613 case '6':
614 case '7':
615 case '8':
616 case '9':
617 case 'a':
618 case 'b':
619 case 'c':
620 case 'd':
621 case 'e':
622 case 'f':
623 ++c;
624 break;
625 default:
626 rv = false;
627 break;
628 }
629 }
630 return rv;
631}
632
599bool LLStringOps::isHexString(const std::string& str) 633bool LLStringOps::isHexString(const std::string& str)
600{ 634{
601 const char* buf = str.c_str(); 635 const char* buf = str.c_str();
diff --git a/linden/indra/llcommon/llstring.h b/linden/indra/llcommon/llstring.h
index ced9713..e1b5cbd 100644
--- a/linden/indra/llcommon/llstring.h
+++ b/linden/indra/llcommon/llstring.h
@@ -458,6 +458,8 @@ LL_COMMON_API std::string mbcsstring_makeASCII(const std::string& str);
458 458
459LL_COMMON_API std::string utf8str_removeCRLF(const std::string& utf8str); 459LL_COMMON_API std::string utf8str_removeCRLF(const std::string& utf8str);
460 460
461LL_COMMON_API bool is_hex_string(U8* str, S32 len);
462
461 463
462#if LL_WINDOWS 464#if LL_WINDOWS
463/* @name Windows string helpers 465/* @name Windows string helpers
diff --git a/linden/indra/llmath/llsdutil_math.cpp b/linden/indra/llmath/llsdutil_math.cpp
index 073cb2e..8ec8661 100644
--- a/linden/indra/llmath/llsdutil_math.cpp
+++ b/linden/indra/llmath/llsdutil_math.cpp
@@ -6,7 +6,7 @@
6 * 6 *
7 * $LicenseInfo:firstyear=2006&license=viewergpl$ 7 * $LicenseInfo:firstyear=2006&license=viewergpl$
8 * 8 *
9 * Copyright (c) 2006-2009, Linden Research, Inc. 9 * Copyright (c) 2006-2010, Linden Research, Inc.
10 * 10 *
11 * Second Life Viewer Source Code 11 * Second Life Viewer Source Code
12 * The source code in this file ("Source Code") is provided by Linden Lab 12 * The source code in this file ("Source Code") is provided by Linden Lab
@@ -14,13 +14,13 @@
14 * ("GPL"), unless you have obtained a separate licensing agreement 14 * ("GPL"), unless you have obtained a separate licensing agreement
15 * ("Other License"), formally executed by you and Linden Lab. Terms of 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 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 17 * online at http://secondlife.com/developers/opensource/gplv2
18 * 18 *
19 * There are special exceptions to the terms and conditions of the GPL as 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 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 21 * in the file doc/FLOSS-exception.txt in this software distribution, or
22 * online at 22 * online at
23 * http://secondlifegrid.net/programs/open_source/licensing/flossexception 23 * http://secondlife.com/developers/opensource/flossexception
24 * 24 *
25 * By copying, modifying or distributing this software, you acknowledge 25 * By copying, modifying or distributing this software, you acknowledge
26 * that you have read and understood your obligations described above, 26 * that you have read and understood your obligations described above,
@@ -30,11 +30,12 @@
30 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, 30 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
31 * COMPLETENESS OR PERFORMANCE. 31 * COMPLETENESS OR PERFORMANCE.
32 * $/LicenseInfo$ 32 * $/LicenseInfo$
33 *
33 */ 34 */
34 35
35#include "linden_common.h" 36#include "linden_common.h"
36 37
37#include "llsdutil.h" 38#include "llsdutil_math.h"
38 39
39#include "v3math.h" 40#include "v3math.h"
40#include "v4math.h" 41#include "v4math.h"
@@ -165,9 +166,6 @@ LLSD ll_sd_from_color4(const LLColor4& c)
165LLColor4 ll_color4_from_sd(const LLSD& sd) 166LLColor4 ll_color4_from_sd(const LLSD& sd)
166{ 167{
167 LLColor4 c; 168 LLColor4 c;
168 c.mV[0] = (F32)sd[0].asReal(); 169 c.setValue(sd);
169 c.mV[1] = (F32)sd[1].asReal();
170 c.mV[2] = (F32)sd[2].asReal();
171 c.mV[3] = (F32)sd[3].asReal();
172 return c; 170 return c;
173} 171}
diff --git a/linden/indra/llmath/llvolume.cpp b/linden/indra/llmath/llvolume.cpp
index 618048c..9dc3746 100644
--- a/linden/indra/llmath/llvolume.cpp
+++ b/linden/indra/llmath/llvolume.cpp
@@ -4437,14 +4437,7 @@ BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build)
4437 const std::vector<LLVector3>& profile = volume->getProfile().mProfile; 4437 const std::vector<LLVector3>& profile = volume->getProfile().mProfile;
4438 S32 max_s = volume->getProfile().getTotal(); 4438 S32 max_s = volume->getProfile().getTotal();
4439 S32 max_t = volume->getPath().mPath.size(); 4439 S32 max_t = volume->getPath().mPath.size();
4440 4440 S32 grid_size = (profile.size() - 1) / 4;
4441 // S32 i;
4442 S32 num_vertices = 0, num_indices = 0;
4443 S32 grid_size = (profile.size()-1)/4;
4444 S32 quad_count = (grid_size * grid_size);
4445
4446 num_vertices = (grid_size+1)*(grid_size+1);
4447 num_indices = quad_count * 4;
4448 4441
4449 LLVector3& min = mExtents[0]; 4442 LLVector3& min = mExtents[0];
4450 LLVector3& max = mExtents[1]; 4443 LLVector3& max = mExtents[1];
diff --git a/linden/indra/llmessage/llblowfishcipher.cpp b/linden/indra/llmessage/llblowfishcipher.cpp
index f24d103..3eebfad 100644
--- a/linden/indra/llmessage/llblowfishcipher.cpp
+++ b/linden/indra/llmessage/llblowfishcipher.cpp
@@ -73,13 +73,13 @@ U32 LLBlowfishCipher::encrypt(const U8* src, U32 src_len, U8* dst, U32 dst_len)
73 unsigned char initial_vector[] = { 0, 0, 0, 0, 0, 0, 0, 0 }; 73 unsigned char initial_vector[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
74 EVP_EncryptInit_ex(&context, NULL, NULL, mSecret, initial_vector); 74 EVP_EncryptInit_ex(&context, NULL, NULL, mSecret, initial_vector);
75 75
76 int blocksize = EVP_CIPHER_CTX_block_size(&context); 76// int blocksize = EVP_CIPHER_CTX_block_size(&context);
77 int keylen = EVP_CIPHER_CTX_key_length(&context); 77// int keylen = EVP_CIPHER_CTX_key_length(&context);
78 int iv_length = EVP_CIPHER_CTX_iv_length(&context); 78// int iv_length = EVP_CIPHER_CTX_iv_length(&context);
79 lldebugs << "LLBlowfishCipher blocksize " << blocksize 79// lldebugs << "LLBlowfishCipher blocksize " << blocksize
80 << " keylen " << keylen 80// << " keylen " << keylen
81 << " iv_len " << iv_length 81// << " iv_len " << iv_length
82 << llendl; 82// << llendl;
83 83
84 int output_len = 0; 84 int output_len = 0;
85 int temp_len = 0; 85 int temp_len = 0;
@@ -113,7 +113,59 @@ ERROR:
113// virtual 113// virtual
114U32 LLBlowfishCipher::decrypt(const U8* src, U32 src_len, U8* dst, U32 dst_len) 114U32 LLBlowfishCipher::decrypt(const U8* src, U32 src_len, U8* dst, U32 dst_len)
115{ 115{
116 llerrs << "LLBlowfishCipher decrypt unsupported" << llendl; 116 if (!src || !src_len || !dst || !dst_len) return 0;
117 if (src_len > dst_len) return 0;
118
119 // OpenSSL uses "cipher contexts" to hold encryption parameters.
120 EVP_CIPHER_CTX context;
121 EVP_CIPHER_CTX_init(&context);
122
123 // We want a blowfish cyclic block chain cipher, but need to set
124 // the key length before we pass in a key, so call EncryptInit
125 // first with NULLs.
126 EVP_DecryptInit_ex(&context, EVP_bf_cbc(), NULL, NULL, NULL);
127 EVP_CIPHER_CTX_set_key_length(&context, (int)mSecretSize);
128
129 // Complete initialization. Per EVP_EncryptInit man page, the
130 // cipher pointer must be NULL. Apparently initial_vector must
131 // be 8 bytes for blowfish, as this is the block size.
132 unsigned char initial_vector[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
133 EVP_DecryptInit_ex(&context, NULL, NULL, mSecret, initial_vector);
134
135// int blocksize = EVP_CIPHER_CTX_block_size(&context);
136// int keylen = EVP_CIPHER_CTX_key_length(&context);
137// int iv_length = EVP_CIPHER_CTX_iv_length(&context);
138// lldebugs << "LLBlowfishCipher blocksize " << blocksize
139// << " keylen " << keylen
140// << " iv_len " << iv_length
141// << llendl;
142
143 int output_len = 0;
144 int temp_len = 0;
145 if (!EVP_DecryptUpdate(&context,
146 dst,
147 &output_len,
148 src,
149 src_len))
150 {
151 llwarns << "LLBlowfishCipher::decrypt EVP_DecryptUpdate failure" << llendl;
152 goto ERROR;
153 }
154
155 // There may be some final data left to decrypt if the input is
156 // not an exact multiple of the block size.
157 if (!EVP_DecryptFinal_ex(&context, (unsigned char*)(dst + output_len), &temp_len))
158 {
159 llwarns << "LLBlowfishCipher::decrypt EVP_DecryptFinal failure" << llendl;
160 goto ERROR;
161 }
162 output_len += temp_len;
163
164 EVP_CIPHER_CTX_cleanup(&context);
165 return output_len;
166
167ERROR:
168 EVP_CIPHER_CTX_cleanup(&context);
117 return 0; 169 return 0;
118} 170}
119 171
diff --git a/linden/indra/llmessage/llhttpassetstorage.cpp b/linden/indra/llmessage/llhttpassetstorage.cpp
index 49dbdbd..fcdb354 100644
--- a/linden/indra/llmessage/llhttpassetstorage.cpp
+++ b/linden/indra/llmessage/llhttpassetstorage.cpp
@@ -743,7 +743,8 @@ LLAssetRequest* LLHTTPAssetStorage::findNextRequest(LLAssetStorage::request_list
743 request_list_t::iterator running_end = running.end(); 743 request_list_t::iterator running_end = running.end();
744 744
745 request_list_t::iterator pending_iter = pending.begin(); 745 request_list_t::iterator pending_iter = pending.begin();
746 request_list_t::iterator pending_end = pending.end(); 746 // FIXME onefang - I assume this was being used to speed up the for(), but this is just a quick pass to get rid of warnings. Try to understand it later.
747 //request_list_t::iterator pending_end = pending.end();
747 // Loop over all pending requests until we miss finding it in the running list. 748 // Loop over all pending requests until we miss finding it in the running list.
748 for (; pending_iter != pending.end(); ++pending_iter) 749 for (; pending_iter != pending.end(); ++pending_iter)
749 { 750 {
diff --git a/linden/indra/llplugin/slplugin/CMakeLists.txt b/linden/indra/llplugin/slplugin/CMakeLists.txt
index 81d9299..f794dae 100755
--- a/linden/indra/llplugin/slplugin/CMakeLists.txt
+++ b/linden/indra/llplugin/slplugin/CMakeLists.txt
@@ -75,7 +75,7 @@ if (DARWIN)
75 COMMAND mkdir 75 COMMAND mkdir
76 ARGS 76 ARGS
77 -p 77 -p
78 ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/SLPlugin.app/Contents/Resources 78 ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/SLPlugin.app/Contents/Resources
79 ) 79 )
80endif (DARWIN) 80endif (DARWIN)
81 81
diff --git a/linden/indra/llprimitive/llmaterialtable.cpp b/linden/indra/llprimitive/llmaterialtable.cpp
index 7dd764e..f06bfe8 100755
--- a/linden/indra/llprimitive/llmaterialtable.cpp
+++ b/linden/indra/llprimitive/llmaterialtable.cpp
@@ -40,16 +40,6 @@
40 40
41LLMaterialTable LLMaterialTable::basic(1); 41LLMaterialTable LLMaterialTable::basic(1);
42 42
43// Material UUIDs.
44LLUUID const LL_DEFAULT_STONE_UUID("87c5765b-aa26-43eb-b8c6-c09a1ca6208e");
45LLUUID const LL_DEFAULT_METAL_UUID("6f3c53e9-ba60-4010-8f3e-30f51a762476");
46LLUUID const LL_DEFAULT_GLASS_UUID("b4ba225c-373f-446d-9f7e-6cb7b5cf9b3d");
47LLUUID const LL_DEFAULT_WOOD_UUID("89556747-24cb-43ed-920b-47caed15465f");
48LLUUID const LL_DEFAULT_FLESH_UUID("80736669-e4b9-450e-8890-d5169f988a50");
49LLUUID const LL_DEFAULT_PLASTIC_UUID("304fcb4e-7d33-4339-ba80-76d3d22dc11a");
50LLUUID const LL_DEFAULT_RUBBER_UUID("9fae0bc5-666d-477e-9f70-84e8556ec867");
51LLUUID const LL_DEFAULT_LIGHT_UUID("00000000-0000-0000-0000-000000000000");
52
53/* 43/*
54 Old Havok 1 constants 44 Old Havok 1 constants
55 45
diff --git a/linden/indra/llrender/llfont.cpp b/linden/indra/llrender/llfont.cpp
index 2ca1984..965e2d9 100644
--- a/linden/indra/llrender/llfont.cpp
+++ b/linden/indra/llrender/llfont.cpp
@@ -535,6 +535,8 @@ void LLFont::renderGlyph(const U32 glyph_index) const
535 int error = FT_Load_Glyph(mFTFace, glyph_index, FT_LOAD_DEFAULT ); 535 int error = FT_Load_Glyph(mFTFace, glyph_index, FT_LOAD_DEFAULT );
536 llassert(!error); 536 llassert(!error);
537 537
538 // Work around the compiler warning about error not being used when llassert() is compiled out.
539 error = error + 0;
538 error = FT_Render_Glyph(mFTFace->glyph, gFontRenderMode); 540 error = FT_Render_Glyph(mFTFace->glyph, gFontRenderMode);
539 541
540 mRenderGlyphCount++; 542 mRenderGlyphCount++;
diff --git a/linden/indra/llrender/llgl.cpp b/linden/indra/llrender/llgl.cpp
index 4a4ff1b..b57a562 100644
--- a/linden/indra/llrender/llgl.cpp
+++ b/linden/indra/llrender/llgl.cpp
@@ -383,11 +383,10 @@ bool LLGLManager::initGL()
383 if (mGLVendor.substr(0,4) == "ATI ") 383 if (mGLVendor.substr(0,4) == "ATI ")
384 { 384 {
385 mGLVendorShort = "ATI"; 385 mGLVendorShort = "ATI";
386 BOOL mobile = FALSE; 386 // This is not used anywhere.
387 if (mGLRenderer.find("MOBILITY") != std::string::npos) 387 //BOOL mobile = FALSE;
388 { 388 //if (mGLRenderer.find("MOBILITY") != std::string::npos)
389 mobile = TRUE; 389 // mobile = TRUE;
390 }
391 mIsATI = TRUE; 390 mIsATI = TRUE;
392 391
393#if LL_WINDOWS && !LL_MESA_HEADLESS 392#if LL_WINDOWS && !LL_MESA_HEADLESS
@@ -1014,8 +1013,8 @@ void assert_glerror()
1014void clear_glerror() 1013void clear_glerror()
1015{ 1014{
1016 // Create or update texture to be used with this data 1015 // Create or update texture to be used with this data
1017 GLenum error; 1016 //GLenum error;
1018 error = glGetError(); 1017 /*error =*/ glGetError();
1019} 1018}
1020 1019
1021/////////////////////////////////////////////////////////////// 1020///////////////////////////////////////////////////////////////
diff --git a/linden/indra/llrender/llimagegl.cpp b/linden/indra/llrender/llimagegl.cpp
index c63d7ad..f99d4a9 100644
--- a/linden/indra/llrender/llimagegl.cpp
+++ b/linden/indra/llrender/llimagegl.cpp
@@ -711,7 +711,9 @@ void LLImageGL::setImage(const U8* data_in, BOOL data_hasmips)
711 { 711 {
712 S32 bytes = w * h * mComponents; 712 S32 bytes = w * h * mComponents;
713 llassert(prev_mip_data); 713 llassert(prev_mip_data);
714 llassert(prev_mip_size == bytes*4); 714 llassert(prev_mip_size == (bytes*4));
715 // Work around llassert() being compiled out and prev_mip_size not otherwise being used.
716 prev_mip_size = prev_mip_size + 0;
715 U8* new_data = new U8[bytes]; 717 U8* new_data = new U8[bytes];
716 llassert_always(new_data); 718 llassert_always(new_data);
717 LLImageBase::generateMip(prev_mip_data, new_data, w, h, mComponents); 719 LLImageBase::generateMip(prev_mip_data, new_data, w, h, mComponents);
diff --git a/linden/indra/llui/llcombobox.cpp b/linden/indra/llui/llcombobox.cpp
index 2546c4e..e79f7b2 100644
--- a/linden/indra/llui/llcombobox.cpp
+++ b/linden/indra/llui/llcombobox.cpp
@@ -75,7 +75,8 @@ LLComboBox::LLComboBox( const std::string& name, const LLRect &rect, const std::
75 mListPosition(BELOW), 75 mListPosition(BELOW),
76 mPrearrangeCallback( NULL ), 76 mPrearrangeCallback( NULL ),
77 mTextEntryCallback( NULL ), 77 mTextEntryCallback( NULL ),
78 mLabel(label) 78 mLabel(label),
79 mListColor(LLUI::sColorsGroup->getColor("ComboBoxBg"))
79{ 80{
80 if (font) 81 if (font)
81 { 82 {
@@ -109,7 +110,7 @@ LLComboBox::LLComboBox( const std::string& name, const LLRect &rect, const std::
109 mList = new LLScrollListCtrl(std::string("ComboBox"), LLRect(), mGLFont, 110 mList = new LLScrollListCtrl(std::string("ComboBox"), LLRect(), mGLFont,
110 &LLComboBox::onItemSelected, this, FALSE); 111 &LLComboBox::onItemSelected, this, FALSE);
111 mList->setVisible(FALSE); 112 mList->setVisible(FALSE);
112 mList->setBgWriteableColor( LLColor4(1,1,1,1) ); 113 mList->setBgWriteableColor(mListColor);
113 mList->setCommitOnKeyboardMovement(FALSE); 114 mList->setCommitOnKeyboardMovement(FALSE);
114 addChild(mList); 115 addChild(mList);
115 116
diff --git a/linden/indra/llui/llcombobox.h b/linden/indra/llui/llcombobox.h
index 7384b87..0ce6ccd 100644
--- a/linden/indra/llui/llcombobox.h
+++ b/linden/indra/llui/llcombobox.h
@@ -187,12 +187,13 @@ public:
187 virtual void hideList(); 187 virtual void hideList();
188 188
189protected: 189protected:
190 LLButton* mButton; 190 LLButton* mButton;
191 LLScrollListCtrl* mList; 191 LLScrollListCtrl* mList;
192 EPreferredPosition mListPosition; 192 EPreferredPosition mListPosition;
193 LLPointer<LLUIImage> mArrowImage; 193 LLPointer<LLUIImage> mArrowImage;
194 std::string mLabel; 194 std::string mLabel;
195 const LLFontGL* mGLFont; 195 const LLFontGL* mGLFont;
196 LLColor4 mListColor;
196 197
197private: 198private:
198 S32 mButtonPadding; 199 S32 mButtonPadding;
diff --git a/linden/indra/llui/llfloater.cpp b/linden/indra/llui/llfloater.cpp
index 58c717a..4c4aeaf 100644
--- a/linden/indra/llui/llfloater.cpp
+++ b/linden/indra/llui/llfloater.cpp
@@ -277,30 +277,14 @@ void LLFloater::initFloater(const std::string& title,
277 mMinimized = FALSE; 277 mMinimized = FALSE;
278 mExpandedRect.set(0,0,0,0); 278 mExpandedRect.set(0,0,0,0);
279 279
280 S32 close_pad; // space to the right of close box
281 S32 close_box_size; // For layout purposes, how big is the close box? 280 S32 close_box_size; // For layout purposes, how big is the close box?
282 if (close_btn) 281 if (close_btn)
283 { 282 {
284 close_box_size = LLFLOATER_CLOSE_BOX_SIZE; 283 close_box_size = LLFLOATER_CLOSE_BOX_SIZE;
285 close_pad = 0;
286 } 284 }
287 else 285 else
288 { 286 {
289 close_box_size = 0; 287 close_box_size = 0;
290 close_pad = 0;
291 }
292
293 S32 minimize_box_size;
294 S32 minimize_pad;
295 if (minimizable && !drag_on_left)
296 {
297 minimize_box_size = LLFLOATER_CLOSE_BOX_SIZE;
298 minimize_pad = 0;
299 }
300 else
301 {
302 minimize_box_size = 0;
303 minimize_pad = 0;
304 } 288 }
305 289
306 // Drag Handle 290 // Drag Handle
diff --git a/linden/indra/llui/llfunctorregistry.h b/linden/indra/llui/llfunctorregistry.h
index 8864f7a..7c03f2f 100644
--- a/linden/indra/llui/llfunctorregistry.h
+++ b/linden/indra/llui/llfunctorregistry.h
@@ -75,7 +75,6 @@ public:
75 bool registerFunctor(const std::string& name, ResponseFunctor f) 75 bool registerFunctor(const std::string& name, ResponseFunctor f)
76 { 76 {
77 bool retval = true; 77 bool retval = true;
78 typename FunctorMap::iterator it = mMap.find(name);
79 if (mMap.count(name) == 0) 78 if (mMap.count(name) == 0)
80 { 79 {
81 mMap[name] = f; 80 mMap[name] = f;
@@ -102,7 +101,6 @@ public:
102 101
103 FUNCTOR_TYPE getFunctor(const std::string& name) 102 FUNCTOR_TYPE getFunctor(const std::string& name)
104 { 103 {
105 typename FunctorMap::iterator it = mMap.find(name);
106 if (mMap.count(name) != 0) 104 if (mMap.count(name) != 0)
107 { 105 {
108 return mMap[name]; 106 return mMap[name];
diff --git a/linden/indra/llui/llkeywords.cpp b/linden/indra/llui/llkeywords.cpp
index 93da44c..a50dbff 100644
--- a/linden/indra/llui/llkeywords.cpp
+++ b/linden/indra/llui/llkeywords.cpp
@@ -288,7 +288,6 @@ void LLKeywords::findSegments(std::vector<LLTextSegment *>* seg_list, const LLWS
288 288
289 const llwchar* base = wtext.c_str(); 289 const llwchar* base = wtext.c_str();
290 const llwchar* cur = base; 290 const llwchar* cur = base;
291 const llwchar* line = NULL;
292 291
293 while( *cur ) 292 while( *cur )
294 { 293 {
@@ -304,7 +303,6 @@ void LLKeywords::findSegments(std::vector<LLTextSegment *>* seg_list, const LLWS
304 } 303 }
305 304
306 // Start of a new line 305 // Start of a new line
307 line = cur;
308 306
309 // Skip white space 307 // Skip white space
310 while( *cur && isspace(*cur) && (*cur != '\n') ) 308 while( *cur && isspace(*cur) && (*cur != '\n') )
diff --git a/linden/indra/llui/llmenugl.cpp b/linden/indra/llui/llmenugl.cpp
index 2d4a2f1..6850891 100644
--- a/linden/indra/llui/llmenugl.cpp
+++ b/linden/indra/llui/llmenugl.cpp
@@ -3095,8 +3095,6 @@ void LLMenuGL::draw( void )
3095 LLUI::sConfigGroup->getS32("DropShadowFloater") ); 3095 LLUI::sConfigGroup->getS32("DropShadowFloater") );
3096 } 3096 }
3097 3097
3098 LLColor4 bg_color = mBackgroundColor;
3099
3100 if( mBgVisible ) 3098 if( mBgVisible )
3101 { 3099 {
3102 gl_rect_2d( 0, getRect().getHeight(), getRect().getWidth(), 0, mBackgroundColor ); 3100 gl_rect_2d( 0, getRect().getHeight(), getRect().getWidth(), 0, mBackgroundColor );
diff --git a/linden/indra/llui/llpanel.cpp b/linden/indra/llui/llpanel.cpp
index 07e78ed..361e4f3 100644
--- a/linden/indra/llui/llpanel.cpp
+++ b/linden/indra/llui/llpanel.cpp
@@ -1078,7 +1078,6 @@ struct LLLayoutStack::LLEmbeddedPanel
1078 mVisibleAmt(1.f) // default to fully visible 1078 mVisibleAmt(1.f) // default to fully visible
1079 { 1079 {
1080 LLResizeBar::Side side = (orientation == HORIZONTAL) ? LLResizeBar::RIGHT : LLResizeBar::BOTTOM; 1080 LLResizeBar::Side side = (orientation == HORIZONTAL) ? LLResizeBar::RIGHT : LLResizeBar::BOTTOM;
1081 LLRect resize_bar_rect = panelp->getRect();
1082 1081
1083 S32 min_dim; 1082 S32 min_dim;
1084 if (orientation == HORIZONTAL) 1083 if (orientation == HORIZONTAL)
diff --git a/linden/indra/llui/llprogressbar.cpp b/linden/indra/llui/llprogressbar.cpp
index d148733..0000d77 100644
--- a/linden/indra/llui/llprogressbar.cpp
+++ b/linden/indra/llui/llprogressbar.cpp
@@ -83,9 +83,6 @@ void LLProgressBar::draw()
83 bar_bg_imagep->draw(getLocalRect(), 83 bar_bg_imagep->draw(getLocalRect(),
84 background_color); 84 background_color);
85 85
86 F32 alpha = 0.5f + 0.5f*0.5f*(1.f + (F32)sin(3.f*timer.getElapsedTimeF32()));
87 LLColor4 bar_color = LLUI::sColorsGroup->getColor("LoginProgressBarFgColor");
88 bar_color.mV[3] = alpha;
89 LLRect progress_rect = getLocalRect(); 86 LLRect progress_rect = getLocalRect();
90 progress_rect.mRight = llround(getRect().getWidth() * (mPercentDone / 100.f)); 87 progress_rect.mRight = llround(getRect().getWidth() * (mPercentDone / 100.f));
91 bar_fg_imagep->draw(progress_rect); 88 bar_fg_imagep->draw(progress_rect);
diff --git a/linden/indra/llui/llresmgr.cpp b/linden/indra/llui/llresmgr.cpp
index 22610ca..a16cfdf 100644
--- a/linden/indra/llui/llresmgr.cpp
+++ b/linden/indra/llui/llresmgr.cpp
@@ -266,8 +266,13 @@ std::string LLResMgr::getMonetaryString( S32 input ) const
266 default: // Unknown -- use the US defaults. 266 default: // Unknown -- use the US defaults.
267 case LLLOCALE_USA: 267 case LLLOCALE_USA:
268 case LLLOCALE_UK: // UK ends up being the same as US for the items used here. 268 case LLLOCALE_UK: // UK ends up being the same as US for the items used here.
269 fakeconv.negative_sign = "-"; 269 // Mac OS X 10.6 SDK's struct lconv contains "char *" not
270 fakeconv.mon_grouping = "\x03\x03\x00"; // commas every 3 digits 270 // "const char *" so these char arrays work around the error
271 // this causes in GCC 4.2, even though they won't be modified.
272 static char negative_sign[] = "-";
273 static char mon_grouping[] = "\x03\x03\x00";
274 fakeconv.negative_sign = negative_sign;
275 fakeconv.mon_grouping = mon_grouping; // commas every 3 digits
271 fakeconv.n_sign_posn = 1; // negative sign before the string 276 fakeconv.n_sign_posn = 1; // negative sign before the string
272 break; 277 break;
273 } 278 }
diff --git a/linden/indra/llui/llslider.cpp b/linden/indra/llui/llslider.cpp
index 5c17baa..c8f5935 100644
--- a/linden/indra/llui/llslider.cpp
+++ b/linden/indra/llui/llslider.cpp
@@ -283,7 +283,6 @@ void LLSlider::draw()
283 283
284 F32 opacity = getEnabled() ? 1.f : 0.3f; 284 F32 opacity = getEnabled() ? 1.f : 0.3f;
285 LLColor4 center_color = (mThumbCenterColor % opacity); 285 LLColor4 center_color = (mThumbCenterColor % opacity);
286 LLColor4 track_color = (mTrackColor % opacity);
287 286
288 // Track 287 // Track
289 LLRect track_rect(mThumbImage->getWidth() / 2, 288 LLRect track_rect(mThumbImage->getWidth() / 2,
diff --git a/linden/indra/llui/lltexteditor.cpp b/linden/indra/llui/lltexteditor.cpp
index 8612427..106f658 100644
--- a/linden/indra/llui/lltexteditor.cpp
+++ b/linden/indra/llui/lltexteditor.cpp
@@ -3077,7 +3077,6 @@ void LLTextEditor::drawSelectionBackground()
3077 S32 selection_right_x = mTextRect.mRight; 3077 S32 selection_right_x = mTextRect.mRight;
3078 S32 selection_right_y = mTextRect.mBottom; 3078 S32 selection_right_y = mTextRect.mBottom;
3079 3079
3080 BOOL selection_left_visible = FALSE;
3081 BOOL selection_right_visible = FALSE; 3080 BOOL selection_right_visible = FALSE;
3082 3081
3083 // Skip through the lines we aren't drawing. 3082 // Skip through the lines we aren't drawing.
@@ -3085,7 +3084,6 @@ void LLTextEditor::drawSelectionBackground()
3085 3084
3086 S32 left_line_num = cur_line; 3085 S32 left_line_num = cur_line;
3087 S32 num_lines = getLineCount(); 3086 S32 num_lines = getLineCount();
3088 S32 right_line_num = num_lines - 1;
3089 3087
3090 S32 line_start = -1; 3088 S32 line_start = -1;
3091 if (cur_line >= num_lines) 3089 if (cur_line >= num_lines)
@@ -3119,13 +3117,11 @@ void LLTextEditor::drawSelectionBackground()
3119 if( line_start <= selection_left && selection_left <= line_end ) 3117 if( line_start <= selection_left && selection_left <= line_end )
3120 { 3118 {
3121 left_line_num = cur_line; 3119 left_line_num = cur_line;
3122 selection_left_visible = TRUE;
3123 selection_left_x = mTextRect.mLeft + mGLFont->getWidth(line, 0, selection_left - line_start, mAllowEmbeddedItems); 3120 selection_left_x = mTextRect.mLeft + mGLFont->getWidth(line, 0, selection_left - line_start, mAllowEmbeddedItems);
3124 selection_left_y = text_y; 3121 selection_left_y = text_y;
3125 } 3122 }
3126 if( line_start <= selection_right && selection_right <= line_end ) 3123 if( line_start <= selection_right && selection_right <= line_end )
3127 { 3124 {
3128 right_line_num = cur_line;
3129 selection_right_visible = TRUE; 3125 selection_right_visible = TRUE;
3130 selection_right_x = mTextRect.mLeft + mGLFont->getWidth(line, 0, selection_right - line_start, mAllowEmbeddedItems); 3126 selection_right_x = mTextRect.mLeft + mGLFont->getWidth(line, 0, selection_right - line_start, mAllowEmbeddedItems);
3131 if (selection_right == line_end) 3127 if (selection_right == line_end)
diff --git a/linden/indra/llui/llui.h b/linden/indra/llui/llui.h
index ebcc730..466d2c7 100644
--- a/linden/indra/llui/llui.h
+++ b/linden/indra/llui/llui.h
@@ -706,10 +706,12 @@ public:
706 706
707 // this avoids a MSVC bug where non-referenced static members are "optimized" away 707 // this avoids a MSVC bug where non-referenced static members are "optimized" away
708 // even if their constructors have side effects 708 // even if their constructors have side effects
709 // Then we avoid a compiler warning that dummy is never used. lol
709 void reference() 710 void reference()
710 { 711 {
711 S32 dummy; 712 S32 dummy;
712 dummy = 0; 713 dummy = 0;
714 dummy = dummy + 0;
713 } 715 }
714}; 716};
715 717
diff --git a/linden/indra/llwindow/GL/glh_extensions.h b/linden/indra/llwindow/GL/glh_extensions.h
index 5b149c9..ce2865b 100644
--- a/linden/indra/llwindow/GL/glh_extensions.h
+++ b/linden/indra/llwindow/GL/glh_extensions.h
@@ -111,7 +111,9 @@ static const char* EatNonWhiteSpace(const char *str)
111int glh_init_extensions(const char *origReqExts) 111int glh_init_extensions(const char *origReqExts)
112{ 112{
113 // Length of requested extensions string 113 // Length of requested extensions string
114 /*
114 unsigned reqExtsLen; 115 unsigned reqExtsLen;
116 */
115 char *reqExts; 117 char *reqExts;
116 // Ptr for individual extensions within reqExts 118 // Ptr for individual extensions within reqExts
117 char *reqExt; 119 char *reqExt;
@@ -153,8 +155,8 @@ int glh_init_extensions(const char *origReqExts)
153 return TRUE; 155 return TRUE;
154 } 156 }
155 reqExts = strdup(origReqExts); 157 reqExts = strdup(origReqExts);
156 reqExtsLen = (S32)strlen(reqExts);
157 /* 158 /*
159 reqExtsLen = (S32)strlen(reqExts);
158 if (NULL == gGLHExts.mUnsupportedExts) 160 if (NULL == gGLHExts.mUnsupportedExts)
159 { 161 {
160 gGLHExts.mUnsupportedExts = (char*)malloc(reqExtsLen + 1); 162 gGLHExts.mUnsupportedExts = (char*)malloc(reqExtsLen + 1);
diff --git a/linden/indra/llwindow/llwindowsdl.cpp b/linden/indra/llwindow/llwindowsdl.cpp
index 58090b3..6717f7b 100644
--- a/linden/indra/llwindow/llwindowsdl.cpp
+++ b/linden/indra/llwindow/llwindowsdl.cpp
@@ -2518,9 +2518,10 @@ std::vector<std::string> LLWindowSDL::getDynamicFallbackFontList()
2518 sortpat = FcNameParse((FcChar8*) sort_order.c_str()); 2518 sortpat = FcNameParse((FcChar8*) sort_order.c_str());
2519 if (sortpat) 2519 if (sortpat)
2520 { 2520 {
2521 FcResult dummyResult;
2521 // Sort the list of system fonts from most-to-least-desirable. 2522 // Sort the list of system fonts from most-to-least-desirable.
2522 fs = FcFontSort(NULL, sortpat, elide_unicode_coverage, 2523 fs = FcFontSort(NULL, sortpat, elide_unicode_coverage,
2523 NULL, NULL); 2524 NULL, &dummyResult);
2524 FcPatternDestroy(sortpat); 2525 FcPatternDestroy(sortpat);
2525 } 2526 }
2526 2527
diff --git a/linden/indra/lscript/lscript_compile/CMakeLists.txt b/linden/indra/lscript/lscript_compile/CMakeLists.txt
index 252085b..f6d5212 100644
--- a/linden/indra/lscript/lscript_compile/CMakeLists.txt
+++ b/linden/indra/lscript/lscript_compile/CMakeLists.txt
@@ -103,7 +103,7 @@ if (WINDOWS)
103 PROPERTIES COMPILE_FLAGS /DYY_NO_UNISTD_H) 103 PROPERTIES COMPILE_FLAGS /DYY_NO_UNISTD_H)
104endif (WINDOWS) 104endif (WINDOWS)
105 105
106if (WINDOWS) 106if (WINDOWS AND NOT CYGWIN)
107 get_filename_component(M4_PATH ${M4} PATH) 107 get_filename_component(M4_PATH ${M4} PATH)
108 add_custom_command( 108 add_custom_command(
109 OUTPUT 109 OUTPUT
@@ -118,7 +118,7 @@ if (WINDOWS)
118 ${CMAKE_CURRENT_SOURCE_DIR}/indra.y 118 ${CMAKE_CURRENT_SOURCE_DIR}/indra.y
119 ) 119 )
120 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/windows) 120 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/windows)
121else (WINDOWS) 121else (WINDOWS AND NOT CYGWIN)
122 add_custom_command( 122 add_custom_command(
123 OUTPUT 123 OUTPUT
124 ${CMAKE_CURRENT_BINARY_DIR}/indra.y.cpp 124 ${CMAKE_CURRENT_BINARY_DIR}/indra.y.cpp
@@ -131,7 +131,7 @@ else (WINDOWS)
131 DEPENDS 131 DEPENDS
132 ${CMAKE_CURRENT_SOURCE_DIR}/indra.y 132 ${CMAKE_CURRENT_SOURCE_DIR}/indra.y
133 ) 133 )
134endif (WINDOWS) 134endif (WINDOWS AND NOT CYGWIN)
135 135
136if (DARWIN) 136if (DARWIN)
137 # Mac OS X 10.4 compatibility 137 # Mac OS X 10.4 compatibility
diff --git a/linden/indra/lscript/lscript_compile/indra.l b/linden/indra/lscript/lscript_compile/indra.l
index 584087e..7f4cdc5 100644
--- a/linden/indra/lscript/lscript_compile/indra.l
+++ b/linden/indra/lscript/lscript_compile/indra.l
@@ -53,9 +53,16 @@ void parse_string();
53#define ECHO do { } while (0) 53#define ECHO do { } while (0)
54 54
55#if defined(__cplusplus) 55#if defined(__cplusplus)
56extern "C" { int yylex( void ); } 56extern "C" {
57extern "C" { int yyparse( void ); } 57#endif
58extern "C" { int yyerror(const char *fmt, ...); } 58int yyerror(const char *fmt, ...);
59int yylex( void );
60// Windows defines this in indra.y.hpp, which is included above, and defines it differently.
61#ifndef LL_WINDOWS
62int yyparse( void );
63#endif
64#if defined(__cplusplus)
65}
59#endif 66#endif
60 67
61%} 68%}
@@ -722,9 +729,6 @@ L?\"(\\.|[^\\"])*\" { parse_string(); count(); return(STRING_CONSTANT); }
722LLScriptAllocationManager *gAllocationManager; 729LLScriptAllocationManager *gAllocationManager;
723LLScriptScript *gScriptp; 730LLScriptScript *gScriptp;
724 731
725// Prototype for the yacc parser entry point
726int yyparse(void);
727
728int yyerror(const char *fmt, ...) 732int yyerror(const char *fmt, ...)
729{ 733{
730 gErrorToText.writeError(yyout, gLine, gColumn, LSERROR_SYNTAX_ERROR); 734 gErrorToText.writeError(yyout, gLine, gColumn, LSERROR_SYNTAX_ERROR);
@@ -760,7 +764,13 @@ BOOL lscript_compile(const char* src_filename, const char* dst_filename,
760 764
761 yyrestart(yyin); 765 yyrestart(yyin);
762 766
763 b_parse_ok = !yyparse(); 767// TODO - Try to fix this, but for now, no compiling LSL for Windows in SL.
768// Actually, this seems to not actually be needed anymore?
769// I thought it was needed to support ancient pre Mono LSL scripts, which only work in SL anyway, but they still work fine. Perhaps SL fixed it server side?
770// If that's the case, we don't need any of this stuff.
771#ifndef LL_WINDOWS
772// b_parse_ok = !yyparse();
773#endif
764 774
765 if (b_parse_ok) 775 if (b_parse_ok)
766 { 776 {
diff --git a/linden/indra/lscript/lscript_execute/lscript_execute.cpp b/linden/indra/lscript/lscript_execute/lscript_execute.cpp
index cb9a78e..7da5e51 100644
--- a/linden/indra/lscript/lscript_execute/lscript_execute.cpp
+++ b/linden/indra/lscript/lscript_execute/lscript_execute.cpp
@@ -809,16 +809,7 @@ void LLScriptExecute::runInstructions(BOOL b_print, const LLUUID &id,
809 // is there a fault? 809 // is there a fault?
810 // if yes, print out message and exit 810 // if yes, print out message and exit
811 S32 value = getVersion(); 811 S32 value = getVersion();
812 S32 major_version = 0; 812 if ((value != LSL2_VERSION1_END_NUMBER) && (value != LSL2_VERSION_NUMBER))
813 if (value == LSL2_VERSION1_END_NUMBER)
814 {
815 major_version = 1;
816 }
817 else if (value == LSL2_VERSION_NUMBER)
818 {
819 major_version = 2;
820 }
821 else
822 { 813 {
823 setFault(LSRF_VERSION_MISMATCH); 814 setFault(LSRF_VERSION_MISMATCH);
824 } 815 }
diff --git a/linden/indra/lscript/lscript_execute/lscript_readlso.cpp b/linden/indra/lscript/lscript_execute/lscript_readlso.cpp
index 3b10cc6..05eb826 100644
--- a/linden/indra/lscript/lscript_execute/lscript_readlso.cpp
+++ b/linden/indra/lscript/lscript_execute/lscript_readlso.cpp
@@ -150,7 +150,9 @@ void LLScriptLSOParse::printGlobals(LLFILE *fp)
150 150
151 // get offset to skip past name 151 // get offset to skip past name
152 varoffset = global_v_offset; 152 varoffset = global_v_offset;
153 // FIXME: Not actually used, perhaps there's a skip function? Or perhaps we really do need to skip past a name as the above comment suggests?
153 offset = bytestream2integer(mRawData, global_v_offset); 154 offset = bytestream2integer(mRawData, global_v_offset);
155 offset = offset + 0;
154 156
155 // get typeexport 157 // get typeexport
156 type = *(mRawData + global_v_offset++); 158 type = *(mRawData + global_v_offset++);
@@ -268,8 +270,6 @@ void LLScriptLSOParse::printGlobalFunctions(LLFILE *fp)
268 fprintf(fp, "[Function #%d] [0x%X] %s\n", function_number, orig_function_offset, name); 270 fprintf(fp, "[Function #%d] [0x%X] %s\n", function_number, orig_function_offset, name);
269 fprintf(fp, "\tReturn Type: %s\n", LSCRIPTTypeNames[type]); 271 fprintf(fp, "\tReturn Type: %s\n", LSCRIPTTypeNames[type]);
270 type = *(mRawData + function_offset++); 272 type = *(mRawData + function_offset++);
271 S32 params;
272 params = 0;
273 S32 pcount = 0; 273 S32 pcount = 0;
274 while (type) 274 while (type)
275 { 275 {
@@ -362,7 +362,9 @@ void LLScriptLSOParse::printStates(LLFILE *fp)
362 if (event_handlers & LSCRIPTStateBitField[k]) 362 if (event_handlers & LSCRIPTStateBitField[k])
363 { 363 {
364 temp_end = bytestream2integer(mRawData, read_ahead); 364 temp_end = bytestream2integer(mRawData, read_ahead);
365 // FIXME onefang: Dummy is not actually used, but perhaps this is here to stop a warning? We need to stop another warning now. Some sort of skip might be better.
365 dummy = bytestream2integer(mRawData, read_ahead); 366 dummy = bytestream2integer(mRawData, read_ahead);
367 dummy = dummy + 0;
366 if ( (temp_end < opcode_end) 368 if ( (temp_end < opcode_end)
367 &&(temp_end > event_offset)) 369 &&(temp_end > event_offset))
368 { 370 {
diff --git a/linden/indra/lscript/lscript_library/lscript_library.cpp b/linden/indra/lscript/lscript_library/lscript_library.cpp
index a623a9a..c592c8b 100644
--- a/linden/indra/lscript/lscript_library/lscript_library.cpp
+++ b/linden/indra/lscript/lscript_library/lscript_library.cpp
@@ -1,11 +1,11 @@
1/** 1/**
2 * @file lscript_library.cpp 2 * @file lscript_library.cpp
3 * @brief external library interface 3 * @brief external library interface
4 * 4 *
5 * $LicenseInfo:firstyear=2002&license=viewergpl$ 5 * $LicenseInfo:firstyear=2002&license=viewergpl$
6 * 6 *
7 * Copyright (c) 2002-2009, Linden Research, Inc. 7 * Copyright (c) 2002-2009, Linden Research, Inc.
8 * 8 *
9 * Second Life Viewer Source Code 9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab 10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0 11 * to you under the terms of the GNU General Public License, version 2.0
@@ -13,17 +13,17 @@
13 * ("Other License"), formally executed by you and Linden Lab. Terms of 13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or 14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 * 16 *
17 * There are special exceptions to the terms and conditions of the GPL as 17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception 18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or 19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at 20 * online at
21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception 21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
22 * 22 *
23 * By copying, modifying or distributing this software, you acknowledge 23 * By copying, modifying or distributing this software, you acknowledge
24 * that you have read and understood your obligations described above, 24 * that you have read and understood your obligations described above,
25 * and agree to abide by those obligations. 25 * and agree to abide by those obligations.
26 * 26 *
27 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO 27 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
28 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, 28 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
29 * COMPLETENESS OR PERFORMANCE. 29 * COMPLETENESS OR PERFORMANCE.
@@ -37,7 +37,7 @@
37// ## ## ## ## ## ######## ## ## ## ## ## ## ## ## #### ## ## 37// ## ## ## ## ## ######## ## ## ## ## ## ## ## ## #### ## ##
38// ## ## ## ######### ## ## ## #### ## ## #### ## ## 38// ## ## ## ######### ## ## ## #### ## ## #### ## ##
39// ## ## ## ## ## ## ## ## ### ## ## ### ## ## #### #### 39// ## ## ## ## ## ## ## ## ### ## ## ### ## ## #### ####
40// ### ### ## ## ## ## ## ## #### ## ## ###### #### #### 40// ### ### ## ## ## ## ## ## #### ## ## ###### #### ####
41// 41//
42// When adding functions, they <b>MUST</b> be appended to the end of 42// When adding functions, they <b>MUST</b> be appended to the end of
43// the init() method. The init() associates the name with a number, 43// the init() method. The init() associates the name with a number,
@@ -335,7 +335,7 @@ void LLScriptLibrary::init()
335 335
336 addFunction(new LLScriptLibraryFunction(10.f, 0.2f, dummy_func, "llSetRemoteScriptAccessPin", NULL, "i", "llSetRemoteScriptAccessPin(integer pin)\nIf pin is set to a non-zero number, the task will accept remote script\nloads via llRemoteLoadScriptPin if it passes in the correct pin.\nOthersise, llRemoteLoadScriptPin is ignored.")); 336 addFunction(new LLScriptLibraryFunction(10.f, 0.2f, dummy_func, "llSetRemoteScriptAccessPin", NULL, "i", "llSetRemoteScriptAccessPin(integer pin)\nIf pin is set to a non-zero number, the task will accept remote script\nloads via llRemoteLoadScriptPin if it passes in the correct pin.\nOthersise, llRemoteLoadScriptPin is ignored."));
337 addFunction(new LLScriptLibraryFunction(10.f, 3.f, dummy_func, "llRemoteLoadScriptPin", NULL, "ksiii", "llRemoteLoadScriptPin(key target, string name, integer pin, integer running, integer start_param)\nIf the owner of the object this script is attached can modify target,\nthey are in the same region,\nand the matching pin is used,\ncopy script name onto target,\nif running == TRUE, start the script with param.")); 337 addFunction(new LLScriptLibraryFunction(10.f, 3.f, dummy_func, "llRemoteLoadScriptPin", NULL, "ksiii", "llRemoteLoadScriptPin(key target, string name, integer pin, integer running, integer start_param)\nIf the owner of the object this script is attached can modify target,\nthey are in the same region,\nand the matching pin is used,\ncopy script name onto target,\nif running == TRUE, start the script with param."));
338 338
339 addFunction(new LLScriptLibraryFunction(10.f, 1.f, dummy_func, "llOpenRemoteDataChannel", NULL, NULL, "llOpenRemoteDataChannel()\nCreates a channel to listen for XML-RPC calls. Will trigger a remote_data event with channel id once it is available.")); 339 addFunction(new LLScriptLibraryFunction(10.f, 1.f, dummy_func, "llOpenRemoteDataChannel", NULL, NULL, "llOpenRemoteDataChannel()\nCreates a channel to listen for XML-RPC calls. Will trigger a remote_data event with channel id once it is available."));
340 addFunction(new LLScriptLibraryFunction(10.f, 3.f, dummy_func, "llSendRemoteData", "k", "ksis", "key llSendRemoteData(key channel, string dest, integer idata, string sdata)\nSend an XML-RPC request to dest through channel with payload of channel (in a string), integer idata and string sdata.\nA message identifier key is returned.\nAn XML-RPC reply will trigger a remote_data event and reference the message id.\nThe message_id is returned.")); 340 addFunction(new LLScriptLibraryFunction(10.f, 3.f, dummy_func, "llSendRemoteData", "k", "ksis", "key llSendRemoteData(key channel, string dest, integer idata, string sdata)\nSend an XML-RPC request to dest through channel with payload of channel (in a string), integer idata and string sdata.\nA message identifier key is returned.\nAn XML-RPC reply will trigger a remote_data event and reference the message id.\nThe message_id is returned."));
341 addFunction(new LLScriptLibraryFunction(10.f, 3.f, dummy_func, "llRemoteDataReply", NULL, "kksi", "llRemoteDataReply(key channel, key message_id, string sdata, integer idata)\nSend an XML-RPC reply to message_id on channel with payload of string sdata and integer idata")); 341 addFunction(new LLScriptLibraryFunction(10.f, 3.f, dummy_func, "llRemoteDataReply", NULL, "kksi", "llRemoteDataReply(key channel, key message_id, string sdata, integer idata)\nSend an XML-RPC reply to message_id on channel with payload of string sdata and integer idata"));
@@ -351,7 +351,7 @@ void LLScriptLibrary::init()
351 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llLog", "f", "f", "float llLog(float val)\nReturns the base e log of val if val > 0, otherwise returns 0.")); 351 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llLog", "f", "f", "float llLog(float val)\nReturns the base e log of val if val > 0, otherwise returns 0."));
352 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetAnimationList", "l", "k", "list llGetAnimationList(key id)\nGets a list of all playing animations for avatar id")); 352 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetAnimationList", "l", "k", "list llGetAnimationList(key id)\nGets a list of all playing animations for avatar id"));
353 addFunction(new LLScriptLibraryFunction(10.f, 2.f, dummy_func, "llSetParcelMusicURL", NULL, "s", "llSetParcelMusicURL(string url)\nSets the streaming audio URL for the parcel object is on")); 353 addFunction(new LLScriptLibraryFunction(10.f, 2.f, dummy_func, "llSetParcelMusicURL", NULL, "s", "llSetParcelMusicURL(string url)\nSets the streaming audio URL for the parcel object is on"));
354 354
355 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetRootPosition", "v", NULL, "vector llGetRootPosition()\nGets the global position of the root object of the object script is attached to")); 355 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetRootPosition", "v", NULL, "vector llGetRootPosition()\nGets the global position of the root object of the object script is attached to"));
356 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetRootRotation", "q", NULL, "rotation llGetRootRotation()\nGets the global rotation of the root object of the object script is attached to")); 356 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetRootRotation", "q", NULL, "rotation llGetRootRotation()\nGets the global rotation of the root object of the object script is attached to"));
357 357
@@ -370,7 +370,7 @@ void LLScriptLibrary::init()
370 addFunction(new LLScriptLibraryFunction(10.f, 0.0f, dummy_func, "llBase64ToInteger", "i", "s", "integer llBase64ToInteger(string str)\nBig endian decode of a Base64 string into an integer.")); 370 addFunction(new LLScriptLibraryFunction(10.f, 0.0f, dummy_func, "llBase64ToInteger", "i", "s", "integer llBase64ToInteger(string str)\nBig endian decode of a Base64 string into an integer."));
371 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetGMTclock", "f", "", "float llGetGMTclock()\nGets the time in seconds since midnight in GMT")); 371 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetGMTclock", "f", "", "float llGetGMTclock()\nGets the time in seconds since midnight in GMT"));
372 addFunction(new LLScriptLibraryFunction(10.f, 10.f, dummy_func, "llGetSimulatorHostname", "s", "", "string llGetSimulatorHostname()\nGets the hostname of the machine script is running on (same as string in viewer Help dialog)")); 372 addFunction(new LLScriptLibraryFunction(10.f, 10.f, dummy_func, "llGetSimulatorHostname", "s", "", "string llGetSimulatorHostname()\nGets the hostname of the machine script is running on (same as string in viewer Help dialog)"));
373 373
374 addFunction(new LLScriptLibraryFunction(10.f, 0.2f, dummy_func, "llSetLocalRot", NULL, "q", "llSetLocalRot(rotation rot)\nsets the rotation of a child prim relative to the root prim")); 374 addFunction(new LLScriptLibraryFunction(10.f, 0.2f, dummy_func, "llSetLocalRot", NULL, "q", "llSetLocalRot(rotation rot)\nsets the rotation of a child prim relative to the root prim"));
375 375
376 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llParseStringKeepNulls", "l", "sll", "list llParseStringKeepNulls(string src, list separators, list spacers)\nBreaks src into a list, discarding separators, keeping spacers (separators and spacers must be lists of strings, maximum of 8 each), keeping any null values generated.")); 376 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llParseStringKeepNulls", "l", "sll", "list llParseStringKeepNulls(string src, list separators, list spacers)\nBreaks src into a list, discarding separators, keeping spacers (separators and spacers must be lists of strings, maximum of 8 each), keeping any null values generated."));
@@ -393,12 +393,12 @@ void LLScriptLibrary::init()
393 addFunction(new LLScriptLibraryFunction(10.f, 2.f, dummy_func, "llParcelMediaQuery", "l", "l", "list llParcelMediaQuery(list query)\nSends a list of queries, returns a list of results.")); 393 addFunction(new LLScriptLibraryFunction(10.f, 2.f, dummy_func, "llParcelMediaQuery", "l", "l", "list llParcelMediaQuery(list query)\nSends a list of queries, returns a list of results."));
394 394
395 addFunction(new LLScriptLibraryFunction(10.f, 1.f, dummy_func, "llModPow", "i", "iii", "integer llModPow(integer a, integer b, integer c)\nReturns a raised to the b power, mod c. ( (a**b)%c ). b is capped at 0xFFFF (16 bits).")); 395 addFunction(new LLScriptLibraryFunction(10.f, 1.f, dummy_func, "llModPow", "i", "iii", "integer llModPow(integer a, integer b, integer c)\nReturns a raised to the b power, mod c. ( (a**b)%c ). b is capped at 0xFFFF (16 bits)."));
396 396
397 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetInventoryType", "i", "s", "integer llGetInventoryType(string name)\nReturns the type of the inventory name")); 397 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetInventoryType", "i", "s", "integer llGetInventoryType(string name)\nReturns the type of the inventory name"));
398 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llSetPayPrice", NULL, "il", "llSetPayPrice(integer price, list quick_pay_buttons)\nSets the default amount when someone chooses to pay this object.")); 398 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llSetPayPrice", NULL, "il", "llSetPayPrice(integer price, list quick_pay_buttons)\nSets the default amount when someone chooses to pay this object."));
399 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetCameraPos", "v", "", "vector llGetCameraPos()\nGets current camera position for agent task has permissions for.")); 399 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetCameraPos", "v", "", "vector llGetCameraPos()\nGets current camera position for agent task has permissions for."));
400 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetCameraRot", "q", "", "rotation llGetCameraRot()\nGets current camera orientation for agent task has permissions for.")); 400 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetCameraRot", "q", "", "rotation llGetCameraRot()\nGets current camera orientation for agent task has permissions for."));
401 401
402 addFunction(new LLScriptLibraryFunction(10.f, 20.f, dummy_func, "llSetPrimURL", NULL, "s", "llSetPrimURL(string url)\nUpdates the URL for the web page shown on the sides of the object.")); 402 addFunction(new LLScriptLibraryFunction(10.f, 20.f, dummy_func, "llSetPrimURL", NULL, "s", "llSetPrimURL(string url)\nUpdates the URL for the web page shown on the sides of the object."));
403 addFunction(new LLScriptLibraryFunction(10.f, 20.f, dummy_func, "llRefreshPrimURL", NULL, "", "llRefreshPrimURL()\nReloads the web page shown on the sides of the object.")); 403 addFunction(new LLScriptLibraryFunction(10.f, 20.f, dummy_func, "llRefreshPrimURL", NULL, "", "llRefreshPrimURL()\nReloads the web page shown on the sides of the object."));
404 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llEscapeURL", "s", "s", "string llEscapeURL(string url)\nReturns and escaped/encoded version of url, replacing spaces with %20 etc.")); 404 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llEscapeURL", "s", "s", "string llEscapeURL(string url)\nReturns and escaped/encoded version of url, replacing spaces with %20 etc."));
@@ -411,7 +411,7 @@ void LLScriptLibrary::init()
411 411
412 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llSetCameraParams", NULL, "l", "llSetCameraParams(list rules)\nSets multiple camera parameters at once.\nList format is [ rule1, data1, rule2, data2 . . . rulen, datan ]")); 412 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llSetCameraParams", NULL, "l", "llSetCameraParams(list rules)\nSets multiple camera parameters at once.\nList format is [ rule1, data1, rule2, data2 . . . rulen, datan ]"));
413 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llClearCameraParams", NULL, NULL, "llClearCameraParams()\nResets all camera parameters to default values and turns off scripted camera control.")); 413 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llClearCameraParams", NULL, NULL, "llClearCameraParams()\nResets all camera parameters to default values and turns off scripted camera control."));
414 414
415 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llListStatistics", "f", "il", "float llListStatistics(integer operation, list l)\nPerform statistical aggregate functions on list l using LIST_STAT_* operations.")); 415 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llListStatistics", "f", "il", "float llListStatistics(integer operation, list l)\nPerform statistical aggregate functions on list l using LIST_STAT_* operations."));
416 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetUnixTime", "i", NULL, "integer llGetUnixTime()\nGet the number of seconds elapsed since 00:00 hours, Jan 1, 1970 UTC from the system clock.")); 416 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetUnixTime", "i", NULL, "integer llGetUnixTime()\nGet the number of seconds elapsed since 00:00 hours, Jan 1, 1970 UTC from the system clock."));
417 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetParcelFlags", "i", "v", "integer llGetParcelFlags(vector pos)\nGet the parcel flags (PARCEL_FLAG_*) for the parcel including the point pos.")); 417 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetParcelFlags", "i", "v", "integer llGetParcelFlags(vector pos)\nGet the parcel flags (PARCEL_FLAG_*) for the parcel including the point pos."));
@@ -433,7 +433,7 @@ void LLScriptLibrary::init()
433 addFunction(new LLScriptLibraryFunction(10.f, 0.2f, dummy_func, "llSetLinkPrimitiveParams", NULL, "il", "llSetLinkPrimitiveParams(integer linknumber, list rules)\nSet primitive parameters for linknumber based on rules.")); 433 addFunction(new LLScriptLibraryFunction(10.f, 0.2f, dummy_func, "llSetLinkPrimitiveParams", NULL, "il", "llSetLinkPrimitiveParams(integer linknumber, list rules)\nSet primitive parameters for linknumber based on rules."));
434 addFunction(new LLScriptLibraryFunction(10.f, 0.2f, dummy_func, "llSetLinkTexture", NULL, "isi", "llSetLinkTexture(integer link_pos, string texture, integer face)\nSets the texture of face for link_pos")); 434 addFunction(new LLScriptLibraryFunction(10.f, 0.2f, dummy_func, "llSetLinkTexture", NULL, "isi", "llSetLinkTexture(integer link_pos, string texture, integer face)\nSets the texture of face for link_pos"));
435 435
436 436
437 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llStringTrim", "s", "si", "string llStringTrim(string src, integer trim_type)\nTrim leading and/or trailing spaces from a string.\nUses trim_type of STRING_TRIM, STRING_TRIM_HEAD or STRING_TRIM_TAIL.")); 437 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llStringTrim", "s", "si", "string llStringTrim(string src, integer trim_type)\nTrim leading and/or trailing spaces from a string.\nUses trim_type of STRING_TRIM, STRING_TRIM_HEAD or STRING_TRIM_TAIL."));
438 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llRegionSay", NULL, "is", "llRegionSay(integer channel, string msg)\nbroadcasts msg to entire region on channel (not 0.)")); 438 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llRegionSay", NULL, "is", "llRegionSay(integer channel, string msg)\nbroadcasts msg to entire region on channel (not 0.)"));
439 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetObjectDetails", "l", "kl", "list llGetObjectDetails(key id, list params)\nGets the object details specified in params for the object with key id.\nDetails are OBJECT_NAME, _DESC, _POS, _ROT, _VELOCITY, _OWNER, _GROUP, _CREATOR.")); 439 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetObjectDetails", "l", "kl", "list llGetObjectDetails(key id, list params)\nGets the object details specified in params for the object with key id.\nDetails are OBJECT_NAME, _DESC, _POS, _ROT, _VELOCITY, _OWNER, _GROUP, _CREATOR."));
@@ -484,25 +484,25 @@ void LLScriptLibrary::init()
484 // documented and therefore the description may be incomplete and require further attention. 484 // documented and therefore the description may be incomplete and require further attention.
485 // OpenSimulator is written in C# and not CPP therefore some values for example "double = float" etc. are different. 485 // OpenSimulator is written in C# and not CPP therefore some values for example "double = float" etc. are different.
486 486
487 // OSSL corrections and syntax additions added + set in same order as found in OSSL_stub.cs of OpenSim Source (Updated PM October-21-2010 487 // OSSL corrections and syntax additions added + set in same order as found in OSSL_stub.cs of OpenSim Source (Updated PM October-21-2010
488 // based on OpenSimulator Ver. 0.7.x DEV/Master Git # a7acb650d400a280a7b9edabd304376dff9c81af - a7acb65-r/14142 488 // based on OpenSimulator Ver. 0.7.x DEV/Master Git # a7acb650d400a280a7b9edabd304376dff9c81af - a7acb65-r/14142
489 // Updates by WhiteStar Magic 489 // Updates by WhiteStar Magic
490 490
491 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetRegionWaterHeight", NULL, "f", "osSetRegionWaterHeight(float height)\nAdjusts Water Height on region.\n(OpenSim only.)")); 491 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetRegionWaterHeight", NULL, "f", "osSetRegionWaterHeight(float height)\nAdjusts Water Height on region.\n(OpenSim only.)"));
492 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetRegionSunSettings", NULL, "iif", "osSetRegionSunSettings(integer useEstateSun, integer sunFixed, float sunHour)\nChanges the Estate Sun Settings, then Triggers a Sun Update\n'sunFixed' TRUE (1) to keep the sun stationary, FALSE (0) to use global time\n'sunHour' The \"Sun Hour\" that is desired, 0...24, with 0 just after SunRise.\n(OpenSim only.)")); 492 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetRegionSunSettings", NULL, "iif", "osSetRegionSunSettings(integer useEstateSun, integer sunFixed, float sunHour)\nChanges the Estate Sun Settings, then Triggers a Sun Update\n'sunFixed' TRUE (1) to keep the sun stationary, FALSE (0) to use global time\n'sunHour' The \"Sun Hour\" that is desired, 0...24, with 0 just after SunRise.\n(OpenSim only.)"));
493 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetEstateSunSettings", NULL, "if", "osSetEstateSunSettings(integer sunFixed, float sunHour)\nsunFixed = 0 or 1, sunHour = 00.00 to 24.00.\n(OpenSim only.)")); 493 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetEstateSunSettings", NULL, "if", "osSetEstateSunSettings(integer sunFixed, float sunHour)\nsunFixed = 0 or 1, sunHour = 00.00 to 24.00.\n(OpenSim only.)"));
494 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osGetCurrentSunHour", "f", NULL, "float osGetCurrentSunHour()\nReturns Float Value of Current Sun Hour 0...24 0 = sunrise.\n(OpenSim only.)")); 494 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osGetCurrentSunHour", "f", NULL, "float osGetCurrentSunHour()\nReturns Float Value of Current Sun Hour 0...24 0 = sunrise.\n(OpenSim only.)"));
495 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSunGetParam","f", "s", "float osSunGetParam(string param)\nReturns current float values for param\nwhere param = day_length, year_length, day_night_offset, update_interval.\n(OpenSim only.)")); 495 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSunGetParam","f", "s", "float osSunGetParam(string param)\nReturns current float values for param\nwhere param = day_length, year_length, day_night_offset, update_interval.\n(OpenSim only.)"));
496 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSunSetParam", "sf", NULL, "osSunSetParam(string param, float value)\nSet's Sun Param for SunSet,\nosSunSetParam(day_length, 24.0)\nwhere param = day_length, year_length, day_night_offset, update_interval.\n(OpenSim only.)")); 496 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSunSetParam", "sf", NULL, "osSunSetParam(string param, float value)\nSet's Sun Param for SunSet,\nosSunSetParam(day_length, 24.0)\nwhere param = day_length, year_length, day_night_offset, update_interval.\n(OpenSim only.)"));
497 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osWindActiveModelPluginName", "s", NULL, "string osWindActiveModelPluginName()\nReturns the Current Working Wind Module Installed\nThese are SimpleRandomWind or ConfigurableWind, optionally others.\n(OpenSim only.)")); 497 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osWindActiveModelPluginName", "s", NULL, "string osWindActiveModelPluginName()\nReturns the Current Working Wind Module Installed\nThese are SimpleRandomWind or ConfigurableWind, optionally others.\n(OpenSim only.)"));
498 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osParcelJoin", NULL, "vv", "osParcelJoin(vector pos1, vector pos2))\nJoins Parcels @ X,Y coordinates.\n(OpenSim only.)")); 498 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osParcelJoin", NULL, "vv", "osParcelJoin(vector pos1, vector pos2))\nJoins Parcels @ X,Y coordinates.\n(OpenSim only.)"));
499 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osParcelSubdivide", NULL, "vv", "osParcelSubdivide(vector pos1, vector pos2))\nSubdivides Parcels @ X,Y coordinates.\n(OpenSim only.)")); 499 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osParcelSubdivide", NULL, "vv", "osParcelSubdivide(vector pos1, vector pos2))\nSubdivides Parcels @ X,Y coordinates.\n(OpenSim only.)"));
500 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osParcelSetDetails", NULL, "vv", "osParcelSetDetails(vector pos, list rules))\nSet Parcel details.\n(OpenSim only.)")); 500 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osParcelSetDetails", NULL, "vv", "osParcelSetDetails(vector pos, list rules))\nSet Parcel details.\n(OpenSim only.)"));
501 // addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osWindParamSet", NULL, "ssf", "osWindParamSet(string plugin, string param, float value)Send Param to Specified Wind Plugin with new value.\n(OpenSim only.)")); 501 // addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osWindParamSet", NULL, "ssf", "osWindParamSet(string plugin, string param, float value)Send Param to Specified Wind Plugin with new value.\n(OpenSim only.)"));
502 // addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osWindParamGet", "f", "ss", "float osWindParamGet(string plugin, string param)\n Returns Current param from specified Wind Plugin Module.\n(OpenSim only.)")); 502 // addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osWindParamGet", "f", "ss", "float osWindParamGet(string plugin, string param)\n Returns Current param from specified Wind Plugin Module.\n(OpenSim only.)"));
503 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osList2Double", "f", "si", "double osList2Double(list src, int index)\nReturns Double (float) Value from src at index.\n(OpenSim only.)")); 503 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osList2Double", "f", "si", "double osList2Double(list src, int index)\nReturns Double (float) Value from src at index.\n(OpenSim only.)"));
504 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetDynamicTextureURL", NULL, "ssssi", "osSetDynamicTextureURL(string dynamicID, string contentType, string url, string extraParams, int timer )\n(OpenSim only.)")); 504 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetDynamicTextureURL", NULL, "ssssi", "osSetDynamicTextureURL(string dynamicID, string contentType, string url, string extraParams, int timer )\n(OpenSim only.)"));
505 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetDynamicTextureData", NULL, "ssssi", "osSetDynamicTextureData(string dynamicID, string contentType, string data, string extraParams, int timer)\nWrites text and vector graphics onto a prim face.\n(OpenSim only.)")); 505 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetDynamicTextureData", NULL, "ssssi", "osSetDynamicTextureData(string dynamicID, string contentType, string data, string extraParams, int timer)\nWrites text and vector graphics onto a prim face.\n(OpenSim only.)"));
506 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetDynamicTextureURLBlend", NULL, "ssssii", "osSetDynamicTextureURLBlend(string dynamicID, string contentType, string url, string extraParams, int timer, int alpha)\n(OpenSim only.)")); 506 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetDynamicTextureURLBlend", NULL, "ssssii", "osSetDynamicTextureURLBlend(string dynamicID, string contentType, string url, string extraParams, int timer, int alpha)\n(OpenSim only.)"));
507 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetDynamicTextureDataBlend", NULL, "ssssii", "osSetDynamicTextureDataBlend(string dynamicID, string contentType, string data, string extraParams, int timer, int alpha)\n(OpenSim only.)")); 507 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetDynamicTextureDataBlend", NULL, "ssssii", "osSetDynamicTextureDataBlend(string dynamicID, string contentType, string data, string extraParams, int timer, int alpha)\n(OpenSim only.)"));
508 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetDynamicTextureURLBlendFace", NULL, "ssssfiiii", "osSetDynamicTextureURLBlendFace(string dynamicID, string contentType, string url, string extraParams, bool blend, int disp, int timer, int alpha, int face)\nLoads a web texture on a prim.\n(OpenSim only.)")); 508 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetDynamicTextureURLBlendFace", NULL, "ssssfiiii", "osSetDynamicTextureURLBlendFace(string dynamicID, string contentType, string url, string extraParams, bool blend, int disp, int timer, int alpha, int face)\nLoads a web texture on a prim.\n(OpenSim only.)"));
@@ -512,7 +512,7 @@ void LLScriptLibrary::init()
512 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osTerrainFlush", NULL, NULL, "osTerrainFlush()\nUpdates terrain data. Call this after you are done using osTerrainSetHeight.\n(OpenSim only.)")); 512 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osTerrainFlush", NULL, NULL, "osTerrainFlush()\nUpdates terrain data. Call this after you are done using osTerrainSetHeight.\n(OpenSim only.)"));
513 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osRegionRestart", NULL, "f", "int osRegionRestart(double seconds)\nRestart the current region in the specified number of seconds from now.\n(OpenSim only.)")); 513 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osRegionRestart", NULL, "f", "int osRegionRestart(double seconds)\nRestart the current region in the specified number of seconds from now.\n(OpenSim only.)"));
514 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osRegionNotice",NULL, "s", "osRegionNotice(string msg)\nBroadcasts a notification message to all agents on the current region.\n(OpenSim only.)")); 514 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osRegionNotice",NULL, "s", "osRegionNotice(string msg)\nBroadcasts a notification message to all agents on the current region.\n(OpenSim only.)"));
515 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osConsoleCommand", NULL, "s", "osConsoleCommand(string command)\nIssues commands directly to the OpenSim server console.\n(OpenSim only.)")); 515 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osConsoleCommand", NULL, "s", "osConsoleCommand(string command)\nIssues commands directly to the OpenSim server console.\n(OpenSim only.)"));
516 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetParcelMediaURL", NULL, "s", "osSetParcelMediaURL(string url)\nSets Parcel Media URL.\n(OpenSim only.)")); 516 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetParcelMediaURL", NULL, "s", "osSetParcelMediaURL(string url)\nSets Parcel Media URL.\n(OpenSim only.)"));
517 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetParcelSIPAddress", NULL, "s", "osSetParcelSIPAddress(string SIPAddress)\nSets Parcel SIP Address for Voice.\n(OpenSim only.)")); 517 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetParcelSIPAddress", NULL, "s", "osSetParcelSIPAddress(string SIPAddress)\nSets Parcel SIP Address for Voice.\n(OpenSim only.)"));
518 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetPrimFloatOnWater", NULL, "i", "osSetPrimFloatOnWater(int floatYN)\nMake Physical prims float at the water level, TRUE or FALSE.\n(OpenSim only.)")); 518 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetPrimFloatOnWater", NULL, "i", "osSetPrimFloatOnWater(int floatYN)\nMake Physical prims float at the water level, TRUE or FALSE.\n(OpenSim only.)"));
@@ -568,10 +568,10 @@ void LLScriptLibrary::init()
568 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetSpeed", NULL, "kf", "osSetSpeed(key AVATAR, float SpeedModifier)\nMultiplies the normal running, walking, and flying speed of the specified avatar.\n(OpenSim only.)")); 568 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetSpeed", NULL, "kf", "osSetSpeed(key AVATAR, float SpeedModifier)\nMultiplies the normal running, walking, and flying speed of the specified avatar.\n(OpenSim only.)"));
569 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osCauseDamage", NULL, "kf", "osCauseDamage(key AVATAR, float damage)\nCauses damage to specified AVATAR (UUID).\n(OpenSim only.)")); 569 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osCauseDamage", NULL, "kf", "osCauseDamage(key AVATAR, float damage)\nCauses damage to specified AVATAR (UUID).\n(OpenSim only.)"));
570 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osCauseHealing", NULL, "kf", "osCauseHealing(key AVATAR, float healing)\nCauses Healing to specified AVATAR (UUID).\n(OpenSim only.)")); 570 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osCauseHealing", NULL, "kf", "osCauseHealing(key AVATAR, float healing)\nCauses Healing to specified AVATAR (UUID).\n(OpenSim only.)"));
571 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osGetPrimitiveParams", "l", "kl", "List osGetPrimitiveParams(key prim, list rules)\nGets primitive Params.\n(OpenSim only.)")); 571 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osGetPrimitiveParams", "l", "kl", "List osGetPrimitiveParams(key prim, list rules)\nGets primitive Params.\n(OpenSim only.)"));
572 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetPrimitiveParams", NULL, "kl", "osSetPrimitiveParams(key prim, list rules)\nSets primitive Params.\n(OpenSim only.)")); 572 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetPrimitiveParams", NULL, "kl", "osSetPrimitiveParams(key prim, list rules)\nSets primitive Params.\n(OpenSim only.)"));
573 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetProjectionParams", NULL, "kikfff", "osSetProjectionParams(key prim. bool projection, key texture, float fov, float focus, float amb)\nSet Projection Paramaters (bool = true / false)\n(OpenSim only.)")); 573 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osSetProjectionParams", NULL, "kikfff", "osSetProjectionParams(key prim. bool projection, key texture, float fov, float focus, float amb)\nSet Projection Paramaters (bool = true / false)\n(OpenSim only.)"));
574 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osUnixTimeToTimestamp", "s", "i", "osUnixTimeToTimestamp(integer unixtime)\nConverts unixtime to an llGetTimeStamp() formated string.\n(OpenSim only.)")); 574 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "osUnixTimeToTimestamp", "s", "i", "osUnixTimeToTimestamp(integer unixtime)\nConverts unixtime to an llGetTimeStamp() formated string.\n(OpenSim only.)"));
575 575
576 // LightShare functions 576 // LightShare functions
577 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "cmSetWindlightScene", "i", "l", "integer cmSetWindlightScene(list rules)\nSet the current WindLight scene. Restricted to estate managers and owners only.")); 577 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "cmSetWindlightScene", "i", "l", "integer cmSetWindlightScene(list rules)\nSet the current WindLight scene. Restricted to estate managers and owners only."));
@@ -579,6 +579,7 @@ void LLScriptLibrary::init()
579 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "cmGetWindlightScene", "l", "l", "list cmGetWindlightScene(list rules)\nGet the current WindLight settings.")); 579 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "cmGetWindlightScene", "l", "l", "list cmGetWindlightScene(list rules)\nGet the current WindLight settings."));
580 // LightShare functions - alternate versions 580 // LightShare functions - alternate versions
581 // don't ask me why they renamed 'em, but we need to include both versions -- MC 581 // don't ask me why they renamed 'em, but we need to include both versions -- MC
582 // cm refers to a proprietary fork of OpenSim used by Meta 7 and Avination, they where renamed to ls when LightShare was released to the wild.
582 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "lsSetWindlightScene", "i", "l", "integer lsSetWindlightScene(list rules)\nSet the current WindLight scene. Restricted to estate managers and owners only.")); 583 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "lsSetWindlightScene", "i", "l", "integer lsSetWindlightScene(list rules)\nSet the current WindLight scene. Restricted to estate managers and owners only."));
583 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "lsSetWindlightSceneTargeted", "i", "lk", "integer lsSetWindlightSceneTargeted(list rules, key target)\nSet the current WindLight scene directed to a specific avatar. Restricted to estate managers and owners only.")); 584 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "lsSetWindlightSceneTargeted", "i", "lk", "integer lsSetWindlightSceneTargeted(list rules, key target)\nSet the current WindLight scene directed to a specific avatar. Restricted to estate managers and owners only."));
584 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "lsGetWindlightScene", "l", "l", "list lsGetWindlightScene(list rules)\nGet the current WindLight settings.")); 585 addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "lsGetWindlightScene", "l", "l", "list lsGetWindlightScene(list rules)\nGet the current WindLight settings."));
diff --git a/linden/indra/mac_crash_logger/CMakeLists.txt b/linden/indra/mac_crash_logger/CMakeLists.txt
index daf3e10..ee1dc93 100644
--- a/linden/indra/mac_crash_logger/CMakeLists.txt
+++ b/linden/indra/mac_crash_logger/CMakeLists.txt
@@ -71,6 +71,6 @@ add_custom_command(
71 -E 71 -E
72 copy_directory 72 copy_directory
73 ${CMAKE_CURRENT_SOURCE_DIR}/CrashReporter.nib 73 ${CMAKE_CURRENT_SOURCE_DIR}/CrashReporter.nib
74 ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/mac-crash-logger.app/Contents/Resources/CrashReporter.nib 74 ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/mac-crash-logger.app/Contents/Resources/CrashReporter.nib
75 ) 75 )
76 76
diff --git a/linden/indra/mac_updater/CMakeLists.txt b/linden/indra/mac_updater/CMakeLists.txt
index 0eac76f..5ae7dd8 100644
--- a/linden/indra/mac_updater/CMakeLists.txt
+++ b/linden/indra/mac_updater/CMakeLists.txt
@@ -74,6 +74,6 @@ add_custom_command(
74 -E 74 -E
75 copy_directory 75 copy_directory
76 ${CMAKE_CURRENT_SOURCE_DIR}/AutoUpdater.nib 76 ${CMAKE_CURRENT_SOURCE_DIR}/AutoUpdater.nib
77 ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/mac-updater.app/Contents/Resources/AutoUpdater.nib 77 ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/mac-updater.app/Contents/Resources/AutoUpdater.nib
78 ) 78 )
79 79
diff --git a/linden/indra/mac_updater/mac_updater.cpp b/linden/indra/mac_updater/mac_updater.cpp
index 43d9955..79783d3 100644
--- a/linden/indra/mac_updater/mac_updater.cpp
+++ b/linden/indra/mac_updater/mac_updater.cpp
@@ -68,8 +68,8 @@ EventHandlerRef gEventHandler = NULL;
68OSStatus gFailure = noErr; 68OSStatus gFailure = noErr;
69Boolean gCancelled = false; 69Boolean gCancelled = false;
70 70
71char *gUpdateURL; 71const char *gUpdateURL;
72char *gProductName; 72const char *gProductName;
73 73
74void *updatethreadproc(void*); 74void *updatethreadproc(void*);
75 75
@@ -1032,7 +1032,7 @@ void *updatethreadproc(void*)
1032 if(!mountOutput.empty()) 1032 if(!mountOutput.empty())
1033 { 1033 {
1034 const char *s = mountOutput.c_str(); 1034 const char *s = mountOutput.c_str();
1035 char *prefix = "/dev/"; 1035 const char *prefix = "/dev/";
1036 char *sub = strstr(s, prefix); 1036 char *sub = strstr(s, prefix);
1037 1037
1038 if(sub != NULL) 1038 if(sub != NULL)
diff --git a/linden/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp b/linden/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp
index e194bf7..49bf6f9 100755
--- a/linden/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp
+++ b/linden/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp
@@ -312,12 +312,9 @@ gst_slvideo_set_caps (GstBaseSink * bsink, GstCaps * caps)
312static gboolean 312static gboolean
313gst_slvideo_start (GstBaseSink * bsink) 313gst_slvideo_start (GstBaseSink * bsink)
314{ 314{
315 GstSLVideo *slvideo; 315 GST_SLVIDEO(bsink);
316 gboolean ret = TRUE;
317
318 slvideo = GST_SLVIDEO(bsink);
319 316
320 return ret; 317 return TRUE;
321} 318}
322 319
323static gboolean 320static gboolean
diff --git a/linden/indra/media_plugins/webkit/CMakeLists.txt b/linden/indra/media_plugins/webkit/CMakeLists.txt
index 303a774..f589c61 100644
--- a/linden/indra/media_plugins/webkit/CMakeLists.txt
+++ b/linden/indra/media_plugins/webkit/CMakeLists.txt
@@ -112,8 +112,8 @@ if (DARWIN)
112 # copy the webkit dylib to the build directory 112 # copy the webkit dylib to the build directory
113 add_custom_command( 113 add_custom_command(
114 TARGET media_plugin_webkit POST_BUILD 114 TARGET media_plugin_webkit POST_BUILD
115# OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/libllqtwebkit.dylib 115# OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/libllqtwebkit.dylib
116 COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/ 116 COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/
117 DEPENDS media_plugin_webkit ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib 117 DEPENDS media_plugin_webkit ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib
118 ) 118 )
119 119
diff --git a/linden/indra/newview/CMakeLists.txt b/linden/indra/newview/CMakeLists.txt
index ecbeb9b..7496546 100644
--- a/linden/indra/newview/CMakeLists.txt
+++ b/linden/indra/newview/CMakeLists.txt
@@ -126,7 +126,7 @@ set(viewer_SOURCE_FILES
126 jcfloaterareasearch.cpp 126 jcfloaterareasearch.cpp
127 kokuastreamingaudio.cpp 127 kokuastreamingaudio.cpp
128 kowopenregionsettings.cpp 128 kowopenregionsettings.cpp
129 lightshare.cpp 129 llettherebelight.cpp
130 llagent.cpp 130 llagent.cpp
131 llagentaccess.cpp 131 llagentaccess.cpp
132 llagentdata.cpp 132 llagentdata.cpp
@@ -308,6 +308,7 @@ set(viewer_SOURCE_FILES
308 llmaniprotate.cpp 308 llmaniprotate.cpp
309 llmanipscale.cpp 309 llmanipscale.cpp
310 llmaniptranslate.cpp 310 llmaniptranslate.cpp
311 llmediadataclient.cpp
311 llmapresponders.cpp 312 llmapresponders.cpp
312 llmediaremotectrl.cpp 313 llmediaremotectrl.cpp
313 llmemoryview.cpp 314 llmemoryview.cpp
@@ -537,16 +538,15 @@ set(viewer_SOURCE_FILES
537 slfloatermediafilter.cpp 538 slfloatermediafilter.cpp
538 viewerinfo.cpp 539 viewerinfo.cpp
539 viewertime.cpp 540 viewertime.cpp
540 windlightsettingsupdate.cpp
541 wlfloatermanager.cpp 541 wlfloatermanager.cpp
542 wlfloaterwindlightsend.cpp 542 wlfloaterwindlightsend.cpp
543 wlretrievesettings.cpp 543 wlretrievesettings.cpp
544 wlsettingsmanager.cpp
545# [/$PLOTR$] 544# [/$PLOTR$]
546 otr_wrapper.cpp 545 otr_wrapper.cpp
547 otr_floater_smp_dialog.cpp 546 otr_floater_smp_dialog.cpp
548 otr_floater_smp_progress.cpp 547 otr_floater_smp_progress.cpp
549# [/$PLOTR$] 548# [/$PLOTR$]
549 rcmoapradar.cpp
550 ) 550 )
551 551
552set(VIEWER_BINARY_NAME "meta-impy-bin" CACHE STRING 552set(VIEWER_BINARY_NAME "meta-impy-bin" CACHE STRING
@@ -570,7 +570,7 @@ set(viewer_HEADER_FILES
570 CMakeLists.txt 570 CMakeLists.txt
571 ViewerInstall.cmake 571 ViewerInstall.cmake
572 aoremotectrl.h 572 aoremotectrl.h
573 chatbar_as_cmdline.h 573 chatbar_as_cmdline.h
574 emeraldboobutils.h 574 emeraldboobutils.h
575 floaterao.h 575 floaterao.h
576 floaterbusy.h 576 floaterbusy.h
@@ -590,11 +590,11 @@ set(viewer_HEADER_FILES
590 jcfloater_animation_list.h 590 jcfloater_animation_list.h
591 jcfloaterareasearch.h 591 jcfloaterareasearch.h
592 kokuastreamingaudio.h 592 kokuastreamingaudio.h
593 lightshare.h 593 llettherebelight.h
594 lggautocorrectfloater.h 594 lggautocorrectfloater.h
595 lggautocorrect.h 595 lggautocorrect.h
596 lggdicdownload.h 596 lggdicdownload.h
597 lgghunspell_wrapper.h 597 lgghunspell_wrapper.h
598 llagent.h 598 llagent.h
599 llagentaccess.h 599 llagentaccess.h
600 llagentdata.h 600 llagentdata.h
@@ -777,6 +777,7 @@ set(viewer_HEADER_FILES
777 llmaniprotate.h 777 llmaniprotate.h
778 llmanipscale.h 778 llmanipscale.h
779 llmaniptranslate.h 779 llmaniptranslate.h
780 llmediadataclient.h
780 llmapresponders.h 781 llmapresponders.h
781 llmediaremotectrl.h 782 llmediaremotectrl.h
782 llmemoryview.h 783 llmemoryview.h
@@ -1020,12 +1021,12 @@ set(viewer_HEADER_FILES
1020 wlfloatermanager.h 1021 wlfloatermanager.h
1021 wlfloaterwindlightsend.h 1022 wlfloaterwindlightsend.h
1022 wlretrievesettings.h 1023 wlretrievesettings.h
1023 wlsettingsmanager.h
1024# [$PLOTR$] 1024# [$PLOTR$]
1025 otr_wrapper.h 1025 otr_wrapper.h
1026 otr_floater_smp_dialog.h 1026 otr_floater_smp_dialog.h
1027 otr_floater_smp_progress.h 1027 otr_floater_smp_progress.h
1028# [/$PLOTR$] 1028# [/$PLOTR$]
1029 rcmoapradar.h
1029 ) 1030 )
1030 1031
1031source_group("CMake Rules" FILES ViewerInstall.cmake) 1032source_group("CMake Rules" FILES ViewerInstall.cmake)
@@ -1373,7 +1374,7 @@ if (WINDOWS)
1373 1374
1374 # sets the 'working directory' for debugging from visual studio. 1375 # sets the 'working directory' for debugging from visual studio.
1375 if (NOT UNATTENDED) 1376 if (NOT UNATTENDED)
1376 if (NOT self.using_express) 1377 if (USE_VSTOOL)
1377 add_custom_command( 1378 add_custom_command(
1378 TARGET ${VIEWER_BINARY_NAME} PRE_BUILD 1379 TARGET ${VIEWER_BINARY_NAME} PRE_BUILD
1379 COMMAND ${CMAKE_SOURCE_DIR}/tools/vstool/vstool.exe 1380 COMMAND ${CMAKE_SOURCE_DIR}/tools/vstool/vstool.exe
@@ -1385,7 +1386,7 @@ if (WINDOWS)
1385 ${CMAKE_CURRENT_SOURCE_DIR} 1386 ${CMAKE_CURRENT_SOURCE_DIR}
1386 COMMENT "Setting the ${VIEWER_BINARY_NAME} working directory for debugging." 1387 COMMENT "Setting the ${VIEWER_BINARY_NAME} working directory for debugging."
1387 ) 1388 )
1388 endif (NOT self.using_express) 1389 endif (USE_VSTOOL)
1389 endif (NOT UNATTENDED) 1390 endif (NOT UNATTENDED)
1390 1391
1391 add_custom_command( 1392 add_custom_command(
@@ -1395,7 +1396,7 @@ if (WINDOWS)
1395 -E 1396 -E
1396 copy_if_different 1397 copy_if_different
1397 ${CMAKE_CURRENT_SOURCE_DIR}/../../scripts/messages/message_template.msg 1398 ${CMAKE_CURRENT_SOURCE_DIR}/../../scripts/messages/message_template.msg
1398 ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/app_settings/message_template.msg 1399 ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/app_settings/message_template.msg
1399 COMMENT "Copying message_template.msg to the runtime folder." 1400 COMMENT "Copying message_template.msg to the runtime folder."
1400 ) 1401 )
1401 1402
@@ -1406,7 +1407,7 @@ if (WINDOWS)
1406 -E 1407 -E
1407 copy_if_different 1408 copy_if_different
1408 ${CMAKE_CURRENT_SOURCE_DIR}/../../etc/message.xml 1409 ${CMAKE_CURRENT_SOURCE_DIR}/../../etc/message.xml
1409 ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/app_settings/message.xml 1410 ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/app_settings/message.xml
1410 COMMENT "Copying message.xml to the runtime folder." 1411 COMMENT "Copying message.xml to the runtime folder."
1411 ) 1412 )
1412 1413
@@ -1417,11 +1418,11 @@ if (WINDOWS)
1417 endif (EXISTS ${CMAKE_SOURCE_DIR}/copy_win_scripts) 1418 endif (EXISTS ${CMAKE_SOURCE_DIR}/copy_win_scripts)
1418 1419
1419 add_custom_command( 1420 add_custom_command(
1420 OUTPUT ${CMAKE_CFG_INTDIR}/touched.bat 1421 OUTPUT ${VIEWER_CFG_INTDIR}/touched.bat
1421 COMMAND ${PYTHON_EXECUTABLE} 1422 COMMAND ${PYTHON_EXECUTABLE}
1422 ARGS 1423 ARGS
1423 ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py 1424 ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
1424 --configuration=${CMAKE_CFG_INTDIR} 1425 --configuration=${VIEWER_CFG_INTDIR}
1425 --channel=${VIEWER_CHANNEL} 1426 --channel=${VIEWER_CHANNEL}
1426 --login_channel=${VIEWER_LOGIN_CHANNEL} 1427 --login_channel=${VIEWER_LOGIN_CHANNEL}
1427 --standalone=${STANDALONE} 1428 --standalone=${STANDALONE}
@@ -1430,15 +1431,15 @@ if (WINDOWS)
1430 --source=${CMAKE_CURRENT_SOURCE_DIR} 1431 --source=${CMAKE_CURRENT_SOURCE_DIR}
1431 --artwork=${ARTWORK_DIR} 1432 --artwork=${ARTWORK_DIR}
1432 --build=${CMAKE_CURRENT_BINARY_DIR} 1433 --build=${CMAKE_CURRENT_BINARY_DIR}
1433 --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/package 1434 --dest=${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/package
1434 --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/touched.bat 1435 --touch=${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/touched.bat
1435 DEPENDS ${VIEWER_BINARY_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py 1436 DEPENDS ${VIEWER_BINARY_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
1436 ) 1437 )
1437 1438
1438 add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_quicktime media_plugin_webkit media_plugin_gstreamer010) 1439 add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_quicktime media_plugin_webkit media_plugin_gstreamer010)
1439 1440
1440 if (PACKAGE) 1441 if (PACKAGE)
1441 add_custom_target(package ALL DEPENDS ${CMAKE_CFG_INTDIR}/touched.bat) 1442 add_custom_target(package ALL DEPENDS ${VIEWER_CFG_INTDIR}/touched.bat)
1442 add_dependencies(package windows-updater windows-crash-logger) 1443 add_dependencies(package windows-updater windows-crash-logger)
1443 endif (PACKAGE) 1444 endif (PACKAGE)
1444endif (WINDOWS) 1445endif (WINDOWS)
@@ -1590,8 +1591,8 @@ if (DARWIN)
1590 --artwork=${ARTWORK_DIR} 1591 --artwork=${ARTWORK_DIR}
1591 --build=${CMAKE_CURRENT_BINARY_DIR} 1592 --build=${CMAKE_CURRENT_BINARY_DIR}
1592 --buildtype=${CMAKE_BUILD_TYPE} 1593 --buildtype=${CMAKE_BUILD_TYPE}
1593 --configuration=${CMAKE_CFG_INTDIR} 1594 --configuration=${VIEWER_CFG_INTDIR}
1594 --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app 1595 --dest=${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/${product}.app
1595 --grid=${GRID} 1596 --grid=${GRID}
1596 --source=${CMAKE_CURRENT_SOURCE_DIR} 1597 --source=${CMAKE_CURRENT_SOURCE_DIR}
1597 --standalone=${STANDALONE} 1598 --standalone=${STANDALONE}
@@ -1622,8 +1623,8 @@ if (WINDOWS)
1622 -E 1623 -E
1623 copy_if_different 1624 copy_if_different
1624 ${BUILT_LLCOMMON} 1625 ${BUILT_LLCOMMON}
1625 ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR} 1626 ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}
1626 COMMENT "Copying llcommon.dll to the runtime folder." 1627 COMMENT "Copying llcommon.dll to the runtime folder ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}."
1627 ) 1628 )
1628 1629
1629 get_target_property(BUILT_SLPLUGIN SLPlugin LOCATION) 1630 get_target_property(BUILT_SLPLUGIN SLPlugin LOCATION)
@@ -1634,8 +1635,8 @@ if (WINDOWS)
1634 -E 1635 -E
1635 copy_if_different 1636 copy_if_different
1636 ${BUILT_SLPLUGIN} 1637 ${BUILT_SLPLUGIN}
1637 ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR} 1638 ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}
1638 COMMENT "Copying SLPlugin executable to the runtime folder." 1639 COMMENT "Copying SLPlugin executable to the runtime folder ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}."
1639 ) 1640 )
1640 1641
1641 get_target_property(BUILT_WEBKIT_PLUGIN media_plugin_webkit LOCATION) 1642 get_target_property(BUILT_WEBKIT_PLUGIN media_plugin_webkit LOCATION)
@@ -1646,8 +1647,8 @@ if (WINDOWS)
1646 -E 1647 -E
1647 copy_if_different 1648 copy_if_different
1648 ${BUILT_WEBKIT_PLUGIN} 1649 ${BUILT_WEBKIT_PLUGIN}
1649 ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin 1650 ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/llplugin
1650 COMMENT "Copying WebKit Plugin to the runtime folder." 1651 COMMENT "Copying WebKit Plugin to the runtime folder ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/llplugin."
1651 ) 1652 )
1652 1653
1653 get_target_property(BUILT_GSTREAMER_PLUGIN media_plugin_gstreamer010 LOCATION) 1654 get_target_property(BUILT_GSTREAMER_PLUGIN media_plugin_gstreamer010 LOCATION)
@@ -1658,8 +1659,8 @@ if (WINDOWS)
1658 -E 1659 -E
1659 copy_if_different 1660 copy_if_different
1660 ${BUILT_GSTREAMER_PLUGIN} 1661 ${BUILT_GSTREAMER_PLUGIN}
1661 ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin 1662 ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/llplugin
1662 COMMENT "Copying Gstreamer Plugin to the runtime folder." 1663 COMMENT "Copying Gstreamer Plugin to the runtime folder ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/llplugin."
1663 ) 1664 )
1664 1665
1665 get_target_property(BUILT_QUICKTIME_PLUGIN media_plugin_quicktime LOCATION) 1666 get_target_property(BUILT_QUICKTIME_PLUGIN media_plugin_quicktime LOCATION)
@@ -1670,13 +1671,13 @@ if (WINDOWS)
1670 -E 1671 -E
1671 copy_if_different 1672 copy_if_different
1672 ${BUILT_QUICKTIME_PLUGIN} 1673 ${BUILT_QUICKTIME_PLUGIN}
1673 ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin 1674 ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/llplugin
1674 COMMENT "Copying Quicktime Plugin to the runtime folder." 1675 COMMENT "Copying Quicktime Plugin to the runtime folder ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/llplugin."
1675 ) 1676 )
1676 1677
1677 # Copying the mime_types.xml file to app_settings 1678 # Copying the mime_types.xml file to app_settings
1678 set(mime_types_source "${CMAKE_SOURCE_DIR}/newview/skins/default/xui/en-us") 1679 set(mime_types_source "${CMAKE_SOURCE_DIR}/newview/skins/default/xui/en-us")
1679 set(mime_types_dest "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/app_settings") 1680 set(mime_types_dest "${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/app_settings")
1680 add_custom_command( 1681 add_custom_command(
1681 TARGET ${VIEWER_BINARY_NAME} POST_BUILD 1682 TARGET ${VIEWER_BINARY_NAME} POST_BUILD
1682 COMMAND ${CMAKE_COMMAND} 1683 COMMAND ${CMAKE_COMMAND}
@@ -1693,7 +1694,7 @@ endif (WINDOWS)
1693if (DARWIN) 1694if (DARWIN)
1694# Don't do this here -- it's taken care of by viewer_manifest.py 1695# Don't do this here -- it's taken care of by viewer_manifest.py
1695# add_custom_command(TARGET ${VIEWER_BINARY_NAME} POST_BUILD 1696# add_custom_command(TARGET ${VIEWER_BINARY_NAME} POST_BUILD
1696# COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin/ 1697# COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/llplugin/
1697# DEPENDS ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib 1698# DEPENDS ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib
1698# ) 1699# )
1699endif (DARWIN) 1700endif (DARWIN)
diff --git a/linden/indra/newview/app_settings/default_grids.xml b/linden/indra/newview/app_settings/default_grids.xml
index 8eaa0b2..7cf90c4 100644
--- a/linden/indra/newview/app_settings/default_grids.xml
+++ b/linden/indra/newview/app_settings/default_grids.xml
@@ -1,29 +1,83 @@
1<llsd> 1<llsd>
2 <array> 2 <array>
3 <map> 3 <map>
4 <key>default_grids_version</key><string>37</string> 4 <key>default_grids_version</key><string>39</string>
5 </map> 5 </map>
6 6
7 <!-- Local Host --> 7 <!-- 3rd Rock Grid -->
8 <map>
9 <key>gridname</key><string>3rd Rock Grid</string>
10 <key>gridnick</key><string>3rdRock</string>
11 <key>platform</key><string>OpenSim</string>
12 <key>about</key><string>http://3rdrockgrid.com/</string>
13 <key>help</key><string>http://3rdrockgrid.com/</string>
14 <key>helperuri</key><string>http://grid.3rdrockgrid.com/3rg_money/</string>
15 <key>loginuri</key><string>http://grid.3rdrockgrid.com:8002/</string>
16 <key>loginpage</key><string>http://3rdrockgrid.com/startpage.php</string>
17 <key>website</key><string>http://3rdrockgrid.com/</string>
18 <key>register</key><string>http://3rdrockgrid.com/</string>
19 <key>password</key><string>http://3rdrockgrid.com/</string>
20 <key>support</key><string>http://3rdrockgrid.com/</string>
21 <key>version</key><string>1</string>
22 </map>
23
24 <!-- Avination -->
25 <map>
26 <key>gridname</key><string>Avination</string>
27 <key>gridnick</key><string>Avination</string>
28 <key>platform</key><string>OpenSim</string>
29 <key>about</key><string>http://login.avination.net</string>
30 <key>helperuri</key><string>https://secure.3dhosting.de/</string>
31 <key>loginpage</key><string>https://www.avination.com/welcome.php</string>
32 <key>loginuri</key><string>https://login.avination.com</string>
33 <key>name</key><string>login.avination.net</string>
34 <key>password</key><string>https://www.avination.com/pwrecover.php</string>
35 <key>register</key><string>https://www.avination.com/join.php</string>
36 </map>
37
38 <!-- Craft (offspring of Cyberlandia) -->
39 <map>
40 <key>gridname</key><string>Craft - The Friendly World</string>
41 <key>gridnick</key><string>Craft</string>
42 <key>platform</key><string>OpenSim</string>
43 <key>about</key><string>http://www.craft-world.org/</string>
44 <key>loginuri</key><string>http://craft-world.org:8002/</string>
45 <key>loginpage</key><string>http://www.craft-world.org/loginscreen.php</string>
46 <key>helperuri</key><string>http://webapp.craft-world.org/economy/</string>
47 <key>website</key><string>http://www.craft-world.org/</string>
48 <key>register</key><string>http://craft-world.org:8002/wifi/user/account/</string>
49 <key>password</key><string>http://craft-world.org:8002/wifi/forgotpassword</string>
50 <key>version</key><string>0</string>
51 </map>
52
53 <!-- FrancoGrid -->
8 <map> 54 <map>
9 <key>gridnick</key><string>localhost</string> 55 <key>gridname</key><string>Metavers Francophone FrancoGrid</string>
10 <key>gridname</key><string>Local Host</string> 56 <key>gridnick</key><string>francogrid</string>
11 <key>platform</key><string>OpenSim</string> 57 <key>platform</key><string>OpenSim</string>
12 <key>loginuri</key><string>http://127.0.0.1:9000/</string> 58 <key>about</key><string>http://francogrid.org/</string>
13 <key>loginpage</key><string /> 59 <key>help</key><string>http://francogrid.org/aide</string>
14 <key>helperuri</key><string>http://127.0.0.1:9000/</string> 60 <key>helperuri</key><string>http://helper.main.francogrid.org/</string>
15 <key>version</key><string>1</string> 61 <key>loginpage</key><string>http://viewer.francogrid.org/</string>
62 <key>loginuri</key><string>http://login.francogrid.org/</string>
63 <key>name</key><string>login.francogrid.org</string>
64 <key>password</key><string>http://francogrid.org/user/password</string>
65 <key>register</key><string>http://francogrid.org/user/register</string>
16 </map> 66 </map>
17 67
18 <!-- GiantGrid --> 68 <!-- GiantGrid -->
19 <map> 69 <map>
20 <key>gridnick</key><string>giantgrid</string> 70 <key>gridname</key><string>GiantGrid</string>
21 <key>gridname</key><string>GiantGrid</string> 71 <key>gridnick</key><string>GiantGrid</string>
22 <key>platform</key><string>OpenSim</string> 72 <key>platform</key><string>OpenSim</string>
23 <key>loginuri</key><string>http://Gianttest.no-ip.biz:8002/</string> 73 <key>loginuri</key><string>http://giantgrid.no-ip.biz:8002/</string>
24 <key>loginpage</key><string>http://gianttest.no-ip.biz:80/gridsplash?method=login</string> 74 <key>loginpage</key><string>http://www.giantgrid.nl</string>
25 <key>helperuri</key><string>http://gianttest.no-ip.biz/giantmap/</string> 75 <key>helperuri</key><string>http://giantgrid.no-ip.biz/XoopCube/html/modules/xoopensim/helper/</string>
26 <key>version</key><string>0</string> 76 <key>website</key><string>http://www.giantgrid.nl</string>
77 <key>register</key><string>http://giantgrid.no-ip.biz:8002/wifi/user/account/</string>
78 <key>password</key><string>http://giantgrid.no-ip.biz:8002/wifi/forgotpassword</string>
79 <key>support</key><string>http://gianttest.no-ip.biz/ticket/</string>
80 <key>version</key><string>1</string>
27 </map> 81 </map>
28 82
29 <!-- Infinite Grid --> 83 <!-- Infinite Grid -->
@@ -32,59 +86,126 @@
32 <key>gridnick</key> <string>infinitegrid</string> 86 <key>gridnick</key> <string>infinitegrid</string>
33 <key>platform</key> <string>OpenSim</string> 87 <key>platform</key> <string>OpenSim</string>
34 <key>loginuri</key> <string>http://grid.infinitegrid.org:8002/</string> 88 <key>loginuri</key> <string>http://grid.infinitegrid.org:8002/</string>
35 <key>loginpage</key> <string>http://webfront.infinitegrid.org/loginscreen.php</string> 89 <key>loginpage</key> <string>http://www.infinitegrid.org/drupal/loginpage</string>
36 <key>helperuri</key> <string>http://www.infinitegrid.org/helper/</string> 90 <key>helperuri</key> <string>http://www.infinitegrid.org/opensim/helper/</string>
37 <key>password</key> <string>http://webfront.infinitegrid.org/</string> 91 <key>website</key> <string>http://www.infinitegrid.org/drupal/</string>
38 <key>register</key> <string>http://webfront.infinitegrid.org/</string> 92 <key>register</key> <string>http://www.infinitegrid.org/drupal/</string>
39 <key>support</key> <string>http://www.infinitegrid.org/help</string> 93 <key>password</key> <string>http://www.infinitegrid.org/drupal/</string>
40 <key>website</key> <string>http://www.infinitegrid.org/about/</string> 94 <key>support</key> <string>http://www.infinitegrid.org/drupla/Tags/help</string>
41 <key>search</key> <string>http://webi.metaverseink.com/</string>
42 <key>version</key> <string>0</string> 95 <key>version</key> <string>0</string>
43 </map> 96 </map>
44 97
45 <!-- Infinite Grid dev--> 98 <!-- InWorldz -->
46 <map> 99 <map>
47 <key>gridname</key> <string>Infinite Grid dev</string> 100 <key>gridname</key><string>InWorldz</string>
48 <key>gridnick</key> <string>infinitegriddev</string> 101 <key>gridnick</key><string>InWorldz</string>
49 <key>platform</key> <string>OpenSim</string> 102 <key>platform</key><string>OpenSim</string>
50 <key>loginuri</key> <string>http://grid.infinitegrid.org:8502/</string> 103 <key>about</key><string>http://inworldz.com/</string>
51 <key>loginpage</key> <string>http://www.infinitegrid.org/webdev/loginscreen.php</string> 104 <key>help</key><string>http://inworldz.com/faq.php</string>
52 <key>helperuri</key> <string>http://www.infinitegrid.org/webdev/helper/</string> 105 <key>loginuri</key><string>http://inworldz.com:8002/</string>
53 <key>password</key> <string>http://www.infinitegrid.org/webdev/</string> 106 <key>loginpage</key><string>http://inworldz.com/loginscreen.php</string>
54 <key>register</key> <string>http://www.infinitegrid.org/webdev/</string> 107 <key>helperuri</key><string>http://inworldz.com/</string>
55 <key>support</key> <string>http://www.infinitegrid.org/webdev/help</string> 108 <key>password</key><string>http://inworldz.com/</string>
56 <key>website</key> <string>http://www.infinitegrid.org/webdev/about/</string> 109 <key>register</key><string>http://inworldz.com/register.php</string>
57 <key>version</key> <string>0</string> 110 <key>support</key><string>http://inworldz.com/support.php</string>
111 <key>website</key><string>http://inworldz.com/</string>
112 <key>version</key><string>2</string>
58 </map> 113 </map>
59 114
60 <!-- InWorldz --> 115 <!-- Island Oasis -->
61 <map> 116 <map>
62 <key>gridname</key> <string>InWorldz</string> 117 <key>gridname</key><string>Island Oasis</string>
63 <key>gridnick</key> <string>inworldz</string> 118 <key>gridnick</key><string>IslandOasis</string>
64 <key>platform</key> <string>OpenSim</string> 119 <key>platform</key><string>OpenSim</string>
65 <key>loginuri</key> <string>http://inworldz.com:8002/</string> 120 <key>about</key><string>http://www.islandoasis.biz/GridStats.aspx</string>
66 <key>loginpage</key> <string>http://inworldz.com/loginscreen.php</string> 121 <key>help</key><string>http://www.islandoasis.biz/Support.aspx</string>
67 <key>helperuri</key> <string>http://inworldz.com/</string> 122 <key>helperuri</key><string>http://islandoasisgrid.biz:8020/OsCurrency/</string>
68 <key>password</key> <string>http://inworldz.com/loginerror.php?error=2</string> 123 <key>loginpage</key><string>http://www.islandoasis.biz/welcome.aspx</string>
69 <key>register</key> <string>http://inworldz.com/register.php</string> 124 <key>loginuri</key><string>http://islandoasisgrid.biz:8002/</string>
70 <key>support</key> <string>http://inworldz.com/support.php</string> 125 <key>name</key><string>islandoasisgrid.biz:8002</string>
71 <key>website</key> <string>http://inworldz.com/</string> 126 <key>password</key><string>http://www.islandoasis.biz/Login.aspx</string>
72 <key>version</key> <string>2</string> 127 <key>register</key><string>http://www.islandoasis.biz/verification.aspx</string>
73 </map> 128 </map>
129
130 <!-- Local Host -->
131 <map>
132 <key>gridname</key><string>LocalHost</string>
133 <key>gridnick</key><string>LocalHost</string>
134 <key>platform</key><string>OpenSim</string>
135 <key>loginuri</key><string>http://127.0.0.1:9000/</string>
136 <key>loginpage</key><string />
137 <key>helperuri</key><string>http://127.0.0.1:9000/</string>
138 <key>version</key><string>1</string>
139 </map>
140
141 <!-- local Sim-on-a-stick -->
142 <map>
143 <key>gridname</key><string>Sim-on-a-Stick</string>
144 <key>gridnick</key><string>SimOnAStick</string>
145 <key>loginpage</key><string>http://127.0.0.1:9100/wifi/welcome.html</string>
146 <key>loginuri</key><string>http://localhost:9100</string>
147 </map>
148
149 <!-- Metropolis Metaversum -->
150 <map>
151 <key>gridname</key><string>Metropolis Metaversum</string>
152 <key>gridnick</key><string>Metropolis</string>
153 <key>platform</key><string>OpenSim</string>
154 <key>about</key><string>http://www.hypergrid.org/metropolis/wiki</string>
155 <key>help</key><string>http://metropolis.hypergrid.org</string>
156 <key>helperuri</key><string>http://metropolis.hypergrid.org/currency/helper/</string>
157 <key>loginpage</key><string>http://metropolis.hypergrid.org</string>
158 <key>loginuri</key><string>http://hypergrid.org:8002/</string>
159 <key>name</key><string>hypergrid.org:8002</string>
160 <key>password</key><string>http://metropolis.hypergrid.org/oswi.php</string>
161 <key>register</key><string>http://www.hypergrid.org/metropolis/metro_rg.php</string>
162 </map>
163
164 <!-- New World Grid -->
165 <map>
166 <key>gridname</key><string>New World Grid</string>
167 <key>gridnick</key><string>newworldgrid</string>
168 <key>platform</key><string>OpenSim</string>
169 <key>loginuri</key><string>http://3d.newworldgrid.com:8002/</string>
170 <key>loginpage</key><string>http://www.newworldgrid.com/loginpage/</string>
171 <key>helperuri</key><string>http://3d.newworldgrid.com/services/helper/</string>
172 <key>website</key><string>http://www.newworldgrid.com/</string>
173 <key>support</key><string>http://www.newworldgrid.com/contact/</string>
174 <key>register</key><string>http://www.newworldgrid.com/virreacentral/redirect.php?page=register</string>
175 <key>password</key><string>http://www.newworldgrid.com/virreacentral/redirect.php?page=login</string>
176 <key>version</key><string>0</string>
177 </map>
178
179 <!-- ReactionGrid -->
180 <map>
181 <key>gridname</key><string>ReactionGrid</string>
182 <key>gridnick</key><string>ReactionGrid</string>
183 <key>platform</key><string>OpenSim</string>
184 <key>about</key><string>http://reactiongrid.com/Default.aspx</string>
185 <key>help</key><string>http://reactiongrid.com/Support.aspx</string>
186 <key>loginuri</key><string>http://reactiongrid.com:8008/</string>
187 <key>loginpage</key><string>http://gsquared.info/portal</string>
188 <key>helperuri</key><string>http://reactiongrid.com:9000/</string>
189 <key>website</key><string>http://reactiongrid.com/Default.aspx</string>
190 <key>support</key><string>http://reactiongrid.com/Support.aspx</string>
191 <key>register</key><string>http://reactiongrid.com/Register.aspx</string>
192 <key>password</key><string>http://www.reactiongrid.com/Support/PasswordReset.aspx</string>
193 <key>version</key><string>0</string>
194 </map>
74 195
75 <!-- ScienceSim --> 196 <!-- ScienceSim -->
76 <map> 197 <map>
77 <key>gridname</key> <string>IEEE/ACM ScienceSim Virtual World</string> 198 <key>gridname</key><string>IEEE/ACM ScienceSim Virtual World</string>
78 <key>gridnick</key> <string>sciencesim</string> 199 <key>gridnick</key><string>ScienceSim</string>
79 <key>platform</key> <string>OpenSim</string> 200 <key>platform</key><string>OpenSim</string>
80 <key>loginuri</key> <string>http://grid.sciencesim.com/</string> 201 <key>loginuri</key><string>http://grid.sciencesim.com/</string>
81 <key>loginpage</key> <string>http://island.sciencesim.com/scisim/loginscreen.php</string> 202 <key>loginpage</key><string>http://island.sciencesim.com/scisim/loginscreen.php</string>
82 <key>helperuri</key> <string></string> 203 <key>helperuri</key><string></string>
83 <key>password</key> <string>http://island.sciencesim.com/scisim</string> 204 <key>password</key><string>http://island.sciencesim.com/scisim</string>
84 <key>register</key> <string>http://island.sciencesim.com/scisim</string> 205 <key>register</key><string>http://island.sciencesim.com/scisim</string>
85 <key>support</key> <string>http://island.sciencesim.com/wiki</string> 206 <key>support</key><string>http://island.sciencesim.com/wiki</string>
86 <key>website</key> <string>http://island.sciencesim.com/about/</string> 207 <key>website</key><string>http://island.sciencesim.com/about/</string>
87 <key>version</key> <string>0</string> 208 <key>version</key><string>0</string>
88 </map> 209 </map>
89 210
90 <!-- Slackdog --> 211 <!-- Slackdog -->
@@ -103,94 +224,46 @@
103 <key>version</key> <string>0</string> 224 <key>version</key> <string>0</string>
104 </map> 225 </map>
105 226
106 <!-- Sim-World Grid --> 227 <!-- Virtual Highway -->
107 <map> 228 <map>
108 <key>gridname</key> <string>Sim-World rid</string> 229 <key>gridname</key><string>Virtual Highway</string>
109 <key>gridnick</key> <string>simworld</string> 230 <key>gridnick</key><string>VirtualHighway</string>
110 <key>platform</key> <string>OpenSim</string> 231 <key>platform</key><string>OpenSim</string>
111 <key>loginuri</key> <string>http://grid.sim-world.org:8003/</string> 232 <key>about</key><string>http://www.virtualhighway.us/about.php</string>
112 <key>loginpage</key> <string>http://grid.sim-world.org/home/loginscreen/</string> 233 <key>helperuri</key><string>http://www.virtualhighway.us/griddal/</string>
113 <key>helperuri</key> <string>http://grid.sim-world.org/home/gridservices07/</string> 234 <key>loginpage</key><string>http://www.virtualhighway.us/welcome.php</string>
114 <key>password</key> <string>http://www.sim-world.org/index.php/loginregister</string> 235 <key>loginuri</key><string>http://login.virtualhighway.us:8002/</string>
115 <key>register</key> <string>http://www.sim-world.org/index.php/loginregister</string> 236 <key>name</key><string>login.virtualhighway.us:8002</string>
116 <key>support</key> <string>http://www.sim-world.org/index.php/support/selfhelp</string> 237 <key>password</key><string>http://www.virtualhighway.us/users/lostPassword</string>
117 <key>website</key> <string>http://www.sim-world.org/</string> 238 <key>register</key><string>http://www.virtualhighway.us/users/register</string>
118 <key>search</key> <string>http://www.sim-world.org/</string>
119 <key>version</key> <string>0</string>
120 </map> 239 </map>
121 240
122 <!-- ReactionGrid --> 241 <!-- virtyou -->
123 <map>
124 <key>gridnick</key><string>reactiongrid</string>
125 <key>gridname</key><string>ReactionGrid</string>
126 <key>platform</key><string>OpenSim</string>
127 <key>loginuri</key><string>http://reactiongrid.com:8008/</string>
128 <key>loginpage</key><string>http://gsquared.info/portal</string>
129 <key>website</key><string>http://reactiongrid.com/Default.aspx</string>
130 <key>support</key><string>http://reactiongrid.com/Support.aspx</string>
131 <key>register</key><string>http://reactiongrid.com/Register.aspx</string>
132 <key>password</key><string>http://reactiongrid.com/Support/ResetPassword.aspx</string>
133 <key>version</key><string>0</string>
134 </map>
135
136 <!-- Role Play Worlds -->
137 <map>
138 <key>gridnick</key><string>roleplayworlds</string>
139 <key>gridname</key><string>Role Play Worlds</string>
140 <key>platform</key><string>OpenSim</string>
141 <key>loginuri</key><string>http://grid.roleplayworlds.net:8002/</string>
142 <key>loginpage</key><string>http://roleplayworlds.net/loginscreen</string>
143 <key>helperuri</key><string>http://grid.roleplayworlds.net/</string>
144 <key>website</key><string>http://roleplayworlds.net/</string>
145 <key>support</key><string>http://roleplayworlds.net/help</string>
146 <key>register</key><string>http://roleplayworlds.net/register</string>
147 <key>password</key><string>http://roleplayworlds.net/password</string>
148 <key>version</key><string>1</string>
149 </map>
150
151 <!-- The New World Grid -->
152 <map>
153 <key>gridnick</key><string>thenewworldgrid</string>
154 <key>gridname</key><string>The New World Grid</string>
155 <key>platform</key><string>OpenSim</string>
156 <key>loginuri</key><string>http://giantgrid.no-ip.biz:8002/</string>
157 <key>loginpage</key><string>http://www.giantgrid.nl</string>
158 <key>helperuri</key><string>http://giantgrid.no-ip.biz/XoopCube/html/modules/xoopensim/helper/</string>
159 <key>website</key><string>http://www.giantgrid.nl</string>
160 <key>register</key><string>http://giantgrid.no-ip.biz:8002/wifi/user/account/</string>
161 <key>password</key><string>http://giantgrid.no-ip.biz:8002/wifi/forgotpassword</string>
162 <key>support</key><string>http://gianttest.no-ip.biz/ticket/</string>
163 <key>version</key><string>1</string>
164 </map>
165
166 <!-- 3rd Rock Grid -->
167 <map> 242 <map>
168 <key>gridnick</key><string>3rdrock</string> 243 <key>gridname</key><string>virtyou MainGrid</string>
169 <key>gridname</key><string>3rd Rock Grid</string> 244 <key>gridnick</key><string>virtyou</string>
170 <key>platform</key><string>OpenSim</string> 245 <key>platform</key><string>OpenSim</string>
171 <key>loginuri</key><string>http://grid.3rdrockgrid.com:8002/</string> 246 <key>help</key><string>http://virtyou.com/q/howto/</string>
172 <key>loginpage</key><string>http://3rdrockgrid.com/startpage.php</string> 247 <key>loginpage</key><string>http://virtyou.com/welcome/</string>
173 <key>helperuri</key><string>http://grid.3rdrockgrid.com/money/</string> 248 <key>loginuri</key><string>http://go.virtyou.com</string>
174 <key>website</key><string>http://3rdrockgrid.com/</string> 249 <key>password</key><string>http://virtyou.com/user/forgotten.html</string>
175 <key>register</key><string>http://3rdrockgrid.com/</string> 250 <key>register</key><string>http://virtyou.com/user/</string>
176 <key>password</key><string>http://3rdrockgrid.com/</string>
177 <key>support</key><string>http://3rdrockgrid.com/</string>
178 <key>version</key><string>1</string>
179 </map> 251 </map>
180 252
181 <!-- Your Alternative Life --> 253 <!-- Your Alternative Life -->
182 <map> 254 <map>
183 <key>gridnick</key><string>youralternativelife</string> 255 <key>gridname</key><string>Your Alternative Life</string>
184 <key>gridname</key><string>Your Alternative Life</string> 256 <key>gridnick</key><string>YourAlternativeLife</string>
185 <key>platform</key><string>OpenSim</string> 257 <key>platform</key><string>OpenSim</string>
186 <key>loginuri</key><string>http://grid01.from-ne.com:8002/</string> 258 <key>about</key><string>http://www.youralternativelife.com</string>
187 <key>loginpage</key><string>http://grid01.from-ne.com/tios/loginscreen3.php</string> 259 <key>loginuri</key><string>http://grid01.from-ne.com:8002/</string>
188 <key>helperuri</key><string>http://grid01.from-ne.com/tios/services/</string> 260 <key>loginpage</key><string>http://grid01.from-ne.com/tios/loginscreen3.php</string>
189 <key>website</key><string>http://www.youralternativelife.com</string> 261 <key>helperuri</key><string>http://grid01.from-ne.com/tios/services/</string>
190 <key>support</key><string>http://www.youralternativelife.com</string> 262 <key>website</key><string>http://www.youralternativelife.com</string>
191 <key>register</key><string>http://www.youralternativelife.com</string> 263 <key>support</key><string>http://www.youralternativelife.com</string>
192 <key>password</key><string>http://www.youralternativelife.com</string> 264 <key>register</key><string>http://www.youralternativelife.com</string>
193 <key>version</key><string>0</string> 265 <key>password</key><string>http://www.youralternativelife.com</string>
266 <key>version</key><string>0</string>
194 </map> 267 </map>
195 268
196 </array> 269 </array>
diff --git a/linden/indra/newview/app_settings/settings.xml b/linden/indra/newview/app_settings/settings.xml
index e701c3e..5534ecc 100644
--- a/linden/indra/newview/app_settings/settings.xml
+++ b/linden/indra/newview/app_settings/settings.xml
@@ -2,6 +2,123 @@
2<llsd> 2<llsd>
3<map> 3<map>
4 4
5 <!-- begin RC hacking -->
6 <key>PrimMediaMasterEnabled</key>
7 <map>
8 <key>Comment</key>
9 <string>Whether or not Media on a Prim is enabled.</string>
10 <key>Persist</key>
11 <integer>1</integer>
12 <key>Type</key>
13 <string>Boolean</string>
14 <key>Value</key>
15 <integer>1</integer>
16 </map>
17 <key>PrimMediaMaxRetries</key>
18 <map>
19 <key>Comment</key>
20 <string>Maximum number of retries for media queries.</string>
21 <key>Persist</key>
22 <integer>1</integer>
23 <key>Type</key>
24 <string>U32</string>
25 <key>Value</key>
26 <integer>4</integer>
27 </map>
28 <key>PrimMediaRequestQueueDelay</key>
29 <map>
30 <key>Comment</key>
31 <string>Timer delay for fetching media from the queue (in seconds).</string>
32 <key>Persist</key>
33 <integer>1</integer>
34 <key>Type</key>
35 <string>F32</string>
36 <key>Value</key>
37 <real>1.0</real>
38 </map>
39 <key>PrimMediaRetryTimerDelay</key>
40 <map>
41 <key>Comment</key>
42 <string>Timer delay for retrying on media queries (in seconds).</string>
43 <key>Persist</key>
44 <integer>1</integer>
45 <key>Type</key>
46 <string>F32</string>
47 <key>Value</key>
48 <real>5.0</real>
49 </map>
50 <key>PrimMediaMaxSortedQueueSize</key>
51 <map>
52 <key>Comment</key>
53 <string>Maximum number of objects the viewer will load media for initially</string>
54 <key>Persist</key>
55 <integer>1</integer>
56 <key>Type</key>
57 <string>U32</string>
58 <key>Value</key>
59 <integer>100000</integer>
60 </map>
61 <key>PrimMediaMaxRoundRobinQueueSize</key>
62 <map>
63 <key>Comment</key>
64 <string>Maximum number of objects the viewer will continuously update media for</string>
65 <key>Persist</key>
66 <integer>1</integer>
67 <key>Type</key>
68 <string>U32</string>
69 <key>Value</key>
70 <integer>100000</integer>
71 </map>
72 <key>ShowMOAPRadar</key>
73 <map>
74 <key>Comment</key>
75 <string>Show the MOAP radar</string>
76 <key>Persist</key>
77 <integer>1</integer>
78 <key>Type</key>
79 <string>Boolean</string>
80 <key>Value</key>
81 <integer>0</integer>
82 </map>
83 <key>FloaterMOAPRadarRect</key>
84 <map>
85 <key>Comment</key>
86 <string>Rectangle for MOAP Radar</string>
87 <key>Persist</key>
88 <integer>1</integer>
89 <key>Type</key>
90 <string>Rect</string>
91 <key>Value</key>
92 <array>
93 <integer>0</integer>
94 <integer>400</integer>
95 <integer>200</integer>
96 <integer>0</integer>
97 </array>
98 </map>
99 <key>MOAPRadarKeepOpen</key>
100 <map>
101 <key>Comment</key>
102 <string>Keeps MOAP radar updates running in background</string>
103 <key>Persist</key>
104 <integer>1</integer>
105 <key>Type</key>
106 <string>Boolean</string>
107 <key>Value</key>
108 <integer>0</integer>
109 </map>
110 <key>MOAPRadarUpdateRate</key>
111 <map>
112 <key>Comment</key>
113 <string>MOAP Radar update rate (0 = high, 1 = medium, 2 = low)</string>
114 <key>Persist</key>
115 <integer>1</integer>
116 <key>Type</key>
117 <string>U32</string>
118 <key>Value</key>
119 <integer>1</integer>
120 </map>
121
5 <!-- BEGIN IMPRUDENCE-SPECIFIC SETTINGS --> 122 <!-- BEGIN IMPRUDENCE-SPECIFIC SETTINGS -->
6 123
7 <!-- begin Aurora-specific settings --> 124 <!-- begin Aurora-specific settings -->
@@ -14694,6 +14811,17 @@
14694 <real>1.0</real> 14811 <real>1.0</real>
14695 </array> 14812 </array>
14696 </map> 14813 </map>
14814 <key>moapbeacon</key>
14815 <map>
14816 <key>Comment</key>
14817 <string>Beacon / Highlight MOAP sources</string>
14818 <key>Persist</key>
14819 <integer>1</integer>
14820 <key>Type</key>
14821 <string>Boolean</string>
14822 <key>Value</key>
14823 <integer>0</integer>
14824 </map>
14697 <key>particlesbeacon</key> 14825 <key>particlesbeacon</key>
14698 <map> 14826 <map>
14699 <key>Comment</key> 14827 <key>Comment</key>
diff --git a/linden/indra/newview/chatbar_as_cmdline.cpp b/linden/indra/newview/chatbar_as_cmdline.cpp
index 9777114..e1314f7 100644
--- a/linden/indra/newview/chatbar_as_cmdline.cpp
+++ b/linden/indra/newview/chatbar_as_cmdline.cpp
@@ -302,7 +302,6 @@ bool cmd_line_chat(std::string revised_text, EChatType type)
302 { 302 {
303 if (i >> z) 303 if (i >> z)
304 { 304 {
305 LLVector3 agentPos = gAgent.getPositionAgent();
306 LLViewerRegion* agentRegionp = gAgent.getRegion(); 305 LLViewerRegion* agentRegionp = gAgent.getRegion();
307 if(agentRegionp) 306 if(agentRegionp)
308 { 307 {
diff --git a/linden/indra/newview/floaterotr.cpp b/linden/indra/newview/floaterotr.cpp
index a655fd7..4c78d4c 100644
--- a/linden/indra/newview/floaterotr.cpp
+++ b/linden/indra/newview/floaterotr.cpp
@@ -54,7 +54,7 @@ BOOL FloaterOTR::postBuild()
54 childSetAction("btn_cancel", onClickCancel, this); 54 childSetAction("btn_cancel", onClickCancel, this);
55 55
56 childSetValue("EmeraldUseOTR", LLSD((S32)gSavedSettings.getU32("EmeraldUseOTR"))); 56 childSetValue("EmeraldUseOTR", LLSD((S32)gSavedSettings.getU32("EmeraldUseOTR")));
57 childSetValue("EmeraldUseOTRInTypingStop", gSavedSettings.getBOOL("EmeraldUseOTRInTypingStop")); 57 childSetValue("EmeraldOTRInTypingStop", gSavedSettings.getBOOL("EmeraldOTRInTypingStop"));
58 getChild<LLButton>("otr_help_btn")->setClickedCallback(onClickOtrHelp, this); 58 getChild<LLButton>("otr_help_btn")->setClickedCallback(onClickOtrHelp, this);
59 59
60 return TRUE; 60 return TRUE;
@@ -89,7 +89,7 @@ void FloaterOTR::apply()
89 U32 otrpref = childGetValue("EmeraldUseOTR").asReal(); 89 U32 otrpref = childGetValue("EmeraldUseOTR").asReal();
90 90
91 gSavedSettings.setU32("EmeraldUseOTR", otrpref); 91 gSavedSettings.setU32("EmeraldUseOTR", otrpref);
92 gSavedSettings.setBOOL("EmeraldUseOTRInTypingStop", childGetValue("EmeraldUseOTRInTypingStop").asBoolean()); 92 gSavedSettings.setBOOL("EmeraldOTRInTypingStop", childGetValue("EmeraldOTRInTypingStop").asBoolean());
93 // otrpref: 0 == Require OTR, 1 == Request OTR, 2 == Accept OTR, 3 == Decline OTR 93 // otrpref: 0 == Require OTR, 1 == Request OTR, 2 == Accept OTR, 3 == Decline OTR
94 if (3 == otrpref) 94 if (3 == otrpref)
95 OTR_Wrapper::stopAll(); 95 OTR_Wrapper::stopAll();
diff --git a/linden/indra/newview/hippogridmanager.cpp b/linden/indra/newview/hippogridmanager.cpp
index 4c46d3e..11b144e 100644
--- a/linden/indra/newview/hippogridmanager.cpp
+++ b/linden/indra/newview/hippogridmanager.cpp
@@ -49,9 +49,10 @@
49#include "llviewernetwork.h" // gMacAddress 49#include "llviewernetwork.h" // gMacAddress
50#include "llweb.h" 50#include "llweb.h"
51#include "llxorcipher.h" // saved password, MAC address 51#include "llxorcipher.h" // saved password, MAC address
52#include "llblowfishcipher.h"
52 53
53#include "hipporestrequest.h" 54#include "hipporestrequest.h"
54 55#include <boost/algorithm/string.hpp>
55 56
56// ******************************************************************** 57// ********************************************************************
57// Global Variables 58// Global Variables
@@ -87,6 +88,7 @@ HippoGridInfo::HippoGridInfo(const std::string& gridNick) :
87 mFirstName(LLStringUtil::null), 88 mFirstName(LLStringUtil::null),
88 mLastName(LLStringUtil::null), 89 mLastName(LLStringUtil::null),
89 mPasswordAvatar(LLStringUtil::null), 90 mPasswordAvatar(LLStringUtil::null),
91 mEncryptedPassword(LLStringUtil::null),
90 mXmlState(XML_VOID), 92 mXmlState(XML_VOID),
91 mVoiceConnector("SLVoice"), 93 mVoiceConnector("SLVoice"),
92 mRenderCompat(false), 94 mRenderCompat(false),
@@ -101,9 +103,27 @@ HippoGridInfo::HippoGridInfo(const std::string& gridNick) :
101 mGridNick = sanitizeGridNick(nick); 103 mGridNick = sanitizeGridNick(nick);
102} 104}
103 105
106// Check if this really is a SecondLife grid, to prevent cheating.
107void HippoGridInfo::checkLoginURIforSecondLifeness()
108{
109 LLURI loginURI(mLoginURI);
110 std::string host = loginURI.hostName();
111 size_t found;
112
113 boost::algorithm::to_lower(host);
114
115 found = host.rfind("lindenlab.com");
116 if ((found + 13) == host.size())
117 mPlatform = PLATFORM_SECONDLIFE;
118 found = host.rfind("secondlife.com");
119 if ((found + 14) == host.size())
120 mPlatform = PLATFORM_SECONDLIFE;
121}
122
104void HippoGridInfo::setPlatform(Platform platform) 123void HippoGridInfo::setPlatform(Platform platform)
105{ 124{
106 mPlatform = platform; 125 mPlatform = platform;
126 checkLoginURIforSecondLifeness();
107 if (mPlatform == PLATFORM_SECONDLIFE) 127 if (mPlatform == PLATFORM_SECONDLIFE)
108 { 128 {
109 mCurrencySymbol = "L$"; 129 mCurrencySymbol = "L$";
@@ -136,6 +156,7 @@ void HippoGridInfo::setLoginURI(const std::string& loginURI)
136{ 156{
137 std::string uri = loginURI; 157 std::string uri = loginURI;
138 mLoginURI = sanitizeURI(uri); 158 mLoginURI = sanitizeURI(uri);
159 checkLoginURIforSecondLifeness();
139} 160}
140 161
141void HippoGridInfo::setHelperURI(const std::string& helperURI) 162void HippoGridInfo::setHelperURI(const std::string& helperURI)
@@ -404,12 +425,115 @@ void HippoGridInfo::formatFee(std::string &fee, S32 cost, bool showFree) const
404 } 425 }
405} 426}
406 427
428const S32 HASHED_LENGTH = 32;
429
430void HippoGridInfo::setEncryptedPassword(const std::string& encrypted_password)
431{
432 int i;
433 LLBlowfishCipher cipher(gMACAddress, 6);
434 size_t encrypted_size = cipher.requiredEncryptionSpace(HASHED_LENGTH);
435
436 if (encrypted_password.empty())
437 {
438 // Check if we have a password hash to encrypt.
439 if (mPasswordAvatar.empty())
440 mEncryptedPassword = "";
441 else
442 {
443 // In theory, this is used to convert old style Imprudence 1.4 beta 2 and earlier passwords.
444 // Encipher with MAC address
445 char out[HASHED_LENGTH * 2 + 1];
446
447/* indra/llmessage/llmail.cpp says "blowfish-not-supported-on-windows", but we shall see.
448#if LL_WINDOWS
449 LLXORCipher cipherX(gMACAddress, 6);
450 cipherX.encrypt(mPasswordAvatar.c_str(), HASHED_LENGTH);
451#else
452*/
453 U8* encrypted = new U8[encrypted_size];
454 U8* password = (U8 *) mPasswordAvatar.c_str();
455
456 cipher.encrypt(password, HASHED_LENGTH, encrypted, HASHED_LENGTH);
457 for (i = 0; i < HASHED_LENGTH; i++)
458 {
459 sprintf(out + i * 2, "%02x", encrypted[i]);
460 }
461 out[HASHED_LENGTH * 2]='\0';
462 mEncryptedPassword.assign(out);
463 }
464
465 return;
466 }
467
468 if (encrypted_password == mEncryptedPassword)
469 {
470 return;
471 }
472
473 // Max "actual" password length is 16 characters.
474 // Hex digests are always 32 characters.
475 // Encrypted passwords stored as hex digits are 64 characters.
476 if (encrypted_password.length() == (HASHED_LENGTH * 2))
477 {
478 // This is actually encrypted, as found in the grids file.
479 mEncryptedPassword.assign(encrypted_password);
480 }
481 else
482 {
483 // Should never happen, this is only called from the file reading bit.
484 llwarns << "Encrypted password corrupted." << llendl;
485 return;
486 }
487
488 std::string hashed_password("");
489
490 // Decrypt it for the password hash.
491 // Decipher with MAC address
492 U8 buffer[HASHED_LENGTH + 1];
493 char in[HASHED_LENGTH * 2 + 1];
494
495 LLStringUtil::copy(in, mEncryptedPassword.c_str(), HASHED_LENGTH * 2 + 1);
496/* indra/llmessage/llmail.cpp says "blowfish-not-supported-on-windows", but we shall see.
497#if LL_WINDOWS
498 for (i = 0; i < HASHED_LENGTH; i++)
499 {
500 sscanf(in + i * 2, "%2hhx", &buffer[i]);
501 }
502 // Note that an XOR "cipher" is a lousy one when the secret is repeated several times like it is here.
503 LLXORCipher cipher(gMACAddress, 6);
504 cipher.decrypt(buffer, HASHED_LENGTH);
505#else
506*/
507 U8* encrypted = new U8[encrypted_size];
508 for (i = 0; i < HASHED_LENGTH; i++)
509 {
510 sscanf(in + i * 2, "%2hhx", &encrypted[i]);
511 }
512 // Not sure why, but this prints a warning saying it failed, even though it works. Which does not matter that much, we don't use the return value anyway.
513 cipher.decrypt(encrypted, HASHED_LENGTH, buffer, HASHED_LENGTH);
514 buffer[HASHED_LENGTH] = '\0';
515
516 // Check to see if the mac address generated a bad hashed
517 // password. It should be a hex-string or else the mac adress has
518 // changed. This is a security feature to make sure that if you
519 // get someone's grid_info.xml file, you cannot hack their account.
520 // This is a lousy way to check.
521 if (is_hex_string(buffer, HASHED_LENGTH))
522 {
523 hashed_password.assign((char*)buffer);
524 }
525
526 mPasswordAvatar.assign(hashed_password);
527}
407 528
408void HippoGridInfo::setPassword(const std::string& unhashed_password) 529void HippoGridInfo::setPassword(const std::string& unhashed_password)
409{ 530{
531 int i;
532
410 if (unhashed_password.empty()) 533 if (unhashed_password.empty())
411 { 534 {
412 mPasswordAvatar = ""; 535 mPasswordAvatar = "";
536 mEncryptedPassword = "";
413 return; 537 return;
414 } 538 }
415 539
@@ -435,59 +559,38 @@ void HippoGridInfo::setPassword(const std::string& unhashed_password)
435 hashed_password = munged_password; 559 hashed_password = munged_password;
436 } 560 }
437 561
438 // need to fix the bug in this 562 // Encrypt it for storing in the grids file.
439 /*
440
441 // Encipher with MAC address 563 // Encipher with MAC address
442 const S32 HASHED_LENGTH = 32; 564 char out[HASHED_LENGTH * 2 + 1];
443 U8 buffer[HASHED_LENGTH+1];
444
445 LLStringUtil::copy((char*)buffer, hashed_password.c_str(), HASHED_LENGTH+1);
446 565
447 LLXORCipher cipher(gMACAddress, 6); 566/* indra/llmessage/llmail.cpp says "blowfish-not-supported-on-windows", but we shall see.
448 cipher.encrypt(buffer, HASHED_LENGTH); 567#if LL_WINDOWS
568 LLXORCipher cipherX(gMACAddress, 6);
569 cipherX.encrypt(hashed_password.c_str(), HASHED_LENGTH);
570#else
571*/
572 LLBlowfishCipher cipher(gMACAddress, 6);
573 size_t encrypted_size = cipher.requiredEncryptionSpace(HASHED_LENGTH);
574 U8* encrypted = new U8[encrypted_size];
575 U8* password = (U8 *) hashed_password.c_str();
449 576
450 mPasswordAvatar.assign((char*)buffer); 577 cipher.encrypt(password, HASHED_LENGTH, encrypted, HASHED_LENGTH);
451 */ 578 for (i = 0; i < HASHED_LENGTH; i++)
579 {
580 sprintf(out + i * 2, "%02x", encrypted[i]);
581 }
582 out[HASHED_LENGTH * 2]='\0';
583 mEncryptedPassword.assign(out);
452 mPasswordAvatar.assign(hashed_password); 584 mPasswordAvatar.assign(hashed_password);
453} 585}
454 586
587std::string HippoGridInfo::getEncryptedPassword() const
588{
589 return mEncryptedPassword;
590}
455 591
456std::string HippoGridInfo::getPassword() const 592std::string HippoGridInfo::getPassword() const
457{ 593{
458 // need to fix the bug in this
459 /*
460 if (mPasswordAvatar.empty() || mPasswordAvatar.length() == 32)
461 {
462 return mPasswordAvatar;
463 }
464
465 std::string hashed_password("");
466
467 // UUID is 16 bytes, written into ASCII is 32 characters
468 // without trailing \0
469 const S32 HASHED_LENGTH = 32;
470 U8 buffer[HASHED_LENGTH+1];
471
472 LLStringUtil::copy((char*)buffer, mPasswordAvatar.c_str(), HASHED_LENGTH+1);
473
474 // Decipher with MAC address
475 LLXORCipher cipher(gMACAddress, 6);
476 cipher.decrypt(buffer, HASHED_LENGTH);
477
478 buffer[HASHED_LENGTH] = '\0';
479
480 // Check to see if the mac address generated a bad hashed
481 // password. It should be a hex-string or else the mac adress has
482 // changed. This is a security feature to make sure that if you
483 // get someone's grid_info.xml file, you cannot hack their account.
484 if (is_hex_string(buffer, HASHED_LENGTH))
485 {
486 hashed_password.assign((char*)buffer);
487 }
488
489 return hashed_password;
490 */
491 return mPasswordAvatar; 594 return mPasswordAvatar;
492} 595}
493 596
@@ -890,7 +993,9 @@ void HippoGridManager::parseData(LLSD &gridInfo, bool mergeIfNewer)
890 if (gridMap.has("render_compat")) grid->setRenderCompat(gridMap["render_compat"]); 993 if (gridMap.has("render_compat")) grid->setRenderCompat(gridMap["render_compat"]);
891 if (gridMap.has("firstname")) grid->setFirstName(gridMap["firstname"]); 994 if (gridMap.has("firstname")) grid->setFirstName(gridMap["firstname"]);
892 if (gridMap.has("lastname")) grid->setLastName(gridMap["lastname"]); 995 if (gridMap.has("lastname")) grid->setLastName(gridMap["lastname"]);
996 // Reading this one coz there are some old files in the wild that have it, but not encryptedpassword.
893 if (gridMap.has("avatarpassword")) grid->setPassword(gridMap["avatarpassword"]); 997 if (gridMap.has("avatarpassword")) grid->setPassword(gridMap["avatarpassword"]);
998 if (gridMap.has("encryptedpassword")) grid->setEncryptedPassword(gridMap["encryptedpassword"]);
894 if (gridMap.has("username")) grid->setUsername(gridMap["username"]); 999 if (gridMap.has("username")) grid->setUsername(gridMap["username"]);
895 if (gridMap.has("username_compat")) grid->setUsernameCompat(gridMap["username_compat"]); 1000 if (gridMap.has("username_compat")) grid->setUsernameCompat(gridMap["username_compat"]);
896 if (newGrid) addGrid(grid); 1001 if (newGrid) addGrid(grid);
@@ -926,8 +1031,7 @@ void HippoGridManager::saveFile()
926 gridInfo[i]["password"] = grid->getPasswordURL(); 1031 gridInfo[i]["password"] = grid->getPasswordURL();
927 gridInfo[i]["firstname"] = grid->getFirstName(); 1032 gridInfo[i]["firstname"] = grid->getFirstName();
928 gridInfo[i]["lastname"] = grid->getLastName(); 1033 gridInfo[i]["lastname"] = grid->getLastName();
929 gridInfo[i]["avatarpassword"] = grid->getPassword(); 1034 gridInfo[i]["encryptedpassword"] = grid->getEncryptedPassword();
930
931 gridInfo[i]["search"] = grid->getSearchURL(); 1035 gridInfo[i]["search"] = grid->getSearchURL();
932 gridInfo[i]["render_compat"] = grid->isRenderCompat(); 1036 gridInfo[i]["render_compat"] = grid->isRenderCompat();
933 1037
diff --git a/linden/indra/newview/hippogridmanager.h b/linden/indra/newview/hippogridmanager.h
index c983c9d..c289349 100644
--- a/linden/indra/newview/hippogridmanager.h
+++ b/linden/indra/newview/hippogridmanager.h
@@ -89,6 +89,7 @@ public:
89 const std::string& getLastName() const { return mLastName; } 89 const std::string& getLastName() const { return mLastName; }
90 const std::string& getUsername() const { return mUsername; } 90 const std::string& getUsername() const { return mUsername; }
91 std::string getPassword() const; 91 std::string getPassword() const;
92 std::string getEncryptedPassword() const;
92 const std::string& getVoiceConnector() const { return mVoiceConnector; } 93 const std::string& getVoiceConnector() const { return mVoiceConnector; }
93 S32 getMaxAgentGroups() const { return mMaxAgentGroups; } 94 S32 getMaxAgentGroups() const { return mMaxAgentGroups; }
94 const std::string& getCurrencySymbol() const { return mCurrencySymbol; } 95 const std::string& getCurrencySymbol() const { return mCurrencySymbol; }
@@ -115,6 +116,7 @@ public:
115 void setFirstName(const std::string& firstName) { mFirstName = firstName; } 116 void setFirstName(const std::string& firstName) { mFirstName = firstName; }
116 void setLastName(const std::string& lastName) { mLastName = lastName; } 117 void setLastName(const std::string& lastName) { mLastName = lastName; }
117 void setPassword(const std::string& unhashed_password); 118 void setPassword(const std::string& unhashed_password);
119 void setEncryptedPassword(const std::string& encrypted_password);
118 void setVoiceConnector(const std::string& vc) { mVoiceConnector = vc; } 120 void setVoiceConnector(const std::string& vc) { mVoiceConnector = vc; }
119 void setCurrencySymbol(const std::string& sym) { mCurrencySymbol = sym.substr(0, 3); } 121 void setCurrencySymbol(const std::string& sym) { mCurrencySymbol = sym.substr(0, 3); }
120 void setRealCurrencySymbol(const std::string& sym) { mRealCurrencySymbol = sym.substr(0, 3); } 122 void setRealCurrencySymbol(const std::string& sym) { mRealCurrencySymbol = sym.substr(0, 3); }
@@ -146,6 +148,7 @@ private:
146 std::string mFirstName; 148 std::string mFirstName;
147 std::string mLastName; 149 std::string mLastName;
148 std::string mPasswordAvatar; 150 std::string mPasswordAvatar;
151 std::string mEncryptedPassword;
149 bool mRenderCompat; 152 bool mRenderCompat;
150 S32 mMaxAgentGroups; 153 S32 mMaxAgentGroups;
151 154
@@ -165,6 +168,8 @@ private:
165 }; 168 };
166 XmlState mXmlState; 169 XmlState mXmlState;
167 170
171 void checkLoginURIforSecondLifeness();
172
168 static std::string sanitizeURI(std::string &uri); 173 static std::string sanitizeURI(std::string &uri);
169 void formatFee(std::string &fee, S32 cost, bool showFree) const; 174 void formatFee(std::string &fee, S32 cost, bool showFree) const;
170 175
diff --git a/linden/indra/newview/hippoupdate.h b/linden/indra/newview/hippoupdate.h
deleted file mode 100644
index 559c8b3..0000000
--- a/linden/indra/newview/hippoupdate.h
+++ /dev/null
@@ -1,12 +0,0 @@
1#ifndef __HIPPO_UPDATE_H__
2#define __HIPPO_UPDATE_H__
3
4
5class HippoUpdate
6{
7 public:
8 static bool checkUpdate();
9};
10
11
12#endif
diff --git a/linden/indra/newview/installers/windows/imprudence_installer_script_experimental.iss b/linden/indra/newview/installers/windows/imprudence_installer_script_experimental.iss
index c551919..a396381 100644
--- a/linden/indra/newview/installers/windows/imprudence_installer_script_experimental.iss
+++ b/linden/indra/newview/installers/windows/imprudence_installer_script_experimental.iss
@@ -9,15 +9,15 @@
9; These will change 9; These will change
10AppId={{1B3E68BC-13EB-4277-9439-CB5FF9259460} 10AppId={{1B3E68BC-13EB-4277-9439-CB5FF9259460}
11AppName=Imprudence Viewer Experimental 11AppName=Imprudence Viewer Experimental
12AppVerName=Imprudence Viewer 1.4.0 beta 1.5 windows test release 12AppVerName=Imprudence Viewer 1.4.0.3 exp 1 windows test release
13DefaultDirName={pf}\ImprudenceExperimental 13DefaultDirName={pf}\ImprudenceExperimental
14DefaultGroupName=Imprudence Viewer Experimental 14DefaultGroupName=Imprudence Viewer Experimental
15VersionInfoProductName=Imprudence Viewer Experimental 15VersionInfoProductName=Imprudence Viewer Experimental
16OutputBaseFilename=Imprudence-1.4.0-beta-1.5-windows-test 16OutputBaseFilename=Imprudence-1.4.0.3-exp-1-windows-test
17VersionInfoVersion=1.4.0 17VersionInfoVersion=1.4.0.3
18VersionInfoTextVersion=1.4.0 18VersionInfoTextVersion=1.4.0.3
19VersionInfoProductVersion=1.4.0 19VersionInfoProductVersion=1.4.0.3
20AppVersion=1.4.0 20AppVersion=1.4.0.3
21VersionInfoCopyright=2011 21VersionInfoCopyright=2011
22 22
23; These won't change 23; These won't change
diff --git a/linden/indra/newview/installers/windows/meta-impy_installer_template.iss b/linden/indra/newview/installers/windows/meta-impy_installer_template.iss
index 6731402..17aac3e 100644
--- a/linden/indra/newview/installers/windows/meta-impy_installer_template.iss
+++ b/linden/indra/newview/installers/windows/meta-impy_installer_template.iss
@@ -8,16 +8,16 @@
8; Imp Experimental ID: 1B3E68BC-13EB-4277-9439-CB5FF9259460 8; Imp Experimental ID: 1B3E68BC-13EB-4277-9439-CB5FF9259460
9 9
10; These will change 10; These will change
11AppId={{D7736EE8-AFCE-4735-BBE3-652CDFBBFCA8} 11AppId={{1B3E68BC-13EB-4277-9439-CB5FF9259460}
12AppName=%%APPNAME%% 12AppName=%%APPNAME%%
13AppVerName=%%APPVERNAME%% 13AppVerName=%%APPVERNAME%%
14DefaultDirName={pf}\meta-impy 14DefaultDirName={pf}\meta-impy
15DefaultGroupName=meta-impy Viewer 15DefaultGroupName=meta-impy Viewer
16VersionInfoProductName=%%APPNAME%% 16VersionInfoProductName=%%APPNAME%%
17OutputBaseFilename=%%INSTALLERFILENAME%% 17OutputBaseFilename=%%INSTALLERFILENAME%%
18VersionInfoVersion=%%VERSION%% 18VersionInfoVersion=%%VERSIONNUMBER%%
19VersionInfoTextVersion=%%VERSION%% 19VersionInfoTextVersion=%%VERSION%%
20VersionInfoProductVersion=%%VERSION%% 20VersionInfoProductVersion=%%VERSIONNUMBER%%
21AppVersion=%%VERSION%% 21AppVersion=%%VERSION%%
22VersionInfoCopyright=2011 22VersionInfoCopyright=2011
23 23
@@ -307,7 +307,7 @@ begin
307 Success := RegQueryDWordValue(HKLM64, 'SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\x86', 'Installed', V); 307 Success := RegQueryDWordValue(HKLM64, 'SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\x86', 'Installed', V);
308 end else begin 308 end else begin
309 Success := RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\x86', 'Installed', V); 309 Success := RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\x86', 'Installed', V);
310 end 310 end;
311 311
312 if Success = TRUE then begin 312 if Success = TRUE then begin
313 if V = 1 then begin 313 if V = 1 then begin
diff --git a/linden/indra/newview/installers/windows/vcredist_x86_VS2005.exe b/linden/indra/newview/installers/windows/vcredist_x86_VS2005.exe
new file mode 100755
index 0000000..1421c29
--- /dev/null
+++ b/linden/indra/newview/installers/windows/vcredist_x86_VS2005.exe
Binary files differ
diff --git a/linden/indra/newview/linux_tools/register_secondlifeprotocol.sh b/linden/indra/newview/linux_tools/register_secondlifeprotocol.sh
index 338fc26..3f2378a 100755
--- a/linden/indra/newview/linux_tools/register_secondlifeprotocol.sh
+++ b/linden/indra/newview/linux_tools/register_secondlifeprotocol.sh
@@ -22,13 +22,12 @@ else
22fi 22fi
23 23
24# Register handler for KDE-aware apps 24# Register handler for KDE-aware apps
25if [ -z "$KDEHOME" ]; then 25for LLKDECONFIG in kde-config kde4-config; do
26 KDEHOME=~/.kde 26 if [ `which $LLKDECONFIG` ]; then
27fi 27 LLKDEPROTODIR=`$LLKDECONFIG --path services | cut -d ':' -f 1`
28LLKDEPROTDIR=${KDEHOME}/share/services 28 if [ -d "$LLKDEPROTODIR" ]; then
29if [ -d "$LLKDEPROTDIR" ]; then 29 LLKDEPROTOFILE=${LLKDEPROTODIR}/secondlife.protocol
30 LLKDEPROTFILE=${LLKDEPROTDIR}/secondlife.protocol 30 cat > ${LLKDEPROTOFILE} <<EOF || echo Warning: Did not register secondlife:// handler with KDE: Could not write ${LLKDEPROTOFILE}
31 cat > ${LLKDEPROTFILE} <<EOF || echo Warning: Did not register secondlife:// handler with KDE: Could not write ${LLKDEPROTFILE}
32[Protocol] 31[Protocol]
33exec=${HANDLER} '%u' 32exec=${HANDLER} '%u'
34protocol=secondlife 33protocol=secondlife
@@ -41,6 +40,8 @@ writing=false
41makedir=false 40makedir=false
42deleting=false 41deleting=false
43EOF 42EOF
44else 43 else
45 echo Info: Did not register secondlife:// handler with KDE: Directory $LLKDEPROTDIR does not exist. You can safely ignore this if you are not using KDE. 44 echo Warning: Did not register secondlife:// handler with KDE: Directory $LLKDEPROTODIR does not exist.
46fi 45 fi
46 fi
47done
diff --git a/linden/indra/newview/llagent.cpp b/linden/indra/newview/llagent.cpp
index 85a1b36..dd74cde 100644
--- a/linden/indra/newview/llagent.cpp
+++ b/linden/indra/newview/llagent.cpp
@@ -1613,8 +1613,6 @@ BOOL LLAgent::calcCameraMinDistance(F32 &obj_min_distance)
1613 abs_target_offset.abs(); 1613 abs_target_offset.abs();
1614 1614
1615 LLVector3 target_offset_dir = target_offset_origin; 1615 LLVector3 target_offset_dir = target_offset_origin;
1616 F32 object_radius = mFocusObject->getVObjRadius();
1617
1618 BOOL target_outside_object_extents = FALSE; 1616 BOOL target_outside_object_extents = FALSE;
1619 1617
1620 for (U32 i = VX; i <= VZ; i++) 1618 for (U32 i = VX; i <= VZ; i++)
@@ -1708,18 +1706,6 @@ BOOL LLAgent::calcCameraMinDistance(F32 &obj_min_distance)
1708 1706
1709 LLVector3 camera_offset_object(getCameraPositionAgent() - mFocusObject->getPositionAgent()); 1707 LLVector3 camera_offset_object(getCameraPositionAgent() - mFocusObject->getPositionAgent());
1710 1708
1711 // length projected orthogonal to target offset
1712 F32 camera_offset_dist = (camera_offset_object - target_offset_dir * (camera_offset_object * target_offset_dir)).magVec();
1713
1714 // calculate whether the target point would be "visible" if it were outside the bounding box
1715 // on the opposite of the splitting plane defined by object_split_axis;
1716 BOOL exterior_target_visible = FALSE;
1717 if (camera_offset_dist > object_radius)
1718 {
1719 // target is visible from camera, so turn off fov zoom
1720 exterior_target_visible = TRUE;
1721 }
1722
1723 F32 camera_offset_clip = camera_offset_object * object_split_axis; 1709 F32 camera_offset_clip = camera_offset_object * object_split_axis;
1724 F32 target_offset_clip = target_offset_dir * object_split_axis; 1710 F32 target_offset_clip = target_offset_dir * object_split_axis;
1725 1711
@@ -2538,12 +2524,10 @@ void LLAgent::autoPilot(F32 *delta_yaw)
2538 *delta_yaw = yaw; 2524 *delta_yaw = yaw;
2539 2525
2540 // Compute when to start slowing down and when to stop 2526 // Compute when to start slowing down and when to stop
2541 F32 stop_distance = mAutoPilotStopDistance;
2542 F32 slow_distance; 2527 F32 slow_distance;
2543 if (getFlying()) 2528 if (getFlying())
2544 { 2529 {
2545 slow_distance = llmax(6.f, mAutoPilotStopDistance + 5.f); 2530 slow_distance = llmax(6.f, mAutoPilotStopDistance + 5.f);
2546 stop_distance = llmax(2.f, mAutoPilotStopDistance);
2547 } 2531 }
2548 else 2532 else
2549 { 2533 {
@@ -3719,7 +3703,6 @@ F32 LLAgent::calcCameraFOVZoomFactor()
3719 else if (mFocusObject.notNull() && !mFocusObject->isAvatar()) 3703 else if (mFocusObject.notNull() && !mFocusObject->isAvatar())
3720 { 3704 {
3721 // don't FOV zoom on mostly transparent objects 3705 // don't FOV zoom on mostly transparent objects
3722 LLVector3 focus_offset = mFocusObjectOffset;
3723 F32 obj_min_dist = 0.f; 3706 F32 obj_min_dist = 0.f;
3724 if (!gSavedSettings.getBOOL("DisableMinZoomDist")) 3707 if (!gSavedSettings.getBOOL("DisableMinZoomDist"))
3725 calcCameraMinDistance(obj_min_dist); 3708 calcCameraMinDistance(obj_min_dist);
@@ -3746,9 +3729,8 @@ LLVector3d LLAgent::calcCameraPositionTargetGlobal(BOOL *hit_limit)
3746 // Compute base camera position and look-at points. 3729 // Compute base camera position and look-at points.
3747 F32 camera_land_height; 3730 F32 camera_land_height;
3748 LLVector3d frame_center_global = mAvatarObject.isNull() ? getPositionGlobal() 3731 LLVector3d frame_center_global = mAvatarObject.isNull() ? getPositionGlobal()
3749 : getPosGlobalFromAgent(mAvatarObject->mRoot.getWorldPosition()); 3732 : getPosGlobalFromAgent(mAvatarObject->mRoot.getWorldPosition());
3750 3733
3751 LLVector3 upAxis = getUpAxis();
3752 BOOL isConstrained = FALSE; 3734 BOOL isConstrained = FALSE;
3753 LLVector3d head_offset; 3735 LLVector3d head_offset;
3754 head_offset.setVec(mThirdPersonHeadOffset); 3736 head_offset.setVec(mThirdPersonHeadOffset);
@@ -3883,7 +3865,6 @@ LLVector3d LLAgent::calcCameraPositionTargetGlobal(BOOL *hit_limit)
3883 // set the global camera position 3865 // set the global camera position
3884 LLVector3d camera_offset; 3866 LLVector3d camera_offset;
3885 3867
3886 LLVector3 av_pos = mAvatarObject.isNull() ? LLVector3::zero : mAvatarObject->getRenderPosition();
3887 camera_offset.setVec( local_camera_offset ); 3868 camera_offset.setVec( local_camera_offset );
3888 camera_position_global = frame_center_global + head_offset + camera_offset; 3869 camera_position_global = frame_center_global + head_offset + camera_offset;
3889 3870
diff --git a/linden/indra/newview/llappviewer.cpp b/linden/indra/newview/llappviewer.cpp
index c30bf35..7040cd1 100644
--- a/linden/indra/newview/llappviewer.cpp
+++ b/linden/indra/newview/llappviewer.cpp
@@ -179,7 +179,6 @@
179 179
180#include "hippogridmanager.h" 180#include "hippogridmanager.h"
181#include "hippolimits.h" 181#include "hippolimits.h"
182#include "hippoupdate.h"
183 182
184// [RLVa:KB] 183// [RLVa:KB]
185#include "rlvhandler.h" 184#include "rlvhandler.h"
@@ -616,6 +615,11 @@ bool LLAppViewer::init()
616 // Always add the version to the top of the log--makes debugging easier -- MC 615 // Always add the version to the top of the log--makes debugging easier -- MC
617 llinfos << ViewerInfo::prettyInfo() << llendl; 616 llinfos << ViewerInfo::prettyInfo() << llendl;
618 617
618 // Always fetch the Ethernet MAC address, needed both for login
619 // and password load. Need to do this before initConfiguration(),
620 // as the password loading part needs the MAC.
621 LLUUID::getNodeID(gMACAddress);
622
619 if (!initConfiguration()) 623 if (!initConfiguration())
620 return false; 624 return false;
621 625
@@ -748,10 +752,6 @@ bool LLAppViewer::init()
748 return false; 752 return false;
749 } 753 }
750 754
751 // Always fetch the Ethernet MAC address, needed both for login
752 // and password load.
753 LLUUID::getNodeID(gMACAddress);
754
755 // Prepare for out-of-memory situations, during which we will crash on 755 // Prepare for out-of-memory situations, during which we will crash on
756 // purpose and save a dump. 756 // purpose and save a dump.
757#if LL_WINDOWS && LL_RELEASE_FOR_DOWNLOAD && LL_USE_SMARTHEAP 757#if LL_WINDOWS && LL_RELEASE_FOR_DOWNLOAD && LL_USE_SMARTHEAP
diff --git a/linden/indra/newview/lldrawable.cpp b/linden/indra/newview/lldrawable.cpp
index 5a383bc..ee49752 100644
--- a/linden/indra/newview/lldrawable.cpp
+++ b/linden/indra/newview/lldrawable.cpp
@@ -494,7 +494,6 @@ F32 LLDrawable::updateXform(BOOL undamped)
494 //scaling 494 //scaling
495 LLVector3 target_scale = mVObjp->getScale(); 495 LLVector3 target_scale = mVObjp->getScale();
496 LLVector3 old_scale = mCurrentScale; 496 LLVector3 old_scale = mCurrentScale;
497 LLVector3 dest_scale = target_scale;
498 497
499 // Damping 498 // Damping
500 F32 dist_squared = 0.f; 499 F32 dist_squared = 0.f;
@@ -834,7 +833,6 @@ const LLVector3* LLDrawable::getSpatialExtents() const
834 833
835void LLDrawable::setSpatialExtents(LLVector3 min, LLVector3 max) 834void LLDrawable::setSpatialExtents(LLVector3 min, LLVector3 max)
836{ 835{
837 LLVector3 size = max - min;
838 mExtents[0] = min; 836 mExtents[0] = min;
839 mExtents[1] = max; 837 mExtents[1] = max;
840} 838}
@@ -1098,7 +1096,6 @@ LLCamera LLSpatialBridge::transformCamera(LLCamera& camera)
1098 LLCamera ret = camera; 1096 LLCamera ret = camera;
1099 LLXformMatrix* mat = mDrawable->getXform(); 1097 LLXformMatrix* mat = mDrawable->getXform();
1100 LLVector3 center = LLVector3(0,0,0) * mat->getWorldMatrix(); 1098 LLVector3 center = LLVector3(0,0,0) * mat->getWorldMatrix();
1101 LLQuaternion rotation = LLQuaternion(mat->getWorldMatrix());
1102 1099
1103 LLVector3 delta = ret.getOrigin() - center; 1100 LLVector3 delta = ret.getOrigin() - center;
1104 LLQuaternion rot = ~mat->getRotation(); 1101 LLQuaternion rot = ~mat->getRotation();
diff --git a/linden/indra/newview/lightshare.cpp b/linden/indra/newview/llettherebelight.cpp
index 599a527..7fc2a3d 100644
--- a/linden/indra/newview/lightshare.cpp
+++ b/linden/indra/newview/llettherebelight.cpp
@@ -1,9 +1,10 @@
1/** 1/**
2 * @file lightshare.cpp 2 * @file llettherebelight.cpp
3 * @brief Handler for Meta7 Lightshare (region-side Windlight settings). 3 * @brief Handler for Meta7 Lightshare (region-side Windlight settings), and other methods of sharing WindLight.
4 * 4 *
5 * Copyright (c) 2010, Tom Grimshaw (Tom Meta) 5 * Copyright (c) 2010, Tom Grimshaw (Tom Meta)
6 * Copyright (c) 2010, Jacek Antonelli 6 * Copyright (c) 2010, Jacek Antonelli
7 * Copyright (c) 2012, David Seikel
7 * 8 *
8 * The source code in this file ("Source Code") is provided to you 9 * The source code in this file ("Source Code") is provided to you
9 * under the terms of the GNU General Public License, version 2.0 10 * under the terms of the GNU General Public License, version 2.0
@@ -27,7 +28,6 @@
27 */ 28 */
28 29
29 30
30#include "lightshare.h"
31 31
32#include "linden_common.h" 32#include "linden_common.h"
33#include "llviewercontrol.h" 33#include "llviewercontrol.h"
@@ -38,30 +38,26 @@
38#include "message.h" 38#include "message.h"
39#include "meta7windlight.h" 39#include "meta7windlight.h"
40 40
41#include "llettherebelight.h"
41 42
42const std::string WindlightMessage::sWaterPresetName = "(Region settings)"; 43#include "llagent.h"
43const std::string WindlightMessage::sSkyPresetName = "(Region settings)"; 44#include "llworld.h"
44const std::string WindlightMessage::sBackupWaterPresetName = "(Backup settings)";
45const std::string WindlightMessage::sBackupSkyPresetName = "(Backup settings)";
46 45
47// Backups.
48LLWaterParamSet waterBackup;
49LLWLParamSet skyBackup;
50//LLUUID* waterNormalBackup = NULL;
51bool animatorIsRunning = true;
52bool animatorUseEstateTime = true;
53bool backup = false;
54 46
55WindlightMessage* WindlightMessage::sMostRecent = NULL; 47const std::string LightShare::sRegionPresetName = "(Region settings)";
56LLTimer* WindlightMessage::sIgnoreTimer = new LLTimer(); 48const std::string LightShare::sParcelPresetName = "(Parcel settings)";
57bool WindlightMessage::sIgnoreRegion = false; 49const std::string LightShare::sRLVPresetName = "(RLV settings)";
58 50
59 51
60WindlightMessage::WindlightMessage( LLMessageSystem* msg ) : 52LLWaterParamSet* LightShare::mWater = NULL;
53LLWLParamSet* LightShare::mSky = NULL;
54LLUUID* LightShare::mWaterNormal = NULL;
55LLTimer* LightShare::sIgnoreTimer = new LLTimer();
56bool LightShare::sIgnoreRegion = false;
57
58
59LightShare::LightShare( LLMessageSystem* msg ) :
61 mPacket(NULL), 60 mPacket(NULL),
62 mWater(NULL),
63 mSky(NULL),
64 mWaterNormal(NULL),
65 mIsValid(false) 61 mIsValid(false)
66{ 62{
67 std::string method; 63 std::string method;
@@ -86,10 +82,7 @@ WindlightMessage::WindlightMessage( LLMessageSystem* msg ) :
86 buf, size, 0, 249); 82 buf, size, 0, 249);
87 83
88 mWater = new LLWaterParamSet(); 84 mWater = new LLWaterParamSet();
89// mSky = new LLWLParamSet(); 85 mSky = new LLWLParamSet();
90 LLWLParamManager * wl_param_mgr = LLWLParamManager::instance();
91 static LLWLParamSet & sSky = wl_param_mgr->mCurParams;
92 mSky = &sSky;
93 86
94 mWaterNormal = new LLUUID(); 87 mWaterNormal = new LLUUID();
95 88
@@ -102,21 +95,21 @@ WindlightMessage::WindlightMessage( LLMessageSystem* msg ) :
102} 95}
103 96
104 97
105WindlightMessage::~WindlightMessage() 98LightShare::~LightShare()
106{ 99{
107 delete mWater; 100 delete mWater;
108// delete mSky; 101 delete mSky;
109 delete mWaterNormal; 102 delete mWaterNormal;
110} 103}
111 104
112 105
113// static 106// static
114void WindlightMessage::processWindlight(LLMessageSystem* msg, void**) 107void LightShare::processWindlight(LLMessageSystem* msg, void**)
115{ 108{
116 if( gSavedSettings.getU32("LightShareAllowed") <= LIGHTSHARE_NEVER ) 109 if( gSavedSettings.getU32("LightShareAllowed") <= LIGHTSHARE_NEVER )
117 return; 110 return;
118 111
119 WindlightMessage* wl = new WindlightMessage(msg); 112 LightShare* wl = new LightShare(msg);
120 113
121 if (!wl) 114 if (!wl)
122 return; 115 return;
@@ -127,16 +120,28 @@ void WindlightMessage::processWindlight(LLMessageSystem* msg, void**)
127 return; 120 return;
128 } 121 }
129 122
123 applyMaybe(wl->mWater, wl->mWaterNormal, wl->mSky);
124}
125
126
127//static
128void LightShare::applyMaybe(LLWaterParamSet* thisWater, LLUUID* thisWaterNormal, LLWLParamSet* thisSky)
129{
130 if( gSavedSettings.getU32("LightShareAllowed") <= LIGHTSHARE_NEVER )
131 return;
132
130 std::string water = LLWaterParamManager::instance()->mCurParams.mName; 133 std::string water = LLWaterParamManager::instance()->mCurParams.mName;
131 std::string sky = LLWLParamManager::instance()->mCurParams.mName; 134 std::string sky = LLWLParamManager::instance()->mCurParams.mName;
132 135
133 // If they are using region settings already, or LightShare is 136 // If they are using region settings already, or LightShare is
134 // always allowed, just apply the new settings, don't bother asking. 137 // always allowed, just apply the new settings, don't bother asking.
135 if( gSavedSettings.getU32("LightShareAllowed") == LIGHTSHARE_ALWAYS || 138 if( gSavedSettings.getU32("LightShareAllowed") == LIGHTSHARE_ALWAYS ||
136 (sky == sSkyPresetName && water == sWaterPresetName) ) 139 (sky == sRegionPresetName && water == sRegionPresetName) )
137 { 140 {
138 wl->apply(); 141 mSky = thisSky;
139 delete wl; 142 mWater = thisWater;
143 mWaterNormal = thisWaterNormal;
144 apply(mWater, mWaterNormal, mSky, WL_SCOPE_REGION);
140 return; 145 return;
141 } 146 }
142 147
@@ -145,41 +150,36 @@ void WindlightMessage::processWindlight(LLMessageSystem* msg, void**)
145 // The user recently ignored a windlight message, so ignore 150 // The user recently ignored a windlight message, so ignore
146 // this one too, and restart the timer. 151 // this one too, and restart the timer.
147 restartIgnoreTimer(); 152 restartIgnoreTimer();
148 delete wl;
149 return; 153 return;
150 } 154 }
151 155
152 if(sIgnoreRegion) 156 if(sIgnoreRegion)
153 { 157 {
154 // We are ignoring new settings until user enters a new region. 158 // We are ignoring new settings until user enters a new region.
155 delete wl;
156 return; 159 return;
157 } 160 }
158 161
159 if( gSavedSettings.getU32("LightShareAllowed") == LIGHTSHARE_ASK && 162 if( gSavedSettings.getU32("LightShareAllowed") == LIGHTSHARE_ASK && mSky == NULL && mWater == NULL)
160 sMostRecent == NULL )
161 { 163 {
162 // No most recent, so store this and create notification 164 // No most recent, so store this and create notification
163 // asking the user whether to apply or not. 165 // asking the user whether to apply or not.
164 sMostRecent = wl; 166 mSky = thisSky;
165 LLNotifications::instance().add("ConfirmLightShare", LLSD(), LLSD(), 167 mWater = thisWater;
168 mWaterNormal = thisWaterNormal;
169 LLNotifications::instance().add("ConfirmLightShare", LLSD(), LLSD(),
166 boost::bind(&applyCallback, _1, _2)); 170 boost::bind(&applyCallback, _1, _2));
167 return;
168 } 171 }
169 else 172 else
170 { 173 {
171 // No new notification (to avoid spamming the user), just 174 // No new notification (to avoid spamming the user, we do keep the saves from above)
172 // store this as most recent. 175 mSky = thisSky;
173 delete sMostRecent; 176 mWater = thisWater;
174 sMostRecent = wl; 177 mWaterNormal = thisWaterNormal;
175 return;
176 } 178 }
177} 179}
178 180
179
180// static 181// static
181bool WindlightMessage::applyCallback(const LLSD& notification, 182bool LightShare::applyCallback(const LLSD& notification, const LLSD& response)
182 const LLSD& response)
183{ 183{
184 S32 option = LLNotification::getSelectedOption(notification, response); 184 S32 option = LLNotification::getSelectedOption(notification, response);
185 185
@@ -187,7 +187,8 @@ bool WindlightMessage::applyCallback(const LLSD& notification,
187 { 187 {
188 case 0:{ 188 case 0:{
189 // "Apply" 189 // "Apply"
190 sMostRecent->apply(); 190 apply(mWater, mWaterNormal, mSky, WL_SCOPE_REGION);
191
191 break; 192 break;
192 } 193 }
193 case 1:{ 194 case 1:{
@@ -202,41 +203,18 @@ bool WindlightMessage::applyCallback(const LLSD& notification,
202 } 203 }
203 } 204 }
204 205
205 delete sMostRecent;
206 sMostRecent = NULL;
207
208 return false; 206 return false;
209} 207}
210 208
211
212// static 209// static
213void WindlightMessage::resetRegion() 210void LightShare::resetRegion()
214{ 211{
215 sIgnoreRegion = false; 212 sIgnoreRegion = false;
216 213 apply(NULL, NULL, NULL, WL_SCOPE_REGION);
217// According to Melanie Thielker -
218// The new WindlightReset message from OpenSim is for resetting Windlight presets when leaving a sim that uses Lightshare.
219// Hopefully if you are moving to a sim that has new LightShare data, that gets sent after this reset, or the reset is never sent.
220 if (backup)
221 {
222 LLWaterParamManager* water_mgr = LLWaterParamManager::instance();
223 LLWLParamManager* sky_mgr = LLWLParamManager::instance();
224
225 llinfos << "Restoring WindLight presets " << waterBackup.mName << " and " << skyBackup.mName << "." << llendl;
226 water_mgr->loadPreset(waterBackup.mName, true);
227 // Don't think we need to do this.
228 //if (waterNormalBackup)
229 //water_mgr->setNormalMapID(*waterNormalBackup);
230 sky_mgr->mAnimator.mIsRunning = animatorIsRunning;
231 sky_mgr->mAnimator.mUseLindenTime = animatorUseEstateTime;
232 sky_mgr->loadPreset(skyBackup.mName, true);
233 backup = false;
234 }
235} 214}
236 215
237
238// static 216// static
239void WindlightMessage::restartIgnoreTimer() 217void LightShare::restartIgnoreTimer()
240{ 218{
241 F32 time = gSavedSettings.getF32("LightShareIgnoreTimer"); 219 F32 time = gSavedSettings.getF32("LightShareIgnoreTimer");
242 sIgnoreTimer->start(); 220 sIgnoreTimer->start();
@@ -244,65 +222,219 @@ void WindlightMessage::restartIgnoreTimer()
244} 222}
245 223
246// static 224// static
247bool WindlightMessage::ignoreTimerHasExpired() 225bool LightShare::ignoreTimerHasExpired()
248{ 226{
249 return sIgnoreTimer->hasExpired(); 227 return sIgnoreTimer->hasExpired();
250} 228}
251 229
230// TODO - have regionSet and parcelSet be arrays, so we can deal with height zones.
231static struct WLCombined userSet, regionSet, parcelSet, RLVSet;
252 232
253bool WindlightMessage::apply() 233// TODO - should spread this merging stuff around,
254{ 234// so that eventually we can get rid of almost identical code for water and sky.
255 LLWaterParamManager* water_mgr = LLWaterParamManager::instance(); 235// Then one of these two methods goes away.
256 LLWLParamManager* sky_mgr = LLWLParamManager::instance();
257 236
258 if (!backup) 237//static
238void LightShare::mergeWaterSets(LLWaterParamSet* thisSet, LLWaterParamSet* oldSet)
239{
240 for(LLSD::map_const_iterator i = thisSet->mParamValues.beginMap();
241 i != thisSet->mParamValues.endMap();
242 ++i)
259 { 243 {
260 llinfos << "Backing up WindLight presets '" << water_mgr->mCurParams.mName << " and " << sky_mgr->mCurParams.mName << "'." << llendl; 244 const std::string& param = i->first;
261 waterBackup = water_mgr->mCurParams; 245
262 //waterNormalBackup = waterBackup->getNormalMapID(); 246 if(i->second.isArray())
263 skyBackup = sky_mgr->mCurParams; 247 {
264 animatorIsRunning = sky_mgr->mAnimator.mIsRunning; 248 for (int j = 0; j < i->second.size(); j++)
265 animatorUseEstateTime = sky_mgr->mAnimator.mUseLindenTime; 249 {
266 backup = true; 250 oldSet->mParamValues[param][j] = i->second[j].asReal();
251 }
252 }
253 else if(i->second.isReal())
254 oldSet->mParamValues[param] = i->second.asReal();
267 } 255 }
256}
268 257
269 mWater->mName = sWaterPresetName; 258//static
270 water_mgr->removeParamSet( sWaterPresetName, false ); 259void LightShare::mergeWLSets(LLWLParamSet* thisSet, LLWLParamSet* oldSet)
271 water_mgr->addParamSet( sWaterPresetName, *mWater ); 260{
272 // Don't think we need to save it, the load gets the one we added above. 261 for(LLSD::map_const_iterator i = thisSet->mParamValues.beginMap();
273 //water_mgr->savePreset( sWaterPresetName ); 262 i != thisSet->mParamValues.endMap();
274 water_mgr->loadPreset( sWaterPresetName, true ); 263 ++i)
275 water_mgr->setNormalMapID( *mWaterNormal ); 264 {
276 265 const std::string& param = i->first;
277 mSky->mName = sSkyPresetName; 266
278 sky_mgr->mAnimator.mIsRunning = false; 267 if(i->second.isArray())
279 sky_mgr->mAnimator.mUseLindenTime = false; 268 {
280 sky_mgr->removeParamSet( sSkyPresetName, false ); 269 for (int j = 0; j < i->second.size(); j++)
281 sky_mgr->addParamSet( sSkyPresetName, *mSky ); 270 {
282 // Don't think we need to save it, the load gets the one we added above. 271 oldSet->mParamValues[param][j] = i->second[j].asReal();
283 //sky_mgr->savePreset( sSkyPresetName ); 272 }
284 sky_mgr->loadPreset( sSkyPresetName, true ); 273 }
285 274 else if(i->second.isReal())
286 return true; 275 oldSet->mParamValues[param] = i->second.asReal();
276 }
287} 277}
288 278
279//static
280void LightShare::apply(LLWaterParamSet * newWater, LLUUID *newWaterNormal, LLWLParamSet *newSky, WLScope scope)
281// TODO - Deal with day cycle stuff.
282{
283 LLWaterParamManager* waterMgr = LLWaterParamManager::instance();
284 LLWLParamManager* skyMgr = LLWLParamManager::instance();
285 LLWaterParamSet oldWaterSet = waterMgr->mCurParams;
286 LLWLParamSet oldWLSet = skyMgr->mCurParams;
287 struct WLCombined* thisSet = &userSet;
288 bool user = true;
289
290 switch(scope)
291 {
292 case WL_SCOPE_USER :
293 {
294 thisSet = &userSet;
295 thisSet->water.mName = waterMgr->mCurParams.mName;
296 thisSet->sky.mName = skyMgr->mCurParams.mName;
297 thisSet->enabled = true;
298 // Check if user selected to show the saved region or parcel settings.
299 if (newSky && (sRegionPresetName == skyMgr->mCurParams.mName))
300 thisSet->enabled = false;
301 if (newWater && (sParcelPresetName == skyMgr->mCurParams.mName))
302 thisSet->enabled = false;
303 break;
304 }
305 case WL_SCOPE_REGION :
306 {
307 thisSet = &regionSet;
308 thisSet->water.mName = sRegionPresetName;
309 thisSet->sky.mName = sRegionPresetName;
310 thisSet->enabled = (gSavedSettings.getU32("LightShareAllowed") != LIGHTSHARE_NEVER);
311 break;
312 }
313 case WL_SCOPE_PARCEL :
314 {
315 thisSet = &parcelSet;
316 thisSet->water.mName = sParcelPresetName;
317 thisSet->sky.mName = sParcelPresetName;
318 thisSet->enabled = (gSavedSettings.getU32("LightShareAllowed") != LIGHTSHARE_NEVER);
319 break;
320 }
321 case WL_SCOPE_RLV :
322 {
323 thisSet = &RLVSet;
324 thisSet->water.mName = sRLVPresetName;
325 thisSet->sky.mName = sRLVPresetName;
326 // TODO set enabled properly.
327 break;
328 }
329 }
330
331 if (newWater)
332 thisSet->water.setAll(newWater->getAll());
333 if (newWaterNormal)
334 thisSet->water.mParamValues["normalMap"] = *newWaterNormal;
335 if (newSky)
336 thisSet->sky.setAll(newSky->getAll());
289 337
290// static 338 if ((NULL == newWater) && (NULL == newSky))
291bool WindlightMessage::isValid() 339 thisSet->enabled = false;
340
341 F32 fade = 0; //Instant
342 bool error;
343 fade = thisSet->sky.getFloat("fade", error);
344
345 if (fade)
346 {
347 // TODO - should copy the original, then set that here.
348 // The fade should delete this copy once it's done fading.
349 // Dunno if we actually need to do any of this anyway.
350 waterMgr->removeParamSet( oldWaterSet.mName, false );
351 waterMgr->addParamSet( oldWaterSet.mName, oldWaterSet );
352 waterMgr->setNormalMapID( *newWaterNormal );
353 waterMgr->getParamSet(oldWaterSet.mName, waterMgr->mCurParams);
354 waterMgr->propagateParameters();
355
356 skyMgr->removeParamSet( oldWLSet.mName, false );
357 skyMgr->addParamSet( oldWLSet.mName, oldWLSet );
358 skyMgr->getParamSet(oldWLSet.mName, skyMgr->mCurParams);
359 skyMgr->propagateParameters();
360 }
361
362 if (regionSet.enabled)
363 {
364 waterMgr->setParamSet( regionSet.water.mName, regionSet.water );
365 skyMgr->setParamSet( regionSet.sky.mName, regionSet.sky );
366 mergeWaterSets(&(regionSet.water), &oldWaterSet);
367 mergeWLSets(&(regionSet.sky), &oldWLSet);
368 }
369 else
370 {
371 waterMgr->removeParamSet( regionSet.water.mName, false );
372 skyMgr->removeParamSet( regionSet.sky.mName, false );
373 }
374 if (parcelSet.enabled)
375 {
376 waterMgr->setParamSet( parcelSet.water.mName, parcelSet.water );
377 skyMgr->setParamSet( parcelSet.sky.mName, parcelSet.sky );
378 mergeWaterSets(&(parcelSet.water), &oldWaterSet);
379 mergeWLSets(&(parcelSet.sky), &oldWLSet);
380 }
381 else
382 {
383 waterMgr->removeParamSet( parcelSet.water.mName, false );
384 skyMgr->removeParamSet( parcelSet.sky.mName, false );
385 }
386 if (userSet.enabled)
387 {
388 mergeWaterSets(&(userSet.water), &oldWaterSet);
389 mergeWLSets(&(userSet.sky), &oldWLSet);
390 }
391 if (RLVSet.enabled)
392 {
393 mergeWaterSets(&(RLVSet.water), &oldWaterSet);
394 mergeWLSets(&(RLVSet.sky), &oldWLSet);
395 }
396
397 skyMgr->mAnimator.mIsRunning = false;
398 skyMgr->mAnimator.mUseLindenTime = false;
399 if (fade)
400 {
401 waterMgr->SetMixTime(&oldWaterSet, fade);
402 skyMgr->SetMixTime(&oldWLSet, fade);
403 }
404 else
405 {
406 if (newWater)
407 {
408 waterMgr->setParamSet( thisSet->water.mName, oldWaterSet );
409 waterMgr->setNormalMapID( *newWaterNormal );
410 waterMgr->getParamSet(thisSet->water.mName, waterMgr->mCurParams);
411 waterMgr->propagateParameters();
412 }
413
414 if (newSky)
415 {
416 skyMgr->setParamSet( thisSet->sky.mName, oldWLSet );
417 skyMgr->getParamSet(thisSet->sky.mName, skyMgr->mCurParams);
418 skyMgr->propagateParameters();
419 }
420 }
421
422 LLWorld::getInstance()->rebuildClouds(gAgent.getRegion());
423}
424
425bool LightShare::isValid()
292{ 426{
293 return mIsValid; 427 return mIsValid;
294} 428}
295 429
296 430void LightShare::process_packet( char* buf )
297void WindlightMessage::process_packet( char* buf )
298{ 431{
299 // *FIXME: Horrible idea, fragile, not byte-order or endian 432 // *FIXME: Horrible idea, fragile, not byte-order or endian
300 // safe, no validation, etc. etc. -Jacek 433 // safe, no validation, etc. etc. -Jacek
301 mPacket = (Meta7WindlightPacket*)buf; 434 mPacket = (Meta7WindlightPacket*)buf;
302} 435}
303 436
304 437void LightShare::process_water()
305void WindlightMessage::process_water()
306{ 438{
307 mWater->set("waterFogColor", 439 mWater->set("waterFogColor",
308 mPacket->waterColor.red / 256.f, 440 mPacket->waterColor.red / 256.f,
@@ -358,7 +490,7 @@ void WindlightMessage::process_water()
358} 490}
359 491
360 492
361void WindlightMessage::process_sky() 493void LightShare::process_sky()
362{ 494{
363 mSky->setSunAngle(F_TWO_PI * mPacket->sunMoonPosiiton); 495 mSky->setSunAngle(F_TWO_PI * mPacket->sunMoonPosiiton);
364 mSky->setEastAngle(F_TWO_PI * mPacket->eastAngle); 496 mSky->setEastAngle(F_TWO_PI * mPacket->eastAngle);
@@ -453,5 +585,3 @@ void WindlightMessage::process_sky()
453 585
454 mSky->setStarBrightness(mPacket->starBrightness); 586 mSky->setStarBrightness(mPacket->starBrightness);
455} 587}
456
457
diff --git a/linden/indra/newview/lightshare.h b/linden/indra/newview/llettherebelight.h
index 4792823..d83e827 100644
--- a/linden/indra/newview/lightshare.h
+++ b/linden/indra/newview/llettherebelight.h
@@ -1,5 +1,5 @@
1/** 1/**
2 * @file lightshare.h 2 * @file llettherebelight.h
3 * @brief WindlightMessage class definition. 3 * @brief WindlightMessage class definition.
4 * 4 *
5 * Copyright (c) 2010, Jacek Antonelli 5 * Copyright (c) 2010, Jacek Antonelli
@@ -30,23 +30,34 @@
30#define LIGHTSHARE_H 30#define LIGHTSHARE_H
31 31
32#include <string> 32#include <string>
33#include "llwlparamset.h"
34#include "llwaterparamset.h"
35#include "lluuid.h"
33 36
34struct Meta7WindlightPacket; 37struct Meta7WindlightPacket;
35class LLMessageSystem;
36class LLSD;
37class LLTimer;
38class LLUUID;
39class LLWaterParamSet;
40class LLWLParamSet;
41 38
42 39
40typedef enum wl_scope
41{
42 WL_SCOPE_USER,
43 WL_SCOPE_REGION,
44 WL_SCOPE_PARCEL,
45 WL_SCOPE_RLV
46} WLScope;
47
48struct WLCombined
49{
50 LLWaterParamSet water;
51 LLWLParamSet sky;
52 BOOL enabled;
53};
54
43// Encapsulates a "Windlight" (LightShare) message sent from the 55// Encapsulates a "Windlight" (LightShare) message sent from the
44// region, allowing the settings to be applied at a later time. 56// region, allowing the settings to be applied at a later time.
45// 57//
46class WindlightMessage 58class LightShare
47{ 59{
48 public: 60public:
49
50 // The meanings of the LightShareAllowed user setting. 61 // The meanings of the LightShareAllowed user setting.
51 enum LIGHTSHARE_ALLOWED 62 enum LIGHTSHARE_ALLOWED
52 { 63 {
@@ -55,66 +66,54 @@ class WindlightMessage
55 LIGHTSHARE_ALWAYS = 2, 66 LIGHTSHARE_ALWAYS = 2,
56 }; 67 };
57 68
58 // Constructs a new WindlightMessage instance from a GenericMessage 69 // The name of the preset where the region settings are stored.
70 static const std::string sRegionPresetName;
71 // The name of the preset where the parcel settings are stored.
72 static const std::string sParcelPresetName;
73 // The name of the preset where the RLV settings are stored.
74 static const std::string sRLVPresetName;
75
76 // Constructs a new LightShare instance from a GenericMessage
59 // with the "Windlight" method, such as those sent by a 77 // with the "Windlight" method, such as those sent by a
60 // Lightshare-enabled OpenSim region. 78 // Lightshare-enabled OpenSim region.
61 WindlightMessage( LLMessageSystem* msg ); 79 LightShare( LLMessageSystem* msg );
62 80
63 ~WindlightMessage(); 81 ~LightShare();
64
65 // The name of the water preset where the region settings are stored.
66 static const std::string sWaterPresetName;
67
68 // The name of the sky preset where the region settings are stored.
69 static const std::string sSkyPresetName;
70 82
71 // The name of the preset where the backup settings are stored. 83 // The name of the preset where the backup settings are stored.
72 static const std::string sBackupWaterPresetName; 84 static const std::string sBackupWaterPresetName;
73 static const std::string sBackupSkyPresetName; 85 static const std::string sBackupSkyPresetName;
74 86
75 // Message handler for GenericMessage with the "Windlight" method. 87 // Message handler for GenericMessage with the "Windlight" method.
76 // Creates and applies a new WindlightMessage (or prompts user). 88 // Creates and applies a new LightShare (or prompts user).
77 static void processWindlight(LLMessageSystem* msg, void**); 89 static void processWindlight(LLMessageSystem* msg, void**);
78 90
79 // Callback when the user interacts with the notification. 91 static void applyMaybe(LLWaterParamSet* thisWater, LLUUID* thisVaterNormal, LLWLParamSet* thisSky);
80 static bool applyCallback(const LLSD& notification,
81 const LLSD& response);
82 92
83 // Called after the user has entered a new region, to reset the 93 // Called after the user has entered a new region, to reset the
84 // "ignore while in this region" state. 94 // "ignore while in this region" state.
85 // Also resets/deactivates the Windlight settings in response to the "WindlightReset" method. 95 // Also resets/deactivates the Windlight settings in response to the "WindlightReset" method.
86 static void resetRegion(); 96 static void resetRegion();
87 97
88 // Applies/activates the Windlight settings from the message.
89 bool apply();
90
91 // Returns true if the message contains valid Windlight settings. 98 // Returns true if the message contains valid Windlight settings.
92 // (But there's no real validation yet, so this is always true.) 99 // (But there's no real validation yet, so this is always true.)
93 bool isValid(); 100 bool isValid();
94 101
102 static void apply(LLWaterParamSet * newWater, LLUUID *newWaterNormal, LLWLParamSet *newSky, WLScope scope);
95 103
96 protected: 104private:
97
98 // Restart the timer for temporarily ignoring settings.
99 static void restartIgnoreTimer();
100
101 // Returns true if the ignore timer has expired (i.e. new settings
102 // should not be ignored anymore).
103 static bool ignoreTimerHasExpired();
104
105
106 private:
107
108 static WindlightMessage* sMostRecent;
109 static LLTimer* sIgnoreTimer; 105 static LLTimer* sIgnoreTimer;
110 static bool sIgnoreRegion; 106 static bool sIgnoreRegion;
111 107
112 Meta7WindlightPacket* mPacket; 108 Meta7WindlightPacket* mPacket;
113 LLWaterParamSet* mWater; 109 static LLWaterParamSet* mWater;
114 LLWLParamSet* mSky; 110 static LLWLParamSet* mSky;
115 LLUUID* mWaterNormal; 111 static LLUUID* mWaterNormal;
116 bool mIsValid; 112 bool mIsValid;
117 113
114 // Callback when the user interacts with the notification.
115 static bool applyCallback(const LLSD& notification, const LLSD& response);
116
118 // Converts the message's raw bytes into a Meta7WindlightPacket. 117 // Converts the message's raw bytes into a Meta7WindlightPacket.
119 void process_packet( char* buf ); 118 void process_packet( char* buf );
120 119
@@ -124,6 +123,15 @@ class WindlightMessage
124 // Constructs a LLWLParamSet from the Meta7WindlightPacket. 123 // Constructs a LLWLParamSet from the Meta7WindlightPacket.
125 void process_sky(); 124 void process_sky();
126 125
126 // Restart the timer for temporarily ignoring settings.
127 static void restartIgnoreTimer();
128
129 // Returns true if the ignore timer has expired (i.e. new settings
130 // should not be ignored anymore).
131 static bool ignoreTimerHasExpired();
132
133 static void mergeWaterSets(LLWaterParamSet* thisSet, LLWaterParamSet* oldSet);
134 static void mergeWLSets(LLWLParamSet* thisSet, LLWLParamSet* oldSet);
127}; 135};
128 136
129#endif 137#endif
diff --git a/linden/indra/newview/llflexibleobject.cpp b/linden/indra/newview/llflexibleobject.cpp
index 8f2c6d5..ad4341c 100644
--- a/linden/indra/newview/llflexibleobject.cpp
+++ b/linden/indra/newview/llflexibleobject.cpp
@@ -233,9 +233,6 @@ void LLVolumeImplFlexible::setAttributesOfAllSections(LLVector3* inScale)
233 mSection[0].mVelocity.setVec(0,0,0); 233 mSection[0].mVelocity.setVec(0,0,0);
234 mSection[0].mAxisRotation.setQuat(begin_rot,0,0,1); 234 mSection[0].mAxisRotation.setQuat(begin_rot,0,0,1);
235 235
236 LLVector3 parentSectionPosition = mSection[0].mPosition;
237 LLVector3 last_direction = mSection[0].mDirection;
238
239 remapSections(mSection, mInitializedRes, mSection, mSimulateRes); 236 remapSections(mSection, mInitializedRes, mSection, mSimulateRes);
240 mInitializedRes = mSimulateRes; 237 mInitializedRes = mSimulateRes;
241 238
diff --git a/linden/indra/newview/llfloateractivespeakers.cpp b/linden/indra/newview/llfloateractivespeakers.cpp
index 4af21b6..1016e1e 100644
--- a/linden/indra/newview/llfloateractivespeakers.cpp
+++ b/linden/indra/newview/llfloateractivespeakers.cpp
@@ -1010,7 +1010,7 @@ void LLSpeakerMgr::update(BOOL resort_ok)
1010 LLUUID speaker_id = speaker_it->first; 1010 LLUUID speaker_id = speaker_it->first;
1011 LLSpeaker* speakerp = speaker_it->second; 1011 LLSpeaker* speakerp = speaker_it->second;
1012 1012
1013 speaker_map_t::iterator cur_speaker_it = speaker_it++; 1013 speaker_it++;
1014 1014
1015 if (voice_channel_active && gVoiceClient->getVoiceEnabled(speaker_id)) 1015 if (voice_channel_active && gVoiceClient->getVoiceEnabled(speaker_id))
1016 { 1016 {
diff --git a/linden/indra/newview/llfloaterbeacons.cpp b/linden/indra/newview/llfloaterbeacons.cpp
index aa89780..7c40931 100644
--- a/linden/indra/newview/llfloaterbeacons.cpp
+++ b/linden/indra/newview/llfloaterbeacons.cpp
@@ -54,6 +54,7 @@ LLFloaterBeacons::LLFloaterBeacons(const LLSD& seed)
54 LLPipeline::setRenderScriptedTouchBeacons(gSavedSettings.getBOOL("scripttouchbeacon")); 54 LLPipeline::setRenderScriptedTouchBeacons(gSavedSettings.getBOOL("scripttouchbeacon"));
55 LLPipeline::setRenderScriptedBeacons( gSavedSettings.getBOOL("scriptsbeacon")); 55 LLPipeline::setRenderScriptedBeacons( gSavedSettings.getBOOL("scriptsbeacon"));
56 LLPipeline::setRenderPhysicalBeacons( gSavedSettings.getBOOL("physicalbeacon")); 56 LLPipeline::setRenderPhysicalBeacons( gSavedSettings.getBOOL("physicalbeacon"));
57 LLPipeline::setRenderMOAPBeacons( gSavedSettings.getBOOL("moapbeacon"));
57 LLPipeline::setRenderSoundBeacons( gSavedSettings.getBOOL("soundsbeacon")); 58 LLPipeline::setRenderSoundBeacons( gSavedSettings.getBOOL("soundsbeacon"));
58 LLPipeline::setRenderParticleBeacons( gSavedSettings.getBOOL("particlesbeacon")); 59 LLPipeline::setRenderParticleBeacons( gSavedSettings.getBOOL("particlesbeacon"));
59 LLPipeline::setRenderHighlights( gSavedSettings.getBOOL("renderhighlights")); 60 LLPipeline::setRenderHighlights( gSavedSettings.getBOOL("renderhighlights"));
@@ -67,6 +68,7 @@ BOOL LLFloaterBeacons::postBuild()
67 childSetCommitCallback("physical", onClickUICheck, this); 68 childSetCommitCallback("physical", onClickUICheck, this);
68 childSetCommitCallback("sounds", onClickUICheck, this); 69 childSetCommitCallback("sounds", onClickUICheck, this);
69 childSetCommitCallback("particles", onClickUICheck, this); 70 childSetCommitCallback("particles", onClickUICheck, this);
71 childSetCommitCallback("moap", onClickUICheck, this);
70 childSetCommitCallback("highlights", onClickUICheck, this); 72 childSetCommitCallback("highlights", onClickUICheck, this);
71 childSetCommitCallback("beacons", onClickUICheck, this); 73 childSetCommitCallback("beacons", onClickUICheck, this);
72 return TRUE; 74 return TRUE;
@@ -132,6 +134,7 @@ void LLFloaterBeacons::onClickUICheck(LLUICtrl *ctrl, void* data)
132 else if(name == "physical") LLPipeline::setRenderPhysicalBeacons(check->get()); 134 else if(name == "physical") LLPipeline::setRenderPhysicalBeacons(check->get());
133 else if(name == "sounds") LLPipeline::setRenderSoundBeacons(check->get()); 135 else if(name == "sounds") LLPipeline::setRenderSoundBeacons(check->get());
134 else if(name == "particles") LLPipeline::setRenderParticleBeacons(check->get()); 136 else if(name == "particles") LLPipeline::setRenderParticleBeacons(check->get());
137 else if(name == "moap") LLPipeline::setRenderMOAPBeacons(check->get());
135 else if(name == "highlights") 138 else if(name == "highlights")
136 { 139 {
137 LLPipeline::toggleRenderHighlights(NULL); 140 LLPipeline::toggleRenderHighlights(NULL);
diff --git a/linden/indra/newview/llfloaterbuildoptions.cpp b/linden/indra/newview/llfloaterbuildoptions.cpp
index 8c6c5f3..b6c15b6 100644
--- a/linden/indra/newview/llfloaterbuildoptions.cpp
+++ b/linden/indra/newview/llfloaterbuildoptions.cpp
@@ -115,6 +115,9 @@ BOOL LLFloaterBuildOptions::postBuild()
115 getChild<LLTextureCtrl>("texture control")->setImageAssetID(LLUUID(gSavedPerAccountSettings.getString("BuildPrefs_Texture"))); 115 getChild<LLTextureCtrl>("texture control")->setImageAssetID(LLUUID(gSavedPerAccountSettings.getString("BuildPrefs_Texture")));
116 116
117 childSetValue("BuildPrefsRenderHighlight_toggle", gSavedSettings.getBOOL("RenderHighlightSelections") ); 117 childSetValue("BuildPrefsRenderHighlight_toggle", gSavedSettings.getBOOL("RenderHighlightSelections") );
118 childSetValue("BuildPrefsRenderHidden_toggle", gSavedSettings.getBOOL("RenderHiddenSelections") );
119 childSetValue("BuildPrefsRenderLightRadius_toggle", gSavedSettings.getBOOL("RenderLightRadius") );
120 childSetValue("BuildPrefsShowSelectionBeam_toggle", gSavedSettings.getBOOL("ShowSelectionBeam") );
118 childSetValue("grouplandrez", gSavedSettings.getBOOL("RezWithLandGroup") ); 121 childSetValue("grouplandrez", gSavedSettings.getBOOL("RezWithLandGroup") );
119 childSetValue("GridSubUnit", gSavedSettings.getBOOL("GridSubUnit") ); 122 childSetValue("GridSubUnit", gSavedSettings.getBOOL("GridSubUnit") );
120 childSetValue("GridCrossSection", gSavedSettings.getBOOL("GridCrossSections") ); 123 childSetValue("GridCrossSection", gSavedSettings.getBOOL("GridCrossSections") );
@@ -293,6 +296,17 @@ void LLFloaterBuildOptions::apply()
293 LLSelectMgr::sRenderSelectionHighlights = !LLSelectMgr::sRenderSelectionHighlights; 296 LLSelectMgr::sRenderSelectionHighlights = !LLSelectMgr::sRenderSelectionHighlights;
294 gSavedSettings.setBOOL("RenderHighlightSelections", LLSelectMgr::sRenderSelectionHighlights); 297 gSavedSettings.setBOOL("RenderHighlightSelections", LLSelectMgr::sRenderSelectionHighlights);
295 } 298 }
299 if (gSavedSettings.getBOOL("RenderHiddenSelections") != (BOOL)(childGetValue("BuildPrefsRenderHidden_toggle").asBoolean()))
300 {
301 LLSelectMgr::sRenderHiddenSelections = !LLSelectMgr::sRenderHiddenSelections;
302 gSavedSettings.setBOOL("RenderHiddenSelections", LLSelectMgr::sRenderHiddenSelections);
303 }
304 if (gSavedSettings.getBOOL("RenderLightRadius") != (BOOL)(childGetValue("BuildPrefsRenderLightRadius_toggle").asBoolean()))
305 {
306 LLSelectMgr::sRenderLightRadius = !LLSelectMgr::sRenderLightRadius;
307 gSavedSettings.setBOOL("RenderLightRadius", LLSelectMgr::sRenderLightRadius);
308 }
309 gSavedSettings.setBOOL("ShowSelectionBeam", childGetValue("BuildPrefsShowSelectionBeam_toggle").asBoolean() );
296 310
297 gSavedSettings.setBOOL("RezWithLandGroup", childGetValue("grouplandrez").asBoolean() ); 311 gSavedSettings.setBOOL("RezWithLandGroup", childGetValue("grouplandrez").asBoolean() );
298 gSavedSettings.setBOOL("GridSubUnit", childGetValue("GridSubUnit").asBoolean() ); 312 gSavedSettings.setBOOL("GridSubUnit", childGetValue("GridSubUnit").asBoolean() );
@@ -340,6 +354,9 @@ void LLFloaterBuildOptions::reset()
340 mBuildTextureUUID = (LLUUID)gSavedPerAccountSettings.getControl("BuildPrefs_Texture")->getDefault().asString(); 354 mBuildTextureUUID = (LLUUID)gSavedPerAccountSettings.getControl("BuildPrefs_Texture")->getDefault().asString();
341 355
342 childSetValue("BuildPrefsRenderHighlight_toggle", gSavedSettings.getControl("RenderHighlightSelections")->getDefault() ); 356 childSetValue("BuildPrefsRenderHighlight_toggle", gSavedSettings.getControl("RenderHighlightSelections")->getDefault() );
357 childSetValue("BuildPrefsRenderHidden_toggle", gSavedSettings.getControl("RenderHiddenSelections")->getDefault() );
358 childSetValue("BuildPrefsRenderLightRadius_toggle", gSavedSettings.getControl("RenderLightRadius")->getDefault() );
359 childSetValue("BuildPrefsShowSelectionBeam_toggle", gSavedSettings.getControl("ShowSelectionBeam")->getDefault() );
343 childSetValue("grouplandrez", gSavedSettings.getControl("RezWithLandGroup")->getDefault() ); 360 childSetValue("grouplandrez", gSavedSettings.getControl("RezWithLandGroup")->getDefault() );
344 childSetValue("GridSubUnit", gSavedSettings.getControl("GridSubUnit")->getDefault() ); 361 childSetValue("GridSubUnit", gSavedSettings.getControl("GridSubUnit")->getDefault() );
345 childSetValue("GridCrossSection", gSavedSettings.getControl("GridCrossSections")->getDefault() ); 362 childSetValue("GridCrossSection", gSavedSettings.getControl("GridCrossSections")->getDefault() );
diff --git a/linden/indra/newview/llfloaterchat.cpp b/linden/indra/newview/llfloaterchat.cpp
index f1749ac..5a168a5 100644
--- a/linden/indra/newview/llfloaterchat.cpp
+++ b/linden/indra/newview/llfloaterchat.cpp
@@ -364,7 +364,7 @@ void LLFloaterChat::addChatHistory(const LLChat& chat, bool log_to_file)
364 { 364 {
365 // desaturate muted chat 365 // desaturate muted chat
366 LLColor4 muted_color = lerp(color, LLColor4::grey, 0.5f); 366 LLColor4 muted_color = lerp(color, LLColor4::grey, 0.5f);
367 add_timestamped_line(history_editor_with_mute, chat, color); 367 add_timestamped_line(history_editor_with_mute, chat, muted_color);
368 } 368 }
369 369
370 // add objects as transient speakers that can be muted 370 // add objects as transient speakers that can be muted
diff --git a/linden/indra/newview/llfloaterenvsettings.cpp b/linden/indra/newview/llfloaterenvsettings.cpp
index 801ff49..2cb1988 100644
--- a/linden/indra/newview/llfloaterenvsettings.cpp
+++ b/linden/indra/newview/llfloaterenvsettings.cpp
@@ -291,21 +291,6 @@ void LLFloaterEnvSettings::onOpenWLManager(void* userData)
291 WLFloaterManager::show(); 291 WLFloaterManager::show();
292} 292}
293 293
294void LLFloaterEnvSettings::onSubmitWindlight(void* userData)
295{
296 Meta7WindlightPacket * wl = new Meta7WindlightPacket();
297
298 LLWaterParamManager * param_mgr = LLWaterParamManager::instance();
299 wl->reflectionWaveletScale.X = param_mgr->mNormalScale.mX;
300 wl->reflectionWaveletScale.Y = param_mgr->mNormalScale.mY;
301 wl->reflectionWaveletScale.Z = param_mgr->mNormalScale.mZ;
302
303
304 std::vector<std::string> strings;
305 strings.push_back((char*)wl);
306 send_generic_message("Windlight", strings);
307}
308
309void LLFloaterEnvSettings::onUseEstateTime(void* userData) 294void LLFloaterEnvSettings::onUseEstateTime(void* userData)
310{ 295{
311 if(LLFloaterWindLight::isOpen()) 296 if(LLFloaterWindLight::isOpen())
diff --git a/linden/indra/newview/llfloaterjoystick.cpp b/linden/indra/newview/llfloaterjoystick.cpp
index fd39621..b96af5b 100644
--- a/linden/indra/newview/llfloaterjoystick.cpp
+++ b/linden/indra/newview/llfloaterjoystick.cpp
@@ -100,7 +100,6 @@ BOOL LLFloaterJoystick::postBuild()
100 if (child) 100 if (child)
101 { 101 {
102 LLRect r = child->getRect(); 102 LLRect r = child->getRect();
103 LLRect f = getRect();
104 rect = LLRect(350, r.mTop, r.mRight + 200, 0); 103 rect = LLRect(350, r.mTop, r.mRight + 200, 0);
105 } 104 }
106 105
diff --git a/linden/indra/newview/llfloatermediabrowser.cpp b/linden/indra/newview/llfloatermediabrowser.cpp
index 54ffc0f..ed1ec42 100644
--- a/linden/indra/newview/llfloatermediabrowser.cpp
+++ b/linden/indra/newview/llfloatermediabrowser.cpp
@@ -54,6 +54,7 @@
54#include "llviewerparcelmedia.h" 54#include "llviewerparcelmedia.h"
55#include "llcombobox.h" 55#include "llcombobox.h"
56 56
57#include "hippogridmanager.h"
57 58
58// TEMP 59// TEMP
59#include "llsdutil.h" 60#include "llsdutil.h"
@@ -157,7 +158,7 @@ void LLFloaterMediaBrowser::buildURLHistory()
157 158
158std::string LLFloaterMediaBrowser::getSupportURL() 159std::string LLFloaterMediaBrowser::getSupportURL()
159{ 160{
160 return getString("support_page_url"); 161 return gHippoGridManager->getConnectedGrid()->getSupportURL();
161} 162}
162void LLFloaterMediaBrowser::onClose(bool app_quitting) 163void LLFloaterMediaBrowser::onClose(bool app_quitting)
163{ 164{
diff --git a/linden/indra/newview/llfloatertools.cpp b/linden/indra/newview/llfloatertools.cpp
index e22de66..2bf4b31 100644
--- a/linden/indra/newview/llfloatertools.cpp
+++ b/linden/indra/newview/llfloatertools.cpp
@@ -393,6 +393,7 @@ BOOL LLFloaterTools::postBuild()
393 mStatusText["rotate"] = getString("status_rotate"); 393 mStatusText["rotate"] = getString("status_rotate");
394 mStatusText["scale"] = getString("status_scale"); 394 mStatusText["scale"] = getString("status_scale");
395 mStatusText["move"] = getString("status_move"); 395 mStatusText["move"] = getString("status_move");
396 mStatusText["selectface"] = getString("status_selectface");
396 mStatusText["align"] = getString("status_align"); 397 mStatusText["align"] = getString("status_align");
397 mStatusText["modifyland"] = getString("status_modifyland"); 398 mStatusText["modifyland"] = getString("status_modifyland");
398 mStatusText["camera"] = getString("status_camera"); 399 mStatusText["camera"] = getString("status_camera");
diff --git a/linden/indra/newview/llfloaterwater.cpp b/linden/indra/newview/llfloaterwater.cpp
index 782c56e..9dd3aab 100644
--- a/linden/indra/newview/llfloaterwater.cpp
+++ b/linden/indra/newview/llfloaterwater.cpp
@@ -1,11 +1,11 @@
1/** 1/**
2 * @file llfloaterwater.cpp 2 * @file llfloaterwater.cpp
3 * @brief LLFloaterWater class definition 3 * @brief LLFloaterWater class definition
4 * 4 *
5 * $LicenseInfo:firstyear=2007&license=viewergpl$ 5 * $LicenseInfo:firstyear=2007&license=viewergpl$
6 * 6 *
7 * Copyright (c) 2007-2009, Linden Research, Inc. 7 * Copyright (c) 2007-2009, Linden Research, Inc.
8 * 8 *
9 * Second Life Viewer Source Code 9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab 10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0 11 * to you under the terms of the GNU General Public License, version 2.0
@@ -13,17 +13,17 @@
13 * ("Other License"), formally executed by you and Linden Lab. Terms of 13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or 14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 * 16 *
17 * There are special exceptions to the terms and conditions of the GPL as 17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception 18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or 19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at 20 * online at
21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception 21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
22 * 22 *
23 * By copying, modifying or distributing this software, you acknowledge 23 * By copying, modifying or distributing this software, you acknowledge
24 * that you have read and understood your obligations described above, 24 * that you have read and understood your obligations described above,
25 * and agree to abide by those obligations. 25 * and agree to abide by those obligations.
26 * 26 *
27 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO 27 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
28 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, 28 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
29 * COMPLETENESS OR PERFORMANCE. 29 * COMPLETENESS OR PERFORMANCE.
@@ -62,6 +62,7 @@
62 62
63#include "llwaterparamset.h" 63#include "llwaterparamset.h"
64#include "llwaterparammanager.h" 64#include "llwaterparammanager.h"
65#include "llwlparammanager.h"
65#include "llpostprocess.h" 66#include "llpostprocess.h"
66 67
67#include "wlfloaterwindlightsend.h" 68#include "wlfloaterwindlightsend.h"
@@ -75,15 +76,15 @@ std::set<std::string> LLFloaterWater::sDefaultPresets;
75LLFloaterWater::LLFloaterWater() : LLFloater(std::string("water floater")) 76LLFloaterWater::LLFloaterWater() : LLFloater(std::string("water floater"))
76{ 77{
77 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_water.xml"); 78 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_water.xml");
78 79
79 // add the combo boxes 80 // add the combo boxes
80 LLComboBox* comboBox = getChild<LLComboBox>("WaterPresetsCombo"); 81 LLComboBox* comboBox = getChild<LLComboBox>("WaterPresetsCombo");
81 82
82 if(comboBox != NULL) { 83 if(comboBox != NULL) {
83 84
84 std::map<std::string, LLWaterParamSet>::iterator mIt = 85 std::map<std::string, LLWaterParamSet>::iterator mIt =
85 LLWaterParamManager::instance()->mParamList.begin(); 86 LLWaterParamManager::instance()->mParamList.begin();
86 for(; mIt != LLWaterParamManager::instance()->mParamList.end(); mIt++) 87 for(; mIt != LLWaterParamManager::instance()->mParamList.end(); mIt++)
87 { 88 {
88 comboBox->add(mIt->first); 89 comboBox->add(mIt->first);
89 } 90 }
@@ -117,7 +118,7 @@ void LLFloaterWater::initCallbacks(void) {
117 initHelpBtn("WaterFogColorHelp", "HelpWaterFogColor"); 118 initHelpBtn("WaterFogColorHelp", "HelpWaterFogColor");
118 initHelpBtn("WaterFogDensityHelp", "HelpWaterFogDensity"); 119 initHelpBtn("WaterFogDensityHelp", "HelpWaterFogDensity");
119 initHelpBtn("WaterUnderWaterFogModHelp", "HelpUnderWaterFogMod"); 120 initHelpBtn("WaterUnderWaterFogModHelp", "HelpUnderWaterFogMod");
120 initHelpBtn("WaterGlowHelp", "HelpWaterGlow"); 121 initHelpBtn("WaterGlowHelp", "HelpWaterGlow");
121 initHelpBtn("WaterNormalScaleHelp", "HelpWaterNormalScale"); 122 initHelpBtn("WaterNormalScaleHelp", "HelpWaterNormalScale");
122 initHelpBtn("WaterFresnelScaleHelp", "HelpWaterFresnelScale"); 123 initHelpBtn("WaterFresnelScaleHelp", "HelpWaterFresnelScale");
123 initHelpBtn("WaterFresnelOffsetHelp", "HelpWaterFresnelOffset"); 124 initHelpBtn("WaterFresnelOffsetHelp", "HelpWaterFresnelOffset");
@@ -134,7 +135,7 @@ void LLFloaterWater::initCallbacks(void) {
134 135
135 childSetCommitCallback("WaterFogColor", onWaterFogColorMoved, &param_mgr->mFogColor); 136 childSetCommitCallback("WaterFogColor", onWaterFogColorMoved, &param_mgr->mFogColor);
136 137
137 // 138 //
138 childSetCommitCallback("WaterGlow", onColorControlAMoved, &param_mgr->mFogColor); 139 childSetCommitCallback("WaterGlow", onColorControlAMoved, &param_mgr->mFogColor);
139 140
140 // fog density 141 // fog density
@@ -212,11 +213,11 @@ bool LLFloaterWater::newPromptCallback(const LLSD& notification, const LLSD& res
212 213
213 // add the current parameters to the list 214 // add the current parameters to the list
214 // see if it's there first 215 // see if it's there first
215 std::map<std::string, LLWaterParamSet>::iterator mIt = 216 std::map<std::string, LLWaterParamSet>::iterator mIt =
216 param_mgr->mParamList.find(text); 217 param_mgr->mParamList.find(text);
217 218
218 // if not there, add a new one 219 // if not there, add a new one
219 if(mIt == param_mgr->mParamList.end()) 220 if(mIt == param_mgr->mParamList.end())
220 { 221 {
221 param_mgr->addParamSet(text, param_mgr->mCurParams); 222 param_mgr->addParamSet(text, param_mgr->mCurParams);
222 comboBox->add(text); 223 comboBox->add(text);
@@ -227,8 +228,8 @@ bool LLFloaterWater::newPromptCallback(const LLSD& notification, const LLSD& res
227 param_mgr->savePreset(text); 228 param_mgr->savePreset(text);
228 229
229 // otherwise, send a message to the user 230 // otherwise, send a message to the user
230 } 231 }
231 else 232 else
232 { 233 {
233 LLNotifications::instance().add("ExistsWaterPresetAlert"); 234 LLNotifications::instance().add("ExistsWaterPresetAlert");
234 } 235 }
@@ -261,13 +262,13 @@ void LLFloaterWater::syncMenu()
261 colCtrl->set(col); 262 colCtrl->set(col);
262 263
263 // fog and wavelets 264 // fog and wavelets
264 param_mgr->mFogDensity.mExp = 265 param_mgr->mFogDensity.mExp =
265 log(current_params.getFloat(param_mgr->mFogDensity.mName, err)) / 266 log(current_params.getFloat(param_mgr->mFogDensity.mName, err)) /
266 log(param_mgr->mFogDensity.mBase); 267 log(param_mgr->mFogDensity.mBase);
267 param_mgr->setDensitySliderValue(param_mgr->mFogDensity.mExp); 268 param_mgr->setDensitySliderValue(param_mgr->mFogDensity.mExp);
268 childSetValue("WaterFogDensity", param_mgr->mFogDensity.mExp); 269 childSetValue("WaterFogDensity", param_mgr->mFogDensity.mExp);
269 270
270 param_mgr->mUnderWaterFogMod.mX = 271 param_mgr->mUnderWaterFogMod.mX =
271 current_params.getFloat(param_mgr->mUnderWaterFogMod.mName, err); 272 current_params.getFloat(param_mgr->mUnderWaterFogMod.mName, err);
272 childSetValue("WaterUnderWaterFogMod", param_mgr->mUnderWaterFogMod.mX); 273 childSetValue("WaterUnderWaterFogMod", param_mgr->mUnderWaterFogMod.mX);
273 274
@@ -433,14 +434,14 @@ void LLFloaterWater::onColorControlRMoved(LLUICtrl* ctrl, void* userData)
433 colorControl->mR = sldrCtrl->getValueF32(); 434 colorControl->mR = sldrCtrl->getValueF32();
434 435
435 // move i if it's the max 436 // move i if it's the max
436 if(colorControl->mR >= colorControl->mG 437 if(colorControl->mR >= colorControl->mG
437 && colorControl->mR >= colorControl->mB 438 && colorControl->mR >= colorControl->mB
438 && colorControl->mHasSliderName) 439 && colorControl->mHasSliderName)
439 { 440 {
440 colorControl->mI = colorControl->mR; 441 colorControl->mI = colorControl->mR;
441 std::string name = colorControl->mSliderName; 442 std::string name = colorControl->mSliderName;
442 name.append("I"); 443 name.append("I");
443 444
444 sWaterMenu->childSetValue(name, colorControl->mR); 445 sWaterMenu->childSetValue(name, colorControl->mR);
445 } 446 }
446 447
@@ -457,7 +458,7 @@ void LLFloaterWater::onColorControlGMoved(LLUICtrl* ctrl, void* userData)
457 colorControl->mG = sldrCtrl->getValueF32(); 458 colorControl->mG = sldrCtrl->getValueF32();
458 459
459 // move i if it's the max 460 // move i if it's the max
460 if(colorControl->mG >= colorControl->mR 461 if(colorControl->mG >= colorControl->mR
461 && colorControl->mG >= colorControl->mB 462 && colorControl->mG >= colorControl->mB
462 && colorControl->mHasSliderName) 463 && colorControl->mHasSliderName)
463 { 464 {
@@ -517,9 +518,9 @@ void LLFloaterWater::onColorControlIMoved(LLUICtrl* ctrl, void* userData)
517 WaterColorControl * colorControl = static_cast<WaterColorControl *>(userData); 518 WaterColorControl * colorControl = static_cast<WaterColorControl *>(userData);
518 519
519 colorControl->mI = sldrCtrl->getValueF32(); 520 colorControl->mI = sldrCtrl->getValueF32();
520 521
521 // only for sliders where we pass a name 522 // only for sliders where we pass a name
522 if(colorControl->mHasSliderName) 523 if(colorControl->mHasSliderName)
523 { 524 {
524 // set it to the top 525 // set it to the top
525 F32 maxVal = std::max(std::max(colorControl->mR, colorControl->mG), colorControl->mB); 526 F32 maxVal = std::max(std::max(colorControl->mR, colorControl->mG), colorControl->mB);
@@ -541,7 +542,7 @@ void LLFloaterWater::onColorControlIMoved(LLUICtrl* ctrl, void* userData)
541 colorControl->mR = 0; 542 colorControl->mR = 0;
542 colorControl->mG = 0; 543 colorControl->mG = 0;
543 colorControl->mB = 0; 544 colorControl->mB = 0;
544 545
545 // if all at the start 546 // if all at the start
546 // set them all to the intensity 547 // set them all to the intensity
547 } 548 }
@@ -597,7 +598,7 @@ void LLFloaterWater::onFloatControlMoved(LLUICtrl* ctrl, void* userData)
597void LLFloaterWater::onWaterFogColorMoved(LLUICtrl* ctrl, void* userData) 598void LLFloaterWater::onWaterFogColorMoved(LLUICtrl* ctrl, void* userData)
598{ 599{
599 LLColorSwatchCtrl* swatch = static_cast<LLColorSwatchCtrl*>(ctrl); 600 LLColorSwatchCtrl* swatch = static_cast<LLColorSwatchCtrl*>(ctrl);
600 WaterColorControl * colorControl = static_cast<WaterColorControl *>(userData); 601 WaterColorControl * colorControl = static_cast<WaterColorControl *>(userData);
601 *colorControl = swatch->get(); 602 *colorControl = swatch->get();
602 603
603 colorControl->update(LLWaterParamManager::instance()->mCurParams); 604 colorControl->update(LLWaterParamManager::instance()->mCurParams);
@@ -652,7 +653,7 @@ void LLFloaterWater::onSavePreset(LLUICtrl* ctrl, void* userData)
652 } 653 }
653 654
654 if (ctrl->getValue().asString() == "save_inventory_item") 655 if (ctrl->getValue().asString() == "save_inventory_item")
655 { 656 {
656 // Check if this is already a notecard. 657 // Check if this is already a notecard.
657 if(LLWaterParamManager::instance()->mCurParams.mInventoryID.notNull()) 658 if(LLWaterParamManager::instance()->mCurParams.mInventoryID.notNull())
658 { 659 {
@@ -662,13 +663,13 @@ void LLFloaterWater::onSavePreset(LLUICtrl* ctrl, void* userData)
662 { 663 {
663 // Make sure we have a ".ww" extension. 664 // Make sure we have a ".ww" extension.
664 std::string name = comboBox->getSelectedItemLabel(); 665 std::string name = comboBox->getSelectedItemLabel();
665 if(name.length() > 2 && name.compare(name.length() - 3, 3, ".ww") != 0) 666 if(!LLWLParamManager::isWaterSettingsNotecard(name))
666 { 667 {
667 name += ".ww"; 668 name += ".ww";
668 } 669 }
669 LLPointer<KVFloaterWaterNotecardCreatedCallback> cb = new KVFloaterWaterNotecardCreatedCallback(); 670 LLPointer<KVFloaterWaterNotecardCreatedCallback> cb = new KVFloaterWaterNotecardCreatedCallback();
670 // Create a notecard and then save it. 671 // Create a notecard and then save it.
671 create_inventory_item(gAgent.getID(), 672 create_inventory_item(gAgent.getID(),
672 gAgent.getSessionID(), 673 gAgent.getSessionID(),
673 LLUUID::null, 674 LLUUID::null,
674 LLTransactionID::tnull, 675 LLTransactionID::tnull,
@@ -679,7 +680,7 @@ void LLFloaterWater::onSavePreset(LLUICtrl* ctrl, void* userData)
679 NOT_WEARABLE, 680 NOT_WEARABLE,
680 PERM_ITEM_UNRESTRICTED, 681 PERM_ITEM_UNRESTRICTED,
681 cb); 682 cb);
682 683
683 } 684 }
684 } 685 }
685 else if (ctrl->getValue().asString() == "send_to_server_item") 686 else if (ctrl->getValue().asString() == "send_to_server_item")
@@ -690,13 +691,13 @@ void LLFloaterWater::onSavePreset(LLUICtrl* ctrl, void* userData)
690 } 691 }
691 else 692 else
692 { 693 {
693 LLWaterParamManager::instance()->mCurParams.mName = 694 LLWaterParamManager::instance()->mCurParams.mName =
694 comboBox->getSelectedItemLabel(); 695 comboBox->getSelectedItemLabel();
695 696
696 // check to see if it's a default and shouldn't be overwritten 697 // check to see if it's a default and shouldn't be overwritten
697 std::set<std::string>::iterator sIt = sDefaultPresets.find( 698 std::set<std::string>::iterator sIt = sDefaultPresets.find(
698 comboBox->getSelectedItemLabel()); 699 comboBox->getSelectedItemLabel());
699 if(sIt != sDefaultPresets.end() && !gSavedSettings.getBOOL("WaterEditPresets")) 700 if(sIt != sDefaultPresets.end() && !gSavedSettings.getBOOL("WaterEditPresets"))
700 { 701 {
701 LLNotifications::instance().add("WLNoEditDefault"); 702 LLNotifications::instance().add("WLNoEditDefault");
702 return; 703 return;
@@ -710,7 +711,7 @@ bool LLFloaterWater::saveNotecardCallback(const LLSD& notification, const LLSD&
710{ 711{
711 S32 option = LLNotification::getSelectedOption(notification, response); 712 S32 option = LLNotification::getSelectedOption(notification, response);
712 // if they choose save, do it. Otherwise, don't do anything 713 // if they choose save, do it. Otherwise, don't do anything
713 if(option == 0) 714 if(option == 0)
714 { 715 {
715 LLWaterParamManager * param_mgr = LLWaterParamManager::instance(); 716 LLWaterParamManager * param_mgr = LLWaterParamManager::instance();
716 param_mgr->setParamSet(param_mgr->mCurParams.mName, param_mgr->mCurParams); 717 param_mgr->setParamSet(param_mgr->mCurParams.mName, param_mgr->mCurParams);
@@ -723,12 +724,12 @@ bool LLFloaterWater::saveAlertCallback(const LLSD& notification, const LLSD& res
723{ 724{
724 S32 option = LLNotification::getSelectedOption(notification, response); 725 S32 option = LLNotification::getSelectedOption(notification, response);
725 // if they choose save, do it. Otherwise, don't do anything 726 // if they choose save, do it. Otherwise, don't do anything
726 if(option == 0) 727 if(option == 0)
727 { 728 {
728 LLWaterParamManager * param_mgr = LLWaterParamManager::instance(); 729 LLWaterParamManager * param_mgr = LLWaterParamManager::instance();
729 730
730 param_mgr->setParamSet( 731 param_mgr->setParamSet(
731 param_mgr->mCurParams.mName, 732 param_mgr->mCurParams.mName,
732 param_mgr->mCurParams); 733 param_mgr->mCurParams);
733 734
734 // comment this back in to save to file 735 // comment this back in to save to file
@@ -755,38 +756,36 @@ bool LLFloaterWater::deleteAlertCallback(const LLSD& notification, const LLSD& r
755{ 756{
756 S32 option = LLNotification::getSelectedOption(notification, response); 757 S32 option = LLNotification::getSelectedOption(notification, response);
757 // if they choose delete, do it. Otherwise, don't do anything 758 // if they choose delete, do it. Otherwise, don't do anything
758 if(option == 0) 759 if(option == 0)
759 { 760 {
760 LLComboBox* combo_box = sWaterMenu->getChild<LLComboBox>("WaterPresetsCombo"); 761 LLComboBox* combo_box = sWaterMenu->getChild<LLComboBox>("WaterPresetsCombo");
761 LLFloaterDayCycle* day_cycle = NULL; 762 LLFloaterDayCycle* day_cycle = NULL;
762 LLComboBox* key_combo = NULL; 763 LLComboBox* key_combo = NULL;
763 LLMultiSliderCtrl* mult_sldr = NULL;
764 764
765 if(LLFloaterDayCycle::isOpen()) 765 if(LLFloaterDayCycle::isOpen())
766 { 766 {
767 day_cycle = LLFloaterDayCycle::instance(); 767 day_cycle = LLFloaterDayCycle::instance();
768 key_combo = day_cycle->getChild<LLComboBox>("WaterKeyPresets"); 768 key_combo = day_cycle->getChild<LLComboBox>("WaterKeyPresets");
769 mult_sldr = day_cycle->getChild<LLMultiSliderCtrl>("WaterDayCycleKeys");
770 } 769 }
771 770
772 std::string name = combo_box->getSelectedValue().asString(); 771 std::string name = combo_box->getSelectedValue().asString();
773 772
774 // check to see if it's a default and shouldn't be deleted 773 // check to see if it's a default and shouldn't be deleted
775 std::set<std::string>::iterator sIt = sDefaultPresets.find(name); 774 std::set<std::string>::iterator sIt = sDefaultPresets.find(name);
776 if(sIt != sDefaultPresets.end()) 775 if(sIt != sDefaultPresets.end())
777 { 776 {
778 LLNotifications::instance().add("WaterNoEditDefault"); 777 LLNotifications::instance().add("WaterNoEditDefault");
779 return false; 778 return false;
780 } 779 }
781 780
782 LLWaterParamManager::instance()->removeParamSet(name, true); 781 LLWaterParamManager::instance()->removeParamSet(name, true);
783 782
784 // remove and choose another 783 // remove and choose another
785 S32 new_index = combo_box->getCurrentIndex(); 784 S32 new_index = combo_box->getCurrentIndex();
786 785
787 combo_box->remove(name); 786 combo_box->remove(name);
788 787
789 if(key_combo != NULL) 788 if(key_combo != NULL)
790 { 789 {
791 key_combo->remove(name); 790 key_combo->remove(name);
792 791
@@ -795,12 +794,12 @@ bool LLFloaterWater::deleteAlertCallback(const LLSD& notification, const LLSD& r
795 } 794 }
796 795
797 // pick the previously selected index after delete 796 // pick the previously selected index after delete
798 if(new_index > 0) 797 if(new_index > 0)
799 { 798 {
800 new_index--; 799 new_index--;
801 } 800 }
802 801
803 if(combo_box->getItemCount() > 0) 802 if(combo_box->getItemCount() > 0)
804 { 803 {
805 combo_box->setCurrentByIndex(new_index); 804 combo_box->setCurrentByIndex(new_index);
806 } 805 }
@@ -812,12 +811,12 @@ bool LLFloaterWater::deleteAlertCallback(const LLSD& notification, const LLSD& r
812void LLFloaterWater::onChangePresetName(LLUICtrl* ctrl, void * userData) 811void LLFloaterWater::onChangePresetName(LLUICtrl* ctrl, void * userData)
813{ 812{
814 LLComboBox * combo_box = static_cast<LLComboBox*>(ctrl); 813 LLComboBox * combo_box = static_cast<LLComboBox*>(ctrl);
815 814
816 if(combo_box->getSimple() == "") 815 if(combo_box->getSimple() == "")
817 { 816 {
818 return; 817 return;
819 } 818 }
820 819
821 LLWaterParamManager::instance()->loadPreset( 820 LLWaterParamManager::instance()->loadPreset(
822 combo_box->getSelectedValue().asString()); 821 combo_box->getSelectedValue().asString());
823 sWaterMenu->syncMenu(); 822 sWaterMenu->syncMenu();
@@ -829,12 +828,12 @@ void LLFloaterWater::onClickNext(void* user_data)
829 LLWaterParamSet& currentParams = param_mgr->mCurParams; 828 LLWaterParamSet& currentParams = param_mgr->mCurParams;
830 829
831 // find place of current param 830 // find place of current param
832 std::map<std::string, LLWaterParamSet>::iterator mIt = 831 std::map<std::string, LLWaterParamSet>::iterator mIt =
833 param_mgr->mParamList.find(currentParams.mName); 832 param_mgr->mParamList.find(currentParams.mName);
834 833
835 // if at the end, loop 834 // if at the end, loop
836 std::map<std::string, LLWaterParamSet>::iterator last = param_mgr->mParamList.end(); --last; 835 std::map<std::string, LLWaterParamSet>::iterator last = param_mgr->mParamList.end(); --last;
837 if(mIt == last) 836 if(mIt == last)
838 { 837 {
839 mIt = param_mgr->mParamList.begin(); 838 mIt = param_mgr->mParamList.begin();
840 } 839 }
@@ -853,11 +852,11 @@ void LLFloaterWater::onClickPrev(void* user_data)
853 LLWaterParamSet & currentParams = param_mgr->mCurParams; 852 LLWaterParamSet & currentParams = param_mgr->mCurParams;
854 853
855 // find place of current param 854 // find place of current param
856 std::map<std::string, LLWaterParamSet>::iterator mIt = 855 std::map<std::string, LLWaterParamSet>::iterator mIt =
857 param_mgr->mParamList.find(currentParams.mName); 856 param_mgr->mParamList.find(currentParams.mName);
858 857
859 // if at the beginning, loop 858 // if at the beginning, loop
860 if(mIt == param_mgr->mParamList.begin()) 859 if(mIt == param_mgr->mParamList.begin())
861 { 860 {
862 std::map<std::string, LLWaterParamSet>::iterator last = param_mgr->mParamList.end(); --last; 861 std::map<std::string, LLWaterParamSet>::iterator last = param_mgr->mParamList.end(); --last;
863 mIt = last; 862 mIt = last;
diff --git a/linden/indra/newview/llfloaterwindlight.cpp b/linden/indra/newview/llfloaterwindlight.cpp
index 4937232..52d6e14 100644
--- a/linden/indra/newview/llfloaterwindlight.cpp
+++ b/linden/indra/newview/llfloaterwindlight.cpp
@@ -873,7 +873,7 @@ void LLFloaterWindLight::onSavePreset(LLUICtrl* ctrl, void* userData)
873 { 873 {
874 // Make sure we have a ".wl" extension. 874 // Make sure we have a ".wl" extension.
875 std::string name = comboBox->getSelectedItemLabel(); 875 std::string name = comboBox->getSelectedItemLabel();
876 if(name.length() > 2 && name.compare(name.length() - 3, 3, ".wl") != 0) 876 if(!LLWLParamManager::isSkySettingsNotecard(name))
877 { 877 {
878 name += ".wl"; 878 name += ".wl";
879 } 879 }
@@ -973,14 +973,12 @@ bool LLFloaterWindLight::deleteAlertCallback(const LLSD& notification, const LLS
973 "WLPresetsCombo"); 973 "WLPresetsCombo");
974 LLFloaterDayCycle* day_cycle = NULL; 974 LLFloaterDayCycle* day_cycle = NULL;
975 LLComboBox* key_combo = NULL; 975 LLComboBox* key_combo = NULL;
976 LLMultiSliderCtrl* mult_sldr = NULL;
977 976
978 if(LLFloaterDayCycle::isOpen()) 977 if(LLFloaterDayCycle::isOpen())
979 { 978 {
980 day_cycle = LLFloaterDayCycle::instance(); 979 day_cycle = LLFloaterDayCycle::instance();
981 key_combo = day_cycle->getChild<LLComboBox>( 980 key_combo = day_cycle->getChild<LLComboBox>(
982 "WLKeyPresets"); 981 "WLKeyPresets");
983 mult_sldr = day_cycle->getChild<LLMultiSliderCtrl>("WLDayCycleKeys");
984 } 982 }
985 983
986 std::string name(combo_box->getSelectedValue().asString()); 984 std::string name(combo_box->getSelectedValue().asString());
diff --git a/linden/indra/newview/llfolderview.cpp b/linden/indra/newview/llfolderview.cpp
index ce2b2b4..489a5d5 100644
--- a/linden/indra/newview/llfolderview.cpp
+++ b/linden/indra/newview/llfolderview.cpp
@@ -3767,12 +3767,6 @@ BOOL LLFolderView::handleKeyHere( KEY key, MASK mask )
3767 LLMenuGL::sMenuContainer->hideMenus(); 3767 LLMenuGL::sMenuContainer->hideMenus();
3768 } 3768 }
3769 3769
3770 LLView *item = NULL;
3771 if (getChildCount() > 0)
3772 {
3773 item = *(getChildList()->begin());
3774 }
3775
3776 switch( key ) 3770 switch( key )
3777 { 3771 {
3778 case KEY_F2: 3772 case KEY_F2:
diff --git a/linden/indra/newview/llgesturemgr.cpp b/linden/indra/newview/llgesturemgr.cpp
index 2258bc1..f806ccc 100644
--- a/linden/indra/newview/llgesturemgr.cpp
+++ b/linden/indra/newview/llgesturemgr.cpp
@@ -565,7 +565,7 @@ BOOL LLGestureManager::triggerAndReviseString(const std::string &utf8str, std::s
565 } 565 }
566 } 566 }
567 } 567 }
568 568
569 if(!gesture) 569 if(!gesture)
570 { 570 {
571 // This token doesn't match a gesture. Pass it through to the output. 571 // This token doesn't match a gesture. Pass it through to the output.
diff --git a/linden/indra/newview/llhoverview.cpp b/linden/indra/newview/llhoverview.cpp
index b4faf25..12479c1 100644
--- a/linden/indra/newview/llhoverview.cpp
+++ b/linden/indra/newview/llhoverview.cpp
@@ -546,14 +546,15 @@ void LLHoverView::updateText()
546 546
547 LLParcel* hover_parcel = LLViewerParcelMgr::getInstance()->getHoverParcel(); 547 LLParcel* hover_parcel = LLViewerParcelMgr::getInstance()->getHoverParcel();
548 LLUUID owner; 548 LLUUID owner;
549 S32 width = 0; 549 // Their use is commented out below. No doubt both will get deleted on a later clean up pass.
550 S32 height = 0; 550 //S32 width = 0;
551 //S32 height = 0;
551 552
552 if ( hover_parcel ) 553 if ( hover_parcel )
553 { 554 {
554 owner = hover_parcel->getOwnerID(); 555 owner = hover_parcel->getOwnerID();
555 width = S32(LLViewerParcelMgr::getInstance()->getHoverParcelWidth()); 556 // width = S32(LLViewerParcelMgr::getInstance()->getHoverParcelWidth());
556 height = S32(LLViewerParcelMgr::getInstance()->getHoverParcelHeight()); 557 // height = S32(LLViewerParcelMgr::getInstance()->getHoverParcelHeight());
557 } 558 }
558 559
559 // Line: "Land" 560 // Line: "Land"
diff --git a/linden/indra/newview/llinventorybridge.cpp b/linden/indra/newview/llinventorybridge.cpp
index eb2170a..6e6b39c 100644
--- a/linden/indra/newview/llinventorybridge.cpp
+++ b/linden/indra/newview/llinventorybridge.cpp
@@ -1439,7 +1439,6 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id,
1439 if(drop && accept) 1439 if(drop && accept)
1440 { 1440 {
1441 it = inventory_objects.begin(); 1441 it = inventory_objects.begin();
1442 InventoryObjectList::iterator first_it = inventory_objects.begin();
1443 LLMoveInv* move_inv = new LLMoveInv; 1442 LLMoveInv* move_inv = new LLMoveInv;
1444 move_inv->mObjectID = object_id; 1443 move_inv->mObjectID = object_id;
1445 move_inv->mCategoryID = category_id; 1444 move_inv->mCategoryID = category_id;
@@ -1922,24 +1921,11 @@ void LLFolderBridge::pasteFromClipboard()
1922 item = model->getItem(objects.get(i)); 1921 item = model->getItem(objects.get(i));
1923 if (item) 1922 if (item)
1924 { 1923 {
1925 copy_inventory_item( 1924 LLInvFVBridge::changeItemParent(
1926 gAgent.getID(), 1925 model,
1927 item->getPermissions().getOwner(), 1926 (LLViewerInventoryItem*)item,
1928 item->getUUID(), 1927 mUUID,
1929 parent_id, 1928 FALSE);
1930 std::string(),
1931 LLPointer<LLInventoryCallback>(NULL));
1932 LLInventoryCategory* cat = model->getCategory(item->getUUID());
1933 if(cat)
1934 {
1935 model->purgeDescendentsOf(mUUID);
1936 }
1937 LLInventoryObject* obj = model->getObject(item->getUUID());
1938 if(!obj) return;
1939 obj->removeFromServer();
1940 LLPreview::hide(item->getUUID());
1941 model->deleteObject(item->getUUID());
1942 model->notifyObservers();
1943 } 1929 }
1944 } 1930 }
1945 } 1931 }
@@ -3123,11 +3109,11 @@ void LLNotecardBridge::openItem()
3123 LLViewerInventoryItem* item = getItem(); 3109 LLViewerInventoryItem* item = getItem();
3124 if (item) 3110 if (item)
3125 { 3111 {
3126 if(isSkySetting()) 3112 if(LLWLParamManager::isSkySettingsNotecard(getName()))
3127 { 3113 {
3128 LLWLParamManager::instance()->loadPresetNotecard(item->getName(), item->getAssetUUID(), mUUID); 3114 LLWLParamManager::instance()->loadPresetNotecard(item->getName(), item->getAssetUUID(), mUUID);
3129 } 3115 }
3130 else if(isWaterSetting()) 3116 else if(LLWLParamManager::isWaterSettingsNotecard(getName()))
3131 { 3117 {
3132 LLWaterParamManager::instance()->loadPresetNotecard(item->getName(), item->getAssetUUID(), mUUID); 3118 LLWaterParamManager::instance()->loadPresetNotecard(item->getName(), item->getAssetUUID(), mUUID);
3133 } 3119 }
@@ -3158,13 +3144,13 @@ void LLNotecardBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
3158 else 3144 else
3159 { 3145 {
3160 3146
3161 if(isWindLight()) 3147 if(LLWLParamManager::isSettingsNotecard(getName()))
3162 { 3148 {
3163 if(isSkySetting()) 3149 if(LLWLParamManager::isSkySettingsNotecard(getName()))
3164 { 3150 {
3165 items.push_back(std::string("Use WindLight Settings")); 3151 items.push_back(std::string("Use WindLight Settings"));
3166 } 3152 }
3167 else if(isWaterSetting()) 3153 else if(LLWLParamManager::isWaterSettingsNotecard(getName()))
3168 { 3154 {
3169 items.push_back(std::string("Use WaterLight Settings")); 3155 items.push_back(std::string("Use WaterLight Settings"));
3170 } 3156 }
@@ -3221,11 +3207,11 @@ void LLNotecardBridge::performAction(LLFolderView* folder, LLInventoryModel* mod
3221 3207
3222LLUIImagePtr LLNotecardBridge::getIcon() const 3208LLUIImagePtr LLNotecardBridge::getIcon() const
3223{ 3209{
3224 if(isSkySetting()) 3210 if(LLWLParamManager::isSkySettingsNotecard(getName()))
3225 { 3211 {
3226 return LLUI::getUIImage("Inv_WindLight"); 3212 return LLUI::getUIImage("Inv_WindLight");
3227 } 3213 }
3228 else if(isWaterSetting()) 3214 else if(LLWLParamManager::isWaterSettingsNotecard(getName()))
3229 { 3215 {
3230 return LLUI::getUIImage("Inv_WaterLight"); 3216 return LLUI::getUIImage("Inv_WaterLight");
3231 } 3217 }
@@ -3235,20 +3221,6 @@ LLUIImagePtr LLNotecardBridge::getIcon() const
3235 } 3221 }
3236} 3222}
3237 3223
3238bool LLNotecardBridge::isSkySetting() const
3239{
3240 return (getName().length() > 2 && getName().compare(getName().length() - 3, 3, ".wl") == 0);
3241}
3242
3243bool LLNotecardBridge::isWaterSetting() const
3244{
3245 return (getName().length() > 2 && getName().compare(getName().length() - 3, 3, ".ww") == 0);
3246}
3247
3248bool LLNotecardBridge::isWindLight() const
3249{
3250 return (isSkySetting() || isWaterSetting());
3251}
3252 3224
3253// +=================================================+ 3225// +=================================================+
3254// | LLGestureBridge | 3226// | LLGestureBridge |
diff --git a/linden/indra/newview/llinventorybridge.h b/linden/indra/newview/llinventorybridge.h
index 5a53aa5..0318e6c 100644
--- a/linden/indra/newview/llinventorybridge.h
+++ b/linden/indra/newview/llinventorybridge.h
@@ -511,9 +511,6 @@ public:
511 virtual const std::string& getPrefix() { return sPrefix; } 511 virtual const std::string& getPrefix() { return sPrefix; }
512 512
513 virtual LLUIImagePtr getIcon() const; 513 virtual LLUIImagePtr getIcon() const;
514 bool isSkySetting() const;
515 bool isWaterSetting() const;
516 bool isWindLight() const;
517 virtual void openItem(); 514 virtual void openItem();
518 virtual void buildContextMenu(LLMenuGL& menu, U32 flags); 515 virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
519 virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action); 516 virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
diff --git a/linden/indra/newview/llinventorymodel.cpp b/linden/indra/newview/llinventorymodel.cpp
index 3f74965..8b98782 100644
--- a/linden/indra/newview/llinventorymodel.cpp
+++ b/linden/indra/newview/llinventorymodel.cpp
@@ -455,8 +455,6 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
455 void (*callback)(const LLSD&, void*), 455 void (*callback)(const LLSD&, void*),
456 void* user_data) 456 void* user_data)
457{ 457{
458 llassert_always(NULL != callback);
459
460 LLUUID id; 458 LLUUID id;
461 459
462 if(!isInventoryUsable()) 460 if(!isInventoryUsable())
@@ -464,7 +462,8 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
464 llwarns << "Inventory is broken." << llendl; 462 llwarns << "Inventory is broken." << llendl;
465 LLSD result; 463 LLSD result;
466 result["failure"] = true; 464 result["failure"] = true;
467 callback(result, user_data); 465 if (callback)
466 callback(result, user_data);
468 } 467 }
469 468
470 469
@@ -473,7 +472,8 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
473 LL_DEBUGS("Inventory") << "Attempt to create simstate category." << LL_ENDL; 472 LL_DEBUGS("Inventory") << "Attempt to create simstate category." << LL_ENDL;
474 LLSD result; 473 LLSD result;
475 result["failure"] = true; 474 result["failure"] = true;
476 callback(result, user_data); 475 if (callback)
476 callback(result, user_data);
477 } 477 }
478 478
479 id.generate(); 479 id.generate();
@@ -492,10 +492,8 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
492 name.assign(NEW_CATEGORY_NAME); 492 name.assign(NEW_CATEGORY_NAME);
493 } 493 }
494 494
495 if (user_data) // callback required for acked message. 495 if ((NULL != callback) && (NULL != user_data)) // callback required for acked message.
496 { 496 {
497
498
499 LLViewerRegion* viewer_region = gAgent.getRegion(); 497 LLViewerRegion* viewer_region = gAgent.getRegion();
500 498
501 if (!viewer_region->capabilitiesReceived()) 499 if (!viewer_region->capabilitiesReceived())
@@ -537,7 +535,10 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
537 { 535 {
538 // user_data is a LLCategoryCreate object instantiated in the calling 536 // user_data is a LLCategoryCreate object instantiated in the calling
539 // function - bug (or low memory - any leaks?). 537 // function - bug (or low memory - any leaks?).
540 llwarns << "NULL user_data" << llendl; 538 // Or, it might just be no problem, since passing the callback in the first place is optional.
539 // It's really up to the calling function to know what it passed to pass back to the callback.
540 if (callback)
541 llwarns << "NULL user_data" << llendl;
541 } 542 }
542 543
543 // Add the category to the internal representation 544 // Add the category to the internal representation
@@ -1211,7 +1212,6 @@ void LLInventoryModel::fetchInventoryResponder::result(const LLSD& content)
1211 item_array_t items; 1212 item_array_t items;
1212 update_map_t update; 1213 update_map_t update;
1213 S32 count = content["items"].size(); 1214 S32 count = content["items"].size();
1214 bool all_one_folder = true;
1215 LLUUID folder_id; 1215 LLUUID folder_id;
1216 // Does this loop ever execute more than once? 1216 // Does this loop ever execute more than once?
1217 for(S32 i = 0; i < count; ++i) 1217 for(S32 i = 0; i < count; ++i)
@@ -1244,10 +1244,6 @@ void LLInventoryModel::fetchInventoryResponder::result(const LLSD& content)
1244 { 1244 {
1245 folder_id = titem->getParentUUID(); 1245 folder_id = titem->getParentUUID();
1246 } 1246 }
1247 else
1248 {
1249 all_one_folder = false;
1250 }
1251 } 1247 }
1252 1248
1253 U32 changes = 0x0; 1249 U32 changes = 0x0;
@@ -2960,7 +2956,6 @@ bool LLInventoryModel::messageUpdateCore(LLMessageSystem* msg, bool account)
2960 item_array_t items; 2956 item_array_t items;
2961 update_map_t update; 2957 update_map_t update;
2962 S32 count = msg->getNumberOfBlocksFast(_PREHASH_InventoryData); 2958 S32 count = msg->getNumberOfBlocksFast(_PREHASH_InventoryData);
2963 bool all_one_folder = true;
2964 LLUUID folder_id; 2959 LLUUID folder_id;
2965 // Does this loop ever execute more than once? 2960 // Does this loop ever execute more than once?
2966 for(S32 i = 0; i < count; ++i) 2961 for(S32 i = 0; i < count; ++i)
@@ -2992,10 +2987,6 @@ bool LLInventoryModel::messageUpdateCore(LLMessageSystem* msg, bool account)
2992 { 2987 {
2993 folder_id = titem->getParentUUID(); 2988 folder_id = titem->getParentUUID();
2994 } 2989 }
2995 else
2996 {
2997 all_one_folder = false;
2998 }
2999 } 2990 }
3000 if(account) 2991 if(account)
3001 { 2992 {
diff --git a/linden/indra/newview/llmaniprotate.cpp b/linden/indra/newview/llmaniprotate.cpp
index 77c8bd5..fa5ab56 100644
--- a/linden/indra/newview/llmaniprotate.cpp
+++ b/linden/indra/newview/llmaniprotate.cpp
@@ -1652,7 +1652,6 @@ void LLManipRotate::highlightManipulators( S32 x, S32 y )
1652 return; 1652 return;
1653 } 1653 }
1654 1654
1655 LLQuaternion object_rot = first_object->getRenderRotation();
1656 LLVector3 rotation_center = gAgent.getPosAgentFromGlobal(mRotationCenter); 1655 LLVector3 rotation_center = gAgent.getPosAgentFromGlobal(mRotationCenter);
1657 LLVector3 mouse_dir_x; 1656 LLVector3 mouse_dir_x;
1658 LLVector3 mouse_dir_y; 1657 LLVector3 mouse_dir_y;
diff --git a/linden/indra/newview/llmanipscale.cpp b/linden/indra/newview/llmanipscale.cpp
index fe6bc26..f69dca4 100644
--- a/linden/indra/newview/llmanipscale.cpp
+++ b/linden/indra/newview/llmanipscale.cpp
@@ -1172,9 +1172,6 @@ void LLManipScale::dragFace( S32 x, S32 y )
1172 mInSnapRegime = FALSE; 1172 mInSnapRegime = FALSE;
1173 } 1173 }
1174 1174
1175 BOOL send_scale_update = FALSE;
1176 BOOL send_position_update = FALSE;
1177
1178 LLVector3 dir_agent; 1175 LLVector3 dir_agent;
1179 if( part_dir_local.mV[VX] ) 1176 if( part_dir_local.mV[VX] )
1180 { 1177 {
@@ -1191,8 +1188,6 @@ void LLManipScale::dragFace( S32 x, S32 y )
1191 stretchFace( 1188 stretchFace(
1192 projected_vec(drag_start_dir_f, dir_agent) + drag_start_center_agent, 1189 projected_vec(drag_start_dir_f, dir_agent) + drag_start_center_agent,
1193 projected_vec(drag_delta, dir_agent)); 1190 projected_vec(drag_delta, dir_agent));
1194 send_position_update = TRUE;
1195 send_scale_update = TRUE;
1196 1191
1197 mDragPointGlobal = drag_point_global; 1192 mDragPointGlobal = drag_point_global;
1198} 1193}
diff --git a/linden/indra/newview/llmaniptranslate.cpp b/linden/indra/newview/llmaniptranslate.cpp
index 7a7233e..b79c1a9 100644
--- a/linden/indra/newview/llmaniptranslate.cpp
+++ b/linden/indra/newview/llmaniptranslate.cpp
@@ -487,9 +487,6 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
487 } 487 }
488 } 488 }
489 489
490 // Throttle updates to 10 per second.
491 BOOL send_update = FALSE;
492
493 LLVector3 axis_f; 490 LLVector3 axis_f;
494 LLVector3d axis_d; 491 LLVector3d axis_d;
495 492
@@ -701,10 +698,7 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
701 LLVector3 new_position_local = selectNode->mSavedPositionLocal + (clamped_relative_move_f * objWorldRotation); 698 LLVector3 new_position_local = selectNode->mSavedPositionLocal + (clamped_relative_move_f * objWorldRotation);
702 699
703 // move and clamp root object first, before adjusting children 700 // move and clamp root object first, before adjusting children
704 if (new_position_local != old_position_local) 701
705 {
706 send_update = TRUE;
707 }
708 //RN: I forget, but we need to do this because of snapping which doesn't often result 702 //RN: I forget, but we need to do this because of snapping which doesn't often result
709 // in position changes even when the mouse moves 703 // in position changes even when the mouse moves
710 object->setPosition(new_position_local); 704 object->setPosition(new_position_local);
@@ -714,8 +708,6 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
714 708
715 if (selectNode->mIndividualSelection) 709 if (selectNode->mIndividualSelection)
716 { 710 {
717 send_update = FALSE;
718
719 // counter-translate child objects if we are moving the root as an individual 711 // counter-translate child objects if we are moving the root as an individual
720 object->resetChildrenPosition(old_position_local - new_position_local, TRUE) ; 712 object->resetChildrenPosition(old_position_local - new_position_local, TRUE) ;
721 } 713 }
@@ -752,7 +744,6 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
752 } 744 }
753 745
754 // PR: Only update if changed 746 // PR: Only update if changed
755 LLVector3d old_position_global = object->getPositionGlobal();
756 LLVector3 old_position_agent = object->getPositionAgent(); 747 LLVector3 old_position_agent = object->getPositionAgent();
757 LLVector3 new_position_agent = gAgent.getPosAgentFromGlobal(new_position_global); 748 LLVector3 new_position_agent = gAgent.getPosAgentFromGlobal(new_position_global);
758 if (object->isRootEdit()) 749 if (object->isRootEdit())
@@ -774,11 +765,6 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
774 { 765 {
775 // counter-translate child objects if we are moving the root as an individual 766 // counter-translate child objects if we are moving the root as an individual
776 object->resetChildrenPosition(old_position_agent - new_position_agent, TRUE) ; 767 object->resetChildrenPosition(old_position_agent - new_position_agent, TRUE) ;
777 send_update = FALSE;
778 }
779 else if (old_position_global != new_position_global)
780 {
781 send_update = TRUE;
782 } 768 }
783 } 769 }
784 selectNode->mLastPositionLocal = object->getPosition(); 770 selectNode->mLastPositionLocal = object->getPosition();
@@ -1302,7 +1288,7 @@ void LLManipTranslate::renderSnapGuides()
1302 // add in off-axis offset 1288 // add in off-axis offset
1303 tick_start += (mSnapOffsetAxis * mSnapOffsetMeters); 1289 tick_start += (mSnapOffsetAxis * mSnapOffsetMeters);
1304 1290
1305 BOOL is_sub_tick = FALSE; 1291// BOOL is_sub_tick = FALSE;
1306 F32 tick_scale = 1.f; 1292 F32 tick_scale = 1.f;
1307 for (F32 division_level = max_subdivisions; division_level >= sGridMinSubdivisionLevel; division_level /= 2.f) 1293 for (F32 division_level = max_subdivisions; division_level >= sGridMinSubdivisionLevel; division_level /= 2.f)
1308 { 1294 {
@@ -1311,7 +1297,7 @@ void LLManipTranslate::renderSnapGuides()
1311 break; 1297 break;
1312 } 1298 }
1313 tick_scale *= 0.7f; 1299 tick_scale *= 0.7f;
1314 is_sub_tick = TRUE; 1300// is_sub_tick = TRUE;
1315 } 1301 }
1316 1302
1317// S32 num_ticks_to_fade = is_sub_tick ? num_ticks_per_side / 2 : num_ticks_per_side; 1303// S32 num_ticks_to_fade = is_sub_tick ? num_ticks_per_side / 2 : num_ticks_per_side;
@@ -1533,7 +1519,6 @@ void LLManipTranslate::renderSnapGuides()
1533 1519
1534 float a = line_alpha; 1520 float a = line_alpha;
1535 1521
1536 LLColor4 col = gColors.getColor("SilhouetteChildColor");
1537 { 1522 {
1538 //draw grid behind objects 1523 //draw grid behind objects
1539 LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE); 1524 LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
diff --git a/linden/indra/newview/llmediadataclient.cpp b/linden/indra/newview/llmediadataclient.cpp
new file mode 100644
index 0000000..e2fa700
--- /dev/null
+++ b/linden/indra/newview/llmediadataclient.cpp
@@ -0,0 +1,813 @@
1/**
2 * @file llmediadataclient.cpp
3 * @brief class for queueing up requests for media data
4 *
5 * $LicenseInfo:firstyear=2001&license=viewergpl$
6 *
7 * Copyright (c) 2001-2010, 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://secondlife.com/developers/opensource/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
21 * http://secondlife.com/developers/opensource/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#include "llviewerprecompiledheaders.h"
35
36#include "llmediadataclient.h"
37
38#if LL_MSVC
39// disable boost::lexical_cast warning
40#pragma warning (disable:4702)
41#endif
42
43#include <boost/lexical_cast.hpp>
44
45#include "llhttpstatuscodes.h"
46#include "llsdutil.h"
47#include "llmediaentry.h"
48#include "lltextureentry.h"
49#include "llviewerregion.h"
50
51//
52// When making a request
53// - obtain the "overall interest score" of the object.
54// This would be the sum of the impls' interest scores.
55// - put the request onto a queue sorted by this score
56// (highest score at the front of the queue)
57// - On a timer, once a second, pull off the head of the queue and send
58// the request.
59// - Any request that gets a 503 still goes through the retry logic
60//
61
62//
63// Forward decls
64//
65const F32 LLMediaDataClient::QUEUE_TIMER_DELAY = 1.0; // seconds(s)
66const F32 LLMediaDataClient::UNAVAILABLE_RETRY_TIMER_DELAY = 10.0; // secs
67const U32 LLMediaDataClient::MAX_RETRIES = 10;
68const U32 LLMediaDataClient::MAX_SORTED_QUEUE_SIZE = 10000;
69const U32 LLMediaDataClient::MAX_ROUND_ROBIN_QUEUE_SIZE = 10000;
70
71// << operators
72std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::request_queue_t &q);
73std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::Request &q);
74
75//////////////////////////////////////////////////////////////////////////////////////
76//
77// LLMediaDataClient
78//
79//////////////////////////////////////////////////////////////////////////////////////
80
81LLMediaDataClient::LLMediaDataClient(F32 queue_timer_delay,
82 F32 retry_timer_delay,
83 U32 max_retries,
84 U32 max_sorted_queue_size,
85 U32 max_round_robin_queue_size)
86 : mQueueTimerDelay(queue_timer_delay),
87 mRetryTimerDelay(retry_timer_delay),
88 mMaxNumRetries(max_retries),
89 mMaxSortedQueueSize(max_sorted_queue_size),
90 mMaxRoundRobinQueueSize(max_round_robin_queue_size),
91 mQueueTimerIsRunning(false),
92 mCurrentQueueIsTheSortedQueue(true)
93{
94}
95
96LLMediaDataClient::~LLMediaDataClient()
97{
98 stopQueueTimer();
99
100 // This should clear the queue, and hopefully call all the destructors.
101 LL_DEBUGS("LLMediaDataClient") << "~LLMediaDataClient destructor: queue: " <<
102 (isEmpty() ? "<empty> " : "<not empty> ") << LL_ENDL;
103
104 mSortedQueue.clear();
105 mRoundRobinQueue.clear();
106}
107
108bool LLMediaDataClient::isEmpty() const
109{
110 return mSortedQueue.empty() && mRoundRobinQueue.empty();
111}
112
113bool LLMediaDataClient::isInQueue(const LLMediaDataClientObject::ptr_t &object)
114{
115 return (LLMediaDataClient::findOrRemove(mSortedQueue, object, false/*remove*/, LLMediaDataClient::Request::ANY).notNull()
116 || (LLMediaDataClient::findOrRemove(mRoundRobinQueue, object, false/*remove*/, LLMediaDataClient::Request::ANY).notNull()));
117}
118
119bool LLMediaDataClient::removeFromQueue(const LLMediaDataClientObject::ptr_t &object)
120{
121 bool removedFromSortedQueue = LLMediaDataClient::findOrRemove(mSortedQueue, object, true/*remove*/, LLMediaDataClient::Request::ANY).notNull();
122 bool removedFromRoundRobinQueue = LLMediaDataClient::findOrRemove(mRoundRobinQueue, object, true/*remove*/, LLMediaDataClient::Request::ANY).notNull();
123 return removedFromSortedQueue || removedFromRoundRobinQueue;
124}
125
126//static
127LLMediaDataClient::request_ptr_t LLMediaDataClient::findOrRemove(request_queue_t &queue, const LLMediaDataClientObject::ptr_t &obj, bool remove, LLMediaDataClient::Request::Type type)
128{
129 request_ptr_t result;
130 request_queue_t::iterator iter = queue.begin();
131 request_queue_t::iterator end = queue.end();
132 while (iter != end)
133 {
134 if (obj->getID() == (*iter)->getObject()->getID() && (type == LLMediaDataClient::Request::ANY || type == (*iter)->getType()))
135 {
136 result = *iter;
137 if (remove) queue.erase(iter);
138 break;
139 }
140 iter++;
141 }
142 return result;
143}
144
145void LLMediaDataClient::request(const LLMediaDataClientObject::ptr_t &object, const LLSD &payload)
146{
147 if (object.isNull() || ! object->hasMedia()) return;
148
149 // Push the object on the queue
150 enqueue(new Request(getCapabilityName(), payload, object, this));
151}
152
153void LLMediaDataClient::enqueue(const Request *request)
154{
155 if (request->isNew())
156 {
157 // Add to sorted queue
158 if (LLMediaDataClient::findOrRemove(mSortedQueue, request->getObject(), true/*remove*/, request->getType()).notNull())
159 {
160 LL_DEBUGS("LLMediaDataClient") << "REMOVING OLD request for " << *request << " ALREADY THERE!" << LL_ENDL;
161 }
162
163 LL_DEBUGS("LLMediaDataClient") << "Queuing SORTED request for " << *request << LL_ENDL;
164
165 // Sadly, we have to const-cast because items put into the queue are not const
166 mSortedQueue.push_back(const_cast<LLMediaDataClient::Request*>(request));
167
168 LL_DEBUGS("LLMediaDataClientQueue") << "SORTED queue:" << mSortedQueue << LL_ENDL;
169 }
170 else {
171 if (mRoundRobinQueue.size() > mMaxRoundRobinQueueSize)
172 {
173 LL_INFOS_ONCE("LLMediaDataClient") << "RR QUEUE MAXED OUT!!!" << LL_ENDL;
174 LL_DEBUGS("LLMediaDataClient") << "Not queuing " << *request << LL_ENDL;
175 return;
176 }
177
178 // ROUND ROBIN: if it is there, and it is a GET request, leave it. If not, put at front!
179 request_ptr_t existing_request;
180 if (request->getType() == Request::GET)
181 {
182 existing_request = LLMediaDataClient::findOrRemove(mRoundRobinQueue, request->getObject(), false/*remove*/, request->getType());
183 }
184 if (existing_request.isNull())
185 {
186 LL_DEBUGS("LLMediaDataClient") << "Queuing RR request for " << *request << LL_ENDL;
187 // Push the request on the pending queue
188 // Sadly, we have to const-cast because items put into the queue are not const
189 mRoundRobinQueue.push_front(const_cast<LLMediaDataClient::Request*>(request));
190
191 LL_DEBUGS("LLMediaDataClientQueue") << "RR queue:" << mRoundRobinQueue << LL_ENDL;
192 }
193 else
194 {
195 LL_DEBUGS("LLMediaDataClient") << "ALREADY THERE: NOT Queuing request for " << *request << LL_ENDL;
196
197 existing_request->markSent(false);
198 }
199 }
200 // Start the timer if not already running
201 startQueueTimer();
202}
203
204void LLMediaDataClient::startQueueTimer()
205{
206 if (! mQueueTimerIsRunning)
207 {
208 LL_DEBUGS("LLMediaDataClient") << "starting queue timer (delay=" << mQueueTimerDelay << " seconds)" << LL_ENDL;
209 // LLEventTimer automagically takes care of the lifetime of this object
210 new QueueTimer(mQueueTimerDelay, this);
211 }
212 else {
213 LL_DEBUGS("LLMediaDataClient") << "not starting queue timer (it's already running, right???)" << LL_ENDL;
214 }
215}
216
217void LLMediaDataClient::stopQueueTimer()
218{
219 mQueueTimerIsRunning = false;
220}
221
222bool LLMediaDataClient::processQueueTimer()
223{
224 sortQueue();
225
226 if(!isEmpty())
227 {
228 LL_DEBUGS("LLMediaDataClient") << "QueueTimer::tick() started, SORTED queue size is: " << mSortedQueue.size()
229 << ", RR queue size is: " << mRoundRobinQueue.size() << LL_ENDL;
230 LL_DEBUGS("LLMediaDataClientQueue") << "QueueTimer::tick() started, SORTED queue is: " << mSortedQueue << LL_ENDL;
231 LL_DEBUGS("LLMediaDataClientQueue") << "QueueTimer::tick() started, RR queue is: " << mRoundRobinQueue << LL_ENDL;
232 }
233
234 serviceQueue();
235
236 LL_DEBUGS("LLMediaDataClient") << "QueueTimer::tick() finished, SORTED queue size is: " << mSortedQueue.size()
237 << ", RR queue size is: " << mRoundRobinQueue.size() << LL_ENDL;
238 LL_DEBUGS("LLMediaDataClientQueue") << "QueueTimer::tick() finished, SORTED queue is: " << mSortedQueue << LL_ENDL;
239 LL_DEBUGS("LLMediaDataClientQueue") << "QueueTimer::tick() finished, RR queue is: " << mRoundRobinQueue << LL_ENDL;
240
241 return isEmpty();
242}
243
244void LLMediaDataClient::sortQueue()
245{
246 if(!mSortedQueue.empty())
247 {
248 // Score all items first
249 request_queue_t::iterator iter = mSortedQueue.begin();
250 request_queue_t::iterator end = mSortedQueue.end();
251 while (iter != end)
252 {
253 (*iter)->updateScore();
254 iter++;
255 }
256
257 // Re-sort the list...
258 // NOTE: should this be a stable_sort? If so we need to change to using a vector.
259 mSortedQueue.sort(LLMediaDataClient::compareRequests);
260
261 // ...then cull items over the max
262 U32 size = mSortedQueue.size();
263 if (size > mMaxSortedQueueSize)
264 {
265 U32 num_to_cull = (size - mMaxSortedQueueSize);
266 LL_INFOS_ONCE("LLMediaDataClient") << "sorted queue MAXED OUT! Culling "
267 << num_to_cull << " items" << LL_ENDL;
268 while (num_to_cull-- > 0)
269 {
270 mSortedQueue.pop_back();
271 }
272 }
273 }
274}
275
276// static
277bool LLMediaDataClient::compareRequests(const request_ptr_t &o1, const request_ptr_t &o2)
278{
279 if (o2.isNull()) return true;
280 if (o1.isNull()) return false;
281 return ( o1->getScore() > o2->getScore() );
282}
283
284void LLMediaDataClient::serviceQueue()
285{
286 request_queue_t *queue_p = getCurrentQueue();
287
288 // quick retry loop for cases where we shouldn't wait for the next timer tick
289 while(true)
290 {
291 if (queue_p->empty())
292 {
293 LL_DEBUGS("LLMediaDataClient") << "queue empty: " << (*queue_p) << LL_ENDL;
294 break;
295 }
296
297 // Peel one off of the items from the queue, and execute request
298 request_ptr_t request = queue_p->front();
299 llassert(!request.isNull());
300 const LLMediaDataClientObject *object = (request.isNull()) ? NULL : request->getObject();
301 llassert(NULL != object);
302
303 // Check for conditions that would make us just pop and rapidly loop through
304 // the queue.
305 if(request.isNull() ||
306 request->isMarkedSent() ||
307 NULL == object ||
308 object->isDead() ||
309 !object->hasMedia())
310 {
311 if (request.isNull())
312 {
313 LL_WARNS("LLMediaDataClient") << "Skipping NULL request" << LL_ENDL;
314 }
315 else {
316 LL_INFOS("LLMediaDataClient") << "Skipping : " << *request << " "
317 << ((request->isMarkedSent()) ? " request is marked sent" :
318 ((NULL == object) ? " object is NULL " :
319 ((object->isDead()) ? "object is dead" :
320 ((!object->hasMedia()) ? "object has no media!" : "BADNESS!")))) << LL_ENDL;
321 }
322 queue_p->pop_front();
323 continue; // jump back to the start of the quick retry loop
324 }
325
326 // Next, ask if this is "interesting enough" to fetch. If not, just stop
327 // and wait for the next timer go-round. Only do this for the sorted
328 // queue.
329 if (mCurrentQueueIsTheSortedQueue && !object->isInterestingEnough())
330 {
331 LL_DEBUGS("LLMediaDataClient") << "Not fetching " << *request << ": not interesting enough" << LL_ENDL;
332 break;
333 }
334
335 // Finally, try to send the HTTP message to the cap url
336 std::string url = request->getCapability();
337 bool maybe_retry = false;
338 if (!url.empty())
339 {
340 const LLSD &sd_payload = request->getPayload();
341 LL_INFOS("LLMediaDataClient") << "Sending request for " << *request << LL_ENDL;
342
343 // Call the subclass for creating the responder
344 LLHTTPClient::post(url, sd_payload, createResponder(request));
345 }
346 else {
347 LL_INFOS("LLMediaDataClient") << "NOT Sending request for " << *request << ": empty cap url!" << LL_ENDL;
348 maybe_retry = true;
349 }
350
351 bool exceeded_retries = request->getRetryCount() > mMaxNumRetries;
352 if (maybe_retry && ! exceeded_retries) // Try N times before giving up
353 {
354 // We got an empty cap, but in that case we will retry again next
355 // timer fire.
356 request->incRetryCount();
357 }
358 else {
359 if (exceeded_retries)
360 {
361 LL_WARNS("LLMediaDataClient") << "Could not send request " << *request << " for "
362 << mMaxNumRetries << " tries...popping object id " << object->getID() << LL_ENDL;
363 // XXX Should we bring up a warning dialog??
364 }
365
366 queue_p->pop_front();
367
368 if (! mCurrentQueueIsTheSortedQueue) {
369 // Round robin
370 request->markSent(true);
371 mRoundRobinQueue.push_back(request);
372 }
373 }
374
375 // end of quick loop -- any cases where we want to loop will use 'continue' to jump back to the start.
376 break;
377 }
378
379 swapCurrentQueue();
380}
381
382void LLMediaDataClient::swapCurrentQueue()
383{
384 // Swap
385 mCurrentQueueIsTheSortedQueue = !mCurrentQueueIsTheSortedQueue;
386 // If its empty, swap back
387 if (getCurrentQueue()->empty())
388 {
389 mCurrentQueueIsTheSortedQueue = !mCurrentQueueIsTheSortedQueue;
390 }
391}
392
393LLMediaDataClient::request_queue_t *LLMediaDataClient::getCurrentQueue()
394{
395 return (mCurrentQueueIsTheSortedQueue) ? &mSortedQueue : &mRoundRobinQueue;
396}
397
398// dump the queue
399std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::request_queue_t &q)
400{
401 int i = 0;
402 LLMediaDataClient::request_queue_t::const_iterator iter = q.begin();
403 LLMediaDataClient::request_queue_t::const_iterator end = q.end();
404 while (iter != end)
405 {
406 s << "\t" << i << "]: " << (*iter)->getObject()->getID().asString() << "(" << (*iter)->getObject()->getMediaInterest() << ")";
407 iter++;
408 i++;
409 }
410 return s;
411}
412
413//////////////////////////////////////////////////////////////////////////////////////
414//
415// LLMediaDataClient::QueueTimer
416// Queue of LLMediaDataClientObject smart pointers to request media for.
417//
418//////////////////////////////////////////////////////////////////////////////////////
419
420LLMediaDataClient::QueueTimer::QueueTimer(F32 time, LLMediaDataClient *mdc)
421: LLEventTimer(time), mMDC(mdc)
422{
423 mMDC->setIsRunning(true);
424}
425
426LLMediaDataClient::QueueTimer::~QueueTimer()
427{
428 LL_DEBUGS("LLMediaDataClient") << "~QueueTimer" << LL_ENDL;
429 mMDC->setIsRunning(false);
430 mMDC = NULL;
431}
432
433// virtual
434BOOL LLMediaDataClient::QueueTimer::tick()
435{
436 if (mMDC.isNull()) return TRUE;
437 return mMDC->processQueueTimer();
438}
439
440
441//////////////////////////////////////////////////////////////////////////////////////
442//
443// LLMediaDataClient::Responder::RetryTimer
444//
445//////////////////////////////////////////////////////////////////////////////////////
446
447LLMediaDataClient::Responder::RetryTimer::RetryTimer(F32 time, Responder *mdr)
448: LLEventTimer(time), mResponder(mdr)
449{
450}
451
452// virtual
453LLMediaDataClient::Responder::RetryTimer::~RetryTimer()
454{
455 LL_DEBUGS("LLMediaDataClient") << "~RetryTimer" << *(mResponder->getRequest()) << LL_ENDL;
456
457 // XXX This is weird: Instead of doing the work in tick() (which re-schedules
458 // a timer, which might be risky), do it here, in the destructor. Yes, it is very odd.
459 // Instead of retrying, we just put the request back onto the queue
460 LL_INFOS("LLMediaDataClient") << "RetryTimer fired for: " << *(mResponder->getRequest()) << " retrying" << LL_ENDL;
461 mResponder->getRequest()->reEnqueue();
462
463 // Release the ref to the responder.
464 mResponder = NULL;
465}
466
467// virtual
468BOOL LLMediaDataClient::Responder::RetryTimer::tick()
469{
470 // Don't fire again
471 return TRUE;
472}
473
474
475//////////////////////////////////////////////////////////////////////////////////////
476//
477// LLMediaDataClient::Request
478//
479//////////////////////////////////////////////////////////////////////////////////////
480/*static*/U32 LLMediaDataClient::Request::sNum = 0;
481
482LLMediaDataClient::Request::Request(const char *cap_name,
483 const LLSD& sd_payload,
484 LLMediaDataClientObject *obj,
485 LLMediaDataClient *mdc)
486: mCapName(cap_name),
487 mPayload(sd_payload),
488 mObject(obj),
489 mNum(++sNum),
490 mRetryCount(0),
491 mMDC(mdc),
492 mMarkedSent(false),
493 mScore((F64)0.0)
494{
495}
496
497LLMediaDataClient::Request::~Request()
498{
499 LL_DEBUGS("LLMediaDataClient") << "~Request" << (*this) << LL_ENDL;
500 mMDC = NULL;
501 mObject = NULL;
502}
503
504
505std::string LLMediaDataClient::Request::getCapability() const
506{
507 return getObject()->getCapabilityUrl(getCapName());
508}
509
510// Helper function to get the "type" of request, which just pokes around to
511// discover it.
512LLMediaDataClient::Request::Type LLMediaDataClient::Request::getType() const
513{
514 if (0 == strcmp(mCapName, "ObjectMediaNavigate"))
515 {
516 return NAVIGATE;
517 }
518 else if (0 == strcmp(mCapName, "ObjectMedia"))
519 {
520 const std::string &verb = mPayload["verb"];
521 if (verb == "GET")
522 {
523 return GET;
524 }
525 else if (verb == "UPDATE")
526 {
527 return UPDATE;
528 }
529 }
530 llassert(false);
531 return GET;
532}
533
534const char *LLMediaDataClient::Request::getTypeAsString() const
535{
536 Type t = getType();
537 switch (t)
538 {
539 case GET:
540 return "GET";
541 break;
542 case UPDATE:
543 return "UPDATE";
544 break;
545 case NAVIGATE:
546 return "NAVIGATE";
547 break;
548 case ANY:
549 return "ANY";
550 break;
551 }
552 return "";
553}
554
555
556void LLMediaDataClient::Request::reEnqueue() const
557{
558 // I sure hope this doesn't deref a bad pointer:
559 mMDC->enqueue(this);
560}
561
562F32 LLMediaDataClient::Request::getRetryTimerDelay() const
563{
564 return (mMDC == NULL) ? LLMediaDataClient::UNAVAILABLE_RETRY_TIMER_DELAY :
565 mMDC->mRetryTimerDelay;
566}
567
568U32 LLMediaDataClient::Request::getMaxNumRetries() const
569{
570 return (mMDC == NULL) ? LLMediaDataClient::MAX_RETRIES : mMDC->mMaxNumRetries;
571}
572
573void LLMediaDataClient::Request::markSent(bool flag)
574{
575 if (mMarkedSent != flag)
576 {
577 mMarkedSent = flag;
578 if (!mMarkedSent)
579 {
580 mNum = ++sNum;
581 }
582 }
583}
584
585void LLMediaDataClient::Request::updateScore()
586{
587 F64 tmp = mObject->getMediaInterest();
588 if (tmp != mScore)
589 {
590 LL_DEBUGS("LLMediaDataClient") << "Score for " << mObject->getID() << " changed from " << mScore << " to " << tmp << LL_ENDL;
591 mScore = tmp;
592 }
593}
594
595std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::Request &r)
596{
597 s << "request: num=" << r.getNum()
598 << " type=" << r.getTypeAsString()
599 << " ID=" << r.getObject()->getID()
600 << " #retries=" << r.getRetryCount();
601 return s;
602}
603
604
605//////////////////////////////////////////////////////////////////////////////////////
606//
607// LLMediaDataClient::Responder
608//
609//////////////////////////////////////////////////////////////////////////////////////
610
611LLMediaDataClient::Responder::Responder(const request_ptr_t &request)
612: mRequest(request)
613{
614}
615
616LLMediaDataClient::Responder::~Responder()
617{
618 LL_DEBUGS("LLMediaDataClient") << "~Responder" << *(getRequest()) << LL_ENDL;
619 mRequest = NULL;
620}
621
622/*virtual*/
623void LLMediaDataClient::Responder::error(U32 status, const std::string& reason)
624{
625 if (status == HTTP_SERVICE_UNAVAILABLE)
626 {
627 F32 retry_timeout = mRequest->getRetryTimerDelay();
628
629 mRequest->incRetryCount();
630
631 if (mRequest->getRetryCount() < mRequest->getMaxNumRetries())
632 {
633 LL_INFOS("LLMediaDataClient") << *mRequest << " got SERVICE_UNAVAILABLE...retrying in " << retry_timeout << " seconds" << LL_ENDL;
634
635 // Start timer (instances are automagically tracked by
636 // InstanceTracker<> and LLEventTimer)
637 new RetryTimer(F32(retry_timeout/*secs*/), this);
638 }
639 else {
640 LL_INFOS("LLMediaDataClient") << *mRequest << " got SERVICE_UNAVAILABLE...retry count "
641 << mRequest->getRetryCount() << " exceeds " << mRequest->getMaxNumRetries() << ", not retrying" << LL_ENDL;
642 }
643 }
644 else {
645 std::string msg = boost::lexical_cast<std::string>(status) + ": " + reason;
646 LL_WARNS("LLMediaDataClient") << *mRequest << " http error(" << msg << ")" << LL_ENDL;
647 }
648}
649
650/*virtual*/
651void LLMediaDataClient::Responder::result(const LLSD& content)
652{
653 LL_DEBUGS("LLMediaDataClientResponse") << *mRequest << " result : " << ll_print_sd(content) << LL_ENDL;
654}
655
656//////////////////////////////////////////////////////////////////////////////////////
657//
658// LLObjectMediaDataClient
659// Subclass of LLMediaDataClient for the ObjectMedia cap
660//
661//////////////////////////////////////////////////////////////////////////////////////
662
663LLMediaDataClient::Responder *LLObjectMediaDataClient::createResponder(const request_ptr_t &request) const
664{
665 return new LLObjectMediaDataClient::Responder(request);
666}
667
668const char *LLObjectMediaDataClient::getCapabilityName() const
669{
670 return "ObjectMedia";
671}
672
673void LLObjectMediaDataClient::fetchMedia(LLMediaDataClientObject *object)
674{
675 LLSD sd_payload;
676 sd_payload["verb"] = "GET";
677 sd_payload[LLTextureEntry::OBJECT_ID_KEY] = object->getID();
678 request(object, sd_payload);
679}
680
681void LLObjectMediaDataClient::updateMedia(LLMediaDataClientObject *object)
682{
683 LLSD sd_payload;
684 sd_payload["verb"] = "UPDATE";
685 sd_payload[LLTextureEntry::OBJECT_ID_KEY] = object->getID();
686 LLSD object_media_data;
687 int i = 0;
688 int end = object->getMediaDataCount();
689 for ( ; i < end ; ++i)
690 {
691 object_media_data.append(object->getMediaDataLLSD(i));
692 }
693 sd_payload[LLTextureEntry::OBJECT_MEDIA_DATA_KEY] = object_media_data;
694
695 LL_DEBUGS("LLMediaDataClient") << "update media data: " << object->getID() << " " << ll_print_sd(sd_payload) << LL_ENDL;
696
697 request(object, sd_payload);
698}
699
700/*virtual*/
701void LLObjectMediaDataClient::Responder::result(const LLSD& content)
702{
703 const LLMediaDataClient::Request::Type type = getRequest()->getType();
704 llassert(type == LLMediaDataClient::Request::GET || type == LLMediaDataClient::Request::UPDATE)
705 if (type == LLMediaDataClient::Request::GET)
706 {
707 LL_DEBUGS("LLMediaDataClientResponse") << *(getRequest()) << " GET returned: " << ll_print_sd(content) << LL_ENDL;
708
709 // Look for an error
710 if (content.has("error"))
711 {
712 const LLSD &error = content["error"];
713 LL_WARNS("LLMediaDataClient") << *(getRequest()) << " Error getting media data for object: code=" <<
714 error["code"].asString() << ": " << error["message"].asString() << LL_ENDL;
715
716 // XXX Warn user?
717 }
718 else {
719 // Check the data
720 const LLUUID &object_id = content[LLTextureEntry::OBJECT_ID_KEY];
721 if (object_id != getRequest()->getObject()->getID())
722 {
723 // NOT good, wrong object id!!
724 LL_WARNS("LLMediaDataClient") << *(getRequest()) << " DROPPING response with wrong object id (" << object_id << ")" << LL_ENDL;
725 return;
726 }
727
728 // Otherwise, update with object media data
729 getRequest()->getObject()->updateObjectMediaData(content[LLTextureEntry::OBJECT_MEDIA_DATA_KEY],
730 content[LLTextureEntry::MEDIA_VERSION_KEY]);
731 }
732 }
733 else if (type == LLMediaDataClient::Request::UPDATE)
734 {
735 // just do what our superclass does
736 LLMediaDataClient::Responder::result(content);
737 }
738}
739
740//////////////////////////////////////////////////////////////////////////////////////
741//
742// LLObjectMediaNavigateClient
743// Subclass of LLMediaDataClient for the ObjectMediaNavigate cap
744//
745//////////////////////////////////////////////////////////////////////////////////////
746LLMediaDataClient::Responder *LLObjectMediaNavigateClient::createResponder(const request_ptr_t &request) const
747{
748 return new LLObjectMediaNavigateClient::Responder(request);
749}
750
751const char *LLObjectMediaNavigateClient::getCapabilityName() const
752{
753 return "ObjectMediaNavigate";
754}
755
756void LLObjectMediaNavigateClient::navigate(LLMediaDataClientObject *object, U8 texture_index, const std::string &url)
757{
758 LLSD sd_payload;
759 sd_payload[LLTextureEntry::OBJECT_ID_KEY] = object->getID();
760 sd_payload[LLMediaEntry::CURRENT_URL_KEY] = url;
761 sd_payload[LLTextureEntry::TEXTURE_INDEX_KEY] = (LLSD::Integer)texture_index;
762
763 LL_INFOS("LLMediaDataClient") << "navigate() initiated: " << ll_print_sd(sd_payload) << LL_ENDL;
764
765 request(object, sd_payload);
766}
767
768/*virtual*/
769void LLObjectMediaNavigateClient::Responder::error(U32 status, const std::string& reason)
770{
771 // Bounce back (unless HTTP_SERVICE_UNAVAILABLE, in which case call base
772 // class
773 if (status == HTTP_SERVICE_UNAVAILABLE)
774 {
775 LLMediaDataClient::Responder::error(status, reason);
776 }
777 else {
778 // bounce the face back
779 LL_WARNS("LLMediaDataClient") << *(getRequest()) << " Error navigating: http code=" << status << LL_ENDL;
780 const LLSD &payload = getRequest()->getPayload();
781 // bounce the face back
782 getRequest()->getObject()->mediaNavigateBounceBack((LLSD::Integer)payload[LLTextureEntry::TEXTURE_INDEX_KEY]);
783 }
784}
785
786/*virtual*/
787void LLObjectMediaNavigateClient::Responder::result(const LLSD& content)
788{
789 LL_INFOS("LLMediaDataClient") << *(getRequest()) << " NAVIGATE returned " << ll_print_sd(content) << LL_ENDL;
790
791 if (content.has("error"))
792 {
793 const LLSD &error = content["error"];
794 int error_code = error["code"];
795
796 if (ERROR_PERMISSION_DENIED_CODE == error_code)
797 {
798 LL_WARNS("LLMediaDataClient") << *(getRequest()) << " Navigation denied: bounce back" << LL_ENDL;
799 const LLSD &payload = getRequest()->getPayload();
800 // bounce the face back
801 getRequest()->getObject()->mediaNavigateBounceBack((LLSD::Integer)payload[LLTextureEntry::TEXTURE_INDEX_KEY]);
802 }
803 else {
804 LL_WARNS("LLMediaDataClient") << *(getRequest()) << " Error navigating: code=" <<
805 error["code"].asString() << ": " << error["message"].asString() << LL_ENDL;
806 }
807 // XXX Warn user?
808 }
809 else {
810 // just do what our superclass does
811 LLMediaDataClient::Responder::result(content);
812 }
813}
diff --git a/linden/indra/newview/llmediadataclient.h b/linden/indra/newview/llmediadataclient.h
new file mode 100644
index 0000000..0ed7c57
--- /dev/null
+++ b/linden/indra/newview/llmediadataclient.h
@@ -0,0 +1,341 @@
1/**
2 * @file llmediadataclient.h
3 * @brief class for queueing up requests to the media service
4 *
5 * $LicenseInfo:firstyear=2007&license=viewergpl$
6 *
7 * Copyright (c) 2007-2010, 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://secondlife.com/developers/opensource/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
21 * http://secondlife.com/developers/opensource/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_LLMEDIADATACLIENT_H
35#define LL_LLMEDIADATACLIENT_H
36
37#include "llhttpclient.h"
38#include <queue>
39//#include "llrefcount.h"
40//#include "llpointer.h"
41//#include "lleventtimer.h"
42
43
44// Link seam for LLVOVolume
45class LLMediaDataClientObject : public LLRefCount
46{
47public:
48 // Get the number of media data items
49 virtual U8 getMediaDataCount() const = 0;
50 // Get the media data at index, as an LLSD
51 virtual LLSD getMediaDataLLSD(U8 index) const = 0;
52 // Get this object's UUID
53 virtual LLUUID getID() const = 0;
54 // Navigate back to previous URL
55 virtual void mediaNavigateBounceBack(U8 index) = 0;
56 // Does this object have media?
57 virtual bool hasMedia() const = 0;
58 // Update the object's media data to the given array
59 virtual void updateObjectMediaData(LLSD const &media_data_array, const std::string &version_string) = 0;
60 // Return the total "interest" of the media (on-screen area)
61 virtual F64 getMediaInterest() const = 0;
62 // Return the given cap url
63 virtual std::string getCapabilityUrl(const std::string &name) const = 0;
64 // Return whether the object has been marked dead
65 virtual bool isDead() const = 0;
66 // Returns a media version number for the object
67 virtual U32 getMediaVersion() const = 0;
68 // Returns whether the object is "interesting enough" to fetch
69 virtual bool isInterestingEnough() const = 0;
70 // Returns whether we've seen this object yet or not
71 virtual bool isNew() const = 0;
72
73 // smart pointer
74 typedef LLPointer<LLMediaDataClientObject> ptr_t;
75};
76
77// This object creates a priority queue for requests.
78// Abstracts the Cap URL, the request, and the responder
79class LLMediaDataClient : public LLRefCount
80{
81public:
82 LOG_CLASS(LLMediaDataClient);
83
84 const static F32 QUEUE_TIMER_DELAY;// = 1.0; // seconds(s)
85 const static F32 UNAVAILABLE_RETRY_TIMER_DELAY;// = 5.0; // secs
86 const static U32 MAX_RETRIES;// = 4;
87 const static U32 MAX_SORTED_QUEUE_SIZE;// = 10000;
88 const static U32 MAX_ROUND_ROBIN_QUEUE_SIZE;// = 10000;
89
90 // Constructor
91 LLMediaDataClient(F32 queue_timer_delay = QUEUE_TIMER_DELAY,
92 F32 retry_timer_delay = UNAVAILABLE_RETRY_TIMER_DELAY,
93 U32 max_retries = MAX_RETRIES,
94 U32 max_sorted_queue_size = MAX_SORTED_QUEUE_SIZE,
95 U32 max_round_robin_queue_size = MAX_ROUND_ROBIN_QUEUE_SIZE);
96
97 // Make the request
98 void request(const LLMediaDataClientObject::ptr_t &object, const LLSD &payload);
99
100 F32 getRetryTimerDelay() const { return mRetryTimerDelay; }
101
102 // Returns true iff the queue is empty
103 bool isEmpty() const;
104
105 // Returns true iff the given object is in the queue
106 bool isInQueue(const LLMediaDataClientObject::ptr_t &object);
107
108 // Remove the given object from the queue. Returns true iff the given object is removed.
109 bool removeFromQueue(const LLMediaDataClientObject::ptr_t &object);
110
111 // Called only by the Queue timer and tests (potentially)
112 bool processQueueTimer();
113
114protected:
115 // Destructor
116 virtual ~LLMediaDataClient(); // use unref
117
118 // Request
119 class Request : public LLRefCount
120 {
121 public:
122 enum Type {
123 GET,
124 UPDATE,
125 NAVIGATE,
126 ANY
127 };
128
129 Request(const char *cap_name, const LLSD& sd_payload, LLMediaDataClientObject *obj, LLMediaDataClient *mdc);
130 const char *getCapName() const { return mCapName; }
131 const LLSD &getPayload() const { return mPayload; }
132 LLMediaDataClientObject *getObject() const { return mObject; }
133
134 U32 getNum() const { return mNum; }
135
136 U32 getRetryCount() const { return mRetryCount; }
137 void incRetryCount() { mRetryCount++; }
138
139 // Note: may return empty string!
140 std::string getCapability() const;
141
142 Type getType() const;
143 const char *getTypeAsString() const;
144
145 // Re-enqueue thyself
146 void reEnqueue() const;
147
148 F32 getRetryTimerDelay() const;
149 U32 getMaxNumRetries() const;
150
151 bool isNew() const { return mObject.notNull() ? mObject->isNew() : false; }
152 void markSent(bool flag);
153 bool isMarkedSent() const { return mMarkedSent; }
154 void updateScore();
155 F64 getScore() const { return mScore; }
156
157 public:
158 friend std::ostream& operator<<(std::ostream &s, const Request &q);
159
160 protected:
161 virtual ~Request(); // use unref();
162
163 private:
164 const char *mCapName;
165 LLSD mPayload;
166 LLMediaDataClientObject::ptr_t mObject;
167 // Simple tracking
168 U32 mNum;
169 static U32 sNum;
170 U32 mRetryCount;
171 F64 mScore;
172 bool mMarkedSent;
173
174 // Back pointer to the MDC...not a ref!
175 LLMediaDataClient *mMDC;
176 };
177 typedef LLPointer<Request> request_ptr_t;
178
179 // Responder
180 class Responder : public LLHTTPClient::Responder
181 {
182 public:
183 Responder(const request_ptr_t &request);
184 //If we get back an error (not found, etc...), handle it here
185 virtual void error(U32 status, const std::string& reason);
186 //If we get back a normal response, handle it here. Default just logs it.
187 virtual void result(const LLSD& content);
188
189 const request_ptr_t &getRequest() const { return mRequest; }
190
191 protected:
192 virtual ~Responder();
193
194 private:
195
196 class RetryTimer : public LLEventTimer
197 {
198 public:
199 RetryTimer(F32 time, Responder *);
200 virtual ~RetryTimer();
201 virtual BOOL tick();
202 private:
203 // back-pointer
204 boost::intrusive_ptr<Responder> mResponder;
205 };
206
207 request_ptr_t mRequest;
208 };
209
210protected:
211
212 // Subclasses must override this factory method to return a new responder
213 virtual Responder *createResponder(const request_ptr_t &request) const = 0;
214
215 // Subclasses must override to return a cap name
216 virtual const char *getCapabilityName() const = 0;
217
218 virtual void sortQueue();
219 virtual void serviceQueue();
220
221private:
222 typedef std::list<request_ptr_t> request_queue_t;
223
224 void enqueue(const Request*);
225
226 // Return whether the given object is/was in the queue
227 static LLMediaDataClient::request_ptr_t findOrRemove(request_queue_t &queue, const LLMediaDataClientObject::ptr_t &obj, bool remove, Request::Type type);
228
229 // Comparator for sorting
230 static bool compareRequests(const request_ptr_t &o1, const request_ptr_t &o2);
231 static F64 getObjectScore(const LLMediaDataClientObject::ptr_t &obj);
232
233 friend std::ostream& operator<<(std::ostream &s, const Request &q);
234 friend std::ostream& operator<<(std::ostream &s, const request_queue_t &q);
235
236 class QueueTimer : public LLEventTimer
237 {
238 public:
239 QueueTimer(F32 time, LLMediaDataClient *mdc);
240 virtual BOOL tick();
241 protected:
242 virtual ~QueueTimer();
243 private:
244 // back-pointer
245 LLPointer<LLMediaDataClient> mMDC;
246 };
247
248 void startQueueTimer();
249 void stopQueueTimer();
250 void setIsRunning(bool val) { mQueueTimerIsRunning = val; }
251
252 void swapCurrentQueue();
253 request_queue_t *getCurrentQueue();
254
255 const F32 mQueueTimerDelay;
256 const F32 mRetryTimerDelay;
257 const U32 mMaxNumRetries;
258 const U32 mMaxSortedQueueSize;
259 const U32 mMaxRoundRobinQueueSize;
260
261 bool mQueueTimerIsRunning;
262
263 request_queue_t mSortedQueue;
264 request_queue_t mRoundRobinQueue;
265 bool mCurrentQueueIsTheSortedQueue;
266};
267
268
269// MediaDataClient specific for the ObjectMedia cap
270class LLObjectMediaDataClient : public LLMediaDataClient
271{
272public:
273 LLObjectMediaDataClient(F32 queue_timer_delay = QUEUE_TIMER_DELAY,
274 F32 retry_timer_delay = UNAVAILABLE_RETRY_TIMER_DELAY,
275 U32 max_retries = MAX_RETRIES,
276 U32 max_sorted_queue_size = MAX_SORTED_QUEUE_SIZE,
277 U32 max_round_robin_queue_size = MAX_ROUND_ROBIN_QUEUE_SIZE)
278 : LLMediaDataClient(queue_timer_delay, retry_timer_delay, max_retries)
279 {}
280 virtual ~LLObjectMediaDataClient() {}
281
282 void fetchMedia(LLMediaDataClientObject *object);
283 void updateMedia(LLMediaDataClientObject *object);
284
285protected:
286 // Subclasses must override this factory method to return a new responder
287 virtual Responder *createResponder(const request_ptr_t &request) const;
288
289 // Subclasses must override to return a cap name
290 virtual const char *getCapabilityName() const;
291
292 class Responder : public LLMediaDataClient::Responder
293 {
294 public:
295 Responder(const request_ptr_t &request)
296 : LLMediaDataClient::Responder(request) {}
297 virtual void result(const LLSD &content);
298 };
299};
300
301
302// MediaDataClient specific for the ObjectMediaNavigate cap
303class LLObjectMediaNavigateClient : public LLMediaDataClient
304{
305public:
306 // NOTE: from llmediaservice.h
307 static const int ERROR_PERMISSION_DENIED_CODE = 8002;
308
309 LLObjectMediaNavigateClient(F32 queue_timer_delay = QUEUE_TIMER_DELAY,
310 F32 retry_timer_delay = UNAVAILABLE_RETRY_TIMER_DELAY,
311 U32 max_retries = MAX_RETRIES,
312 U32 max_sorted_queue_size = MAX_SORTED_QUEUE_SIZE,
313 U32 max_round_robin_queue_size = MAX_ROUND_ROBIN_QUEUE_SIZE)
314 : LLMediaDataClient(queue_timer_delay, retry_timer_delay, max_retries)
315 {}
316 virtual ~LLObjectMediaNavigateClient() {}
317
318 void navigate(LLMediaDataClientObject *object, U8 texture_index, const std::string &url);
319
320protected:
321 // Subclasses must override this factory method to return a new responder
322 virtual Responder *createResponder(const request_ptr_t &request) const;
323
324 // Subclasses must override to return a cap name
325 virtual const char *getCapabilityName() const;
326
327 class Responder : public LLMediaDataClient::Responder
328 {
329 public:
330 Responder(const request_ptr_t &request)
331 : LLMediaDataClient::Responder(request) {}
332 virtual void error(U32 status, const std::string& reason);
333 virtual void result(const LLSD &content);
334 private:
335 void mediaNavigateBounceBack();
336 };
337
338};
339
340
341#endif // LL_LLMEDIADATACLIENT_H
diff --git a/linden/indra/newview/llpanelavatar.cpp b/linden/indra/newview/llpanelavatar.cpp
index 8854986..23941a4 100644
--- a/linden/indra/newview/llpanelavatar.cpp
+++ b/linden/indra/newview/llpanelavatar.cpp
@@ -1321,11 +1321,11 @@ void LLPanelAvatar::setAvatarID(const LLUUID &avatar_id, const std::string &name
1321{ 1321{
1322 if (avatar_id.isNull()) return; 1322 if (avatar_id.isNull()) return;
1323 1323
1324 BOOL avatar_changed = FALSE; 1324// BOOL avatar_changed = FALSE;
1325 if (avatar_id != mAvatarID) 1325// if (avatar_id != mAvatarID)
1326 { 1326// {
1327 avatar_changed = TRUE; 1327// avatar_changed = TRUE;
1328 } 1328// }
1329 mAvatarID = avatar_id; 1329 mAvatarID = avatar_id;
1330 1330
1331 // Determine if we have their calling card. 1331 // Determine if we have their calling card.
diff --git a/linden/indra/newview/llpanelcontents.cpp b/linden/indra/newview/llpanelcontents.cpp
index 855bb93..7137c23 100644
--- a/linden/indra/newview/llpanelcontents.cpp
+++ b/linden/indra/newview/llpanelcontents.cpp
@@ -83,8 +83,6 @@
83 83
84BOOL LLPanelContents::postBuild() 84BOOL LLPanelContents::postBuild()
85{ 85{
86 LLRect rect = this->getRect();
87
88 setMouseOpaque(FALSE); 86 setMouseOpaque(FALSE);
89 87
90 childSetAction("button new script",&LLPanelContents::onClickNewScript, this); 88 childSetAction("button new script",&LLPanelContents::onClickNewScript, this);
diff --git a/linden/indra/newview/llpanelface.cpp b/linden/indra/newview/llpanelface.cpp
index b9a40da..d8401de 100644
--- a/linden/indra/newview/llpanelface.cpp
+++ b/linden/indra/newview/llpanelface.cpp
@@ -74,7 +74,6 @@
74 74
75BOOL LLPanelFace::postBuild() 75BOOL LLPanelFace::postBuild()
76{ 76{
77 LLRect rect = this->getRect();
78 LLTextureCtrl* mTextureCtrl; 77 LLTextureCtrl* mTextureCtrl;
79 LLColorSwatchCtrl* mColorSwatch; 78 LLColorSwatchCtrl* mColorSwatch;
80 79
diff --git a/linden/indra/newview/llpanelgrouplandmoney.cpp b/linden/indra/newview/llpanelgrouplandmoney.cpp
index 3f128fe..e15f585 100644
--- a/linden/indra/newview/llpanelgrouplandmoney.cpp
+++ b/linden/indra/newview/llpanelgrouplandmoney.cpp
@@ -1390,13 +1390,11 @@ void LLGroupMoneyPlanningTabEventHandler::processReply(LLMessageSystem* msg,
1390 S32 cur_land_tax; 1390 S32 cur_land_tax;
1391 S32 cur_group_tax; 1391 S32 cur_group_tax;
1392 S32 cur_parcel_dir_fee; 1392 S32 cur_parcel_dir_fee;
1393 S32 cur_total_tax;
1394 S32 proj_object_tax; 1393 S32 proj_object_tax;
1395 S32 proj_light_tax; 1394 S32 proj_light_tax;
1396 S32 proj_land_tax; 1395 S32 proj_land_tax;
1397 S32 proj_group_tax; 1396 S32 proj_group_tax;
1398 S32 proj_parcel_dir_fee; 1397 S32 proj_parcel_dir_fee;
1399 S32 proj_total_tax;
1400 S32 non_exempt_members; 1398 S32 non_exempt_members;
1401 1399
1402 msg->getS32Fast(_PREHASH_MoneyData, _PREHASH_IntervalDays, interval_days ); 1400 msg->getS32Fast(_PREHASH_MoneyData, _PREHASH_IntervalDays, interval_days );
@@ -1420,9 +1418,6 @@ void LLGroupMoneyPlanningTabEventHandler::processReply(LLMessageSystem* msg,
1420 msg->getStringFast(_PREHASH_MoneyData, _PREHASH_LastTaxDate, last_stipend_date); 1418 msg->getStringFast(_PREHASH_MoneyData, _PREHASH_LastTaxDate, last_stipend_date);
1421 msg->getStringFast(_PREHASH_MoneyData, _PREHASH_TaxDate, next_stipend_date); 1419 msg->getStringFast(_PREHASH_MoneyData, _PREHASH_TaxDate, next_stipend_date);
1422 1420
1423 cur_total_tax = cur_object_tax + cur_light_tax + cur_land_tax + cur_group_tax + cur_parcel_dir_fee;
1424 proj_total_tax = proj_object_tax + proj_light_tax + proj_land_tax + proj_group_tax + proj_parcel_dir_fee;
1425
1426 if (interval_days != mImplementationp->mIntervalLength || 1421 if (interval_days != mImplementationp->mIntervalLength ||
1427 current_interval != mImplementationp->mCurrentInterval) 1422 current_interval != mImplementationp->mCurrentInterval)
1428 { 1423 {
diff --git a/linden/indra/newview/llpanelinventory.cpp b/linden/indra/newview/llpanelinventory.cpp
index 277ab15..8103ee9 100644
--- a/linden/indra/newview/llpanelinventory.cpp
+++ b/linden/indra/newview/llpanelinventory.cpp
@@ -81,6 +81,7 @@
81#include "llviewerobjectlist.h" 81#include "llviewerobjectlist.h"
82#include "llviewerwindow.h" 82#include "llviewerwindow.h"
83#include "llwearable.h" 83#include "llwearable.h"
84#include "llwlparammanager.h"
84 85
85#include "hippogridmanager.h" 86#include "hippogridmanager.h"
86 87
@@ -1380,9 +1381,6 @@ public:
1380 virtual LLUIImagePtr getIcon() const; 1381 virtual LLUIImagePtr getIcon() const;
1381 virtual void openItem(); 1382 virtual void openItem();
1382 virtual BOOL removeItem(); 1383 virtual BOOL removeItem();
1383 bool isSkySetting() const;
1384 bool isWaterSetting() const;
1385 bool isWindLight() const;
1386}; 1384};
1387 1385
1388LLTaskNotecardBridge::LLTaskNotecardBridge( 1386LLTaskNotecardBridge::LLTaskNotecardBridge(
@@ -1412,7 +1410,7 @@ void LLTaskNotecardBridge::openItem()
1412 return; 1410 return;
1413 } 1411 }
1414// [/RLVa:KB] 1412// [/RLVa:KB]
1415 if(isWindLight()) 1413 if(LLWLParamManager::isSettingsNotecard(getName()))
1416 { 1414 {
1417 return; 1415 return;
1418 } 1416 }
@@ -1442,11 +1440,11 @@ BOOL LLTaskNotecardBridge::removeItem()
1442} 1440}
1443LLUIImagePtr LLTaskNotecardBridge::getIcon() const 1441LLUIImagePtr LLTaskNotecardBridge::getIcon() const
1444{ 1442{
1445 if(isSkySetting()) 1443 if(LLWLParamManager::isSkySettingsNotecard(getName()))
1446 { 1444 {
1447 return LLUI::getUIImage("Inv_WindLight"); 1445 return LLUI::getUIImage("Inv_WindLight");
1448 } 1446 }
1449 else if(isWaterSetting()) 1447 else if(LLWLParamManager::isWaterSettingsNotecard(getName()))
1450 { 1448 {
1451 return LLUI::getUIImage("Inv_WaterLight"); 1449 return LLUI::getUIImage("Inv_WaterLight");
1452 } 1450 }
@@ -1456,22 +1454,6 @@ LLUIImagePtr LLTaskNotecardBridge::getIcon() const
1456 } 1454 }
1457} 1455}
1458 1456
1459bool LLTaskNotecardBridge::isSkySetting() const
1460{
1461 return (getName().length() > 2 && getName().compare(getName().length() - 3, 3, ".wl") == 0);
1462}
1463
1464bool LLTaskNotecardBridge::isWaterSetting() const
1465{
1466 return (getName().length() > 2 && getName().compare(getName().length() - 3, 3, ".ww") == 0);
1467}
1468
1469bool LLTaskNotecardBridge::isWindLight() const
1470{
1471 return (isSkySetting() || isWaterSetting());
1472}
1473
1474
1475///---------------------------------------------------------------------------- 1457///----------------------------------------------------------------------------
1476/// Class LLTaskGestureBridge 1458/// Class LLTaskGestureBridge
1477///---------------------------------------------------------------------------- 1459///----------------------------------------------------------------------------
diff --git a/linden/indra/newview/llpanellogin.cpp b/linden/indra/newview/llpanellogin.cpp
index c709015..4998662 100644
--- a/linden/indra/newview/llpanellogin.cpp
+++ b/linden/indra/newview/llpanellogin.cpp
@@ -604,18 +604,17 @@ void LLPanelLogin::addServer(const std::string& server)
604 const std::string &defaultGrid = gHippoGridManager->getDefaultGridNick(); 604 const std::string &defaultGrid = gHippoGridManager->getDefaultGridNick();
605 605
606 LLComboBox *grids = sInstance->getChild<LLComboBox>("server_combo"); 606 LLComboBox *grids = sInstance->getChild<LLComboBox>("server_combo");
607 S32 selectIndex = -1, i = 0; 607 S32 i = 0;
608 grids->removeall(); 608 grids->removeall();
609 if (defaultGrid != "") { 609 if (defaultGrid != "") {
610 grids->add(defaultGrid); 610 grids->add(defaultGrid);
611 selectIndex = i++; 611 i++;
612 } 612 }
613 HippoGridManager::GridIterator it, end = gHippoGridManager->endGrid(); 613 HippoGridManager::GridIterator it, end = gHippoGridManager->endGrid();
614 for (it = gHippoGridManager->beginGrid(); it != end; ++it) { 614 for (it = gHippoGridManager->beginGrid(); it != end; ++it) {
615 const std::string &grid = it->second->getGridNick(); 615 const std::string &grid = it->second->getGridNick();
616 if (grid != defaultGrid) { 616 if (grid != defaultGrid) {
617 grids->add(grid); 617 grids->add(grid);
618 //if (grid == mCurGrid) selectIndex = i;
619 i++; 618 i++;
620 } 619 }
621 } 620 }
diff --git a/linden/indra/newview/llpanelmediahud.cpp b/linden/indra/newview/llpanelmediahud.cpp
index 39c4b63..c4afe27 100644
--- a/linden/indra/newview/llpanelmediahud.cpp
+++ b/linden/indra/newview/llpanelmediahud.cpp
@@ -356,7 +356,6 @@ void LLPanelMediaHUD::updateShape()
356 media_hud_rect.mRight += getRect().getWidth() - media_region->getRect().mRight; 356 media_hud_rect.mRight += getRect().getWidth() - media_region->getRect().mRight;
357 357
358 358
359 LLRect old_hud_rect = media_hud_rect;
360 // keep all parts of HUD on-screen 359 // keep all parts of HUD on-screen
361 media_hud_rect.intersectWith(getParent()->getLocalRect()); 360 media_hud_rect.intersectWith(getParent()->getLocalRect());
362 361
diff --git a/linden/indra/newview/llpanelobject.cpp b/linden/indra/newview/llpanelobject.cpp
index 36c479a..5d156f8 100644
--- a/linden/indra/newview/llpanelobject.cpp
+++ b/linden/indra/newview/llpanelobject.cpp
@@ -520,10 +520,10 @@ void LLPanelObject::getState( )
520 mBtnPasteRot->setEnabled( enable_rotate ); 520 mBtnPasteRot->setEnabled( enable_rotate );
521 mBtnPasteRotClip->setEnabled( enable_rotate ); 521 mBtnPasteRotClip->setEnabled( enable_rotate );
522 522
523 BOOL owners_identical;
524 LLUUID owner_id; 523 LLUUID owner_id;
525 std::string owner_name; 524 std::string owner_name;
526 owners_identical = LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name); 525 // This is still needed for the side effects, though the result is not.
526 LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name);
527 527
528 // BUG? Check for all objects being editable? 528 // BUG? Check for all objects being editable?
529 S32 roots_selected = LLSelectMgr::getInstance()->getSelection()->getRootObjectCount(); 529 S32 roots_selected = LLSelectMgr::getInstance()->getSelection()->getRootObjectCount();
diff --git a/linden/indra/newview/llpanelpermissions.cpp b/linden/indra/newview/llpanelpermissions.cpp
index 6b7bc1b..9799de7 100644
--- a/linden/indra/newview/llpanelpermissions.cpp
+++ b/linden/indra/newview/llpanelpermissions.cpp
@@ -541,7 +541,7 @@ void LLPanelPermissions::refresh()
541 // TODO: Creator permissions 541 // TODO: Creator permissions
542 542
543 BOOL valid_base_perms = FALSE; 543 BOOL valid_base_perms = FALSE;
544 BOOL valid_owner_perms = FALSE; 544 //BOOL valid_owner_perms = FALSE;
545 BOOL valid_group_perms = FALSE; 545 BOOL valid_group_perms = FALSE;
546 BOOL valid_everyone_perms = FALSE; 546 BOOL valid_everyone_perms = FALSE;
547 BOOL valid_next_perms = FALSE; 547 BOOL valid_next_perms = FALSE;
@@ -561,7 +561,8 @@ void LLPanelPermissions::refresh()
561 &base_mask_on, 561 &base_mask_on,
562 &base_mask_off); 562 &base_mask_off);
563 563
564 valid_owner_perms = LLSelectMgr::getInstance()->selectGetPerm(PERM_OWNER, 564 // TODO - seems odd, but this is not actually used, except to set owner_mask_*.
565 /*valid_owner_perms =*/ LLSelectMgr::getInstance()->selectGetPerm(PERM_OWNER,
565 &owner_mask_on, 566 &owner_mask_on,
566 &owner_mask_off); 567 &owner_mask_off);
567 568
diff --git a/linden/indra/newview/llpanelvolume.cpp b/linden/indra/newview/llpanelvolume.cpp
index b87a233..00b80f0 100644
--- a/linden/indra/newview/llpanelvolume.cpp
+++ b/linden/indra/newview/llpanelvolume.cpp
@@ -181,10 +181,10 @@ void LLPanelVolume::getState( )
181 return; 181 return;
182 } 182 }
183 183
184 BOOL owners_identical;
185 LLUUID owner_id; 184 LLUUID owner_id;
186 std::string owner_name; 185 std::string owner_name;
187 owners_identical = LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name); 186 // This is still needed for the side effects, though the result is not.
187 LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name);
188 188
189 // BUG? Check for all objects being editable? 189 // BUG? Check for all objects being editable?
190 BOOL editable = root_objectp->permModify(); 190 BOOL editable = root_objectp->permModify();
diff --git a/linden/indra/newview/llselectmgr.cpp b/linden/indra/newview/llselectmgr.cpp
index f6f294a..3525e54 100644
--- a/linden/indra/newview/llselectmgr.cpp
+++ b/linden/indra/newview/llselectmgr.cpp
@@ -1072,7 +1072,6 @@ void LLSelectMgr::getGrid(LLVector3& origin, LLQuaternion &rotation, LLVector3 &
1072 if (mGridMode == GRID_MODE_LOCAL && mSelectedObjects->getObjectCount()) 1072 if (mGridMode == GRID_MODE_LOCAL && mSelectedObjects->getObjectCount())
1073 { 1073 {
1074 //LLViewerObject* root = getSelectedParentObject(mSelectedObjects->getFirstObject()); 1074 //LLViewerObject* root = getSelectedParentObject(mSelectedObjects->getFirstObject());
1075 LLBBox bbox = mSavedSelectionBBox;
1076 mGridOrigin = mSavedSelectionBBox.getCenterAgent(); 1075 mGridOrigin = mSavedSelectionBBox.getCenterAgent();
1077 mGridScale = mSavedSelectionBBox.getExtentLocal() * 0.5f; 1076 mGridScale = mSavedSelectionBBox.getExtentLocal() * 0.5f;
1078 1077
@@ -1090,7 +1089,6 @@ void LLSelectMgr::getGrid(LLVector3& origin, LLQuaternion &rotation, LLVector3 &
1090 else if (mGridMode == GRID_MODE_REF_OBJECT && first_grid_object && first_grid_object->mDrawable.notNull()) 1089 else if (mGridMode == GRID_MODE_REF_OBJECT && first_grid_object && first_grid_object->mDrawable.notNull())
1091 { 1090 {
1092 mGridRotation = first_grid_object->getRenderRotation(); 1091 mGridRotation = first_grid_object->getRenderRotation();
1093 LLVector3 first_grid_obj_pos = first_grid_object->getRenderPosition();
1094 1092
1095 LLVector3 min_extents(F32_MAX, F32_MAX, F32_MAX); 1093 LLVector3 min_extents(F32_MAX, F32_MAX, F32_MAX);
1096 LLVector3 max_extents(-F32_MAX, -F32_MAX, -F32_MAX); 1094 LLVector3 max_extents(-F32_MAX, -F32_MAX, -F32_MAX);
diff --git a/linden/indra/newview/llspatialpartition.cpp b/linden/indra/newview/llspatialpartition.cpp
index d9fa5b5..a9255b3 100644
--- a/linden/indra/newview/llspatialpartition.cpp
+++ b/linden/indra/newview/llspatialpartition.cpp
@@ -2617,9 +2617,6 @@ public:
2617 return; 2617 return;
2618 } 2618 }
2619 2619
2620 LLVector3 nodeCenter = group->mBounds[0];
2621 LLVector3 octCenter = LLVector3(group->mOctreeNode->getCenter());
2622
2623 for (LLSpatialGroup::OctreeNode::const_element_iter i = branch->getData().begin(); i != branch->getData().end(); ++i) 2620 for (LLSpatialGroup::OctreeNode::const_element_iter i = branch->getData().begin(); i != branch->getData().end(); ++i)
2624 { 2621 {
2625 LLDrawable* drawable = *i; 2622 LLDrawable* drawable = *i;
@@ -2860,9 +2857,6 @@ public:
2860 2857
2861 virtual bool check(LLDrawable* drawable) 2858 virtual bool check(LLDrawable* drawable)
2862 { 2859 {
2863 LLVector3 local_start = mStart;
2864 LLVector3 local_end = mEnd;
2865
2866 if (!gPipeline.hasRenderType(drawable->getRenderType()) || !drawable->isVisible()) 2860 if (!gPipeline.hasRenderType(drawable->getRenderType()) || !drawable->isVisible())
2867 { 2861 {
2868 return false; 2862 return false;
diff --git a/linden/indra/newview/llstartup.cpp b/linden/indra/newview/llstartup.cpp
index bbb942f..d232ea8 100644
--- a/linden/indra/newview/llstartup.cpp
+++ b/linden/indra/newview/llstartup.cpp
@@ -207,6 +207,8 @@
207#include "rlvhandler.h" 207#include "rlvhandler.h"
208// [/RLVa:KB] 208// [/RLVa:KB]
209 209
210#include "rcmoapradar.h"
211
210#if LL_WINDOWS 212#if LL_WINDOWS
211#include "llwindebug.h" 213#include "llwindebug.h"
212#include "lldxhardware.h" 214#include "lldxhardware.h"
@@ -266,7 +268,6 @@ bool LLStartUp::sLoginFailed = false;
266 268
267void login_show(); 269void login_show();
268void login_callback(S32 option, void* userdata); 270void login_callback(S32 option, void* userdata);
269bool is_hex_string(U8* str, S32 len);
270void show_first_run_dialog(); 271void show_first_run_dialog();
271bool first_run_dialog_callback(const LLSD& notification, const LLSD& response); 272bool first_run_dialog_callback(const LLSD& notification, const LLSD& response);
272void set_startup_status(const F32 frac, const std::string& string, const std::string& msg); 273void set_startup_status(const F32 frac, const std::string& string, const std::string& msg);
@@ -352,7 +353,6 @@ bool idle_startup()
352 const F32 TIMEOUT_SECONDS = 10.f; // changed from 5 to 10 seconds for OpenSim lag -- MC 353 const F32 TIMEOUT_SECONDS = 10.f; // changed from 5 to 10 seconds for OpenSim lag -- MC
353 const S32 MAX_TIMEOUT_COUNT = 3; 354 const S32 MAX_TIMEOUT_COUNT = 3;
354 static LLTimer timeout; 355 static LLTimer timeout;
355 static S32 timeout_count = 0;
356 356
357 static LLTimer login_time; 357 static LLTimer login_time;
358 static LLTimer connecting_region_timer; 358 static LLTimer connecting_region_timer;
@@ -384,11 +384,10 @@ bool idle_startup()
384 384
385 // last location by default 385 // last location by default
386 static S32 agent_location_id = START_LOCATION_ID_LAST; 386 static S32 agent_location_id = START_LOCATION_ID_LAST;
387 static S32 location_which = START_LOCATION_ID_LAST;
388 387
389 static bool show_connect_box = true; 388 static bool show_connect_box = true;
390 389
391 static bool stipend_since_login = false; 390 //static bool stipend_since_login = false;
392 391
393 static bool samename = false; 392 static bool samename = false;
394 393
@@ -803,8 +802,6 @@ bool idle_startup()
803 802
804 gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW); 803 gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW);
805 804
806 timeout_count = 0;
807
808 if (LLStartUp::shouldAutoLogin()) 805 if (LLStartUp::shouldAutoLogin())
809 { 806 {
810 show_connect_box = false; 807 show_connect_box = false;
@@ -1118,7 +1115,6 @@ bool idle_startup()
1118 { 1115 {
1119 // Force login at the last location 1116 // Force login at the last location
1120 agent_location_id = START_LOCATION_ID_LAST; 1117 agent_location_id = START_LOCATION_ID_LAST;
1121 location_which = START_LOCATION_ID_LAST;
1122 gSavedSettings.setBOOL("LoginLastLocation", FALSE); 1118 gSavedSettings.setBOOL("LoginLastLocation", FALSE);
1123 1119
1124 // Clear some things that would cause us to divert to a user-specified location 1120 // Clear some things that would cause us to divert to a user-specified location
@@ -1130,21 +1126,14 @@ bool idle_startup()
1130 { 1126 {
1131 // a startup URL was specified 1127 // a startup URL was specified
1132 agent_location_id = START_LOCATION_ID_URL; 1128 agent_location_id = START_LOCATION_ID_URL;
1133
1134 // doesn't really matter what location_which is, since
1135 // agent_start_look_at will be overwritten when the
1136 // UserLoginLocationReply arrives
1137 location_which = START_LOCATION_ID_LAST;
1138 } 1129 }
1139 else if (gSavedSettings.getBOOL("LoginLastLocation")) 1130 else if (gSavedSettings.getBOOL("LoginLastLocation"))
1140 { 1131 {
1141 agent_location_id = START_LOCATION_ID_LAST; // last location 1132 agent_location_id = START_LOCATION_ID_LAST; // last location
1142 location_which = START_LOCATION_ID_LAST;
1143 } 1133 }
1144 else 1134 else
1145 { 1135 {
1146 agent_location_id = START_LOCATION_ID_HOME; // home 1136 agent_location_id = START_LOCATION_ID_HOME; // home
1147 location_which = START_LOCATION_ID_HOME;
1148 } 1137 }
1149 1138
1150 gViewerWindow->getWindow()->setCursor(UI_CURSOR_WAIT); 1139 gViewerWindow->getWindow()->setCursor(UI_CURSOR_WAIT);
@@ -1790,11 +1779,11 @@ bool idle_startup()
1790 if((*it).second == "N") gAgent.setFirstLogin(TRUE); 1779 if((*it).second == "N") gAgent.setFirstLogin(TRUE);
1791 else gAgent.setFirstLogin(FALSE); 1780 else gAgent.setFirstLogin(FALSE);
1792 } 1781 }
1793 it = options[0].find("stipend_since_login"); 1782 //it = options[0].find("stipend_since_login");
1794 if(it != no_flag) 1783 //if(it != no_flag)
1795 { 1784 //{
1796 if((*it).second == "Y") stipend_since_login = true; 1785 // if((*it).second == "Y") stipend_since_login = true;
1797 } 1786 //}
1798 it = options[0].find("gendered"); 1787 it = options[0].find("gendered");
1799 if(it != no_flag) 1788 if(it != no_flag)
1800 { 1789 {
@@ -2086,6 +2075,16 @@ bool idle_startup()
2086 LLRect window(0, gViewerWindow->getWindowHeight(), gViewerWindow->getWindowWidth(), 0); 2075 LLRect window(0, gViewerWindow->getWindowHeight(), gViewerWindow->getWindowWidth(), 0);
2087 gViewerWindow->adjustControlRectanglesForFirstUse(window); 2076 gViewerWindow->adjustControlRectanglesForFirstUse(window);
2088 2077
2078 if (gSavedSettings.getBOOL("ShowRadar"))
2079 {
2080 LLFloaterAvatarList::showInstance();
2081 }
2082
2083 if (gSavedSettings.getBOOL("ShowMOAPRadar"))
2084 {
2085 LLFloaterMOAPRadar::showInstance();
2086 }
2087
2089 if(gSavedSettings.getBOOL("ShowMiniMap")) 2088 if(gSavedSettings.getBOOL("ShowMiniMap"))
2090 { 2089 {
2091 LLFloaterMap::showInstance(); 2090 LLFloaterMap::showInstance();
@@ -3270,39 +3269,6 @@ void LLStartUp::deletePasswordFromDisk()
3270 LLFile::remove(filepath); 3269 LLFile::remove(filepath);
3271} 3270}
3272 3271
3273bool is_hex_string(U8* str, S32 len)
3274{
3275 bool rv = true;
3276 U8* c = str;
3277 while(rv && len--)
3278 {
3279 switch(*c)
3280 {
3281 case '0':
3282 case '1':
3283 case '2':
3284 case '3':
3285 case '4':
3286 case '5':
3287 case '6':
3288 case '7':
3289 case '8':
3290 case '9':
3291 case 'a':
3292 case 'b':
3293 case 'c':
3294 case 'd':
3295 case 'e':
3296 case 'f':
3297 ++c;
3298 break;
3299 default:
3300 rv = false;
3301 break;
3302 }
3303 }
3304 return rv;
3305}
3306 3272
3307void show_first_run_dialog() 3273void show_first_run_dialog()
3308{ 3274{
diff --git a/linden/indra/newview/llsurface.cpp b/linden/indra/newview/llsurface.cpp
index 5a99e66..8692c80 100644
--- a/linden/indra/newview/llsurface.cpp
+++ b/linden/indra/newview/llsurface.cpp
@@ -1262,8 +1262,6 @@ BOOL LLSurface::generateWaterTexture(const F32 x, const F32 y,
1262 y_end = tex_width; 1262 y_end = tex_width;
1263 } 1263 }
1264 1264
1265 LLVector3d origin_global = from_region_handle(getRegion()->getHandle());
1266
1267 // OK, for now, just have the composition value equal the height at the point. 1265 // OK, for now, just have the composition value equal the height at the point.
1268 LLVector3 location; 1266 LLVector3 location;
1269 LLColor4U coloru; 1267 LLColor4U coloru;
diff --git a/linden/indra/newview/lltool.cpp b/linden/indra/newview/lltool.cpp
index df2191b..f8188e3 100644
--- a/linden/indra/newview/lltool.cpp
+++ b/linden/indra/newview/lltool.cpp
@@ -40,10 +40,12 @@
40 40
41#include "llviewerwindow.h" 41#include "llviewerwindow.h"
42#include "lltoolcomp.h" 42#include "lltoolcomp.h"
43#include "lltoolface.h"
43#include "lltoolfocus.h" 44#include "lltoolfocus.h"
44#include "llfocusmgr.h" 45#include "llfocusmgr.h"
45#include "llagent.h" 46#include "llagent.h"
46#include "llviewerjoystick.h" 47#include "llviewerjoystick.h"
48#include "qtoolalign.h"
47 49
48extern BOOL gDebugClicks; 50extern BOOL gDebugClicks;
49 51
@@ -187,7 +189,7 @@ LLTool* LLTool::getOverrideTool(MASK mask)
187 { 189 {
188 return NULL; 190 return NULL;
189 } 191 }
190 if (mask & MASK_ALT) 192 else if (mask & MASK_ALT)
191 { 193 {
192 return LLToolCamera::getInstance(); 194 return LLToolCamera::getInstance();
193 } 195 }
diff --git a/linden/indra/newview/lltoolcomp.cpp b/linden/indra/newview/lltoolcomp.cpp
index 7bf99f0..2ec1d8e 100644
--- a/linden/indra/newview/lltoolcomp.cpp
+++ b/linden/indra/newview/lltoolcomp.cpp
@@ -43,6 +43,7 @@
43#include "llmaniptranslate.h" 43#include "llmaniptranslate.h"
44#include "llmenugl.h" // for right-click menu hack 44#include "llmenugl.h" // for right-click menu hack
45#include "llselectmgr.h" 45#include "llselectmgr.h"
46#include "lltoolface.h"
46#include "lltoolfocus.h" 47#include "lltoolfocus.h"
47#include "lltoolgrab.h" 48#include "lltoolgrab.h"
48#include "lltoolgun.h" 49#include "lltoolgun.h"
@@ -131,6 +132,36 @@ void LLToolComposite::handleSelect()
131 mSelected = TRUE; 132 mSelected = TRUE;
132} 133}
133 134
135
136LLTool* LLToolComposite::getOverrideTool(MASK mask)
137{
138 if (gKeyboard->getKeyDown('M') &&
139 ((mask == (MASK_ALT | MASK_CONTROL)) || (mask == (MASK_ALT | MASK_CONTROL | MASK_SHIFT))))
140 {
141 return QToolAlign::getInstance();
142 }
143 else if (gKeyboard->getKeyDown('P') &&
144 (mask == (MASK_CONTROL | MASK_SHIFT)))
145 {
146 return LLToolCompTranslate::getInstance();
147 }
148 else if (gKeyboard->getKeyDown('F') &&
149 (mask == (MASK_ALT | MASK_CONTROL)))
150 {
151 return LLToolFace::getInstance();
152 }
153 else if (mask == (MASK_CONTROL | MASK_SHIFT))
154 {
155 return LLToolCompScale::getInstance();
156 }
157 else if (mask == MASK_CONTROL)
158 {
159 return LLToolCompRotate::getInstance();
160 }
161 return LLTool::getOverrideTool(mask);
162}
163
164
134//---------------------------------------------------------------------------- 165//----------------------------------------------------------------------------
135// LLToolCompInspect 166// LLToolCompInspect
136//---------------------------------------------------------------------------- 167//----------------------------------------------------------------------------
@@ -277,24 +308,6 @@ BOOL LLToolCompTranslate::handleMouseUp(S32 x, S32 y, MASK mask)
277 return LLToolComposite::handleMouseUp(x, y, mask); 308 return LLToolComposite::handleMouseUp(x, y, mask);
278} 309}
279 310
280LLTool* LLToolCompTranslate::getOverrideTool(MASK mask)
281{
282 if (gKeyboard->getKeyDown('A') &&
283 ((mask & MASK_CONTROL) || (mask == (MASK_CONTROL | MASK_SHIFT))))
284 {
285 return QToolAlign::getInstance();
286 }
287 else if (mask == MASK_CONTROL)
288 {
289 return LLToolCompRotate::getInstance();
290 }
291 else if (mask == (MASK_CONTROL | MASK_SHIFT))
292 {
293 return LLToolCompScale::getInstance();
294 }
295 return LLToolComposite::getOverrideTool(mask);
296}
297
298BOOL LLToolCompTranslate::handleDoubleClick(S32 x, S32 y, MASK mask) 311BOOL LLToolCompTranslate::handleDoubleClick(S32 x, S32 y, MASK mask)
299{ 312{
300 if (mManip->getSelection()->isEmpty() && mManip->getHighlightedPart() == LLManip::LL_NO_PART) 313 if (mManip->getSelection()->isEmpty() && mManip->getHighlightedPart() == LLManip::LL_NO_PART)
@@ -401,22 +414,6 @@ BOOL LLToolCompScale::handleMouseUp(S32 x, S32 y, MASK mask)
401 return LLToolComposite::handleMouseUp(x, y, mask); 414 return LLToolComposite::handleMouseUp(x, y, mask);
402} 415}
403 416
404LLTool* LLToolCompScale::getOverrideTool(MASK mask)
405{
406 if (gKeyboard->getKeyDown('A') &&
407 ((mask & MASK_CONTROL) || (mask == (MASK_CONTROL | MASK_SHIFT))))
408 {
409 return QToolAlign::getInstance();
410 }
411 else if (mask == MASK_CONTROL)
412 {
413 return LLToolCompRotate::getInstance();
414 }
415
416 return LLToolComposite::getOverrideTool(mask);
417}
418
419
420BOOL LLToolCompScale::handleDoubleClick(S32 x, S32 y, MASK mask) 417BOOL LLToolCompScale::handleDoubleClick(S32 x, S32 y, MASK mask)
421{ 418{
422 if (!mManip->getSelection()->isEmpty() && mManip->getHighlightedPart() == LLManip::LL_NO_PART) 419 if (!mManip->getSelection()->isEmpty() && mManip->getHighlightedPart() == LLManip::LL_NO_PART)
@@ -471,18 +468,16 @@ LLToolCompCreate::~LLToolCompCreate()
471 468
472BOOL LLToolCompCreate::handleMouseDown(S32 x, S32 y, MASK mask) 469BOOL LLToolCompCreate::handleMouseDown(S32 x, S32 y, MASK mask)
473{ 470{
474 BOOL handled = FALSE;
475 mMouseDown = TRUE; 471 mMouseDown = TRUE;
476 472
477 if ( (mask == MASK_SHIFT) || (mask == MASK_CONTROL) ) 473 if ( (mask == MASK_SHIFT) || (mask == MASK_CONTROL) )
478 { 474 {
479 gViewerWindow->pickAsync(x, y, mask, pickCallback); 475 gViewerWindow->pickAsync(x, y, mask, pickCallback);
480 handled = TRUE;
481 } 476 }
482 else 477 else
483 { 478 {
484 setCurrentTool( mPlacer ); 479 setCurrentTool( mPlacer );
485 handled = mPlacer->placeObject( x, y, mask ); 480 mPlacer->placeObject( x, y, mask );
486 } 481 }
487 482
488 mObjectPlacedOnMouseDown = TRUE; 483 mObjectPlacedOnMouseDown = TRUE;
@@ -606,20 +601,6 @@ BOOL LLToolCompRotate::handleMouseUp(S32 x, S32 y, MASK mask)
606 return LLToolComposite::handleMouseUp(x, y, mask); 601 return LLToolComposite::handleMouseUp(x, y, mask);
607} 602}
608 603
609LLTool* LLToolCompRotate::getOverrideTool(MASK mask)
610{
611 if (gKeyboard->getKeyDown('A') &&
612 ((mask & MASK_CONTROL) || (mask == (MASK_CONTROL | MASK_SHIFT))))
613 {
614 return QToolAlign::getInstance();
615 }
616 else if (mask == (MASK_CONTROL | MASK_SHIFT))
617 {
618 return LLToolCompScale::getInstance();
619 }
620 return LLToolComposite::getOverrideTool(mask);
621}
622
623BOOL LLToolCompRotate::handleDoubleClick(S32 x, S32 y, MASK mask) 604BOOL LLToolCompRotate::handleDoubleClick(S32 x, S32 y, MASK mask)
624{ 605{
625 if (!mManip->getSelection()->isEmpty() && mManip->getHighlightedPart() == LLManip::LL_NO_PART) 606 if (!mManip->getSelection()->isEmpty() && mManip->getHighlightedPart() == LLManip::LL_NO_PART)
diff --git a/linden/indra/newview/lltoolcomp.h b/linden/indra/newview/lltoolcomp.h
index 81ed0ba..cb5e544 100644
--- a/linden/indra/newview/lltoolcomp.h
+++ b/linden/indra/newview/lltoolcomp.h
@@ -84,6 +84,9 @@ public:
84 { mCur->localPointToScreen(local_x, local_y, screen_x, screen_y); } 84 { mCur->localPointToScreen(local_x, local_y, screen_x, screen_y); }
85 85
86 BOOL isSelecting(); 86 BOOL isSelecting();
87
88 virtual LLTool* getOverrideTool(MASK mask);
89
87protected: 90protected:
88 void setCurrentTool( LLTool* new_tool ); 91 void setCurrentTool( LLTool* new_tool );
89 LLTool* getCurrentTool() { return mCur; } 92 LLTool* getCurrentTool() { return mCur; }
@@ -113,8 +116,8 @@ public:
113 virtual ~LLToolCompInspect(); 116 virtual ~LLToolCompInspect();
114 117
115 // Overridden from LLToolComposite 118 // Overridden from LLToolComposite
116 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); 119 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
117 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask); 120 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
118 121
119 static void pickCallback(const LLPickInfo& pick_info); 122 static void pickCallback(const LLPickInfo& pick_info);
120}; 123};
@@ -135,8 +138,6 @@ public:
135 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); // Returns to the default tool 138 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); // Returns to the default tool
136 virtual void render(); 139 virtual void render();
137 140
138 virtual LLTool* getOverrideTool(MASK mask);
139
140 static void pickCallback(const LLPickInfo& pick_info); 141 static void pickCallback(const LLPickInfo& pick_info);
141}; 142};
142 143
@@ -150,14 +151,12 @@ public:
150 virtual ~LLToolCompScale(); 151 virtual ~LLToolCompScale();
151 152
152 // Overridden from LLToolComposite 153 // Overridden from LLToolComposite
153 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); 154 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
154 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask); 155 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
155 virtual BOOL handleHover(S32 x, S32 y, MASK mask); 156 virtual BOOL handleHover(S32 x, S32 y, MASK mask);
156 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); // Returns to the default tool 157 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); // Returns to the default tool
157 virtual void render(); 158 virtual void render();
158 159
159 virtual LLTool* getOverrideTool(MASK mask);
160
161 static void pickCallback(const LLPickInfo& pick_info); 160 static void pickCallback(const LLPickInfo& pick_info);
162}; 161};
163 162
@@ -172,17 +171,13 @@ public:
172 virtual ~LLToolCompRotate(); 171 virtual ~LLToolCompRotate();
173 172
174 // Overridden from LLToolComposite 173 // Overridden from LLToolComposite
175 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); 174 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
176 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask); 175 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
177 virtual BOOL handleHover(S32 x, S32 y, MASK mask); 176 virtual BOOL handleHover(S32 x, S32 y, MASK mask);
178 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); 177 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
179 virtual void render(); 178 virtual void render();
180 179
181 virtual LLTool* getOverrideTool(MASK mask);
182
183 static void pickCallback(const LLPickInfo& pick_info); 180 static void pickCallback(const LLPickInfo& pick_info);
184
185protected:
186}; 181};
187 182
188//----------------------------------------------------------------------- 183//-----------------------------------------------------------------------
@@ -195,14 +190,14 @@ public:
195 virtual ~LLToolCompCreate(); 190 virtual ~LLToolCompCreate();
196 191
197 // Overridden from LLToolComposite 192 // Overridden from LLToolComposite
198 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); 193 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
199 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask); 194 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
200 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); 195 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
201 196
202 static void pickCallback(const LLPickInfo& pick_info); 197 static void pickCallback(const LLPickInfo& pick_info);
203protected: 198protected:
204 LLToolPlacer* mPlacer; 199 LLToolPlacer* mPlacer;
205 BOOL mObjectPlacedOnMouseDown; 200 BOOL mObjectPlacedOnMouseDown;
206}; 201};
207 202
208 203
@@ -220,7 +215,7 @@ public:
220 virtual ~LLToolCompGun(); 215 virtual ~LLToolCompGun();
221 216
222 // Overridden from LLToolComposite 217 // Overridden from LLToolComposite
223 virtual BOOL handleHover(S32 x, S32 y, MASK mask); 218 virtual BOOL handleHover(S32 x, S32 y, MASK mask);
224 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); 219 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
225 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask); 220 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
226 virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); 221 virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
diff --git a/linden/indra/newview/lltooldraganddrop.cpp b/linden/indra/newview/lltooldraganddrop.cpp
index 18c4917..2adcf14 100644
--- a/linden/indra/newview/lltooldraganddrop.cpp
+++ b/linden/indra/newview/lltooldraganddrop.cpp
@@ -1521,18 +1521,6 @@ void LLToolDragAndDrop::dropInventory(LLViewerObject* hit_obj,
1521 gFloaterTools->dirty(); 1521 gFloaterTools->dirty();
1522} 1522}
1523 1523
1524struct LLGiveInventoryInfo
1525{
1526 LLUUID mToAgentID;
1527 LLUUID mInventoryObjectID;
1528 LLUUID mIMSessionID;
1529 LLGiveInventoryInfo(const LLUUID& to_agent, const LLUUID& obj_id, const LLUUID &im_session_id = LLUUID::null) :
1530 mToAgentID(to_agent),
1531 mInventoryObjectID(obj_id),
1532 mIMSessionID(im_session_id)
1533 {}
1534};
1535
1536void LLToolDragAndDrop::giveInventory(const LLUUID& to_agent, 1524void LLToolDragAndDrop::giveInventory(const LLUUID& to_agent,
1537 LLInventoryItem* item, 1525 LLInventoryItem* item,
1538 const LLUUID& im_session_id) 1526 const LLUUID& im_session_id)
@@ -1701,8 +1689,6 @@ void LLToolDragAndDrop::giveInventoryCategory(const LLUUID& to_agent,
1701 } 1689 }
1702 else 1690 else
1703 { 1691 {
1704 LLGiveInventoryInfo* info = NULL;
1705 info = new LLGiveInventoryInfo(to_agent, cat->getUUID(), im_session_id);
1706 LLSD args; 1692 LLSD args;
1707 args["COUNT"] = llformat("%d",giveable.countNoCopy()); 1693 args["COUNT"] = llformat("%d",giveable.countNoCopy());
1708 LLSD payload; 1694 LLSD payload;
diff --git a/linden/indra/newview/lltoolface.cpp b/linden/indra/newview/lltoolface.cpp
index 735ecd9..834bf76 100644
--- a/linden/indra/newview/lltoolface.cpp
+++ b/linden/indra/newview/lltoolface.cpp
@@ -57,7 +57,7 @@
57// 57//
58 58
59LLToolFace::LLToolFace() 59LLToolFace::LLToolFace()
60: LLTool(std::string("Texture")) 60: LLToolComposite(std::string("Texture"))
61{ } 61{ }
62 62
63 63
@@ -156,6 +156,7 @@ void LLToolFace::pickCallback(const LLPickInfo& pick_info)
156 156
157void LLToolFace::handleSelect() 157void LLToolFace::handleSelect()
158{ 158{
159 gFloaterTools->setStatusText("selectface");
159 // From now on, draw faces 160 // From now on, draw faces
160 LLSelectMgr::getInstance()->setTEMode(TRUE); 161 LLSelectMgr::getInstance()->setTEMode(TRUE);
161} 162}
diff --git a/linden/indra/newview/lltoolface.h b/linden/indra/newview/lltoolface.h
index f2b7d23..fc6f7de 100644
--- a/linden/indra/newview/lltoolface.h
+++ b/linden/indra/newview/lltoolface.h
@@ -34,12 +34,13 @@
34#define LL_LLTOOLFACE_H 34#define LL_LLTOOLFACE_H
35 35
36#include "lltool.h" 36#include "lltool.h"
37#include "lltoolcomp.h"
37 38
38class LLViewerObject; 39class LLViewerObject;
39class LLPickInfo; 40class LLPickInfo;
40 41
41class LLToolFace 42class LLToolFace
42: public LLTool, public LLSingleton<LLToolFace> 43: public LLToolComposite, public LLSingleton<LLToolFace>
43{ 44{
44public: 45public:
45 LLToolFace(); 46 LLToolFace();
diff --git a/linden/indra/newview/lltoolfocus.cpp b/linden/indra/newview/lltoolfocus.cpp
index ae0cd1e..c0dedb6 100644
--- a/linden/indra/newview/lltoolfocus.cpp
+++ b/linden/indra/newview/lltoolfocus.cpp
@@ -318,8 +318,6 @@ BOOL LLToolCamera::handleHover(S32 x, S32 y, MASK mask)
318 S32 dx = gViewerWindow->getCurrentMouseDX(); 318 S32 dx = gViewerWindow->getCurrentMouseDX();
319 S32 dy = gViewerWindow->getCurrentMouseDY(); 319 S32 dy = gViewerWindow->getCurrentMouseDY();
320 320
321 BOOL moved_outside_slop = FALSE;
322
323 if (hasMouseCapture() && mValidClickPoint) 321 if (hasMouseCapture() && mValidClickPoint)
324 { 322 {
325 mAccumX += llabs(dx); 323 mAccumX += llabs(dx);
@@ -327,19 +325,11 @@ BOOL LLToolCamera::handleHover(S32 x, S32 y, MASK mask)
327 325
328 if (mAccumX >= SLOP_RANGE) 326 if (mAccumX >= SLOP_RANGE)
329 { 327 {
330 if (!mOutsideSlopX)
331 {
332 moved_outside_slop = TRUE;
333 }
334 mOutsideSlopX = TRUE; 328 mOutsideSlopX = TRUE;
335 } 329 }
336 330
337 if (mAccumY >= SLOP_RANGE) 331 if (mAccumY >= SLOP_RANGE)
338 { 332 {
339 if (!mOutsideSlopY)
340 {
341 moved_outside_slop = TRUE;
342 }
343 mOutsideSlopY = TRUE; 333 mOutsideSlopY = TRUE;
344 } 334 }
345 } 335 }
diff --git a/linden/indra/newview/lltoolmgr.cpp b/linden/indra/newview/lltoolmgr.cpp
index 675412d..9e7bc5c 100644
--- a/linden/indra/newview/lltoolmgr.cpp
+++ b/linden/indra/newview/lltoolmgr.cpp
@@ -193,7 +193,7 @@ LLTool* LLToolMgr::getCurrentTool()
193 else 193 else
194 { 194 {
195 // due to window management weirdness we can get here with gToolNull 195 // due to window management weirdness we can get here with gToolNull
196 bool can_override = mBaseTool && (mBaseTool != gToolNull) ; 196 bool can_override = mBaseTool && (mBaseTool != gToolNull);
197 mOverrideTool = can_override ? mBaseTool->getOverrideTool(override_mask) : NULL; 197 mOverrideTool = can_override ? mBaseTool->getOverrideTool(override_mask) : NULL;
198 198
199 // use keyboard-override tool if available otherwise drop back to base tool 199 // use keyboard-override tool if available otherwise drop back to base tool
diff --git a/linden/indra/newview/llurlhistory.cpp b/linden/indra/newview/llurlhistory.cpp
index fd161a2..e3de706 100644
--- a/linden/indra/newview/llurlhistory.cpp
+++ b/linden/indra/newview/llurlhistory.cpp
@@ -119,8 +119,6 @@ void LLURLHistory::addURL(const std::string& collection, const std::string& url)
119// static 119// static
120void LLURLHistory::removeURL(const std::string& collection, const std::string& url) 120void LLURLHistory::removeURL(const std::string& collection, const std::string& url)
121{ 121{
122 LLSD::array_iterator iter = sHistorySD[collection].beginArray();
123 LLSD::array_iterator end = sHistorySD[collection].endArray();
124 for(int index = 0; index < sHistorySD[collection].size(); index++) 122 for(int index = 0; index < sHistorySD[collection].size(); index++)
125 { 123 {
126 if(sHistorySD[collection].get(index).asString() == url) 124 if(sHistorySD[collection].get(index).asString() == url)
diff --git a/linden/indra/newview/llviewercamera.cpp b/linden/indra/newview/llviewercamera.cpp
index fecab65..69a5621 100644
--- a/linden/indra/newview/llviewercamera.cpp
+++ b/linden/indra/newview/llviewercamera.cpp
@@ -131,9 +131,6 @@ void LLViewerCamera::updateCameraLocation(const LLVector3 &center,
131 131
132 mLastPointOfInterest = point_of_interest; 132 mLastPointOfInterest = point_of_interest;
133 133
134 // constrain to max distance from avatar
135 LLVector3 camera_offset = center - gAgent.getPositionAgent();
136
137 LLViewerRegion * regp = gAgent.getRegion(); 134 LLViewerRegion * regp = gAgent.getRegion();
138 F32 water_height = (NULL != regp) ? regp->getWaterHeight() : 0.f; 135 F32 water_height = (NULL != regp) ? regp->getWaterHeight() : 0.f;
139 136
@@ -306,7 +303,7 @@ void LLViewerCamera::setPerspective(BOOL for_selection,
306{ 303{
307 F32 fov_y, aspect; 304 F32 fov_y, aspect;
308 fov_y = RAD_TO_DEG * getView(); 305 fov_y = RAD_TO_DEG * getView();
309 BOOL z_default_near, z_default_far = FALSE; 306 BOOL z_default_far = FALSE;
310 if (z_far <= 0) 307 if (z_far <= 0)
311 { 308 {
312 z_default_far = TRUE; 309 z_default_far = TRUE;
@@ -314,7 +311,6 @@ void LLViewerCamera::setPerspective(BOOL for_selection,
314 } 311 }
315 if (z_near <= 0) 312 if (z_near <= 0)
316 { 313 {
317 z_default_near = TRUE;
318 z_near = getNear(); 314 z_near = getNear();
319 } 315 }
320 aspect = getAspect(); 316 aspect = getAspect();
diff --git a/linden/indra/newview/llviewerdisplay.cpp b/linden/indra/newview/llviewerdisplay.cpp
index 5d9a55d..4495ecc 100644
--- a/linden/indra/newview/llviewerdisplay.cpp
+++ b/linden/indra/newview/llviewerdisplay.cpp
@@ -977,7 +977,6 @@ void render_hud_attachments()
977 if (LLPipeline::sShowHUDAttachments && !gDisconnected && setup_hud_matrices()) 977 if (LLPipeline::sShowHUDAttachments && !gDisconnected && setup_hud_matrices())
978 { 978 {
979 LLCamera hud_cam = *LLViewerCamera::getInstance(); 979 LLCamera hud_cam = *LLViewerCamera::getInstance();
980 LLVector3 origin = hud_cam.getOrigin();
981 hud_cam.setOrigin(-1.f,0,0); 980 hud_cam.setOrigin(-1.f,0,0);
982 hud_cam.setAxes(LLVector3(1,0,0), LLVector3(0,1,0), LLVector3(0,0,1)); 981 hud_cam.setAxes(LLVector3(1,0,0), LLVector3(0,1,0), LLVector3(0,0,1));
983 LLViewerCamera::updateFrustumPlanes(hud_cam, TRUE); 982 LLViewerCamera::updateFrustumPlanes(hud_cam, TRUE);
diff --git a/linden/indra/newview/llviewergenericmessage.cpp b/linden/indra/newview/llviewergenericmessage.cpp
index 0bbcadd..e4b325d 100644
--- a/linden/indra/newview/llviewergenericmessage.cpp
+++ b/linden/indra/newview/llviewergenericmessage.cpp
@@ -1,12 +1,12 @@
1/** 1/**
2 * @file llviewergenericmessage.cpp 2 * @file llviewergenericmessage.cpp
3 * @brief Handle processing of "generic messages" which contain short lists of strings. 3 * @brief Handle processing of "generic messages" which contain short lists of strings.
4 * @author James Cook 4 * @author James Cook
5 * 5 *
6 * $LicenseInfo:firstyear=2007&license=viewergpl$ 6 * $LicenseInfo:firstyear=2007&license=viewergpl$
7 * 7 *
8 * Copyright (c) 2007-2009, Linden Research, Inc. 8 * Copyright (c) 2007-2009, Linden Research, Inc.
9 * 9 *
10 * Second Life Viewer Source Code 10 * Second Life Viewer Source Code
11 * The source code in this file ("Source Code") is provided by Linden Lab 11 * The source code in this file ("Source Code") is provided by Linden Lab
12 * to you under the terms of the GNU General Public License, version 2.0 12 * to you under the terms of the GNU General Public License, version 2.0
@@ -14,17 +14,17 @@
14 * ("Other License"), formally executed by you and Linden Lab. Terms of 14 * ("Other License"), formally executed by you and Linden Lab. Terms of
15 * the GPL can be found in doc/GPL-license.txt in this distribution, or 15 * the GPL can be found in doc/GPL-license.txt in this distribution, or
16 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 16 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
17 * 17 *
18 * There are special exceptions to the terms and conditions of the GPL as 18 * There are special exceptions to the terms and conditions of the GPL as
19 * it is applied to this Source Code. View the full text of the exception 19 * it is applied to this Source Code. View the full text of the exception
20 * in the file doc/FLOSS-exception.txt in this software distribution, or 20 * in the file doc/FLOSS-exception.txt in this software distribution, or
21 * online at 21 * online at
22 * http://secondlifegrid.net/programs/open_source/licensing/flossexception 22 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
23 * 23 *
24 * By copying, modifying or distributing this software, you acknowledge 24 * By copying, modifying or distributing this software, you acknowledge
25 * that you have read and understood your obligations described above, 25 * that you have read and understood your obligations described above,
26 * and agree to abide by those obligations. 26 * and agree to abide by those obligations.
27 * 27 *
28 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO 28 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
29 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, 29 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
30 * COMPLETENESS OR PERFORMANCE. 30 * COMPLETENESS OR PERFORMANCE.
@@ -39,7 +39,7 @@
39#include "message.h" 39#include "message.h"
40#include "llagent.h" 40#include "llagent.h"
41#include "lluuid.h" 41#include "lluuid.h"
42#include "lightshare.h" 42#include "llettherebelight.h"
43 43
44 44
45LLDispatcher gGenericDispatcher; 45LLDispatcher gGenericDispatcher;
@@ -84,16 +84,16 @@ void process_generic_message(LLMessageSystem* msg, void**)
84 msg->getUUID("AgentData", "AgentID", agent_id); 84 msg->getUUID("AgentData", "AgentID", agent_id);
85 std::string method; 85 std::string method;
86 msg->getStringFast(_PREHASH_MethodData, _PREHASH_Method, method); 86 msg->getStringFast(_PREHASH_MethodData, _PREHASH_Method, method);
87 87
88 // TODO: Use a proper dispatcher. 88 // TODO: Use a proper dispatcher.
89 if(method == "Windlight") 89 if(method == "Windlight")
90 { 90 {
91 WindlightMessage::processWindlight(msg, NULL); 91 LightShare::processWindlight(msg, NULL);
92 return; 92 return;
93 } 93 }
94 else if(method == "WindlightReset") 94 else if(method == "WindlightReset")
95 { 95 {
96 WindlightMessage::resetRegion(); 96 LightShare::resetRegion();
97 return; 97 return;
98 } 98 }
99 99
@@ -111,7 +111,7 @@ void process_generic_message(LLMessageSystem* msg, void**)
111 111
112 if(!gGenericDispatcher.dispatch(request, invoice, strings)) 112 if(!gGenericDispatcher.dispatch(request, invoice, strings))
113 { 113 {
114 llwarns << "GenericMessage " << request << " failed to dispatch" 114 llwarns << "GenericMessage " << request << " failed to dispatch"
115 << llendl; 115 << llendl;
116 } 116 }
117 } 117 }
diff --git a/linden/indra/newview/llviewermenu.cpp b/linden/indra/newview/llviewermenu.cpp
index f2f37c4..0b76f2c 100644
--- a/linden/indra/newview/llviewermenu.cpp
+++ b/linden/indra/newview/llviewermenu.cpp
@@ -238,6 +238,8 @@
238#include "llfloaterteleporthistory.h" 238#include "llfloaterteleporthistory.h"
239#include "slfloatermediafilter.h" 239#include "slfloatermediafilter.h"
240 240
241#include "rcmoapradar.h"
242
241using namespace LLVOAvatarDefines; 243using namespace LLVOAvatarDefines;
242void init_client_menu(LLMenuGL* menu); 244void init_client_menu(LLMenuGL* menu);
243void init_server_menu(LLMenuGL* menu); 245void init_server_menu(LLMenuGL* menu);
@@ -1096,10 +1098,10 @@ void init_debug_ui_menu(LLMenuGL* menu)
1096 menu->append(new LLMenuItemCallGL("Editable UI", &edit_ui)); 1098 menu->append(new LLMenuItemCallGL("Editable UI", &edit_ui));
1097 menu->append(new LLMenuItemCallGL( "Dump SelectMgr", &dump_select_mgr)); 1099 menu->append(new LLMenuItemCallGL( "Dump SelectMgr", &dump_select_mgr));
1098 menu->append(new LLMenuItemCallGL( "Dump Inventory", &dump_inventory)); 1100 menu->append(new LLMenuItemCallGL( "Dump Inventory", &dump_inventory));
1099 menu->append(new LLMenuItemCallGL( "Dump Focus Holder", &handle_dump_focus, NULL, NULL, 'F', MASK_ALT | MASK_CONTROL)); 1101 menu->append(new LLMenuItemCallGL( "Dump Focus Holder", &handle_dump_focus));
1100 menu->append(new LLMenuItemCallGL( "Print Selected Object Info", &print_object_info, NULL, NULL, 'P', MASK_CONTROL|MASK_SHIFT )); 1102 menu->append(new LLMenuItemCallGL( "Print Selected Object Info", &print_object_info));
1101 menu->append(new LLMenuItemCallGL( "Print Agent Info", &print_agent_nvpairs, NULL, NULL, 'P', MASK_SHIFT )); 1103 menu->append(new LLMenuItemCallGL( "Print Agent Info", &print_agent_nvpairs));
1102 menu->append(new LLMenuItemCallGL( "Memory Stats", &output_statistics, NULL, NULL, 'M', MASK_SHIFT | MASK_ALT | MASK_CONTROL)); 1104 menu->append(new LLMenuItemCallGL( "Memory Stats", &output_statistics));
1103 menu->append(new LLMenuItemCheckGL("Double-Click Auto-Pilot", 1105 menu->append(new LLMenuItemCheckGL("Double-Click Auto-Pilot",
1104 menu_toggle_control, NULL, menu_check_control, 1106 menu_toggle_control, NULL, menu_check_control,
1105 (void*)"DoubleClickAutoPilot")); 1107 (void*)"DoubleClickAutoPilot"));
@@ -1256,7 +1258,6 @@ void init_debug_rendering_menu(LLMenuGL* menu)
1256 sub_menu->append(new LLMenuItemCheckGL("Octree", &LLPipeline::toggleRenderDebug, NULL, 1258 sub_menu->append(new LLMenuItemCheckGL("Octree", &LLPipeline::toggleRenderDebug, NULL,
1257 &LLPipeline::toggleRenderDebugControl, 1259 &LLPipeline::toggleRenderDebugControl,
1258 (void*)LLPipeline::RENDER_DEBUG_OCTREE)); 1260 (void*)LLPipeline::RENDER_DEBUG_OCTREE));
1259 // For Imprudence 1.3 - need to XUIfy
1260 sub_menu->append(new LLMenuItemCheckGL("Shadow Frusta", &LLPipeline::toggleRenderDebug, NULL, 1261 sub_menu->append(new LLMenuItemCheckGL("Shadow Frusta", &LLPipeline::toggleRenderDebug, NULL,
1261 &LLPipeline::toggleRenderDebugControl, 1262 &LLPipeline::toggleRenderDebugControl,
1262 (void*)LLPipeline::RENDER_DEBUG_SHADOW_FRUSTA)); 1263 (void*)LLPipeline::RENDER_DEBUG_SHADOW_FRUSTA));
@@ -5216,6 +5217,24 @@ class LLViewEnableLastChatter : public view_listener_t
5216 } 5217 }
5217}; 5218};
5218 5219
5220class LLViewToggleRadar: public view_listener_t
5221{
5222 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
5223 {
5224 LLFloaterAvatarList::toggle(0);
5225 return true;
5226 }
5227};
5228
5229class LLViewToggleMOAPRadar: public view_listener_t
5230{
5231 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
5232 {
5233 LLFloaterMOAPRadar::toggle(0);
5234 return true;
5235 }
5236};
5237
5219class LLEditEnableDeselect : public view_listener_t 5238class LLEditEnableDeselect : public view_listener_t
5220{ 5239{
5221 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 5240 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
@@ -8946,12 +8965,6 @@ class LLAdvancedToggleAssetBrowser: public view_listener_t
8946 { 8965 {
8947 //open the floater 8966 //open the floater
8948 LLFloaterAssetBrowser::show(0); 8967 LLFloaterAssetBrowser::show(0);
8949
8950 bool vis = false;
8951 if(LLFloaterAssetBrowser::getInstance())
8952 {
8953 vis = (bool)LLFloaterAssetBrowser::getInstance()->getVisible();
8954 }
8955 return true; 8968 return true;
8956 } 8969 }
8957}; 8970};
@@ -9058,7 +9071,7 @@ class LLAdvancedToggleRenderType : public view_listener_t
9058{ 9071{
9059 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 9072 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
9060 { 9073 {
9061 U32 render_type = render_type_from_string( userdata.asString() ); 9074 intptr_t render_type = render_type_from_string( userdata.asString() );
9062 if ( render_type != 0 ) 9075 if ( render_type != 0 )
9063 { 9076 {
9064 LLPipeline::toggleRenderTypeControl( (void*)render_type ); 9077 LLPipeline::toggleRenderTypeControl( (void*)render_type );
@@ -9072,7 +9085,7 @@ class LLAdvancedCheckRenderType : public view_listener_t
9072{ 9085{
9073 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 9086 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
9074 { 9087 {
9075 U32 render_type = render_type_from_string( userdata["data"].asString() ); 9088 intptr_t render_type = render_type_from_string( userdata["data"].asString() );
9076 bool new_value = false; 9089 bool new_value = false;
9077 9090
9078 if ( render_type != 0 ) 9091 if ( render_type != 0 )
@@ -9138,7 +9151,7 @@ class LLAdvancedToggleFeature : public view_listener_t
9138{ 9151{
9139 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 9152 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
9140 { 9153 {
9141 U32 feature = feature_from_string( userdata.asString() ); 9154 intptr_t feature = feature_from_string( userdata.asString() );
9142 9155
9143 if ( feature != 0 ) 9156 if ( feature != 0 )
9144 { 9157 {
@@ -9154,7 +9167,7 @@ class LLAdvancedCheckFeature : public view_listener_t
9154{ 9167{
9155 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 9168 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
9156 { 9169 {
9157 U32 feature = feature_from_string( userdata["data"].asString() ); 9170 intptr_t feature = feature_from_string( userdata["data"].asString() );
9158 bool new_value = false; 9171 bool new_value = false;
9159 9172
9160 if ( feature != 0 ) 9173 if ( feature != 0 )
@@ -9249,6 +9262,10 @@ U32 info_display_from_string(std::string info_display)
9249 { 9262 {
9250 return LLPipeline::RENDER_DEBUG_SCULPTED; 9263 return LLPipeline::RENDER_DEBUG_SCULPTED;
9251 } 9264 }
9265 else if ("shadow frusta" == info_display)
9266 {
9267 return LLPipeline::RENDER_DEBUG_SHADOW_FRUSTA;
9268 }
9252 else 9269 else
9253 { 9270 {
9254 return 0; 9271 return 0;
@@ -9260,7 +9277,7 @@ class LLAdvancedToggleInfoDisplay : public view_listener_t
9260{ 9277{
9261 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 9278 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
9262 { 9279 {
9263 U32 info_display = info_display_from_string( userdata.asString() ); 9280 intptr_t info_display = info_display_from_string( userdata.asString() );
9264 9281
9265 if ( info_display != 0 ) 9282 if ( info_display != 0 )
9266 { 9283 {
@@ -9276,7 +9293,7 @@ class LLAdvancedCheckInfoDisplay : public view_listener_t
9276{ 9293{
9277 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 9294 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
9278 { 9295 {
9279 U32 info_display = info_display_from_string( userdata["data"].asString() ); 9296 intptr_t info_display = info_display_from_string( userdata["data"].asString() );
9280 bool new_value = false; 9297 bool new_value = false;
9281 9298
9282 if ( info_display != 0 ) 9299 if ( info_display != 0 )
@@ -11215,6 +11232,8 @@ void initialize_menus()
11215 addMenu(new LLViewEnableMouselook(), "View.EnableMouselook"); 11232 addMenu(new LLViewEnableMouselook(), "View.EnableMouselook");
11216 addMenu(new LLViewEnableJoystickFlycam(), "View.EnableJoystickFlycam"); 11233 addMenu(new LLViewEnableJoystickFlycam(), "View.EnableJoystickFlycam");
11217 addMenu(new LLViewEnableLastChatter(), "View.EnableLastChatter"); 11234 addMenu(new LLViewEnableLastChatter(), "View.EnableLastChatter");
11235 addMenu(new LLViewToggleRadar(), "View.ToggleAvatarList");
11236 addMenu(new LLViewToggleMOAPRadar(), "View.ToggleMOAPList");
11218 11237
11219 addMenu(new LLViewCheckBuildMode(), "View.CheckBuildMode"); 11238 addMenu(new LLViewCheckBuildMode(), "View.CheckBuildMode");
11220 addMenu(new LLViewCheckJoystickFlycam(), "View.CheckJoystickFlycam"); 11239 addMenu(new LLViewCheckJoystickFlycam(), "View.CheckJoystickFlycam");
diff --git a/linden/indra/newview/llviewermessage.cpp b/linden/indra/newview/llviewermessage.cpp
index 9a0cf47..10d701d 100755..100644
--- a/linden/indra/newview/llviewermessage.cpp
+++ b/linden/indra/newview/llviewermessage.cpp
@@ -1,12 +1,12 @@
1 1
2/** 2/**
3 * @file llviewermessage.cpp 3 * @file llviewermessage.cpp
4 * @brief Dumping ground for viewer-side message system callbacks. 4 * @brief Dumping ground for viewer-side message system callbacks.
5 * 5 *
6 * $LicenseInfo:firstyear=2002&license=viewergpl$ 6 * $LicenseInfo:firstyear=2002&license=viewergpl$
7 * 7 *
8 * Copyright (c) 2002-2009, Linden Research, Inc. 8 * Copyright (c) 2002-2009, Linden Research, Inc.
9 * 9 *
10 * Second Life Viewer Source Code 10 * Second Life Viewer Source Code
11 * The source code in this file ("Source Code") is provided by Linden Lab 11 * The source code in this file ("Source Code") is provided by Linden Lab
12 * to you under the terms of the GNU General Public License, version 2.0 12 * to you under the terms of the GNU General Public License, version 2.0
@@ -14,17 +14,17 @@
14 * ("Other License"), formally executed by you and Linden Lab. Terms of 14 * ("Other License"), formally executed by you and Linden Lab. Terms of
15 * the GPL can be found in doc/GPL-license.txt in this distribution, or 15 * the GPL can be found in doc/GPL-license.txt in this distribution, or
16 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 16 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
17 * 17 *
18 * There are special exceptions to the terms and conditions of the GPL as 18 * There are special exceptions to the terms and conditions of the GPL as
19 * it is applied to this Source Code. View the full text of the exception 19 * it is applied to this Source Code. View the full text of the exception
20 * in the file doc/FLOSS-exception.txt in this software distribution, or 20 * in the file doc/FLOSS-exception.txt in this software distribution, or
21 * online at 21 * online at
22 * http://secondlifegrid.net/programs/open_source/licensing/flossexception 22 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
23 * 23 *
24 * By copying, modifying or distributing this software, you acknowledge 24 * By copying, modifying or distributing this software, you acknowledge
25 * that you have read and understood your obligations described above, 25 * that you have read and understood your obligations described above,
26 * and agree to abide by those obligations. 26 * and agree to abide by those obligations.
27 * 27 *
28 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO 28 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
29 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, 29 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
30 * COMPLETENESS OR PERFORMANCE. 30 * COMPLETENESS OR PERFORMANCE.
@@ -37,7 +37,7 @@
37 37
38#include <deque> 38#include <deque>
39 39
40#include "llaudioengine.h" 40#include "llaudioengine.h"
41#include "indra_constants.h" 41#include "indra_constants.h"
42#include "lscript_byteformat.h" 42#include "lscript_byteformat.h"
43#include "mean_collision_data.h" 43#include "mean_collision_data.h"
@@ -65,7 +65,7 @@
65#include "lltimer.h" 65#include "lltimer.h"
66#include "llmd5.h" 66#include "llmd5.h"
67 67
68#include "lightshare.h" 68#include "llettherebelight.h"
69#include "llagent.h" 69#include "llagent.h"
70#include "llcallingcard.h" 70#include "llcallingcard.h"
71#include "llconsole.h" 71#include "llconsole.h"
@@ -132,6 +132,7 @@
132#include "llvlmanager.h" 132#include "llvlmanager.h"
133#include "llvoavatar.h" 133#include "llvoavatar.h"
134#include "llvotextbubble.h" 134#include "llvotextbubble.h"
135#include "llwlparammanager.h"
135#include "llweb.h" 136#include "llweb.h"
136#include "llworld.h" 137#include "llworld.h"
137#include "pipeline.h" 138#include "pipeline.h"
@@ -151,7 +152,6 @@
151 152
152#include "hippogridmanager.h" 153#include "hippogridmanager.h"
153#include "hippolimits.h" 154#include "hippolimits.h"
154#include "wlsettingsmanager.h"
155 155
156#if LL_WINDOWS // For Windows specific error handler 156#if LL_WINDOWS // For Windows specific error handler
157#include "llwindebug.h" // For the invalid message handler 157#include "llwindebug.h" // For the invalid message handler
@@ -199,8 +199,8 @@ const U32 OFFER_THROTTLE_MAX_COUNT=5; //number of items per time period
199const F32 OFFER_THROTTLE_TIME=10.f; //time period in seconds 199const F32 OFFER_THROTTLE_TIME=10.f; //time period in seconds
200 200
201//script permissions 201//script permissions
202const std::string SCRIPT_QUESTIONS[SCRIPT_PERMISSION_EOF] = 202const std::string SCRIPT_QUESTIONS[SCRIPT_PERMISSION_EOF] =
203 { 203 {
204 "ScriptTakeMoney", 204 "ScriptTakeMoney",
205 "ActOnControlInputs", 205 "ActOnControlInputs",
206 "RemapControlInputs", 206 "RemapControlInputs",
@@ -214,7 +214,7 @@ const std::string SCRIPT_QUESTIONS[SCRIPT_PERMISSION_EOF] =
214 "ControlYourCamera" 214 "ControlYourCamera"
215 }; 215 };
216 216
217const BOOL SCRIPT_QUESTION_IS_CAUTION[SCRIPT_PERMISSION_EOF] = 217const BOOL SCRIPT_QUESTION_IS_CAUTION[SCRIPT_PERMISSION_EOF] =
218{ 218{
219 TRUE, // ScriptTakeMoney, 219 TRUE, // ScriptTakeMoney,
220 FALSE, // ActOnControlInputs 220 FALSE, // ActOnControlInputs
@@ -466,7 +466,7 @@ void process_layer_data(LLMessageSystem *mesgsys, void **user_data)
466// char image_uuid_str[UUID_STR_SIZE]; /* Flawfinder: ignore */ 466// char image_uuid_str[UUID_STR_SIZE]; /* Flawfinder: ignore */
467// memcpy(image_uuid_str, pos_uuid+2, UUID_STR_SIZE-1); /* Flawfinder: ignore */ 467// memcpy(image_uuid_str, pos_uuid+2, UUID_STR_SIZE-1); /* Flawfinder: ignore */
468// image_uuid_str[UUID_STR_SIZE-1] = 0; 468// image_uuid_str[UUID_STR_SIZE-1] = 0;
469 469
470// LLUUID image_uuid(image_uuid_str); 470// LLUUID image_uuid(image_uuid_str);
471 471
472// LL_INFOS("Messaging") << "Found UUID: " << image_uuid << LL_ENDL; 472// LL_INFOS("Messaging") << "Found UUID: " << image_uuid << LL_ENDL;
@@ -541,7 +541,7 @@ void process_layer_data(LLMessageSystem *mesgsys, void **user_data)
541// else 541// else
542// { 542// {
543// LLFILE* fIn = LLFile::fopen(filename, "rb"); /* Flawfinder: ignore */ 543// LLFILE* fIn = LLFile::fopen(filename, "rb"); /* Flawfinder: ignore */
544// if (fIn) 544// if (fIn)
545// { 545// {
546// LLPointer<LLImageJ2C> ImageUtility = new LLImageJ2C; 546// LLPointer<LLImageJ2C> ImageUtility = new LLImageJ2C;
547// LLPointer<LLImageTGA> TargaUtility = new LLImageTGA; 547// LLPointer<LLImageTGA> TargaUtility = new LLImageTGA;
@@ -562,13 +562,13 @@ void process_layer_data(LLMessageSystem *mesgsys, void **user_data)
562 562
563// ImageUtility->updateData(); 563// ImageUtility->updateData();
564// ImageUtility->decode(image, 100000.0f); 564// ImageUtility->decode(image, 100000.0f);
565 565
566// TargaUtility->encode(image); 566// TargaUtility->encode(image);
567// U8 *data = TargaUtility->getData(); 567// U8 *data = TargaUtility->getData();
568// S32 data_size = TargaUtility->getDataSize(); 568// S32 data_size = TargaUtility->getDataSize();
569 569
570// std::string file_path = gDirUtilp->getDirName(filename); 570// std::string file_path = gDirUtilp->getDirName(filename);
571 571
572// std::string output_file = llformat("%s/image-%03d.tga", file_path.c_str(), image_num);//filename; 572// std::string output_file = llformat("%s/image-%03d.tga", file_path.c_str(), image_num);//filename;
573// //S32 name_len = output_file.length(); 573// //S32 name_len = output_file.length();
574// //strcpy(&output_file[name_len-3], "tga"); 574// //strcpy(&output_file[name_len-3], "tga");
@@ -657,7 +657,6 @@ void send_sound_trigger(const LLUUID& sound_id, F32 gain)
657bool join_group_response(const LLSD& notification, const LLSD& response) 657bool join_group_response(const LLSD& notification, const LLSD& response)
658{ 658{
659 S32 option = LLNotification::getSelectedOption(notification, response); 659 S32 option = LLNotification::getSelectedOption(notification, response);
660 BOOL delete_context_data = TRUE;
661 bool accept_invite = false; 660 bool accept_invite = false;
662 661
663 LLUUID group_id = notification["payload"]["group_id"].asUUID(); 662 LLUUID group_id = notification["payload"]["group_id"].asUUID();
@@ -686,7 +685,6 @@ bool join_group_response(const LLSD& notification, const LLSD& response)
686 } 685 }
687 else 686 else
688 { 687 {
689 delete_context_data = FALSE;
690 LLSD args; 688 LLSD args;
691 args["NAME"] = name; 689 args["NAME"] = name;
692 args["INVITE"] = message; 690 args["INVITE"] = message;
@@ -700,7 +698,6 @@ bool join_group_response(const LLSD& notification, const LLSD& response)
700 // sure the user is sure they want to join. 698 // sure the user is sure they want to join.
701 if (fee > 0) 699 if (fee > 0)
702 { 700 {
703 delete_context_data = FALSE;
704 LLSD args; 701 LLSD args;
705 args["COST"] = llformat("%d", fee); 702 args["COST"] = llformat("%d", fee);
706 args["CURRENCY"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol(); 703 args["CURRENCY"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
@@ -756,10 +753,10 @@ private:
756 std::string mFromName; 753 std::string mFromName;
757}; 754};
758 755
759//unlike the FetchObserver for AgentOffer, we only make one 756//unlike the FetchObserver for AgentOffer, we only make one
760//instance of the AddedObserver for TaskOffers 757//instance of the AddedObserver for TaskOffers
761//and it never dies. We do this because we don't know the UUID of 758//and it never dies. We do this because we don't know the UUID of
762//task offers until they are accepted, so we don't wouldn't 759//task offers until they are accepted, so we don't wouldn't
763//know what to watch for, so instead we just watch for all additions. 760//know what to watch for, so instead we just watch for all additions.
764class LLOpenTaskOffer : public LLInventoryAddedObserver 761class LLOpenTaskOffer : public LLInventoryAddedObserver
765{ 762{
@@ -776,7 +773,7 @@ LLOpenTaskOffer* gNewInventoryObserver=NULL;
776 773
777void start_new_inventory_observer() 774void start_new_inventory_observer()
778{ 775{
779 if (!gNewInventoryObserver) //task offer observer 776 if (!gNewInventoryObserver) //task offer observer
780 { 777 {
781 // Observer is deleted by gInventory 778 // Observer is deleted by gInventory
782 gNewInventoryObserver = new LLOpenTaskOffer; 779 gNewInventoryObserver = new LLOpenTaskOffer;
@@ -835,7 +832,7 @@ protected:
835 832
836 833
837//Returns TRUE if we are OK, FALSE if we are throttled 834//Returns TRUE if we are OK, FALSE if we are throttled
838//Set check_only true if you want to know the throttle status 835//Set check_only true if you want to know the throttle status
839//without registering a hit 836//without registering a hit
840bool check_offer_throttle(const std::string& from_name, bool check_only) 837bool check_offer_throttle(const std::string& from_name, bool check_only)
841{ 838{
@@ -851,7 +848,7 @@ bool check_offer_throttle(const std::string& from_name, bool check_only)
851 { 848 {
852 return gThrottleTimer.hasExpired(); 849 return gThrottleTimer.hasExpired();
853 } 850 }
854 851
855 if(gThrottleTimer.checkExpirationAndReset(OFFER_THROTTLE_TIME)) 852 if(gThrottleTimer.checkExpirationAndReset(OFFER_THROTTLE_TIME))
856 { 853 {
857 LL_DEBUGS("Messaging") << "Throttle Expired" << LL_ENDL; 854 LL_DEBUGS("Messaging") << "Throttle Expired" << LL_ENDL;
@@ -897,7 +894,7 @@ bool check_offer_throttle(const std::string& from_name, bool check_only)
897 } 894 }
898 } 895 }
899} 896}
900 897
901void open_offer(const std::vector<LLUUID>& items, const std::string& from_name) 898void open_offer(const std::vector<LLUUID>& items, const std::string& from_name)
902{ 899{
903 std::vector<LLUUID>::const_iterator it = items.begin(); 900 std::vector<LLUUID>::const_iterator it = items.begin();
@@ -928,11 +925,9 @@ void open_offer(const std::vector<LLUUID>& items, const std::string& from_name)
928 { 925 {
929 case LLAssetType::AT_NOTECARD: 926 case LLAssetType::AT_NOTECARD:
930 // Don't show WindLight settings as notecards. 927 // Don't show WindLight settings as notecards.
931 // *TODO: centralise all these damned .wl/.ww checks somewhere. 928 if(!LLWLParamManager::isSettingsNotecard(item->getName()))
932 if((item->getName().length() > 2 && item->getName().compare(item->getName().length() - 3, 3, ".wl") != 0) &&
933 (item->getName().compare(item->getName().length() - 3, 3, ".ww") != 0))
934 { 929 {
935 open_notecard((LLViewerInventoryItem*)item, std::string("Note: ") + item->getName(), 930 open_notecard((LLViewerInventoryItem*)item, std::string("Note: ") + item->getName(),
936 LLUUID::null, show_keep_discard, LLUUID::null, FALSE); 931 LLUUID::null, show_keep_discard, LLUUID::null, FALSE);
937 } 932 }
938 break; 933 break;
@@ -948,7 +943,7 @@ void open_offer(const std::vector<LLUUID>& items, const std::string& from_name)
948 } 943 }
949 } 944 }
950 //highlight item, if it's not in the trash or lost+found 945 //highlight item, if it's not in the trash or lost+found
951 946
952 // Don't auto-open the inventory floater 947 // Don't auto-open the inventory floater
953 LLInventoryView* view = LLInventoryView::getActiveInventory(); 948 LLInventoryView* view = LLInventoryView::getActiveInventory();
954 if(!view) 949 if(!view)
@@ -1028,7 +1023,7 @@ void inventory_offer_mute_callback(const LLUUID& blocked_id,
1028 OfferMatcher(const LLUUID& to_block) : blocked_id(to_block) {} 1023 OfferMatcher(const LLUUID& to_block) : blocked_id(to_block) {}
1029 BOOL matches(const LLNotificationPtr notification) const 1024 BOOL matches(const LLNotificationPtr notification) const
1030 { 1025 {
1031 if(notification->getName() == "ObjectGiveItem" 1026 if(notification->getName() == "ObjectGiveItem"
1032 || notification->getName() == "ObjectGiveItemUnknownUser" 1027 || notification->getName() == "ObjectGiveItemUnknownUser"
1033 || notification->getName() == "UserGiveItem") 1028 || notification->getName() == "UserGiveItem")
1034 { 1029 {
@@ -1104,7 +1099,7 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD&
1104 std::string name; 1099 std::string name;
1105 gAgent.buildFullname(name); 1100 gAgent.buildFullname(name);
1106 msg->addStringFast(_PREHASH_FromAgentName, name); 1101 msg->addStringFast(_PREHASH_FromAgentName, name);
1107 msg->addStringFast(_PREHASH_Message, ""); 1102 msg->addStringFast(_PREHASH_Message, "");
1108 msg->addU32Fast(_PREHASH_ParentEstateID, 0); 1103 msg->addU32Fast(_PREHASH_ParentEstateID, 0);
1109 msg->addUUIDFast(_PREHASH_RegionID, LLUUID::null); 1104 msg->addUUIDFast(_PREHASH_RegionID, LLUUID::null);
1110 msg->addVector3Fast(_PREHASH_Position, gAgent.getPositionAgent()); 1105 msg->addVector3Fast(_PREHASH_Position, gAgent.getPositionAgent());
@@ -1164,9 +1159,9 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD&
1164 { 1159 {
1165 from_string = chatHistory_string = mFromName; 1160 from_string = chatHistory_string = mFromName;
1166 } 1161 }
1167 1162
1168 bool busy=FALSE; 1163 bool busy=FALSE;
1169 1164
1170 switch(button) 1165 switch(button)
1171 { 1166 {
1172 case IOR_ACCEPT: 1167 case IOR_ACCEPT:
@@ -1188,7 +1183,7 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD&
1188 // ACCEPT. The math for the dialog works, because the accept 1183 // ACCEPT. The math for the dialog works, because the accept
1189 // for inventory_offered, task_inventory_offer or 1184 // for inventory_offered, task_inventory_offer or
1190 // group_notice_inventory is 1 greater than the offer integer value. 1185 // group_notice_inventory is 1 greater than the offer integer value.
1191 // Generates IM_INVENTORY_ACCEPTED, IM_TASK_INVENTORY_ACCEPTED, 1186 // Generates IM_INVENTORY_ACCEPTED, IM_TASK_INVENTORY_ACCEPTED,
1192 // or IM_GROUP_NOTICE_INVENTORY_ACCEPTED 1187 // or IM_GROUP_NOTICE_INVENTORY_ACCEPTED
1193 msg->addU8Fast(_PREHASH_Dialog, (U8)(mIM + 1)); 1188 msg->addU8Fast(_PREHASH_Dialog, (U8)(mIM + 1));
1194 msg->addBinaryDataFast(_PREHASH_BinaryBucket, &(mFolderID.mData), 1189 msg->addBinaryDataFast(_PREHASH_BinaryBucket, &(mFolderID.mData),
@@ -1288,7 +1283,7 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD&
1288 LLFloaterChat::addChatHistory(chat); 1283 LLFloaterChat::addChatHistory(chat);
1289 1284
1290 // If it's from an agent, we have to fetch the item to throw 1285 // If it's from an agent, we have to fetch the item to throw
1291 // it away. If it's from a task or group, just denying the 1286 // it away. If it's from a task or group, just denying the
1292 // request will suffice to discard the item. 1287 // request will suffice to discard the item.
1293 if(IM_INVENTORY_OFFERED == mIM) 1288 if(IM_INVENTORY_OFFERED == mIM)
1294 { 1289 {
@@ -1306,7 +1301,7 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD&
1306 { 1301 {
1307 opener = discard_agent_offer; 1302 opener = discard_agent_offer;
1308 } 1303 }
1309 1304
1310 } 1305 }
1311 if (busy && (!mFromGroup && !mFromObject)) 1306 if (busy && (!mFromGroup && !mFromObject))
1312 { 1307 {
@@ -1338,7 +1333,7 @@ void inventory_offer_handler(LLOfferInfo* info, BOOL from_task)
1338 info->forceResponse(IOR_BUSY); 1333 info->forceResponse(IOR_BUSY);
1339 return; 1334 return;
1340 } 1335 }
1341 1336
1342 //If muted, don't even go through the messaging stuff. Just curtail the offer here. 1337 //If muted, don't even go through the messaging stuff. Just curtail the offer here.
1343 if (LLMuteList::getInstance()->isMuted(info->mFromID, info->mFromName)) 1338 if (LLMuteList::getInstance()->isMuted(info->mFromID, info->mFromName))
1344 { 1339 {
@@ -1377,7 +1372,7 @@ void inventory_offer_handler(LLOfferInfo* info, BOOL from_task)
1377 } 1372 }
1378// [/RLVa:KB] 1373// [/RLVa:KB]
1379 } 1374 }
1380 1375
1381 LLSD args; 1376 LLSD args;
1382 args["[OBJECTNAME]"] = msg; 1377 args["[OBJECTNAME]"] = msg;
1383 1378
@@ -1480,7 +1475,7 @@ static LLNotificationFunctorRegistration group_vote_callback_reg("GroupVote", gr
1480bool lure_callback(const LLSD& notification, const LLSD& response) 1475bool lure_callback(const LLSD& notification, const LLSD& response)
1481{ 1476{
1482 S32 option = 0; 1477 S32 option = 0;
1483 if (response.isInteger()) 1478 if (response.isInteger())
1484 { 1479 {
1485 option = response.asInteger(); 1480 option = response.asInteger();
1486 } 1481 }
@@ -1488,7 +1483,7 @@ bool lure_callback(const LLSD& notification, const LLSD& response)
1488 { 1483 {
1489 option = LLNotification::getSelectedOption(notification, response); 1484 option = LLNotification::getSelectedOption(notification, response);
1490 } 1485 }
1491 1486
1492 LLUUID from_id = notification["payload"]["from_id"].asUUID(); 1487 LLUUID from_id = notification["payload"]["from_id"].asUUID();
1493 LLUUID lure_id = notification["payload"]["lure_id"].asUUID(); 1488 LLUUID lure_id = notification["payload"]["lure_id"].asUUID();
1494 BOOL godlike = notification["payload"]["godlike"].asBoolean(); 1489 BOOL godlike = notification["payload"]["godlike"].asBoolean();
@@ -1548,7 +1543,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1548 S32 binary_bucket_size; 1543 S32 binary_bucket_size;
1549 LLChat chat; 1544 LLChat chat;
1550 std::string buffer; 1545 std::string buffer;
1551 1546
1552 // *TODO:translate - need to fix the full name to first/last (maybe) 1547 // *TODO:translate - need to fix the full name to first/last (maybe)
1553 msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, from_id); 1548 msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, from_id);
1554 msg->getBOOLFast(_PREHASH_MessageBlock, _PREHASH_FromGroup, from_group); 1549 msg->getBOOLFast(_PREHASH_MessageBlock, _PREHASH_FromGroup, from_group);
@@ -1573,7 +1568,6 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1573 BOOL is_owned_by_me = FALSE; 1568 BOOL is_owned_by_me = FALSE;
1574 1569
1575 LLUUID computed_session_id = LLIMMgr::computeSessionID(dialog,from_id); 1570 LLUUID computed_session_id = LLIMMgr::computeSessionID(dialog,from_id);
1576
1577 chat.mMuted = is_muted && !is_god; 1571 chat.mMuted = is_muted && !is_god;
1578 chat.mFromID = from_id; 1572 chat.mFromID = from_id;
1579 chat.mFromName = name; 1573 chat.mFromName = name;
@@ -1722,7 +1716,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1722 || dialog == IM_TYPING_STOP 1716 || dialog == IM_TYPING_STOP
1723 || dialog == IM_BUSY_AUTO_RESPONSE) 1717 || dialog == IM_BUSY_AUTO_RESPONSE)
1724 { 1718 {
1725 1719
1726 if(session_id != computed_session_id) 1720 if(session_id != computed_session_id)
1727 { 1721 {
1728 session_id = computed_session_id; 1722 session_id = computed_session_id;
@@ -1961,7 +1955,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1961 } 1955 }
1962 } 1956 }
1963 //InstantMessageResponseItem< 1957 //InstantMessageResponseItem<
1964 1958
1965 } 1959 }
1966 } 1960 }
1967 } 1961 }
@@ -1981,10 +1975,10 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1981 LLNotifications::instance().add("SystemMessageTip",args); 1975 LLNotifications::instance().add("SystemMessageTip",args);
1982 break; 1976 break;
1983 1977
1984 case IM_NOTHING_SPECIAL: 1978 case IM_NOTHING_SPECIAL:
1985 // Don't show dialog, just do IM 1979 // Don't show dialog, just do IM
1986 if (!gAgent.isGodlike() 1980 if (!gAgent.isGodlike()
1987 && gAgent.getRegion()->isPrelude() 1981 && gAgent.getRegion()->isPrelude()
1988 && to_id.isNull() ) 1982 && to_id.isNull() )
1989 { 1983 {
1990 // do nothing -- don't distract newbies in 1984 // do nothing -- don't distract newbies in
@@ -2005,7 +1999,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
2005 ( (!gRlvHandler.hasBehaviour(RLV_BHVR_RECVIM)) || (gRlvHandler.isException(RLV_BHVR_RECVIM, from_id))) ) 1999 ( (!gRlvHandler.hasBehaviour(RLV_BHVR_RECVIM)) || (gRlvHandler.isException(RLV_BHVR_RECVIM, from_id))) )
2006// [/RLVa:KB] 2000// [/RLVa:KB]
2007 { 2001 {
2008 // return a standard "busy" message, but only do it to online IM 2002 // return a standard "busy" message, but only do it to online IM
2009 // (i.e. not other auto responses and not store-and-forward IM) 2003 // (i.e. not other auto responses and not store-and-forward IM)
2010 if (!gIMMgr->hasSession(session_id)) 2004 if (!gIMMgr->hasSession(session_id))
2011 { 2005 {
@@ -2031,7 +2025,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
2031 // now store incoming IM in chat history 2025 // now store incoming IM in chat history
2032 2026
2033 buffer = separator_string + message.substr(message_offset); 2027 buffer = separator_string + message.substr(message_offset);
2034 2028
2035 LL_INFOS("Messaging") << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL; 2029 LL_INFOS("Messaging") << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
2036 2030
2037 // add to IM panel, but do not bother the user 2031 // add to IM panel, but do not bother the user
@@ -2177,7 +2171,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
2177 U8 item_name[DB_INV_ITEM_NAME_BUF_SIZE]; 2171 U8 item_name[DB_INV_ITEM_NAME_BUF_SIZE];
2178 }* notice_bin_bucket; 2172 }* notice_bin_bucket;
2179 2173
2180 // Make sure the binary bucket is big enough to hold the header 2174 // Make sure the binary bucket is big enough to hold the header
2181 // and a null terminated item name. 2175 // and a null terminated item name.
2182 if ( (binary_bucket_size < (S32)((sizeof(notice_bucket_header_t) + sizeof(U8)))) 2176 if ( (binary_bucket_size < (S32)((sizeof(notice_bucket_header_t) + sizeof(U8))))
2183 || (binary_bucket[binary_bucket_size - 1] != '\0') ) 2177 || (binary_bucket[binary_bucket_size - 1] != '\0') )
@@ -2198,7 +2192,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
2198 if (has_inventory) 2192 if (has_inventory)
2199 { 2193 {
2200 info = new LLOfferInfo; 2194 info = new LLOfferInfo;
2201 2195
2202 info->mIM = IM_GROUP_NOTICE; 2196 info->mIM = IM_GROUP_NOTICE;
2203 info->mFromID = from_id; 2197 info->mFromID = from_id;
2204 info->mFromGroup = from_group; 2198 info->mFromGroup = from_group;
@@ -2214,7 +2208,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
2214 info->mDesc = item_name; 2208 info->mDesc = item_name;
2215 info->mHost = msg->getSender(); 2209 info->mHost = msg->getSender();
2216 } 2210 }
2217 2211
2218 std::string str(message); 2212 std::string str(message);
2219 2213
2220 // Tokenize the string. 2214 // Tokenize the string.
@@ -2418,7 +2412,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
2418 LL_WARNS("Messaging") << "Received IM: IM_GROUP_ELECTION_DEPRECATED" << LL_ENDL; 2412 LL_WARNS("Messaging") << "Received IM: IM_GROUP_ELECTION_DEPRECATED" << LL_ENDL;
2419 } 2413 }
2420 break; 2414 break;
2421 2415
2422 case IM_SESSION_SEND: 2416 case IM_SESSION_SEND:
2423 { 2417 {
2424 if (!is_god && is_busy) 2418 if (!is_god && is_busy)
@@ -2480,7 +2474,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
2480 { 2474 {
2481 group_name = std::string((char*)binary_bucket); 2475 group_name = std::string((char*)binary_bucket);
2482 } 2476 }
2483 chat.mText = std::string("IM [") + group_name + std::string("] ") + name 2477 chat.mText = std::string("IM [") + group_name + std::string("] ") + name
2484 + separator_string + saved + message.substr(message_offset); 2478 + separator_string + saved + message.substr(message_offset);
2485 } 2479 }
2486 else 2480 else
@@ -2527,7 +2521,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
2527 } 2521 }
2528 2522
2529 std::string tempname = name; 2523 std::string tempname = name;
2530 2524
2531 size_t found = tempname.find(" "); 2525 size_t found = tempname.find(" ");
2532 while(found != std::string::npos) 2526 while(found != std::string::npos)
2533 { 2527 {
@@ -2539,7 +2533,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
2539 { 2533 {
2540 name = ">>"; 2534 name = ">>";
2541 chat.mFromName = name; 2535 chat.mFromName = name;
2542 2536
2543 } 2537 }
2544 2538
2545 std::ostringstream link; 2539 std::ostringstream link;
@@ -2591,14 +2585,14 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
2591 gIMMgr->addMessage(session_id, from_id, name, buffer); 2585 gIMMgr->addMessage(session_id, from_id, name, buffer);
2592 } 2586 }
2593 break; 2587 break;
2594 2588
2595 case IM_LURE_USER: 2589 case IM_LURE_USER:
2596 { 2590 {
2597 if (is_muted) 2591 if (is_muted)
2598 { 2592 {
2599 return; 2593 return;
2600 } 2594 }
2601 else if (is_busy) 2595 else if (is_busy)
2602 { 2596 {
2603 busy_message(msg,from_id); 2597 busy_message(msg,from_id);
2604 } 2598 }
@@ -2734,7 +2728,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
2734 } 2728 }
2735 2729
2736 std::string url; 2730 std::string url;
2737 2731
2738 url.assign((char*)binary_bucket, binary_bucket_size-1); 2732 url.assign((char*)binary_bucket, binary_bucket_size-1);
2739 args["MESSAGE"] = message; 2733 args["MESSAGE"] = message;
2740 args["URL"] = url; 2734 args["URL"] = url;
@@ -2784,11 +2778,11 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
2784 // as the database should already include the relationship. But it 2778 // as the database should already include the relationship. But it
2785 // doesn't hurt for dupes. 2779 // doesn't hurt for dupes.
2786 LLAvatarTracker::formFriendship(from_id); 2780 LLAvatarTracker::formFriendship(from_id);
2787 2781
2788 std::vector<std::string> strings; 2782 std::vector<std::string> strings;
2789 strings.push_back(from_id.asString()); 2783 strings.push_back(from_id.asString());
2790 send_generic_message("requestonlinenotification", strings); 2784 send_generic_message("requestonlinenotification", strings);
2791 2785
2792 args["NAME"] = name; 2786 args["NAME"] = name;
2793 LLNotifications::instance().add("FriendshipAccepted", args); 2787 LLNotifications::instance().add("FriendshipAccepted", args);
2794 } 2788 }
@@ -2808,7 +2802,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
2808 } 2802 }
2809} 2803}
2810 2804
2811void busy_message (LLMessageSystem* msg, LLUUID from_id) 2805void busy_message (LLMessageSystem* msg, LLUUID from_id)
2812{ 2806{
2813 if (gAgent.getBusy()) 2807 if (gAgent.getBusy())
2814 { 2808 {
@@ -2851,7 +2845,7 @@ bool callingcard_offer_callback(const LLSD& notification, const LLSD& response)
2851 msg->sendReliable(LLHost(notification["payload"]["sender"].asString())); 2845 msg->sendReliable(LLHost(notification["payload"]["sender"].asString()));
2852 break; 2846 break;
2853 case 1: 2847 case 1:
2854 // decline 2848 // decline
2855 msg->newMessageFast(_PREHASH_DeclineCallingCard); 2849 msg->newMessageFast(_PREHASH_DeclineCallingCard);
2856 msg->nextBlockFast(_PREHASH_AgentData); 2850 msg->nextBlockFast(_PREHASH_AgentData);
2857 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); 2851 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
@@ -2902,7 +2896,7 @@ void process_offer_callingcard(LLMessageSystem* msg, void**)
2902 2896
2903 if(!source_name.empty()) 2897 if(!source_name.empty())
2904 { 2898 {
2905 if (gAgent.getBusy() 2899 if (gAgent.getBusy()
2906 || LLMuteList::getInstance()->isMuted(source_id, source_name, LLMute::flagTextChat)) 2900 || LLMuteList::getInstance()->isMuted(source_id, source_name, LLMute::flagTextChat))
2907 { 2901 {
2908 // automatically decline offer 2902 // automatically decline offer
@@ -2959,13 +2953,13 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
2959 2953
2960 msg->getString("ChatData", "FromName", from_name); 2954 msg->getString("ChatData", "FromName", from_name);
2961 chat.mFromName = from_name; 2955 chat.mFromName = from_name;
2962 2956
2963 msg->getUUID("ChatData", "SourceID", from_id); 2957 msg->getUUID("ChatData", "SourceID", from_id);
2964 chat.mFromID = from_id; 2958 chat.mFromID = from_id;
2965 2959
2966 // Object owner for objects 2960 // Object owner for objects
2967 msg->getUUID("ChatData", "OwnerID", owner_id); 2961 msg->getUUID("ChatData", "OwnerID", owner_id);
2968 2962
2969 msg->getU8Fast(_PREHASH_ChatData, _PREHASH_SourceType, source_temp); 2963 msg->getU8Fast(_PREHASH_ChatData, _PREHASH_SourceType, source_temp);
2970 chat.mSourceType = (EChatSourceType)source_temp; 2964 chat.mSourceType = (EChatSourceType)source_temp;
2971 2965
@@ -2974,9 +2968,9 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
2974 2968
2975 msg->getU8Fast(_PREHASH_ChatData, _PREHASH_Audible, audible_temp); 2969 msg->getU8Fast(_PREHASH_ChatData, _PREHASH_Audible, audible_temp);
2976 chat.mAudible = (EChatAudible)audible_temp; 2970 chat.mAudible = (EChatAudible)audible_temp;
2977 2971
2978 chat.mTime = LLFrameTimer::getElapsedSeconds(); 2972 chat.mTime = LLFrameTimer::getElapsedSeconds();
2979 2973
2980 BOOL is_busy = gAgent.getBusy(); 2974 BOOL is_busy = gAgent.getBusy();
2981 2975
2982 BOOL is_muted = FALSE; 2976 BOOL is_muted = FALSE;
@@ -2984,7 +2978,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
2984 is_muted = LLMuteList::getInstance()->isMuted( 2978 is_muted = LLMuteList::getInstance()->isMuted(
2985 from_id, 2979 from_id,
2986 from_name, 2980 from_name,
2987 LLMute::flagTextChat) 2981 LLMute::flagTextChat)
2988 || LLMuteList::getInstance()->isMuted(owner_id, LLMute::flagTextChat); 2982 || LLMuteList::getInstance()->isMuted(owner_id, LLMute::flagTextChat);
2989 is_god = chat.mSourceType != CHAT_SOURCE_OBJECT && 2983 is_god = chat.mSourceType != CHAT_SOURCE_OBJECT &&
2990 LLMuteList::getInstance()->isGod(from_name); 2984 LLMuteList::getInstance()->isGod(from_name);
@@ -2994,9 +2988,9 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
2994 if (chatter) 2988 if (chatter)
2995 { 2989 {
2996 chat.mPosAgent = chatter->getPositionAgent(); 2990 chat.mPosAgent = chatter->getPositionAgent();
2997 2991
2998 // Make swirly things only for talking objects. (not script debug messages, though) 2992 // Make swirly things only for talking objects. (not script debug messages, though)
2999// if (chat.mSourceType == CHAT_SOURCE_OBJECT 2993// if (chat.mSourceType == CHAT_SOURCE_OBJECT
3000// && chat.mChatType != CHAT_TYPE_DEBUG_MSG) 2994// && chat.mChatType != CHAT_TYPE_DEBUG_MSG)
3001// [RLVa:KB] - Alternate: Snowglobe-1.2.4 | Checked: 2009-07-10 (RLVa-1.0.0g) 2995// [RLVa:KB] - Alternate: Snowglobe-1.2.4 | Checked: 2009-07-10 (RLVa-1.0.0g)
3002 // Don't show swirly things for llOwnerSay() chat here because we handle those further down 2996 // Don't show swirly things for llOwnerSay() chat here because we handle those further down
@@ -3008,7 +3002,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
3008 LLPointer<LLViewerPartSourceChat> psc = new LLViewerPartSourceChat(chatter->getPositionAgent()); 3002 LLPointer<LLViewerPartSourceChat> psc = new LLViewerPartSourceChat(chatter->getPositionAgent());
3009 psc->setSourceObject(chatter); 3003 psc->setSourceObject(chatter);
3010 psc->setColor(color); 3004 psc->setColor(color);
3011 //We set the particles to be owned by the object's owner, 3005 //We set the particles to be owned by the object's owner,
3012 //just in case they should be muted by the mute list 3006 //just in case they should be muted by the mute list
3013 psc->setOwnerUUID(owner_id); 3007 psc->setOwnerUUID(owner_id);
3014 LLViewerPartSim::getInstance()->addPartSource(psc); 3008 LLViewerPartSim::getInstance()->addPartSource(psc);
@@ -3018,7 +3012,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
3018 if (is_audible 3012 if (is_audible
3019 && (is_god || (!is_muted && !is_busy))) 3013 && (is_god || (!is_muted && !is_busy)))
3020 { 3014 {
3021 if (chat.mChatType != CHAT_TYPE_START 3015 if (chat.mChatType != CHAT_TYPE_START
3022 && chat.mChatType != CHAT_TYPE_STOP) 3016 && chat.mChatType != CHAT_TYPE_STOP)
3023 { 3017 {
3024 gAgent.heardChat(chat.mFromID); 3018 gAgent.heardChat(chat.mFromID);
@@ -3028,7 +3022,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
3028 is_owned_by_me = chatter->permYouOwner(); 3022 is_owned_by_me = chatter->permYouOwner();
3029 } 3023 }
3030 3024
3031 if(chat.mSourceType == CHAT_SOURCE_OBJECT 3025 if(chat.mSourceType == CHAT_SOURCE_OBJECT
3032 && chat.mChatType != CHAT_TYPE_DEBUG_MSG 3026 && chat.mChatType != CHAT_TYPE_DEBUG_MSG
3033 && !owner_id.isNull() 3027 && !owner_id.isNull()
3034 && owner_id != gAgent.getID()) 3028 && owner_id != gAgent.getID())
@@ -3090,7 +3084,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
3090 msg->getStringFast(_PREHASH_ChatData, _PREHASH_Message, mesg); 3084 msg->getStringFast(_PREHASH_ChatData, _PREHASH_Message, mesg);
3091 3085
3092// [RLVa:KB] - Checked: 2009-10-06 (RLVa-1.0.4d) | Modified: RLVa-1.0.4d 3086// [RLVa:KB] - Checked: 2009-10-06 (RLVa-1.0.4d) | Modified: RLVa-1.0.4d
3093 if ( (rlv_handler_t::isEnabled()) && 3087 if ( (rlv_handler_t::isEnabled()) &&
3094 (CHAT_TYPE_START != chat.mChatType) && (CHAT_TYPE_STOP != chat.mChatType) && (CHAT_TYPE_OWNER != chat.mChatType) ) 3088 (CHAT_TYPE_START != chat.mChatType) && (CHAT_TYPE_STOP != chat.mChatType) && (CHAT_TYPE_OWNER != chat.mChatType) )
3095 { 3089 {
3096 // NOTE: chatter can be NULL (may not have rezzed yet, or could be another avie's HUD attachment) 3090 // NOTE: chatter can be NULL (may not have rezzed yet, or could be another avie's HUD attachment)
@@ -3099,7 +3093,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
3099 // Filtering "rules": 3093 // Filtering "rules":
3100 // avatar => filter all avie text (unless it's this avie or they're an exemption) 3094 // avatar => filter all avie text (unless it's this avie or they're an exemption)
3101 // objects => filter everything except attachments this avie owns 3095 // objects => filter everything except attachments this avie owns
3102 if ( ( (CHAT_SOURCE_AGENT == chat.mSourceType) && (from_id != gAgent.getID()) ) || 3096 if ( ( (CHAT_SOURCE_AGENT == chat.mSourceType) && (from_id != gAgent.getID()) ) ||
3103 ( (CHAT_SOURCE_OBJECT == chat.mSourceType) && ((!is_owned_by_me) || (!is_attachment)) ) ) 3097 ( (CHAT_SOURCE_OBJECT == chat.mSourceType) && ((!is_owned_by_me) || (!is_attachment)) ) )
3104 { 3098 {
3105 if (!rlvIsEmote(mesg)) 3099 if (!rlvIsEmote(mesg))
@@ -3122,7 +3116,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
3122 { 3116 {
3123 if (chat.mFromID != gAgent.getID()) 3117 if (chat.mFromID != gAgent.getID())
3124 from_name = RlvStrings::getAnonym(from_name); 3118 from_name = RlvStrings::getAnonym(from_name);
3125 } 3119 }
3126 else 3120 else
3127 { 3121 {
3128 if ( (!is_owned_by_me) || (!is_attachment) ) 3122 if ( (!is_owned_by_me) || (!is_attachment) )
@@ -3164,7 +3158,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
3164 if (LLFloaterMap::getInstance()) 3158 if (LLFloaterMap::getInstance())
3165 { 3159 {
3166 PanelRadarEntry* entry = LLFloaterMap::getInstance()->getRadar()->getEntry(from_id); 3160 PanelRadarEntry* entry = LLFloaterMap::getInstance()->getRadar()->getEntry(from_id);
3167 if (entry) 3161 if (entry)
3168 { 3162 {
3169 entry->setStatus(RADAR_STATUS_TYPING); 3163 entry->setStatus(RADAR_STATUS_TYPING);
3170 } 3164 }
@@ -3185,7 +3179,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
3185 if (LLFloaterMap::getInstance()) 3179 if (LLFloaterMap::getInstance())
3186 { 3180 {
3187 PanelRadarEntry* entry = LLFloaterMap::getInstance()->getRadar()->getEntry(from_id); 3181 PanelRadarEntry* entry = LLFloaterMap::getInstance()->getRadar()->getEntry(from_id);
3188 if (entry) 3182 if (entry)
3189 { 3183 {
3190 entry->setStatus(RADAR_STATUS_NONE); 3184 entry->setStatus(RADAR_STATUS_NONE);
3191 } 3185 }
@@ -3202,7 +3196,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
3202 3196
3203 if (!is_muted && !is_busy) 3197 if (!is_muted && !is_busy)
3204 { 3198 {
3205 3199
3206 BOOL sUseChatBubbles = gSavedSettings.getBOOL("UseChatBubbles"); 3200 BOOL sUseChatBubbles = gSavedSettings.getBOOL("UseChatBubbles");
3207 if(sUseChatBubbles) 3201 if(sUseChatBubbles)
3208 { 3202 {
@@ -3288,7 +3282,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
3288 verb = " retained: @"; 3282 verb = " retained: @";
3289 mesg = strRetained; 3283 mesg = strRetained;
3290 } 3284 }
3291 else 3285 else
3292 { 3286 {
3293 verb = ": @"; 3287 verb = ": @";
3294 if (!strExecuted.empty()) 3288 if (!strExecuted.empty())
@@ -3309,7 +3303,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
3309 LLPointer<LLViewerPartSourceChat> psc = new LLViewerPartSourceChat(chatter->getPositionAgent()); 3303 LLPointer<LLViewerPartSourceChat> psc = new LLViewerPartSourceChat(chatter->getPositionAgent());
3310 psc->setSourceObject(chatter); 3304 psc->setSourceObject(chatter);
3311 psc->setColor(color); 3305 psc->setColor(color);
3312 //We set the particles to be owned by the object's owner, 3306 //We set the particles to be owned by the object's owner,
3313 //just in case they should be muted by the mute list 3307 //just in case they should be muted by the mute list
3314 psc->setOwnerUUID(owner_id); 3308 psc->setOwnerUUID(owner_id);
3315 LLViewerPartSim::getInstance()->addPartSource(psc); 3309 LLViewerPartSim::getInstance()->addPartSource(psc);
@@ -3337,7 +3331,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
3337 chat.mText += verb; 3331 chat.mText += verb;
3338 chat.mText += mesg; 3332 chat.mText += mesg;
3339 } 3333 }
3340 3334
3341 if (chatter) 3335 if (chatter)
3342 { 3336 {
3343 chat.mPosAgent = chatter->getPositionAgent(); 3337 chat.mPosAgent = chatter->getPositionAgent();
@@ -3374,10 +3368,10 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
3374 3368
3375 3369
3376// Simulator we're on is informing the viewer that the agent 3370// Simulator we're on is informing the viewer that the agent
3377// is starting to teleport (perhaps to another sim, perhaps to the 3371// is starting to teleport (perhaps to another sim, perhaps to the
3378// same sim). If we initiated the teleport process by sending some kind 3372// same sim). If we initiated the teleport process by sending some kind
3379// of TeleportRequest, then this info is redundant, but if the sim 3373// of TeleportRequest, then this info is redundant, but if the sim
3380// initiated the teleport (via a script call, being killed, etc.) 3374// initiated the teleport (via a script call, being killed, etc.)
3381// then this info is news to us. 3375// then this info is news to us.
3382void process_teleport_start(LLMessageSystem *msg, void**) 3376void process_teleport_start(LLMessageSystem *msg, void**)
3383{ 3377{
@@ -3404,7 +3398,7 @@ void process_teleport_start(LLMessageSystem *msg, void**)
3404 gTeleportDisplay = TRUE; 3398 gTeleportDisplay = TRUE;
3405 gAgent.setTeleportState( LLAgent::TELEPORT_START ); 3399 gAgent.setTeleportState( LLAgent::TELEPORT_START );
3406 make_ui_sound("UISndTeleportOut"); 3400 make_ui_sound("UISndTeleportOut");
3407 3401
3408 // Don't call LLFirstUse::useTeleport here because this could be 3402 // Don't call LLFirstUse::useTeleport here because this could be
3409 // due to being killed, which would send you home, not to a Telehub 3403 // due to being killed, which would send you home, not to a Telehub
3410 } 3404 }
@@ -3441,7 +3435,7 @@ void process_teleport_progress(LLMessageSystem* msg, void**)
3441 //if we don't find the coresponding mapping in our progress mappings 3435 //if we don't find the coresponding mapping in our progress mappings
3442 std::string message = buffer; 3436 std::string message = buffer;
3443 3437
3444 if (LLAgent::sTeleportProgressMessages.find(buffer) != 3438 if (LLAgent::sTeleportProgressMessages.find(buffer) !=
3445 LLAgent::sTeleportProgressMessages.end() ) 3439 LLAgent::sTeleportProgressMessages.end() )
3446 { 3440 {
3447 message = LLAgent::sTeleportProgressMessages[buffer]; 3441 message = LLAgent::sTeleportProgressMessages[buffer];
@@ -3502,7 +3496,7 @@ public:
3502 3496
3503 3497
3504 3498
3505class LLPostTeleportNotifiers : public LLEventTimer 3499class LLPostTeleportNotifiers : public LLEventTimer
3506{ 3500{
3507public: 3501public:
3508 LLPostTeleportNotifiers(); 3502 LLPostTeleportNotifiers();
@@ -3529,10 +3523,10 @@ BOOL LLPostTeleportNotifiers::tick()
3529 LLInventoryFetchDescendentsObserver::folder_ref_t folders; 3523 LLInventoryFetchDescendentsObserver::folder_ref_t folders;
3530 LLUUID folder_id; 3524 LLUUID folder_id;
3531 folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD); 3525 folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD);
3532 if(folder_id.notNull()) 3526 if(folder_id.notNull())
3533 folders.push_back(folder_id); 3527 folders.push_back(folder_id);
3534 folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK); 3528 folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
3535 if(folder_id.notNull()) 3529 if(folder_id.notNull())
3536 folders.push_back(folder_id); 3530 folders.push_back(folder_id);
3537 if(!folders.empty()) 3531 if(!folders.empty())
3538 { 3532 {
@@ -3588,7 +3582,7 @@ void process_teleport_finish(LLMessageSystem* msg, void**)
3588 msg->getU64Fast(_PREHASH_Info, _PREHASH_RegionHandle, region_handle); 3582 msg->getU64Fast(_PREHASH_Info, _PREHASH_RegionHandle, region_handle);
3589 U32 teleport_flags; 3583 U32 teleport_flags;
3590 msg->getU32Fast(_PREHASH_Info, _PREHASH_TeleportFlags, teleport_flags); 3584 msg->getU32Fast(_PREHASH_Info, _PREHASH_TeleportFlags, teleport_flags);
3591 3585
3592 U32 region_size_x = 256; 3586 U32 region_size_x = 256;
3593 msg->getU32Fast(_PREHASH_Info, _PREHASH_RegionSizeX, region_size_x); 3587 msg->getU32Fast(_PREHASH_Info, _PREHASH_RegionSizeX, region_size_x);
3594 U32 region_size_y = 256; 3588 U32 region_size_y = 256;
@@ -3600,17 +3594,17 @@ void process_teleport_finish(LLMessageSystem* msg, void**)
3600 region_size_x = 256; 3594 region_size_x = 256;
3601 region_size_y = 256; 3595 region_size_y = 256;
3602 } 3596 }
3603 3597
3604 std::string seedCap; 3598 std::string seedCap;
3605 msg->getStringFast(_PREHASH_Info, _PREHASH_SeedCapability, seedCap); 3599 msg->getStringFast(_PREHASH_Info, _PREHASH_SeedCapability, seedCap);
3606 3600
3607 // update home location if we are teleporting out of prelude - specific to teleporting to welcome area 3601 // update home location if we are teleporting out of prelude - specific to teleporting to welcome area
3608 if((teleport_flags & TELEPORT_FLAGS_SET_HOME_TO_TARGET) 3602 if((teleport_flags & TELEPORT_FLAGS_SET_HOME_TO_TARGET)
3609 && (!gAgent.isGodlike())) 3603 && (!gAgent.isGodlike()))
3610 { 3604 {
3611 gAgent.setHomePosRegion(region_handle, pos); 3605 gAgent.setHomePosRegion(region_handle, pos);
3612 3606
3613 // Create a timer that will send notices when teleporting is all finished. Since this is 3607 // Create a timer that will send notices when teleporting is all finished. Since this is
3614 // based on the LLEventTimer class, it will be managed by that class and not orphaned or leaked. 3608 // based on the LLEventTimer class, it will be managed by that class and not orphaned or leaked.
3615 new LLPostTeleportNotifiers(); 3609 new LLPostTeleportNotifiers();
3616 } 3610 }
@@ -3674,8 +3668,7 @@ void process_teleport_finish(LLMessageSystem* msg, void**)
3674// gViewerWindow->setShowProgress(TRUE); 3668// gViewerWindow->setShowProgress(TRUE);
3675 3669
3676 // Tell the LightShare handler that we have changed regions. 3670 // Tell the LightShare handler that we have changed regions.
3677 WindlightMessage::resetRegion(); 3671 LightShare::resetRegion();
3678 WLSettingsManager::wlresetRegion();
3679} 3672}
3680 3673
3681// stuff we have to do every time we get an AvatarInitComplete from a sim 3674// stuff we have to do every time we get an AvatarInitComplete from a sim
@@ -3713,7 +3706,7 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
3713 msg->getVector3Fast(_PREHASH_Data, _PREHASH_LookAt, look_at); 3706 msg->getVector3Fast(_PREHASH_Data, _PREHASH_LookAt, look_at);
3714 U64 region_handle; 3707 U64 region_handle;
3715 msg->getU64Fast(_PREHASH_Data, _PREHASH_RegionHandle, region_handle); 3708 msg->getU64Fast(_PREHASH_Data, _PREHASH_RegionHandle, region_handle);
3716 3709
3717 std::string version_channel; 3710 std::string version_channel;
3718 msg->getString("SimData", "ChannelVersion", version_channel); 3711 msg->getString("SimData", "ChannelVersion", version_channel);
3719 3712
@@ -3735,8 +3728,8 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
3735 LL_WARNS("Messaging") << "current region " << gAgent.getRegion()->getOriginGlobal() << LL_ENDL; 3728 LL_WARNS("Messaging") << "current region " << gAgent.getRegion()->getOriginGlobal() << LL_ENDL;
3736 } 3729 }
3737 3730
3738 LL_WARNS("Messaging") << "Agent being sent to invalid home region: " 3731 LL_WARNS("Messaging") << "Agent being sent to invalid home region: "
3739 << x << ":" << y 3732 << x << ":" << y
3740 << " current pos " << gAgent.getPositionGlobal() 3733 << " current pos " << gAgent.getPositionGlobal()
3741 << LL_ENDL; 3734 << LL_ENDL;
3742 LLAppViewer::instance()->forceDisconnect("You were sent to an invalid region."); 3735 LLAppViewer::instance()->forceDisconnect("You were sent to an invalid region.");
@@ -3784,7 +3777,7 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
3784// if (avatarp) 3777// if (avatarp)
3785 { 3778 {
3786 // Chat the "back" SLURL. (DEV-4907) 3779 // Chat the "back" SLURL. (DEV-4907)
3787 // Show this in the console if DisableTeleportScreens is true 3780 // Show this in the console if DisableTeleportScreens is true
3788 // Why? Because it's nifty, that's why -- MC 3781 // Why? Because it's nifty, that's why -- MC
3789 LLChat chat("Teleport completed from " + gAgent.getTeleportSourceSLURL()); 3782 LLChat chat("Teleport completed from " + gAgent.getTeleportSourceSLURL());
3790 chat.mSourceType = CHAT_SOURCE_SYSTEM; 3783 chat.mSourceType = CHAT_SOURCE_SYSTEM;
@@ -3874,7 +3867,7 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
3874 { 3867 {
3875 avatarp->mFootPlane.clearVec(); 3868 avatarp->mFootPlane.clearVec();
3876 } 3869 }
3877 3870
3878 // send walk-vs-run status 3871 // send walk-vs-run status
3879 gAgent.sendWalkRun(gAgent.getRunning() || gAgent.getAlwaysRun()); 3872 gAgent.sendWalkRun(gAgent.getRunning() || gAgent.getAlwaysRun());
3880 3873
@@ -3931,7 +3924,7 @@ void process_crossed_region(LLMessageSystem* msg, void**)
3931 LLHost sim_host(sim_ip, sim_port); 3924 LLHost sim_host(sim_ip, sim_port);
3932 U64 region_handle; 3925 U64 region_handle;
3933 msg->getU64Fast(_PREHASH_RegionData, _PREHASH_RegionHandle, region_handle); 3926 msg->getU64Fast(_PREHASH_RegionData, _PREHASH_RegionHandle, region_handle);
3934 3927
3935 std::string seedCap; 3928 std::string seedCap;
3936 msg->getStringFast(_PREHASH_RegionData, _PREHASH_SeedCapability, seedCap); 3929 msg->getStringFast(_PREHASH_RegionData, _PREHASH_SeedCapability, seedCap);
3937 3930
@@ -3953,8 +3946,7 @@ void process_crossed_region(LLMessageSystem* msg, void**)
3953 regionp->setSeedCapability(seedCap); 3946 regionp->setSeedCapability(seedCap);
3954 3947
3955 // Tell the LightShare handler that we have changed regions. 3948 // Tell the LightShare handler that we have changed regions.
3956 WindlightMessage::resetRegion(); 3949 LightShare::resetRegion();
3957 WLSettingsManager::wlresetRegion();
3958} 3950}
3959 3951
3960 3952
@@ -4000,11 +3992,11 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
4000 const U8 DUP_MSGS = 1; // HACK! number of times to repeat data on motionless agent 3992 const U8 DUP_MSGS = 1; // HACK! number of times to repeat data on motionless agent
4001 3993
4002 // Store data on last sent update so that if no changes, no send 3994 // Store data on last sent update so that if no changes, no send
4003 static LLVector3 last_camera_pos_agent, 3995 static LLVector3 last_camera_pos_agent,
4004 last_camera_at, 3996 last_camera_at,
4005 last_camera_left, 3997 last_camera_left,
4006 last_camera_up; 3998 last_camera_up;
4007 3999
4008 static LLVector3 cam_center_chg, 4000 static LLVector3 cam_center_chg,
4009 cam_rot_chg; 4001 cam_rot_chg;
4010 4002
@@ -4057,13 +4049,13 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
4057 4049
4058 head_rot_chg = dot(last_head_rot, head_rotation); 4050 head_rot_chg = dot(last_head_rot, head_rotation);
4059 4051
4060 if (force_send || 4052 if (force_send ||
4061 (cam_center_chg.magVec() > TRANSLATE_THRESHOLD) || 4053 (cam_center_chg.magVec() > TRANSLATE_THRESHOLD) ||
4062 (head_rot_chg < THRESHOLD_HEAD_ROT_QDOT) || 4054 (head_rot_chg < THRESHOLD_HEAD_ROT_QDOT) ||
4063 (last_render_state != render_state) || 4055 (last_render_state != render_state) ||
4064 (cam_rot_chg.magVec() > ROTATION_THRESHOLD) || 4056 (cam_rot_chg.magVec() > ROTATION_THRESHOLD) ||
4065 control_flag_change != 0 || 4057 control_flag_change != 0 ||
4066 flag_change != 0) 4058 flag_change != 0)
4067 { 4059 {
4068/* 4060/*
4069 if (head_rot_chg < THRESHOLD_HEAD_ROT_QDOT) 4061 if (head_rot_chg < THRESHOLD_HEAD_ROT_QDOT)
@@ -4071,7 +4063,7 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
4071 //LL_INFOS("Messaging") << "head rot " << head_rotation << LL_ENDL; 4063 //LL_INFOS("Messaging") << "head rot " << head_rotation << LL_ENDL;
4072 LL_INFOS("Messaging") << "head_rot_chg = " << head_rot_chg << LL_ENDL; 4064 LL_INFOS("Messaging") << "head_rot_chg = " << head_rot_chg << LL_ENDL;
4073 } 4065 }
4074 if (cam_rot_chg.magVec() > ROTATION_THRESHOLD) 4066 if (cam_rot_chg.magVec() > ROTATION_THRESHOLD)
4075 { 4067 {
4076 LL_INFOS("Messaging") << "cam rot " << cam_rot_chg.magVec() << LL_ENDL; 4068 LL_INFOS("Messaging") << "cam rot " << cam_rot_chg.magVec() << LL_ENDL;
4077 } 4069 }
@@ -4102,8 +4094,8 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
4102 // some threshold from the last update, however this can break fine 4094 // some threshold from the last update, however this can break fine
4103 // adjustments when trying to aim an attached gun, so what we do here 4095 // adjustments when trying to aim an attached gun, so what we do here
4104 // (where we would normally skip sending an update when nothing has changed) 4096 // (where we would normally skip sending an update when nothing has changed)
4105 // is gradually reduce the threshold to allow a better update to 4097 // is gradually reduce the threshold to allow a better update to
4106 // eventually get sent... should update to within 0.5 degrees in less 4098 // eventually get sent... should update to within 0.5 degrees in less
4107 // than a second. 4099 // than a second.
4108 if (head_rot_chg < THRESHOLD_HEAD_ROT_QDOT + (MAX_HEAD_ROT_QDOT - THRESHOLD_HEAD_ROT_QDOT) * duplicate_count / AGENT_UPDATES_PER_SECOND) 4100 if (head_rot_chg < THRESHOLD_HEAD_ROT_QDOT + (MAX_HEAD_ROT_QDOT - THRESHOLD_HEAD_ROT_QDOT) * duplicate_count / AGENT_UPDATES_PER_SECOND)
4109 { 4101 {
@@ -4136,13 +4128,13 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
4136// { 4128// {
4137// LL_INFOS("Messaging") << "Sending camera center " << camera_pos_agent << LL_ENDL; 4129// LL_INFOS("Messaging") << "Sending camera center " << camera_pos_agent << LL_ENDL;
4138// } 4130// }
4139 4131
4140 msg->addVector3Fast(_PREHASH_CameraCenter, camera_pos_agent); 4132 msg->addVector3Fast(_PREHASH_CameraCenter, camera_pos_agent);
4141 msg->addVector3Fast(_PREHASH_CameraAtAxis, LLViewerCamera::getInstance()->getAtAxis()); 4133 msg->addVector3Fast(_PREHASH_CameraAtAxis, LLViewerCamera::getInstance()->getAtAxis());
4142 msg->addVector3Fast(_PREHASH_CameraLeftAxis, LLViewerCamera::getInstance()->getLeftAxis()); 4134 msg->addVector3Fast(_PREHASH_CameraLeftAxis, LLViewerCamera::getInstance()->getLeftAxis());
4143 msg->addVector3Fast(_PREHASH_CameraUpAxis, LLViewerCamera::getInstance()->getUpAxis()); 4135 msg->addVector3Fast(_PREHASH_CameraUpAxis, LLViewerCamera::getInstance()->getUpAxis());
4144 msg->addF32Fast(_PREHASH_Far, gAgent.mDrawDistance); 4136 msg->addF32Fast(_PREHASH_Far, gAgent.mDrawDistance);
4145 4137
4146 msg->addU32Fast(_PREHASH_ControlFlags, control_flags); 4138 msg->addU32Fast(_PREHASH_ControlFlags, control_flags);
4147 4139
4148 if (gDebugClicks) 4140 if (gDebugClicks)
@@ -4171,7 +4163,7 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
4171 4163
4172// LL_DEBUGS("Messaging") << "agent " << avatar_pos_agent << " cam " << camera_pos_agent << LL_ENDL; 4164// LL_DEBUGS("Messaging") << "agent " << avatar_pos_agent << " cam " << camera_pos_agent << LL_ENDL;
4173 4165
4174 // Copy the old data 4166 // Copy the old data
4175 last_head_rot = head_rotation; 4167 last_head_rot = head_rotation;
4176 last_render_state = render_state; 4168 last_render_state = render_state;
4177 last_camera_pos_agent = camera_pos_agent; 4169 last_camera_pos_agent = camera_pos_agent;
@@ -4190,7 +4182,7 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
4190extern U32 gObjectBits; 4182extern U32 gObjectBits;
4191 4183
4192void process_object_update(LLMessageSystem *mesgsys, void **user_data) 4184void process_object_update(LLMessageSystem *mesgsys, void **user_data)
4193{ 4185{
4194 LLMemType mt(LLMemType::MTYPE_OBJECT); 4186 LLMemType mt(LLMemType::MTYPE_OBJECT);
4195 // Update the data counters 4187 // Update the data counters
4196 if (mesgsys->getReceiveCompressedSize()) 4188 if (mesgsys->getReceiveCompressedSize())
@@ -4396,7 +4388,7 @@ void process_sound_trigger(LLMessageSystem *msg, void **)
4396 4388
4397 // Don't play sounds triggered by someone you muted. 4389 // Don't play sounds triggered by someone you muted.
4398 if (LLMuteList::getInstance()->isMuted(owner_id, LLMute::flagObjectSounds)) return; 4390 if (LLMuteList::getInstance()->isMuted(owner_id, LLMute::flagObjectSounds)) return;
4399 4391
4400 // Don't play sounds from an object you muted 4392 // Don't play sounds from an object you muted
4401 if (LLMuteList::getInstance()->isMuted(object_id)) return; 4393 if (LLMuteList::getInstance()->isMuted(object_id)) return;
4402 4394
@@ -4426,7 +4418,7 @@ void process_sound_trigger(LLMessageSystem *msg, void **)
4426 { 4418 {
4427 return; 4419 return;
4428 }*/ 4420 }*/
4429 4421
4430 gAudiop->triggerSound(sound_id, owner_id, gain, LLAudioEngine::AUDIO_TYPE_SFX, pos_global); 4422 gAudiop->triggerSound(sound_id, owner_id, gain, LLAudioEngine::AUDIO_TYPE_SFX, pos_global);
4431} 4423}
4432 4424
@@ -4450,10 +4442,10 @@ void process_preload_sound(LLMessageSystem *msg, void **user_data)
4450 4442
4451 if (LLMuteList::getInstance()->isMuted(object_id)) return; 4443 if (LLMuteList::getInstance()->isMuted(object_id)) return;
4452 if (LLMuteList::getInstance()->isMuted(owner_id, LLMute::flagObjectSounds)) return; 4444 if (LLMuteList::getInstance()->isMuted(owner_id, LLMute::flagObjectSounds)) return;
4453 4445
4454 LLAudioSource *sourcep = objectp->getAudioSource(owner_id); 4446 LLAudioSource *sourcep = objectp->getAudioSource(owner_id);
4455 if (!sourcep) return; 4447 if (!sourcep) return;
4456 4448
4457 LLAudioData *datap = gAudiop->getAudioData(sound_id); 4449 LLAudioData *datap = gAudiop->getAudioData(sound_id);
4458 4450
4459 // Note that I don't actually do any loading of the 4451 // Note that I don't actually do any loading of the
@@ -4467,7 +4459,7 @@ void process_preload_sound(LLMessageSystem *msg, void **user_data)
4467 { 4459 {
4468 return; 4460 return;
4469 }*/ 4461 }*/
4470 4462
4471 // Add audioData starts a transfer internally. 4463 // Add audioData starts a transfer internally.
4472 sourcep->addAudioData(datap, FALSE); 4464 sourcep->addAudioData(datap, FALSE);
4473} 4465}
@@ -4495,12 +4487,12 @@ void process_attached_sound(LLMessageSystem *msg, void **user_data)
4495 // we don't know about this object, just bail 4487 // we don't know about this object, just bail
4496 return; 4488 return;
4497 } 4489 }
4498 4490
4499 if (LLMuteList::getInstance()->isMuted(object_id)) return; 4491 if (LLMuteList::getInstance()->isMuted(object_id)) return;
4500 4492
4501 if (LLMuteList::getInstance()->isMuted(owner_id, LLMute::flagObjectSounds)) return; 4493 if (LLMuteList::getInstance()->isMuted(owner_id, LLMute::flagObjectSounds)) return;
4502 4494
4503 4495
4504 // Don't play sounds from a region with maturity above current agent maturity 4496 // Don't play sounds from a region with maturity above current agent maturity
4505 // Actually, let's -- MC 4497 // Actually, let's -- MC
4506 /*LLVector3d pos = objectp->getPositionGlobal(); 4498 /*LLVector3d pos = objectp->getPositionGlobal();
@@ -4508,7 +4500,7 @@ void process_attached_sound(LLMessageSystem *msg, void **user_data)
4508 { 4500 {
4509 return; 4501 return;
4510 }*/ 4502 }*/
4511 4503
4512 objectp->setAttachedSound(sound_id, owner_id, gain, flags); 4504 objectp->setAttachedSound(sound_id, owner_id, gain, flags);
4513} 4505}
4514 4506
@@ -4547,7 +4539,7 @@ void process_health_message(LLMessageSystem *mesgsys, void **user_data)
4547 4539
4548 4540
4549void process_sim_stats(LLMessageSystem *msg, void **user_data) 4541void process_sim_stats(LLMessageSystem *msg, void **user_data)
4550{ 4542{
4551 S32 count = msg->getNumberOfBlocks("Stat"); 4543 S32 count = msg->getNumberOfBlocks("Stat");
4552 for (S32 i = 0; i < count; ++i) 4544 for (S32 i = 0; i < count; ++i)
4553 { 4545 {
@@ -4696,7 +4688,7 @@ void process_sim_stats(LLMessageSystem *msg, void **user_data)
4696 BOOL was_flying = gAgent.getFlying(); 4688 BOOL was_flying = gAgent.getFlying();
4697 regionp->setRegionFlags(region_flags); 4689 regionp->setRegionFlags(region_flags);
4698 regionp->setMaxTasks(max_tasks_per_region); 4690 regionp->setMaxTasks(max_tasks_per_region);
4699 // HACK: This makes agents drop from the sky if the region is 4691 // HACK: This makes agents drop from the sky if the region is
4700 // set to no fly while people are still in the sim. 4692 // set to no fly while people are still in the sim.
4701 if (was_flying && regionp->getBlockFly()) 4693 if (was_flying && regionp->getBlockFly())
4702 { 4694 {
@@ -4713,7 +4705,7 @@ void process_avatar_animation(LLMessageSystem *mesgsys, void **user_data)
4713 LLUUID uuid; 4705 LLUUID uuid;
4714 S32 anim_sequence_id; 4706 S32 anim_sequence_id;
4715 LLVOAvatar *avatarp; 4707 LLVOAvatar *avatarp;
4716 4708
4717 mesgsys->getUUIDFast(_PREHASH_Sender, _PREHASH_ID, uuid); 4709 mesgsys->getUUIDFast(_PREHASH_Sender, _PREHASH_ID, uuid);
4718 4710
4719 //clear animation flags 4711 //clear animation flags
@@ -4730,7 +4722,7 @@ void process_avatar_animation(LLMessageSystem *mesgsys, void **user_data)
4730 S32 num_source_blocks = mesgsys->getNumberOfBlocksFast(_PREHASH_AnimationSourceList); 4722 S32 num_source_blocks = mesgsys->getNumberOfBlocksFast(_PREHASH_AnimationSourceList);
4731 4723
4732 avatarp->mSignaledAnimations.clear(); 4724 avatarp->mSignaledAnimations.clear();
4733 4725
4734 if (avatarp->isSelf()) 4726 if (avatarp->isSelf())
4735 { 4727 {
4736 LLUUID object_id; 4728 LLUUID object_id;
@@ -4740,7 +4732,7 @@ void process_avatar_animation(LLMessageSystem *mesgsys, void **user_data)
4740 mesgsys->getUUIDFast(_PREHASH_AnimationList, _PREHASH_AnimID, animation_id, i); 4732 mesgsys->getUUIDFast(_PREHASH_AnimationList, _PREHASH_AnimID, animation_id, i);
4741 mesgsys->getS32Fast(_PREHASH_AnimationList, _PREHASH_AnimSequenceID, anim_sequence_id, i); 4733 mesgsys->getS32Fast(_PREHASH_AnimationList, _PREHASH_AnimSequenceID, anim_sequence_id, i);
4742 4734
4743 LL_DEBUGS("Messaging") << "Animation id " << animation_id 4735 LL_DEBUGS("Messaging") << "Animation id " << animation_id
4744 << " from self using sequence id " << anim_sequence_id << LL_ENDL; 4736 << " from self using sequence id " << anim_sequence_id << LL_ENDL;
4745 4737
4746 avatarp->mSignaledAnimations[animation_id] = anim_sequence_id; 4738 avatarp->mSignaledAnimations[animation_id] = anim_sequence_id;
@@ -4748,7 +4740,7 @@ void process_avatar_animation(LLMessageSystem *mesgsys, void **user_data)
4748 if (i < num_source_blocks) 4740 if (i < num_source_blocks)
4749 { 4741 {
4750 mesgsys->getUUIDFast(_PREHASH_AnimationSourceList, _PREHASH_ObjectID, object_id, i); 4742 mesgsys->getUUIDFast(_PREHASH_AnimationSourceList, _PREHASH_ObjectID, object_id, i);
4751 4743
4752 LLViewerObject* object = gObjectList.findObject(object_id); 4744 LLViewerObject* object = gObjectList.findObject(object_id);
4753 if (object) 4745 if (object)
4754 { 4746 {
@@ -4780,8 +4772,8 @@ void process_avatar_animation(LLMessageSystem *mesgsys, void **user_data)
4780 mesgsys->getUUIDFast(_PREHASH_AnimationList, _PREHASH_AnimID, animation_id, i); 4772 mesgsys->getUUIDFast(_PREHASH_AnimationList, _PREHASH_AnimID, animation_id, i);
4781 mesgsys->getS32Fast(_PREHASH_AnimationList, _PREHASH_AnimSequenceID, anim_sequence_id, i); 4773 mesgsys->getS32Fast(_PREHASH_AnimationList, _PREHASH_AnimSequenceID, anim_sequence_id, i);
4782 avatarp->mSignaledAnimations[animation_id] = anim_sequence_id; 4774 avatarp->mSignaledAnimations[animation_id] = anim_sequence_id;
4783 LL_DEBUGS("Messaging") << "Received animation id " << animation_id 4775 LL_DEBUGS("Messaging") << "Received animation id " << animation_id
4784 << " from " << uuid 4776 << " from " << uuid
4785 << " using sequence id " << anim_sequence_id << LL_ENDL; 4777 << " using sequence id " << anim_sequence_id << LL_ENDL;
4786 } 4778 }
4787 } 4779 }
@@ -4856,7 +4848,7 @@ void process_avatar_sit_response(LLMessageSystem *mesgsys, void **user_data)
4856 { 4848 {
4857 gAgent.setSitCamera(sitObjectID, camera_eye, camera_at); 4849 gAgent.setSitCamera(sitObjectID, camera_eye, camera_at);
4858 } 4850 }
4859 4851
4860 gAgent.mForceMouselook = force_mouselook; 4852 gAgent.mForceMouselook = force_mouselook;
4861 4853
4862 LLViewerObject* object = gObjectList.findObject(sitObjectID); 4854 LLViewerObject* object = gObjectList.findObject(sitObjectID);
@@ -4952,7 +4944,7 @@ void process_set_follow_cam_properties(LLMessageSystem *mesgsys, void **user_dat
4952 LLFollowCamMgr::setFocusThreshold(source_id, value); 4944 LLFollowCamMgr::setFocusThreshold(source_id, value);
4953 break; 4945 break;
4954 case FOLLOWCAM_ACTIVE: 4946 case FOLLOWCAM_ACTIVE:
4955 //if 1, set using followcam,. 4947 //if 1, set using followcam,.
4956 LLFollowCamMgr::setCameraActive(source_id, value != 0.f); 4948 LLFollowCamMgr::setCameraActive(source_id, value != 0.f);
4957 break; 4949 break;
4958 case FOLLOWCAM_POSITION_X: 4950 case FOLLOWCAM_POSITION_X:
@@ -5004,7 +4996,7 @@ void process_set_follow_cam_properties(LLMessageSystem *mesgsys, void **user_dat
5004 LLFollowCamMgr::setFocusOffset(source_id, focus_offset); 4996 LLFollowCamMgr::setFocusOffset(source_id, focus_offset);
5005 } 4997 }
5006} 4998}
5007//end Ventrella 4999//end Ventrella
5008 5000
5009 5001
5010// Culled from newsim lltask.cpp 5002// Culled from newsim lltask.cpp
@@ -5196,7 +5188,7 @@ void process_money_balance_reply( LLMessageSystem* msg, void** )
5196bool handle_special_notification_callback(const LLSD& notification, const LLSD& response) 5188bool handle_special_notification_callback(const LLSD& notification, const LLSD& response)
5197{ 5189{
5198 S32 option = LLNotification::getSelectedOption(notification, response); 5190 S32 option = LLNotification::getSelectedOption(notification, response);
5199 5191
5200 if (0 == option) 5192 if (0 == option)
5201 { 5193 {
5202 // set the preference to the maturity of the region we're calling 5194 // set the preference to the maturity of the region we're calling
@@ -5205,7 +5197,7 @@ bool handle_special_notification_callback(const LLSD& notification, const LLSD&
5205 gAgent.sendMaturityPreferenceToServer(preferredMaturity); 5197 gAgent.sendMaturityPreferenceToServer(preferredMaturity);
5206 5198
5207 } 5199 }
5208 5200
5209 return false; 5201 return false;
5210} 5202}
5211 5203
@@ -5214,10 +5206,10 @@ bool handle_special_notification(std::string notificationID, LLSD& llsdBlock)
5214{ 5206{
5215 int regionAccess = llsdBlock["_region_access"].asInteger(); 5207 int regionAccess = llsdBlock["_region_access"].asInteger();
5216 llsdBlock["REGIONMATURITY"] = LLViewerRegion::accessToString(regionAccess); 5208 llsdBlock["REGIONMATURITY"] = LLViewerRegion::accessToString(regionAccess);
5217 5209
5218 // we're going to throw the LLSD in there in case anyone ever wants to use it 5210 // we're going to throw the LLSD in there in case anyone ever wants to use it
5219 LLNotifications::instance().add(notificationID+"_Notify", llsdBlock); 5211 LLNotifications::instance().add(notificationID+"_Notify", llsdBlock);
5220 5212
5221 if (regionAccess == SIM_ACCESS_MATURE) 5213 if (regionAccess == SIM_ACCESS_MATURE)
5222 { 5214 {
5223 if (gAgent.isTeen()) 5215 if (gAgent.isTeen())
@@ -5266,7 +5258,7 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem)
5266 llwarns << "attempt_standard_notification: Attempted to read notification parameter data into LLSD but failed:" << llsdRaw << llendl; 5258 llwarns << "attempt_standard_notification: Attempted to read notification parameter data into LLSD but failed:" << llsdRaw << llendl;
5267 } 5259 }
5268 } 5260 }
5269 5261
5270 if ( 5262 if (
5271 (notificationID == "RegionEntryAccessBlocked") || 5263 (notificationID == "RegionEntryAccessBlocked") ||
5272 (notificationID == "LandClaimAccessBlocked") || 5264 (notificationID == "LandClaimAccessBlocked") ||
@@ -5277,32 +5269,32 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem)
5277 (Commented so a grep will find the notification strings, since 5269 (Commented so a grep will find the notification strings, since
5278 we construct them on the fly; if you add additional notifications, 5270 we construct them on the fly; if you add additional notifications,
5279 please update the comment.) 5271 please update the comment.)
5280 5272
5281 Could throw any of the following notifications: 5273 Could throw any of the following notifications:
5282 5274
5283 RegionEntryAccessBlocked 5275 RegionEntryAccessBlocked
5284 RegionEntryAccessBlocked_Notify 5276 RegionEntryAccessBlocked_Notify
5285 RegionEntryAccessBlocked_Change 5277 RegionEntryAccessBlocked_Change
5286 RegionEntryAccessBlocked_KB 5278 RegionEntryAccessBlocked_KB
5287 LandClaimAccessBlocked 5279 LandClaimAccessBlocked
5288 LandClaimAccessBlocked_Notify 5280 LandClaimAccessBlocked_Notify
5289 LandClaimAccessBlocked_Change 5281 LandClaimAccessBlocked_Change
5290 LandClaimAccessBlocked_KB 5282 LandClaimAccessBlocked_KB
5291 LandBuyAccessBlocked 5283 LandBuyAccessBlocked
5292 LandBuyAccessBlocked_Notify 5284 LandBuyAccessBlocked_Notify
5293 LandBuyAccessBlocked_Change 5285 LandBuyAccessBlocked_Change
5294 LandBuyAccessBlocked_KB 5286 LandBuyAccessBlocked_KB
5295 5287
5296 -----------------------------------------------------------------------*/ 5288 -----------------------------------------------------------------------*/
5297 if (handle_special_notification(notificationID, llsdBlock)) 5289 if (handle_special_notification(notificationID, llsdBlock))
5298 { 5290 {
5299 return true; 5291 return true;
5300 } 5292 }
5301 } 5293 }
5302 5294
5303 LLNotifications::instance().add(notificationID, llsdBlock); 5295 LLNotifications::instance().add(notificationID, llsdBlock);
5304 return true; 5296 return true;
5305 } 5297 }
5306 return false; 5298 return false;
5307} 5299}
5308 5300
@@ -5312,7 +5304,7 @@ void process_agent_alert_message(LLMessageSystem* msgsystem, void** user_data)
5312 // make sure the cursor is back to the usual default since the 5304 // make sure the cursor is back to the usual default since the
5313 // alert is probably due to some kind of error. 5305 // alert is probably due to some kind of error.
5314 gViewerWindow->getWindow()->resetBusyCount(); 5306 gViewerWindow->getWindow()->resetBusyCount();
5315 5307
5316 if (!attempt_standard_notification(msgsystem)) 5308 if (!attempt_standard_notification(msgsystem))
5317 { 5309 {
5318 BOOL modal = FALSE; 5310 BOOL modal = FALSE;
@@ -5333,7 +5325,7 @@ void process_alert_message(LLMessageSystem *msgsystem, void **user_data)
5333 // make sure the cursor is back to the usual default since the 5325 // make sure the cursor is back to the usual default since the
5334 // alert is probably due to some kind of error. 5326 // alert is probably due to some kind of error.
5335 gViewerWindow->getWindow()->resetBusyCount(); 5327 gViewerWindow->getWindow()->resetBusyCount();
5336 5328
5337 if (!attempt_standard_notification(msgsystem)) 5329 if (!attempt_standard_notification(msgsystem))
5338 { 5330 {
5339 BOOL modal = FALSE; 5331 BOOL modal = FALSE;
@@ -5462,7 +5454,7 @@ void process_mean_collision_alert_message(LLMessageSystem *msgsystem, void **use
5462{ 5454{
5463 if (gAgent.inPrelude()) 5455 if (gAgent.inPrelude())
5464 { 5456 {
5465 // In prelude, bumping is OK. This dialog is rather confusing to 5457 // In prelude, bumping is OK. This dialog is rather confusing to
5466 // newbies, so we don't show it. Drop the packet on the floor. 5458 // newbies, so we don't show it. Drop the packet on the floor.
5467 return; 5459 return;
5468 } 5460 }
@@ -5519,7 +5511,7 @@ void process_frozen_message(LLMessageSystem *msgsystem, void **user_data)
5519 // alert is probably due to some kind of error. 5511 // alert is probably due to some kind of error.
5520 gViewerWindow->getWindow()->resetBusyCount(); 5512 gViewerWindow->getWindow()->resetBusyCount();
5521 BOOL b_frozen; 5513 BOOL b_frozen;
5522 5514
5523 msgsystem->getBOOL("FrozenData", "Data", b_frozen); 5515 msgsystem->getBOOL("FrozenData", "Data", b_frozen);
5524 5516
5525 // TODO: make being frozen change view 5517 // TODO: make being frozen change view
@@ -5538,8 +5530,8 @@ void process_economy_data(LLMessageSystem *msg, void** /*user_data*/)
5538 5530
5539 S32 upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); 5531 S32 upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
5540 5532
5541 LL_INFOS_ONCE("Messaging") << "EconomyData message arrived; upload cost is " 5533 LL_INFOS_ONCE("Messaging") << "EconomyData message arrived; upload cost is "
5542 << gHippoGridManager->getConnectedGrid()->getCurrencySymbol() 5534 << gHippoGridManager->getConnectedGrid()->getCurrencySymbol()
5543 << upload_cost << LL_ENDL; 5535 << upload_cost << LL_ENDL;
5544 5536
5545 LLFloaterImagePreview::setUploadAmount(upload_cost); 5537 LLFloaterImagePreview::setUploadAmount(upload_cost);
@@ -5562,13 +5554,13 @@ void notify_cautioned_script_question(const LLSD& notification, const LLSD& resp
5562 { 5554 {
5563 // check to see if the person we are asking 5555 // check to see if the person we are asking
5564 5556
5565 // "'[OBJECTNAME]', an object owned by '[OWNERNAME]', 5557 // "'[OBJECTNAME]', an object owned by '[OWNERNAME]',
5566 // located in [REGIONNAME] at [REGIONPOS], 5558 // located in [REGIONNAME] at [REGIONPOS],
5567 // has been <granted|denied> permission to: [PERMISSIONS]." 5559 // has been <granted|denied> permission to: [PERMISSIONS]."
5568 5560
5569 LLUIString notice(LLFloaterChat::getInstance()->getString(granted ? "ScriptQuestionCautionChatGranted" : "ScriptQuestionCautionChatDenied")); 5561 LLUIString notice(LLFloaterChat::getInstance()->getString(granted ? "ScriptQuestionCautionChatGranted" : "ScriptQuestionCautionChatDenied"));
5570 5562
5571 // always include the object name and owner name 5563 // always include the object name and owner name
5572 notice.setArg("[OBJECTNAME]", notification["payload"]["object_name"].asString()); 5564 notice.setArg("[OBJECTNAME]", notification["payload"]["object_name"].asString());
5573 notice.setArg("[OWNERNAME]", notification["payload"]["owner_name"].asString()); 5565 notice.setArg("[OWNERNAME]", notification["payload"]["owner_name"].asString());
5574 5566
@@ -5580,7 +5572,7 @@ void notify_cautioned_script_question(const LLSD& notification, const LLSD& resp
5580 { 5572 {
5581 // found the viewerobject, get it's position in its region 5573 // found the viewerobject, get it's position in its region
5582 LLVector3 objpos(viewobj->getPosition()); 5574 LLVector3 objpos(viewobj->getPosition());
5583 5575
5584 // try to lookup the name of the region the object is in 5576 // try to lookup the name of the region the object is in
5585 LLViewerRegion* viewregion = viewobj->getRegion(); 5577 LLViewerRegion* viewregion = viewobj->getRegion();
5586 if (viewregion) 5578 if (viewregion)
@@ -5607,7 +5599,7 @@ void notify_cautioned_script_question(const LLSD& notification, const LLSD& resp
5607 notice.setArg("[REGIONPOS]", "(unknown position)"); 5599 notice.setArg("[REGIONPOS]", "(unknown position)");
5608 } 5600 }
5609 5601
5610 // check each permission that was requested, and list each 5602 // check each permission that was requested, and list each
5611 // permission that has been flagged as a caution permission 5603 // permission that has been flagged as a caution permission
5612 BOOL caution = FALSE; 5604 BOOL caution = FALSE;
5613 S32 count = 0; 5605 S32 count = 0;
@@ -5659,7 +5651,7 @@ bool script_question_cb(const LLSD& notification, const LLSD& response)
5659 { 5651 {
5660 new_questions = 0; 5652 new_questions = 0;
5661 allowed = FALSE; 5653 allowed = FALSE;
5662 } 5654 }
5663 5655
5664 LLUUID task_id = notification["payload"]["task_id"].asUUID(); 5656 LLUUID task_id = notification["payload"]["task_id"].asUUID();
5665 LLUUID item_id = notification["payload"]["item_id"].asUUID(); 5657 LLUUID item_id = notification["payload"]["item_id"].asUUID();
@@ -5751,10 +5743,10 @@ void process_script_question(LLMessageSystem *msg, void **user_data)
5751 { 5743 {
5752 throttle_name = taskid.getString(); 5744 throttle_name = taskid.getString();
5753 } 5745 }
5754 5746
5755 // don't display permission requests if this object is muted 5747 // don't display permission requests if this object is muted
5756 if (LLMuteList::getInstance()->isMuted(taskid)) return; 5748 if (LLMuteList::getInstance()->isMuted(taskid)) return;
5757 5749
5758 // throttle excessive requests from any specific user's scripts 5750 // throttle excessive requests from any specific user's scripts
5759 typedef LLKeyThrottle<std::string> LLStringThrottle; 5751 typedef LLKeyThrottle<std::string> LLStringThrottle;
5760 static LLStringThrottle question_throttle( LLREQUEST_PERMISSION_THROTTLE_LIMIT, LLREQUEST_PERMISSION_THROTTLE_INTERVAL ); 5752 static LLStringThrottle question_throttle( LLREQUEST_PERMISSION_THROTTLE_LIMIT, LLREQUEST_PERMISSION_THROTTLE_INTERVAL );
@@ -5791,7 +5783,7 @@ void process_script_question(LLMessageSystem *msg, void **user_data)
5791 { 5783 {
5792 LLStringUtil::format_map_t args; 5784 LLStringUtil::format_map_t args;
5793 args["[CURRENCY]"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol(); 5785 args["[CURRENCY]"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
5794 5786
5795 count++; 5787 count++;
5796 script_question += " " + LLFloaterChat::getInstance()->getString(SCRIPT_QUESTIONS[i], args) + "\n"; 5788 script_question += " " + LLFloaterChat::getInstance()->getString(SCRIPT_QUESTIONS[i], args) + "\n";
5797 5789
@@ -6144,7 +6136,7 @@ void send_group_notice(const LLUUID& group_id,
6144 { 6136 {
6145 bucket_to_send = (U8*) EMPTY_BINARY_BUCKET; 6137 bucket_to_send = (U8*) EMPTY_BINARY_BUCKET;
6146 } 6138 }
6147 6139
6148 6140
6149 send_improved_im( 6141 send_improved_im(
6150 group_id, 6142 group_id,
@@ -6209,7 +6201,7 @@ void handle_lure(const LLUUID& invitee)
6209} 6201}
6210 6202
6211// Prompt for a message to the invited user. 6203// Prompt for a message to the invited user.
6212void handle_lure(LLDynamicArray<LLUUID>& ids) 6204void handle_lure(LLDynamicArray<LLUUID>& ids)
6213{ 6205{
6214 LLSD edit_args; 6206 LLSD edit_args;
6215// [RLVa:KB] - Version: 1.23.4 | Checked: 2009-07-04 (RLVa-1.0.0a) 6207// [RLVa:KB] - Version: 1.23.4 | Checked: 2009-07-04 (RLVa-1.0.0a)
@@ -6254,7 +6246,7 @@ void send_improved_im(const LLUUID& to_id,
6254 U8 offline, 6246 U8 offline,
6255 EInstantMessage dialog, 6247 EInstantMessage dialog,
6256 const LLUUID& id, 6248 const LLUUID& id,
6257 U32 timestamp, 6249 U32 timestamp,
6258 const U8* binary_bucket, 6250 const U8* binary_bucket,
6259 S32 binary_bucket_size) 6251 S32 binary_bucket_size)
6260{ 6252{
@@ -6313,7 +6305,7 @@ void process_user_info_reply(LLMessageSystem* msg, void**)
6313 LL_WARNS("Messaging") << "process_user_info_reply - " 6305 LL_WARNS("Messaging") << "process_user_info_reply - "
6314 << "wrong agent id." << LL_ENDL; 6306 << "wrong agent id." << LL_ENDL;
6315 } 6307 }
6316 6308
6317 BOOL im_via_email; 6309 BOOL im_via_email;
6318 msg->getBOOLFast(_PREHASH_UserData, _PREHASH_IMViaEMail, im_via_email); 6310 msg->getBOOLFast(_PREHASH_UserData, _PREHASH_IMViaEMail, im_via_email);
6319 std::string email; 6311 std::string email;
@@ -6367,7 +6359,7 @@ void process_script_dialog(LLMessageSystem* msg, void**)
6367 6359
6368 LLSD payload; 6360 LLSD payload;
6369 6361
6370 std::string message; 6362 std::string message;
6371 std::string first_name; 6363 std::string first_name;
6372 std::string last_name; 6364 std::string last_name;
6373 std::string title; 6365 std::string title;
@@ -6387,7 +6379,7 @@ void process_script_dialog(LLMessageSystem* msg, void**)
6387 { 6379 {
6388 std::vector<LLMute> mutes = LLMuteList::getInstance()->getMutes(); 6380 std::vector<LLMute> mutes = LLMuteList::getInstance()->getMutes();
6389 for (U32 i = 0; i < mutes.size(); i++) 6381 for (U32 i = 0; i < mutes.size(); i++)
6390 { 6382 {
6391 //this is almost like saying (mutes[i].mType != LLMute::Object), but more verbose ... -Kaku 6383 //this is almost like saying (mutes[i].mType != LLMute::Object), but more verbose ... -Kaku
6392 if ( 6384 if (
6393 ((mutes[i].mType == LLMute::AGENT) 6385 ((mutes[i].mType == LLMute::AGENT)
@@ -6650,7 +6642,7 @@ void process_script_teleport_request(LLMessageSystem* msg, void**)
6650 // remove above two lines and replace with below line 6642 // remove above two lines and replace with below line
6651 // to re-enable parcel browser for llMapDestination() 6643 // to re-enable parcel browser for llMapDestination()
6652 // LLURLDispatcher::dispatch(LLURLDispatcher::buildSLURL(sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]), FALSE); 6644 // LLURLDispatcher::dispatch(LLURLDispatcher::buildSLURL(sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]), FALSE);
6653 6645
6654} 6646}
6655 6647
6656void process_covenant_reply(LLMessageSystem* msg, void**) 6648void process_covenant_reply(LLMessageSystem* msg, void**)
@@ -6683,7 +6675,7 @@ void process_covenant_reply(LLMessageSystem* msg, void**)
6683 LLFloaterBuyLand::updateLastModified(last_modified); 6675 LLFloaterBuyLand::updateLastModified(last_modified);
6684 6676
6685 gCacheName->getName(estate_owner_id, callbackCacheEstateOwnerName); 6677 gCacheName->getName(estate_owner_id, callbackCacheEstateOwnerName);
6686 6678
6687 // load the actual covenant asset data 6679 // load the actual covenant asset data
6688 const BOOL high_priority = TRUE; 6680 const BOOL high_priority = TRUE;
6689 if (covenant_id.notNull()) 6681 if (covenant_id.notNull())
@@ -6721,7 +6713,7 @@ void callbackCacheEstateOwnerName(const LLUUID& id,
6721 BOOL is_group, void*) 6713 BOOL is_group, void*)
6722{ 6714{
6723 std::string name; 6715 std::string name;
6724 6716
6725 if (id.isNull()) 6717 if (id.isNull())
6726 { 6718 {
6727 name = "(none)"; 6719 name = "(none)";
@@ -6745,9 +6737,9 @@ void onCovenantLoadComplete(LLVFS *vfs,
6745 if(0 == status) 6737 if(0 == status)
6746 { 6738 {
6747 LLVFile file(vfs, asset_uuid, type, LLVFile::READ); 6739 LLVFile file(vfs, asset_uuid, type, LLVFile::READ);
6748 6740
6749 S32 file_length = file.getSize(); 6741 S32 file_length = file.getSize();
6750 6742
6751 char* buffer = new char[file_length+1]; 6743 char* buffer = new char[file_length+1];
6752 if (buffer == NULL) 6744 if (buffer == NULL)
6753 { 6745 {
@@ -6756,10 +6748,10 @@ void onCovenantLoadComplete(LLVFS *vfs,
6756 } 6748 }
6757 6749
6758 file.read((U8*)buffer, file_length); /* Flawfinder: ignore */ 6750 file.read((U8*)buffer, file_length); /* Flawfinder: ignore */
6759 6751
6760 // put a EOS at the end 6752 // put a EOS at the end
6761 buffer[file_length] = 0; 6753 buffer[file_length] = 0;
6762 6754
6763 if( (file_length > 19) && !strncmp( buffer, "Linden text version", 19 ) ) 6755 if( (file_length > 19) && !strncmp( buffer, "Linden text version", 19 ) )
6764 { 6756 {
6765 LLViewerTextEditor* editor = 6757 LLViewerTextEditor* editor =
@@ -6788,7 +6780,7 @@ void onCovenantLoadComplete(LLVFS *vfs,
6788 else 6780 else
6789 { 6781 {
6790 LLViewerStats::getInstance()->incStat( LLViewerStats::ST_DOWNLOAD_FAILED ); 6782 LLViewerStats::getInstance()->incStat( LLViewerStats::ST_DOWNLOAD_FAILED );
6791 6783
6792 if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status || 6784 if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status ||
6793 LL_ERR_FILE_EMPTY == status) 6785 LL_ERR_FILE_EMPTY == status)
6794 { 6786 {
@@ -6802,7 +6794,7 @@ void onCovenantLoadComplete(LLVFS *vfs,
6802 { 6794 {
6803 covenant_text = "Unable to load estate covenant at this time."; 6795 covenant_text = "Unable to load estate covenant at this time.";
6804 } 6796 }
6805 6797
6806 LL_WARNS("Messaging") << "Problem loading notecard: " << status << LL_ENDL; 6798 LL_WARNS("Messaging") << "Problem loading notecard: " << status << LL_ENDL;
6807 } 6799 }
6808 LLPanelEstateCovenant::updateCovenantText(covenant_text, asset_uuid); 6800 LLPanelEstateCovenant::updateCovenantText(covenant_text, asset_uuid);
@@ -6820,7 +6812,7 @@ void process_feature_disabled_message(LLMessageSystem* msg, void**)
6820 msg->getStringFast(_PREHASH_FailureInfo,_PREHASH_ErrorMessage, messageText,0); 6812 msg->getStringFast(_PREHASH_FailureInfo,_PREHASH_ErrorMessage, messageText,0);
6821 msg->getUUIDFast(_PREHASH_FailureInfo,_PREHASH_AgentID,agentID); 6813 msg->getUUIDFast(_PREHASH_FailureInfo,_PREHASH_AgentID,agentID);
6822 msg->getUUIDFast(_PREHASH_FailureInfo,_PREHASH_TransactionID,transactionID); 6814 msg->getUUIDFast(_PREHASH_FailureInfo,_PREHASH_TransactionID,transactionID);
6823 6815
6824 LL_WARNS("Messaging") << "Blacklisted Feature Response:" << messageText << LL_ENDL; 6816 LL_WARNS("Messaging") << "Blacklisted Feature Response:" << messageText << LL_ENDL;
6825} 6817}
6826 6818
diff --git a/linden/indra/newview/llviewerobject.cpp b/linden/indra/newview/llviewerobject.cpp
index 576f312..880e1bb 100644
--- a/linden/indra/newview/llviewerobject.cpp
+++ b/linden/indra/newview/llviewerobject.cpp
@@ -2046,9 +2046,6 @@ BOOL LLViewerObject::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
2046 if (HJT_HINGE == mJointInfo->mJointType) 2046 if (HJT_HINGE == mJointInfo->mJointType)
2047 { 2047 {
2048 // hinge = uniform circular motion 2048 // hinge = uniform circular motion
2049 LLVector3 parent_pivot = getVelocity();
2050 LLVector3 parent_axis = getAcceleration();
2051
2052 angle = dt * (ang_vel * mJointInfo->mAxisOrAnchor); // AxisOrAnchor = axis 2049 angle = dt * (ang_vel * mJointInfo->mAxisOrAnchor); // AxisOrAnchor = axis
2053 dQ.setQuat(angle, mJointInfo->mAxisOrAnchor); // AxisOrAnchor = axis 2050 dQ.setQuat(angle, mJointInfo->mAxisOrAnchor); // AxisOrAnchor = axis
2054 LLVector3 pivot_offset = pos - mJointInfo->mPivot; // pos in pivot-frame 2051 LLVector3 pivot_offset = pos - mJointInfo->mPivot; // pos in pivot-frame
diff --git a/linden/indra/newview/llviewerobject.h b/linden/indra/newview/llviewerobject.h
index 9b05470..98b7115 100644
--- a/linden/indra/newview/llviewerobject.h
+++ b/linden/indra/newview/llviewerobject.h
@@ -157,7 +157,13 @@ public:
157 enum { MEDIA_TYPE_NONE = 0, MEDIA_TYPE_WEB_PAGE = 1 }; 157 enum { MEDIA_TYPE_NONE = 0, MEDIA_TYPE_WEB_PAGE = 1 };
158 158
159 // Return codes for processUpdateMessage 159 // Return codes for processUpdateMessage
160 enum { MEDIA_URL_REMOVED = 0x1, MEDIA_URL_ADDED = 0x2, MEDIA_URL_UPDATED = 0x4, INVALID_UPDATE = 0x80000000 }; 160 enum {
161 MEDIA_URL_REMOVED = 0x1,
162 MEDIA_URL_ADDED = 0x2,
163 MEDIA_URL_UPDATED = 0x4,
164 MEDIA_FLAGS_CHANGED = 0x8,
165 INVALID_UPDATE = 0x80000000
166 };
161 167
162 virtual U32 processUpdateMessage(LLMessageSystem *mesgsys, 168 virtual U32 processUpdateMessage(LLMessageSystem *mesgsys,
163 void **user_data, 169 void **user_data,
diff --git a/linden/indra/newview/llviewerobjectlist.cpp b/linden/indra/newview/llviewerobjectlist.cpp
index ad92fe3..c82b1ae 100644
--- a/linden/indra/newview/llviewerobjectlist.cpp
+++ b/linden/indra/newview/llviewerobjectlist.cpp
@@ -288,7 +288,6 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
288{ 288{
289 LLFastTimer t(LLFastTimer::FTM_PROCESS_OBJECTS); 289 LLFastTimer t(LLFastTimer::FTM_PROCESS_OBJECTS);
290 290
291 LLVector3d camera_global = gAgent.getCameraPositionGlobal();
292 LLViewerObject *objectp; 291 LLViewerObject *objectp;
293 S32 num_objects; 292 S32 num_objects;
294 U32 local_id; 293 U32 local_id;
@@ -305,28 +304,28 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
305 if (!cached && !compressed && update_type != OUT_FULL) 304 if (!cached && !compressed && update_type != OUT_FULL)
306 { 305 {
307 gTerseObjectUpdates += num_objects; 306 gTerseObjectUpdates += num_objects;
308 S32 size; 307// S32 size;
309 if (mesgsys->getReceiveCompressedSize()) 308// if (mesgsys->getReceiveCompressedSize())
310 { 309// {
311 size = mesgsys->getReceiveCompressedSize(); 310// size = mesgsys->getReceiveCompressedSize();
312 } 311// }
313 else 312// else
314 { 313// {
315 size = mesgsys->getReceiveSize(); 314// size = mesgsys->getReceiveSize();
316 } 315// }
317// llinfos << "Received terse " << num_objects << " in " << size << " byte (" << size/num_objects << ")" << llendl; 316// llinfos << "Received terse " << num_objects << " in " << size << " byte (" << size/num_objects << ")" << llendl;
318 } 317 }
319 else 318 else
320 { 319 {
321 S32 size; 320// S32 size;
322 if (mesgsys->getReceiveCompressedSize()) 321// if (mesgsys->getReceiveCompressedSize())
323 { 322// {
324 size = mesgsys->getReceiveCompressedSize(); 323// size = mesgsys->getReceiveCompressedSize();
325 } 324// }
326 else 325// else
327 { 326// {
328 size = mesgsys->getReceiveSize(); 327// size = mesgsys->getReceiveSize();
329 } 328// }
330 329
331// llinfos << "Received " << num_objects << " in " << size << " byte (" << size/num_objects << ")" << llendl; 330// llinfos << "Received " << num_objects << " in " << size << " byte (" << size/num_objects << ")" << llendl;
332 gFullObjectUpdates += num_objects; 331 gFullObjectUpdates += num_objects;
@@ -639,7 +638,7 @@ void LLViewerObjectList::updateApparentAngles(LLAgent &agent)
639 mCurLazyUpdateIndex = 0; 638 mCurLazyUpdateIndex = 0;
640 } 639 }
641 640
642 mCurBin = (++mCurBin) % NUM_BINS; 641 mCurBin = (mCurBin + 1) % NUM_BINS;
643 642
644 LLVOAvatar::cullAvatarsByPixelArea(); 643 LLVOAvatar::cullAvatarsByPixelArea();
645} 644}
diff --git a/linden/indra/newview/llviewerparcelmedia.cpp b/linden/indra/newview/llviewerparcelmedia.cpp
index 386a86e..a9ea1e6 100644
--- a/linden/indra/newview/llviewerparcelmedia.cpp
+++ b/linden/indra/newview/llviewerparcelmedia.cpp
@@ -101,12 +101,11 @@ void LLViewerParcelMedia::update(LLParcel* parcel)
101 sMediaRegionID = LLUUID() ; 101 sMediaRegionID = LLUUID() ;
102 stop() ; 102 stop() ;
103 LL_DEBUGS("Media") << "no agent region, bailing out." << LL_ENDL; 103 LL_DEBUGS("Media") << "no agent region, bailing out." << LL_ENDL;
104 return ; 104 return ;
105 } 105 }
106 106
107 // we're in a parcel 107 // we're in a parcel
108 bool new_parcel = false; 108 S32 parcelid = parcel->getLocalID();
109 S32 parcelid = parcel->getLocalID();
110 109
111 LLUUID regionid = gAgent.getRegion()->getRegionID(); 110 LLUUID regionid = gAgent.getRegion()->getRegionID();
112 if (parcelid != sMediaParcelLocalID || regionid != sMediaRegionID) 111 if (parcelid != sMediaParcelLocalID || regionid != sMediaRegionID)
@@ -114,7 +113,6 @@ void LLViewerParcelMedia::update(LLParcel* parcel)
114 LL_DEBUGS("Media") << "New parcel, parcel id = " << parcelid << ", region id = " << regionid << LL_ENDL; 113 LL_DEBUGS("Media") << "New parcel, parcel id = " << parcelid << ", region id = " << regionid << LL_ENDL;
115 sMediaParcelLocalID = parcelid; 114 sMediaParcelLocalID = parcelid;
116 sMediaRegionID = regionid; 115 sMediaRegionID = regionid;
117 new_parcel = true;
118 } 116 }
119 117
120 std::string mediaUrl = std::string ( parcel->getMediaURL () ); 118 std::string mediaUrl = std::string ( parcel->getMediaURL () );
diff --git a/linden/indra/newview/llviewerregion.cpp b/linden/indra/newview/llviewerregion.cpp
index 2fafe30..42eb112 100644
--- a/linden/indra/newview/llviewerregion.cpp
+++ b/linden/indra/newview/llviewerregion.cpp
@@ -1436,6 +1436,8 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
1436 capabilityNames.append("EstateChangeInfo"); 1436 capabilityNames.append("EstateChangeInfo");
1437 capabilityNames.append("EventQueueGet"); 1437 capabilityNames.append("EventQueueGet");
1438 capabilityNames.append("FetchInventory"); 1438 capabilityNames.append("FetchInventory");
1439 capabilityNames.append("ObjectMedia");
1440 capabilityNames.append("ObjectMediaNavigate");
1439 capabilityNames.append("FetchLib"); 1441 capabilityNames.append("FetchLib");
1440 capabilityNames.append("FetchLibDescendents"); 1442 capabilityNames.append("FetchLibDescendents");
1441 capabilityNames.append("GetDisplayNames"); 1443 capabilityNames.append("GetDisplayNames");
diff --git a/linden/indra/newview/llvlcomposition.cpp b/linden/indra/newview/llvlcomposition.cpp
index afd9b95..beec1f1 100644
--- a/linden/indra/newview/llvlcomposition.cpp
+++ b/linden/indra/newview/llvlcomposition.cpp
@@ -384,9 +384,6 @@ BOOL LLVLComposition::generateTexture(const F32 x, const F32 y,
384 LLPointer<LLImageRaw> raw = new LLImageRaw(tex_width, tex_height, tex_comps); 384 LLPointer<LLImageRaw> raw = new LLImageRaw(tex_width, tex_height, tex_comps);
385 U8 *rawp = raw->getData(); 385 U8 *rawp = raw->getData();
386 386
387 F32 tex_width_inv = 1.f/tex_width;
388 F32 tex_height_inv = 1.f/tex_height;
389
390 F32 st_x_stride, st_y_stride; 387 F32 st_x_stride, st_y_stride;
391 st_x_stride = ((F32)st_width / (F32)mTexScaleX)*((F32)mWidth / (F32)tex_width); 388 st_x_stride = ((F32)st_width / (F32)mTexScaleX)*((F32)mWidth / (F32)tex_width);
392 st_y_stride = ((F32)st_height / (F32)mTexScaleY)*((F32)mWidth / (F32)tex_height); 389 st_y_stride = ((F32)st_height / (F32)mTexScaleY)*((F32)mWidth / (F32)tex_height);
@@ -421,11 +418,6 @@ BOOL LLVLComposition::generateTexture(const F32 x, const F32 y,
421 tex1 = tex0 + 1; 418 tex1 = tex0 + 1;
422 tex1 = llclamp(tex1, 0, 3); 419 tex1 = llclamp(tex1, 0, 3);
423 420
424 F32 xy_int_i, xy_int_j;
425
426 xy_int_i = i * tex_width_inv;
427 xy_int_j = j * tex_height_inv;
428
429 st_offset = (lltrunc(sti) + lltrunc(stj)*st_width) * st_comps; 421 st_offset = (lltrunc(sti) + lltrunc(stj)*st_width) * st_comps;
430 for (U32 k = 0; k < tex_comps; k++) 422 for (U32 k = 0; k < tex_comps; k++)
431 { 423 {
diff --git a/linden/indra/newview/llvoavatar.cpp b/linden/indra/newview/llvoavatar.cpp
index 54f4942..812e924 100644
--- a/linden/indra/newview/llvoavatar.cpp
+++ b/linden/indra/newview/llvoavatar.cpp
@@ -2500,7 +2500,6 @@ void LLVOAvatar::computeBodySize()
2500 2500
2501 // some of the joints have not been cached 2501 // some of the joints have not been cached
2502 LLVector3 skull = mSkullp->getPosition(); 2502 LLVector3 skull = mSkullp->getPosition();
2503 LLVector3 skull_scale = mSkullp->getScale();
2504 2503
2505 LLVector3 neck = mNeckp->getPosition(); 2504 LLVector3 neck = mNeckp->getPosition();
2506 LLVector3 neck_scale = mNeckp->getScale(); 2505 LLVector3 neck_scale = mNeckp->getScale();
@@ -2580,7 +2579,6 @@ U32 LLVOAvatar::processUpdateMessage(LLMessageSystem *mesgsys,
2580{ 2579{
2581 LLMemType mt(LLMemType::MTYPE_AVATAR); 2580 LLMemType mt(LLMemType::MTYPE_AVATAR);
2582 2581
2583 LLVector3 old_vel = getVelocity();
2584 // Do base class updates... 2582 // Do base class updates...
2585 U32 retval = LLViewerObject::processUpdateMessage(mesgsys, user_data, block_num, update_type, dp); 2583 U32 retval = LLViewerObject::processUpdateMessage(mesgsys, user_data, block_num, update_type, dp);
2586 2584
@@ -3312,6 +3310,16 @@ void LLVOAvatar::resolveClient(LLColor4& avatar_name_color, std::string& client,
3312 avatar_name_color = avatar_name_color * (F32)0.333333333333; 3310 avatar_name_color = avatar_name_color * (F32)0.333333333333;
3313 client = "Meerkat"; 3311 client = "Meerkat";
3314 } 3312 }
3313 else if(idx == LLUUID("7eab0700-f000-0000-0000-546561706f74"))
3314 {
3315 avatar_name_color = LLColor4(0.69f,0.42f,0.84f,1.0f); // Armins V3 viewer.
3316 client = "Teapot";
3317 }
3318 else if(idx == LLUUID("b32f01bc-f9b3-4535-b1f3-99dc38f022db"))
3319 {
3320 avatar_name_color = LLColor4(0.8f,1.0f,0.0f,1.0f);//Meta7
3321 client = "Meta7";
3322 }
3315 else if(idx == LLUUID("ccda2b3b-e72c-a112-e126-fee238b67218")) 3323 else if(idx == LLUUID("ccda2b3b-e72c-a112-e126-fee238b67218"))
3316 { 3324 {
3317 avatar_name_color += LLColor4::green;//emerald 3325 avatar_name_color += LLColor4::green;//emerald
@@ -3819,8 +3827,6 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
3819 mNameText->setLabel(mNameString); 3827 mNameText->setLabel(mNameString);
3820 } 3828 }
3821 3829
3822 char line[MAX_STRING]; /* Flawfinder: ignore */
3823 line[0] = '\0';
3824 std::deque<LLChat>::iterator chat_iter = mChats.begin(); 3830 std::deque<LLChat>::iterator chat_iter = mChats.begin();
3825 mNameText->clearString(); 3831 mNameText->clearString();
3826 3832
@@ -4283,8 +4289,6 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
4283 xyVel.mV[VZ] = 0.0f; 4289 xyVel.mV[VZ] = 0.0f;
4284 speed = xyVel.length(); 4290 speed = xyVel.length();
4285 4291
4286 BOOL throttle = TRUE;
4287
4288 if (!(mIsSitting && getParent())) 4292 if (!(mIsSitting && getParent()))
4289 { 4293 {
4290 //-------------------------------------------------------------------- 4294 //--------------------------------------------------------------------
@@ -4295,7 +4299,6 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
4295 if (mTimeLast == 0.0f) 4299 if (mTimeLast == 0.0f)
4296 { 4300 {
4297 mTimeLast = animation_time; 4301 mTimeLast = animation_time;
4298 throttle = FALSE;
4299 4302
4300 // put the pelvis at slaved position/mRotation 4303 // put the pelvis at slaved position/mRotation
4301 mRoot.setWorldPosition( getPositionAgent() ); // first frame 4304 mRoot.setWorldPosition( getPositionAgent() ); // first frame
diff --git a/linden/indra/newview/llvoiceclient.cpp b/linden/indra/newview/llvoiceclient.cpp
index 559bc31..409bb68 100644
--- a/linden/indra/newview/llvoiceclient.cpp
+++ b/linden/indra/newview/llvoiceclient.cpp
@@ -3160,7 +3160,7 @@ void LLVoiceClient::giveUp()
3160 3160
3161static void oldSDKTransform (LLVector3 &left, LLVector3 &up, LLVector3 &at, LLVector3d &pos, LLVector3 &vel) 3161static void oldSDKTransform (LLVector3 &left, LLVector3 &up, LLVector3 &at, LLVector3d &pos, LLVector3 &vel)
3162{ 3162{
3163 F32 nat[3], nup[3], nl[3], nvel[3]; // the new at, up, left vectors and the new position and velocity 3163 F32 nat[3], nup[3], nl[3]; // the new at, up, left vectors and the new position and velocity (velocity was not used, so I deleted it)
3164 F64 npos[3]; 3164 F64 npos[3];
3165 3165
3166 // The original XML command was sent like this: 3166 // The original XML command was sent like this:
@@ -3210,10 +3210,6 @@ static void oldSDKTransform (LLVector3 &left, LLVector3 &up, LLVector3 &at, LLVe
3210 npos[1] = pos.mdV[VZ]; 3210 npos[1] = pos.mdV[VZ];
3211 npos[2] = pos.mdV[VY]; 3211 npos[2] = pos.mdV[VY];
3212 3212
3213 nvel[0] = vel.mV[VX];
3214 nvel[1] = vel.mV[VZ];
3215 nvel[2] = vel.mV[VY];
3216
3217 for(int i=0;i<3;++i) { 3213 for(int i=0;i<3;++i) {
3218 at.mV[i] = nat[i]; 3214 at.mV[i] = nat[i];
3219 up.mV[i] = nup[i]; 3215 up.mV[i] = nup[i];
@@ -3264,10 +3260,6 @@ static void oldSDKTransform (LLVector3 &left, LLVector3 &up, LLVector3 &at, LLVe
3264 npos[1] = pos.mdV[VZ]; 3260 npos[1] = pos.mdV[VZ];
3265 npos[2] = pos.mdV[VY] * -1.0; 3261 npos[2] = pos.mdV[VY] * -1.0;
3266 3262
3267 nvel[0] = vel.mV[VX];
3268 nvel[1] = vel.mV[VZ];
3269 nvel[2] = vel.mV[VY];
3270
3271 for(int i=0;i<3;++i) { 3263 for(int i=0;i<3;++i) {
3272 at.mV[i] = nat[i]; 3264 at.mV[i] = nat[i];
3273 up.mV[i] = nup[i]; 3265 up.mV[i] = nup[i];
diff --git a/linden/indra/newview/llvosurfacepatch.cpp b/linden/indra/newview/llvosurfacepatch.cpp
index 1671880..380eff5 100644
--- a/linden/indra/newview/llvosurfacepatch.cpp
+++ b/linden/indra/newview/llvosurfacepatch.cpp
@@ -423,7 +423,7 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep,
423 S32 vertex_count = 0; 423 S32 vertex_count = 0;
424 S32 i, x, y; 424 S32 i, x, y;
425 425
426 S32 num_vertices, num_indices; 426 S32 num_vertices;
427 427
428 U32 render_stride = mLastStride; 428 U32 render_stride = mLastStride;
429 S32 patch_size = mPatchp->getSurface()->getGridsPerPatchEdge(); 429 S32 patch_size = mPatchp->getSurface()->getGridsPerPatchEdge();
@@ -441,7 +441,6 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep,
441 if (north_stride == render_stride) 441 if (north_stride == render_stride)
442 { 442 {
443 num_vertices = 2 * length + 1; 443 num_vertices = 2 * length + 1;
444 num_indices = length * 6 - 3;
445 444
446 facep->mCenterAgent = (mPatchp->getPointAgent(8, 15) + mPatchp->getPointAgent(8, 16))*0.5f; 445 facep->mCenterAgent = (mPatchp->getPointAgent(8, 15) + mPatchp->getPointAgent(8, 16))*0.5f;
447 446
@@ -494,7 +493,6 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep,
494 { 493 {
495 // North stride is longer (has less vertices) 494 // North stride is longer (has less vertices)
496 num_vertices = length + length/2 + 1; 495 num_vertices = length + length/2 + 1;
497 num_indices = half_length*9 - 3;
498 496
499 facep->mCenterAgent = (mPatchp->getPointAgent(7, 15) + mPatchp->getPointAgent(8, 16))*0.5f; 497 facep->mCenterAgent = (mPatchp->getPointAgent(7, 15) + mPatchp->getPointAgent(8, 16))*0.5f;
500 498
@@ -555,7 +553,6 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep,
555 length = patch_size / north_stride; 553 length = patch_size / north_stride;
556 half_length = length / 2; 554 half_length = length / 2;
557 num_vertices = length + half_length + 1; 555 num_vertices = length + half_length + 1;
558 num_indices = 9*half_length - 3;
559 556
560 facep->mCenterAgent = (mPatchp->getPointAgent(15, 7) + mPatchp->getPointAgent(16, 8))*0.5f; 557 facep->mCenterAgent = (mPatchp->getPointAgent(15, 7) + mPatchp->getPointAgent(16, 8))*0.5f;
561 558
@@ -629,7 +626,7 @@ void LLVOSurfacePatch::updateEastGeometry(LLFace *facep,
629{ 626{
630 S32 i, x, y; 627 S32 i, x, y;
631 628
632 S32 num_vertices, num_indices; 629 S32 num_vertices;
633 630
634 U32 render_stride = mLastStride; 631 U32 render_stride = mLastStride;
635 S32 patch_size = mPatchp->getSurface()->getGridsPerPatchEdge(); 632 S32 patch_size = mPatchp->getSurface()->getGridsPerPatchEdge();
@@ -642,7 +639,6 @@ void LLVOSurfacePatch::updateEastGeometry(LLFace *facep,
642 if (east_stride == render_stride) 639 if (east_stride == render_stride)
643 { 640 {
644 num_vertices = 2 * length + 1; 641 num_vertices = 2 * length + 1;
645 num_indices = length * 6 - 3;
646 642
647 facep->mCenterAgent = (mPatchp->getPointAgent(8, 15) + mPatchp->getPointAgent(8, 16))*0.5f; 643 facep->mCenterAgent = (mPatchp->getPointAgent(8, 15) + mPatchp->getPointAgent(8, 16))*0.5f;
648 644
@@ -693,7 +689,6 @@ void LLVOSurfacePatch::updateEastGeometry(LLFace *facep,
693 { 689 {
694 // East stride is longer (has less vertices) 690 // East stride is longer (has less vertices)
695 num_vertices = length + half_length + 1; 691 num_vertices = length + half_length + 1;
696 num_indices = half_length*9 - 3;
697 692
698 facep->mCenterAgent = (mPatchp->getPointAgent(7, 15) + mPatchp->getPointAgent(8, 16))*0.5f; 693 facep->mCenterAgent = (mPatchp->getPointAgent(7, 15) + mPatchp->getPointAgent(8, 16))*0.5f;
699 694
@@ -750,7 +745,6 @@ void LLVOSurfacePatch::updateEastGeometry(LLFace *facep,
750 length = patch_size / east_stride; 745 length = patch_size / east_stride;
751 half_length = length / 2; 746 half_length = length / 2;
752 num_vertices = length + length/2 + 1; 747 num_vertices = length + length/2 + 1;
753 num_indices = 9*(length/2) - 3;
754 748
755 facep->mCenterAgent = (mPatchp->getPointAgent(15, 7) + mPatchp->getPointAgent(16, 8))*0.5f; 749 facep->mCenterAgent = (mPatchp->getPointAgent(15, 7) + mPatchp->getPointAgent(16, 8))*0.5f;
756 750
diff --git a/linden/indra/newview/llvovolume.cpp b/linden/indra/newview/llvovolume.cpp
index d580d61..2b9f94c 100644
--- a/linden/indra/newview/llvovolume.cpp
+++ b/linden/indra/newview/llvovolume.cpp
@@ -68,6 +68,9 @@
68#include "rlvhandler.h" 68#include "rlvhandler.h"
69// [/RLVa:KB] 69// [/RLVa:KB]
70 70
71#include "llmediaentry.h"
72#include "llmediadataclient.h"
73
71const S32 MIN_QUIET_FRAMES_COALESCE = 30; 74const S32 MIN_QUIET_FRAMES_COALESCE = 30;
72const F32 FORCE_SIMPLE_RENDER_AREA = 512.f; 75const F32 FORCE_SIMPLE_RENDER_AREA = 512.f;
73const F32 FORCE_CULL_AREA = 8.f; 76const F32 FORCE_CULL_AREA = 8.f;
@@ -79,6 +82,93 @@ F32 LLVOVolume::sLODFactor = 1.f;
79F32 LLVOVolume::sLODSlopDistanceFactor = 0.5f; //Changing this to zero, effectively disables the LOD transition slop 82F32 LLVOVolume::sLODSlopDistanceFactor = 0.5f; //Changing this to zero, effectively disables the LOD transition slop
80F32 LLVOVolume::sDistanceFactor = 1.0f; 83F32 LLVOVolume::sDistanceFactor = 1.0f;
81S32 LLVOVolume::sNumLODChanges = 0; 84S32 LLVOVolume::sNumLODChanges = 0;
85LLPointer<LLObjectMediaDataClient> LLVOVolume::sObjectMediaClient = NULL;
86LLPointer<LLObjectMediaNavigateClient> LLVOVolume::sObjectMediaNavigateClient = NULL;
87
88// Implementation class of LLMediaDataClientObject. See llmediadataclient.h
89class LLMediaDataClientObjectImpl : public LLMediaDataClientObject
90{
91public:
92 LLMediaDataClientObjectImpl(LLVOVolume *obj, bool isNew) : mObject(obj), mNew(isNew) {}
93 LLMediaDataClientObjectImpl() { mObject = NULL; }
94
95 virtual U8 getMediaDataCount() const
96 { return mObject->getNumTEs(); }
97
98 virtual LLSD getMediaDataLLSD(U8 index) const
99 {
100 LLSD result;
101 LLTextureEntry *te = mObject->getTE(index);
102 if (NULL != te)
103 {
104 llassert((te->getMediaData() != NULL) == te->hasMedia());
105 if (te->getMediaData() != NULL)
106 {
107 result = te->getMediaData()->asLLSD();
108 // XXX HACK: workaround bug in asLLSD() where whitelist is not set properly
109 // See DEV-41949
110 if (!result.has(LLMediaEntry::WHITELIST_KEY))
111 {
112 result[LLMediaEntry::WHITELIST_KEY] = LLSD::emptyArray();
113 }
114 }
115 }
116 return result;
117 }
118
119 virtual LLUUID getID() const
120 { return mObject->getID(); }
121
122 virtual void mediaNavigateBounceBack(U8 index)
123 { mObject->mediaNavigateBounceBack(index); }
124
125 virtual bool hasMedia() const
126 { return mObject->hasMedia();}
127
128 virtual void updateObjectMediaData(LLSD const &data, const std::string &version_string)
129 { mObject->updateObjectMediaData(data, version_string); }
130
131 virtual F64 getMediaInterest() const
132 {
133 //F64 interest = mObject->getTotalMediaInterest();
134 //FIXME
135 F64 interest = 1024;
136 if (interest < (F64)0.0)
137 {
138 // media interest not valid yet, try pixel area
139 interest = mObject->getPixelArea();
140 // HACK: force recalculation of pixel area if interest is the "magic default" of 1024.
141 if (interest == 1024.f)
142 {
143 const_cast<LLVOVolume*>(static_cast<LLVOVolume*>(mObject))->setPixelAreaAndAngle(gAgent);
144 interest = mObject->getPixelArea();
145 }
146 }
147 return interest;
148 }
149
150 virtual bool isInterestingEnough() const
151 {
152 return true; //FUCKEDUP --> LLViewerMedia::isInterestingEnough(mObject, getMediaInterest());
153 }
154
155 virtual std::string getCapabilityUrl(const std::string &name) const
156 { return mObject->getRegion()->getCapability(name); }
157
158 virtual bool isDead() const
159 { return mObject->isDead(); }
160
161 virtual U32 getMediaVersion() const
162 { return LLTextureEntry::getVersionFromMediaVersionString(mObject->getMediaURL()); }
163
164 virtual bool isNew() const
165 { return mNew; }
166
167private:
168 LLPointer<LLVOVolume> mObject;
169 bool mNew;
170};
171
82 172
83LLVOVolume::LLVOVolume(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp) 173LLVOVolume::LLVOVolume(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp)
84 : LLViewerObject(id, pcode, regionp), 174 : LLViewerObject(id, pcode, regionp),
@@ -123,6 +213,18 @@ void LLVOVolume::markDead()
123// static 213// static
124void LLVOVolume::initClass() 214void LLVOVolume::initClass()
125{ 215{
216 // gSavedSettings better be around
217 if (gSavedSettings.getBOOL("PrimMediaMasterEnabled"))
218 {
219 const F32 queue_timer_delay = gSavedSettings.getF32("PrimMediaRequestQueueDelay");
220 const F32 retry_timer_delay = gSavedSettings.getF32("PrimMediaRetryTimerDelay");
221 const U32 max_retries = gSavedSettings.getU32("PrimMediaMaxRetries");
222 const U32 max_sorted_queue_size = gSavedSettings.getU32("PrimMediaMaxSortedQueueSize");
223 const U32 max_round_robin_queue_size = gSavedSettings.getU32("PrimMediaMaxRoundRobinQueueSize");
224
225 sObjectMediaClient = new LLObjectMediaDataClient(queue_timer_delay, retry_timer_delay, max_retries,
226 max_sorted_queue_size, max_round_robin_queue_size);
227 }
126} 228}
127 229
128 230
@@ -132,6 +234,7 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
132 LLDataPacker *dp) 234 LLDataPacker *dp)
133{ 235{
134 LLColor4U color; 236 LLColor4U color;
237 const S32 teDirtyBits = (TEM_CHANGE_TEXTURE|TEM_CHANGE_COLOR|TEM_CHANGE_MEDIA);
135 238
136 // Do base class updates... 239 // Do base class updates...
137 U32 retval = LLViewerObject::processUpdateMessage(mesgsys, user_data, block_num, update_type, dp); 240 U32 retval = LLViewerObject::processUpdateMessage(mesgsys, user_data, block_num, update_type, dp);
@@ -199,10 +302,15 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
199 // 302 //
200 // Unpack texture entry data 303 // Unpack texture entry data
201 // 304 //
202 if (unpackTEMessage(mesgsys, _PREHASH_ObjectData, block_num) & (TEM_CHANGE_TEXTURE|TEM_CHANGE_COLOR)) 305 S32 result =unpackTEMessage(mesgsys, _PREHASH_ObjectData, block_num);
306 if (result & teDirtyBits)
203 { 307 {
204 updateTEData(); 308 updateTEData();
205 } 309 }
310 if (result & TEM_CHANGE_MEDIA)
311 {
312 retval |= MEDIA_FLAGS_CHANGED;
313 }
206 } 314 }
207 else 315 else
208 { 316 {
@@ -235,9 +343,16 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
235// llerrs << "Bogus TE data in " << getID() << ", crashing!" << llendl; 343// llerrs << "Bogus TE data in " << getID() << ", crashing!" << llendl;
236 llwarns << "Bogus TE data in " << getID() << llendl; 344 llwarns << "Bogus TE data in " << getID() << llendl;
237 } 345 }
238 else if (res2 & (TEM_CHANGE_TEXTURE|TEM_CHANGE_COLOR)) 346 else
239 { 347 {
240 updateTEData(); 348 if (res2 & teDirtyBits)
349 {
350 updateTEData();
351 }
352 if (res2 & TEM_CHANGE_MEDIA)
353 {
354 retval |= MEDIA_FLAGS_CHANGED;
355 }
241 } 356 }
242 357
243 U32 value = dp->getPassFlags(); 358 U32 value = dp->getPassFlags();
@@ -275,13 +390,39 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
275 U8 tdpbuffer[1024]; 390 U8 tdpbuffer[1024];
276 LLDataPackerBinaryBuffer tdp(tdpbuffer, 1024); 391 LLDataPackerBinaryBuffer tdp(tdpbuffer, 1024);
277 mesgsys->getBinaryDataFast(_PREHASH_ObjectData, _PREHASH_TextureEntry, tdpbuffer, 0, block_num); 392 mesgsys->getBinaryDataFast(_PREHASH_ObjectData, _PREHASH_TextureEntry, tdpbuffer, 0, block_num);
278 if ( unpackTEMessage(tdp) & (TEM_CHANGE_TEXTURE|TEM_CHANGE_COLOR)) 393 S32 result = unpackTEMessage(tdp);
394 if (result & teDirtyBits)
279 { 395 {
280 updateTEData(); 396 updateTEData();
281 } 397 }
398 if (result & TEM_CHANGE_MEDIA)
399 {
400 retval |= MEDIA_FLAGS_CHANGED;
401 }
282 } 402 }
283 } 403 }
284 } 404 }
405
406 if (retval & (MEDIA_URL_REMOVED | MEDIA_URL_ADDED | MEDIA_URL_UPDATED | MEDIA_FLAGS_CHANGED))
407 {
408 // If only the media URL changed, and it isn't a media version URL,
409 // ignore it
410 if ( ! ( retval & (MEDIA_URL_ADDED | MEDIA_URL_UPDATED) &&
411 mMedia && ! mMedia->mMediaURL.empty() &&
412 ! LLTextureEntry::isMediaVersionString(mMedia->mMediaURL) ) )
413 {
414 // If the media changed at all, request new media data
415 LL_DEBUGS("MediaOnAPrim") << "Media update: " << getID() << ": retval=" << retval << " Media URL: " <<
416 ((mMedia) ? mMedia->mMediaURL : std::string("")) << LL_ENDL;
417 requestMediaDataUpdate(retval & MEDIA_FLAGS_CHANGED);
418 }
419 else {
420 LL_INFOS("MediaOnAPrim") << "Ignoring media update for: " << getID() << " Media URL: " <<
421 ((mMedia) ? mMedia->mMediaURL : std::string("")) << LL_ENDL;
422 }
423 }
424 // ...and clean up any media impls
425 cleanUpMediaImpls();
285 426
286 return retval; 427 return retval;
287} 428}
@@ -2894,4 +3035,253 @@ void LLHUDPartition::shift(const LLVector3 &offset)
2894 //HUD objects don't shift with region crossing. That would be silly. 3035 //HUD objects don't shift with region crossing. That would be silly.
2895} 3036}
2896 3037
3038void LLVOVolume::requestMediaDataUpdate(bool isNew)
3039{
3040 if (sObjectMediaClient)
3041 sObjectMediaClient->fetchMedia(new LLMediaDataClientObjectImpl(this, isNew));
3042}
3043
3044void LLVOVolume::cleanUpMediaImpls()
3045{
3046 // Iterate through our TEs and remove any Impls that are no longer used
3047 const U8 numTEs = getNumTEs();
3048 for (U8 i = 0; i < numTEs; i++)
3049 {
3050 const LLTextureEntry* te = getTE(i);
3051 if( ! te->hasMedia())
3052 {
3053 // Delete the media IMPL!
3054 removeMediaImpl(i) ;
3055 }
3056 }
3057}
3058
3059void LLVOVolume::removeMediaImpl(S32 texture_index)
3060{
3061 if(mMediaImplList.size() <= (U32)texture_index || mMediaImplList[texture_index].isNull())
3062 {
3063 return ;
3064 }
3065
3066 //make the face referencing to mMediaImplList[texture_index] to point back to the old texture.
3067 if(mDrawable)
3068 {
3069 LLFace* facep = mDrawable->getFace(texture_index) ;
3070 if(facep)
3071 {
3072 //LLViewerMediaTexture* media_tex = LLViewerTextureManager::findMediaTexture(mMediaImplList[texture_index]->getMediaTextureID()) ;
3073 //if(media_tex)
3074 //{
3075 // media_tex->removeMediaFromFace(facep) ;
3076 //}
3077 }
3078 }
3079
3080 //check if some other face(s) of this object reference(s)to this media impl.
3081 S32 i ;
3082 S32 end = (S32)mMediaImplList.size() ;
3083 for(i = 0; i < end ; i++)
3084 {
3085 if( i != texture_index && mMediaImplList[i] == mMediaImplList[texture_index])
3086 {
3087 break ;
3088 }
3089 }
3090
3091 if(i == end) //this object does not need this media impl.
3092 {
3093 //mMediaImplList[texture_index]->removeObject(this) ;
3094 }
3095
3096 mMediaImplList[texture_index] = NULL ;
3097 return ;
3098}
3099
3100void LLVOVolume::addMediaImpl(LLViewerMediaImpl* media_impl, S32 texture_index)
3101{
3102 if((S32)mMediaImplList.size() < texture_index + 1)
3103 {
3104 mMediaImplList.resize(texture_index + 1) ;
3105 }
3106
3107 if(mMediaImplList[texture_index].notNull())
3108 {
3109 if(mMediaImplList[texture_index] == media_impl)
3110 {
3111 return ;
3112 }
3113
3114 removeMediaImpl(texture_index) ;
3115 }
3116
3117 mMediaImplList[texture_index] = media_impl;
3118 //media_impl->addObject(this) ;
3119
3120 //add the face to show the media if it is in playing
3121 if(mDrawable)
3122 {
3123 LLFace* facep = mDrawable->getFace(texture_index) ;
3124 if(facep)
3125 {
3126 //LLViewerMediaTexture* media_tex = LLViewerTextureManager::findMediaTexture(mMediaImplList[texture_index]->getMediaTextureID()) ;
3127 //if(media_tex)
3128 //{
3129 // media_tex->addMediaToFace(facep) ;
3130 //}
3131 }
3132 else //the face is not available now, start media on this face later.
3133 {
3134 //media_impl->setUpdated(TRUE) ;
3135 }
3136 }
3137 return ;
3138}
3139
3140void LLVOVolume::sendMediaDataUpdate()
3141{
3142 if (sObjectMediaClient)
3143 sObjectMediaClient->updateMedia(new LLMediaDataClientObjectImpl(this, false));
3144}
3145
3146void LLVOVolume::updateObjectMediaData(const LLSD &media_data_array, const std::string &media_version)
3147{
3148 // media_data_array is an array of media entry maps
3149 // media_version is the version string in the response.
3150 U32 fetched_version = LLTextureEntry::getVersionFromMediaVersionString(media_version);
3151
3152 // Only update it if it is newer!
3153 if ( (S32)fetched_version > mLastFetchedMediaVersion)
3154 {
3155 mLastFetchedMediaVersion = fetched_version;
3156 //llinfos << "updating:" << this->getID() << " " << ll_pretty_print_sd(media_data_array) << llendl;
3157
3158 LLSD::array_const_iterator iter = media_data_array.beginArray();
3159 LLSD::array_const_iterator end = media_data_array.endArray();
3160 U8 texture_index = 0;
3161 for (; iter != end; ++iter, ++texture_index)
3162 {
3163 syncMediaData(texture_index, *iter, false/*merge*/, false/*ignore_agent*/);
3164 }
3165 }
3166}
3167
3168bool LLVOVolume::hasMedia() const
3169{
3170 bool result = false;
3171 const U8 numTEs = getNumTEs();
3172 for (U8 i = 0; i < numTEs; i++)
3173 {
3174 const LLTextureEntry* te = getTE(i);
3175 if(te->hasMedia())
3176 {
3177 result = true;
3178 break;
3179 }
3180 }
3181 return result;
3182}
3183
3184void LLVOVolume::syncMediaData(S32 texture_index, const LLSD &media_data, bool merge, bool ignore_agent)
3185{
3186 if(mDead)
3187 {
3188 // If the object has been marked dead, don't process media updates.
3189 return;
3190 }
3191
3192 LLTextureEntry *te = getTE(texture_index);
3193// LL_DEBUGS("MediaOnAPrim") << "BEFORE: texture_index = " << texture_index
3194// << " hasMedia = " << te->hasMedia() << " : "
3195// << ((NULL == te->getMediaData()) ? "NULL MEDIA DATA" : ll_pretty_print_sd(te->getMediaData()->asLLSD())) << llendl;
2897 3196
3197 std::string previous_url;
3198 LLMediaEntry* mep = te->getMediaData();
3199 if(mep)
3200 {
3201 // Save the "current url" from before the update so we can tell if
3202 // it changes.
3203 previous_url = mep->getCurrentURL();
3204 }
3205
3206 if (merge)
3207 {
3208 te->mergeIntoMediaData(media_data);
3209 }
3210 else {
3211 // XXX Question: what if the media data is undefined LLSD, but the
3212 // update we got above said that we have media flags?? Here we clobber
3213 // that, assuming the data from the service is more up-to-date.
3214 te->updateMediaData(media_data);
3215 }
3216
3217 mep = te->getMediaData();
3218 if(mep)
3219 {
3220 //bool update_from_self = false;
3221 if (!ignore_agent)
3222 {
3223 LLUUID updating_agent = LLTextureEntry::getAgentIDFromMediaVersionString(getMediaURL());
3224 //update_from_self = (updating_agent == gAgent.getID());
3225 }
3226 //viewer_media_t media_impl = LLViewerMedia::updateMediaImpl(mep, previous_url, update_from_self);
3227
3228 //addMediaImpl(media_impl, texture_index) ;
3229 }
3230 else
3231 {
3232 //removeMediaImpl(texture_index);
3233 }
3234
3235// LL_DEBUGS("MediaOnAPrim") << "AFTER: texture_index = " << texture_index
3236// << " hasMedia = " << te->hasMedia() << " : "
3237// << ((NULL == te->getMediaData()) ? "NULL MEDIA DATA" : ll_pretty_print_sd(te->getMediaData()->asLLSD())) << llendl;
3238}
3239
3240
3241void LLVOVolume::mediaNavigateBounceBack(U8 texture_index)
3242{
3243 /*
3244 // Find the media entry for this navigate
3245 const LLMediaEntry* mep = NULL;
3246 viewer_media_t impl = getMediaImpl(texture_index);
3247 LLTextureEntry *te = getTE(texture_index);
3248 if(te)
3249 {
3250 mep = te->getMediaData();
3251 }
3252
3253 if (mep && impl)
3254 {
3255 std::string url = mep->getCurrentURL();
3256 // Look for a ":", if not there, assume "http://"
3257 if (!url.empty() && std::string::npos == url.find(':'))
3258 {
3259 url = "http://" + url;
3260 }
3261 // If the url we're trying to "bounce back" to is either empty or not
3262 // allowed by the whitelist, try the home url. If *that* doesn't work,
3263 // set the media as failed and unload it
3264 if (url.empty() || !mep->checkCandidateUrl(url))
3265 {
3266 url = mep->getHomeURL();
3267 // Look for a ":", if not there, assume "http://"
3268 if (!url.empty() && std::string::npos == url.find(':'))
3269 {
3270 url = "http://" + url;
3271 }
3272 }
3273 if (url.empty() || !mep->checkCandidateUrl(url))
3274 {
3275 // The url to navigate back to is not good, and we have nowhere else
3276 // to go.
3277 LL_WARNS("MediaOnAPrim") << "FAILED to bounce back URL \"" << url << "\" -- unloading impl" << LL_ENDL;
3278 impl->setMediaFailed(true);
3279 }
3280 else {
3281 // Okay, navigate now
3282 LL_INFOS("MediaOnAPrim") << "bouncing back to URL: " << url << LL_ENDL;
3283 impl->navigateTo(url, "", false, true);
3284 }
3285 }
3286 */
3287}
diff --git a/linden/indra/newview/llvovolume.h b/linden/indra/newview/llvovolume.h
index d09a198..39d9227 100644
--- a/linden/indra/newview/llvovolume.h
+++ b/linden/indra/newview/llvovolume.h
@@ -36,6 +36,8 @@
36#include "llviewerobject.h" 36#include "llviewerobject.h"
37#include "llviewerimage.h" 37#include "llviewerimage.h"
38#include "llframetimer.h" 38#include "llframetimer.h"
39#include "llmediadataclient.h"
40#include "llviewermedia.h"
39#include "llapr.h" 41#include "llapr.h"
40#include <map> 42#include <map>
41 43
@@ -43,6 +45,8 @@ class LLViewerTextureAnim;
43class LLDrawPool; 45class LLDrawPool;
44class LLSelectNode; 46class LLSelectNode;
45 47
48typedef std::vector<viewer_media_t> media_list_t;
49
46enum LLVolumeInterfaceType 50enum LLVolumeInterfaceType
47{ 51{
48 INTERFACE_FLEXIBLE = 1, 52 INTERFACE_FLEXIBLE = 1,
@@ -217,6 +221,46 @@ public:
217 221
218 // tag: vaa emerald local_asset_browser 222 // tag: vaa emerald local_asset_browser
219 void setSculptChanged(BOOL has_changed) { mSculptChanged = has_changed; } 223 void setSculptChanged(BOOL has_changed) { mSculptChanged = has_changed; }
224
225
226 // Functions that deal with media, or media navigation
227
228 // Update this object's media data with the given media data array
229 // (typically this is only called upon a response from a server request)
230 void updateObjectMediaData(const LLSD &media_data_array, const std::string &media_version);
231
232 // Bounce back media at the given index to its current URL (or home URL, if current URL is empty)
233 void mediaNavigateBounceBack(U8 texture_index);
234
235 // Returns whether or not this object has permission to navigate or control
236 // the given media entry
237 enum MediaPermType {
238 MEDIA_PERM_INTERACT, MEDIA_PERM_CONTROL
239 };
240 bool hasMediaPermission(const LLMediaEntry* media_entry, MediaPermType perm_type);
241
242 void mediaNavigated(LLViewerMediaImpl *impl, LLPluginClassMedia* plugin, std::string new_location);
243 void mediaEvent(LLViewerMediaImpl *impl, LLPluginClassMedia* plugin, LLViewerMediaObserver::EMediaEvent event);
244
245 // Sync the given media data with the impl and the given te
246 void syncMediaData(S32 te, const LLSD &media_data, bool merge, bool ignore_agent);
247
248 // Send media data update to the simulator.
249 void sendMediaDataUpdate();
250
251 viewer_media_t getMediaImpl(U8 face_id) const;
252 S32 getFaceIndexWithMediaImpl(const LLViewerMediaImpl* media_impl, S32 start_face_id);
253 F64 getTotalMediaInterest() const;
254
255 bool hasMedia() const;
256
257 LLVector3 getApproximateFaceNormal(U8 face_id);
258
259 // Returns 'true' iff the media data for this object is in flight
260 bool isMediaDataBeingFetched() const;
261
262 // Returns the "last fetched" media version, or -1 if not fetched yet
263 S32 getLastFetchedMediaVersion() const { return mLastFetchedMediaVersion; }
220 264
221protected: 265protected:
222 S32 computeLODDetail(F32 distance, F32 radius); 266 S32 computeLODDetail(F32 distance, F32 radius);
@@ -224,6 +268,11 @@ protected:
224 LLFace* addFace(S32 face_index); 268 LLFace* addFace(S32 face_index);
225 void updateTEData(); 269 void updateTEData();
226 270
271 void requestMediaDataUpdate(bool isNew);
272 void cleanUpMediaImpls();
273 void addMediaImpl(LLViewerMediaImpl* media_impl, S32 texture_index) ;
274 void removeMediaImpl(S32 texture_index) ;
275
227public: 276public:
228 LLViewerTextureAnim *mTextureAnimp; 277 LLViewerTextureAnim *mTextureAnimp;
229 U8 mTexAnimMode; 278 U8 mTexAnimMode;
@@ -242,12 +291,16 @@ private:
242 LLVolumeInterface *mVolumeImpl; 291 LLVolumeInterface *mVolumeImpl;
243 LLPointer<LLViewerImage> mSculptTexture; 292 LLPointer<LLViewerImage> mSculptTexture;
244 S32 mIndexInTex; // index of this volume in the texture's volume list 293 S32 mIndexInTex; // index of this volume in the texture's volume list
294 media_list_t mMediaImplList;
295 S32 mLastFetchedMediaVersion; // as fetched from the server, starts as -1
245 296
246 // statics 297 // statics
247public: 298public:
248 static F32 sLODSlopDistanceFactor;// Changing this to zero, effectively disables the LOD transition slop 299 static F32 sLODSlopDistanceFactor;// Changing this to zero, effectively disables the LOD transition slop
249 static F32 sLODFactor; // LOD scale factor 300 static F32 sLODFactor; // LOD scale factor
250 static F32 sDistanceFactor; // LOD distance factor 301 static F32 sDistanceFactor; // LOD distance factor
302 static LLPointer<LLObjectMediaDataClient> sObjectMediaClient;
303 static LLPointer<LLObjectMediaNavigateClient> sObjectMediaNavigateClient;
251 304
252protected: 305protected:
253 static S32 sNumLODChanges; 306 static S32 sNumLODChanges;
diff --git a/linden/indra/newview/llvowlsky.cpp b/linden/indra/newview/llvowlsky.cpp
index 572a2a1..5cbda97 100644
--- a/linden/indra/newview/llvowlsky.cpp
+++ b/linden/indra/newview/llvowlsky.cpp
@@ -719,12 +719,13 @@ void LLVOWLSky::updateStarColors()
719{ 719{
720 std::vector<LLColor4>::iterator v_c = mStarColors.begin(); 720 std::vector<LLColor4>::iterator v_c = mStarColors.begin();
721 std::vector<F32>::iterator v_i = mStarIntensities.begin(); 721 std::vector<F32>::iterator v_i = mStarIntensities.begin();
722 std::vector<LLVector3>::iterator v_p = mStarVertices.begin(); 722 // A bunch of stuff here is not used, but looks like it might be useful later, so I'll leave it, but commented out.
723 //std::vector<LLVector3>::iterator v_p = mStarVertices.begin();
723 724
724 const F32 var = 0.15f; 725 const F32 var = 0.15f;
725 const F32 min = 0.5f; //0.75f; 726 const F32 min = 0.5f; //0.75f;
726 const F32 sunclose_max = 0.6f; 727 //const F32 sunclose_max = 0.6f;
727 const F32 sunclose_range = 1 - sunclose_max; 728 //const F32 sunclose_range = 1 - sunclose_max;
728 729
729 //F32 below_horizon = - llmin(0.0f, gSky.mVOSkyp->getToSunLast().mV[2]); 730 //F32 below_horizon = - llmin(0.0f, gSky.mVOSkyp->getToSunLast().mV[2]);
730 //F32 brightness_factor = llmin(1.0f, below_horizon * 20); 731 //F32 brightness_factor = llmin(1.0f, below_horizon * 20);
@@ -738,14 +739,14 @@ void LLVOWLSky::updateStarColors()
738 U32 x; 739 U32 x;
739 for (x = 0; x < getStarsNumVerts(); ++x) 740 for (x = 0; x < getStarsNumVerts(); ++x)
740 { 741 {
741 F32 sundir_factor = 1; 742 //F32 sundir_factor = 1;
742 LLVector3 tostar = *v_p; 743 //LLVector3 tostar = *v_p;
743 tostar.normVec(); 744 //tostar.normVec();
744 const F32 how_close_to_sun = tostar * gSky.mVOSkyp->getToSunLast(); 745 //const F32 how_close_to_sun = tostar * gSky.mVOSkyp->getToSunLast();
745 if (how_close_to_sun > sunclose_max) 746 //if (how_close_to_sun > sunclose_max)
746 { 747 //{
747 sundir_factor = (1 - how_close_to_sun) / sunclose_range; 748 // sundir_factor = (1 - how_close_to_sun) / sunclose_range;
748 } 749 //}
749 intensity = *(v_i); 750 intensity = *(v_i);
750 F32 alpha = v_c->mV[VALPHA] + (ll_frand() - 0.5f) * var * intensity; 751 F32 alpha = v_c->mV[VALPHA] + (ll_frand() - 0.5f) * var * intensity;
751 if (alpha < min * intensity) 752 if (alpha < min * intensity)
@@ -762,7 +763,7 @@ void LLVOWLSky::updateStarColors()
762 v_c->mV[VALPHA] = alpha; 763 v_c->mV[VALPHA] = alpha;
763 v_c++; 764 v_c++;
764 v_i++; 765 v_i++;
765 v_p++; 766 //v_p++;
766 } 767 }
767 } 768 }
768} 769}
diff --git a/linden/indra/newview/llwaterparammanager.cpp b/linden/indra/newview/llwaterparammanager.cpp
index 0156622..2386631 100644
--- a/linden/indra/newview/llwaterparammanager.cpp
+++ b/linden/indra/newview/llwaterparammanager.cpp
@@ -3,9 +3,9 @@
3 * @brief Implementation for the LLWaterParamManager class. 3 * @brief Implementation for the LLWaterParamManager class.
4 * 4 *
5 * $LicenseInfo:firstyear=2007&license=viewergpl$ 5 * $LicenseInfo:firstyear=2007&license=viewergpl$
6 * 6 *
7 * Copyright (c) 2007-2009, Linden Research, Inc. 7 * Copyright (c) 2007-2009, Linden Research, Inc.
8 * 8 *
9 * Second Life Viewer Source Code 9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab 10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0 11 * to you under the terms of the GNU General Public License, version 2.0
@@ -13,17 +13,17 @@
13 * ("Other License"), formally executed by you and Linden Lab. Terms of 13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or 14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 * 16 *
17 * There are special exceptions to the terms and conditions of the GPL as 17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception 18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or 19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at 20 * online at
21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception 21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
22 * 22 *
23 * By copying, modifying or distributing this software, you acknowledge 23 * By copying, modifying or distributing this software, you acknowledge
24 * that you have read and understood your obligations described above, 24 * that you have read and understood your obligations described above,
25 * and agree to abide by those obligations. 25 * and agree to abide by those obligations.
26 * 26 *
27 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO 27 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
28 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, 28 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
29 * COMPLETENESS OR PERFORMANCE. 29 * COMPLETENESS OR PERFORMANCE.
@@ -69,6 +69,7 @@
69 69
70#include "llwlparammanager.h" 70#include "llwlparammanager.h"
71#include "llwaterparamset.h" 71#include "llwaterparamset.h"
72#include "llettherebelight.h"
72#include "llpostprocess.h" 73#include "llpostprocess.h"
73#include "llfloaterwater.h" 74#include "llfloaterwater.h"
74 75
@@ -102,9 +103,9 @@ void LLWaterParamManager::loadAllPresets(const std::string& file_name)
102{ 103{
103 std::string path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/water", "")); 104 std::string path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/water", ""));
104 LL_DEBUGS2("AppInit", "ShaderLoading") << "Loading Default water settings from " << path_name << LL_ENDL; 105 LL_DEBUGS2("AppInit", "ShaderLoading") << "Loading Default water settings from " << path_name << LL_ENDL;
105 106
106 bool found = true; 107 bool found = true;
107 while(found) 108 while(found)
108 { 109 {
109 std::string name; 110 std::string name;
110 found = gDirUtilp->getNextFileInDir(path_name, "*.xml", name, false); 111 found = gDirUtilp->getNextFileInDir(path_name, "*.xml", name, false);
@@ -128,9 +129,9 @@ void LLWaterParamManager::loadAllPresets(const std::string& file_name)
128 129
129 std::string path_name2(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/water", "")); 130 std::string path_name2(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/water", ""));
130 LL_DEBUGS2("AppInit", "Shaders") << "Loading User water settings from " << path_name2 << LL_ENDL; 131 LL_DEBUGS2("AppInit", "Shaders") << "Loading User water settings from " << path_name2 << LL_ENDL;
131 132
132 found = true; 133 found = true;
133 while(found) 134 while(found)
134 { 135 {
135 std::string name; 136 std::string name;
136 found = gDirUtilp->getNextFileInDir(path_name2, "*.xml", name, false); 137 found = gDirUtilp->getNextFileInDir(path_name2, "*.xml", name, false);
@@ -159,7 +160,7 @@ void LLWaterParamManager::loadPreset(const std::string & name,bool propagate)
159 if(propagate) 160 if(propagate)
160 { 161 {
161 getParamSet(name, mCurParams); 162 getParamSet(name, mCurParams);
162 propagateParameters(); 163 LightShare::apply(&mCurParams, NULL, NULL, WL_SCOPE_USER);
163 } 164 }
164 return; 165 return;
165 } 166 }
@@ -174,10 +175,10 @@ void LLWaterParamManager::loadPreset(const std::string & name,bool propagate)
174 175
175 std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/water", escaped_filename)); 176 std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/water", escaped_filename));
176 LL_DEBUGS2("AppInit", "Shaders") << "Loading water settings from " << pathName << LL_ENDL; 177 LL_DEBUGS2("AppInit", "Shaders") << "Loading water settings from " << pathName << LL_ENDL;
177 178
178 std::ifstream presetsXML; 179 std::ifstream presetsXML;
179 presetsXML.open(pathName.c_str()); 180 presetsXML.open(pathName.c_str());
180 181
181 // That failed, try loading from the users area instead. 182 // That failed, try loading from the users area instead.
182 if(!presetsXML) 183 if(!presetsXML)
183 { 184 {
@@ -190,8 +191,8 @@ void LLWaterParamManager::loadPreset(const std::string & name,bool propagate)
190 { 191 {
191 loadPresetXML(name, presetsXML); 192 loadPresetXML(name, presetsXML);
192 presetsXML.close(); 193 presetsXML.close();
193 } 194 }
194 else 195 else
195 { 196 {
196 llwarns << "Can't find " << name << llendl; 197 llwarns << "Can't find " << name << llendl;
197 return; 198 return;
@@ -200,21 +201,21 @@ void LLWaterParamManager::loadPreset(const std::string & name,bool propagate)
200 if(propagate) 201 if(propagate)
201 { 202 {
202 getParamSet(name, mCurParams); 203 getParamSet(name, mCurParams);
203 propagateParameters(); 204 LightShare::apply(&mCurParams, NULL, NULL, WL_SCOPE_USER);
204 } 205 }
205} 206}
206 207
207bool LLWaterParamManager::loadPresetXML(const std::string& name, std::istream& preset_stream, bool propagate /* = false */, bool check_if_real /* = false */) 208bool LLWaterParamManager::loadPresetXML(const std::string& name, std::istream& preset_stream, bool propagate /* = false */, bool check_if_real /* = false */)
208{ 209{
209 LLSD paramsData(LLSD::emptyMap()); 210 LLSD paramsData(LLSD::emptyMap());
210 211
211 LLPointer<LLSDParser> parser = new LLSDXMLParser(); 212 LLPointer<LLSDParser> parser = new LLSDXMLParser();
212 213
213 if(parser->parse(preset_stream, paramsData, LLSDSerialize::SIZE_UNLIMITED) == LLSDParser::PARSE_FAILURE) 214 if(parser->parse(preset_stream, paramsData, LLSDSerialize::SIZE_UNLIMITED) == LLSDParser::PARSE_FAILURE)
214 { 215 {
215 return false; 216 return false;
216 } 217 }
217 218
218 if(check_if_real) 219 if(check_if_real)
219 { 220 {
220 static const char* expected_windlight_settings[] = { 221 static const char* expected_windlight_settings[] = {
@@ -240,17 +241,17 @@ bool LLWaterParamManager::loadPresetXML(const std::string& name, std::istream& p
240 } 241 }
241 } 242 }
242 } 243 }
243 244
244 std::map<std::string, LLWaterParamSet>::iterator mIt = mParamList.find(name); 245 std::map<std::string, LLWaterParamSet>::iterator mIt = mParamList.find(name);
245 if(mIt == mParamList.end()) 246 if(mIt == mParamList.end())
246 { 247 {
247 addParamSet(name, paramsData); 248 addParamSet(name, paramsData);
248 } 249 }
249 else 250 else
250 { 251 {
251 setParamSet(name, paramsData); 252 setParamSet(name, paramsData);
252 } 253 }
253 254
254 if(propagate) 255 if(propagate)
255 { 256 {
256 getParamSet(name, mCurParams); 257 getParamSet(name, mCurParams);
@@ -306,19 +307,19 @@ bool LLWaterParamManager::savePresetToNotecard(const std::string & name)
306{ 307{
307 // make an empty llsd 308 // make an empty llsd
308 LLSD paramsData(LLSD::emptyMap()); 309 LLSD paramsData(LLSD::emptyMap());
309 310
310 // fill it with LLSD windlight params 311 // fill it with LLSD windlight params
311 paramsData = mParamList[name].getAll(); 312 paramsData = mParamList[name].getAll();
312 313
313 // get some XML 314 // get some XML
314 std::ostringstream presetsXML; 315 std::ostringstream presetsXML;
315 LLPointer<LLSDFormatter> formatter = new LLSDXMLFormatter(); 316 LLPointer<LLSDFormatter> formatter = new LLSDXMLFormatter();
316 formatter->format(paramsData, presetsXML, LLSDFormatter::OPTIONS_PRETTY); 317 formatter->format(paramsData, presetsXML, LLSDFormatter::OPTIONS_PRETTY);
317 318
318 // Write it to a notecard 319 // Write it to a notecard
319 LLNotecard notecard; 320 LLNotecard notecard;
320 notecard.setText(presetsXML.str()); 321 notecard.setText(presetsXML.str());
321 322
322 LLInventoryItem *item = gInventory.getItem(mParamList[name].mInventoryID); 323 LLInventoryItem *item = gInventory.getItem(mParamList[name].mInventoryID);
323 if(!item) 324 if(!item)
324 { 325 {
@@ -332,13 +333,13 @@ bool LLWaterParamManager::savePresetToNotecard(const std::string & name)
332 LLAssetID asset_id; 333 LLAssetID asset_id;
333 tid.generate(); 334 tid.generate();
334 asset_id = tid.makeAssetID(gAgent.getSecureSessionID()); 335 asset_id = tid.makeAssetID(gAgent.getSecureSessionID());
335 336
336 LLVFile file(gVFS, asset_id, LLAssetType::AT_NOTECARD, LLVFile::APPEND); 337 LLVFile file(gVFS, asset_id, LLAssetType::AT_NOTECARD, LLVFile::APPEND);
337 338
338 std::ostringstream stream; 339 std::ostringstream stream;
339 notecard.exportStream(stream); 340 notecard.exportStream(stream);
340 std::string buffer = stream.str(); 341 std::string buffer = stream.str();
341 342
342 S32 size = buffer.length() + 1; 343 S32 size = buffer.length() + 1;
343 file.setMaxSize(size); 344 file.setMaxSize(size);
344 file.write((U8*)buffer.c_str(), size); 345 file.write((U8*)buffer.c_str(), size);
@@ -351,7 +352,7 @@ bool LLWaterParamManager::savePresetToNotecard(const std::string & name)
351 LL_WARNS("WindLight") << "Stuff the legacy system." << LL_ENDL; 352 LL_WARNS("WindLight") << "Stuff the legacy system." << LL_ENDL;
352 return false; 353 return false;
353 } 354 }
354 355
355 propagateParameters(); 356 propagateParameters();
356 return true; 357 return true;
357} 358}
@@ -374,8 +375,8 @@ void LLWaterParamManager::propagateParameters(void)
374 } 375 }
375 376
376 bool err; 377 bool err;
377 F32 fog_density_slider = 378 F32 fog_density_slider =
378 log(mCurParams.getFloat(mFogDensity.mName, err)) / 379 log(mCurParams.getFloat(mFogDensity.mName, err)) /
379 log(mFogDensity.mBase); 380 log(mFogDensity.mBase);
380 381
381 setDensitySliderValue(fog_density_slider); 382 setDensitySliderValue(fog_density_slider);
@@ -398,12 +399,12 @@ void LLWaterParamManager::updateShaderUniforms(LLGLSLShader * shader)
398void LLWaterParamManager::update(LLViewerCamera * cam) 399void LLWaterParamManager::update(LLViewerCamera * cam)
399{ 400{
400 LLFastTimer ftm(LLFastTimer::FTM_UPDATE_WLPARAM); 401 LLFastTimer ftm(LLFastTimer::FTM_UPDATE_WLPARAM);
401 402
402 // update the shaders and the menu 403 // update the shaders and the menu
403 propagateParameters(); 404 propagateParameters();
404 405
405 // sync menus if they exist 406 // sync menus if they exist
406 if(LLFloaterWater::isOpen()) 407 if(LLFloaterWater::isOpen())
407 { 408 {
408 LLFloaterWater::instance()->syncMenu(); 409 LLFloaterWater::instance()->syncMenu();
409 } 410 }
@@ -411,12 +412,12 @@ void LLWaterParamManager::update(LLViewerCamera * cam)
411 stop_glerror(); 412 stop_glerror();
412 413
413 // only do this if we're dealing with shaders 414 // only do this if we're dealing with shaders
414 if(gPipeline.canUseVertexShaders()) 415 if(gPipeline.canUseVertexShaders())
415 { 416 {
416 //transform water plane to eye space 417 //transform water plane to eye space
417 glh::vec3f norm(0.f, 0.f, 1.f); 418 glh::vec3f norm(0.f, 0.f, 1.f);
418 glh::vec3f p(0.f, 0.f, gAgent.getRegion()->getWaterHeight()+0.1f); 419 glh::vec3f p(0.f, 0.f, gAgent.getRegion()->getWaterHeight()+0.1f);
419 420
420 F32 modelView[16]; 421 F32 modelView[16];
421 for (U32 i = 0; i < 16; i++) 422 for (U32 i = 0; i < 16; i++)
422 { 423 {
@@ -434,13 +435,13 @@ void LLWaterParamManager::update(LLViewerCamera * cam)
434 mWaterPlane = LLVector4(enorm.v[0], enorm.v[1], enorm.v[2], -ep.dot(enorm)); 435 mWaterPlane = LLVector4(enorm.v[0], enorm.v[1], enorm.v[2], -ep.dot(enorm));
435 436
436 LLVector3 sunMoonDir; 437 LLVector3 sunMoonDir;
437 if (gSky.getSunDirection().mV[2] > NIGHTTIME_ELEVATION_COS) 438 if (gSky.getSunDirection().mV[2] > NIGHTTIME_ELEVATION_COS)
438 { 439 {
439 sunMoonDir = gSky.getSunDirection(); 440 sunMoonDir = gSky.getSunDirection();
440 } 441 }
441 else 442 else
442 { 443 {
443 sunMoonDir = gSky.getMoonDirection(); 444 sunMoonDir = gSky.getMoonDirection();
444 } 445 }
445 sunMoonDir.normVec(); 446 sunMoonDir.normVec();
446 mWaterFogKS = 1.f/llmax(sunMoonDir.mV[2], WATER_FOG_LIGHT_CLAMP); 447 mWaterFogKS = 1.f/llmax(sunMoonDir.mV[2], WATER_FOG_LIGHT_CLAMP);
@@ -510,8 +511,8 @@ bool LLWaterParamManager::addParamSet(const std::string& name, LLWaterParamSet&
510{ 511{
511 // add a new one if not one there already 512 // add a new one if not one there already
512 std::map<std::string, LLWaterParamSet>::iterator mIt = mParamList.find(name); 513 std::map<std::string, LLWaterParamSet>::iterator mIt = mParamList.find(name);
513 if(mIt == mParamList.end()) 514 if(mIt == mParamList.end())
514 { 515 {
515 mParamList[name] = param; 516 mParamList[name] = param;
516 return true; 517 return true;
517 } 518 }
@@ -538,7 +539,7 @@ bool LLWaterParamManager::getParamSet(const std::string& name, LLWaterParamSet&
538{ 539{
539 // find it and set it 540 // find it and set it
540 std::map<std::string, LLWaterParamSet>::iterator mIt = mParamList.find(name); 541 std::map<std::string, LLWaterParamSet>::iterator mIt = mParamList.find(name);
541 if(mIt != mParamList.end()) 542 if(mIt != mParamList.end())
542 { 543 {
543 param = mParamList[name]; 544 param = mParamList[name];
544 param.mName = name; 545 param.mName = name;
@@ -558,11 +559,11 @@ bool LLWaterParamManager::setParamSet(const std::string& name, LLWaterParamSet&
558bool LLWaterParamManager::setParamSet(const std::string& name, const LLSD & param) 559bool LLWaterParamManager::setParamSet(const std::string& name, const LLSD & param)
559{ 560{
560 // quick, non robust (we won't be working with files, but assets) check 561 // quick, non robust (we won't be working with files, but assets) check
561 if(!param.isMap()) 562 if(!param.isMap())
562 { 563 {
563 return false; 564 return false;
564 } 565 }
565 566
566 mParamList[name].setAll(param); 567 mParamList[name].setAll(param);
567 568
568 return true; 569 return true;
@@ -572,7 +573,7 @@ bool LLWaterParamManager::removeParamSet(const std::string& name, bool delete_fr
572{ 573{
573 // remove from param list 574 // remove from param list
574 std::map<std::string, LLWaterParamSet>::iterator mIt = mParamList.find(name); 575 std::map<std::string, LLWaterParamSet>::iterator mIt = mParamList.find(name);
575 if(mIt != mParamList.end()) 576 if(mIt != mParamList.end())
576 { 577 {
577 mParamList.erase(mIt); 578 mParamList.erase(mIt);
578 } 579 }
@@ -581,13 +582,13 @@ bool LLWaterParamManager::removeParamSet(const std::string& name, bool delete_fr
581 { 582 {
582 583
583 std::string path_name(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/water", "")); 584 std::string path_name(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/water", ""));
584 585
585 // use full curl escaped name 586 // use full curl escaped name
586 char * curl_str = curl_escape(name.c_str(), name.size()); 587 char * curl_str = curl_escape(name.c_str(), name.size());
587 std::string escaped_name(curl_str); 588 std::string escaped_name(curl_str);
588 curl_free(curl_str); 589 curl_free(curl_str);
589 curl_str = NULL; 590 curl_str = NULL;
590 591
591 gDirUtilp->deleteFilesInDir(path_name, escaped_name + ".xml"); 592 gDirUtilp->deleteFilesInDir(path_name, escaped_name + ".xml");
592 } 593 }
593 594
@@ -599,7 +600,7 @@ F32 LLWaterParamManager::getFogDensity(void)
599 bool err; 600 bool err;
600 601
601 F32 fogDensity = mCurParams.getFloat("waterFogDensity", err); 602 F32 fogDensity = mCurParams.getFloat("waterFogDensity", err);
602 603
603 // modify if we're underwater 604 // modify if we're underwater
604 const F32 water_height = gAgent.getRegion() ? gAgent.getRegion()->getWaterHeight() : 0.f; 605 const F32 water_height = gAgent.getRegion() ? gAgent.getRegion()->getWaterHeight() : 0.f;
605 F32 camera_height = gAgent.getCameraPositionAgent().mV[2]; 606 F32 camera_height = gAgent.getCameraPositionAgent().mV[2];
@@ -659,7 +660,7 @@ void LLWaterParamManager::loadWaterNotecard(LLVFS *vfs, const LLUUID& asset_id,
659 } 660 }
660 else 661 else
661 { 662 {
662 // We can do this because we know mCurParams 663 // We can do this because we know mCurParams
663 sInstance->mParamList[name].mInventoryID = inventory_id; 664 sInstance->mParamList[name].mInventoryID = inventory_id;
664 } 665 }
665 } 666 }
diff --git a/linden/indra/newview/llwaterparamset.cpp b/linden/indra/newview/llwaterparamset.cpp
index 4b2e426..5825a23 100644
--- a/linden/indra/newview/llwaterparamset.cpp
+++ b/linden/indra/newview/llwaterparamset.cpp
@@ -192,8 +192,6 @@ LLVector3 LLWaterParamSet::getVector3(const std::string& paramName, bool& error)
192LLVector2 LLWaterParamSet::getVector2(const std::string& paramName, bool& error) 192LLVector2 LLWaterParamSet::getVector2(const std::string& paramName, bool& error)
193{ 193{
194 // test to see if right type 194 // test to see if right type
195 int ttest;
196 ttest = mParamValues.size();
197 LLSD cur_val = mParamValues.get(paramName); 195 LLSD cur_val = mParamValues.get(paramName);
198 if (!cur_val.isArray() || cur_val.size() != 2) 196 if (!cur_val.isArray() || cur_val.size() != 2)
199 { 197 {
diff --git a/linden/indra/newview/llwaterparamset.h b/linden/indra/newview/llwaterparamset.h
index efbad31..09da42b 100644
--- a/linden/indra/newview/llwaterparamset.h
+++ b/linden/indra/newview/llwaterparamset.h
@@ -47,12 +47,14 @@ class LLWaterParamSet;
47class LLWaterParamSet 47class LLWaterParamSet
48{ 48{
49 friend class LLWaterParamManager; 49 friend class LLWaterParamManager;
50 friend class LLWLParamManager;
51 friend class LightShare;
50 52
51public: 53public:
52 std::string mName; 54 std::string mName;
53 LLUUID mInventoryID; 55 LLUUID mInventoryID;
54 56
55private: 57protected:
56 58
57 LLSD mParamValues; 59 LLSD mParamValues;
58 60
diff --git a/linden/indra/newview/llwlparammanager.cpp b/linden/indra/newview/llwlparammanager.cpp
index 8007cce..59de0ad 100644
--- a/linden/indra/newview/llwlparammanager.cpp
+++ b/linden/indra/newview/llwlparammanager.cpp
@@ -3,9 +3,9 @@
3 * @brief Implementation for the LLWLParamManager class. 3 * @brief Implementation for the LLWLParamManager class.
4 * 4 *
5 * $LicenseInfo:firstyear=2007&license=viewergpl$ 5 * $LicenseInfo:firstyear=2007&license=viewergpl$
6 * 6 *
7 * Copyright (c) 2007-2009, Linden Research, Inc. 7 * Copyright (c) 2007-2009, Linden Research, Inc.
8 * 8 *
9 * Second Life Viewer Source Code 9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab 10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0 11 * to you under the terms of the GNU General Public License, version 2.0
@@ -13,17 +13,17 @@
13 * ("Other License"), formally executed by you and Linden Lab. Terms of 13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or 14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 * 16 *
17 * There are special exceptions to the terms and conditions of the GPL as 17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception 18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or 19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at 20 * online at
21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception 21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
22 * 22 *
23 * By copying, modifying or distributing this software, you acknowledge 23 * By copying, modifying or distributing this software, you acknowledge
24 * that you have read and understood your obligations described above, 24 * that you have read and understood your obligations described above,
25 * and agree to abide by those obligations. 25 * and agree to abide by those obligations.
26 * 26 *
27 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO 27 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
28 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, 28 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
29 * COMPLETENESS OR PERFORMANCE. 29 * COMPLETENESS OR PERFORMANCE.
@@ -33,6 +33,8 @@
33#include "llviewerprecompiledheaders.h" 33#include "llviewerprecompiledheaders.h"
34 34
35#include "llwlparammanager.h" 35#include "llwlparammanager.h"
36#include "llwaterparammanager.h"
37#include "llettherebelight.h"
36 38
37#include "pipeline.h" 39#include "pipeline.h"
38#include "llsky.h" 40#include "llsky.h"
@@ -60,6 +62,7 @@
60#include "llfloaterdaycycle.h" 62#include "llfloaterdaycycle.h"
61#include "llfloaterenvsettings.h" 63#include "llfloaterenvsettings.h"
62 64
65#include "llworld.h"
63 66
64// For notecard loading 67// For notecard loading
65#include "llvfile.h" 68#include "llvfile.h"
@@ -124,9 +127,9 @@ void LLWLParamManager::loadPresets(const std::string& file_name)
124{ 127{
125 std::string path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/skies", "")); 128 std::string path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/skies", ""));
126 LL_DEBUGS2("AppInit", "ShaderLoading") << "Loading Default WindLight settings from " << path_name << LL_ENDL; 129 LL_DEBUGS2("AppInit", "ShaderLoading") << "Loading Default WindLight settings from " << path_name << LL_ENDL;
127 130
128 bool found = true; 131 bool found = true;
129 while(found) 132 while(found)
130 { 133 {
131 std::string name; 134 std::string name;
132 found = gDirUtilp->getNextFileInDir(path_name, "*.xml", name, false); 135 found = gDirUtilp->getNextFileInDir(path_name, "*.xml", name, false);
@@ -150,9 +153,9 @@ void LLWLParamManager::loadPresets(const std::string& file_name)
150 153
151 std::string path_name2(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/skies", "")); 154 std::string path_name2(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/skies", ""));
152 LL_INFOS2("AppInit", "Shaders") << "Loading User WindLight settings from " << path_name2 << LL_ENDL; 155 LL_INFOS2("AppInit", "Shaders") << "Loading User WindLight settings from " << path_name2 << LL_ENDL;
153 156
154 found = true; 157 found = true;
155 while(found) 158 while(found)
156 { 159 {
157 std::string name; 160 std::string name;
158 found = gDirUtilp->getNextFileInDir(path_name2, "*.xml", name, false); 161 found = gDirUtilp->getNextFileInDir(path_name2, "*.xml", name, false);
@@ -176,14 +179,14 @@ void LLWLParamManager::loadPresets(const std::string& file_name)
176bool LLWLParamManager::loadPresetXML(const std::string& name, std::istream& preset_stream, bool propagate /* = false */, bool check_if_real /* = false */) 179bool LLWLParamManager::loadPresetXML(const std::string& name, std::istream& preset_stream, bool propagate /* = false */, bool check_if_real /* = false */)
177{ 180{
178 LLSD paramsData(LLSD::emptyMap()); 181 LLSD paramsData(LLSD::emptyMap());
179 182
180 LLPointer<LLSDParser> parser = new LLSDXMLParser(); 183 LLPointer<LLSDParser> parser = new LLSDXMLParser();
181 184
182 if(parser->parse(preset_stream, paramsData, LLSDSerialize::SIZE_UNLIMITED) == LLSDParser::PARSE_FAILURE) 185 if(parser->parse(preset_stream, paramsData, LLSDSerialize::SIZE_UNLIMITED) == LLSDParser::PARSE_FAILURE)
183 { 186 {
184 return false; 187 return false;
185 } 188 }
186 189
187 if(check_if_real) 190 if(check_if_real)
188 { 191 {
189 static const char* expected_windlight_settings[] = { 192 static const char* expected_windlight_settings[] = {
@@ -220,13 +223,13 @@ bool LLWLParamManager::loadPresetXML(const std::string& name, std::istream& pres
220 } 223 }
221 } 224 }
222 } 225 }
223 226
224 std::map<std::string, LLWLParamSet>::iterator mIt = mParamList.find(name); 227 std::map<std::string, LLWLParamSet>::iterator mIt = mParamList.find(name);
225 if(mIt == mParamList.end()) 228 if(mIt == mParamList.end())
226 { 229 {
227 addParamSet(name, paramsData); 230 addParamSet(name, paramsData);
228 } 231 }
229 else 232 else
230 { 233 {
231 setParamSet(name, paramsData); 234 setParamSet(name, paramsData);
232 } 235 }
@@ -258,12 +261,12 @@ void LLWLParamManager::savePresets(const std::string & fileName)
258 //and not over the RO system wide version. 261 //and not over the RO system wide version.
259 262
260 LLSD paramsData(LLSD::emptyMap()); 263 LLSD paramsData(LLSD::emptyMap());
261 264
262 std::string pathName(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight", fileName)); 265 std::string pathName(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight", fileName));
263 266
264 for(std::map<std::string, LLWLParamSet>::iterator mIt = mParamList.begin(); 267 for(std::map<std::string, LLWLParamSet>::iterator mIt = mParamList.begin();
265 mIt != mParamList.end(); 268 mIt != mParamList.end();
266 ++mIt) 269 ++mIt)
267 { 270 {
268 paramsData[mIt->first] = mIt->second.getAll(); 271 paramsData[mIt->first] = mIt->second.getAll();
269 } 272 }
@@ -295,7 +298,7 @@ bool LLWLParamManager::savePresetToNotecard(const std::string & name)
295 // Write it to a notecard 298 // Write it to a notecard
296 LLNotecard notecard; 299 LLNotecard notecard;
297 notecard.setText(presetsXML.str()); 300 notecard.setText(presetsXML.str());
298 301
299 LLInventoryItem *item = gInventory.getItem(mParamList[name].mInventoryID); 302 LLInventoryItem *item = gInventory.getItem(mParamList[name].mInventoryID);
300 if(!item) 303 if(!item)
301 { 304 {
@@ -309,13 +312,13 @@ bool LLWLParamManager::savePresetToNotecard(const std::string & name)
309 LLAssetID asset_id; 312 LLAssetID asset_id;
310 tid.generate(); 313 tid.generate();
311 asset_id = tid.makeAssetID(gAgent.getSecureSessionID()); 314 asset_id = tid.makeAssetID(gAgent.getSecureSessionID());
312 315
313 LLVFile file(gVFS, asset_id, LLAssetType::AT_NOTECARD, LLVFile::APPEND); 316 LLVFile file(gVFS, asset_id, LLAssetType::AT_NOTECARD, LLVFile::APPEND);
314 317
315 std::ostringstream stream; 318 std::ostringstream stream;
316 notecard.exportStream(stream); 319 notecard.exportStream(stream);
317 std::string buffer = stream.str(); 320 std::string buffer = stream.str();
318 321
319 S32 size = buffer.length() + 1; 322 S32 size = buffer.length() + 1;
320 file.setMaxSize(size); 323 file.setMaxSize(size);
321 file.write((U8*)buffer.c_str(), size); 324 file.write((U8*)buffer.c_str(), size);
@@ -328,7 +331,7 @@ bool LLWLParamManager::savePresetToNotecard(const std::string & name)
328 LL_WARNS("WindLight") << "Stuff the legacy system." << LL_ENDL; 331 LL_WARNS("WindLight") << "Stuff the legacy system." << LL_ENDL;
329 return false; 332 return false;
330 } 333 }
331 334
332 propagateParameters(); 335 propagateParameters();
333 return true; 336 return true;
334} 337}
@@ -341,7 +344,7 @@ void LLWLParamManager::loadPreset(const std::string & name,bool propagate)
341 if(propagate) 344 if(propagate)
342 { 345 {
343 getParamSet(name, mCurParams); 346 getParamSet(name, mCurParams);
344 propagateParameters(); 347 LightShare::apply(NULL, NULL, &mCurParams, WL_SCOPE_USER);
345 } 348 }
346 return; 349 return;
347 } 350 }
@@ -355,7 +358,7 @@ void LLWLParamManager::loadPreset(const std::string & name,bool propagate)
355 escaped_filename += ".xml"; 358 escaped_filename += ".xml";
356 359
357 std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/skies", escaped_filename)); 360 std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/skies", escaped_filename));
358 LL_DEBUGS2("AppInit", "Shaders") << "Loading WindLight sky setting from " << pathName << LL_ENDL; 361 LL_DEBUGS2("AppInit", "Shaders") << "Loading WindLight sky setting from " << pathName << LL_ENDL;
359 362
360 llifstream presetsXML; 363 llifstream presetsXML;
361 presetsXML.open(pathName.c_str()); 364 presetsXML.open(pathName.c_str());
@@ -364,7 +367,7 @@ void LLWLParamManager::loadPreset(const std::string & name,bool propagate)
364 if(!presetsXML) 367 if(!presetsXML)
365 { 368 {
366 pathName=gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/skies", escaped_filename); 369 pathName=gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/skies", escaped_filename);
367 LL_DEBUGS2("AppInit", "Shaders")<< "Loading User WindLight sky setting from " << LL_ENDL; 370 LL_DEBUGS2("AppInit", "Shaders")<< "Loading User WindLight sky setting from " << LL_ENDL;
368 presetsXML.open(pathName.c_str()); 371 presetsXML.open(pathName.c_str());
369 } 372 }
370 373
@@ -372,22 +375,22 @@ void LLWLParamManager::loadPreset(const std::string & name,bool propagate)
372 { 375 {
373 loadPresetXML(name, presetsXML); 376 loadPresetXML(name, presetsXML);
374 presetsXML.close(); 377 presetsXML.close();
375 } 378 }
376 else 379 else
377 { 380 {
378 llwarns << "Can't find " << name << llendl; 381 llwarns << "Can't find " << name << llendl;
379 return; 382 return;
380 } 383 }
381 384
382 385
383 if(propagate) 386 if(propagate)
384 { 387 {
385 getParamSet(name, mCurParams); 388 getParamSet(name, mCurParams);
386 propagateParameters(); 389 LightShare::apply(NULL, NULL, &mCurParams, WL_SCOPE_USER);
387 } 390 }
388 391
389 notifyObservers(); 392 notifyObservers();
390} 393}
391 394
392void LLWLParamManager::savePreset(const std::string & name) 395void LLWLParamManager::savePreset(const std::string & name)
393{ 396{
@@ -427,7 +430,7 @@ void LLWLParamManager::updateShaderUniforms(LLGLSLShader * shader)
427 { 430 {
428 shader->uniform4fv(LLViewerShaderMgr::LIGHTNORM, 1, mRotatedLightDir.mV); 431 shader->uniform4fv(LLViewerShaderMgr::LIGHTNORM, 1, mRotatedLightDir.mV);
429 shader->uniform3fv("camPosLocal", 1, LLViewerCamera::getInstance()->getOrigin().mV); 432 shader->uniform3fv("camPosLocal", 1, LLViewerCamera::getInstance()->getOrigin().mV);
430 } 433 }
431 434
432 else if (shader->mShaderGroup == LLGLSLShader::SG_SKY) 435 else if (shader->mShaderGroup == LLGLSLShader::SG_SKY)
433 { 436 {
@@ -435,13 +438,13 @@ void LLWLParamManager::updateShaderUniforms(LLGLSLShader * shader)
435 } 438 }
436 439
437 shader->uniform1f("scene_light_strength", mSceneLightStrength); 440 shader->uniform1f("scene_light_strength", mSceneLightStrength);
438 441
439} 442}
440 443
441void LLWLParamManager::propagateParameters(void) 444void LLWLParamManager::propagateParameters(void)
442{ 445{
443 LLFastTimer ftm(LLFastTimer::FTM_UPDATE_WLPARAM); 446 LLFastTimer ftm(LLFastTimer::FTM_UPDATE_WLPARAM);
444 447
445 LLVector4 sunDir; 448 LLVector4 sunDir;
446 LLVector4 moonDir; 449 LLVector4 moonDir;
447 450
@@ -491,7 +494,7 @@ void LLWLParamManager::propagateParameters(void)
491 // bind the variables for all shaders only if we're using WindLight 494 // bind the variables for all shaders only if we're using WindLight
492 LLViewerShaderMgr::shader_iter shaders_iter, end_shaders; 495 LLViewerShaderMgr::shader_iter shaders_iter, end_shaders;
493 end_shaders = LLViewerShaderMgr::instance()->endShaders(); 496 end_shaders = LLViewerShaderMgr::instance()->endShaders();
494 for(shaders_iter = LLViewerShaderMgr::instance()->beginShaders(); shaders_iter != end_shaders; ++shaders_iter) 497 for(shaders_iter = LLViewerShaderMgr::instance()->beginShaders(); shaders_iter != end_shaders; ++shaders_iter)
495 { 498 {
496 if (shaders_iter->mProgramObject != 0 499 if (shaders_iter->mProgramObject != 0
497 && (gPipeline.canUseWindLightShaders() 500 && (gPipeline.canUseWindLightShaders()
@@ -512,29 +515,29 @@ void LLWLParamManager::propagateParameters(void)
512void LLWLParamManager::update(LLViewerCamera * cam) 515void LLWLParamManager::update(LLViewerCamera * cam)
513{ 516{
514 LLFastTimer ftm(LLFastTimer::FTM_UPDATE_WLPARAM); 517 LLFastTimer ftm(LLFastTimer::FTM_UPDATE_WLPARAM);
515 518
516 // update clouds, sun, and general 519 // update clouds, sun, and general
517 mCurParams.updateCloudScrolling(); 520 mCurParams.updateCloudScrolling();
518 521
519 // update only if running 522 // update only if running
520 if(mAnimator.mIsRunning) 523 if(mAnimator.mIsRunning)
521 { 524 {
522 mAnimator.update(mCurParams); 525 mAnimator.update(mCurParams);
523 } 526 }
524 527
525 // update the shaders and the menu 528 // update the shaders and the menu
526 propagateParameters(); 529 propagateParameters();
527 530
528 // sync menus if they exist 531 // sync menus if they exist
529 if(LLFloaterWindLight::isOpen()) 532 if(LLFloaterWindLight::isOpen())
530 { 533 {
531 LLFloaterWindLight::instance()->syncMenu(); 534 LLFloaterWindLight::instance()->syncMenu();
532 } 535 }
533 if(LLFloaterDayCycle::isOpen()) 536 if(LLFloaterDayCycle::isOpen())
534 { 537 {
535 LLFloaterDayCycle::instance()->syncMenu(); 538 LLFloaterDayCycle::instance()->syncMenu();
536 } 539 }
537 if(LLFloaterEnvSettings::isOpen()) 540 if(LLFloaterEnvSettings::isOpen())
538 { 541 {
539 LLFloaterEnvSettings::instance()->syncMenu(); 542 LLFloaterEnvSettings::instance()->syncMenu();
540 } 543 }
@@ -547,8 +550,8 @@ void LLWLParamManager::update(LLViewerCamera * cam)
547 // executed some of the time. For example for water shaders only. 550 // executed some of the time. For example for water shaders only.
548 { 551 {
549 F32 camYawDelta = mSunDeltaYaw * DEG_TO_RAD; 552 F32 camYawDelta = mSunDeltaYaw * DEG_TO_RAD;
550 553
551 LLVector3 lightNorm3(mLightDir); 554 LLVector3 lightNorm3(mLightDir);
552 lightNorm3 *= LLQuaternion(-(camYaw + camYawDelta), LLVector3(0.f, 1.f, 0.f)); 555 lightNorm3 *= LLQuaternion(-(camYaw + camYawDelta), LLVector3(0.f, 1.f, 0.f));
553 mRotatedLightDir = LLVector4(lightNorm3, 0.f); 556 mRotatedLightDir = LLVector4(lightNorm3, 0.f);
554 557
@@ -621,7 +624,7 @@ void LLWLParamManager::cleanupClass()
621 624
622void LLWLParamManager::resetAnimator(F32 curTime, bool run) 625void LLWLParamManager::resetAnimator(F32 curTime, bool run)
623{ 626{
624 mAnimator.setTrack(mDay.mTimeMap, mDay.mDayRate, 627 mAnimator.setTrack(mDay.mTimeMap, mDay.mDayRate,
625 curTime, run); 628 curTime, run);
626 629
627 return; 630 return;
@@ -630,8 +633,8 @@ bool LLWLParamManager::addParamSet(const std::string& name, LLWLParamSet& param)
630{ 633{
631 // add a new one if not one there already 634 // add a new one if not one there already
632 std::map<std::string, LLWLParamSet>::iterator mIt = mParamList.find(name); 635 std::map<std::string, LLWLParamSet>::iterator mIt = mParamList.find(name);
633 if(mIt == mParamList.end()) 636 if(mIt == mParamList.end())
634 { 637 {
635 mParamList[name] = param; 638 mParamList[name] = param;
636 return true; 639 return true;
637 } 640 }
@@ -658,7 +661,7 @@ bool LLWLParamManager::getParamSet(const std::string& name, LLWLParamSet& param)
658{ 661{
659 // find it and set it 662 // find it and set it
660 std::map<std::string, LLWLParamSet>::iterator mIt = mParamList.find(name); 663 std::map<std::string, LLWLParamSet>::iterator mIt = mParamList.find(name);
661 if(mIt != mParamList.end()) 664 if(mIt != mParamList.end())
662 { 665 {
663 param = mParamList[name]; 666 param = mParamList[name];
664 param.mName = name; 667 param.mName = name;
@@ -678,11 +681,11 @@ bool LLWLParamManager::setParamSet(const std::string& name, LLWLParamSet& param)
678bool LLWLParamManager::setParamSet(const std::string& name, const LLSD & param) 681bool LLWLParamManager::setParamSet(const std::string& name, const LLSD & param)
679{ 682{
680 // quick, non robust (we won't be working with files, but assets) check 683 // quick, non robust (we won't be working with files, but assets) check
681 if(!param.isMap()) 684 if(!param.isMap())
682 { 685 {
683 return false; 686 return false;
684 } 687 }
685 688
686 mParamList[name].setAll(param); 689 mParamList[name].setAll(param);
687 690
688 return true; 691 return true;
@@ -692,7 +695,7 @@ bool LLWLParamManager::removeParamSet(const std::string& name, bool delete_from_
692{ 695{
693 // remove from param list 696 // remove from param list
694 std::map<std::string, LLWLParamSet>::iterator mIt = mParamList.find(name); 697 std::map<std::string, LLWLParamSet>::iterator mIt = mParamList.find(name);
695 if(mIt != mParamList.end()) 698 if(mIt != mParamList.end())
696 { 699 {
697 mParamList.erase(mIt); 700 mParamList.erase(mIt);
698 } 701 }
@@ -701,11 +704,11 @@ bool LLWLParamManager::removeParamSet(const std::string& name, bool delete_from_
701 704
702 // remove all references 705 // remove all references
703 bool stat = true; 706 bool stat = true;
704 do 707 do
705 { 708 {
706 // get it 709 // get it
707 stat = mDay.getKey(name, key); 710 stat = mDay.getKey(name, key);
708 if(stat == false) 711 if(stat == false)
709 { 712 {
710 break; 713 break;
711 } 714 }
@@ -714,17 +717,17 @@ bool LLWLParamManager::removeParamSet(const std::string& name, bool delete_from_
714 stat = mDay.removeKey(key); 717 stat = mDay.removeKey(key);
715 718
716 } while(stat == true); 719 } while(stat == true);
717 720
718 if(delete_from_disk) 721 if(delete_from_disk)
719 { 722 {
720 std::string path_name(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/skies", "")); 723 std::string path_name(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/skies", ""));
721 724
722 // use full curl escaped name 725 // use full curl escaped name
723 char * curl_str = curl_escape(name.c_str(), name.size()); 726 char * curl_str = curl_escape(name.c_str(), name.size());
724 std::string escaped_name(curl_str); 727 std::string escaped_name(curl_str);
725 curl_free(curl_str); 728 curl_free(curl_str);
726 curl_str = NULL; 729 curl_str = NULL;
727 730
728 gDirUtilp->deleteFilesInDir(path_name, escaped_name + ".xml"); 731 gDirUtilp->deleteFilesInDir(path_name, escaped_name + ".xml");
729 } 732 }
730 733
@@ -797,7 +800,7 @@ void LLWLParamManager::loadWindlightNotecard(LLVFS *vfs, const LLUUID& asset_id,
797 } 800 }
798 else 801 else
799 { 802 {
800 // We can do this because we know mCurParams 803 // We can do this because we know mCurParams
801 sInstance->mParamList[name].mInventoryID = inventory_id; 804 sInstance->mParamList[name].mInventoryID = inventory_id;
802 } 805 }
803 } 806 }
@@ -836,3 +839,21 @@ void LLWLParamManager::notifyObservers()
836 observer->changed(); 839 observer->changed();
837 } 840 }
838} 841}
842
843// static
844bool LLWLParamManager::isWaterSettingsNotecard(std::string name)
845{
846 return (name.length() > 2 && name.compare(name.length() - 3, 3, ".ww") == 0);
847}
848
849// static
850bool LLWLParamManager::isSkySettingsNotecard(std::string name)
851{
852 return (name.length() > 2 && name.compare(name.length() - 3, 3, ".wl") == 0);
853}
854
855// static
856bool LLWLParamManager::isSettingsNotecard(std::string name)
857{
858 return (isSkySettingsNotecard(name) || isWaterSettingsNotecard(name));
859}
diff --git a/linden/indra/newview/llwlparammanager.h b/linden/indra/newview/llwlparammanager.h
index fc1127e..034b2e6 100644
--- a/linden/indra/newview/llwlparammanager.h
+++ b/linden/indra/newview/llwlparammanager.h
@@ -3,9 +3,9 @@
3 * @brief Implementation for the LLWLParamManager class. 3 * @brief Implementation for the LLWLParamManager class.
4 * 4 *
5 * $LicenseInfo:firstyear=2007&license=viewergpl$ 5 * $LicenseInfo:firstyear=2007&license=viewergpl$
6 * 6 *
7 * Copyright (c) 2007-2009, Linden Research, Inc. 7 * Copyright (c) 2007-2009, Linden Research, Inc.
8 * 8 *
9 * Second Life Viewer Source Code 9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab 10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0 11 * to you under the terms of the GNU General Public License, version 2.0
@@ -13,17 +13,17 @@
13 * ("Other License"), formally executed by you and Linden Lab. Terms of 13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or 14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 * 16 *
17 * There are special exceptions to the terms and conditions of the GPL as 17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception 18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or 19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at 20 * online at
21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception 21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
22 * 22 *
23 * By copying, modifying or distributing this software, you acknowledge 23 * By copying, modifying or distributing this software, you acknowledge
24 * that you have read and understood your obligations described above, 24 * that you have read and understood your obligations described above,
25 * and agree to abide by those obligations. 25 * and agree to abide by those obligations.
26 * 26 *
27 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO 27 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
28 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, 28 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
29 * COMPLETENESS OR PERFORMANCE. 29 * COMPLETENESS OR PERFORMANCE.
@@ -36,6 +36,7 @@
36#include <vector> 36#include <vector>
37#include <map> 37#include <map>
38#include "llwlparamset.h" 38#include "llwlparamset.h"
39#include "llwaterparamset.h"
39#include "llwlanimator.h" 40#include "llwlanimator.h"
40#include "llwldaycycle.h" 41#include "llwldaycycle.h"
41#include "llviewercamera.h" 42#include "llviewercamera.h"
@@ -51,10 +52,10 @@ public:
51 virtual ~LLWLPresetsObserver() { }; 52 virtual ~LLWLPresetsObserver() { };
52 virtual void changed() = 0; 53 virtual void changed() = 0;
53}; 54};
54 55
55// color control 56// color control
56struct WLColorControl { 57struct WLColorControl {
57 58
58 F32 r, g, b, i; /// the values 59 F32 r, g, b, i; /// the values
59 std::string mName; /// name to use to dereference params 60 std::string mName; /// name to use to dereference params
60 std::string mSliderName; /// name of the slider in menu 61 std::string mSliderName; /// name of the slider in menu
@@ -88,7 +89,7 @@ struct WLColorControl {
88 r = val.mV[0]; 89 r = val.mV[0];
89 g = val.mV[1]; 90 g = val.mV[1];
90 b = val.mV[2]; 91 b = val.mV[2];
91 i = val.mV[3]; 92 i = val.mV[3];
92 return *this; 93 return *this;
93 } 94 }
94 95
@@ -131,6 +132,7 @@ struct WLFloatControl {
131 } 132 }
132}; 133};
133 134
135
134/// WindLight parameter manager class - what controls all the wind light shaders 136/// WindLight parameter manager class - what controls all the wind light shaders
135class LLWLParamManager 137class LLWLParamManager
136{ 138{
@@ -151,19 +153,19 @@ public:
151 /// load an individual preset into the sky from an LLSD stream 153 /// load an individual preset into the sky from an LLSD stream
152 /// Returns whether the stream was actually reasonable XML to load from. 154 /// Returns whether the stream was actually reasonable XML to load from.
153 bool loadPresetXML(const std::string& name, std::istream& preset_stream, bool propogate=false, bool check_if_real=false); 155 bool loadPresetXML(const std::string& name, std::istream& preset_stream, bool propogate=false, bool check_if_real=false);
154 156
155 /// Load an individual preset from a notecard. 157 /// Load an individual preset from a notecard.
156 void loadPresetNotecard(const std::string& name, const LLUUID& asset_id, const LLUUID& inv_id); 158 void loadPresetNotecard(const std::string& name, const LLUUID& asset_id, const LLUUID& inv_id);
157 159
158 /// save the parameter presets to file 160 /// save the parameter presets to file
159 void savePreset(const std::string & name); 161 void savePreset(const std::string & name);
160 162
161 /// save the parameter presets to file 163 /// save the parameter presets to file
162 bool savePresetToNotecard(const std::string & name); 164 bool savePresetToNotecard(const std::string & name);
163 165
164 /// Set shader uniforms dirty, so they'll update automatically. 166 /// Set shader uniforms dirty, so they'll update automatically.
165 void propagateParameters(void); 167 void propagateParameters(void);
166 168
167 /// Update shader uniforms that have changed. 169 /// Update shader uniforms that have changed.
168 void updateShaderUniforms(LLGLSLShader * shader); 170 void updateShaderUniforms(LLGLSLShader * shader);
169 171
@@ -181,7 +183,7 @@ public:
181 183
182 // get where the light is pointing 184 // get where the light is pointing
183 inline LLVector4 getRotatedLightDir(void) const; 185 inline LLVector4 getRotatedLightDir(void) const;
184 186
185 /// get the dome's offset 187 /// get the dome's offset
186 inline F32 getDomeOffset(void) const; 188 inline F32 getDomeOffset(void) const;
187 189
@@ -193,7 +195,7 @@ public:
193 195
194 // Cleanup of global data that's only inited once per class. 196 // Cleanup of global data that's only inited once per class.
195 static void cleanupClass(); 197 static void cleanupClass();
196 198
197 /// add a param to the list 199 /// add a param to the list
198 bool addParamSet(const std::string& name, LLWLParamSet& param); 200 bool addParamSet(const std::string& name, LLWLParamSet& param);
199 201
@@ -205,9 +207,9 @@ public:
205 207
206 /// set the param in the list with a new param 208 /// set the param in the list with a new param
207 bool setParamSet(const std::string& name, LLWLParamSet& param); 209 bool setParamSet(const std::string& name, LLWLParamSet& param);
208 210
209 /// set the param in the list with a new param 211 /// set the param in the list with a new param
210 bool setParamSet(const std::string& name, LLSD const & param); 212 bool setParamSet(const std::string& name, LLSD const & param);
211 213
212 /// gets rid of a parameter and any references to it 214 /// gets rid of a parameter and any references to it
213 /// returns true if successful 215 /// returns true if successful
@@ -223,6 +225,11 @@ public:
223 225
224 void SetMixTime(LLWLParamSet* mixSet, F32 mixTime); 226 void SetMixTime(LLWLParamSet* mixSet, F32 mixTime);
225 227
228 // Notecard settings checkers.
229 static bool isWaterSettingsNotecard(std::string name);
230 static bool isSkySettingsNotecard(std::string name);
231 static bool isSettingsNotecard(std::string name);
232
226public: 233public:
227 234
228 // helper variables 235 // helper variables
@@ -249,7 +256,7 @@ public:
249 WLFloatControl mWLGamma; 256 WLFloatControl mWLGamma;
250 257
251 F32 mSceneLightStrength; 258 F32 mSceneLightStrength;
252 259
253 /// Atmospherics 260 /// Atmospherics
254 WLColorControl mBlueHorizon; 261 WLColorControl mBlueHorizon;
255 WLColorControl mHazeDensity; 262 WLColorControl mHazeDensity;
@@ -275,10 +282,10 @@ public:
275 /// sky dome 282 /// sky dome
276 F32 mDomeOffset; 283 F32 mDomeOffset;
277 F32 mDomeRadius; 284 F32 mDomeRadius;
278 285
279 // list of all the parameters, listed by name 286 // list of all the parameters, listed by name
280 std::map<std::string, LLWLParamSet> mParamList; 287 std::map<std::string, LLWLParamSet> mParamList;
281 288
282private: 289private:
283 // our parameter manager singleton instance 290 // our parameter manager singleton instance
284 static LLWLParamManager * sInstance; 291 static LLWLParamManager * sInstance;
@@ -287,11 +294,10 @@ private:
287 LLWLParamSet* sMixSet; 294 LLWLParamSet* sMixSet;
288 F32 sMixTime; 295 F32 sMixTime;
289 F32 sMixCount; 296 F32 sMixCount;
290 297
291 static std::vector<LLWLPresetsObserver*> sObservers; 298 static std::vector<LLWLPresetsObserver*> sObservers;
292 299
293 static void loadWindlightNotecard(LLVFS *vfs, const LLUUID& asset_id, LLAssetType::EType asset_type, void *user_data, S32 status, LLExtStat ext_status); 300 static void loadWindlightNotecard(LLVFS *vfs, const LLUUID& asset_id, LLAssetType::EType asset_type, void *user_data, S32 status, LLExtStat ext_status);
294
295}; 301};
296 302
297inline F32 LLWLParamManager::getDomeOffset(void) const 303inline F32 LLWLParamManager::getDomeOffset(void) const
diff --git a/linden/indra/newview/llwlparamset.h b/linden/indra/newview/llwlparamset.h
index 038490d..ce01f84 100644
--- a/linden/indra/newview/llwlparamset.h
+++ b/linden/indra/newview/llwlparamset.h
@@ -3,9 +3,9 @@
3 * @brief Interface for the LLWLParamSet class. 3 * @brief Interface for the LLWLParamSet class.
4 * 4 *
5 * $LicenseInfo:firstyear=2005&license=viewergpl$ 5 * $LicenseInfo:firstyear=2005&license=viewergpl$
6 * 6 *
7 * Copyright (c) 2005-2009, Linden Research, Inc. 7 * Copyright (c) 2005-2009, Linden Research, Inc.
8 * 8 *
9 * Second Life Viewer Source Code 9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab 10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0 11 * to you under the terms of the GNU General Public License, version 2.0
@@ -13,17 +13,17 @@
13 * ("Other License"), formally executed by you and Linden Lab. Terms of 13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or 14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 * 16 *
17 * There are special exceptions to the terms and conditions of the GPL as 17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception 18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or 19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at 20 * online at
21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception 21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
22 * 22 *
23 * By copying, modifying or distributing this software, you acknowledge 23 * By copying, modifying or distributing this software, you acknowledge
24 * that you have read and understood your obligations described above, 24 * that you have read and understood your obligations described above,
25 * and agree to abide by those obligations. 25 * and agree to abide by those obligations.
26 * 26 *
27 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO 27 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
28 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, 28 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
29 * COMPLETENESS OR PERFORMANCE. 29 * COMPLETENESS OR PERFORMANCE.
@@ -46,16 +46,16 @@ class LLWLParamSet;
46/// A class representing a set of parameter values for the WindLight shaders. 46/// A class representing a set of parameter values for the WindLight shaders.
47class LLWLParamSet { 47class LLWLParamSet {
48 48
49 friend class LLWLParamManager; 49 friend class LightShare;
50 50
51public: 51public:
52 std::string mName; 52 std::string mName;
53 LLUUID mInventoryID; 53 LLUUID mInventoryID;
54 54
55private: 55protected:
56 56
57 LLSD mParamValues; 57 LLSD mParamValues;
58 58
59 float mCloudScrollXOffset, mCloudScrollYOffset; 59 float mCloudScrollXOffset, mCloudScrollYOffset;
60 60
61public: 61public:
@@ -67,10 +67,10 @@ public:
67 67
68 /// set the total llsd 68 /// set the total llsd
69 void setAll(const LLSD& val); 69 void setAll(const LLSD& val);
70 70
71 /// get the total llsd 71 /// get the total llsd
72 const LLSD& getAll(); 72 const LLSD& getAll();
73 73
74 74
75 /// Set a float parameter. 75 /// Set a float parameter.
76 /// \param paramName The name of the parameter to set. 76 /// \param paramName The name of the parameter to set.
@@ -120,61 +120,61 @@ public:
120 120
121 /// Get an integer parameter 121 /// Get an integer parameter
122 /// \param paramName The name of the parameter to set. 122 /// \param paramName The name of the parameter to set.
123 /// \param error A flag to set if it's not the proper return type 123 /// \param error A flag to set if it's not the proper return type
124 F32 getFloat(const std::string& paramName, bool& error); 124 F32 getFloat(const std::string& paramName, bool& error);
125 125
126 126
127 // specific getters and setters 127 // specific getters and setters
128 128
129 129
130 /// set the star's brightness 130 /// set the star's brightness
131 /// \param val brightness value 131 /// \param val brightness value
132 void setStarBrightness(F32 val); 132 void setStarBrightness(F32 val);
133 133
134 /// get the star brightness value; 134 /// get the star brightness value;
135 F32 getStarBrightness(); 135 F32 getStarBrightness();
136 136
137 void setSunAngle(F32 val); 137 void setSunAngle(F32 val);
138 F32 getSunAngle(); 138 F32 getSunAngle();
139 139
140 void setEastAngle(F32 val); 140 void setEastAngle(F32 val);
141 F32 getEastAngle(); 141 F32 getEastAngle();
142 142
143 143
144 144
145 /// set the cloud scroll x enable value 145 /// set the cloud scroll x enable value
146 /// \param val scroll x value 146 /// \param val scroll x value
147 void setEnableCloudScrollX(bool val); 147 void setEnableCloudScrollX(bool val);
148 148
149 /// get the scroll x enable value; 149 /// get the scroll x enable value;
150 bool getEnableCloudScrollX(); 150 bool getEnableCloudScrollX();
151 151
152 /// set the star's brightness 152 /// set the star's brightness
153 /// \param val scroll y bool value 153 /// \param val scroll y bool value
154 void setEnableCloudScrollY(bool val); 154 void setEnableCloudScrollY(bool val);
155 155
156 /// get the scroll enable y value; 156 /// get the scroll enable y value;
157 bool getEnableCloudScrollY(); 157 bool getEnableCloudScrollY();
158 158
159 /// set the cloud scroll x enable value 159 /// set the cloud scroll x enable value
160 /// \param val scroll x value 160 /// \param val scroll x value
161 void setCloudScrollX(F32 val); 161 void setCloudScrollX(F32 val);
162 162
163 /// get the scroll x enable value; 163 /// get the scroll x enable value;
164 F32 getCloudScrollX(); 164 F32 getCloudScrollX();
165 165
166 /// set the star's brightness 166 /// set the star's brightness
167 /// \param val scroll y bool value 167 /// \param val scroll y bool value
168 void setCloudScrollY(F32 val); 168 void setCloudScrollY(F32 val);
169 169
170 /// get the scroll enable y value; 170 /// get the scroll enable y value;
171 F32 getCloudScrollY(); 171 F32 getCloudScrollY();
172 172
173 /// interpolate two parameter sets 173 /// interpolate two parameter sets
174 /// \param src The parameter set to start with 174 /// \param src The parameter set to start with
175 /// \param dest The parameter set to end with 175 /// \param dest The parameter set to end with
176 /// \param weight The amount to interpolate 176 /// \param weight The amount to interpolate
177 void mix(LLWLParamSet& src, LLWLParamSet& dest, 177 void mix(LLWLParamSet& src, LLWLParamSet& dest,
178 F32 weight); 178 F32 weight);
179 179
180 void updateCloudScrolling(void); 180 void updateCloudScrolling(void);
diff --git a/linden/indra/newview/llworldmapview.cpp b/linden/indra/newview/llworldmapview.cpp
index d7a6838..b2cab52 100644
--- a/linden/indra/newview/llworldmapview.cpp
+++ b/linden/indra/newview/llworldmapview.cpp
@@ -1192,8 +1192,6 @@ void LLWorldMapView::drawTracking(const LLVector3d& pos_global, const LLColor4&
1192 S32 text_x = x; 1192 S32 text_x = x;
1193 S32 text_y = (S32)(y - sTrackCircleImage->getHeight()/2 - font->getLineHeight()); 1193 S32 text_y = (S32)(y - sTrackCircleImage->getHeight()/2 - font->getLineHeight());
1194 1194
1195 BOOL is_in_window = true;
1196
1197 if( x < 0 1195 if( x < 0
1198 || y < 0 1196 || y < 0
1199 || x >= getRect().getWidth() 1197 || x >= getRect().getWidth()
@@ -1206,7 +1204,6 @@ void LLWorldMapView::drawTracking(const LLVector3d& pos_global, const LLColor4&
1206 text_x = sTrackingArrowX; 1204 text_x = sTrackingArrowX;
1207 text_y = sTrackingArrowY; 1205 text_y = sTrackingArrowY;
1208 } 1206 }
1209 is_in_window = false;
1210 } 1207 }
1211 else if (LLTracker::getTrackingStatus() == LLTracker::TRACKING_LOCATION && 1208 else if (LLTracker::getTrackingStatus() == LLTracker::TRACKING_LOCATION &&
1212 LLTracker::getTrackedLocationType() != LLTracker::LOCATION_NOTHING) 1209 LLTracker::getTrackedLocationType() != LLTracker::LOCATION_NOTHING)
diff --git a/linden/indra/newview/packaging/mac/English.lproj/InfoPlist.strings b/linden/indra/newview/packaging/mac/English.lproj/InfoPlist.strings
index 1ebe727..5b4a12e 100644
--- a/linden/indra/newview/packaging/mac/English.lproj/InfoPlist.strings
+++ b/linden/indra/newview/packaging/mac/English.lproj/InfoPlist.strings
@@ -1,5 +1,5 @@
1/* Localized versions of Info.plist keys */ 1/* Localized versions of Info.plist keys */
2 2
3CFBundleName = "Imprudence"; 3CFBundleName = "meta-impy";
4CFBundleShortVersionString = "Imprudence 1.4.0 beta 1"; 4CFBundleShortVersionString = "meta-impy 1.4.0.3 exp 1";
5CFBundleGetInfoString = "Imprudence 1.4.0 beta 1"; 5CFBundleGetInfoString = "meta-impy 1.4.0.3 exp 1";
diff --git a/linden/indra/newview/panelradar.cpp b/linden/indra/newview/panelradar.cpp
index c94c0d1..ad6efc2 100644
--- a/linden/indra/newview/panelradar.cpp
+++ b/linden/indra/newview/panelradar.cpp
@@ -408,7 +408,6 @@ void PanelRadar::updateButtonStates()
408 static bool enable_unmute = false; 408 static bool enable_unmute = false;
409 static bool enable_track = false; 409 static bool enable_track = false;
410 static bool enable_estate = false; 410 static bool enable_estate = false;
411 static bool enable_friend = false;
412 static bool enable_cam = false; 411 static bool enable_cam = false;
413 412
414 if (mRadarTabs->getCurrentPanelIndex() == 0) // Avatar tab 413 if (mRadarTabs->getCurrentPanelIndex() == 0) // Avatar tab
@@ -426,7 +425,6 @@ void PanelRadar::updateButtonStates()
426 enable_estate = isKickable(mSelectedAvatar); 425 enable_estate = isKickable(mSelectedAvatar);
427 enable_unmute = LLMuteList::getInstance()->isMuted(mSelectedAvatar); 426 enable_unmute = LLMuteList::getInstance()->isMuted(mSelectedAvatar);
428 enable_track = gAgent.isGodlike() || is_agent_mappable(mSelectedAvatar); 427 enable_track = gAgent.isGodlike() || is_agent_mappable(mSelectedAvatar);
429 enable_friend = !is_agent_friend(mSelectedAvatar);
430 enable_cam = mSelectedDistance >= 0 && mSelectedDistance <= gSavedSettings.getF32("NearMeRange"); 428 enable_cam = mSelectedDistance >= 0 && mSelectedDistance <= gSavedSettings.getF32("NearMeRange");
431 } 429 }
432 else 430 else
@@ -436,7 +434,6 @@ void PanelRadar::updateButtonStates()
436 enable_estate = false; 434 enable_estate = false;
437 enable_unmute = false; 435 enable_unmute = false;
438 enable_track = false; 436 enable_track = false;
439 enable_friend = false;
440 enable_cam = false; 437 enable_cam = false;
441 } 438 }
442 439
diff --git a/linden/indra/newview/pipeline.cpp b/linden/indra/newview/pipeline.cpp
index e2d9f85..a13a605 100644
--- a/linden/indra/newview/pipeline.cpp
+++ b/linden/indra/newview/pipeline.cpp
@@ -232,6 +232,7 @@ BOOL LLPipeline::sPickAvatar = TRUE;
232BOOL LLPipeline::sDynamicLOD = TRUE; 232BOOL LLPipeline::sDynamicLOD = TRUE;
233BOOL LLPipeline::sShowHUDAttachments = TRUE; 233BOOL LLPipeline::sShowHUDAttachments = TRUE;
234BOOL LLPipeline::sRenderPhysicalBeacons = TRUE; 234BOOL LLPipeline::sRenderPhysicalBeacons = TRUE;
235BOOL LLPipeline::sRenderMOAPBeacons = FALSE;
235BOOL LLPipeline::sRenderScriptedBeacons = FALSE; 236BOOL LLPipeline::sRenderScriptedBeacons = FALSE;
236BOOL LLPipeline::sRenderScriptedTouchBeacons = TRUE; 237BOOL LLPipeline::sRenderScriptedTouchBeacons = TRUE;
237BOOL LLPipeline::sRenderParticleBeacons = FALSE; 238BOOL LLPipeline::sRenderParticleBeacons = FALSE;
@@ -2167,6 +2168,43 @@ void renderPhysicalBeacons(LLDrawable* drawablep)
2167 } 2168 }
2168} 2169}
2169 2170
2171void renderMOAPBeacons(LLDrawable* drawablep)
2172{
2173 LLViewerObject *vobj = drawablep->getVObj();
2174
2175 if(!vobj || vobj->isAvatar())
2176 return;
2177
2178 BOOL beacon=FALSE;
2179 U8 tecount=vobj->getNumTEs();
2180 for(int x=0;x<tecount;x++)
2181 {
2182 if(vobj->getTE(x)->hasMedia())
2183 {
2184 beacon=TRUE;
2185 break;
2186 }
2187 }
2188 if(beacon==TRUE)
2189 {
2190 if (gPipeline.sRenderBeacons)
2191 {
2192 gObjectList.addDebugBeacon(vobj->getPositionAgent(), "", LLColor4(0.f, 1.f, 0.f, 0.5f), LLColor4(1.f, 1.f, 1.f, 0.5f), gSavedSettings.getS32("DebugBeaconLineWidth"));
2193 }
2194
2195 if (gPipeline.sRenderHighlight)
2196 {
2197 S32 face_id;
2198 S32 count = drawablep->getNumFaces();
2199 for (face_id = 0; face_id < count; face_id++)
2200 {
2201 gPipeline.mHighlightFaces.push_back(drawablep->getFace(face_id) );
2202 }
2203 }
2204 }
2205}
2206
2207
2170void renderParticleBeacons(LLDrawable* drawablep) 2208void renderParticleBeacons(LLDrawable* drawablep)
2171{ 2209{
2172 // Look for attachments, objects, etc. 2210 // Look for attachments, objects, etc.
@@ -2249,18 +2287,12 @@ void LLPipeline::postSort(LLCamera& camera)
2249 const S32 bin_count = 1024*8; 2287 const S32 bin_count = 1024*8;
2250 2288
2251 static LLCullResult::drawinfo_list_t alpha_bins[bin_count]; 2289 static LLCullResult::drawinfo_list_t alpha_bins[bin_count];
2252 static U32 bin_size[bin_count];
2253 2290
2254 //clear one bin per frame to avoid memory bloat 2291 //clear one bin per frame to avoid memory bloat
2255 static S32 clear_idx = 0; 2292 static S32 clear_idx = 0;
2256 clear_idx = (1+clear_idx)%bin_count; 2293 clear_idx = (1+clear_idx)%bin_count;
2257 alpha_bins[clear_idx].clear(); 2294 alpha_bins[clear_idx].clear();
2258 2295
2259 for (U32 j = 0; j < bin_count; j++)
2260 {
2261 bin_size[j] = 0;
2262 }
2263
2264 //build render map 2296 //build render map
2265 for (LLCullResult::sg_list_t::iterator i = sCull->beginVisibleGroups(); i != sCull->endVisibleGroups(); ++i) 2297 for (LLCullResult::sg_list_t::iterator i = sCull->beginVisibleGroups(); i != sCull->endVisibleGroups(); ++i)
2266 { 2298 {
@@ -2347,6 +2379,11 @@ void LLPipeline::postSort(LLCamera& camera)
2347 forAllVisibleDrawables(renderPhysicalBeacons); 2379 forAllVisibleDrawables(renderPhysicalBeacons);
2348 } 2380 }
2349 2381
2382 if(sRenderMOAPBeacons)
2383 {
2384 forAllVisibleDrawables(renderMOAPBeacons);
2385 }
2386
2350 if (sRenderParticleBeacons) 2387 if (sRenderParticleBeacons)
2351 { 2388 {
2352 forAllVisibleDrawables(renderParticleBeacons); 2389 forAllVisibleDrawables(renderParticleBeacons);
@@ -4581,6 +4618,24 @@ BOOL LLPipeline::getRenderScriptedTouchBeacons(void*)
4581} 4618}
4582 4619
4583// static 4620// static
4621void LLPipeline::setRenderMOAPBeacons(BOOL val)
4622{
4623 sRenderMOAPBeacons = val;
4624}
4625
4626// static
4627void LLPipeline::toggleRenderMOAPBeacons(void*)
4628{
4629 sRenderMOAPBeacons = !sRenderMOAPBeacons;
4630}
4631
4632// static
4633BOOL LLPipeline::getRenderMOAPBeacons(void*)
4634{
4635 return sRenderMOAPBeacons;
4636}
4637
4638// static
4584void LLPipeline::setRenderPhysicalBeacons(BOOL val) 4639void LLPipeline::setRenderPhysicalBeacons(BOOL val)
4585{ 4640{
4586 sRenderPhysicalBeacons = val; 4641 sRenderPhysicalBeacons = val;
@@ -5913,8 +5968,6 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
5913 5968
5914 stop_glerror(); 5969 stop_glerror();
5915 5970
5916 LLVector3 origin = camera.getOrigin();
5917
5918 glPushMatrix(); 5971 glPushMatrix();
5919 5972
5920 mat.set_scale(glh::vec3f(1,1,-1)); 5973 mat.set_scale(glh::vec3f(1,1,-1));
diff --git a/linden/indra/newview/pipeline.h b/linden/indra/newview/pipeline.h
index c5ab7ab..254b3c1 100644
--- a/linden/indra/newview/pipeline.h
+++ b/linden/indra/newview/pipeline.h
@@ -271,6 +271,10 @@ public:
271 static void toggleRenderPhysicalBeacons(void* data); 271 static void toggleRenderPhysicalBeacons(void* data);
272 static BOOL getRenderPhysicalBeacons(void* data); 272 static BOOL getRenderPhysicalBeacons(void* data);
273 273
274 static void setRenderMOAPBeacons(BOOL val);
275 static void toggleRenderMOAPBeacons(void * data);
276 static BOOL getRenderMOAPBeacons(void * data);
277
274 static void setRenderScriptedBeacons(BOOL val); 278 static void setRenderScriptedBeacons(BOOL val);
275 static void toggleRenderScriptedBeacons(void* data); 279 static void toggleRenderScriptedBeacons(void* data);
276 static BOOL getRenderScriptedBeacons(void* data); 280 static BOOL getRenderScriptedBeacons(void* data);
@@ -572,6 +576,7 @@ protected:
572 S32 mLightingDetail; 576 S32 mLightingDetail;
573 577
574 static BOOL sRenderPhysicalBeacons; 578 static BOOL sRenderPhysicalBeacons;
579 static BOOL sRenderMOAPBeacons;
575 static BOOL sRenderScriptedTouchBeacons; 580 static BOOL sRenderScriptedTouchBeacons;
576 static BOOL sRenderScriptedBeacons; 581 static BOOL sRenderScriptedBeacons;
577 static BOOL sRenderParticleBeacons; 582 static BOOL sRenderParticleBeacons;
diff --git a/linden/indra/newview/qtoolalign.cpp b/linden/indra/newview/qtoolalign.cpp
index 3fe31f7..b4944fe 100644
--- a/linden/indra/newview/qtoolalign.cpp
+++ b/linden/indra/newview/qtoolalign.cpp
@@ -36,7 +36,7 @@ const F32 MANIPULATOR_SELECT_SIZE = 20.0;
36 36
37 37
38QToolAlign::QToolAlign() 38QToolAlign::QToolAlign()
39: LLTool(std::string("Align")) 39: LLToolComposite(std::string("Align"))
40{ 40{
41} 41}
42 42
@@ -46,7 +46,6 @@ QToolAlign::~QToolAlign()
46} 46}
47 47
48 48
49
50BOOL QToolAlign::handleMouseDown(S32 x, S32 y, MASK mask) 49BOOL QToolAlign::handleMouseDown(S32 x, S32 y, MASK mask)
51{ 50{
52 if (mHighlightedAxis != -1) 51 if (mHighlightedAxis != -1)
@@ -62,6 +61,11 @@ BOOL QToolAlign::handleMouseDown(S32 x, S32 y, MASK mask)
62} 61}
63 62
64 63
64BOOL QToolAlign::handleDoubleClick(S32 x, S32 y, MASK mask)
65{
66 return TRUE;
67}
68
65 69
66void QToolAlign::pickCallback(const LLPickInfo& pick_info) 70void QToolAlign::pickCallback(const LLPickInfo& pick_info)
67{ 71{
@@ -95,7 +99,7 @@ void QToolAlign::pickCallback(const LLPickInfo& pick_info)
95 } 99 }
96 else 100 else
97 { 101 {
98 if (!(pick_info.mKeyMask == MASK_SHIFT)) 102 if (!(pick_info.mKeyMask & MASK_SHIFT))
99 { 103 {
100 LLSelectMgr::getInstance()->deselectAll(); 104 LLSelectMgr::getInstance()->deselectAll();
101 } 105 }
@@ -105,7 +109,6 @@ void QToolAlign::pickCallback(const LLPickInfo& pick_info)
105} 109}
106 110
107 111
108
109void QToolAlign::handleSelect() 112void QToolAlign::handleSelect()
110{ 113{
111 // no parts, please 114 // no parts, please
@@ -207,7 +210,6 @@ BOOL QToolAlign::handleHover(S32 x, S32 y, MASK mask)
207} 210}
208 211
209 212
210
211void setup_transforms_bbox(LLBBox bbox) 213void setup_transforms_bbox(LLBBox bbox)
212{ 214{
213 // translate to center 215 // translate to center
@@ -242,6 +244,7 @@ void render_bbox(LLBBox bbox)
242 gGL.popMatrix(); 244 gGL.popMatrix();
243} 245}
244 246
247
245void render_cone_bbox(LLBBox bbox) 248void render_cone_bbox(LLBBox bbox)
246{ 249{
247 glMatrixMode(GL_MODELVIEW); 250 glMatrixMode(GL_MODELVIEW);
@@ -256,7 +259,6 @@ void render_cone_bbox(LLBBox bbox)
256} 259}
257 260
258 261
259
260// the selection bbox isn't axis aligned, so we must construct one 262// the selection bbox isn't axis aligned, so we must construct one
261// should this be cached in the selection manager? yes. 263// should this be cached in the selection manager? yes.
262LLBBox get_selection_axis_aligned_bbox() 264LLBBox get_selection_axis_aligned_bbox()
@@ -288,7 +290,6 @@ LLBBox get_selection_axis_aligned_bbox()
288} 290}
289 291
290 292
291
292void QToolAlign::computeManipulatorSize() 293void QToolAlign::computeManipulatorSize()
293{ 294{
294 if (LLSelectMgr::getInstance()->getSelection()->getSelectType() == SELECT_TYPE_HUD) 295 if (LLSelectMgr::getInstance()->getSelection()->getSelectType() == SELECT_TYPE_HUD)
@@ -407,6 +408,7 @@ void QToolAlign::render()
407 } 408 }
408} 409}
409 410
411
410// only works for our specialized (AABB, position centered) bboxes 412// only works for our specialized (AABB, position centered) bboxes
411BOOL bbox_overlap(LLBBox bbox1, LLBBox bbox2) 413BOOL bbox_overlap(LLBBox bbox1, LLBBox bbox2)
412{ 414{
@@ -422,7 +424,6 @@ BOOL bbox_overlap(LLBBox bbox1, LLBBox bbox2)
422} 424}
423 425
424 426
425
426// used to sort bboxes before packing 427// used to sort bboxes before packing
427class BBoxCompare 428class BBoxCompare
428{ 429{
@@ -598,5 +599,3 @@ void QToolAlign::align()
598 599
599 LLSelectMgr::getInstance()->sendMultipleUpdate(UPD_POSITION); 600 LLSelectMgr::getInstance()->sendMultipleUpdate(UPD_POSITION);
600} 601}
601
602
diff --git a/linden/indra/newview/qtoolalign.h b/linden/indra/newview/qtoolalign.h
index b2c18b7..2d30b92 100644
--- a/linden/indra/newview/qtoolalign.h
+++ b/linden/indra/newview/qtoolalign.h
@@ -13,6 +13,7 @@
13#define Q_QTOOLALIGN_H 13#define Q_QTOOLALIGN_H
14 14
15#include "lltool.h" 15#include "lltool.h"
16#include "lltoolcomp.h"
16#include "llbbox.h" 17#include "llbbox.h"
17 18
18class LLViewerObject; 19class LLViewerObject;
@@ -20,7 +21,7 @@ class LLPickInfo;
20class LLToolSelectRect; 21class LLToolSelectRect;
21 22
22class QToolAlign 23class QToolAlign
23: public LLTool, public LLSingleton<QToolAlign> 24: public LLToolComposite, public LLSingleton<QToolAlign>
24{ 25{
25public: 26public:
26 QToolAlign(); 27 QToolAlign();
@@ -29,6 +30,7 @@ public:
29 virtual void handleSelect(); 30 virtual void handleSelect();
30 virtual void handleDeselect(); 31 virtual void handleDeselect();
31 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); 32 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
33 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
32 virtual BOOL handleHover(S32 x, S32 y, MASK mask); 34 virtual BOOL handleHover(S32 x, S32 y, MASK mask);
33 virtual void render(); 35 virtual void render();
34 36
diff --git a/linden/indra/newview/rcmoapradar.cpp b/linden/indra/newview/rcmoapradar.cpp
new file mode 100644
index 0000000..f0593ef
--- /dev/null
+++ b/linden/indra/newview/rcmoapradar.cpp
@@ -0,0 +1,440 @@
1// MOAP Radar
2// Robin Cornelius
3
4
5#include "llviewerprecompiledheaders.h"
6
7#include "llavatarconstants.h"
8#include "llfloateravatarlist.h"
9
10#include "lluictrlfactory.h"
11#include "llviewerwindow.h"
12#include "llscrolllistctrl.h"
13#include "llradiogroup.h"
14#include "llviewercontrol.h"
15#include "llbutton.h"
16
17#include "llvoavatar.h"
18#include "llimview.h"
19#include "rcmoapradar.h"
20#include "llregionflags.h"
21#include "llfloaterreporter.h"
22#include "llagent.h"
23#include "llviewerregion.h"
24#include "lltracker.h"
25#include "llviewerstats.h"
26#include "llerror.h"
27#include "llchat.h"
28#include "llfloaterchat.h"
29#include "llviewermessage.h"
30#include "llweb.h"
31#include "llviewerobjectlist.h"
32#include "llmutelist.h"
33#include "llcallbacklist.h"
34#include "llmediaentry.h"
35
36#include <time.h>
37#include <string.h>
38
39#include <map>
40
41#include "llworld.h"
42
43#include "llsdutil.h"
44
45LLFloaterMOAPRadar* LLFloaterMOAPRadar::sInstance = NULL;
46
47LLFloaterMOAPRadar::LLFloaterMOAPRadar() : LLFloater(std::string("MOAPradar"))
48{
49 llassert_always(sInstance == NULL);
50 sInstance = this;
51 mUpdateRate = gSavedSettings.getU32("MOAPRadarUpdateRate") * 3 + 3;
52 mTrackingRunning=false;
53}
54
55LLFloaterMOAPRadar::~LLFloaterMOAPRadar()
56{
57 gIdleCallbacks.deleteFunction(LLFloaterMOAPRadar::callbackIdle);
58 sInstance = NULL;
59}
60
61//static
62void LLFloaterMOAPRadar::toggle(void*)
63{
64 if (sInstance)
65 {
66 if (sInstance->getVisible())
67 {
68 sInstance->close(false);
69 }
70 else
71 {
72 sInstance->open();
73 }
74 }
75 else
76 {
77 showInstance();
78 }
79}
80
81//static
82void LLFloaterMOAPRadar::showInstance()
83{
84 if (sInstance)
85 {
86 if (!sInstance->getVisible())
87 {
88 sInstance->open();
89 }
90 }
91 else
92 {
93 sInstance = new LLFloaterMOAPRadar();
94 LLUICtrlFactory::getInstance()->buildFloater(sInstance, "floater_moap_radar.xml");
95 }
96}
97
98void LLFloaterMOAPRadar::draw()
99{
100 LLFloater::draw();
101}
102
103void LLFloaterMOAPRadar::onOpen()
104{
105 gSavedSettings.setBOOL("ShowMOAPRadar", TRUE);
106 sInstance->setVisible(TRUE);
107}
108
109void LLFloaterMOAPRadar::onClose(bool app_quitting)
110{
111 sInstance->setVisible(FALSE);
112 if (!app_quitting)
113 {
114 gSavedSettings.setBOOL("ShowMOAPRadar", FALSE);
115 }
116 if (!gSavedSettings.getBOOL("MOAPRadarKeepOpen") || app_quitting)
117 {
118 destroy();
119 }
120}
121
122
123BOOL LLFloaterMOAPRadar::postBuild()
124{
125
126 mMOAPList = getChild<LLScrollListCtrl>("moap_list");
127 mMOAPList->sortByColumn("distance", TRUE);
128
129 mTrackBtn = getChild<LLButton>("track_btn");
130 mTrackBtn->setLabel(LLStringExplicit("Track"));
131
132 childSetAction("open_btn", onClickOpen, this);
133 childSetAction("track_btn", onClickTrack, this);
134 childSetAction("copy_btn", onClickCopy, this);
135
136 mMOAPList->setCommitOnSelectionChange(TRUE);
137 childSetCommitCallback("moap_list", onSelectMOAP, this);
138
139 gIdleCallbacks.addFunction(LLFloaterMOAPRadar::callbackIdle);
140
141 return TRUE;
142}
143
144//static
145void LLFloaterMOAPRadar::callbackIdle(void *userdata) {
146 if (LLFloaterMOAPRadar::sInstance != NULL)
147 {
148 // Do not update at every frame: this would be insane !
149 if (gFrameCount % LLFloaterMOAPRadar::sInstance->mUpdateRate == 0)
150 {
151 LLFloaterMOAPRadar::sInstance->updateMOAPList();
152 }
153 }
154}
155
156
157void LLFloaterMOAPRadar::updateMOAPList()
158{
159 if (sInstance != this) return;
160
161 mMOAPList->deleteAllItems();
162
163 S32 obj_count=gObjectList.getNumObjects();
164
165 int count=0;
166
167 for(int objnum=0;objnum<obj_count;objnum++)
168 {
169 LLPointer<LLViewerObject> obj = gObjectList.getObject(objnum);
170
171 if(obj.isNull())
172 continue;
173
174 if(obj->isDead() || obj->isOrphaned())
175 continue;
176
177 if(obj->getMediaType() == LLViewerObject::MEDIA_TYPE_NONE)
178 continue;
179
180 LLSD element;
181
182 element["id"] = obj->getID();
183
184 for(int face=0;face<obj->getNumTEs();face++)
185 {
186 const LLTextureEntry * te=obj->getTE(face);
187 if(te==NULL)
188 continue;
189
190 if(te->hasMedia())
191 {
192 LLMediaEntry* media=te->getMediaData();
193
194 if(media==NULL)
195 continue;
196
197 LLSD media_details;
198 media->asLLSD(media_details);
199
200 element["columns"][LIST_URL]["column"] = "URL";
201 element["columns"][LIST_URL]["type"] = "text";
202 std::string URL=media->getCurrentURL();
203 if(URL=="")
204 URL="(Waiting....)";
205
206 element["columns"][LIST_URL]["value"] = URL;
207
208 if(mTrackingRunning && mTrackedID==obj->getID() && mTrackedFace==face)
209 {
210 element["columns"][LIST_URL]["font-style"] = "BOLD";
211 }
212 else
213 {
214 element["columns"][LIST_URL]["font-style"] = "NORMAL";
215 }
216
217 element["columns"][LIST_FACE]["column"] = "face";
218 element["columns"][LIST_FACE]["type"] = "text";
219 std::stringstream face_buf;
220 face_buf << face;
221 element["columns"][LIST_FACE]["value"] = face_buf.str();
222
223 LLVector3d offset = gAgent.getPositionGlobal()-obj->getPositionGlobal();
224 S32 dist= offset.length();
225
226 element["columns"][LIST_DISTANCE]["column"] = "distance";
227 element["columns"][LIST_DISTANCE]["type"] = "text";
228 std::stringstream dist_buf;
229 dist_buf << std::fixed << std::setprecision(2) << dist<<"m";
230 element["columns"][LIST_DISTANCE]["value"] = dist_buf.str();
231
232 if(dist<25)
233 element["columns"][LIST_DISTANCE]["color"] = LLColor4::green.getValue();
234 else if(dist<50)
235 element["columns"][LIST_DISTANCE]["color"] = LLColor4::blue1.getValue();
236 else if(dist<100)
237 element["columns"][LIST_DISTANCE]["color"] = LLColor4::black.getValue();
238 else if(dist<256)
239 element["columns"][LIST_DISTANCE]["color"] = LLColor4::yellow.getValue();
240 else
241 element["columns"][LIST_DISTANCE]["color"] = LLColor4::red.getValue();
242
243
244 element["columns"][LIST_POSITION]["column"] = "position";
245 element["columns"][LIST_POSITION]["type"] = "text";
246 element["columns"][LIST_POSITION]["value"] = "";
247
248 element["columns"][LIST_ALTITUDE]["column"] = "altitude";
249 element["columns"][LIST_ALTITUDE]["type"] = "text";
250 std::stringstream alt_buf;
251 alt_buf << std::fixed << std::setprecision(2) << obj->getPositionGlobal().mdV[2]<<"m";
252 element["columns"][LIST_ALTITUDE]["value"] = alt_buf.str();
253
254 element["columns"][LIST_POSITION]["column"]="position";
255 element["columns"][LIST_POSITION]["type"] = "text";
256 std::stringstream pos_buf;
257
258 S32 moap_x = (S32)offset.mdV[VX];
259 S32 moap_y = (S32)offset.mdV[VY];
260 if (moap_x >= -256 && moap_x <= 256 && moap_y >= -256 && moap_y <= 256)
261 {
262 pos_buf<< std::fixed << std::setprecision(2)<<obj->getPositionRegion().mV[VX]<<","<<obj->getPositionRegion().mV[VY];
263 }
264 else
265 {
266 if (moap_y < 0)
267 pos_buf<<"S";
268 else if (moap_y > 256)
269 pos_buf<<"N";
270
271 if (moap_x < 0)
272 pos_buf<<"W";
273 else if (moap_x > 256)
274 pos_buf<<"E";
275 }
276
277
278 element["columns"][LIST_POSITION]["value"] = pos_buf.str();
279
280 mMOAPList->addElement(element, ADD_BOTTOM);
281
282 if(mSelectedObjID==obj->getID() && mSelectedFace==face)
283 {
284 mMOAPList->selectNthItem(count);
285 }
286
287 count++;
288 }
289 }
290 }
291
292 updatetrackbtn();
293}
294
295// static
296void LLFloaterMOAPRadar::onClickOpen(void* userdata)
297{
298 LLFloaterMOAPRadar *self = (LLFloaterMOAPRadar*)userdata;
299
300 LLDynamicArray<LLUUID> ids = self->mMOAPList->getSelectedIDs();
301
302 if(ids.empty())
303 {
304 return;
305 }
306
307 LLUUID id=ids.front();
308
309 LLPointer<LLViewerObject> obj = gObjectList.findObject(id);
310 if(obj.notNull())
311 {
312
313 const LLTextureEntry * te=obj->getTE(self->mSelectedFace);
314 if(te==NULL)
315 return;
316
317 if(te->hasMedia())
318 {
319 LLMediaEntry* media=te->getMediaData();
320 if(media)
321 {
322 //gViewerWindow->mWindow->copyTextToClipboard(utf8str_to_wstring(media->getCurrentURL()));
323 LLWeb::loadURL(media->getCurrentURL());
324 }
325 }
326 }
327
328}
329
330// static
331void LLFloaterMOAPRadar::onClickTrack(void* userdata)
332{
333 LLFloaterMOAPRadar *self = (LLFloaterMOAPRadar*)userdata;
334
335 LLDynamicArray<LLUUID> ids = self->mMOAPList->getSelectedIDs();
336
337 if(self->mTrackingRunning)
338 {
339 LLTracker::stopTracking(NULL);
340 self->mTrackingRunning=false;
341 }
342
343 if(ids.empty())
344 {
345 self->mTrackedID=LLUUID::null;
346 self->mTrackingRunning=false;
347 return;
348 }
349
350 LLUUID id=ids.front();
351
352 if(id==self->mTrackedID && self->mSelectedFace==self->mTrackedFace)
353 {
354 self->mTrackedID=LLUUID::null;
355 self->mTrackingRunning=false;
356 return;
357 }
358
359 self->mTrackedID=LLUUID::null;
360
361 LLPointer<LLViewerObject> obj = gObjectList.findObject(id);
362 if(obj.notNull())
363 {
364 LLTracker::trackLocation(obj->getPositionGlobal(),"MOAP Tracking","",LLTracker::LOCATION_ITEM);
365 self->mTrackingRunning=true;
366 self->mTrackedID=id;
367 self->mTrackedFace=self->mSelectedFace;
368 }
369}
370
371// static
372void LLFloaterMOAPRadar::onClickCopy(void* userdata)
373{
374 LLFloaterMOAPRadar *self = (LLFloaterMOAPRadar*)userdata;
375
376 LLDynamicArray<LLUUID> ids = self->mMOAPList->getSelectedIDs();
377
378 if(ids.empty())
379 {
380 LLTracker::stopTracking(NULL);
381 return;
382 }
383
384 LLUUID id=ids.front();
385
386 LLPointer<LLViewerObject> obj = gObjectList.findObject(id);
387
388 if(obj.notNull())
389 {
390
391 const LLTextureEntry * te=obj->getTE(self->mSelectedFace);
392 if(te==NULL)
393 return;
394
395 if(te->hasMedia())
396 {
397 LLMediaEntry* media=te->getMediaData();
398 if(media)
399 {
400 gViewerWindow->mWindow->copyTextToClipboard(utf8str_to_wstring(media->getCurrentURL()));
401 }
402 }
403 }
404
405}
406
407//static
408void LLFloaterMOAPRadar::onSelectMOAP(LLUICtrl*, void* userdata)
409{
410 LLFloaterMOAPRadar *self = (LLFloaterMOAPRadar*)userdata;
411
412 LLScrollListItem *item = self->mMOAPList->getFirstSelected();
413 if (item)
414 {
415 self->mSelectedObjID = item->getUUID();
416 self->mSelectedFace = item->getColumn(LIST_FACE)->getValue().asInteger();
417 }
418
419 self->updatetrackbtn();
420}
421
422void LLFloaterMOAPRadar::updatetrackbtn()
423{
424 if( mTrackingRunning)
425 {
426 if( mTrackedID==mSelectedObjID && mTrackedFace==mSelectedFace)
427 {
428 mTrackBtn->setLabel(LLStringExplicit("Untrack"));
429 }
430 else
431 {
432 mTrackBtn->setLabel(LLStringExplicit("New Track"));
433 }
434 }
435 else
436 {
437 mTrackBtn->setLabel(LLStringExplicit("Track"));
438 }
439
440} \ No newline at end of file
diff --git a/linden/indra/newview/rcmoapradar.h b/linden/indra/newview/rcmoapradar.h
new file mode 100644
index 0000000..1d01546
--- /dev/null
+++ b/linden/indra/newview/rcmoapradar.h
@@ -0,0 +1,58 @@
1
2
3class LLFloaterMOAPRadar : public LLFloater
4{
5
6private:
7 LLFloaterMOAPRadar();
8public:
9 ~LLFloaterMOAPRadar();
10
11 enum AVATARS_COLUMN_ORDER
12 {
13 LIST_URL,
14 LIST_FACE,
15 LIST_DISTANCE,
16 LIST_POSITION,
17 LIST_ALTITUDE
18 };
19
20 /*virtual*/ void onClose(bool app_quitting);
21 /*virtual*/ void onOpen();
22 /*virtual*/ BOOL postBuild();
23 /*virtual*/ void draw();
24
25 static void toggle(void*);
26
27 static void showInstance();
28
29 static void callbackIdle(void *userdata);
30
31 void updateMOAPList();
32
33 static void onClickOpen(void* userdata);
34 static void onClickCopy(void* userdata);
35 static void onClickTrack(void* userdata);
36 static void onSelectMOAP(LLUICtrl*, void* userdata);
37
38
39private:
40 static LLFloaterMOAPRadar* sInstance;
41 LLScrollListCtrl* mMOAPList;
42 LLButton * mTrackBtn;
43
44 U32 mUpdateRate;
45
46 LLUUID mSelectedObjID;
47 U8 mSelectedFace;
48 bool mTrackingRunning;
49
50 LLUUID mTrackedID;
51 U8 mTrackedFace;
52
53 void updatetrackbtn();
54
55public:
56 static LLFloaterMOAPRadar* getInstance() { return sInstance; }
57
58}; \ No newline at end of file
diff --git a/linden/indra/newview/res-sdl/imprudence_icon.BMP b/linden/indra/newview/res-sdl/imprudence_icon.BMP
new file mode 100644
index 0000000..c3f4887
--- /dev/null
+++ b/linden/indra/newview/res-sdl/imprudence_icon.BMP
Binary files differ
diff --git a/linden/indra/newview/res/imprudence_icon.png b/linden/indra/newview/res/imprudence_icon.png
new file mode 100644
index 0000000..8795fa7
--- /dev/null
+++ b/linden/indra/newview/res/imprudence_icon.png
Binary files differ
diff --git a/linden/indra/newview/res/viewerRes.rc b/linden/indra/newview/res/viewerRes.rc
index 21d4785..85603cf 100644
--- a/linden/indra/newview/res/viewerRes.rc
+++ b/linden/indra/newview/res/viewerRes.rc
@@ -156,11 +156,11 @@ BEGIN
156 BEGIN 156 BEGIN
157 VALUE "CompanyName", "meta-impy Viewer Project" 157 VALUE "CompanyName", "meta-impy Viewer Project"
158 VALUE "FileDescription", "meta-impy" 158 VALUE "FileDescription", "meta-impy"
159 VALUE "FileVersion", "1.4.0 beta 2" 159 VALUE "FileVersion", "1.4.0 exp 1"
160 VALUE "InternalName", "meta-impy" 160 VALUE "InternalName", "meta-impy"
161 VALUE "OriginalFilename", "meta-impy.exe" 161 VALUE "OriginalFilename", "meta-impy.exe"
162 VALUE "ProductName", "meta-impy" 162 VALUE "ProductName", "meta-impy"
163 VALUE "ProductVersion", "1.4.0 beta 2" 163 VALUE "ProductVersion", "1.4.0 exp 1"
164 END 164 END
165 END 165 END
166 BLOCK "VarFileInfo" 166 BLOCK "VarFileInfo"
diff --git a/linden/indra/newview/skins/dark/textures/icon_top_pick.tga b/linden/indra/newview/skins/dark/textures/icon_top_pick.tga
new file mode 100644
index 0000000..0b34882
--- /dev/null
+++ b/linden/indra/newview/skins/dark/textures/icon_top_pick.tga
Binary files differ
diff --git a/linden/indra/newview/skins/default/colors_base.xml b/linden/indra/newview/skins/default/colors_base.xml
index d1f202b..92ffae7 100644
--- a/linden/indra/newview/skins/default/colors_base.xml
+++ b/linden/indra/newview/skins/default/colors_base.xml
@@ -205,5 +205,6 @@
205<ContextSilhouetteColor value="239, 156, 0, 255" /> <!-- For "context" highlighting, i.e. pie menu --> 205<ContextSilhouetteColor value="239, 156, 0, 255" /> <!-- For "context" highlighting, i.e. pie menu -->
206<GroupOverTierColor value="110, 15, 15, 255" /> <!-- Warning text in Group Info window --> 206<GroupOverTierColor value="110, 15, 15, 255" /> <!-- Warning text in Group Info window -->
207<ConsoleBackground value="0, 0, 0, 255" /> <!-- Background for inworld chat --> 207<ConsoleBackground value="0, 0, 0, 255" /> <!-- Background for inworld chat -->
208<ComboBoxBg value="255, 255, 255, 255"/>
208 209
209</settings> 210</settings>
diff --git a/linden/indra/newview/skins/default/html/en-us/loading/imprudence_loading.png b/linden/indra/newview/skins/default/html/en-us/loading/imprudence_loading.png
new file mode 100644
index 0000000..f9ea7a2
--- /dev/null
+++ b/linden/indra/newview/skins/default/html/en-us/loading/imprudence_loading.png
Binary files differ
diff --git a/linden/indra/newview/skins/default/textures/uv_test1.bmp b/linden/indra/newview/skins/default/textures/uv_test1.bmp
new file mode 100644
index 0000000..a6ad9bc
--- /dev/null
+++ b/linden/indra/newview/skins/default/textures/uv_test1.bmp
Binary files differ
diff --git a/linden/indra/newview/skins/default/xui/da/floater_html.xml b/linden/indra/newview/skins/default/xui/da/floater_html.xml
index 28480f8..5961a0d 100644
--- a/linden/indra/newview/skins/default/xui/da/floater_html.xml
+++ b/linden/indra/newview/skins/default/xui/da/floater_html.xml
@@ -4,10 +4,4 @@
4 <button label="Retur" name="back_btn" /> 4 <button label="Retur" name="back_btn" />
5 <button label="Frem" name="forward_btn" /> 5 <button label="Frem" name="forward_btn" />
6 <button label="start" name="go_btn" /> 6 <button label="start" name="go_btn" />
7 <string name="home_page_url">
8 http://www.secondlife.com
9 </string>
10 <string name="support_page_url">
11 http://support.secondlife.com
12 </string>
13</floater> 7</floater>
diff --git a/linden/indra/newview/skins/default/xui/de/floater_html.xml b/linden/indra/newview/skins/default/xui/de/floater_html.xml
index 7bf1bad..55a9580 100644
--- a/linden/indra/newview/skins/default/xui/de/floater_html.xml
+++ b/linden/indra/newview/skins/default/xui/de/floater_html.xml
@@ -4,10 +4,4 @@
4 <button label="Zurück" name="back_btn" /> 4 <button label="Zurück" name="back_btn" />
5 <button label="Weiter" name="forward_btn" /> 5 <button label="Weiter" name="forward_btn" />
6 <button label="Los" name="go_btn" /> 6 <button label="Los" name="go_btn" />
7 <string name="home_page_url">
8 http://de.secondlife.com
9 </string>
10 <string name="support_page_url">
11 http://de.secondlife.com/support
12 </string>
13</floater> 7</floater>
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_about.xml b/linden/indra/newview/skins/default/xui/en-us/floater_about.xml
index 975ae60..4ec46e2 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_about.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_about.xml
@@ -30,30 +30,29 @@
30 height="386" 30 height="386"
31 help_topic="about_credits_tab" 31 help_topic="about_credits_tab"
32 name="credits_panel"> 32 name="credits_panel">
33
34 <text_editor bottom="6" embedded_items="false" 33 <text_editor bottom="6" embedded_items="false"
35 follows="left|top|right|bottom" font="SansSerifSmall" height="374" left="6" 34 follows="left|top|right|bottom" font="SansSerifSmall" height="374" left="6"
36 max_length="65536" mouse_opaque="true" name="credits_editor" width="423" 35 max_length="65536" mouse_opaque="true" name="credits_editor" width="423"
37 word_wrap="true"> 36 word_wrap="true">
38 This meta-impy viewer is based on the Imprudence viewer, and brought to you by Dave and Chris. 37 This meta-impy viewer is based on the Imprudence viewer, and brought to you by Dave and Chris.
39 38
40 http://onefang.net/redmine/ for bug reports, feature requests, bitching, and downloads. 39 http://onefang.net/redmine/ for bug reports, feature requests, bitching, and downloads.
41 http://github.com/onefang/meta-impy for the source code. 40 http://github.com/onefang/meta-impy for the source code.
42 41
43 42
44 The Imprudence Viewer was rocked hard by: 43 The Imprudence Viewer was rocked hard by:
45 Jacek Antonelli, McCabe Maxsted, Armin Weatherwax, Elektra Hesse, and CodeBastard Redgrave. 44 Armin Weatherwax, Boroondas Gupte, CodeBastard Redgrave, Elektra Hesse, Jacek Antonelli, McCabe Maxsted, and onefang rejected.
46 45
47 http://kokuaviewer.org/ 46 http://kokuaviewer.org/
48 47
49 Imprudence is so awesome thanks to contributions from many generous people: 48 Imprudence is so awesome thanks to contributions from many generous people:
50 49
51 For their patches and code contributions, we thank Admiral Admiral, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Angus Boyd, Ansariel Hiller, Archimedies Plutonian, Ardy Lay, Asuka Neely, Balp Allen, Carjay McGinnis, Chalice Yao, Dale Glass, Damian Delacrois, Danny Nolan, Eryn, Felix Duesenburg, Frederick Martian, Geneko Nemeth, Grandma Bates, Hazim Gazov, Henri Beauchamp, Hg Beeks, Hiroshi Kumaki, Kakurady Drakenar, Katharine Berry, KirstenLee Cinquetti, Kitty Barnett, Latif Khalifa, Lance Corrimal, Lilly Zenovka, Makomk Makosen, Mana Janus, Matthew Dowd, Michelle2 Zenovka, Mimika Oh, Mm Alder, Nemurimasu Neiro, Nicholaz Beresford, Nicky Perian, Patrick Sapinski, Paul Churchill, Peter Lameth, Qarl Fizz, Revolution Smythe, Robin Cornelius, Seraph Linden, Shyotl Kuhr, Siana Gearz, SignpostMarv Martin, Stephen Zenith, TankMaster Finesmith, Thickbrick Sleaford, Thomas Shikami, Tom Meta, Tonya Souther, tx Oh, Vaalith Jinn, Vadim Bigbear, Vex Streeter, WhiteStar Magic, Zi Ree, and Zwagoth Klaar. 50 For their patches and code contributions, we thank Admiral Admiral, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Angus Boyd, Ansariel Hiller, Archimedies Plutonian, Ardy Lay, Asuka Neely, Balp Allen, Carjay McGinnis, Chalice Yao, Dale Glass, Damian Delacrois, Danny Nolan, Eryn, Felix Duesenburg, Frederick Martian, Geneko Nemeth, Grandma Bates, Hazim Gazov, Henri Beauchamp, Hg Beeks, Hiroshi Kumaki, Johnnie Carling, Lord Drakeo, Kakurady Drakenar, Katharine Berry, Kentron Katana, KirstenLee Cinquetti, Kitty Barnett, Latif Khalifa, Lance Corrimal, Lilly Zenovka, Makomk Makosen, Mana Janus, Matthew Dowd, Michelle2 Zenovka, Mimika Oh, Mm Alder, Nemurimasu Neiro, Nicholaz Beresford, Nicky Perian, Patrick Sapinski, Paul Churchill, Peter Lameth, Qarl Fizz, Revolution Smythe, Robin Cornelius, Seraph Linden, Shyotl Kuhr, Siana Gearz, SignpostMarv Martin, Stephen Zenith, TankMaster Finesmith, Thickbrick Sleaford, Thomas Shikami, Tom Meta, Tonya Souther, tx Oh, Vaalith Jinn, Vadim Bigbear, Vex Streeter, WhiteStar Magic, Zi Ree, and Zwagoth Klaar.
52 51
53 For their WindLight presets, we thank Ana Lutetia, CodeBastard Redgrave, and Torley Linden. 52 For their WindLight presets, we thank Ana Lutetia, CodeBastard Redgrave, and Torley Linden.
54 53
55 Thanks also to the developer(s) of the Ascent Viewer, Astra Viewer, Cool VL Viewer, Dolphin Viewer, Emerald Viewer, FrozenGlobe Viewer, Hippo Viewer, Meerkat Viewer, Meta7 Viewer, Phoenix Viewer, Singularity Viewer and Snowglobe Viewer for viewer enhancements we have incorporated, as well as Kitty Barnett for RLVa. Special thanks to the folks at Linden Lab for releasing the viewer source, without which this endeavor would have been impossible. 54 Thanks also to the developer(s) of the Ascent Viewer, Astra Viewer, Cool VL Viewer, Dolphin Viewer, Emerald Viewer, FrozenGlobe Viewer, Hippo Viewer, Meerkat Viewer, Meta7 Viewer, Phoenix Viewer, Singularity Viewer and Snowglobe Viewer for viewer enhancements we have incorporated, as well as Kitty Barnett for RLVa. Special thanks to the folks at Linden Lab for releasing the viewer source, without which this endeavor would have been impossible.
56 55
57 For a complete list of who did what, read the release notes! 56 For a complete list of who did what, read the release notes!
58 57
59 Many thanks to the many residents in many grids who contributed towards this viewer in countless ways. 58 Many thanks to the many residents in many grids who contributed towards this viewer in countless ways.
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_beacons.xml b/linden/indra/newview/skins/default/xui/en-us/floater_beacons.xml
index e698878..2f9fc4d 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_beacons.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_beacons.xml
@@ -1,15 +1,16 @@
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="false" 2<floater can_close="true" can_drag_on_left="false" can_minimize="true" can_resize="false"
3 width="250" height="225" 3 width="250" height="255"
4 name="beacons" title="Beacons" 4 name="beacons" title="Beacons"
5 rect_control="FloaterBeaconsRect" control_name="BeaconsEnabled"> 5 rect_control="FloaterBeaconsRect" control_name="BeaconsEnabled">
6 <panel bottom="10" follows="left|top|right|bottom" left="10" width="230" height="200" name="beacons_panel"> 6 <panel bottom="10" follows="left|top|right|bottom" left="10" width="230" height="240" name="beacons_panel">
7 <check_box bottom_delta="-33" follows="left|top" left="0" name="touch_only" label="Scripted Objects with Touch Only" control_name="scripttouchbeacon" /> 7 <check_box bottom_delta="-33" follows="left|top" left="0" name="touch_only" label="Scripted Objects with Touch Only" control_name="scripttouchbeacon" />
8 <check_box bottom_delta="-20" follows="left|top" left="0" name="scripted" label="Scripted Objects" control_name="scriptsbeacon" /> 8 <check_box bottom_delta="-20" follows="left|top" left="0" name="scripted" label="Scripted Objects" control_name="scriptsbeacon" />
9 <check_box bottom_delta="-20" follows="left|top" left="0" name="physical" label="Physical Objects" control_name="physicalbeacon" /> 9 <check_box bottom_delta="-20" follows="left|top" left="0" name="physical" label="Physical Objects" control_name="physicalbeacon" />
10 <check_box bottom_delta="-20" follows="left|top" left="0" name="sounds" label="Sound Sources" control_name="soundsbeacon" /> 10 <check_box bottom_delta="-20" follows="left|top" left="0" name="sounds" label="Sound Sources" control_name="soundsbeacon" />
11 <check_box bottom_delta="-20" follows="left|top" left="0" name="particles" label="Particle Sources" control_name="particlesbeacon" /> 11 <check_box bottom_delta="-20" follows="left|top" left="0" name="particles" label="Particle Sources" control_name="particlesbeacon" />
12 <check_box bottom_delta="-20" follows="left|top" left="0" name="highlights" label="Render Highlights" control_name="renderhighlights" /> 12 <check_box bottom_delta="-20" follows="left|top" left="0" name="highlights" label="Render Highlights" control_name="renderhighlights" />
13 <check_box bottom_delta="-20" follows="left|top" left="0" name="moap" label="MOAP Objects" control_name="moapbeacon" />
13 <check_box bottom_delta="-20" follows="left|top" left="0" name="beacons" label="Render Beacons" control_name="renderbeacons" /> 14 <check_box bottom_delta="-20" follows="left|top" left="0" name="beacons" label="Render Beacons" control_name="renderbeacons" />
14 <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"
15 bottom_delta="-30" drop_shadow_visible="true" enabled="true" follows="left|top" 16 bottom_delta="-30" drop_shadow_visible="true" enabled="true" follows="left|top"
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_build_options.xml b/linden/indra/newview/skins/default/xui/en-us/floater_build_options.xml
index 53dd217..5f9e745 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_build_options.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_build_options.xml
@@ -68,13 +68,34 @@
68 label="Values are percent" left_delta="-5" mouse_opaque="true" 68 label="Values are percent" left_delta="-5" mouse_opaque="true"
69 tool_tip="Default settings are Percentages and every axis set at 50" 69 tool_tip="Default settings are Percentages and every axis set at 50"
70 name="PivotPercToggle" radio_style="false" width="100" /> 70 name="PivotPercToggle" radio_style="false" width="100" />
71 71
72 <check_box bottom_delta="60" enabled="true" follows="left|top" font="SansSerifSmall" height="16" 72 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
73 initial_value="true" label="Show selection outlines" left_delta="143" 73 bottom_delta="-50" drop_shadow_visible="true" enabled="true" follows="left|top" font="SansSerifSmall"
74 mouse_opaque="true" name="BuildPrefsRenderHighlight_toggle" 74 h_pad="0" halign="left" height="10" left="220" mouse_opaque="false"
75 name="text_box8" v_pad="0" width="150">Show during build:</text>
76 <view_border bevel_style="none" border_thickness="1" bottom_delta="-98" follows="top|left" height="90"
77 left="198" name="ShowBorder" width="135" />
78
79
80 <check_box bottom_delta="70" enabled="true" follows="left|top" font="SansSerifSmall" height="16"
81 initial_value="true" label="Hidden selection" left_delta="0"
82 mouse_opaque="true" name="BuildPrefsRenderHidden_toggle"
75 radio_style="false" width="270"/> 83 radio_style="false" width="270"/>
76 <check_box bottom_delta="-20" enabled="true" follows="left|top" font="SansSerifSmall" height="16" 84 <check_box bottom_delta="-20" enabled="true" follows="left|top" font="SansSerifSmall" height="16"
77 label="Limit Select Distance" left_delta="0" mouse_opaque="true" 85 initial_value="true" label="Light radius" left_delta="0"
86 mouse_opaque="true" name="BuildPrefsRenderLightRadius_toggle"
87 radio_style="false" width="270"/>
88 <check_box bottom_delta="-20" enabled="true" follows="left|top" font="SansSerifSmall" height="16"
89 initial_value="true" label="Selection beam" left_delta="0"
90 mouse_opaque="true" name="BuildPrefsShowSelectionBeam_toggle"
91 radio_style="false" width="270"/>
92 <check_box bottom_delta="-20" enabled="true" follows="left|top" font="SansSerifSmall" height="16"
93 initial_value="true" label="Selection outlines" left_delta="0"
94 mouse_opaque="true" name="BuildPrefsRenderHighlight_toggle"
95 radio_style="false" width="270"/>
96
97 <check_box bottom_delta="198" enabled="true" follows="left|top" font="SansSerifSmall" height="16"
98 label="Limit Select Distance" left_delta="148" mouse_opaque="true"
78 tooltip="" 99 tooltip=""
79 name="limit_select_dist_check" radio_style="false" width="270" /> 100 name="limit_select_dist_check" radio_style="false" width="270" />
80 <check_box bottom_delta="-20" enabled="true" follows="left|top" font="SansSerifSmall" height="16" 101 <check_box bottom_delta="-20" enabled="true" follows="left|top" font="SansSerifSmall" height="16"
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_clear_cache.xml b/linden/indra/newview/skins/default/xui/en-us/floater_clear_cache.xml
index 7974d85..c00a86d 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_clear_cache.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_clear_cache.xml
@@ -7,7 +7,7 @@
7 font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="20" 7 font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="20"
8 mouse_opaque="true" name="cache_label" v_pad="0" width="185"> 8 mouse_opaque="true" name="cache_label" v_pad="0" width="185">
9Cache Will Be Cleared After 9Cache Will Be Cleared After
10You Restart Imprudence 10You Restart meta-impy
11 </text> 11 </text>
12 <check_box bottom_delta="-37" follows="left|top" font="SansSerifSmall" height="20" 12 <check_box bottom_delta="-37" follows="left|top" font="SansSerifSmall" height="20"
13 initial_value="false" label="Clear texture cache" left="10" 13 initial_value="false" label="Clear texture cache" left="10"
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_html.xml b/linden/indra/newview/skins/default/xui/en-us/floater_html.xml
index d107454..76283c3 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_html.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_html.xml
@@ -16,10 +16,4 @@
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">
20 http://www.secondlife.com
21 </string>
22 <string name="support_page_url">
23 http://support.secondlife.com
24 </string>
25</floater> 19</floater>
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_media_browser.xml b/linden/indra/newview/skins/default/xui/en-us/floater_media_browser.xml
index 76eee6f..12fe153 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_media_browser.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_media_browser.xml
@@ -48,10 +48,4 @@
48 left="-110" name="set_home" width="104" /> 48 left="-110" name="set_home" width="104" />
49 </layout_panel> 49 </layout_panel>
50 </layout_stack> 50 </layout_stack>
51 <string name="home_page_url">
52 http://www.secondlife.com
53 </string>
54 <string name="support_page_url">
55 http://support.secondlife.com
56 </string>
57</floater> 51</floater>
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_moap_radar.xml b/linden/indra/newview/skins/default/xui/en-us/floater_moap_radar.xml
new file mode 100644
index 0000000..b9e3f99
--- /dev/null
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_moap_radar.xml
@@ -0,0 +1,54 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes"?>
2<floater name="MOAP" title="MOAP Radar"
3 can_resize="true" can_minimize="true" can_close="true" can_drag_on_left="false"
4 rect_control="FloaterRadarRect" min_width="700" min_height="150">
5
6 <scroll_list name="moap_list"
7 left="10" right="-10" top="-20" bottom="40" can_resize="true"
8 column_padding="0" follows="left|top|bottom|right"
9 draw_heading="true" multi_select="true" search_column="1"
10 tool_tip="MOAP List">
11 <column name="URL" label="URL" width="450" tool_tip="URL of MOAP"/>
12 <column name="face" label="Face" width="48" tool_tip="URL of MOAP"/>
13 <column name="distance" label="Dist." width="48" tool_tip="Distance from your avatar"/>
14 <column name="position" label="Pos." width="90" tool_tip="Position (X, Y) within this sim, or general direction (cardinal point) for outside sims"/>
15 <column name="altitude" label="Alt." width="48" tool_tip="Altitude"/>
16 </scroll_list>
17
18
19 <button
20 name="open_btn"
21 label="Open"
22 tool_tip="Open Current URL"
23 left="10"
24 bottom_delta="-30"
25 width="80"
26 height="20"
27 font="SansSerifSmall"
28 follows="bottom|left"
29 />
30 <button
31 name="track_btn"
32 label="(Un)Track"
33 tool_tip="Toggle tracking of this MOAPs position"
34 left_delta="90"
35 bottom_delta="0"
36 width="80"
37 height="20"
38 font="SansSerifSmall"
39 follows="bottom|left"
40 />
41 <button
42 name="copy_btn"
43 label="Get URL"
44 tool_tip="Copies URL to the clipboard"
45 left_delta="90"
46 bottom_delta="0"
47 width="80"
48 height="20"
49 font="SansSerifSmall"
50 follows="bottom|left"
51 />
52 <!-- upper middle row -->
53
54</floater>
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml b/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml
index 3f476cf..2ed5120 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml
@@ -69,20 +69,24 @@
69 69
70 <check_box bottom="-70" follows="left|top" font="SansSerifSmall" height="16" 70 <check_box bottom="-70" follows="left|top" font="SansSerifSmall" height="16"
71 initial_value="false" label="Position" left="4" mouse_opaque="true" 71 initial_value="false" label="Position" left="4" mouse_opaque="true"
72 name="radio position" radio_style="true" width="114" /> 72 name="radio position" radio_style="true" width="114"
73 tool_tip="Position selected prims (Ctrl-Shift-P)." />
73 <check_box bottom_delta="-15" follows="left|top" font="SansSerifSmall" height="16" 74 <check_box bottom_delta="-15" follows="left|top" font="SansSerifSmall" height="16"
74 initial_value="false" label="Rotate (Ctrl)" left="4" mouse_opaque="true" 75 initial_value="false" label="Rotate (Ctrl)" left="4" mouse_opaque="true"
75 name="radio rotate" radio_style="true" width="114" /> 76 name="radio rotate" radio_style="true" width="114"
77 tool_tip="Rotate selected prims (Ctrl)." />
76 <check_box bottom_delta="-15" follows="left|top" font="SansSerifSmall" height="16" 78 <check_box bottom_delta="-15" follows="left|top" font="SansSerifSmall" height="16"
77 initial_value="false" label="Stretch (Ctrl-Shift)" left="4" 79 initial_value="false" label="Stretch (Ctrl-Shift)" left="4"
78 mouse_opaque="true" name="radio stretch" radio_style="true" width="123" /> 80 mouse_opaque="true" name="radio stretch" radio_style="true" width="123"
81 tool_tip="Resize selected prims (Ctrl-Shift)." />
79 <check_box bottom_delta="-15" follows="left|top" font="SansSerifSmall" height="16" 82 <check_box bottom_delta="-15" follows="left|top" font="SansSerifSmall" height="16"
80 initial_value="false" label="Select faces to texture" left="4" mouse_opaque="true" 83 initial_value="false" label="Select faces to texture" left="4" mouse_opaque="true"
81 name="radio select face" radio_style="true" width="114" /> 84 name="radio select face" radio_style="true" width="114"
85 tool_tip="Select faces of prims to texture (Ctrl-Alt-F)." />
82 <check_box bottom_delta="-15" follows="left|top" font="SansSerifSmall" height="16" 86 <check_box bottom_delta="-15" follows="left|top" font="SansSerifSmall" height="16"
83 initial_value="false" label="Align (Shift to Pack)" left="4" mouse_opaque="true" 87 initial_value="false" label="Align (Shift to Pack)" left="4" mouse_opaque="true"
84 name="radio align" radio_style="true" width="114" 88 name="radio align" radio_style="true" width="114"
85 tool_tip="Align aligns all selected prims' edges along an axis, Pack moves all selected prims' edges so they're touching" /> 89 tool_tip="Align (Ctrl-Alt-M) aligns all selected prims edges along an axis. Pack (Ctrl-Alt-Shift-M) moves all selected prims edges so they're touching." />
86 <check_box bottom_delta="-19" control_name="EditLinkedParts" follows="left|top" 90 <check_box bottom_delta="-19" control_name="EditLinkedParts" follows="left|top"
87 font="SansSerifSmall" height="16" initial_value="false" 91 font="SansSerifSmall" height="16" initial_value="false"
88 label="Edit linked parts" left="4" mouse_opaque="true" 92 label="Edit linked parts" left="4" mouse_opaque="true"
@@ -1363,9 +1367,12 @@
1363 <string name="status_move"> 1367 <string name="status_move">
1364 Drag to Move, Shift-Drag to Copy 1368 Drag to Move, Shift-Drag to Copy
1365 </string> 1369 </string>
1366 <string name="status_align"> 1370 <string name="status_selectface">
1367 CTRL-A to align on an axis, CTRL-Shift-A to Pack 1371 Click to select a Face for texturing
1368 </string> 1372 </string>
1373 <string name="status_align">
1374 Click to Align, Shift-Click to Pack
1375 </string>
1369 <string name="status_modifyland"> 1376 <string name="status_modifyland">
1370 Click and Hold to Modify Land 1377 Click and Hold to Modify Land
1371 </string> 1378 </string>
@@ -1379,7 +1386,7 @@
1379 Click Inworld to Build 1386 Click Inworld to Build
1380 </string> 1387 </string>
1381 <string name="status_selectland"> 1388 <string name="status_selectland">
1382 Click and Drag to Select Land 1389 Click and Drag to select Land
1383 </string> 1390 </string>
1384 <string name="grid_screen_text"> 1391 <string name="grid_screen_text">
1385 Screen 1392 Screen
diff --git a/linden/indra/newview/skins/default/xui/en-us/menu_inventory.xml b/linden/indra/newview/skins/default/xui/en-us/menu_inventory.xml
index 0cbd7c6..8295d3a 100644
--- a/linden/indra/newview/skins/default/xui/en-us/menu_inventory.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/menu_inventory.xml
@@ -166,17 +166,15 @@
166 <on_click filter="" function="Inventory.DoToSelected" userdata="copy_uuid" /> 166 <on_click filter="" function="Inventory.DoToSelected" userdata="copy_uuid" />
167 </menu_item_call> 167 </menu_item_call>
168 <menu_item_separator name="Copy Separator" /> 168 <menu_item_separator name="Copy Separator" />
169<!-- See IMP-961 http://redmine.kokuaviewer.org/issues/961 169 <menu_item_call bottom_delta="-18" height="18" label="Cut" left="0" mouse_opaque="true"
170 <menu_item_call bottom_delta="-18" height="18" label="Cut" left="0" mouse_opaque="true"
171 name="Cut" width="128"> 170 name="Cut" width="128">
172 <on_click filter="" function="Inventory.DoToSelected" userdata="cut" /> 171 <on_click filter="" function="Inventory.DoToSelected" userdata="cut" />
173 </menu_item_call> 172 </menu_item_call>
174--> 173 <menu_item_call bottom_delta="-18" height="18" label="Copy" left="0" mouse_opaque="true"
175 <menu_item_call bottom_delta="-18" height="18" label="Copy" left="0" mouse_opaque="true"
176 name="Copy" width="128"> 174 name="Copy" width="128">
177 <on_click filter="" function="Inventory.DoToSelected" userdata="copy" /> 175 <on_click filter="" function="Inventory.DoToSelected" userdata="copy" />
178 </menu_item_call> 176 </menu_item_call>
179 <menu_item_call bottom_delta="-18" height="18" label="Paste" left="0" mouse_opaque="true" 177 <menu_item_call bottom_delta="-18" height="18" label="Paste" left="0" mouse_opaque="true"
180 name="Paste" width="128"> 178 name="Paste" width="128">
181 <on_click filter="" function="Inventory.DoToSelected" userdata="paste" /> 179 <on_click filter="" function="Inventory.DoToSelected" userdata="paste" />
182 </menu_item_call> 180 </menu_item_call>
diff --git a/linden/indra/newview/skins/default/xui/en-us/menu_login.xml b/linden/indra/newview/skins/default/xui/en-us/menu_login.xml
index ffdafe2..9b9a198 100644
--- a/linden/indra/newview/skins/default/xui/en-us/menu_login.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/menu_login.xml
@@ -23,15 +23,15 @@
23 <on_click function="ShowFloater" userdata="help f1" /> 23 <on_click function="ShowFloater" userdata="help f1" />
24 </menu_item_call> 24 </menu_item_call>
25 <menu_item_separator /> 25 <menu_item_separator />
26 <menu_item_call name="Imprudence Blog" 26 <menu_item_call name="Imprudence communication channels"
27 label="Imprudence Blog"> 27 label="Imprudence communication channels">
28 <on_click function="PromptShowURL" 28 <on_click function="PromptShowURL"
29 userdata="WebLaunchImprudenceBlog,http://imprudenceviewer.org/" /> 29 userdata="WebLaunchImprudenceComms,http://wiki.kokuaviewer.org/wiki/Communication_Channels" />
30 </menu_item_call> 30 </menu_item_call>
31 <menu_item_call name="Imprudence Forums" 31 <menu_item_call name="Imprudence bug reporting"
32 label="Imprudence Forums"> 32 label="Imprudence bug reporting">
33 <on_click function="PromptShowURL" 33 <on_click function="PromptShowURL"
34 userdata="WebLaunchImprudenceForums,http://imprudenceviewer.org/forums/" /> 34 userdata="WebLaunchImprudenceBugs,http://wiki.kokuaviewer.org/wiki/Reporting_a_bug" />
35 </menu_item_call> 35 </menu_item_call>
36 <menu_item_separator /> 36 <menu_item_separator />
37 <menu_item_call label="About meta-impy" name="About meta-impy"> 37 <menu_item_call label="About meta-impy" name="About meta-impy">
diff --git a/linden/indra/newview/skins/default/xui/en-us/menu_viewer.xml b/linden/indra/newview/skins/default/xui/en-us/menu_viewer.xml
index 193592b..125962d 100644
--- a/linden/indra/newview/skins/default/xui/en-us/menu_viewer.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/menu_viewer.xml
@@ -385,6 +385,10 @@
385 <on_click function="ShowFloater" userdata="mini map" /> 385 <on_click function="ShowFloater" userdata="mini map" />
386 <on_check control="ShowMiniMap" /> 386 <on_check control="ShowMiniMap" />
387 </menu_item_check> 387 </menu_item_check>
388 <menu_item_check enabled="true" label="MOAP Radar" name="MOAPRadar" shortcut="">
389 <on_click function="View.ToggleMOAPList" userdata="moapradar" />
390 <on_check control="ShowMOAPRadar" />
391 </menu_item_check>
388 <menu_item_separator /> 392 <menu_item_separator />
389 <menu_item_check label="Animation Overrider" name="AO" 393 <menu_item_check label="Animation Overrider" name="AO"
390 shortcut="control|shift|O"> 394 shortcut="control|shift|O">
@@ -677,17 +681,17 @@
677 userdata="" /> 681 userdata="" />
678 <on_check control="RenderLightRadius" /> 682 <on_check control="RenderLightRadius" />
679 </menu_item_check> 683 </menu_item_check>
680 <menu_item_check label="Show Selection Outlines"
681 name="Show Selection Outlines">
682 <on_click function="Tools.ShowSelectionHighlights" userdata="" />
683 <on_check control="RenderHighlightSelections" />
684 </menu_item_check>
685 <menu_item_check name="Show Selection Beam" 684 <menu_item_check name="Show Selection Beam"
686 label="Show Selection Beam"> 685 label="Show Selection Beam">
687 <on_click function="ToggleControl" 686 <on_click function="ToggleControl"
688 userdata="ShowSelectionBeam" /> 687 userdata="ShowSelectionBeam" />
689 <on_check control="ShowSelectionBeam" /> 688 <on_check control="ShowSelectionBeam" />
690 </menu_item_check> 689 </menu_item_check>
690 <menu_item_check label="Show Selection Outlines"
691 name="Show Selection Outlines">
692 <on_click function="Tools.ShowSelectionHighlights" userdata="" />
693 <on_check control="RenderHighlightSelections" />
694 </menu_item_check>
691 </menu> 695 </menu>
692 <menu_item_separator /> 696 <menu_item_separator />
693 <menu_item_check name="Snap to Grid" enabled="false" 697 <menu_item_check name="Snap to Grid" enabled="false"
@@ -844,15 +848,15 @@
844 <on_click function="ShowFloater" userdata="help tutorial" /> 848 <on_click function="ShowFloater" userdata="help tutorial" />
845 </menu_item_call> 849 </menu_item_call>
846 <menu_item_separator /> 850 <menu_item_separator />
847 <menu_item_call name="Imprudence Blog" 851 <menu_item_call name="Imprudence communication channels"
848 label="Imprudence Blog"> 852 label="Imprudence communication channels">
849 <on_click function="PromptShowURL" 853 <on_click function="PromptShowURL"
850 userdata="WebLaunchImprudenceBlog,http://blog.kokuaviewer.org/" /> 854 userdata="WebLaunchImprudenceComms,http://wiki.kokuaviewer.org/wiki/Communication_Channels" />
851 </menu_item_call> 855 </menu_item_call>
852 <menu_item_call name="Imprudence Forums" 856 <menu_item_call name="Imprudence bug reporting"
853 label="Imprudence Forums"> 857 label="Imprudence bug reporting">
854 <on_click function="PromptShowURL" 858 <on_click function="PromptShowURL"
855 userdata="WebLaunchImprudenceForums,http://forums.kokuaviewer.org/" /> 859 userdata="WebLaunchImprudenceBugs,http://wiki.kokuaviewer.org/wiki/Reporting_a_bug" />
856 </menu_item_call> 860 </menu_item_call>
857 <menu_item_separator /> 861 <menu_item_separator />
858 <menu_item_call name="Scripting Portal" 862 <menu_item_call name="Scripting Portal"
@@ -1323,6 +1327,12 @@
1323 <on_check function="Advanced.CheckInfoDisplay" 1327 <on_check function="Advanced.CheckInfoDisplay"
1324 userdata="sculpt" /> 1328 userdata="sculpt" />
1325 </menu_item_check> 1329 </menu_item_check>
1330 <menu_item_check name="ShadowFrusta" label="Shadow Frusta">
1331 <on_click function="Advanced.ToggleInfoDisplay"
1332 userdata="shadow frusta" />
1333 <on_check function="Advanced.CheckInfoDisplay"
1334 userdata="shadow frusta" />
1335 </menu_item_check>
1326 <menu_item_check name="Vectorize Perf Test" 1336 <menu_item_check name="Vectorize Perf Test"
1327 label="Vectorize Perf Test"> 1337 label="Vectorize Perf Test">
1328 <on_click function="ToggleControl" 1338 <on_click function="ToggleControl"
@@ -1644,23 +1654,17 @@
1644 <menu_item_call name="Dump Inventory" label="Dump Inventory"> 1654 <menu_item_call name="Dump Inventory" label="Dump Inventory">
1645 <on_click function="Advanced.DumpInventory" userdata="" /> 1655 <on_click function="Advanced.DumpInventory" userdata="" />
1646 </menu_item_call> 1656 </menu_item_call>
1647 <menu_item_call name="Dump Focus Holder" 1657 <menu_item_call name="Dump Focus Holder" label="Dump Focus Holder">
1648 label="Dump Focus Holder"
1649 shortcut="control|alt|F">
1650 <on_click function="Advanced.DumpFocusHolder" userdata="" /> 1658 <on_click function="Advanced.DumpFocusHolder" userdata="" />
1651 </menu_item_call> 1659 </menu_item_call>
1652 <menu_item_call name="Print Selected Object Info" 1660 <menu_item_call name="Print Selected Object Info" label="Print Selected Object Info">
1653 label="Print Selected Object Info"
1654 shortcut="control|shift|P">
1655 <on_click function="Advanced.PrintSelectedObjectInfo" 1661 <on_click function="Advanced.PrintSelectedObjectInfo"
1656 userdata="" /> 1662 userdata="" />
1657 </menu_item_call> 1663 </menu_item_call>
1658 <menu_item_call name="Print Agent Info" 1664 <menu_item_call name="Print Agent Info" label="Print Agent Info">
1659 label="Print Agent Info" shortcut="shift|P">
1660 <on_click function="Advanced.PrintAgentInfo" userdata="" /> 1665 <on_click function="Advanced.PrintAgentInfo" userdata="" />
1661 </menu_item_call> 1666 </menu_item_call>
1662 <menu_item_call name="Memory Stats" label="Memory Stats" 1667 <menu_item_call name="Memory Stats" label="Memory Stats">
1663 shortcut="control|alt|shift|M">
1664 <on_click function="Advanced.PrintTextureMemoryStats" 1668 <on_click function="Advanced.PrintTextureMemoryStats"
1665 userdata="" /> 1669 userdata="" />
1666 </menu_item_call> 1670 </menu_item_call>
diff --git a/linden/indra/newview/skins/default/xui/en-us/notifications.xml b/linden/indra/newview/skins/default/xui/en-us/notifications.xml
index 5f97d74..a31f609 100644
--- a/linden/indra/newview/skins/default/xui/en-us/notifications.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/notifications.xml
@@ -7245,11 +7245,11 @@ Show Look At is a debug setting that displays where an avatar's head is looking.
7245 7245
7246<notification 7246<notification
7247 icon="alert.tga" 7247 icon="alert.tga"
7248 name="WebLaunchImprudenceBlog" 7248 name="WebLaunchImprudenceComms"
7249 type="alert"> 7249 type="alert">
7250Go to the Official Imprudence Blog, for the Latest News and Information. 7250Go to the Official Imprudence communications channels, to discuss the Imprudence Project.
7251 <usetemplate 7251 <usetemplate
7252 ignoretext="When launching web browser to view the blog" 7252 ignoretext="When launching web browser to view the communications channels"
7253 name="okcancelignore" 7253 name="okcancelignore"
7254 notext="Cancel" 7254 notext="Cancel"
7255 yestext="Go to page"/> 7255 yestext="Go to page"/>
@@ -7257,11 +7257,11 @@ Go to the Official Imprudence Blog, for the Latest News and Information.
7257 7257
7258<notification 7258<notification
7259 icon="alert.tga" 7259 icon="alert.tga"
7260 name="WebLaunchImprudenceForums" 7260 name="WebLaunchImprudenceBugs"
7261 type="alert"> 7261 type="alert">
7262Go to the Official Imprudence Forums to discuss the Imprudence Project. 7262Go to the Official Imprudence bug and feature trackers, to report bugs and request new features.
7263 <usetemplate 7263 <usetemplate
7264 ignoretext="When launching web browser to view the forums" 7264 ignoretext="When launching web browser to view the bug and feature trackers"
7265 name="okcancelignore" 7265 name="okcancelignore"
7266 notext="Cancel" 7266 notext="Cancel"
7267 yestext="Go to page"/> 7267 yestext="Go to page"/>
diff --git a/linden/indra/newview/skins/default/xui/es/floater_html.xml b/linden/indra/newview/skins/default/xui/es/floater_html.xml
index 5977fff..8f469b1 100644
--- a/linden/indra/newview/skins/default/xui/es/floater_html.xml
+++ b/linden/indra/newview/skins/default/xui/es/floater_html.xml
@@ -4,10 +4,4 @@
4 <button label="Atrás" name="back_btn"/> 4 <button label="Atrás" name="back_btn"/>
5 <button label="Adelante" name="forward_btn"/> 5 <button label="Adelante" name="forward_btn"/>
6 <button label="Ir" name="go_btn"/> 6 <button label="Ir" name="go_btn"/>
7 <string name="home_page_url">
8 http://www.secondlife.com
9 </string>
10 <string name="support_page_url">
11 http://support.secondlife.com
12 </string>
13</floater> 7</floater>
diff --git a/linden/indra/newview/skins/default/xui/fr/floater_html.xml b/linden/indra/newview/skins/default/xui/fr/floater_html.xml
index 1538189..f335617 100644
--- a/linden/indra/newview/skins/default/xui/fr/floater_html.xml
+++ b/linden/indra/newview/skins/default/xui/fr/floater_html.xml
@@ -7,10 +7,4 @@
7 <button label="Arrêter" name="stop_btn" /> 7 <button label="Arrêter" name="stop_btn" />
8 <button label="Domicile" name="home_btn" /> 8 <button label="Domicile" name="home_btn" />
9 <button label="Aller" name="go_btn" /> 9 <button label="Aller" name="go_btn" />
10 <string name="home_page_url">
11 http://www.secondlife.com
12 </string>
13 <string name="support_page_url">
14 http://support.secondlife.com
15 </string>
16</floater> 10</floater>
diff --git a/linden/indra/newview/skins/default/xui/hu/floater_html.xml b/linden/indra/newview/skins/default/xui/hu/floater_html.xml
index 21b6a21..5923c52 100644
--- a/linden/indra/newview/skins/default/xui/hu/floater_html.xml
+++ b/linden/indra/newview/skins/default/xui/hu/floater_html.xml
@@ -5,9 +5,6 @@
5 <button label="Kezdő helyszín" name="home_btn" /> 5 <button label="Kezdő helyszín" name="home_btn" />
6 <button label="Előre" name="forward_btn" /> 6 <button label="Előre" name="forward_btn" />
7 <button label="Menj" name="go_btn" /> 7 <button label="Menj" name="go_btn" />
8 <text name="home_page_url">
9 http://www.google.com
10 </text>
11 <text name="in-world_help_title"> 8 <text name="in-world_help_title">
12 In-World segítség 9 In-World segítség
13 </text> 10 </text>
diff --git a/linden/indra/newview/skins/default/xui/it/floater_html.xml b/linden/indra/newview/skins/default/xui/it/floater_html.xml
index 4080f80..b2d1951 100644
--- a/linden/indra/newview/skins/default/xui/it/floater_html.xml
+++ b/linden/indra/newview/skins/default/xui/it/floater_html.xml
@@ -4,10 +4,4 @@
4 <button label="Indietro" name="back_btn"/> 4 <button label="Indietro" name="back_btn"/>
5 <button label="Avanti" name="forward_btn"/> 5 <button label="Avanti" name="forward_btn"/>
6 <button label="Vai" name="go_btn"/> 6 <button label="Vai" name="go_btn"/>
7 <string name="home_page_url">
8 http://www.secondlife.com
9 </string>
10 <string name="support_page_url">
11 http://support.secondlife.com
12 </string>
13</floater> 7</floater>
diff --git a/linden/indra/newview/skins/default/xui/ja/floater_html.xml b/linden/indra/newview/skins/default/xui/ja/floater_html.xml
index 62aac82..1cb5384 100644
--- a/linden/indra/newview/skins/default/xui/ja/floater_html.xml
+++ b/linden/indra/newview/skins/default/xui/ja/floater_html.xml
@@ -5,10 +5,4 @@
5 <button label="ホーム" name="home_btn" /> 5 <button label="ホーム" name="home_btn" />
6 <button label="進む" name="forward_btn" /> 6 <button label="進む" name="forward_btn" />
7 <button label="移動" name="go_btn" /> 7 <button label="移動" name="go_btn" />
8 <string name="home_page_url">
9 http://jp.secondlife.com
10 </string>
11 <string name="support_page_url">
12 http://wiki.secondlife.com/wiki/Knowledge_Base/ja
13 </string>
14</floater> 8</floater>
diff --git a/linden/indra/newview/skins/default/xui/nl/floater_html.xml b/linden/indra/newview/skins/default/xui/nl/floater_html.xml
index 1604248..0147319 100644
--- a/linden/indra/newview/skins/default/xui/nl/floater_html.xml
+++ b/linden/indra/newview/skins/default/xui/nl/floater_html.xml
@@ -4,10 +4,4 @@
4 <button label="Terug" name="back_btn"/> 4 <button label="Terug" name="back_btn"/>
5 <button label="Vooruit" name="forward_btn"/> 5 <button label="Vooruit" name="forward_btn"/>
6 <button label="Ga" name="go_btn"/> 6 <button label="Ga" name="go_btn"/>
7 <string name="home_page_url">
8 http://www.secondlife.com
9 </string>
10 <string name="support_page_url">
11 http://support.secondlife.com
12 </string>
13</floater> 7</floater>
diff --git a/linden/indra/newview/skins/default/xui/pl/floater_html.xml b/linden/indra/newview/skins/default/xui/pl/floater_html.xml
index 90d29e1..645fe80 100755
--- a/linden/indra/newview/skins/default/xui/pl/floater_html.xml
+++ b/linden/indra/newview/skins/default/xui/pl/floater_html.xml
@@ -5,10 +5,4 @@
5 <button label="Prześlij dalej" name="forward_btn" width="85"/> 5 <button label="Prześlij dalej" name="forward_btn" width="85"/>
6 <line_editor left_delta="100" name="url_edit" width="420" /> 6 <line_editor left_delta="100" name="url_edit" width="420" />
7 <button label="Idź" name="go_btn" left_delta="425" /> 7 <button label="Idź" name="go_btn" left_delta="425" />
8 <string name="home_page_url">
9 http://www.secondlife.com
10 </string>
11 <string name="support_page_url">
12 http://support.secondlife.com
13 </string>
14</floater> 8</floater>
diff --git a/linden/indra/newview/skins/default/xui/pt/floater_html.xml b/linden/indra/newview/skins/default/xui/pt/floater_html.xml
index 3d500dd..aaa49c8 100644
--- a/linden/indra/newview/skins/default/xui/pt/floater_html.xml
+++ b/linden/indra/newview/skins/default/xui/pt/floater_html.xml
@@ -4,10 +4,4 @@
4 <button label="Voltar" name="back_btn"/> 4 <button label="Voltar" name="back_btn"/>
5 <button label="Adiantar" name="forward_btn"/> 5 <button label="Adiantar" name="forward_btn"/>
6 <button label="Ir" name="go_btn"/> 6 <button label="Ir" name="go_btn"/>
7 <string name="home_page_url">
8 http://www.secondlife.com
9 </string>
10 <string name="support_page_url">
11 http://support.secondlife.com
12 </string>
13</floater> 7</floater>
diff --git a/linden/indra/newview/skins/default/xui/ru/floater_html.xml b/linden/indra/newview/skins/default/xui/ru/floater_html.xml
index 4a5942b..6492440 100644
--- a/linden/indra/newview/skins/default/xui/ru/floater_html.xml
+++ b/linden/indra/newview/skins/default/xui/ru/floater_html.xml
@@ -4,7 +4,4 @@
4 <button label="Назад" name="back_btn" /> 4 <button label="Назад" name="back_btn" />
5 <button label="Вперед" name="forward_btn" /> 5 <button label="Вперед" name="forward_btn" />
6 <button label="Перейти" name="go_btn" /> 6 <button label="Перейти" name="go_btn" />
7 <string name="home_page_url">
8 http://www.secondlife.com
9 </string>
10</floater> 7</floater>
diff --git a/linden/indra/newview/skins/default/xui/uk/floater_html.xml b/linden/indra/newview/skins/default/xui/uk/floater_html.xml
index 8bde260..11a10cf 100644
--- a/linden/indra/newview/skins/default/xui/uk/floater_html.xml
+++ b/linden/indra/newview/skins/default/xui/uk/floater_html.xml
@@ -4,7 +4,4 @@
4 <button label="Назад" name="back_btn" /> 4 <button label="Назад" name="back_btn" />
5 <button label="Вперед" name="forward_btn" /> 5 <button label="Вперед" name="forward_btn" />
6 <button label="Перейти" name="go_btn" /> 6 <button label="Перейти" name="go_btn" />
7 <string name="home_page_url">
8 http://www.secondlife.com
9 </string>
10</floater> 7</floater>
diff --git a/linden/indra/newview/skins/default/xui/zh/notifications.xml b/linden/indra/newview/skins/default/xui/zh/notifications.xml
index ea49e35..9ee9d2f 100644
--- a/linden/indra/newview/skins/default/xui/zh/notifications.xml
+++ b/linden/indra/newview/skins/default/xui/zh/notifications.xml
@@ -3624,24 +3624,6 @@ GLOW — 发光
3624 name="okignore" 3624 name="okignore"
3625 yestext="OK"/> 3625 yestext="OK"/>
3626</notification> 3626</notification>
3627
3628<notification name="WebLaunchImprudenceBlog">
3629前往 Imprudence 官方日志阅读最新的新闻和信息。
3630 <usetemplate
3631 ignoretext="打开网络浏览器阅读网络日志时"
3632 name="okcancelignore"
3633 notext="取消"
3634 yestext="打开网页"/>
3635</notification>
3636
3637<notification name="WebLaunchImprudenceForums">
3638前往 Imprudence 官方论坛讨论 Imprudence 工程。
3639 <usetemplate
3640 ignoretext="打开网络浏览器阅读论坛时"
3641 name="okcancelignore"
3642 notext="取消"
3643 yestext="打开网页"/>
3644</notification>
3645 3627
3646<notification 3628<notification
3647 icon="alert.tga" 3629 icon="alert.tga"
diff --git a/linden/indra/newview/skins/gemini/colors_base.xml b/linden/indra/newview/skins/gemini/colors_base.xml
index 0b65586..31e6c57 100644
--- a/linden/indra/newview/skins/gemini/colors_base.xml
+++ b/linden/indra/newview/skins/gemini/colors_base.xml
@@ -66,7 +66,7 @@
66<ScrollBgWriteableColor value="33, 33, 33, 80" /> 66<ScrollBgWriteableColor value="33, 33, 33, 80" />
67<ScrollBGStripeColor value="100, 100, 100, 25" /> 67<ScrollBGStripeColor value="100, 100, 100, 25" />
68<ScrollDisabledColor value="33, 33, 33, 204" /> 68<ScrollDisabledColor value="33, 33, 33, 204" />
69<ScrollSelectedBGColor value="222, 222, 222, 150" /> 69<ScrollSelectedBGColor value="33, 33, 33, 204" />
70<ScrollSelectedFGColor value="255, 255, 255, 255" /> <!-- Text color --> 70<ScrollSelectedFGColor value="255, 255, 255, 255" /> <!-- Text color -->
71<ScrollUnselectedColor value="222, 222, 222, 150" /> <!-- Text color --> 71<ScrollUnselectedColor value="222, 222, 222, 150" /> <!-- Text color -->
72<ScrollHighlightedColor value="222, 222, 222, 80" /> <!-- Hover color --> 72<ScrollHighlightedColor value="222, 222, 222, 80" /> <!-- Hover color -->
diff --git a/linden/indra/newview/skins/silver/textures/0098b015-3daf-4cfe-a72f-915369ea97c2.tga b/linden/indra/newview/skins/silver/textures/0098b015-3daf-4cfe-a72f-915369ea97c2.tga
new file mode 100644
index 0000000..5c86082
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/0098b015-3daf-4cfe-a72f-915369ea97c2.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/3c18c87e-5f50-14e2-e744-f44734aa365f.tga b/linden/indra/newview/skins/silver/textures/3c18c87e-5f50-14e2-e744-f44734aa365f.tga
new file mode 100644
index 0000000..79ba740
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/3c18c87e-5f50-14e2-e744-f44734aa365f.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/7a0b1bdb-b5d9-4df5-bac2-ba230da93b5b.tga b/linden/indra/newview/skins/silver/textures/7a0b1bdb-b5d9-4df5-bac2-ba230da93b5b.tga
new file mode 100644
index 0000000..60c62e9
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/7a0b1bdb-b5d9-4df5-bac2-ba230da93b5b.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/7dabc040-ec13-2309-ddf7-4f161f6de2f4.tga b/linden/indra/newview/skins/silver/textures/7dabc040-ec13-2309-ddf7-4f161f6de2f4.tga
new file mode 100644
index 0000000..7b55a05
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/7dabc040-ec13-2309-ddf7-4f161f6de2f4.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/9cad3e6d-2d6d-107d-f8ab-5ba272b5bfe1.tga b/linden/indra/newview/skins/silver/textures/9cad3e6d-2d6d-107d-f8ab-5ba272b5bfe1.tga
new file mode 100644
index 0000000..4bed5ce
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/9cad3e6d-2d6d-107d-f8ab-5ba272b5bfe1.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/active_speakers.tga b/linden/indra/newview/skins/silver/textures/active_speakers.tga
new file mode 100644
index 0000000..ccd902c
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/active_speakers.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/active_voice_tab.tga b/linden/indra/newview/skins/silver/textures/active_voice_tab.tga
new file mode 100644
index 0000000..1a68c98
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/active_voice_tab.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/arrow_down.tga b/linden/indra/newview/skins/silver/textures/arrow_down.tga
new file mode 100644
index 0000000..5b05df1
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/arrow_down.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/arrow_left.tga b/linden/indra/newview/skins/silver/textures/arrow_left.tga
new file mode 100644
index 0000000..43fbf12
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/arrow_left.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/arrow_right.tga b/linden/indra/newview/skins/silver/textures/arrow_right.tga
new file mode 100644
index 0000000..a92ac9c
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/arrow_right.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/arrow_up.tga b/linden/indra/newview/skins/silver/textures/arrow_up.tga
new file mode 100644
index 0000000..2c27ed1
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/arrow_up.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/b4870163-6208-42a9-9801-93133bf9a6cd.tga b/linden/indra/newview/skins/silver/textures/b4870163-6208-42a9-9801-93133bf9a6cd.tga
new file mode 100644
index 0000000..4bc75f5
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/b4870163-6208-42a9-9801-93133bf9a6cd.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/black.tga b/linden/indra/newview/skins/silver/textures/black.tga
new file mode 100644
index 0000000..e368ea4
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/black.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/btn_chatbar.tga b/linden/indra/newview/skins/silver/textures/btn_chatbar.tga
new file mode 100644
index 0000000..52bd97a
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/btn_chatbar.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/btn_chatbar_selected.tga b/linden/indra/newview/skins/silver/textures/btn_chatbar_selected.tga
new file mode 100644
index 0000000..b8398b5
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/btn_chatbar_selected.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/button_anim_pause.tga b/linden/indra/newview/skins/silver/textures/button_anim_pause.tga
new file mode 100644
index 0000000..ccd4a08
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/button_anim_pause.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/button_anim_pause_selected.tga b/linden/indra/newview/skins/silver/textures/button_anim_pause_selected.tga
new file mode 100644
index 0000000..d1f9a66
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/button_anim_pause_selected.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/button_anim_play.tga b/linden/indra/newview/skins/silver/textures/button_anim_play.tga
new file mode 100644
index 0000000..a19dffd
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/button_anim_play.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/button_anim_play_selected.tga b/linden/indra/newview/skins/silver/textures/button_anim_play_selected.tga
new file mode 100644
index 0000000..143ec5d
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/button_anim_play_selected.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/button_anim_stop.tga b/linden/indra/newview/skins/silver/textures/button_anim_stop.tga
new file mode 100644
index 0000000..2615d26
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/button_anim_stop.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/button_anim_stop_selected.tga b/linden/indra/newview/skins/silver/textures/button_anim_stop_selected.tga
new file mode 100644
index 0000000..a271b3e
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/button_anim_stop_selected.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/button_disabled_32x128.tga b/linden/indra/newview/skins/silver/textures/button_disabled_32x128.tga
new file mode 100644
index 0000000..9be524e
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/button_disabled_32x128.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/button_enabled_32x128.tga b/linden/indra/newview/skins/silver/textures/button_enabled_32x128.tga
new file mode 100644
index 0000000..3ca7479
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/button_enabled_32x128.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/button_enabled_selected_32x128.tga b/linden/indra/newview/skins/silver/textures/button_enabled_selected_32x128.tga
new file mode 100644
index 0000000..759b639
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/button_enabled_selected_32x128.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/c1e21504-f136-451d-b8e9-929037812f1d.tga b/linden/indra/newview/skins/silver/textures/c1e21504-f136-451d-b8e9-929037812f1d.tga
new file mode 100644
index 0000000..79abce1
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/c1e21504-f136-451d-b8e9-929037812f1d.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/c63f124c-6340-4fbf-b59e-0869a44adb64.tga b/linden/indra/newview/skins/silver/textures/c63f124c-6340-4fbf-b59e-0869a44adb64.tga
new file mode 100644
index 0000000..061f1f2
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/c63f124c-6340-4fbf-b59e-0869a44adb64.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/ce15fd63-b0b6-463c-a37d-ea6393208b3e.tga b/linden/indra/newview/skins/silver/textures/ce15fd63-b0b6-463c-a37d-ea6393208b3e.tga
new file mode 100644
index 0000000..50d686f
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/ce15fd63-b0b6-463c-a37d-ea6393208b3e.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/checkbox_disabled_false.tga b/linden/indra/newview/skins/silver/textures/checkbox_disabled_false.tga
new file mode 100644
index 0000000..074ded7
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/checkbox_disabled_false.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/checkbox_disabled_true.tga b/linden/indra/newview/skins/silver/textures/checkbox_disabled_true.tga
new file mode 100644
index 0000000..79d2590
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/checkbox_disabled_true.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/checkbox_enabled_false.tga b/linden/indra/newview/skins/silver/textures/checkbox_enabled_false.tga
new file mode 100644
index 0000000..8e5796f
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/checkbox_enabled_false.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/checkbox_enabled_true.tga b/linden/indra/newview/skins/silver/textures/checkbox_enabled_true.tga
new file mode 100644
index 0000000..175b07d
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/checkbox_enabled_true.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/close_in_blue.tga b/linden/indra/newview/skins/silver/textures/close_in_blue.tga
new file mode 100644
index 0000000..69f3831
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/close_in_blue.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/close_inactive_blue.tga b/linden/indra/newview/skins/silver/textures/close_inactive_blue.tga
new file mode 100644
index 0000000..fcd62aa
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/close_inactive_blue.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/closebox.tga b/linden/indra/newview/skins/silver/textures/closebox.tga
new file mode 100644
index 0000000..616dc48
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/closebox.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/combobox_arrow.tga b/linden/indra/newview/skins/silver/textures/combobox_arrow.tga
new file mode 100644
index 0000000..0f3efe9
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/combobox_arrow.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/darkgray.tga b/linden/indra/newview/skins/silver/textures/darkgray.tga
new file mode 100644
index 0000000..e69be08
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/darkgray.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/down_arrow.png b/linden/indra/newview/skins/silver/textures/down_arrow.png
new file mode 100644
index 0000000..ea89b50
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/down_arrow.png
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/eye_button_active.tga b/linden/indra/newview/skins/silver/textures/eye_button_active.tga
new file mode 100644
index 0000000..5c849eb
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/eye_button_active.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/eye_button_inactive.tga b/linden/indra/newview/skins/silver/textures/eye_button_inactive.tga
new file mode 100644
index 0000000..82809c2
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/eye_button_inactive.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/ff9a71eb-7414-4cf8-866e-a701deb7c3cf.tga b/linden/indra/newview/skins/silver/textures/ff9a71eb-7414-4cf8-866e-a701deb7c3cf.tga
new file mode 100644
index 0000000..ac9213b
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/ff9a71eb-7414-4cf8-866e-a701deb7c3cf.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/ff_edit_mine_button.tga b/linden/indra/newview/skins/silver/textures/ff_edit_mine_button.tga
new file mode 100644
index 0000000..4d54e42
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/ff_edit_mine_button.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/ff_edit_theirs_button.tga b/linden/indra/newview/skins/silver/textures/ff_edit_theirs_button.tga
new file mode 100644
index 0000000..1fc2f04
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/ff_edit_theirs_button.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/ff_online_status_button.tga b/linden/indra/newview/skins/silver/textures/ff_online_status_button.tga
new file mode 100644
index 0000000..5772a94
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/ff_online_status_button.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/ff_visible_map_button.tga b/linden/indra/newview/skins/silver/textures/ff_visible_map_button.tga
new file mode 100644
index 0000000..be1ef1e
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/ff_visible_map_button.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/ff_visible_online_button.tga b/linden/indra/newview/skins/silver/textures/ff_visible_online_button.tga
new file mode 100644
index 0000000..e27c2f6
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/ff_visible_online_button.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/flyout_btn_left.tga b/linden/indra/newview/skins/silver/textures/flyout_btn_left.tga
new file mode 100644
index 0000000..6263f6e
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/flyout_btn_left.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/flyout_btn_left_disabled.tga b/linden/indra/newview/skins/silver/textures/flyout_btn_left_disabled.tga
new file mode 100644
index 0000000..a63c8c0
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/flyout_btn_left_disabled.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/flyout_btn_left_selected.tga b/linden/indra/newview/skins/silver/textures/flyout_btn_left_selected.tga
new file mode 100644
index 0000000..c22a71b
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/flyout_btn_left_selected.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/flyout_btn_right.tga b/linden/indra/newview/skins/silver/textures/flyout_btn_right.tga
new file mode 100644
index 0000000..b86451f
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/flyout_btn_right.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/flyout_btn_right_disabled.tga b/linden/indra/newview/skins/silver/textures/flyout_btn_right_disabled.tga
new file mode 100644
index 0000000..c4efcaa
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/flyout_btn_right_disabled.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/flyout_btn_right_selected.tga b/linden/indra/newview/skins/silver/textures/flyout_btn_right_selected.tga
new file mode 100644
index 0000000..e6d79e2
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/flyout_btn_right_selected.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_chatbar.tga b/linden/indra/newview/skins/silver/textures/icn_chatbar.tga
new file mode 100644
index 0000000..67662f7
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_chatbar.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_label_media.tga b/linden/indra/newview/skins/silver/textures/icn_label_media.tga
new file mode 100644
index 0000000..603d607
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_label_media.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_label_music.tga b/linden/indra/newview/skins/silver/textures/icn_label_music.tga
new file mode 100644
index 0000000..9acf8f4
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_label_music.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_label_web.tga b/linden/indra/newview/skins/silver/textures/icn_label_web.tga
new file mode 100644
index 0000000..577fc02
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_label_web.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_media-pause.tga b/linden/indra/newview/skins/silver/textures/icn_media-pause.tga
new file mode 100644
index 0000000..a2cfeee
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_media-pause.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_media-play.tga b/linden/indra/newview/skins/silver/textures/icn_media-play.tga
new file mode 100644
index 0000000..c810318
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_media-play.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_media_movie.tga b/linden/indra/newview/skins/silver/textures/icn_media_movie.tga
new file mode 100644
index 0000000..603d607
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_media_movie.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_media_web.tga b/linden/indra/newview/skins/silver/textures/icn_media_web.tga
new file mode 100644
index 0000000..bf962ae
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_media_web.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_music-pause.tga b/linden/indra/newview/skins/silver/textures/icn_music-pause.tga
new file mode 100644
index 0000000..cfa092c
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_music-pause.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_music-play.tga b/linden/indra/newview/skins/silver/textures/icn_music-play.tga
new file mode 100644
index 0000000..1854abc
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_music-play.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_pause.tga b/linden/indra/newview/skins/silver/textures/icn_pause.tga
new file mode 100644
index 0000000..2808510
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_pause.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_play.tga b/linden/indra/newview/skins/silver/textures/icn_play.tga
new file mode 100644
index 0000000..0833398
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_play.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_rounded-text-field.tga b/linden/indra/newview/skins/silver/textures/icn_rounded-text-field.tga
new file mode 100644
index 0000000..20953ad
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_rounded-text-field.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_slide-groove_dark.tga b/linden/indra/newview/skins/silver/textures/icn_slide-groove_dark.tga
new file mode 100644
index 0000000..5ce7a9b
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_slide-groove_dark.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_slide-highlight.tga b/linden/indra/newview/skins/silver/textures/icn_slide-highlight.tga
new file mode 100644
index 0000000..e626c5a
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_slide-highlight.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_slide-thumb_dark.tga b/linden/indra/newview/skins/silver/textures/icn_slide-thumb_dark.tga
new file mode 100644
index 0000000..86c6e59
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_slide-thumb_dark.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_speaker-muted_dark.tga b/linden/indra/newview/skins/silver/textures/icn_speaker-muted_dark.tga
new file mode 100644
index 0000000..0a4bb99
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_speaker-muted_dark.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_speaker_dark.tga b/linden/indra/newview/skins/silver/textures/icn_speaker_dark.tga
new file mode 100644
index 0000000..d19ce60
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_speaker_dark.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_stop.tga b/linden/indra/newview/skins/silver/textures/icn_stop.tga
new file mode 100644
index 0000000..c7f12f2
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_stop.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_toolbar_build.tga b/linden/indra/newview/skins/silver/textures/icn_toolbar_build.tga
new file mode 100644
index 0000000..3a56ea7
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_toolbar_build.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_toolbar_fly.tga b/linden/indra/newview/skins/silver/textures/icn_toolbar_fly.tga
new file mode 100644
index 0000000..da3d694
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_toolbar_fly.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_toolbar_inventory.tga b/linden/indra/newview/skins/silver/textures/icn_toolbar_inventory.tga
new file mode 100644
index 0000000..3197c08
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_toolbar_inventory.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_toolbar_map.tga b/linden/indra/newview/skins/silver/textures/icn_toolbar_map.tga
new file mode 100644
index 0000000..ba7bf97
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_toolbar_map.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_toolbar_minimap.tga b/linden/indra/newview/skins/silver/textures/icn_toolbar_minimap.tga
new file mode 100644
index 0000000..d574584
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_toolbar_minimap.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_toolbar_search.tga b/linden/indra/newview/skins/silver/textures/icn_toolbar_search.tga
new file mode 100644
index 0000000..bf1702e
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_toolbar_search.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_toolbar_snapshot.tga b/linden/indra/newview/skins/silver/textures/icn_toolbar_snapshot.tga
new file mode 100644
index 0000000..e8bfaa7
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_toolbar_snapshot.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_voice-call-end.tga b/linden/indra/newview/skins/silver/textures/icn_voice-call-end.tga
new file mode 100644
index 0000000..7792bc1
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_voice-call-end.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_voice-call-start.tga b/linden/indra/newview/skins/silver/textures/icn_voice-call-start.tga
new file mode 100644
index 0000000..062820b
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_voice-call-start.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_voice-groupfocus.tga b/linden/indra/newview/skins/silver/textures/icn_voice-groupfocus.tga
new file mode 100644
index 0000000..6d49ede
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_voice-groupfocus.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_voice-localchat.tga b/linden/indra/newview/skins/silver/textures/icn_voice-localchat.tga
new file mode 100644
index 0000000..8a377c1
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_voice-localchat.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_voice-pvtfocus.tga b/linden/indra/newview/skins/silver/textures/icn_voice-pvtfocus.tga
new file mode 100644
index 0000000..d858245
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_voice-pvtfocus.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_voice_ptt-off.tga b/linden/indra/newview/skins/silver/textures/icn_voice_ptt-off.tga
new file mode 100644
index 0000000..d7e9cd2
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_voice_ptt-off.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_voice_ptt-on-lvl1.tga b/linden/indra/newview/skins/silver/textures/icn_voice_ptt-on-lvl1.tga
new file mode 100644
index 0000000..99c9a71
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_voice_ptt-on-lvl1.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_voice_ptt-on-lvl2.tga b/linden/indra/newview/skins/silver/textures/icn_voice_ptt-on-lvl2.tga
new file mode 100644
index 0000000..26ae300
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_voice_ptt-on-lvl2.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_voice_ptt-on-lvl3.tga b/linden/indra/newview/skins/silver/textures/icn_voice_ptt-on-lvl3.tga
new file mode 100644
index 0000000..4b8f5a2
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_voice_ptt-on-lvl3.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icn_voice_ptt-on.tga b/linden/indra/newview/skins/silver/textures/icn_voice_ptt-on.tga
new file mode 100644
index 0000000..b712c81
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icn_voice_ptt-on.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icon_auction.tga b/linden/indra/newview/skins/silver/textures/icon_auction.tga
new file mode 100644
index 0000000..76d1227
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icon_auction.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icon_avatar_offline.tga b/linden/indra/newview/skins/silver/textures/icon_avatar_offline.tga
new file mode 100644
index 0000000..ea6a076
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icon_avatar_offline.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icon_avatar_online.tga b/linden/indra/newview/skins/silver/textures/icon_avatar_online.tga
new file mode 100644
index 0000000..13f8da8
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icon_avatar_online.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icon_day_cycle.tga b/linden/indra/newview/skins/silver/textures/icon_day_cycle.tga
new file mode 100644
index 0000000..98927fc
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icon_day_cycle.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icon_event.tga b/linden/indra/newview/skins/silver/textures/icon_event.tga
new file mode 100644
index 0000000..2c06d08
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icon_event.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icon_event_mature.tga b/linden/indra/newview/skins/silver/textures/icon_event_mature.tga
new file mode 100644
index 0000000..71067c0
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icon_event_mature.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icon_for_sale.tga b/linden/indra/newview/skins/silver/textures/icon_for_sale.tga
new file mode 100644
index 0000000..cb7f313
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icon_for_sale.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icon_group.tga b/linden/indra/newview/skins/silver/textures/icon_group.tga
new file mode 100644
index 0000000..faecb81
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icon_group.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icon_groupnotice.tga b/linden/indra/newview/skins/silver/textures/icon_groupnotice.tga
new file mode 100644
index 0000000..115e4e2
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icon_groupnotice.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icon_groupnoticeinventory.tga b/linden/indra/newview/skins/silver/textures/icon_groupnoticeinventory.tga
new file mode 100644
index 0000000..f713020
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icon_groupnoticeinventory.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icon_lock.tga b/linden/indra/newview/skins/silver/textures/icon_lock.tga
new file mode 100644
index 0000000..98d8a2d
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icon_lock.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/icon_top_pick.tga b/linden/indra/newview/skins/silver/textures/icon_top_pick.tga
new file mode 100644
index 0000000..0b34882
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/icon_top_pick.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_folder_animation.tga b/linden/indra/newview/skins/silver/textures/inv_folder_animation.tga
new file mode 100644
index 0000000..7466825
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_folder_animation.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_folder_bodypart.tga b/linden/indra/newview/skins/silver/textures/inv_folder_bodypart.tga
new file mode 100644
index 0000000..3262605
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_folder_bodypart.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_folder_callingcard.tga b/linden/indra/newview/skins/silver/textures/inv_folder_callingcard.tga
new file mode 100644
index 0000000..d7e0ab7
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_folder_callingcard.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_folder_clothing.tga b/linden/indra/newview/skins/silver/textures/inv_folder_clothing.tga
new file mode 100644
index 0000000..bce4a65
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_folder_clothing.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_folder_gesture.tga b/linden/indra/newview/skins/silver/textures/inv_folder_gesture.tga
new file mode 100644
index 0000000..9392256
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_folder_gesture.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_folder_landmark.tga b/linden/indra/newview/skins/silver/textures/inv_folder_landmark.tga
new file mode 100644
index 0000000..0f57ccf
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_folder_landmark.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_folder_lostandfound.tga b/linden/indra/newview/skins/silver/textures/inv_folder_lostandfound.tga
new file mode 100644
index 0000000..1285c25
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_folder_lostandfound.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_folder_notecard.tga b/linden/indra/newview/skins/silver/textures/inv_folder_notecard.tga
new file mode 100644
index 0000000..daebd14
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_folder_notecard.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_folder_object.tga b/linden/indra/newview/skins/silver/textures/inv_folder_object.tga
new file mode 100644
index 0000000..f3e9ea0
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_folder_object.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_folder_plain_closed.tga b/linden/indra/newview/skins/silver/textures/inv_folder_plain_closed.tga
new file mode 100644
index 0000000..84d116a
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_folder_plain_closed.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_folder_plain_open.tga b/linden/indra/newview/skins/silver/textures/inv_folder_plain_open.tga
new file mode 100644
index 0000000..d536448
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_folder_plain_open.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_folder_script.tga b/linden/indra/newview/skins/silver/textures/inv_folder_script.tga
new file mode 100644
index 0000000..b8a04e4
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_folder_script.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_folder_snapshot.tga b/linden/indra/newview/skins/silver/textures/inv_folder_snapshot.tga
new file mode 100644
index 0000000..468ec2c
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_folder_snapshot.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_folder_sound.tga b/linden/indra/newview/skins/silver/textures/inv_folder_sound.tga
new file mode 100644
index 0000000..c58300b
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_folder_sound.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_folder_texture.tga b/linden/indra/newview/skins/silver/textures/inv_folder_texture.tga
new file mode 100644
index 0000000..6a321cf
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_folder_texture.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_folder_trash.tga b/linden/indra/newview/skins/silver/textures/inv_folder_trash.tga
new file mode 100644
index 0000000..7aa6b93
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_folder_trash.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_item_animation.tga b/linden/indra/newview/skins/silver/textures/inv_item_animation.tga
new file mode 100644
index 0000000..637033a
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_item_animation.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_item_attach.tga b/linden/indra/newview/skins/silver/textures/inv_item_attach.tga
new file mode 100644
index 0000000..55469f6
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_item_attach.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_item_callingcard_offline.tga b/linden/indra/newview/skins/silver/textures/inv_item_callingcard_offline.tga
new file mode 100644
index 0000000..ad8658c
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_item_callingcard_offline.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_item_callingcard_online.tga b/linden/indra/newview/skins/silver/textures/inv_item_callingcard_online.tga
new file mode 100644
index 0000000..9660601
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_item_callingcard_online.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_item_clothing.tga b/linden/indra/newview/skins/silver/textures/inv_item_clothing.tga
new file mode 100644
index 0000000..b786426
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_item_clothing.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_item_eyes.tga b/linden/indra/newview/skins/silver/textures/inv_item_eyes.tga
new file mode 100644
index 0000000..18e8368
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_item_eyes.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_item_gesture.tga b/linden/indra/newview/skins/silver/textures/inv_item_gesture.tga
new file mode 100644
index 0000000..a6fe629
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_item_gesture.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_item_gloves.tga b/linden/indra/newview/skins/silver/textures/inv_item_gloves.tga
new file mode 100644
index 0000000..bcc6aee
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_item_gloves.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_item_hair.tga b/linden/indra/newview/skins/silver/textures/inv_item_hair.tga
new file mode 100644
index 0000000..686214e
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_item_hair.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_item_jacket.tga b/linden/indra/newview/skins/silver/textures/inv_item_jacket.tga
new file mode 100644
index 0000000..69c5f07
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_item_jacket.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_item_landmark.tga b/linden/indra/newview/skins/silver/textures/inv_item_landmark.tga
new file mode 100644
index 0000000..833d4e6
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_item_landmark.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_item_landmark_visited.tga b/linden/indra/newview/skins/silver/textures/inv_item_landmark_visited.tga
new file mode 100644
index 0000000..283f0ec
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_item_landmark_visited.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_item_notecard.tga b/linden/indra/newview/skins/silver/textures/inv_item_notecard.tga
new file mode 100644
index 0000000..0ad68d0
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_item_notecard.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_item_object.tga b/linden/indra/newview/skins/silver/textures/inv_item_object.tga
new file mode 100644
index 0000000..c749105
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_item_object.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_item_object_multi.tga b/linden/indra/newview/skins/silver/textures/inv_item_object_multi.tga
new file mode 100644
index 0000000..4b3a590
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_item_object_multi.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_item_pants.tga b/linden/indra/newview/skins/silver/textures/inv_item_pants.tga
new file mode 100644
index 0000000..38dbc57
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_item_pants.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_item_script.tga b/linden/indra/newview/skins/silver/textures/inv_item_script.tga
new file mode 100644
index 0000000..1203e8a
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_item_script.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_item_shape.tga b/linden/indra/newview/skins/silver/textures/inv_item_shape.tga
new file mode 100644
index 0000000..2e8a5a7
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_item_shape.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_item_shirt.tga b/linden/indra/newview/skins/silver/textures/inv_item_shirt.tga
new file mode 100644
index 0000000..8c6f5eb
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_item_shirt.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_item_shoes.tga b/linden/indra/newview/skins/silver/textures/inv_item_shoes.tga
new file mode 100644
index 0000000..ac7a2b0
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_item_shoes.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_item_skin.tga b/linden/indra/newview/skins/silver/textures/inv_item_skin.tga
new file mode 100644
index 0000000..ab4169f
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_item_skin.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_item_skirt.tga b/linden/indra/newview/skins/silver/textures/inv_item_skirt.tga
new file mode 100644
index 0000000..4476040
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_item_skirt.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_item_snapshot.tga b/linden/indra/newview/skins/silver/textures/inv_item_snapshot.tga
new file mode 100644
index 0000000..3adf4e5
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_item_snapshot.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_item_socks.tga b/linden/indra/newview/skins/silver/textures/inv_item_socks.tga
new file mode 100644
index 0000000..2d7bb7e
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_item_socks.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_item_sound.tga b/linden/indra/newview/skins/silver/textures/inv_item_sound.tga
new file mode 100644
index 0000000..7ef9052
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_item_sound.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_item_texture.tga b/linden/indra/newview/skins/silver/textures/inv_item_texture.tga
new file mode 100644
index 0000000..6b4269d
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_item_texture.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_item_underpants.tga b/linden/indra/newview/skins/silver/textures/inv_item_underpants.tga
new file mode 100644
index 0000000..f679e34
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_item_underpants.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/inv_item_undershirt.tga b/linden/indra/newview/skins/silver/textures/inv_item_undershirt.tga
new file mode 100644
index 0000000..359e3d7
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/inv_item_undershirt.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/lightgray.tga b/linden/indra/newview/skins/silver/textures/lightgray.tga
new file mode 100644
index 0000000..e69be08
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/lightgray.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/map_avatar_16.tga b/linden/indra/newview/skins/silver/textures/map_avatar_16.tga
new file mode 100644
index 0000000..f59e9e9
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/map_avatar_16.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/map_avatar_you_8.tga b/linden/indra/newview/skins/silver/textures/map_avatar_you_8.tga
new file mode 100644
index 0000000..8500ead
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/map_avatar_you_8.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/map_event.tga b/linden/indra/newview/skins/silver/textures/map_event.tga
new file mode 100644
index 0000000..2c06d08
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/map_event.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/map_event_adult.tga b/linden/indra/newview/skins/silver/textures/map_event_adult.tga
new file mode 100644
index 0000000..f548126
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/map_event_adult.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/map_event_mature.tga b/linden/indra/newview/skins/silver/textures/map_event_mature.tga
new file mode 100644
index 0000000..71067c0
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/map_event_mature.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/map_home.tga b/linden/indra/newview/skins/silver/textures/map_home.tga
new file mode 100644
index 0000000..acaaa3d
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/map_home.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/map_infohub.tga b/linden/indra/newview/skins/silver/textures/map_infohub.tga
new file mode 100644
index 0000000..545b8e5
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/map_infohub.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/map_telehub.tga b/linden/indra/newview/skins/silver/textures/map_telehub.tga
new file mode 100644
index 0000000..57aa723
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/map_telehub.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/minimize.tga b/linden/indra/newview/skins/silver/textures/minimize.tga
new file mode 100644
index 0000000..c1ab0f9
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/minimize.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/minimize_inactive.tga b/linden/indra/newview/skins/silver/textures/minimize_inactive.tga
new file mode 100644
index 0000000..191c5d3
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/minimize_inactive.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/minimize_pressed.tga b/linden/indra/newview/skins/silver/textures/minimize_pressed.tga
new file mode 100644
index 0000000..07368e5
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/minimize_pressed.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/notify_next.png b/linden/indra/newview/skins/silver/textures/notify_next.png
new file mode 100644
index 0000000..b160ef7
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/notify_next.png
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/object_cone.tga b/linden/indra/newview/skins/silver/textures/object_cone.tga
new file mode 100644
index 0000000..1bbca75
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/object_cone.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/object_cone_active.tga b/linden/indra/newview/skins/silver/textures/object_cone_active.tga
new file mode 100644
index 0000000..7b8799d
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/object_cone_active.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/object_cube.tga b/linden/indra/newview/skins/silver/textures/object_cube.tga
new file mode 100644
index 0000000..c08f874
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/object_cube.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/object_cube_active.tga b/linden/indra/newview/skins/silver/textures/object_cube_active.tga
new file mode 100644
index 0000000..fac474e
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/object_cube_active.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/object_cylinder.tga b/linden/indra/newview/skins/silver/textures/object_cylinder.tga
new file mode 100644
index 0000000..271c841
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/object_cylinder.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/object_cylinder_active.tga b/linden/indra/newview/skins/silver/textures/object_cylinder_active.tga
new file mode 100644
index 0000000..5dc5c5e
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/object_cylinder_active.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/object_grass.tga b/linden/indra/newview/skins/silver/textures/object_grass.tga
new file mode 100644
index 0000000..3e6b8f8
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/object_grass.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/object_grass_active.tga b/linden/indra/newview/skins/silver/textures/object_grass_active.tga
new file mode 100644
index 0000000..98f84e5
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/object_grass_active.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/object_hemi_cone.tga b/linden/indra/newview/skins/silver/textures/object_hemi_cone.tga
new file mode 100644
index 0000000..7b7cc63
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/object_hemi_cone.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/object_hemi_cone_active.tga b/linden/indra/newview/skins/silver/textures/object_hemi_cone_active.tga
new file mode 100644
index 0000000..eabec15
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/object_hemi_cone_active.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/object_hemi_cylinder.tga b/linden/indra/newview/skins/silver/textures/object_hemi_cylinder.tga
new file mode 100644
index 0000000..dc15140
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/object_hemi_cylinder.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/object_hemi_cylinder_active.tga b/linden/indra/newview/skins/silver/textures/object_hemi_cylinder_active.tga
new file mode 100644
index 0000000..8047d7f
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/object_hemi_cylinder_active.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/object_hemi_sphere.tga b/linden/indra/newview/skins/silver/textures/object_hemi_sphere.tga
new file mode 100644
index 0000000..9f21f3a
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/object_hemi_sphere.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/object_hemi_sphere_active.tga b/linden/indra/newview/skins/silver/textures/object_hemi_sphere_active.tga
new file mode 100644
index 0000000..c6d20e0
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/object_hemi_sphere_active.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/object_prism.tga b/linden/indra/newview/skins/silver/textures/object_prism.tga
new file mode 100644
index 0000000..489fa35
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/object_prism.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/object_prism_active.tga b/linden/indra/newview/skins/silver/textures/object_prism_active.tga
new file mode 100644
index 0000000..b53b897
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/object_prism_active.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/object_pyramid.tga b/linden/indra/newview/skins/silver/textures/object_pyramid.tga
new file mode 100644
index 0000000..69a1d09
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/object_pyramid.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/object_pyramid_active.tga b/linden/indra/newview/skins/silver/textures/object_pyramid_active.tga
new file mode 100644
index 0000000..98aaade
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/object_pyramid_active.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/object_ring.tga b/linden/indra/newview/skins/silver/textures/object_ring.tga
new file mode 100644
index 0000000..4dd05e4
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/object_ring.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/object_ring_active.tga b/linden/indra/newview/skins/silver/textures/object_ring_active.tga
new file mode 100644
index 0000000..4e98b59
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/object_ring_active.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/object_sphere.tga b/linden/indra/newview/skins/silver/textures/object_sphere.tga
new file mode 100644
index 0000000..e6a41d5
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/object_sphere.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/object_sphere_active.tga b/linden/indra/newview/skins/silver/textures/object_sphere_active.tga
new file mode 100644
index 0000000..33c944a
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/object_sphere_active.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/object_tetrahedron.tga b/linden/indra/newview/skins/silver/textures/object_tetrahedron.tga
new file mode 100644
index 0000000..01e02cd
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/object_tetrahedron.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/object_tetrahedron_active.tga b/linden/indra/newview/skins/silver/textures/object_tetrahedron_active.tga
new file mode 100644
index 0000000..3e30a7c
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/object_tetrahedron_active.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/object_torus.tga b/linden/indra/newview/skins/silver/textures/object_torus.tga
new file mode 100644
index 0000000..8c9f665
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/object_torus.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/object_torus_active.tga b/linden/indra/newview/skins/silver/textures/object_torus_active.tga
new file mode 100644
index 0000000..53d2da8
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/object_torus_active.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/object_tree.tga b/linden/indra/newview/skins/silver/textures/object_tree.tga
new file mode 100644
index 0000000..dc427e9
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/object_tree.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/object_tree_active.tga b/linden/indra/newview/skins/silver/textures/object_tree_active.tga
new file mode 100644
index 0000000..36509fd
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/object_tree_active.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/object_tube.tga b/linden/indra/newview/skins/silver/textures/object_tube.tga
new file mode 100644
index 0000000..b53d1e9
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/object_tube.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/object_tube_active.tga b/linden/indra/newview/skins/silver/textures/object_tube_active.tga
new file mode 100644
index 0000000..c990b0b
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/object_tube_active.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/progressbar_fill.tga b/linden/indra/newview/skins/silver/textures/progressbar_fill.tga
new file mode 100644
index 0000000..f078013
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/progressbar_fill.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/progressbar_track.tga b/linden/indra/newview/skins/silver/textures/progressbar_track.tga
new file mode 100644
index 0000000..2057071
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/progressbar_track.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/ptt_lock_off.tga b/linden/indra/newview/skins/silver/textures/ptt_lock_off.tga
new file mode 100644
index 0000000..d15ce1f
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/ptt_lock_off.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/ptt_lock_on.tga b/linden/indra/newview/skins/silver/textures/ptt_lock_on.tga
new file mode 100644
index 0000000..1e21fce
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/ptt_lock_on.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/radio_active_false.tga b/linden/indra/newview/skins/silver/textures/radio_active_false.tga
new file mode 100644
index 0000000..02043ae
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/radio_active_false.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/radio_active_true.tga b/linden/indra/newview/skins/silver/textures/radio_active_true.tga
new file mode 100644
index 0000000..bf1035a
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/radio_active_true.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/radio_inactive_false.tga b/linden/indra/newview/skins/silver/textures/radio_inactive_false.tga
new file mode 100644
index 0000000..48a9342
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/radio_inactive_false.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/radio_inactive_true.tga b/linden/indra/newview/skins/silver/textures/radio_inactive_true.tga
new file mode 100644
index 0000000..785b3fa
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/radio_inactive_true.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/resize_handle_bottom_right_blue.tga b/linden/indra/newview/skins/silver/textures/resize_handle_bottom_right_blue.tga
new file mode 100644
index 0000000..6c3a6ad
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/resize_handle_bottom_right_blue.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/restore.tga b/linden/indra/newview/skins/silver/textures/restore.tga
new file mode 100644
index 0000000..8263ae1
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/restore.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/restore_inactive.tga b/linden/indra/newview/skins/silver/textures/restore_inactive.tga
new file mode 100644
index 0000000..191c5d3
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/restore_inactive.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/restore_pressed.tga b/linden/indra/newview/skins/silver/textures/restore_pressed.tga
new file mode 100644
index 0000000..aa44394
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/restore_pressed.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/rounded_square.tga b/linden/indra/newview/skins/silver/textures/rounded_square.tga
new file mode 100644
index 0000000..c8fc7b7
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/rounded_square.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/rounded_square_soft.tga b/linden/indra/newview/skins/silver/textures/rounded_square_soft.tga
new file mode 100644
index 0000000..0e5bc79
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/rounded_square_soft.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/scrollbutton_down_in_blue.tga b/linden/indra/newview/skins/silver/textures/scrollbutton_down_in_blue.tga
new file mode 100644
index 0000000..fd870b5
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/scrollbutton_down_in_blue.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/scrollbutton_down_out_blue.tga b/linden/indra/newview/skins/silver/textures/scrollbutton_down_out_blue.tga
new file mode 100644
index 0000000..1f95b34
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/scrollbutton_down_out_blue.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/scrollbutton_left_in_blue.tga b/linden/indra/newview/skins/silver/textures/scrollbutton_left_in_blue.tga
new file mode 100644
index 0000000..595fd59
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/scrollbutton_left_in_blue.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/scrollbutton_left_out_blue.tga b/linden/indra/newview/skins/silver/textures/scrollbutton_left_out_blue.tga
new file mode 100644
index 0000000..86c0987
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/scrollbutton_left_out_blue.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/scrollbutton_right_in_blue.tga b/linden/indra/newview/skins/silver/textures/scrollbutton_right_in_blue.tga
new file mode 100644
index 0000000..790e515
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/scrollbutton_right_in_blue.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/scrollbutton_right_out_blue.tga b/linden/indra/newview/skins/silver/textures/scrollbutton_right_out_blue.tga
new file mode 100644
index 0000000..4f37667
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/scrollbutton_right_out_blue.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/scrollbutton_up_in_blue.tga b/linden/indra/newview/skins/silver/textures/scrollbutton_up_in_blue.tga
new file mode 100644
index 0000000..4955af7
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/scrollbutton_up_in_blue.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/scrollbutton_up_out_blue.tga b/linden/indra/newview/skins/silver/textures/scrollbutton_up_out_blue.tga
new file mode 100644
index 0000000..e66696b
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/scrollbutton_up_out_blue.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/sm_rounded_corners_simple.tga b/linden/indra/newview/skins/silver/textures/sm_rounded_corners_simple.tga
new file mode 100644
index 0000000..30bbbb4
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/sm_rounded_corners_simple.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/spin_down_in_blue.tga b/linden/indra/newview/skins/silver/textures/spin_down_in_blue.tga
new file mode 100644
index 0000000..ce8576a
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/spin_down_in_blue.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/spin_down_out_blue.tga b/linden/indra/newview/skins/silver/textures/spin_down_out_blue.tga
new file mode 100644
index 0000000..ff53284
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/spin_down_out_blue.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/spin_up_in_blue.tga b/linden/indra/newview/skins/silver/textures/spin_up_in_blue.tga
new file mode 100644
index 0000000..de36da6
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/spin_up_in_blue.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/spin_up_out_blue.tga b/linden/indra/newview/skins/silver/textures/spin_up_out_blue.tga
new file mode 100644
index 0000000..743d2c5
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/spin_up_out_blue.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/square_btn_32x128.tga b/linden/indra/newview/skins/silver/textures/square_btn_32x128.tga
new file mode 100644
index 0000000..e14e45b
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/square_btn_32x128.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/square_btn_selected_32x128.tga b/linden/indra/newview/skins/silver/textures/square_btn_selected_32x128.tga
new file mode 100644
index 0000000..749c0f4
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/square_btn_selected_32x128.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/startup_logo.j2c b/linden/indra/newview/skins/silver/textures/startup_logo.j2c
new file mode 100644
index 0000000..e3332cb
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/startup_logo.j2c
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/status_buy_currency.tga b/linden/indra/newview/skins/silver/textures/status_buy_currency.tga
new file mode 100644
index 0000000..9898005
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/status_buy_currency.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/status_buy_currency_pressed.tga b/linden/indra/newview/skins/silver/textures/status_buy_currency_pressed.tga
new file mode 100644
index 0000000..9d5d164
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/status_buy_currency_pressed.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/status_buy_land.tga b/linden/indra/newview/skins/silver/textures/status_buy_land.tga
new file mode 100644
index 0000000..dded697
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/status_buy_land.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/status_buy_land_pressed.tga b/linden/indra/newview/skins/silver/textures/status_buy_land_pressed.tga
new file mode 100644
index 0000000..f5c5fba
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/status_buy_land_pressed.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/status_health.tga b/linden/indra/newview/skins/silver/textures/status_health.tga
new file mode 100644
index 0000000..c29a965
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/status_health.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/status_no_build.tga b/linden/indra/newview/skins/silver/textures/status_no_build.tga
new file mode 100644
index 0000000..fbd463f
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/status_no_build.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/status_no_fly.tga b/linden/indra/newview/skins/silver/textures/status_no_fly.tga
new file mode 100644
index 0000000..d93c531
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/status_no_fly.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/status_no_push.tga b/linden/indra/newview/skins/silver/textures/status_no_push.tga
new file mode 100644
index 0000000..578f0d9
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/status_no_push.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/status_no_scripts.tga b/linden/indra/newview/skins/silver/textures/status_no_scripts.tga
new file mode 100644
index 0000000..a020f4c
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/status_no_scripts.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/status_no_voice.tga b/linden/indra/newview/skins/silver/textures/status_no_voice.tga
new file mode 100644
index 0000000..9e34801
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/status_no_voice.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/status_search.tga b/linden/indra/newview/skins/silver/textures/status_search.tga
new file mode 100644
index 0000000..12de046
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/status_search.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/status_voice.tga b/linden/indra/newview/skins/silver/textures/status_voice.tga
new file mode 100644
index 0000000..9e34801
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/status_voice.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/tab_bottom_blue.tga b/linden/indra/newview/skins/silver/textures/tab_bottom_blue.tga
new file mode 100644
index 0000000..1c68257
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/tab_bottom_blue.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/tab_bottom_selected_blue.tga b/linden/indra/newview/skins/silver/textures/tab_bottom_selected_blue.tga
new file mode 100644
index 0000000..60887a8
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/tab_bottom_selected_blue.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/tab_left.tga b/linden/indra/newview/skins/silver/textures/tab_left.tga
new file mode 100644
index 0000000..b2cd44b
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/tab_left.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/tab_left_selected.tga b/linden/indra/newview/skins/silver/textures/tab_left_selected.tga
new file mode 100644
index 0000000..3c959a2
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/tab_left_selected.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/tab_top_blue.tga b/linden/indra/newview/skins/silver/textures/tab_top_blue.tga
new file mode 100644
index 0000000..f522c86
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/tab_top_blue.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/tab_top_selected_blue.tga b/linden/indra/newview/skins/silver/textures/tab_top_selected_blue.tga
new file mode 100644
index 0000000..66d3541
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/tab_top_selected_blue.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/tearoff_pressed.tga b/linden/indra/newview/skins/silver/textures/tearoff_pressed.tga
new file mode 100644
index 0000000..cea2fdc
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/tearoff_pressed.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/tearoffbox.tga b/linden/indra/newview/skins/silver/textures/tearoffbox.tga
new file mode 100644
index 0000000..6a11c07
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/tearoffbox.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/tool_dozer.tga b/linden/indra/newview/skins/silver/textures/tool_dozer.tga
new file mode 100644
index 0000000..0bb1a2e
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/tool_dozer.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/tool_dozer_active.tga b/linden/indra/newview/skins/silver/textures/tool_dozer_active.tga
new file mode 100644
index 0000000..faf232d
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/tool_dozer_active.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/tool_zoom.tga b/linden/indra/newview/skins/silver/textures/tool_zoom.tga
new file mode 100644
index 0000000..0a467b7
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/tool_zoom.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/tool_zoom_active.tga b/linden/indra/newview/skins/silver/textures/tool_zoom_active.tga
new file mode 100644
index 0000000..cee7e50
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/tool_zoom_active.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/toolbar_bg.tga b/linden/indra/newview/skins/silver/textures/toolbar_bg.tga
new file mode 100644
index 0000000..d4525d1
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/toolbar_bg.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/toolbar_btn_disabled.tga b/linden/indra/newview/skins/silver/textures/toolbar_btn_disabled.tga
new file mode 100644
index 0000000..9be524e
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/toolbar_btn_disabled.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/toolbar_btn_enabled.tga b/linden/indra/newview/skins/silver/textures/toolbar_btn_enabled.tga
new file mode 100644
index 0000000..6cd80b4
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/toolbar_btn_enabled.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/toolbar_btn_selected.tga b/linden/indra/newview/skins/silver/textures/toolbar_btn_selected.tga
new file mode 100644
index 0000000..d1d63f3
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/toolbar_btn_selected.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/toolbar_tab.tga b/linden/indra/newview/skins/silver/textures/toolbar_tab.tga
new file mode 100644
index 0000000..e241f2e
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/toolbar_tab.tga
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/up_arrow.png b/linden/indra/newview/skins/silver/textures/up_arrow.png
new file mode 100644
index 0000000..31f1c38
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/up_arrow.png
Binary files differ
diff --git a/linden/indra/newview/skins/silver/textures/white.tga b/linden/indra/newview/skins/silver/textures/white.tga
new file mode 100644
index 0000000..55e3793
--- /dev/null
+++ b/linden/indra/newview/skins/silver/textures/white.tga
Binary files differ
diff --git a/linden/indra/newview/viewer_manifest.py b/linden/indra/newview/viewer_manifest.py
index e350af0..b67af99 100755
--- a/linden/indra/newview/viewer_manifest.py
+++ b/linden/indra/newview/viewer_manifest.py
@@ -232,21 +232,15 @@ class WindowsManifest(ViewerManifest):
232 232
233 def construct(self): 233 def construct(self):
234 super(WindowsManifest, self).construct() 234 super(WindowsManifest, self).construct()
235 # the final exe is complicated because we're not sure where it's coming from, 235 # Come out, come out, where ever you are.
236 # nor do we have a fixed name for the executable 236 executable = self.find_existing_file('release/meta-impy-bin.exe', 'releasesse2/meta-impy-bin.exe', 'relwithdebinfo/meta-impy-bin.exe', 'debug/meta-impy-bin.exe', './meta-impy-bin.exe')
237 # Actually, we know on both counts -- MC 237 nmake = False
238 if self.configuration().lower() == "release": 238 self.path(executable, dst=self.final_exe())
239 self.path(self.find_existing_file('release/meta-impy-bin.exe'), dst=self.final_exe())
240 elif self.configuration().lower() == "releasesse2":
241 self.path(self.find_existing_file('releasesse2/meta-impy-bin.exe'), dst=self.final_exe())
242 elif self.configuration().lower() == "relwithdebinfo":
243 self.path(self.find_existing_file('relwithdebinfo/meta-impy-bin.exe'), dst=self.final_exe())
244 elif self.configuration().lower() == "debug":
245 self.path(self.find_existing_file('debug/meta-impy-bin.exe'), dst=self.final_exe())
246 else:
247 self.path(self.find_existing_file('release/meta-impy-bin.exe', 'releasesse2/meta-impy-bin.exe', 'relwithdebinfo/meta-impy-bin.exe', 'debug/meta-impy-bin.exe'), dst=self.final_exe())
248 239
249 # copy over the the pdb file for the regular or SSE2 versions if we don't already have one copied 240 # copy over the the pdb file for the regular or SSE2 versions if we don't already have one copied
241 # Don't think this ever worked, the destination seems bogus.
242 # It's trying to copy a built file outside of the source tree, a file we have anyway.
243 # TODO - do we even need this?
250 symbol_ver = '.'.join(self.args['version']) 244 symbol_ver = '.'.join(self.args['version'])
251 symbol_file = 'meta-impy-%s.%s.pdb' % (symbol_ver, self.args['configuration']) 245 symbol_file = 'meta-impy-%s.%s.pdb' % (symbol_ver, self.args['configuration'])
252 symbol_path = '../../../../../pdb_files/%s' % (symbol_file) 246 symbol_path = '../../../../../pdb_files/%s' % (symbol_file)
@@ -255,26 +249,28 @@ class WindowsManifest(ViewerManifest):
255 else: 249 else:
256 #print "%s doesn't exist yet" % (os.getcwd() + symbol_path) 250 #print "%s doesn't exist yet" % (os.getcwd() + symbol_path)
257 try: 251 try:
258 self.path(self.find_existing_file('release/meta-impy-bin.pdb'), dst="../%s" % (symbol_path)) 252 self.path(self.find_existing_file(executable.split('/', 1)[0] % '/meta-impy-bin.pdb'), dst="../%s" % (symbol_path))
259 pass 253 pass
260 except: 254 except:
261 print "Can't save symbol file %s, skipping" % (symbol_path) 255 print "Can't save symbol file %s, skipping" % (symbol_path)
262 pass 256 pass
263 257
264 self.gather_documents() 258 self.gather_documents()
265 259
266 if self.prefix("../..", dst="doc"): 260 if self.prefix("../..", dst="doc"):
267 self.path("LICENSE-libraries.txt") 261 self.path("LICENSE-libraries.txt")
268 self.end_prefix("../..") 262 self.end_prefix("../..")
269 263
270
271 self.path("meta-impy.url") 264 self.path("meta-impy.url")
272 265
273 # Plugin host application 266 # Plugin host application
274 self.path(os.path.join(os.pardir, 267 try:
275 'llplugin', 'slplugin', self.args['configuration'], "SLPlugin.exe"), 268 self.path(os.path.join(os.pardir, 'llplugin', 'slplugin', self.args['configuration'], "SLPlugin.exe"), "SLPlugin.exe")
276 "SLPlugin.exe") 269 except:
277 270 # Probably an nmake build, which is not putting exe's into the configuration folders.
271 self.path(os.path.join(os.pardir, 'llplugin', 'slplugin', "SLPlugin.exe"), "SLPlugin.exe")
272 # Propogate our wild guess.
273 nmake = True
278 274
279 self.path("featuretable.txt") 275 self.path("featuretable.txt")
280 276
@@ -283,17 +279,17 @@ class WindowsManifest(ViewerManifest):
283 279
284 # For using FMOD for sound... DJS 280 # For using FMOD for sound... DJS
285 #self.path("fmod.dll") 281 #self.path("fmod.dll")
286 282
287 # For spellchecking 283 # For spellchecking
288 if self.prefix(src=self.args['configuration'], dst=""): 284 if self.prefix(self.args['configuration'], dst=""):
289 self.path("libhunspell.dll") 285 self.path("libhunspell.dll")
290 self.end_prefix() 286 self.end_prefix()
291 287
292 # Copy the llkdu DSO .config 288 # Copy the llkdu DSO .config
293 self.path("llkdu.dll.2.config") 289 self.path("llkdu.dll.2.config")
294 290
295 # Get llcommon and deps. 291 # Get llcommon and deps.
296 if self.prefix(src=self.args['configuration'], dst=""): 292 if self.prefix(self.args['configuration'], dst=""):
297 self.path('libapr-1.dll') 293 self.path('libapr-1.dll')
298 self.path('libaprutil-1.dll') 294 self.path('libaprutil-1.dll')
299 self.path('libapriconv-1.dll') 295 self.path('libapriconv-1.dll')
@@ -309,23 +305,28 @@ class WindowsManifest(ViewerManifest):
309 if self.prefix(src="../../libraries/i686-win32/lib/release", dst=""): 305 if self.prefix(src="../../libraries/i686-win32/lib/release", dst=""):
310 self.path("openal32.dll") 306 self.path("openal32.dll")
311 self.path("alut.dll") 307 self.path("alut.dll")
312 self.end_prefix() 308 self.end_prefix()
313 309
310 # TODO - Yes, I know, would be better if nmake builds put stuff in the right place, track that down and fix it later.
311 if nmake:
312 config = ''
313 else:
314 config = self.args['configuration']
314 # Media plugins - QuickTime 315 # Media plugins - QuickTime
315 if self.prefix(src='../media_plugins/quicktime/%s' % self.args['configuration'], dst="llplugin"): 316 if self.prefix(src='../media_plugins/quicktime/%s' % config, dst="llplugin"):
316 self.path("media_plugin_quicktime.dll") 317 self.path("media_plugin_quicktime.dll")
317 self.end_prefix() 318 self.end_prefix()
318 319
319 # Media plugins - WebKit/Qt 320 # Media plugins - WebKit/Qt
320 if self.prefix(src='../media_plugins/webkit/%s' % self.args['configuration'], dst="llplugin"): 321 if self.prefix(src='../media_plugins/webkit/%s' % config, dst="llplugin"):
321 self.path("media_plugin_webkit.dll") 322 self.path("media_plugin_webkit.dll")
322 self.end_prefix() 323 self.end_prefix()
323 324
324 # Media plugins - GStreamer 325 # Media plugins - GStreamer
325 if self.prefix(src='../media_plugins/gstreamer010/%s' % self.args['configuration'], dst="llplugin"): 326 if self.prefix(src='../media_plugins/gstreamer010/%s' % config, dst="llplugin"):
326 self.path("media_plugin_gstreamer010.dll") 327 self.path("media_plugin_gstreamer010.dll")
327 self.end_prefix() 328 self.end_prefix()
328 329
329 # For WebKit/Qt plugin runtimes 330 # For WebKit/Qt plugin runtimes
330 if self.prefix(src="../../libraries/i686-win32/lib/release", dst="llplugin"): 331 if self.prefix(src="../../libraries/i686-win32/lib/release", dst="llplugin"):
331 self.path("libeay32.dll") 332 self.path("libeay32.dll")
@@ -476,13 +477,15 @@ class WindowsManifest(ViewerManifest):
476 sse_string = "-(SSE2-optimized)" 477 sse_string = "-(SSE2-optimized)"
477 478
478 version = '.'.join(self.args['version']) 479 version = '.'.join(self.args['version'])
479 base_filename = self.installer_prefix() + version + sse_string 480 version_number = version.split('-', 1)[0]
481 base_filename = self.installer_prefix() + version + "-Windows-x86" + sse_string
480 app_name = self.channel() 482 app_name = self.channel()
481 app_ver_name="%s %s" % (app_name, version) 483 app_ver_name="%s %s" % (app_name, version)
482 484
483 new_script = base_filename + ".iss" 485 new_script = base_filename + ".iss"
484 self.replace_in("installers/windows/meta-impy_installer_template.iss", new_script, { 486 self.replace_in("installers/windows/meta-impy_installer_template.iss", new_script, {
485 "%%VERSION%%":version, 487 "%%VERSION%%":version,
488 "%%VERSIONNUMBER%%":version_number,
486 "%%INSTALLERFILENAME%%":base_filename, 489 "%%INSTALLERFILENAME%%":base_filename,
487 "%%PACKAGEFILES%%":self.args['dest'], 490 "%%PACKAGEFILES%%":self.args['dest'],
488 "%%APPNAME%%":app_name, 491 "%%APPNAME%%":app_name,
@@ -1035,13 +1038,32 @@ class Linux_i686Manifest(LinuxManifest):
1035 #self.path("libgstvolume.so") 1038 #self.path("libgstvolume.so")
1036 #self.path("libgstvorbis.so") 1039 #self.path("libgstvorbis.so")
1037 #self.path("libgstwavparse.so") 1040 #self.path("libgstwavparse.so")
1038 1041
1039 #self.end_prefix("gstreamer-plugins") 1042 #self.end_prefix("gstreamer-plugins")
1040 1043
1041# [$PLOTR$] these two are not needed when STATIC_LIBOTR_ETC is on in .../linden/indra/CMakeLists.txt 1044# [$PLOTR$] these two are not needed when STATIC_LIBOTR_ETC is on in .../linden/indra/CMakeLists.txt
1042# self.path("libotr.so.2.2.0") 1045# self.path("libotr.so.2.2.0")
1043# self.path("libotr.so.2") 1046# self.path("libotr.so.2")
1044# [/$PLOTR$] 1047# [/$PLOTR$]
1048
1049 # Wish I could kill it with fire. lol
1050 self.path("libboost_date_time-mt.so")
1051 self.path("libboost_date_time-mt.so.1.52.0")
1052 self.path("libboost_filesystem-mt.so")
1053 self.path("libboost_filesystem-mt.so.1.52.0")
1054 self.path("libboost_iostreams-mt.so")
1055 self.path("libboost_iostreams-mt.so.1.52.0")
1056 self.path("libboost_program_options-mt.so")
1057 self.path("libboost_program_options-mt.so.1.52.0")
1058 self.path("libboost_regex-mt.so")
1059 self.path("libboost_regex-mt.so.1.52.0")
1060 self.path("libboost_signals-mt.so")
1061 self.path("libboost_signals-mt.so.1.52.0")
1062 self.path("libboost_system-mt.so")
1063 self.path("libboost_system-mt.so.1.52.0")
1064 self.path("libboost_thread-mt.so")
1065 self.path("libboost_thread-mt.so.1.52.0")
1066
1045 self.end_prefix("lib") 1067 self.end_prefix("lib")
1046 1068
1047 # Vivox runtimes and libs 1069 # Vivox runtimes and libs
@@ -1124,11 +1146,48 @@ class Linux_x86_64Manifest(LinuxManifest):
1124# self.path("libpangoxft-1.0.so.0") # So we depend system gdk pixbufs and pango anyway. 1146# self.path("libpangoxft-1.0.so.0") # So we depend system gdk pixbufs and pango anyway.
1125 ##self.path("libpixman-1.so.0") 1147 ##self.path("libpixman-1.so.0")
1126 1148
1127 #self.end_prefix("gstreamer-plugins")
1128# [$PLOTR$] these two are not needed when STATIC_LIBOTR_ETC is on in .../linden/indra/CMakeLists.txt 1149# [$PLOTR$] these two are not needed when STATIC_LIBOTR_ETC is on in .../linden/indra/CMakeLists.txt
1129# self.path("libotr.so.2.2.0") 1150# self.path("libotr.so.2.2.0")
1130# self.path("libotr.so.2") 1151# self.path("libotr.so.2")
1131# [/$PLOTR$] 1152# [/$PLOTR$]
1153
1154#KILL IT WITH FIRE
1155 ## Gstreamer libs
1156 #self.end_prefix("gstreamer-plugins")
1157 #self.path("libgstbase-0.10.so.0")
1158 #self.path("libgstreamer-0.10.so.0")
1159 #self.path("libgstaudio-0.10.so.0")
1160 #self.path("libgstbase-0.10.so.0")
1161 #self.path("libgstcontroller-0.10.so.0")
1162 #self.path("libgstdataprotocol-0.10.so.0")
1163 #self.path("libgstinterfaces-0.10.so.0")
1164 #self.path("libgstnetbuffer-0.10.so.0")
1165 #self.path("libgstpbutils-0.10.so.0")
1166 #self.path("libgstriff-0.10.so.0")
1167 #self.path("libgstrtp-0.10.so.0")
1168 #self.path("libgstrtsp-0.10.so.0")
1169 #self.path("libgstsdp-0.10.so.0")
1170 #self.path("libgsttag-0.10.so.0")
1171 #self.path("libgstvideo-0.10.so.0")
1172
1173 # Wish I could kill it with fire. lol
1174 self.path("libboost_date_time-mt.so")
1175 self.path("libboost_date_time-mt.so.1.52.0")
1176 self.path("libboost_filesystem-mt.so")
1177 self.path("libboost_filesystem-mt.so.1.52.0")
1178 self.path("libboost_iostreams-mt.so")
1179 self.path("libboost_iostreams-mt.so.1.52.0")
1180 self.path("libboost_program_options-mt.so")
1181 self.path("libboost_program_options-mt.so.1.52.0")
1182 self.path("libboost_regex-mt.so")
1183 self.path("libboost_regex-mt.so.1.52.0")
1184 self.path("libboost_signals-mt.so")
1185 self.path("libboost_signals-mt.so.1.52.0")
1186 self.path("libboost_system-mt.so")
1187 self.path("libboost_system-mt.so.1.52.0")
1188 self.path("libboost_thread-mt.so")
1189 self.path("libboost_thread-mt.so.1.52.0")
1190
1132 self.end_prefix("lib64") 1191 self.end_prefix("lib64")
1133 1192
1134 1193
diff --git a/linden/indra/newview/viewerinfo.cpp b/linden/indra/newview/viewerinfo.cpp
index 1762096..07ec740 100644
--- a/linden/indra/newview/viewerinfo.cpp
+++ b/linden/indra/newview/viewerinfo.cpp
@@ -30,13 +30,15 @@ namespace ViewerInfo
30 30
31 // These are intentionally defined here instead of in the header, 31 // These are intentionally defined here instead of in the header,
32 // because they should NOT be read directly. Use the functions. 32 // because they should NOT be read directly. Use the functions.
33
34 // NOTE: Some parts of the build system scan this file looking for version numbers and such, commenting out sections confuses that.
33 const std::string NAME = "meta-impy"; 35 const std::string NAME = "meta-impy";
34 const std::string VARNT = ""; 36 const std::string VARNT = "";
35 const S32 MAJOR = 1; 37 const S32 MAJOR = 1;
36 const S32 MINOR = 4; 38 const S32 MINOR = 4;
37 const S32 PATCH = 0; 39 const S32 PATCH = 0;
38 const S32 RLEAS = 3; // increment for each beta/RC/release 40 const S32 RLEAS = 3; // increment for each beta/RC/release
39 const std::string EXTRA = "beta 2"; 41 const std::string EXTRA = "exp 1";
40 42
41 // Mac OS X bundle identifier. Should match the one in Info.plist. 43 // Mac OS X bundle identifier. Should match the one in Info.plist.
42 const std::string BUNDLE_ID = "org.imprudenceviewer.viewer"; 44 const std::string BUNDLE_ID = "org.imprudenceviewer.viewer";
diff --git a/linden/indra/newview/windlightsettingsupdate.cpp b/linden/indra/newview/windlightsettingsupdate.cpp
deleted file mode 100644
index ad6e7c9..0000000
--- a/linden/indra/newview/windlightsettingsupdate.cpp
+++ /dev/null
@@ -1,200 +0,0 @@
1/*
2 * @file kowopenregionsettings.cpp
3 * @brief Handler for OpenRegionInfo event queue message.
4 *
5 * Copyright (c) 2010, Patrick Sapinski
6 *
7 * The source code in this file ("Source Code") is provided to you
8 * under the terms of the GNU General Public License, version 2.0
9 * ("GPL"). Terms of the GPL can be found in doc/GPL-license.txt in
10 * this distribution, or online at
11 * http://secondlifegrid.net/programs/open_source/licensing/gplv2
12 *
13 * There are special exceptions to the terms and conditions of the GPL as
14 * it is applied to this Source Code. View the full text of the exception
15 * in the file doc/FLOSS-exception.txt in this software distribution, or
16 * online at
17 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
18 *
19 * By copying, modifying or distributing this software, you acknowledge
20 * that you have read and understood your obligations described above,
21 * and agree to abide by those obligations.
22 *
23 * ALL SOURCE CODE IS PROVIDED "AS IS." THE AUTHOR MAKES NO
24 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
25 * COMPLETENESS OR PERFORMANCE.
26 */
27
28#include "llviewerprecompiledheaders.h"
29#include "llhttpnode.h"
30#include "hippolimits.h"
31#include "llfloatertools.h"
32#include "llviewercontrol.h"
33#include "llagent.h"
34#include "llsurface.h"
35#include "llviewerregion.h"
36#include "llviewerobject.h"
37
38#include "linden_common.h"
39#include "llwaterparammanager.h"
40#include "llwaterparamset.h"
41#include "llwlparammanager.h"
42#include "llwlparamset.h"
43#include "message.h"
44#include "meta7windlight.h"
45#include "lightshare.h"
46#include "wlsettingsmanager.h"
47
48//DEBUG includes
49//#include "llsdserialize.h" //LLSDNotationStreamer - for dumping LLSD to string
50
51class WindLightSettingsUpdate : public LLHTTPNode
52{
53 /*virtual*/ void post(
54 LLHTTPNode::ResponsePtr response,
55 const LLSD& context,
56 const LLSD& input) const
57 {
58 if (!input.isMap() || !input.has("body"))
59 {
60 llinfos << "malformed WindLightSettingsUpdate update!" << llendl;
61 return;
62 }
63 LLWaterParamSet* mWater;
64 LLWLParamSet* mSky;
65 LLUUID* mWaterNormal;
66
67 mWater = new LLWaterParamSet();
68 mSky = new LLWLParamSet();
69 mWaterNormal = new LLUUID();
70
71 LLSD body = input["body"];
72
73 mWater->set("waterFogColor",
74 body["waterColorX"].asReal() / 256.f,
75 body["waterColorY"].asReal() / 256.f,
76 body["waterColorZ"].asReal() / 256.f,
77 body["waterColorW"].asReal() / 256.f);
78 mWater->set("waterFogDensity", body["waterFogDensityExponent"].asReal());
79 mWater->set("underWaterFogMod", body["underwaterFogModifier"].asReal());
80 mWater->set("normScale", body["reflectionWaveletScaleX"].asReal(),
81 body["reflectionWaveletScaleY"].asReal(),
82 body["reflectionWaveletScaleZ"].asReal());
83 mWater->set("fresnelScale", body["fresnelScale"].asReal());
84 mWater->set("fresnelOffset", body["fresnelOffset"].asReal());
85 mWater->set("scaleAbove", body["refractScaleAbove"].asReal());
86 mWater->set("scaleBelow", body["refractScaleBelow"].asReal());
87 mWater->set("blurMultiplier", body["blurMultiplier"].asReal());
88 mWater->set("wave2Dir", body["bigWaveDirectionX"].asReal(),
89 body["bigWaveDirectionY"].asReal());
90 mWater->set("wave1Dir", body["littleWaveDirectionX"].asReal(),
91 body["littleWaveDirectionY"].asReal());
92 mWaterNormal->parseUUID(body["normalMapTexture"].asUUID().asString(), mWaterNormal);
93
94 mSky->setSunAngle(body["sunMoonPosition"].asReal());
95 mSky->setEastAngle(body["eastAngle"].asReal());
96
97 mSky->set("sunlight_color",
98 body["sunMoonColorX"].asReal() * 3.0f,
99 body["sunMoonColorY"].asReal() * 3.0f,
100 body["sunMoonColorZ"].asReal() * 3.0f,
101 body["sunMoonColorW"].asReal() * 3.0f);
102
103 mSky->set("ambient",
104 body["ambientX"].asReal() * 3.0f,
105 body["ambientY"].asReal() * 3.0f,
106 body["ambientZ"].asReal() * 3.0f,
107 body["ambientW"].asReal() * 3.0f);
108
109 mSky->set("blue_horizon",
110 body["horizonX"].asReal() * 2.0f,
111 body["horizonY"].asReal() * 2.0f,
112 body["horizonZ"].asReal() * 2.0f,
113 body["horizonW"].asReal() * 2.0f);
114
115 mSky->set("blue_density",
116 body["blueDensityX"].asReal(),
117 body["blueDensityY"].asReal(),
118 body["blueDensityZ"].asReal(),
119 1.0);
120
121 mSky->set("haze_horizon",
122 body["hazeHorizon"].asReal(),
123 body["hazeHorizon"].asReal(),
124 body["hazeHorizon"].asReal(),
125 1.f);
126
127 mSky->set("haze_density",
128 body["hazeDensity"].asReal(),
129 0.f, 0.f, 1.f);
130
131 mSky->set("cloud_shadow",
132 body["cloudCoverage"].asReal(),
133 0.f, 0.f, 1.f);
134
135 mSky->set("density_multiplier",
136 body["densityMultiplier"].asReal() / 1000.0f,
137 0.f, 0.f, 1.f);
138
139 mSky->set("distance_multiplier",
140 body["distanceMultiplier"].asReal(),
141 0.f, 0.f, 1.f);
142
143 mSky->set("max_y",
144 body["maxAltitude"].asReal(),
145 0.f, 0.f, 1.f);
146
147 mSky->set("cloud_color",
148 body["cloudColorX"].asReal(),
149 body["cloudColorY"].asReal(),
150 body["cloudColorZ"].asReal(),
151 body["cloudColorW"].asReal());
152
153 mSky->set("cloud_pos_density1",
154 body["cloudXYDensityX"].asReal(),
155 body["cloudXYDensityY"].asReal(),
156 body["cloudXYDensityZ"].asReal(),
157 1.f);
158
159 mSky->set("cloud_pos_density2",
160 body["cloudDetailXYDensityX"].asReal(),
161 body["cloudDetailXYDensityY"].asReal(),
162 body["cloudDetailXYDensityZ"].asReal(),
163 1.f);
164
165 mSky->set("cloud_scale",
166 body["cloudScale"].asReal(),
167 0.f, 0.f, 1.f);
168
169 mSky->set("gamma",
170 body["sceneGamma"].asReal(),
171 0.f, 0.f, 1.f);
172
173 mSky->set("glow",
174 (2 - body["sunGlowSize"].asReal()) * 20,
175 0.f,
176 -body["sunGlowFocus"].asReal() * 5,
177 1.f);
178
179 mSky->setCloudScrollX(body["cloudScrollX"].asReal() + 10.0f);
180 mSky->setCloudScrollY(body["cloudScrollY"].asReal() + 10.0f);
181
182 mSky->setEnableCloudScrollX(!body["cloudScrollXLock"].asBoolean());
183 mSky->setEnableCloudScrollY(!body["cloudScrollYLock"].asBoolean());
184
185 mSky->setStarBrightness(body["starBrightness"].asReal());
186
187 mSky->set("fade", body["fade"].asReal());
188
189 //Update this here.. since it isn't a part of WL... go figure
190 gHippoLimits->skyUseClassicClouds = body["drawClassicClouds"].asBoolean();
191 gSavedSettings.setF32("ClassicCloudHeight",body["classicCloudHeight"].asReal());
192 gSavedSettings.setF32("ClassicCloudRange",body["classicCloudRange"].asReal());
193
194 WLSettingsManager::Apply(mSky, mWater, mWaterNormal);
195}
196};
197
198LLHTTPRegistration<WindLightSettingsUpdate>
199gHTTPRegistrationWindLightSettingsUpdate(
200 "/message/WindLightSettingsUpdate"); \ No newline at end of file
diff --git a/linden/indra/newview/wlfloatermanager.cpp b/linden/indra/newview/wlfloatermanager.cpp
index 63abe14..382244d 100644
--- a/linden/indra/newview/wlfloatermanager.cpp
+++ b/linden/indra/newview/wlfloatermanager.cpp
@@ -1,11 +1,11 @@
1/** 1/**
2* @file wlfloaterwindlightsend.cpp 2* @file wlfloaterwindlightsend.cpp
3* @brief WLFloaterWindLightSend class definition 3* @brief WLFloaterWindLightSend class definition
4* 4*
5* $LicenseInfo:firstyear=2007&license=viewergpl$ 5* $LicenseInfo:firstyear=2007&license=viewergpl$
6* 6*
7* Copyright (c) 2007-2009, Linden Research, Inc. 7* Copyright (c) 2007-2009, Linden Research, Inc.
8* 8*
9* Second Life Viewer Source Code 9* Second Life Viewer Source Code
10* The source code in this file ("Source Code") is provided by Linden Lab 10* The source code in this file ("Source Code") is provided by Linden Lab
11* to you under the terms of the GNU General Public License, version 2.0 11* to you under the terms of the GNU General Public License, version 2.0
@@ -13,17 +13,17 @@
13* ("Other License"), formally executed by you and Linden Lab. Terms of 13* ("Other License"), formally executed by you and Linden Lab. Terms of
14* the GPL can be found in doc/GPL-license.txt in this distribution, or 14* the GPL can be found in doc/GPL-license.txt in this distribution, or
15* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 15* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16* 16*
17* There are special exceptions to the terms and conditions of the GPL as 17* There are special exceptions to the terms and conditions of the GPL as
18* it is applied to this Source Code. View the full text of the exception 18* it is applied to this Source Code. View the full text of the exception
19* in the file doc/FLOSS-exception.txt in this software distribution, or 19* in the file doc/FLOSS-exception.txt in this software distribution, or
20* online at 20* online at
21* http://secondlifegrid.net/programs/open_source/licensing/flossexception 21* http://secondlifegrid.net/programs/open_source/licensing/flossexception
22* 22*
23* By copying, modifying or distributing this software, you acknowledge 23* By copying, modifying or distributing this software, you acknowledge
24* that you have read and understood your obligations described above, 24* that you have read and understood your obligations described above,
25* and agree to abide by those obligations. 25* and agree to abide by those obligations.
26* 26*
27* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO 27* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
28* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, 28* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
29* COMPLETENESS OR PERFORMANCE. 29* COMPLETENESS OR PERFORMANCE.
@@ -70,17 +70,17 @@
70#include "llviewerparcelmgr.h" 70#include "llviewerparcelmgr.h"
71#include "llparcel.h" 71#include "llparcel.h"
72#include "wlretrievesettings.h" 72#include "wlretrievesettings.h"
73#include "wlsettingsmanager.h" 73#include "llettherebelight.h"
74#include "wlfloaterwindlightsend.h" 74#include "wlfloaterwindlightsend.h"
75 75
76#undef max 76#undef max
77WLFloaterManager* WLFloaterManager::sWindLight; 77WLFloaterManager* WLFloaterManager::sWindLight;
78std::map<std::string, LLWLParamSet*> WLFloaterManager::mWLParamList; 78std::map<std::string, LLWLParamSet*> WLFloaterManager::mWLParamList;
79std::map<std::string, LLWaterParamSet*> WLFloaterManager::mWaterParamList; 79std::map<std::string, LLWaterParamSet*> WLFloaterManager::mWaterParamList;
80std::map<std::string, LLUUID*> WLFloaterManager::mWaterNormalParamList; 80std::map<std::string, LLUUID*> WLFloaterManager::mWaterNormalParamList;
81std::map<std::string, LLSD> WLFloaterManager::mMinAltParamList; 81std::map<std::string, LLSD> WLFloaterManager::mMinAltParamList;
82std::map<std::string, LLSD> WLFloaterManager::mMaxAltParamList; 82std::map<std::string, LLSD> WLFloaterManager::mMaxAltParamList;
83std::map<std::string, LLSD> WLFloaterManager::mFadeParamList; 83std::map<std::string, LLSD> WLFloaterManager::mFadeParamList;
84 84
85WLFloaterManager::WLFloaterManager() : LLFloater(std::string("windlight manager floater")) 85WLFloaterManager::WLFloaterManager() : LLFloater(std::string("windlight manager floater"))
86{ 86{
@@ -214,7 +214,7 @@ void WLFloaterManager::onShow(void* userData)
214 LLWaterParamSet* mWater = mgr->mWaterParamList[name]; 214 LLWaterParamSet* mWater = mgr->mWaterParamList[name];
215 LLUUID* mWaterNormal = mgr->mWaterNormalParamList[name]; 215 LLUUID* mWaterNormal = mgr->mWaterNormalParamList[name];
216 if(mSky != NULL && mWater != NULL && mWaterNormal != NULL) 216 if(mSky != NULL && mWater != NULL && mWaterNormal != NULL)
217 WLSettingsManager::Apply(mSky, mWater, mWaterNormal); 217 LightShare::applyMaybe(mWater, mWaterNormal, mSky);
218} 218}
219void WLFloaterManager::onSetToCurrent(void* userData) 219void WLFloaterManager::onSetToCurrent(void* userData)
220{ 220{
@@ -233,10 +233,10 @@ void WLFloaterManager::onSetToCurrent(void* userData)
233 if(name == "(Region Settings)") 233 if(name == "(Region Settings)")
234 { 234 {
235 type = 0; 235 type = 0;
236 } 236 }
237 237
238 if(mSky != NULL && mWater != NULL && mWaterNormal != NULL) 238 if(mSky != NULL && mWater != NULL && mWaterNormal != NULL)
239 WLFloaterWindLightSend::SendSettings(false, type, NULL, *mSky, *mWater, fade, minAlt, maxAlt, *mWaterNormal); 239 WLFloaterWindLightSend::SendSettings(false, type, NULL, *mSky, *mWater, fade, minAlt, maxAlt, *mWaterNormal);
240} 240}
241void WLFloaterManager::onRemove(void* userData) 241void WLFloaterManager::onRemove(void* userData)
242{ 242{
@@ -258,7 +258,7 @@ void WLFloaterManager::onRemove(void* userData)
258 } 258 }
259 259
260 if(mSky != NULL && mWater != NULL && mWaterNormal != NULL) 260 if(mSky != NULL && mWater != NULL && mWaterNormal != NULL)
261 WLFloaterWindLightSend::SendSettings(true, type, false, *mSky, *mWater, fade, minAlt, maxAlt, *mWaterNormal); 261 WLFloaterWindLightSend::SendSettings(true, type, false, *mSky, *mWater, fade, minAlt, maxAlt, *mWaterNormal);
262} 262}
263 263
264 264
@@ -269,13 +269,12 @@ void WLFloaterManager::UpdateFloater()
269 LLComboBox* comboBox = mgr->getChild<LLComboBox>("WLSettingsCombo"); 269 LLComboBox* comboBox = mgr->getChild<LLComboBox>("WLSettingsCombo");
270 comboBox->clear(); 270 comboBox->clear();
271 comboBox->removeall(); 271 comboBox->removeall();
272 std::map<std::string, LLWLParamSet*>::iterator mIt = 272 std::map<std::string, LLWLParamSet*>::iterator mIt =
273 WLFloaterManager::instance()->mWLParamList.begin(); 273 WLFloaterManager::instance()->mWLParamList.begin();
274 for(; mIt != WLFloaterManager::instance()->mWLParamList.end(); mIt++) 274 for(; mIt != WLFloaterManager::instance()->mWLParamList.end(); mIt++)
275 { 275 {
276 comboBox->add(mIt->first); 276 comboBox->add(mIt->first);
277 } 277 }
278 //Reorder them 278 //Reorder them
279 comboBox->sortByName(); 279 comboBox->sortByName();
280} 280}
281
diff --git a/linden/indra/newview/wlretrievesettings.cpp b/linden/indra/newview/wlretrievesettings.cpp
index afa84f2..a8ed2b5 100644
--- a/linden/indra/newview/wlretrievesettings.cpp
+++ b/linden/indra/newview/wlretrievesettings.cpp
@@ -1,11 +1,11 @@
1/** 1/**
2* @file wlfloaterwindlightsend.cpp 2* @file wlfloaterwindlightsend.cpp
3* @brief WLFloaterWindLightSend class definition 3* @brief WLFloaterWindLightSend class definition
4* 4*
5* $LicenseInfo:firstyear=2007&license=viewergpl$ 5* $LicenseInfo:firstyear=2007&license=viewergpl$
6* 6*
7* Copyright (c) 2007-2009, Linden Research, Inc. 7* Copyright (c) 2007-2009, Linden Research, Inc.
8* 8*
9* Second Life Viewer Source Code 9* Second Life Viewer Source Code
10* The source code in this file ("Source Code") is provided by Linden Lab 10* The source code in this file ("Source Code") is provided by Linden Lab
11* to you under the terms of the GNU General Public License, version 2.0 11* to you under the terms of the GNU General Public License, version 2.0
@@ -13,17 +13,17 @@
13* ("Other License"), formally executed by you and Linden Lab. Terms of 13* ("Other License"), formally executed by you and Linden Lab. Terms of
14* the GPL can be found in doc/GPL-license.txt in this distribution, or 14* the GPL can be found in doc/GPL-license.txt in this distribution, or
15* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 15* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16* 16*
17* There are special exceptions to the terms and conditions of the GPL as 17* There are special exceptions to the terms and conditions of the GPL as
18* it is applied to this Source Code. View the full text of the exception 18* it is applied to this Source Code. View the full text of the exception
19* in the file doc/FLOSS-exception.txt in this software distribution, or 19* in the file doc/FLOSS-exception.txt in this software distribution, or
20* online at 20* online at
21* http://secondlifegrid.net/programs/open_source/licensing/flossexception 21* http://secondlifegrid.net/programs/open_source/licensing/flossexception
22* 22*
23* By copying, modifying or distributing this software, you acknowledge 23* By copying, modifying or distributing this software, you acknowledge
24* that you have read and understood your obligations described above, 24* that you have read and understood your obligations described above,
25* and agree to abide by those obligations. 25* and agree to abide by those obligations.
26* 26*
27* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO 27* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
28* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, 28* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
29* COMPLETENESS OR PERFORMANCE. 29* COMPLETENESS OR PERFORMANCE.
@@ -67,8 +67,7 @@
67#include "hippolimits.h" 67#include "hippolimits.h"
68#include "wlfloaterwindlightsend.h" 68#include "wlfloaterwindlightsend.h"
69#include "llviewerregion.h" 69#include "llviewerregion.h"
70#include "wlsettingsmanager.h" 70#include "llettherebelight.h"
71#include "lightshare.h"
72 71
73#include "linden_common.h" 72#include "linden_common.h"
74#include "llviewercontrol.h" 73#include "llviewercontrol.h"
@@ -93,7 +92,7 @@ void retrieveWindlightSettings::result(const LLSD& content)
93 for(LLSD::array_const_iterator wls = content["WindLight"].beginArray(); 92 for(LLSD::array_const_iterator wls = content["WindLight"].beginArray();
94 wls != content["WindLight"].endArray(); 93 wls != content["WindLight"].endArray();
95 ++wls) 94 ++wls)
96 { 95 {
97 LLSD windLightLLSD = *wls; 96 LLSD windLightLLSD = *wls;
98 LLWaterParamSet* mWater; 97 LLWaterParamSet* mWater;
99 LLWLParamSet* mSky; 98 LLWLParamSet* mSky;
@@ -235,4 +234,4 @@ void retrieveWindlightSettings::error(U32 status, const std::string& reason)
235{ 234{
236 LL_INFOS("Inventory") << "retrieveWindlightSettings::error " 235 LL_INFOS("Inventory") << "retrieveWindlightSettings::error "
237 << status << ": " << reason << LL_ENDL; 236 << status << ": " << reason << LL_ENDL;
238} \ No newline at end of file 237}
diff --git a/linden/indra/newview/wlsettingsmanager.cpp b/linden/indra/newview/wlsettingsmanager.cpp
deleted file mode 100644
index c0a07e1..0000000
--- a/linden/indra/newview/wlsettingsmanager.cpp
+++ /dev/null
@@ -1,253 +0,0 @@
1/**
2* @file wlfloaterwindlightsend.cpp
3* @brief WLFloaterWindLightSend class definition
4*
5* $LicenseInfo:firstyear=2007&license=viewergpl$
6*
7* Copyright (c) 2007-2009, 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
21* 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
35#include "llfloaterwindlight.h"
36
37#include "pipeline.h"
38#include "llsky.h"
39
40#include "llsliderctrl.h"
41#include "llmultislider.h"
42#include "llmultisliderctrl.h"
43#include "llspinctrl.h"
44#include "llcheckboxctrl.h"
45#include "lluictrlfactory.h"
46#include "llviewercamera.h"
47#include "llcombobox.h"
48#include "lllineeditor.h"
49#include "llfloaterdaycycle.h"
50#include "lltabcontainer.h"
51#include "llboost.h"
52
53#include "llagent.h"
54#include "llinventorymodel.h"
55#include "llviewerinventory.h"
56
57#include "v4math.h"
58#include "llviewerdisplay.h"
59#include "llviewercontrol.h"
60#include "llviewerwindow.h"
61#include "llsavedsettingsglue.h"
62
63#include "llwlparamset.h"
64#include "llwlparammanager.h"
65#include "llwaterparammanager.h"
66#include "llpostprocess.h"
67#include "hippolimits.h"
68#include "wlfloaterwindlightsend.h"
69#include "llviewerregion.h"
70#include "wlsettingsmanager.h"
71#include "lightshare.h"
72
73#include "linden_common.h"
74#include "llviewercontrol.h"
75#include "message.h"
76#include "meta7windlight.h"
77#include "llworld.h"
78
79#undef max
80
81const std::string WLSettingsManager::wlWaterPresetName = "(Region settings)";
82const std::string WLSettingsManager::wlSkyPresetName = "(Region settings)";
83
84LLTimer* WLSettingsManager::wlIgnoreTimer = new LLTimer();
85bool WLSettingsManager::wlIgnoreRegion = false;
86LLWaterParamSet* WLSettingsManager::mWater = NULL;
87LLWLParamSet* WLSettingsManager::mSky = NULL;
88LLUUID* WLSettingsManager::mWaterNormal = NULL;
89
90void WLSettingsManager::Apply( LLWLParamSet* Sky, LLWaterParamSet* Water, LLUUID* WaterNormal )
91{
92 if( gSavedSettings.getU32("LightShareAllowed") <= WindlightMessage::LIGHTSHARE_NEVER )
93 return;
94
95 std::string water = LLWaterParamManager::instance()->mCurParams.mName;
96 std::string sky = LLWLParamManager::instance()->mCurParams.mName;
97
98 // If they are using region settings already, or LightShare is
99 // always allowed, just apply the new settings, don't bother asking.
100 if( gSavedSettings.getU32("LightShareAllowed") == WindlightMessage::LIGHTSHARE_ALWAYS ||
101 (sky == wlSkyPresetName && water == wlWaterPresetName) )
102 {
103 mSky = Sky;
104 mWater = Water;
105 mWaterNormal = WaterNormal;
106 Apply();
107 return;
108 }
109
110 if( !wlignoreTimerHasExpired() )
111 {
112 // The user recently ignored a windlight message, so ignore
113 // this one too, and restart the timer.
114 wlrestartIgnoreTimer();
115 return;
116 }
117
118 if(wlIgnoreRegion)
119 {
120 // We are ignoring new settings until user enters a new region.
121 return;
122 }
123
124 if( gSavedSettings.getU32("LightShareAllowed") == WindlightMessage::LIGHTSHARE_ASK &&
125 mSky == NULL && mWater == NULL)
126 {
127 // No most recent, so store this and create notification
128 // asking the user whether to apply or not.
129 mSky = Sky;
130 mWater = Water;
131 mWaterNormal = WaterNormal;
132 LLNotifications::instance().add("ConfirmLightShare", LLSD(), LLSD(),
133 boost::bind(&wlapplyCallback, _1, _2));
134 }
135 else
136 {
137 // No new notification (to avoid spamming the user, we do keep the saves from above)
138 mSky = Sky;
139 mWater = Water;
140 mWaterNormal = WaterNormal;
141 }
142}
143
144// static
145bool WLSettingsManager::wlapplyCallback(const LLSD& notification,
146 const LLSD& response)
147{
148 S32 option = LLNotification::getSelectedOption(notification, response);
149
150 switch(option)
151 {
152 case 0:{
153 // "Apply"
154 Apply();
155 break;
156 }
157 case 1:{
158 // "Not Now", ignore until the region stops spamming
159 wlrestartIgnoreTimer();
160 break;
161 }
162 case 2:{
163 // "Ignore", ignore all until user leaves the region
164 wlIgnoreRegion = true;
165 break;
166 }
167 }
168 return false;
169}
170
171//static
172void WLSettingsManager::Apply()
173{
174 LLWaterParamManager* water_mgr = LLWaterParamManager::instance();
175 LLWLParamManager* sky_mgr = LLWLParamManager::instance();
176
177 F32 fade = 0; //Instant
178 bool error;
179 fade = mSky->getFloat("fade", error);
180
181 mWater->mName = wlWaterPresetName;
182 if(fade != 0 && water_mgr->mCurParams.mName == wlWaterPresetName)//Load the settings forcefully the first time
183 {
184 LLWaterParamSet oldWset = water_mgr->mCurParams;
185 //This still needs done so that we update right, but load it to the old
186 water_mgr->removeParamSet( wlWaterPresetName, false );
187 water_mgr->addParamSet( wlWaterPresetName, oldWset );
188 water_mgr->savePreset( wlWaterPresetName );
189 water_mgr->loadPreset( wlWaterPresetName, true );
190 water_mgr->setNormalMapID( *mWaterNormal );
191 //Then mix with the new
192 water_mgr->SetMixTime(mWater, fade);
193 }
194 else
195 {
196 //Instant if fade is 0
197 water_mgr->removeParamSet( wlWaterPresetName, false );
198 water_mgr->addParamSet( wlWaterPresetName, *mWater );
199 water_mgr->savePreset( wlWaterPresetName );
200 water_mgr->loadPreset( wlWaterPresetName, true );
201 water_mgr->setNormalMapID( *mWaterNormal );
202 }
203
204 mSky->mName = wlSkyPresetName;
205 if(fade != 0 && sky_mgr->mCurParams.mName == wlSkyPresetName)//Load the settings forcefully the first time
206 {
207 LLWLParamSet oldset = sky_mgr->mCurParams;
208 //This still needs done so that we update right, but load it to the old
209 sky_mgr->removeParamSet( wlSkyPresetName, true );
210 sky_mgr->addParamSet( wlSkyPresetName, oldset );
211 sky_mgr->savePreset( wlSkyPresetName );
212 sky_mgr->loadPreset( wlSkyPresetName, true );
213 //Then mix with the new
214 sky_mgr->SetMixTime(mSky, fade);
215 }
216 else
217 {
218 //Instant if fade is 0
219 sky_mgr->mAnimator.mIsRunning = false;
220 sky_mgr->mAnimator.mUseLindenTime = false;
221 sky_mgr->removeParamSet( wlSkyPresetName, false );
222 sky_mgr->addParamSet( wlSkyPresetName, *mSky );
223 sky_mgr->savePreset( wlSkyPresetName );
224 sky_mgr->loadPreset( wlSkyPresetName, true );
225 }
226
227 LLWorld::getInstance()->rebuildClouds(gAgent.getRegion());
228
229 mSky = NULL;
230 mWater = NULL;
231 mWaterNormal = NULL;
232}
233
234// static
235void WLSettingsManager::wlresetRegion()
236{
237 wlIgnoreRegion = false;
238 LLWorld::getInstance()->rebuildClouds(gAgent.getRegion());
239}
240
241// static
242void WLSettingsManager::wlrestartIgnoreTimer()
243{
244 F32 time = gSavedSettings.getF32("LightShareIgnoreTimer");
245 wlIgnoreTimer->start();
246 wlIgnoreTimer->setTimerExpirySec( (time < 0) ? 0 : time );
247}
248
249// static
250bool WLSettingsManager::wlignoreTimerHasExpired()
251{
252 return wlIgnoreTimer->hasExpired();
253} \ No newline at end of file
diff --git a/linden/indra/newview/wlsettingsmanager.h b/linden/indra/newview/wlsettingsmanager.h
deleted file mode 100644
index 5a0e9e7..0000000
--- a/linden/indra/newview/wlsettingsmanager.h
+++ /dev/null
@@ -1,90 +0,0 @@
1/**
2 * @file wlfloaterwindlightsend.h
3 * @brief WLFloaterWindLightSend class definition
4 *
5 * $LicenseInfo:firstyear=2007&license=viewergpl$
6 *
7 * Copyright (c) 2007-2009, 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
21 * 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 * Menu for adjusting the atmospheric settings of the world
35 */
36
37#ifndef WINDLIGHTSETTINGSMANAGER_H
38#define WINDLIGHTSETTINGSMANAGER_H
39
40#include <string>
41#include "llwlparamset.h"
42#include "llwaterparamset.h"
43#include "lluuid.h"
44
45class LLSD;
46class LLTimer;
47class LLUUID;
48class LLWaterParamSet;
49class LLWLParamSet;
50
51
52/// Menuing system for all of windlight's functionality
53class WLSettingsManager
54{
55public:
56
57 static LLTimer* wlIgnoreTimer;
58 static bool wlIgnoreRegion;
59
60 // Called after the user has entered a new region, to reset the
61 // "ignore while in this region" state.
62 static void wlresetRegion();
63
64 static void Apply( LLWLParamSet* Sky, LLWaterParamSet* Water, LLUUID* WaterNormal );
65
66 // Callback when the user interacts with the notification.
67 static bool wlapplyCallback(const LLSD& notification,
68 const LLSD& response);
69
70 static LLWaterParamSet* mWater;
71 static LLWLParamSet* mSky;
72 static LLUUID* mWaterNormal;
73
74private:
75 static void Apply();
76
77 // The name of the water preset where the region settings are stored.
78 static const std::string wlWaterPresetName;
79
80 // The name of the sky preset where the region settings are stored.
81 static const std::string wlSkyPresetName;
82
83 // Restart the timer for temporarily ignoring settings.
84 static void wlrestartIgnoreTimer();
85
86 // Returns true if the ignore timer has expired (i.e. new settings
87 // should not be ignored anymore).
88 static bool wlignoreTimerHasExpired();
89};
90#endif \ No newline at end of file
diff --git a/linden/indra/test_apps/llplugintest/CMakeLists.txt b/linden/indra/test_apps/llplugintest/CMakeLists.txt
index a6cb740..91ba2db 100644
--- a/linden/indra/test_apps/llplugintest/CMakeLists.txt
+++ b/linden/indra/test_apps/llplugintest/CMakeLists.txt
@@ -311,7 +311,7 @@ endif (DARWIN OR LINUX)
311if (DARWIN) 311if (DARWIN)
312 # path inside the app bundle where we'll need to copy plugins and other related files 312 # path inside the app bundle where we'll need to copy plugins and other related files
313 set(PLUGINS_DESTINATION_DIR 313 set(PLUGINS_DESTINATION_DIR
314 ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llmediaplugintest.app/Contents/Resources 314 ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/llmediaplugintest.app/Contents/Resources
315 ) 315 )
316 316
317 # create the Contents/Resources directory 317 # create the Contents/Resources directory
@@ -326,7 +326,7 @@ if (DARWIN)
326 ) 326 )
327else (DARWIN) 327else (DARWIN)
328 set(PLUGINS_DESTINATION_DIR 328 set(PLUGINS_DESTINATION_DIR
329 ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/ 329 ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/
330 ) 330 )
331endif (DARWIN) 331endif (DARWIN)
332 332